UNPKG

@wooorm/starry-night

Version:
1,301 lines (1,300 loc) 151 kB
// This is a TextMate grammar distributed by `starry-night`. // This grammar is developed at // <https://github.com/Alhadis/language-roff> // and licensed `isc`. // See <https://github.com/wooorm/starry-night> for more info. /** * @import {Grammar} from '@wooorm/starry-night' */ /** @type {Grammar} */ const grammar = { dependencies: [ 'source.ditroff', 'source.gremlin', 'source.ideal', 'source.pic' ], extensions: [ '.1', '.1', '.1in', '.1in', '.1m', '.1m', '.1x', '.1x', '.2', '.2', '.3', '.3', '.3in', '.3in', '.3m', '.3m', '.3p', '.3p', '.3pm', '.3pm', '.3qt', '.3qt', '.3x', '.3x', '.4', '.4', '.5', '.5', '.6', '.6', '.7', '.7', '.8', '.8', '.9', '.9', '.man', '.man', '.mdoc', '.mdoc', '.me', '.roff', '.tmac' ], injections: { 'L:meta.device-control.roff, L:meta.function.request.transparent-output & source.embedded.ditroff': {patterns: [{match: "[.']"}, {include: '#escapes-copymode'}]}, 'L:meta.function.request.external-command.*.roff source.embedded.shell': { patterns: [{include: '#escapes'}] }, 'L:text.roff': {patterns: [{include: '#c0'}]} }, names: [ 'groff', 'man', 'man-page', 'man-page', 'manpage', 'mdoc', 'nroff', 'roff', 'roff-manpage', 'troff' ], patterns: [ { begin: '\\A(?=x\\s*T\\s+(?:[a-z][-a-zA-Z0-9]*)\\s*$)', end: '(?=A)B', name: 'source.embedded.ditroff', patterns: [{include: 'source.ditroff'}] }, { begin: '\\A(?=X\\s+(?:495|crt|hp|impr|ps)(?:\\s+\\d+){3}[ \\t]*$)', end: '(?=A)B', name: 'source.embedded.context', patterns: [{include: 'source.context'}] }, {include: '#main'} ], repository: { '2-part-string': { captures: { 1: { name: 'punctuation.definition.string.begin.roff', patterns: [{include: '#c0'}] }, 2: { name: 'meta.segment.1.left.roff', patterns: [{include: '#escapes'}] }, 3: { name: 'punctuation.definition.string.middle.roff', patterns: [{include: '#c0'}] }, 4: { name: 'meta.segment.2.right.roff', patterns: [{include: '#escapes'}] }, 5: { name: 'punctuation.definition.string.end.roff', patterns: [{include: '#c0'}] } }, match: '\\G(.)((?:(?!\\1).)*)(\\1)((?:(?!\\1).)*)(\\1)', name: 'string.quoted.other.arbitrary-delimiter.2-part.roff' }, '3-part-title': { captures: { 1: { name: 'punctuation.definition.string.outer.begin.roff', patterns: [{include: '#c0'}] }, 2: { name: 'meta.segment.1.left.roff', patterns: [{include: '#escapes'}] }, 3: { name: 'punctuation.definition.string.inner.begin.roff', patterns: [{include: '#c0'}] }, 4: { name: 'meta.segment.2.centre.roff', patterns: [{include: '#escapes'}] }, 5: { name: 'punctuation.definition.string.inner.end.roff', patterns: [{include: '#c0'}] }, 6: { name: 'meta.segment.3.right.roff', patterns: [{include: '#escapes'}] }, 7: { name: 'punctuation.definition.string.outer.end.roff', patterns: [{include: '#c0'}] } }, match: '\\G[ \\t]*(.)((?:(?!\\1).)*)(\\1)((?:(?!\\1).)*)(\\1)((?:(?!\\1).)*)(\\1)', name: 'string.quoted.other.arbitrary-delimiter.3-part.roff' }, 'alternating-fonts': { patterns: [ { begin: "(?:^|\\G)([.'])[ \\t]*(BI)(?=\\s)", beginCaptures: { 0: {name: 'meta.function.man.macro.roff'}, 1: {name: 'punctuation.definition.function.macro.roff'}, 2: {name: 'entity.name.function.roff'} }, end: '(?<![^\\\\]\\\\|^\\\\)(?=(?!R)\\R|$)|(?=\\\\")', patterns: [ {include: '#odd-bold'}, {include: '#even-italic-after-bold'}, {include: '#even-italic'}, {include: '#bridge-escapes'} ] }, { begin: "(?:^|\\G)([.'])[ \\t]*(BR)(?=\\s)", beginCaptures: { 0: {name: 'meta.function.man.macro.roff'}, 1: {name: 'punctuation.definition.function.macro.roff'}, 2: {name: 'entity.name.function.roff'} }, end: '(?<![^\\\\]\\\\|^\\\\)(?=(?!R)\\R|$)|(?=\\\\")', patterns: [ {include: '#odd-bold'}, {include: '#even-roman-after-bold'}, {include: '#even-roman'}, {include: '#bridge-escapes'} ] }, { begin: "(?:^|\\G)([.'])[ \\t]*(IB)(?=\\s)", beginCaptures: { 0: {name: 'meta.function.man.macro.roff'}, 1: {name: 'punctuation.definition.function.macro.roff'}, 2: {name: 'entity.name.function.roff'} }, end: '(?<![^\\\\]\\\\|^\\\\)(?=(?!R)\\R|$)|(?=\\\\")', patterns: [ {include: '#odd-italic'}, {include: '#even-bold-after-italic'}, {include: '#even-bold'}, {include: '#bridge-escapes'} ] }, { begin: "(?:^|\\G)([.'])[ \\t]*(IR)(?=\\s)", beginCaptures: { 0: {name: 'meta.function.man.macro.roff'}, 1: {name: 'punctuation.definition.function.macro.roff'}, 2: {name: 'entity.name.function.roff'} }, end: '(?<![^\\\\]\\\\|^\\\\)(?=(?!R)\\R|$)|(?=\\\\")', patterns: [ {include: '#odd-italic'}, {include: '#even-roman-after-italic'}, {include: '#even-roman'}, {include: '#bridge-escapes'} ] }, { begin: "(?:^|\\G)([.'])[ \\t]*(RB)(?=\\s)", beginCaptures: { 0: {name: 'meta.function.man.macro.roff'}, 1: {name: 'punctuation.definition.function.macro.roff'}, 2: {name: 'entity.name.function.roff'} }, end: '(?<![^\\\\]\\\\|^\\\\)(?=(?!R)\\R|$)|(?=\\\\")', patterns: [ {include: '#odd-roman'}, {include: '#even-bold-after-roman'}, {include: '#even-bold'}, {include: '#bridge-escapes'} ] }, { begin: "(?:^|\\G)([.'])[ \\t]*(RI)(?=\\s)", beginCaptures: { 0: {name: 'meta.function.man.macro.roff'}, 1: {name: 'punctuation.definition.function.macro.roff'}, 2: {name: 'entity.name.function.roff'} }, end: '(?<![^\\\\]\\\\|^\\\\)(?=(?!R)\\R|$)|(?=\\\\")', patterns: [ {include: '#odd-roman'}, {include: '#even-italic-after-roman'}, {include: '#even-italic'}, {include: '#bridge-escapes'} ] } ] }, arithmetic: { patterns: [ {include: '#escapes'}, { captures: { 1: {name: 'punctuation.arithmetic.begin.roff'}, 2: {patterns: [{include: '#arithmetic'}]}, 3: {name: 'punctuation.arithmetic.end.roff'} }, match: '(\\()(.*?)(\\))', name: 'meta.brackets.roff' }, {include: '#number'}, {match: '<\\?', name: 'keyword.operator.minimum.gnu.roff'}, {match: '>\\?', name: 'keyword.operator.maximum.gnu.roff'}, {match: '[-/+*%]', name: 'keyword.operator.arithmetic.roff'}, {match: ':|&|[<=>]=?', name: 'keyword.operator.logical.roff'}, {match: '\\|', name: 'keyword.operator.absolute.roff'}, { captures: { 1: {patterns: [{include: '#units'}]}, 2: {name: 'punctuation.separator.semicolon.roff'} }, match: '(?:\\G|(?<=^|\\())([CDMPTcimnpstuvz])(;)', name: 'meta.scaling-indicator.gnu.roff' } ] }, 'bold-first': { patterns: [ { begin: '\\G[ \\t]*(?!")(?=(?:[^\\s\\\\]|\\\\(?!E?").)+)', end: '(?<![^\\\\]\\\\|^\\\\)(?=\\s|$)|(?=\\\\E?")', name: 'markup.bold.roff', patterns: [{include: '#escapes'}] }, { captures: { 0: {name: 'string.quoted.double.empty.roff'}, 1: {name: 'punctuation.definition.string.begin.roff'}, 2: {name: 'punctuation.definition.string.end.roff'} }, match: '(")(")', name: 'markup.bold.roff' }, { begin: '\\G[ \\t]*(")', beginCaptures: { 0: {name: 'string.quoted.double.roff'}, 1: {name: 'punctuation.definition.string.begin.roff'} }, contentName: 'string.quoted.double.roff', end: '((?:"")*)"(?!")|(?<!\\\\)(?:$|(?!R)\\R)|(?=\\\\E?")', endCaptures: { 0: {name: 'punctuation.definition.string.end.roff'}, 1: { name: 'markup.bold.roff', patterns: [{include: '#string-escapes'}] } }, name: 'markup.bold.roff', patterns: [{include: '#string-escapes'}] }, {include: '#escapes'}, {include: '#string'} ] }, 'bold-italic-first': { patterns: [ { begin: '\\G[ \\t]*(?!")(?=(?:[^\\s\\\\]|\\\\(?!E?").)+)', end: '(?<![^\\\\]\\\\|^\\\\)(?=\\s|$)|(?=\\\\E?")', name: 'markup.bold.italic.roff', patterns: [{include: '#escapes'}] }, { captures: { 0: {name: 'string.quoted.double.empty.roff'}, 1: {name: 'punctuation.definition.string.begin.roff'}, 2: {name: 'punctuation.definition.string.end.roff'} }, match: '(")(")', name: 'markup.bold.italic.roff' }, { begin: '\\G[ \\t]*(")', beginCaptures: { 0: {name: 'string.quoted.double.roff'}, 1: {name: 'punctuation.definition.string.begin.roff'} }, contentName: 'string.quoted.double.roff', end: '((?:"")*)"(?!")|(?<!\\\\)(?:$|(?!R)\\R)|(?=\\\\E?")', endCaptures: { 0: {name: 'punctuation.definition.string.end.roff'}, 1: { name: 'markup.bold.italic.roff', patterns: [{include: '#string-escapes'}] } }, name: 'markup.bold.italic.roff', patterns: [{include: '#string-escapes'}] }, {include: '#escapes'}, {include: '#string'} ] }, 'bold-italic-word': { match: '\\S+?(?=\\\\|$|\\s)', name: 'markup.bold.italic.roff' }, 'bold-word': {match: '\\S+?(?=\\\\|$|\\s)', name: 'markup.bold.roff'}, 'bridge-escapes': { patterns: [ { begin: '[ \\t]+(\\\\)$(?!R)\\R?', beginCaptures: {1: {name: 'punctuation.definition.escape.roff'}}, end: '^', name: 'constant.character.escape.newline.roff' }, { begin: '(\\\\)$(?!R)\\R?', beginCaptures: {1: {name: 'punctuation.definition.escape.roff'}}, end: '^[ \\t]*', name: 'constant.character.escape.newline.roff' } ] }, c0: { patterns: [ {match: '\\x02', name: 'punctuation.c0.ctrl-char.start-of-text.roff'}, {match: '\\x03', name: 'punctuation.c0.ctrl-char.end-of-text.roff'}, { match: '\\x04', name: 'punctuation.c0.ctrl-char.end-of-transmission.roff' }, {match: '\\x05', name: 'punctuation.c0.ctrl-char.enquiry.roff'}, {match: '\\x06', name: 'punctuation.c0.ctrl-char.acknowledge.roff'}, {match: '\\a', name: 'punctuation.c0.ctrl-char.alarm.bell.roff'}, {match: '\\f', name: 'punctuation.whitespace.form-feed.roff'}, {match: '\\x7F', name: 'punctuation.c0.ctrl-char.delete.roff'} ] }, 'continuous-newline': { begin: '(\\\\)?(\\\\)$(?!R)\\R?', beginCaptures: { 0: {name: 'constant.character.escape.newline.roff'}, 1: {name: 'punctuation.definition.concealed.escape.backslash.roff'}, 2: {name: 'punctuation.definition.escape.roff'} }, end: "^(?:[.'])?" }, definition: { patterns: [ { begin: '(?:^|\\G)([.\'])[ \\t]*(?:(do)[ \\t]+)?((?:de|am)i?1?)\\s+(\\S+?)?\\s*(\\\\E?["#].*)?$', beginCaptures: { 1: {name: 'punctuation.definition.request.roff'}, 2: {name: 'entity.function.name.roff'}, 3: {name: 'storage.type.function.roff'}, 4: { name: 'entity.name.function.roff', patterns: [{include: '#escapes'}] }, 5: {patterns: [{include: '#escapes'}]} }, end: '^(?:[ \\t]*\\x5C{2})?\\.[ \\t]*\\.', endCaptures: {0: {name: 'punctuation.definition.request.roff'}}, name: 'meta.macro.definition.$3.roff', patterns: [{include: '$self'}] }, { begin: '(?:^|\\G)([.\'])[ \\t]*(?:(do)[ \\t]+)?((?:de|am)i?1?)\\s+(\\S+)\\s*("[^"]+"?|\\S+?(?=\\s|\\\\E?["#]))?(.*)$', beginCaptures: { 1: {name: 'punctuation.definition.request.roff'}, 2: {name: 'entity.function.name.roff'}, 3: {name: 'storage.type.function.roff'}, 4: { name: 'entity.name.function.roff', patterns: [{include: '#escapes'}] }, 5: { name: 'keyword.control.terminator.roff', patterns: [{include: '#string'}] }, 6: {patterns: [{include: '#param-group'}]} }, end: '^(\\.)[ \\t]*((\\5)(?=$|\\s|\\\\(?:$|")))', endCaptures: { 1: {name: 'punctuation.definition.request.roff'}, 2: {name: 'keyword.control.terminator.roff'}, 3: {patterns: [{include: '#string'}]} }, name: 'meta.macro.definition.with-terminator.$3.roff', patterns: [{include: '$self'}] } ] }, eqn: { patterns: [ { match: '(?x)\\b\n(DELTA|GAMMA|LAMBDA|OMEGA|PHI|PI|PSI|SIGMA|THETA|UPSILON|XI|alpha|beta|chi\n|delta|epsilon|eta|gamma|iota|kappa|lambda|mu|nu|omega|omicron|phi|pi|psi\n|rho|sigma|tau|theta|upsilon|xi|zeta)\\b', name: 'constant.language.greek-letter.eqn.roff' }, { match: '\\b(and|arc|cos|cosh|det|exp|for|if|Im|lim|ln|log|max|min|Re|sin|sinh|tan|tanh)\\b', name: 'constant.language.math-function.eqn.roff' }, { match: '(?x)\n(?:[><=!]=|\\+-|->|<-|<<|>>|\\.{3}|,\\.+,|[-+=](?!\\d)|[*/<>])\n|\\b(?:approx|cdot|ceiling|del|grad|half|inf|inter|int|floor\n|nothing|partial|prime|prod|sum|times|union)\\b', name: 'constant.character.math-symbol.eqn.roff' }, { begin: '{', beginCaptures: { 0: {name: 'punctuation.section.bracket.curly.begin.eqn.roff'} }, end: '}|(?=\\.EN)', endCaptures: { 0: {name: 'punctuation.section.bracket.curly.end.eqn.roff'} }, patterns: [{include: '#eqn'}] }, { captures: { 1: {name: 'keyword.operator.spacing.eqn.roff'}, 2: {name: 'punctuation.separator.delimiter.comma.eqn.roff'} }, match: '(~|\\^)|(,)' }, { begin: '\\b([nts]?define)\\s*(\\S+)\\s*(\\S)', beginCaptures: { 1: {name: 'storage.type.function.definition.eqn.roff'}, 2: {name: 'entity.name.function.eqn.roff'}, 3: {name: 'punctuation.section.definition.begin.eqn.roff'} }, end: '((?:(?!\\3).)*+)(\\3)|(?=\\.EN)', endCaptures: { 1: {patterns: [{include: '#eqn'}]}, 2: {name: 'punctuation.section.definition.end.eqn.roff'} }, patterns: [ { captures: { 1: {name: 'punctuation.section.bracket.curly.begin.eqn.roff'}, 2: {patterns: [{include: '#eqn'}, {include: '#main'}]}, 3: {name: 'punctuation.section.bracket.curly.end.eqn.roff'} }, match: '(\\{)([^}]*)(\\})' }, {include: '#eqn'}, {include: '#main'} ] }, { begin: '\\b(ifdef)\\s*(\\S+)\\s*(\\S)', beginCaptures: { 1: {name: 'keyword.control.flow.if-defined.eqn.roff'}, 2: {name: 'entity.name.function.eqn.roff'}, 3: {name: 'punctuation.section.definition.begin.eqn.roff'} }, end: '((?:(?!\\3).)*+)(\\3)|(?=\\.EN)', endCaptures: { 1: {patterns: [{include: '#eqn'}]}, 2: {name: 'punctuation.section.definition.end.eqn.roff'} }, patterns: [ { captures: { 1: {name: 'punctuation.section.bracket.curly.begin.eqn.roff'}, 2: {patterns: [{include: '#eqn'}, {include: '#main'}]}, 3: {name: 'punctuation.section.bracket.curly.end.eqn.roff'} }, match: '(\\{)([^}]*)(\\})' }, {include: '#eqn'}, {include: '#main'} ] }, { match: '(?x)\\b\n(above|back|bar|bold|ccol|col|cpile|delim|dot|dotdot|down|dyad|fat|font|from\n|fwd|gfont|gsize|hat|italic|lcol|left|lineup|lpile|mark|matrix|over|pile\n|rcol|right|roman|rpile|size|sqrt|sub|sup|tilde|to|under|up|vec)\\b', name: 'keyword.language.eqn.roff' }, { match: '(?x)\\b\n(accent|big|chartype|smallover|type|vcenter|uaccent|split|nosplit\n|opprime|special|include|ifdef|undef|g[rb]font|space)\\b', name: 'keyword.language.eqn.gnu.roff' }, { match: '(?x)\\b\n(Alpha|Beta|Chi|Delta|Epsilon|Eta|Gamma|Iota|Kappa|Lambda|Mu|Nu\n|Omega|Omicron|Phi|Pi|Psi|Rho|Sigma|Tau|Theta|Upsilon|Xi|Zeta\n|ldots|dollar)\\b', name: 'constant.language.eqn.gnu.roff' }, { captures: { 1: {name: 'storage.type.var.eqn.roff'}, 2: {name: 'variable.other.mathml.eqn.roff'} }, match: '(?x)\\b(set)[ \\t]+\n(accent_width|axis_height|baseline_sep|big_op_spacing[1-5]|body_depth|body_height|column_sep\n|default_rule_thickness|delimiter_factor|delimiter_shortfall|denom[12]|draw_lines|fat_offset\n|matrix_side_sep|medium_space|minimum_size|nroff|null_delimiter_space|num[12]|over_hang\n|script_space|shift_down|su[bp]_drop|sub[12]|sup[1-3]|thick_space|thin_space|x_height)\\b', name: 'meta.set-variable.eqn.gnu.roff' }, { match: '(?![\\d\\\\"])[^-,!.{}\\[\\]*/^+<=>~\\s"]+', name: 'string.unquoted.parameter.eqn.roff' }, { captures: { 1: {name: 'constant.language.boolean.logical.true.eqn.roff'}, 2: {name: 'constant.language.boolean.logical.false.eqn.roff'} }, match: '(?<=delim)\\s*(?:(on)|(off))\\b' }, {include: '#escapes'}, {include: '#number'}, {include: '#string'} ] }, escapes: { patterns: [{include: '#escapes-copymode'}, {include: '#escapes-full'}] }, 'escapes-clipped': { patterns: [ { begin: '\\\\E?f(?:[I2]|\\(CI|\\[\\s*(?:[I2]|CI)\\s*\\])', beginCaptures: {0: {patterns: [{include: '#escapes'}]}}, end: '$|(?=\\\\E?f[\\[A-Za-z0-9])', patterns: [ {include: '#escaped-newline'}, {include: '$self'}, {include: '#italic-word'} ] }, { begin: '\\\\E?f(?:[B3]|\\(CB|\\[\\s*(?:[B3]|CB)\\s*\\])', beginCaptures: {0: {patterns: [{include: '#escapes'}]}}, end: '$|(?=\\\\E?f[\\[A-Za-z0-9])', patterns: [ {include: '#escaped-newline'}, {include: '$self'}, {include: '#bold-word'} ] }, { begin: '\\\\E?f(?:4|\\(BI|\\[\\s*BI\\s*\\])', beginCaptures: {0: {patterns: [{include: '#escapes'}]}}, end: '$|(?=\\\\E?f[\\[A-Za-z0-9])', patterns: [ {include: '#escaped-newline'}, {include: '$self'}, {include: '#bold-italic-word'} ] }, { begin: '\\\\E?f(?:\\(C[WR]|\\[\\s*C[WR]\\s*\\])', beginCaptures: {0: {patterns: [{include: '#escapes'}]}}, end: '$|(?=\\\\E?f[\\[A-Za-z0-9])', patterns: [ {include: '#escaped-newline'}, {include: '$self'}, {include: '#monospace-word'} ] } ] }, 'escapes-copymode': { patterns: [ { match: '(\\\\+?)(?=\\1\\S)', name: 'punctuation.definition.concealed.escape.backslash.roff' }, { begin: '(?:(?:(?<=\\n)\\G|^)(\\.|\'+)\\s*)?(\\\\E?")', beginCaptures: { 1: {name: 'punctuation.definition.comment.roff'}, 2: {name: 'punctuation.definition.comment.roff'} }, end: '$', name: 'comment.line.roff' }, { begin: "(?:(?:(?<=\\n)\\G|^)(\\.|'+)\\s*)?(\\\\E?#).*$(?!R)\\R?", beginCaptures: { 1: {name: 'punctuation.definition.comment.roff'}, 2: {name: 'punctuation.definition.comment.roff'} }, end: '^', name: 'comment.line.number-sign.gnu.roff' }, { captures: {1: {name: 'punctuation.definition.comment.roff'}}, match: "(?:(?<=\\n)\\G|^)(\\.|'+)[ \\t]*$", name: 'comment.empty.roff' }, {include: '#continuous-newline'}, {include: '#register-expansion'}, { captures: { 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'} }, match: '(?:((\\\\)E)|(\\\\))\\\\', name: 'constant.character.escape.backslash.roff' }, { captures: { 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'} }, match: '(?:((\\\\)E)|(\\\\))t', name: 'constant.character.escape.tab.roff' }, { captures: { 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'} }, match: '(?:((\\\\)E)|(\\\\))a', name: 'constant.character.escape.leader-char.roff' }, { captures: { 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'} }, match: '(?:((\\\\)E)|(\\\\))\\.', name: 'constant.character.escape.dot.roff' }, { begin: '((?:((\\\\)E)|(\\\\))\\*(\\[))', beginCaptures: { 1: {name: 'entity.name.roff'}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'punctuation.section.begin.bracket.square.roff'} }, contentName: 'function-call.arguments.roff', end: '(\\])|(?<!\\\\)(?=$)', endCaptures: { 1: {name: 'punctuation.section.end.bracket.square.roff'} }, name: 'constant.character.escape.function.interpolate-string.gnu.roff', patterns: [{include: '#long-name'}] }, { captures: { 1: {name: 'entity.name.roff'}, 10: {name: 'punctuation.definition.escape.roff'}, 11: {name: 'variable.parameter.roff', patterns: [{include: '#c0'}]}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'punctuation.definition.brace.roff'}, 6: {name: 'variable.parameter.roff', patterns: [{include: '#c0'}]}, 7: {name: 'entity.name.roff'}, 8: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 9: {name: 'punctuation.definition.escape.roff'} }, match: '((?:((\\\\)E)|(\\\\))\\*(\\())(\\S{2})|((?:((\\\\)E)|(\\\\))\\*)(\\S)', name: 'constant.character.escape.function.interpolate-string.roff' }, { captures: { 1: {name: 'entity.name.roff'}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'} }, match: '((?:((\\\\)E)|(\\\\))\\$\\d)', name: 'constant.character.escape.function.interpolate-argument.roff' }, { begin: '((?:((\\\\)E)|(\\\\))[Mm](\\[))', beginCaptures: { 1: {name: 'entity.name.roff'}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'punctuation.section.begin.bracket.square.roff'} }, contentName: 'variable.parameter.roff', end: '(\\])|(?<!\\\\)(?=$)', endCaptures: { 1: {name: 'punctuation.section.end.bracket.square.roff'} }, name: 'constant.character.escape.function.set-colour.gnu.roff', patterns: [{include: '#long-params'}] }, { captures: { 1: {name: 'entity.name.roff'}, 10: {name: 'punctuation.definition.escape.roff'}, 11: {name: 'variable.parameter.roff', patterns: [{include: '#c0'}]}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'punctuation.definition.brace.roff'}, 6: {name: 'variable.parameter.roff', patterns: [{include: '#c0'}]}, 7: {name: 'entity.name.roff'}, 8: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 9: {name: 'punctuation.definition.escape.roff'} }, match: '((?:((\\\\)E)|(\\\\))[Mm](\\())(\\S{2})|((?:((\\\\)E)|(\\\\))[Mm])(\\S)', name: 'constant.character.escape.function.set-colour.gnu.roff' }, { begin: '((?:((\\\\)E)|(\\\\))s([-+])?(\\[))', beginCaptures: { 1: {name: 'entity.name.roff'}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'keyword.operator.arithmetic.roff'}, 6: {name: 'punctuation.section.begin.bracket.square.roff'} }, contentName: 'variable.parameter.roff', end: '(\\])|(?<!\\\\)(?=$)', endCaptures: { 1: {name: 'punctuation.section.end.bracket.square.roff'} }, name: 'constant.character.escape.function.point-size.gnu.roff', patterns: [{include: '#long-params'}] }, { begin: '((?:((\\\\)E)|(\\\\))s([-+])?)((.))', beginCaptures: { 1: {name: 'entity.name.function.roff'}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'keyword.operator.arithmetic.roff'}, 6: {name: 'string.other.roff'}, 7: {name: 'punctuation.definition.begin.roff'} }, contentName: 'variable.parameter.roff', end: '(\\6)|(?<!\\\\)(?=$)', endCaptures: { 0: {name: 'string.other.roff'}, 1: {name: 'punctuation.definition.end.roff'} }, name: 'constant.character.escape.function.point-size.gnu.roff', patterns: [{include: '#escapes'}] }, { begin: '((?:((\\\\)E)|(\\\\))(?!s[-+]?\\(?[-+]?\\d)[ABRZ])((.))', beginCaptures: { 1: {name: 'entity.name.function.roff'}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'string.other.roff'}, 6: {name: 'punctuation.definition.begin.roff'} }, contentName: 'string.other.roff', end: '(\\6)|(?<!\\\\)(?=$)', endCaptures: { 0: {name: 'string.other.roff'}, 1: {name: 'punctuation.definition.end.roff'} }, name: 'constant.character.escape.function.check-identifier.gnu.roff', patterns: [{include: '#escapes'}] }, { captures: { 1: {name: 'entity.name.roff'}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'constant.numeric.roff'} }, match: '((?:((\\\\)E)|(\\\\))O([0-4]))', name: 'constant.character.escape.internal.gnu.roff' }, { begin: '((?:((\\\\)E)|(\\\\))O(5)(\\[))', beginCaptures: { 1: {name: 'entity.name.roff'}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'constant.numeric.roff'}, 6: {name: 'punctuation.section.begin.bracket.square.roff'} }, contentName: 'string.unquoted.filename.roff', end: '(\\])|(?<!\\\\)(?=$)', endCaptures: { 1: {name: 'punctuation.section.end.bracket.square.roff'} }, name: 'constant.character.escape.internal.stderr-write-file.gnu.roff', patterns: [{include: '#escapes'}] }, { begin: '((?:((\\\\)E)|(\\\\))[VY](\\[))', beginCaptures: { 1: {name: 'entity.name.roff'}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'punctuation.section.begin.bracket.square.roff'} }, end: '(\\])|(?<!\\\\)(?=$)', endCaptures: { 1: {name: 'punctuation.section.end.bracket.square.roff'} }, name: 'constant.character.escape.function.interpolate-variable.gnu.roff', patterns: [{include: '#long-name'}] }, { captures: { 1: {name: 'entity.name.roff'}, 10: {name: 'punctuation.definition.escape.roff'}, 11: {name: 'variable.parameter.roff', patterns: [{include: '#c0'}]}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'punctuation.definition.brace.roff'}, 6: {name: 'variable.parameter.roff', patterns: [{include: '#c0'}]}, 7: {name: 'entity.name.roff'}, 8: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 9: {name: 'punctuation.definition.escape.roff'} }, match: '((?:((\\\\)E)|(\\\\))[VY](\\())(\\S{2})|((?:((\\\\)E)|(\\\\))[VY])(\\S)', name: 'constant.character.escape.function.interpolate-variable.gnu.roff' }, { captures: { 1: { name: 'constant.character.escape.embed-diversion.start.gnu.roff' }, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'punctuation.definition.script.roff'}, 6: { name: 'string.interpolated.roff', patterns: [{include: '$self'}] }, 7: { name: 'constant.character.escape.embed-diversion.start.gnu.roff' }, 8: {name: 'punctuation.definition.escape.roff'}, 9: {name: 'punctuation.definition.script.roff'} }, match: '((?:((\\\\)E)|(\\\\))(\\?))(.*?)((\\\\)(\\?))' }, { captures: { 1: {name: 'variable.language.roff'}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'} }, match: '((?:((\\\\)E)|(\\\\))\\$[*@^])', name: 'constant.character.escape.function.concatenated-arguments.gnu.roff' }, { captures: { 1: {name: 'entity.name.roff'}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'punctuation.definition.brace.roff'}, 6: {name: 'variable.parameter.roff'} }, match: '((?:((\\\\)E)|(\\\\))\\$(\\())(\\S{2})', name: 'constant.character.escape.function.interpolate-argument.gnu.roff' }, { begin: '((?:((\\\\)E)|(\\\\))\\$(\\[))', beginCaptures: { 1: {name: 'entity.name.roff'}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'punctuation.section.begin.bracket.square.roff'} }, contentName: 'variable.parameter.roff', end: '(\\])|(?<!\\\\)(?=$)', endCaptures: { 1: {name: 'punctuation.section.end.bracket.square.roff'} }, name: 'constant.character.escape.function.interpolate-argument.gnu.roff', patterns: [{include: '#long-name'}] }, {include: '#c0'} ] }, 'escapes-full': { patterns: [ { captures: {1: {name: 'punctuation.definition.escape.roff'}}, match: '(\\\\)E?e', name: 'constant.character.escape.current-escape-char.roff' }, { captures: { 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'} }, match: '(?:((\\\\)E)|(\\\\))´', name: 'constant.character.escape.acute-accent.roff' }, { captures: { 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'} }, match: '(?:((\\\\)E)|(\\\\))`', name: 'constant.character.escape.grave-accent.roff' }, { captures: { 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'} }, match: '(?:((\\\\)E)|(\\\\))-', name: 'constant.character.escape.minus.roff' }, { captures: { 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'} }, match: '(?:((\\\\)E)|(\\\\)) ', name: 'constant.character.escape.space.roff' }, { captures: { 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'} }, match: '(?:((\\\\)E)|(\\\\))0', name: 'constant.character.escape.space.digit-width.roff' }, { captures: { 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'} }, match: '(?:((\\\\)E)|(\\\\))\\|', name: 'constant.character.escape.space.one-sixth-em.roff' }, { captures: { 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'} }, match: '(?:((\\\\)E)|(\\\\))\\^', name: 'constant.character.escape.space.one-twelfth-em.roff' }, { captures: { 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'} }, match: '(?:((\\\\)E)|(\\\\))&', name: 'constant.character.escape.zero-width-marker.roff' }, { captures: { 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'} }, match: '(?:((\\\\)E)|(\\\\))%', name: 'constant.character.escape.hyphenation-char.roff' }, { captures: { 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'} }, match: '(?:((\\\\)E)|(\\\\))c', name: 'constant.character.escape.connect.roff' }, { captures: { 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'} }, match: '(?:((\\\\)E)|(\\\\))d', name: 'constant.character.escape.downwards.roff' }, { captures: { 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'} }, match: '(?:((\\\\)E)|(\\\\))p', name: 'constant.character.escape.spread-line.roff' }, { captures: { 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'} }, match: '(?:((\\\\)E)|(\\\\))r', name: 'constant.character.escape.reverse.roff' }, { captures: { 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'} }, match: '(?:((\\\\)E)|(\\\\))u', name: 'constant.character.escape.upwards.roff' }, { captures: { 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.brace.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'variable.parameter.roff', patterns: [{include: '#c0'}]} }, match: '(?:((\\\\)E)|(\\\\))(\\()(\\S{2})', name: 'constant.character.escape.function.named-char.roff' }, { begin: '(?:((\\\\)E)|(\\\\))(\\[)', beginCaptures: { 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.section.begin.bracket.square.roff'} }, end: '(\\S*?)(\\])|(?<!\\\\)(?=$)', endCaptures: { 1: {patterns: [{include: '#long-params'}]}, 2: {name: 'punctuation.section.end.bracket.square.roff'} }, name: 'constant.character.escape.function.named-char.gnu.roff', patterns: [ {include: '#long-params'}, { match: '(?:[^\\s\\]\\\\]|\\\\(?!E?["#]).)+', name: 'variable.parameter.roff' } ] }, { captures: { 1: {name: 'punctuation.definition.request.roff'}, 2: {name: 'constant.character.escape.conditional.block.roff'}, 3: {name: 'punctuation.section.conditional.begin.roff'} }, match: "(?:(?:^|\\G)(\\.|'+)[ \\t]*)?(\\\\\\{(?:\\\\(?=(?!R)\\R|$))?)" }, { captures: { 1: {name: 'punctuation.definition.request.roff'}, 2: {name: 'constant.character.escape.conditional.block.roff'}, 3: {name: 'punctuation.section.conditional.end.roff'} }, match: "(?:(?:^|\\G)(\\.|'+)[ \\t]*)?((\\\\\\}(?:\\\\(?=(?!R)\\R|$))?))" }, { begin: '((?:((\\\\)E)|(\\\\))X)(.)', beginCaptures: { 1: {name: 'entity.name.function.roff'}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: { name: 'punctuation.section.embedded.begin.roff', patterns: [{include: '#c0'}] } }, end: '(.*?)(?:(\\5)|(?<!\\\\)(?=$))', endCaptures: { 1: { name: 'source.embedded.ditroff', patterns: [{include: 'source.ditroff#xCommands'}] }, 2: { name: 'punctuation.section.embedded.end.roff', patterns: [{include: '#c0'}] } }, name: 'meta.device-control.roff', patterns: [ { captures: { 0: {patterns: [{include: 'source.ditroff#xCommands'}]} }, match: '.+', name: 'source.embedded.ditroff' }, {include: '#escapes'} ] }, { begin: '((?:((\\\\)E)|(\\\\))[bCDhHSlLovwxXN])((.))', beginCaptures: { 1: {name: 'entity.name.function.roff'}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'string.other.roff'}, 6: { name: 'punctuation.definition.begin.roff', patterns: [{include: '#c0'}] } }, contentName: 'string.other.roff', end: '(\\6)|(?<!\\\\)(?=$)', endCaptures: { 0: {name: 'string.other.roff'}, 1: { name: 'punctuation.definition.end.roff', patterns: [{include: '#c0'}] } }, name: 'constant.character.escape.function.roff', patterns: [{include: '#escapes'}] }, { begin: '(?:((\\\\)E)|(\\\\))!', beginCaptures: { 0: {name: 'constant.character.escape.transparent-line.roff'}, 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'} }, end: '(?<!\\\\)$', name: 'meta.throughput.roff', patterns: [{include: '#escapes-copymode'}] }, { captures: { 0: {name: 'entity.name.roff'}, 1: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 2: {name: 'punctuation.definition.escape.roff'}, 3: {name: 'punctuation.definition.escape.roff'} }, match: '(?:((\\\\)E)|(\\\\))f[RP1]', name: 'constant.character.escape.font.roff' }, { begin: '((?:((\\\\)E)|(\\\\))f(?:[I2]|(\\()CI|(\\[)\\s*(?:[I2]|CI)\\s*(\\])))', beginCaptures: { 0: {name: 'constant.character.escape.font.roff'}, 1: {name: 'entity.name.roff'}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'punctuation.section.begin.bracket.square.roff'}, 6: {name: 'punctuation.section.end.bracket.square.roff'} }, end: "(?=\\\\E?f[\\[A-Za-z0-9])|^(?=[.']\\s*(?:(?:SH|SS|P|[HILPT]P|di)\\b)|\\.)", patterns: [{include: '$self'}, {include: '#italic-word'}] }, { begin: '((?:((\\\\)E)|(\\\\))f(?:[B3]|(\\()CB|(\\[)\\s*(?:[B3]|CB)\\s*(\\])))', beginCaptures: { 0: {name: 'constant.character.escape.font.roff'}, 1: {name: 'entity.name.roff'}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'punctuation.definition.brace.roff'}, 6: {name: 'punctuation.section.begin.bracket.square.roff'}, 7: {name: 'punctuation.section.end.bracket.square.roff'} }, end: "(?=\\\\E?f[\\[A-Za-z0-9])|^(?=[.']\\s*(?:(?:SH|SS|P|[HILPT]P|di)\\b)|\\.)", patterns: [{include: '$self'}, {include: '#bold-word'}] }, { begin: '((?:((\\\\)E)|(\\\\))f(?:4|(\\()BI|(\\[)\\s*BI\\s*(\\])))', beginCaptures: { 0: {name: 'constant.character.escape.font.roff'}, 1: {name: 'entity.name.roff'}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'punctuation.definition.brace.roff'}, 6: {name: 'punctuation.section.begin.bracket.square.roff'}, 7: {name: 'punctuation.section.end.bracket.square.roff'} }, end: "(?=\\\\E?f[\\[A-Za-z0-9])|^(?=[.']\\s*(?:(?:SH|SS|P|[HILPT]P|di)\\b)|\\.)", patterns: [{include: '$self'}, {include: '#bold-italic-word'}] }, { begin: '((?:((\\\\)E)|(\\\\))f(?:(\\()C[WR]|(\\[)\\s*C[WR]\\s*(\\])))', beginCaptures: { 0: {name: 'constant.character.escape.font.roff'}, 1: {name: 'entity.name.roff'}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'punctuation.definition.brace.roff'}, 6: {name: 'punctuation.section.begin.bracket.square.roff'}, 7: {name: 'punctuation.section.end.bracket.square.roff'} }, end: "(?=\\\\E?f[\\[A-Za-z0-9])|^(?=[.']\\s*(?:(?:SH|SS|P|[HILPT]P|di)\\b)|\\.)", patterns: [{include: '$self'}, {include: '#monospace-word'}] }, { begin: '((?:((\\\\)E)|(\\\\))[Ff](\\[))', beginCaptures: { 1: {name: 'entity.name.roff'}, 2: {name: 'constant.character.escape.current-escape-char.gnu.roff'}, 3: {name: 'punctuation.definition.escape.roff'}, 4: {name: 'punctuation.definition.escape.roff'}, 5: {name: 'punctuation.section.begin.bracket.square.roff'} }, contentName: 'variable.parameter.roff', end: '(\\])|(?<!\\\\)(?=$)', endCaptures: { 1: {name: 'punctuation.section.end.bracket.square.roff'} }, name: 'constant.character.escape.function.font.gnu.roff', patterns: [{include: '#escapes'}] }, { captures: { 1: {name