%YAML 1.2 --- name: Man (*roff) scope: text.man file_extensions: \d first_line_match: ^([.'])TH\b variables: # Requests always have a period (‘.’) or an apostrophe (‘'’) # as the first character of the input line. cc: ^([.']) # cc - control character escape: \\f macro: (TH|SH|SS|TP|LP|PP|P|HP|RS|RE)\b numeric: '\b(-)?[0-9.]+\b' font_size: (SM|SB)\b font_alt: (BI|IB|RI|IR|BR|RB)\b font_style: ([BRI]) contexts: main: - match: (?={{cc}}) push: macros - match: (?={{escape}}{{font_style}}) push: font_styles with_prototype: - match: '(?={{escape}}|{{cc}})' meta_content_scope: markup.regular.man pop: true # Comments begin and finish at the end of the line - match: \\["#] scope: comment.man push: - meta_scope: comment.line.man - match: $ pop: true macros: - match: '{{cc}}{{macro}}' scope: keyword.control.man push: macros_line pop: true - match: '{{cc}}(?={{font_alt}})\b' scope: keyword.control.man push: font_alts with_prototype: - match: '(?={{escape}}|$)' pop: true pop: true - match: '{{cc}}(?={{font_style}})\b' scope: keyword.control.man push: font_styles with_prototype: - match: '(?={{escape}}|$)' pop: true pop: true - match: '{{cc}}\w+\b' scope: support.function.groff push: macros_line pop: true macros_line: - match: '"' scope: punctuation.definition.string.begin.man push: - meta_scope: string.quoted.double.man - match: '"' scope: punctuation.definition.string.end.man pop: true - match: '[^\\]\n' pop: true - match: '{{numeric}}' scope: constant.numeric.man - match: \w scope: variable.parameter.man - match: $ pop: true font_alts: - match: \bB scope: keyword.control.man push: font_alt_bold - match: \bR scope: keyword.control.man push: font_alt_regular - match: \bI scope: keyword.control.man push: font_alt_italic font_alt_bold: - match: I\s+ scope: keyword.control.man push: - meta_content_scope: markup.bold.man - include: start_and_end_string - match: '\s+' push: - meta_content_scope: markup.italic.man - clear_scopes: 1 - include: font_alt_odd_pop - match: R\s+ scope: keyword.control.man push: - meta_content_scope: markup.bold.man - include: start_and_end_string - match: '\s+' push: - meta_content_scope: markup.regular.man - clear_scopes: 1 - include: font_alt_odd_pop font_alt_regular: - match: B\s+ scope: keyword.control.man push: - meta_content_scope: markup.regular.man - include: start_and_end_string - match: '\s+' push: - meta_content_scope: markup.bold.man - clear_scopes: 1 - include: font_alt_odd_pop - match: I\s+ scope: keyword.control.man push: - meta_content_scope: markup.regular.man - include: start_and_end_string - match: '\s+' push: - meta_content_scope: markup.italic.man - clear_scopes: 1 - include: font_alt_odd_pop font_alt_italic: - match: B\s+ scope: keyword.control.man push: - meta_content_scope: markup.italic.man - include: start_and_end_string - match: '\s+' push: - meta_content_scope: markup.bold.man - clear_scopes: 1 - include: font_alt_odd_pop - match: R\s+ scope: keyword.control.man push: - meta_content_scope: markup.italic.man - include: start_and_end_string - match: '\s+' push: - meta_content_scope: markup.regular.man - clear_scopes: 1 - include: font_alt_odd_pop start_and_end_string: - match: '(?<=\s)"' push: - match: '"[^\s]' scope: invalid.illegal pop: true - match: '"' pop: true font_alt_odd_pop: - include: start_and_end_string - match: '\s+' pop: true font_styles: - match: (B\b|{{escape}}(B)) captures: 1: keyword.control.man 2: constant.character.escape.man push: - meta_content_scope: markup.bold.man - match: ({{escape}})(R) # only \fR captures: 1: keyword.control.man 2: constant.character.escape.man - match: (I\b|{{escape}}(I)) captures: 1: keyword.control.man 2: constant.character.escape.man push: - meta_content_scope: markup.italic.man