Improve Manpage syntax

This commit is contained in:
Keith Hall 2020-10-14 22:20:14 +03:00 committed by David Peter
parent 3c756a65a6
commit bb25111ca9
4 changed files with 702 additions and 24 deletions

View File

@ -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: '^\S.*$'
scope: markup.heading
- 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
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

View File

@ -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

View File

@ -0,0 +1,243 @@
BAT(1) General Commands Manual BAT(1)
NAME
 bat - a cat(1) clone with syntax highlighting and Git integration.
USAGE
 bat [OPTIONS] [FILE]...
 bat cache [CACHE-OPTIONS] [--build|--clear]
DESCRIPTION
 bat prints the syntax-highlighted content of a collection of FILEs to
 the terminal. If no FILE is specified, or when FILE is '-', it reads
 from standard input.
 bat supports a large number of programming and markup languages. It
 also communicates with git(1) to show modifications with respect to the
 git index. bat automatically pipes its output through a pager (by de
 fault: less).
 Whenever the output of bat goes to a non-interactive terminal, i.e.
 when the output is piped into another process or into a file, bat will
 act as a drop-in replacement for cat(1) and fall back to printing the
 plain file contents.
OPTIONS
 General remarks: Command-line options like '-l'/'--language' that take
 values can be specified as either '--language value', '--lan
 guage=value', '-l value' or '-lvalue'.
 -A, --show-all
 Show non-printable characters like space, tab or newline. Use
 '--tabs' to control the width of the tab-placeholders.
 -p, --plain
 Only show plain style, no decorations. This is an alias for
 '--style=plain'. When '-p' is used twice ('-pp'), it also dis
 ables automatic paging (alias for '--style=plain
 --pager=never').
 -l, --language <language>
 Explicitly set the language for syntax highlighting. The lan
 guage can be specified as a name (like 'C++' or 'LaTeX') or pos
 sible file extension (like 'cpp', 'hpp' or 'md'). Use
 '--list-languages' to show all supported language names and file
 extensions.
 -H, --highlight-line <N:M>...
 Highlight the specified line ranges with a different background
 color For example:
 --highlight-line 40
 highlights line 40
 --highlight-line 30:40
 highlights lines 30 to 40
 --highlight-line :40
 highlights lines 1 to 40
 --highlight-line 40:
 highlights lines 40 to the end of the file
 --tabs <T>
 Set the tab width to T spaces. Use a width of 0 to pass tabs
 through directly
 --wrap <mode>
 Specify the text-wrapping mode (*auto*, never, character). The
 '--terminal-width' option can be used in addition to control the
 output width.
 --terminal-width <width>
 Explicitly set the width of the terminal instead of determining
 it automatically. If prefixed with '+' or '-', the value will be
 treated as an offset to the actual terminal width. See also:
 '--wrap'.
 -n, --number
 Only show line numbers, no other decorations. This is an alias
 for '--style=numbers'
 --color <when>
 Specify when to use colored output. The automatic mode only en
 ables colors if an interactive terminal is detected. Possible
 values: *auto*, never, always.
 --italic-text <when>
 Specify when to use ANSI sequences for italic text in the out
 put. Possible values: always, *never*.
 --decorations <when>
 Specify when to use the decorations that have been specified via
 '--style'. The automatic mode only enables decorations if an in
 teractive terminal is detected. Possible values: *auto*, never,
 always.
 -f, --force-colorization
 Alias for '--decorations=always --color=always'. This is useful
 if the output of bat is piped to another program, but you want
 to keep the colorization/decorations.
 --paging <when>
 Specify when to use the pager. To disable the pager, use '--pag
 ing=never' or its alias, -P. To disable the pager permanently,
 set BAT_PAGER to an empty string. To control which pager is
 used, see the '--pager' option. Possible values: *auto*, never,
 always.
 --pager <command>
 Determine which pager is used. This option will override the
 PAGER and BAT_PAGER environment variables. The default pager is
 'less'. To control when the pager is used, see the '--paging'
 option. Example: '--pager "less -RF"'.
 -m, --map-syntax <glob-pattern:syntax-name>...
 Map a glob pattern to an existing syntax name. The glob pattern
 is matched on the full path and the filename. For example, to
 highlight *.build files with the Python syntax, use -m
 '*.build:Python'. To highlight files named '.myignore' with the
 Git Ignore syntax, use -m '.myignore:Git Ignore'.
 --theme <theme>
 Set the theme for syntax highlighting. Use '--list-themes' to
 see all available themes. To set a default theme, add the
 '--theme="..."' option to the configuration file or export the
 BAT_THEME environment variable (e.g.: export BAT_THEME="...").
 --list-themes
 Display a list of supported themes for syntax highlighting.
 --style <style-components>
 Configure which elements (line numbers, file headers, grid bor
 ders, Git modifications, ..) to display in addition to the file
 contents. The argument is a comma-separated list of components
 to display (e.g. 'numbers,changes,grid') or a pre-defined style
 ('full'). To set a default style, add the '--style=".."' option
 to the configuration file or export the BAT_STYLE environment
 variable (e.g.: export BAT_STYLE=".."). Possible values: *auto*,
 full, plain, changes, header, grid, numbers, snip.
 -r, --line-range <N:M>...
 Only print the specified range of lines for each file. For exam
 ple:
 --line-range 30:40
 prints lines 30 to 40
 --line-range :40
 prints lines 1 to 40
 --line-range 40:
 prints lines 40 to the end of the file
 -L, --list-languages
 Display a list of supported languages for syntax highlighting.
 -u, --unbuffered
 This option exists for POSIX-compliance reasons ('u' is for 'un
 buffered'). The output is always unbuffered - this option is
 simply ignored.
 -h, --help
 Print this help message.
 -V, --version
 Show version information.
POSITIONAL ARGUMENTS
 <FILE>...
 Files to print and concatenate. Use a dash ('-') or no argument
 at all to read from standard input.
SUBCOMMANDS
 cache - Modify the syntax-definition and theme cache.
FILES
 bat can also be customized with a configuration file. The location of
 the file is dependent on your operating system. To get the default path
 for your system, call:
 bat --config-file
 Alternatively, you can use the BAT_CONFIG_PATH environment variable to
 point bat to a non-default location of the configuration file.
ADDING CUSTOM LANGUAGES
 bat supports Sublime Text .sublime-syntax language files, and can be
 customized to add additional languages to your local installation. To
 do this, add the .sublime-snytax language files to `$(bat --config-
 dir)/syntaxes` and run `bat cache --build`.
 Example:
 mkdir -p "$(bat --config-dir)/syntaxes"
 cd "$(bat --config-dir)/syntaxes"
 # Put new '.sublime-syntax' language definition files
 # in this folder (or its subdirectories), for example:
 git clone https://github.com/tellnobody1/sublime-purescript-syntax
 # And then build the cache.
 bat cache --build
 Once the cache is built, the new language will be visible in `bat
 --list-languages`.
 If you ever want to remove the custom languages, you can clear the
 cache with `bat cache --clear`.
ADDING CUSTOM THEMES
 Similarly to custom languages, bat supports Sublime Text .tmTheme
 themes. These can be installed to `$(bat --config-dir)/themes`, and
 are added to the cache with `bat cache --build`.
MORE INFORMATION
 For more information and up-to-date documentation, visit the bat repo:
 https://github.com/sharkdp/bat
 BAT(1)

View File

@ -0,0 +1,243 @@
BAT(1) General Commands Manual BAT(1)
NAME
bat - a cat(1) clone with syntax highlighting and Git integration.
USAGE
bat [OPTIONS] [FILE]...
bat cache [CACHE-OPTIONS] [--build|--clear]
DESCRIPTION
bat prints the syntax-highlighted content of a collection of FILEs to
the terminal. If no FILE is specified, or when FILE is '-', it reads
from standard input.
bat supports a large number of programming and markup languages. It
also communicates with git(1) to show modifications with respect to the
git index. bat automatically pipes its output through a pager (by de
fault: less).
Whenever the output of bat goes to a non-interactive terminal, i.e.
when the output is piped into another process or into a file, bat will
act as a drop-in replacement for cat(1) and fall back to printing the
plain file contents.
OPTIONS
General remarks: Command-line options like '-l'/'--language' that take
values can be specified as either '--language value', '--lan
guage=value', '-l value' or '-lvalue'.
-A, --show-all
Show non-printable characters like space, tab or newline. Use
'--tabs' to control the width of the tab-placeholders.
-p, --plain
Only show plain style, no decorations. This is an alias for
'--style=plain'. When '-p' is used twice ('-pp'), it also dis
ables automatic paging (alias for '--style=plain
--pager=never').
-l, --language <language>
Explicitly set the language for syntax highlighting. The lan
guage can be specified as a name (like 'C++' or 'LaTeX') or pos
sible file extension (like 'cpp', 'hpp' or 'md'). Use
'--list-languages' to show all supported language names and file
extensions.
-H, --highlight-line <N:M>...
Highlight the specified line ranges with a different background
color For example:
--highlight-line 40
highlights line 40
--highlight-line 30:40
highlights lines 30 to 40
--highlight-line :40
highlights lines 1 to 40
--highlight-line 40:
highlights lines 40 to the end of the file
--tabs <T>
Set the tab width to T spaces. Use a width of 0 to pass tabs
through directly
--wrap <mode>
Specify the text-wrapping mode (*auto*, never, character). The
'--terminal-width' option can be used in addition to control the
output width.
--terminal-width <width>
Explicitly set the width of the terminal instead of determining
it automatically. If prefixed with '+' or '-', the value will be
treated as an offset to the actual terminal width. See also:
'--wrap'.
-n, --number
Only show line numbers, no other decorations. This is an alias
for '--style=numbers'
--color <when>
Specify when to use colored output. The automatic mode only en
ables colors if an interactive terminal is detected. Possible
values: *auto*, never, always.
--italic-text <when>
Specify when to use ANSI sequences for italic text in the out
put. Possible values: always, *never*.
--decorations <when>
Specify when to use the decorations that have been specified via
'--style'. The automatic mode only enables decorations if an in
teractive terminal is detected. Possible values: *auto*, never,
always.
-f, --force-colorization
Alias for '--decorations=always --color=always'. This is useful
if the output of bat is piped to another program, but you want
to keep the colorization/decorations.
--paging <when>
Specify when to use the pager. To disable the pager, use '--pag
ing=never' or its alias, -P. To disable the pager permanently,
set BAT_PAGER to an empty string. To control which pager is
used, see the '--pager' option. Possible values: *auto*, never,
always.
--pager <command>
Determine which pager is used. This option will override the
PAGER and BAT_PAGER environment variables. The default pager is
'less'. To control when the pager is used, see the '--paging'
option. Example: '--pager "less -RF"'.
-m, --map-syntax <glob-pattern:syntax-name>...
Map a glob pattern to an existing syntax name. The glob pattern
is matched on the full path and the filename. For example, to
highlight *.build files with the Python syntax, use -m
'*.build:Python'. To highlight files named '.myignore' with the
Git Ignore syntax, use -m '.myignore:Git Ignore'.
--theme <theme>
Set the theme for syntax highlighting. Use '--list-themes' to
see all available themes. To set a default theme, add the
'--theme="..."' option to the configuration file or export the
BAT_THEME environment variable (e.g.: export BAT_THEME="...").
--list-themes
Display a list of supported themes for syntax highlighting.
--style <style-components>
Configure which elements (line numbers, file headers, grid bor
ders, Git modifications, ..) to display in addition to the file
contents. The argument is a comma-separated list of components
to display (e.g. 'numbers,changes,grid') or a pre-defined style
('full'). To set a default style, add the '--style=".."' option
to the configuration file or export the BAT_STYLE environment
variable (e.g.: export BAT_STYLE=".."). Possible values: *auto*,
full, plain, changes, header, grid, numbers, snip.
-r, --line-range <N:M>...
Only print the specified range of lines for each file. For exam
ple:
--line-range 30:40
prints lines 30 to 40
--line-range :40
prints lines 1 to 40
--line-range 40:
prints lines 40 to the end of the file
-L, --list-languages
Display a list of supported languages for syntax highlighting.
-u, --unbuffered
This option exists for POSIX-compliance reasons ('u' is for 'un
buffered'). The output is always unbuffered - this option is
simply ignored.
-h, --help
Print this help message.
-V, --version
Show version information.
POSITIONAL ARGUMENTS
<FILE>...
Files to print and concatenate. Use a dash ('-') or no argument
at all to read from standard input.
SUBCOMMANDS
cache - Modify the syntax-definition and theme cache.
FILES
bat can also be customized with a configuration file. The location of
the file is dependent on your operating system. To get the default path
for your system, call:
bat --config-file
Alternatively, you can use the BAT_CONFIG_PATH environment variable to
point bat to a non-default location of the configuration file.
ADDING CUSTOM LANGUAGES
bat supports Sublime Text .sublime-syntax language files, and can be
customized to add additional languages to your local installation. To
do this, add the .sublime-snytax language files to `$(bat --config-
dir)/syntaxes` and run `bat cache --build`.
Example:
mkdir -p "$(bat --config-dir)/syntaxes"
cd "$(bat --config-dir)/syntaxes"
# Put new '.sublime-syntax' language definition files
# in this folder (or its subdirectories), for example:
git clone https://github.com/tellnobody1/sublime-purescript-syntax
# And then build the cache.
bat cache --build
Once the cache is built, the new language will be visible in `bat
--list-languages`.
If you ever want to remove the custom languages, you can clear the
cache with `bat cache --clear`.
ADDING CUSTOM THEMES
Similarly to custom languages, bat supports Sublime Text .tmTheme
themes. These can be installed to `$(bat --config-dir)/themes`, and
are added to the cache with `bat cache --build`.
MORE INFORMATION
For more information and up-to-date documentation, visit the bat repo:
https://github.com/sharkdp/bat
BAT(1)