%YAML 1.2 --- # http://www.sublimetext.com/docs/3/syntax.html name: Anselme comment: "Anselme v25, and probably later, syntax" file_extensions: - ans - anselme scope: source.anselme variables: identifier: '[^\~\`\^\+\-\=\<\>\/\[\]\*\{\}\|\\\_\!\?\,\;\:\(\)\"\@\&\$\#\%\.\d\s][^\~\`\^\+\-\=\<\>\/\[\]\*\{\}\|\\\_\!\?\,\;\:\(\)\"\@\&\$\#\%\.]*' operator: '[;:=+-/*%^,~?#|&!> scope: keyword.control.conditional.anselme push: text - match: ^\s*:~?[$!%] scope: keyword.other.anselme push: function_definition_start - match: ^\s*\:~? scope: keyword.other.anselme push: variable_definition_start - match: ^\s* push: text # Text lines text: - meta_scope: text.anselme - match: \\. scope: constant.character.escape.anselme - match: '[~#]' scope: keyword.operator.anselme push: expression - include: string_interpolable - include: string_subtextable - include: pop_on_line_end # Function definition function_definition_start: - meta_scope: meta.function.anselme - match: '({{identifier}}|_?{{operator}}_?|\{\}|\(\))(?:(:)({{identifier}}))?' captures: 1: entity.name.function.anselme 2: punctuation.separator.anselme 3: entity.name.function.anselme set: function_definition_args - include: pop_on_line_end function_definition_args: - match: \( scope: punctuation.section.parens.start.anselme set: parameter_paren - include: pop_on_line_end parameter_paren: - meta_scope: meta.function.parameters.anselme - match: '({{identifier}})(?:(:)({{identifier}}))?(=|::)' captures: 1: variable.parameter.anselme 2: punctuation.separator.anselme 3: variable.parameter.anselme 4: keyword.operator.anselme push: parameter_default - match: '({{identifier}})(?:(:)({{identifier}}))?' captures: 1: variable.parameter.anselme 2: punctuation.separator.anselme 3: variable.parameter.anselme - match: ',' scope: punctuation.separator.anselme - match: \) scope: punctuation.section.parens.end.anselme pop: true - include: pop_on_line_end parameter_default: - match: '(?=,|\))' scope: punctuation.separator.anselme pop: true - include: expression # Variable definition variable_definition_start: - match: '(:)\s*({{identifier}})(?:(:)({{identifier}}))?' captures: 1: keyword.other.anselme 2: variable.other.constant.anselme 3: punctuation.separator.anselme 4: variable.other.constant.anselme set: variable_definition_value - match: '(@?)\s*({{identifier}})(?:(:)({{identifier}}))?' captures: 1: keyword.other.anselme 2: variable.other.anselme 3: punctuation.separator.anselme 4: variable.other.anselme set: variable_definition_value - include: pop_on_line_end variable_definition_value: - match: \= scope: keyword.operator.assignment.anselme push: expression - include: pop_on_line_end # Expressions expression: - match: \s+ - match: \d*\.\d+|\d+ scope: constant.numeric.anselme - match: \( scope: punctuation.section.parens.start.anselme push: paren - match: \) scope: invalid.illegal.stray-paren-end.anselme - match: \%\[ scope: punctuation.section.brackets.start.anselme push: string_subtext - match: \[ scope: punctuation.section.brackets.start.anselme push: list - match: \] scope: invalid.illegal.stray-bracket-end.anselme - match: \{ scope: punctuation.section.braces.start.anselme push: map - match: \{ scope: invalid.illegal.stray-brace-end.anselme - match: '({{identifier}})(?=\(|!\s*(?!\(|{{identifier}}|\[|\{))' scope: variable.function.anselme - match: '({{identifier}})(=)(?!{{operator}})' captures: 1: string.unquoted.anselme 2: keyword.operator.anselme - match: '{{identifier}}' scope: variable.other.anselme - match: '(?