%YAML 1.2 --- # http://www.sublimetext.com/docs/3/syntax.html name: Manpage file_extensions: - man scope: source.man variables: section_heading: '^(?!#)\S.*$' command_line_option: '(--?[A-Za-z0-9][_A-Za-z0-9-]*)' contexts: prototype: # ignore syntax test lines - match: '^#' push: - meta_scope: comment.syntax-test.man - match: $\n? pop: true main: - match: ^ push: first_line first_line: - match: '([A-Z0-9_\-]+)(\()([^)]+)(\))\s*' captures: 1: meta.preprocessor.man 2: keyword.operator.man 3: string.quoted.other.man 4: keyword.operator.man push: - match: (?:[\w'-]+|\s(?!\s)) scope: markup.heading.title.man - match: \s\s pop: true - match: '(?=\S)' pop: true - match: '$' push: body body: # English, ..., ..., ..., Russian, ... - match: '^(?:SYNOPSIS|SYNTAX|SINTASSI|SKŁADNIA|СИНТАКСИС|書式)' scope: markup.heading.synopsis.man embed: synopsis escape: '(?={{section_heading}})' - match: '{{section_heading}}' scope: markup.heading.other.man embed: options # some man pages put command line options under the description heading escape: '(?={{section_heading}})' - include: function-call function-call: - match: '\b([A-Za-z0-9_\-]+)(\()([^)]*)(\))' captures: 1: entity.name.function.man 2: keyword.operator.man 3: constant.numeric.man 4: keyword.operator.man options: # command-line options like --option=value, --some-flag, or -x - match: '^[ ]{7}(?=-)' push: expect-command-line-option - match: '(?:[^a-zA-Z0-9_-]|^|\s){{command_line_option}}' captures: 1: entity.name.command-line-option push: - match: '=' scope: keyword.operator.man set: - match: '[^],.() ]+' scope: variable.parameter.man pop: true - match: $ pop: true - match: '' pop: true - include: function-call expect-command-line-option: - match: '[A-Za-z0-9-]+' scope: entity.name.command-line-option.man - match: '(\[)(=)' captures: 2: keyword.operator.man push: expect-parameter - match: '\[' push: - meta_scope: entity.name.command-line-option.man - match: '\]' pop: true - match: '=' scope: keyword.operator.man push: expect-parameter - match: (?=.*\.) pop: true - match: '\s' push: expect-parameter - match: '(,)\s*' captures: 1: punctuation.separator.man - match: $|(?=\]) pop: true expect-parameter: - match: '[A-Za-z0-9-]+' scope: variable.parameter.man - match: \| scope: keyword.operator.logical.man - match: '$|(?=[],]|{{command_line_option}})' pop: true synopsis: #- include: scope:source.c - match: \[ scope: punctuation.section.brackets.begin.man push: command-line-option-or-pipe - include: options command-line-option-or-pipe: - match: (\|)\s* captures: 1: keyword.operator.logical.man #- match: (?={{command_line_option}}) - match: (?=-) push: - match: (?=\s*\|) pop: true - include: expect-command-line-option - match: \] scope: punctuation.section.brackets.end.man pop: true - match: \[ scope: punctuation.section.brackets.begin.man push: command-line-option-or-pipe