summaryrefslogtreecommitdiffstats
path: root/assets
diff options
context:
space:
mode:
authorKeith Hall <kingkeith+github@gmail.com>2020-10-14 22:20:14 +0300
committerDavid Peter <sharkdp@users.noreply.github.com>2020-10-17 16:46:18 +0200
commitbb25111ca9ccb08d9d383b2bd7f816b3c6a105e7 (patch)
treec8ccc79b607f1ddd8c95386d4cc2785d7541ef48 /assets
parent3c756a65a61219d7a68aa1551dbda45b5464a030 (diff)
Improve Manpage syntax
Diffstat (limited to 'assets')
-rw-r--r--assets/syntaxes/02_Extra/Manpage.sublime-syntax137
-rw-r--r--assets/syntaxes/02_Extra/syntax_test_man.man103
2 files changed, 216 insertions, 24 deletions
diff --git a/assets/syntaxes/02_Extra/Manpage.sublime-syntax b/assets/syntaxes/02_Extra/Manpage.sublime-syntax
index e99c2497..121f6ab0 100644
--- a/assets/syntaxes/02_Extra/Manpage.sublime-syntax
+++ b/assets/syntaxes/02_Extra/Manpage.sublime-syntax
@@ -7,47 +7,136 @@ file_extensions:
scope: source.man
variables:
- section_heading: '^\S.*$'
+ 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_\-]+)(\()([^)]+)(\))'
+ - match: '([A-Z0-9_\-]+)(\()([^)]+)(\))\s*'
captures:
- 1: meta.preprocessor
- 2: keyword.operator
- 3: string.quoted.other
- 4: keyword.operator
+ 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:
- - match: '^(SYNOPSIS|SYNTAX|SINTASSI|SKŁADNIA|СИНТАКСИС|書式)'
- push: Packages/C/C.sublime-syntax
- scope: markup.heading
- with_prototype:
- - match: '(?={{section_heading}})'
- pop: true
+ # English, ..., ..., ..., Russian, ...
+
+ - match: '^(?:SYNOPSIS|SYNTAX|SINTASSI|SKŁADNIA|СИНТАКСИС|書式)'
+ scope: markup.heading.synopsis.man
+ embed: synopsis
+ escape: '(?={{section_heading}})'
- - match: '^\S.*$'
- scope: markup.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
- 2: keyword.operator
- 3: constant.numeric
- 4: keyword.operator
+ 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: '(?:[^a-zA-Z0-9_-]|^|\s)(--?[A-Za-z0-9][A-Za-z0-9-]*)(?:(=)?("?)([A-Za-z0-9]+)("?))?'
+ - match: '^[ ]{7}(?=-)'
+ push: expect-command-line-option
+ - match: '(?:[^a-zA-Z0-9_-]|^|\s){{command_line_option}}'
captures:
- 1: entity.name
- 2: keyword.operator
- 3: punctuation.definition.string.begin
- 4: variable.parameter
- 3: punctuation.definition.string.end
+ 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
diff --git a/assets/syntaxes/02_Extra/syntax_test_man.man b/assets/syntaxes/02_Extra/syntax_test_man.man
new file mode 100644
index 00000000..54c052a5
--- /dev/null
+++ b/assets/syntaxes/02_Extra/syntax_test_man.man
@@ -0,0 +1,103 @@
+# SYNTAX TEST "Manpage.sublime-syntax"
+SOMETHING(8) System Manager's Manual SOMETHING(8)
+# ^^^^^ meta.preprocessor
+# ^^^^^^^^^^^^^^^^^^^^^^^ markup.heading.title
+# ^^^^^^^ meta.preprocessor
+
+NAME
+#^^^ markup.heading.title
+ example - do something useful
+
+SYNOPSIS
+ example [options] [--home DIR] [--shell SHELL] [--no-create-home]
+# ^ punctuation.section.brackets.begin
+# ^^^^^^ entity.name.command-line-option
+# ^^^ variable.parameter
+# ^ punctuation.section.brackets.end
+# ^ punctuation.section.brackets.begin
+# ^^^^^^^ entity.name.command-line-option
+# ^^^^^ variable.parameter
+# ^ punctuation.section.brackets.end
+# ^ punctuation.section.brackets.begin
+# ^^^^^^^^^^^^^^^^ entity.name.command-line-option
+# ^ punctuation.section.brackets.end
+
+ example --system [options]
+# ^^^^^^^^ entity.name
+
+ COMMON OPTIONS
+ [--quiet] [--debug] [--help|-h] [--version] [--conf FILE]
+
+DESCRIPTION
+ example does something useful in relation to the command line options
+ and configuration information in /etc/example.conf.
+
+OPTIONS
+ --conf FILE
+# ^^^^^^ entity.name.command-line-option
+#^^^^^^ - variable - entity - markup
+# ^^^^ variable.parameter
+ Use FILE instead of /etc/example.conf.
+# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - variable - entity
+
+ --disabled-login
+ Do not run passwd to set the password. The user won't be able
+ to use her account until the password is set.
+
+ --disabled-password
+ Like --disabled-login, but logins are still possible (for exam-
+# ^^^^^^^^^^^^^^^^ entity.name
+#^^^^^^^^^^^^^^^^^^ - entity - variable - markup
+# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - entity - variable - markup
+ ple using SSH RSA keys) but not using password authentication.
+
+ --help Display brief instructions.
+# ^^^^^^ entity.name.command-line-option
+# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - variable.parameter
+
+ --home DIR
+# ^^^^^^ entity.name.command-line-option
+# ^^^ variable.parameter
+# ^ - variable - entity - markup
+ Use DIR as the user's home directory, rather than the default
+ specified by the configuration file. If the directory does not
+ exist, it is created and skeleton files are copied.
+
+ --[no-]signed, --signed=(true|false|if-asked)
+# ^^^^^^^^^^^^^ entity.name.command-line-option
+# ^ punctuation.separator
+# ^^^^^^^^ entity.name.command-line-option
+# ^ keyword.operator
+# ^ - variable
+# ^^^^ variable.parameter
+# ^ keyword.operator.logical
+# ^^^^^ variable.parameter
+# ^ keyword.operator.logical
+# ^^^^^^^^ variable.parameter
+# ^ - variable
+ --no-recurse-submodules, --recurse-submodules=check|on-demand|only|no
+# ^^^^^^^^^^^^^^^^^^^^^^^ entity.name.command-line-option
+# ^ punctuation.separator
+# ^^^^^^^^^^^^^^^^^^^^ entity.name.command-line-option
+# ^ keyword.operator
+# ^^^^^ variable.parameter
+# ^ keyword.operator.logical
+# ^^^^^^^^^ variable.parameter
+# ^ keyword.operator.logical
+# ^^^^ variable.parameter
+# ^ keyword.operator.logical
+# ^^ variable.parameter
+ May be used to make sure all submodule commits used by the
+
+ -c, -C NUM, --context[=NUM]
+# ^^ entity.name.command-line-option
+# ^ punctuation.separator
+# ^^ entity.name.command-line-option
+# ^^^ variable.parameter
+# ^ punctuation.separator
+# ^^^^^^^^^ entity.name.command-line-option
+# ^^^^^^^ - entity.name
+# ^ keyword.operator
+# ^^^ variable.parameter
+# ^^ - variable
+ output NUM (default 3) lines of copied context