{ "name": "AMPL", "scopeName": "source.ampl", "patterns": [ { "include": "#general" }, { "include": "#argumentcurly" }, { "include": "#argumentbracket" } ], "repository": { "argumentbracket": { "begin": "\\[", "end": "\\]", "patterns": [ { "include": "#general" }, { "name": "meta.function-call.arguments.ampl", "match": "\\w" } ] }, "argumentcurly": { "begin": "\\{", "end": "\\}", "patterns": [ { "include": "#general" }, { "name": "meta.function-call.arguments.ampl", "match": "." } ] }, "blockcomment": { "name": "comment.slashstar.ampl", "contentName": "comment.block.documentation.ampl", "begin": "/\\*", "end": "\\*/" }, "doublequotestring": { "name": "string.quoted.double.ampl", "begin": "\"", "end": "\"", "patterns": [ { "name": "entity.name.class.ampl", "match": "%(\\w+%|\\d+)" } ], "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.ampl" } }, "endCaptures": { "0": { "name": "punctuation.definition.string.end.ampl" } } }, "general": { "patterns": [ { "include": "#linecomment" }, { "include": "#blockcomment" }, { "include": "#singlequotestring" }, { "include": "#doublequotestring" }, { "include": "#number" }, { "include": "#keyword" }, { "include": "#suffix" }, { "include": "#math" }, { "include": "#operator" } ] }, "keyword": { "name": "keyword.control.ampl", "match": "(?i)\\b(minimize|maximize|objective|coeff|coef|cover|obj|default|from|to|to_come|net_in|net_out|dimen|dimension|integer|binary|set|param|var|node|ordered|circular|reversed|symbolic|arc|check|close|display|drop|include|print|printf|quit|reset|restore|solve|update|write|shell|model|data|option|let|solution|fix|unfix|end|function|pipe|format|if|then|else|and|or|exists|forall|in|not|within|while|repeat|for|subject to|subj to|s\\.t\\.|card|next|nextw|prev|prevw|first|last|member|ord|ord0)\\b" }, "linecomment": { "name": "comment.line.sharp.ampl", "match": "(#.*)(?!\\[\\[).*$\\n?", "captures": { "1": { "name": "punctuation.definition.comment.gms" } } }, "math": { "name": "keyword.operator.ampl", "match": "(?i)\\b(union|diff|difference|symdiff|sum|inter|intersect|intersection|cross|setof|by|less|mod|div|product|abs|acos|acosh|alias|asin|asinh|atan|atan2|atanh|ceil|cos|exp|floor|log|log10|max|min|precision|round|sin|sinh|sqrt|tan|tanh|trunc|Beta|Cauchy|Exponential|Gamma|Irand224|Normal|Poisson|Uniform|Uniform01)\\b" }, "number": { "name": "constant.numeric.ampl", "match": "(?\u003c![\\d.])\\b\\d+(\\.\\d+)?([eE]-?\\d+)?|\\.\\d+([eE]-?\\d+)?|(?i)([+-]?infinity)" }, "operator": { "name": "keyword.operator.ampl", "match": "(\\+|-|\\*|\\/|\\*\\*|=|\u003c=?|\u003e=?|==|\\||\\^|\u003c|\u003e|!|\\.\\.|:=|\u0026|!=|:|/)" }, "singlequotestring": { "name": "string.quoted.single.ampl", "begin": "'", "end": "'", "patterns": [ { "name": "entity.name.class.ampl", "match": "%(\\w+%|\\d+)" } ], "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.ampl" } }, "endCaptures": { "0": { "name": "punctuation.definition.string.end.ampl" } } }, "suffix": { "name": "keyword.ampl", "match": "\\b\\w*.(lb|ub|lb0|lb1|lb2|lrc|ub0|ub1|ub2|urc|val|lbs|ubs|init|body|dinit|dual|init0|ldual|slack|udual|lslack|uslack|dinit0)|(\u003c\u003c|\u003e\u003e)" } } }