diff options
Diffstat (limited to 'venv/lib/python3.11/site-packages/pygments/lexers/scdoc.py')
-rw-r--r-- | venv/lib/python3.11/site-packages/pygments/lexers/scdoc.py | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/pygments/lexers/scdoc.py b/venv/lib/python3.11/site-packages/pygments/lexers/scdoc.py new file mode 100644 index 0000000..90478ac --- /dev/null +++ b/venv/lib/python3.11/site-packages/pygments/lexers/scdoc.py @@ -0,0 +1,86 @@ +""" + pygments.lexers.scdoc + ~~~~~~~~~~~~~~~~~~~~~ + + Lexer for scdoc, a simple man page generator. + + :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import re + +from pygments.lexer import RegexLexer, include, bygroups, using, this +from pygments.token import Text, Comment, Keyword, String, Generic + +__all__ = ['ScdocLexer'] + + +class ScdocLexer(RegexLexer): + """ + `scdoc` is a simple man page generator for POSIX systems written in C99. + + .. versionadded:: 2.5 + """ + name = 'scdoc' + url = 'https://git.sr.ht/~sircmpwn/scdoc' + aliases = ['scdoc', 'scd'] + filenames = ['*.scd', '*.scdoc'] + flags = re.MULTILINE + + tokens = { + 'root': [ + # comment + (r'^(;.+\n)', bygroups(Comment)), + + # heading with pound prefix + (r'^(#)([^#].+\n)', bygroups(Generic.Heading, Text)), + (r'^(#{2})(.+\n)', bygroups(Generic.Subheading, Text)), + # bulleted lists + (r'^(\s*)([*-])(\s)(.+\n)', + bygroups(Text, Keyword, Text, using(this, state='inline'))), + # numbered lists + (r'^(\s*)(\.+\.)( .+\n)', + bygroups(Text, Keyword, using(this, state='inline'))), + # quote + (r'^(\s*>\s)(.+\n)', bygroups(Keyword, Generic.Emph)), + # text block + (r'^(```\n)([\w\W]*?)(^```$)', bygroups(String, Text, String)), + + include('inline'), + ], + 'inline': [ + # escape + (r'\\.', Text), + # underlines + (r'(\s)(_[^_]+_)(\W|\n)', bygroups(Text, Generic.Emph, Text)), + # bold + (r'(\s)(\*[^*]+\*)(\W|\n)', bygroups(Text, Generic.Strong, Text)), + # inline code + (r'`[^`]+`', String.Backtick), + + # general text, must come last! + (r'[^\\\s]+', Text), + (r'.', Text), + ], + } + + def analyse_text(text): + """We checks for bold and underline text with * and _. Also + every scdoc file must start with a strictly defined first line.""" + result = 0 + + if '*' in text: + result += 0.01 + + if '_' in text: + result += 0.01 + + # name(section) ["left_footer" ["center_header"]] + first_line = text.partition('\n')[0] + scdoc_preamble_pattern = r'^.*\([1-7]\)( "[^"]+"){0,2}$' + + if re.search(scdoc_preamble_pattern, first_line): + result += 0.5 + + return result |