mirror of
https://github.com/ralsina/tartrazine.git
synced 2025-06-08 12:40:25 -03:00
Compare commits
No commits in common. "7f4296e9d72659ef798ff9fe0801dab0326ee54b" and "215d53e173655ec0a65f5c4ce3d56d40e41f6619" have entirely different histories.
7f4296e9d7
...
215d53e173
1
.gitignore
vendored
1
.gitignore
vendored
@ -8,4 +8,3 @@ pygments/
|
||||
shard.lock
|
||||
.vscode/
|
||||
.crystal/
|
||||
venv/
|
||||
|
@ -1,130 +0,0 @@
|
||||
|
||||
<lexer>
|
||||
<config>
|
||||
<name>liquid</name>
|
||||
<alias>liquid</alias>
|
||||
<filename>*.liquid</filename>
|
||||
</config>
|
||||
<rules>
|
||||
<state name="root">
|
||||
<rule pattern="[^{]+"><token type="Text"/></rule>
|
||||
<rule pattern="(\{%)(\s*)"><bygroups><token type="Punctuation"/><token type="TextWhitespace"/></bygroups><push state="tag-or-block"/></rule>
|
||||
<rule pattern="(\{\{)(\s*)([^\s}]+)"><bygroups><token type="Punctuation"/><token type="TextWhitespace"/><usingself state="generic"/></bygroups><push state="output"/></rule>
|
||||
<rule pattern="\{"><token type="Text"/></rule>
|
||||
</state>
|
||||
<state name="tag-or-block">
|
||||
<rule pattern="(if|unless|elsif|case)(?=\s+)"><token type="KeywordReserved"/><push state="condition"/></rule>
|
||||
<rule pattern="(when)(\s+)"><bygroups><token type="KeywordReserved"/><token type="TextWhitespace"/></bygroups><combined state="end-of-block" state="whitespace" state="generic"/></rule>
|
||||
<rule pattern="(else)(\s*)(%\})"><bygroups><token type="KeywordReserved"/><token type="TextWhitespace"/><token type="Punctuation"/></bygroups><pop depth="1"/></rule>
|
||||
<rule pattern="(capture)(\s+)([^\s%]+)(\s*)(%\})"><bygroups><token type="NameTag"/><token type="TextWhitespace"/><usingself state="variable"/><token type="TextWhitespace"/><token type="Punctuation"/></bygroups><pop depth="1"/></rule>
|
||||
<rule pattern="(comment)(\s*)(%\})"><bygroups><token type="NameTag"/><token type="TextWhitespace"/><token type="Punctuation"/></bygroups><push state="comment"/></rule>
|
||||
<rule pattern="(raw)(\s*)(%\})"><bygroups><token type="NameTag"/><token type="TextWhitespace"/><token type="Punctuation"/></bygroups><push state="raw"/></rule>
|
||||
<rule pattern="(end(case|unless|if))(\s*)(%\})"><bygroups><token type="KeywordReserved"/>None<token type="TextWhitespace"/><token type="Punctuation"/></bygroups><pop depth="1"/></rule>
|
||||
<rule pattern="(end([^\s%]+))(\s*)(%\})"><bygroups><token type="NameTag"/>None<token type="TextWhitespace"/><token type="Punctuation"/></bygroups><pop depth="1"/></rule>
|
||||
<rule pattern="(cycle)(\s+)(?:([^\s:]*)(:))?(\s*)"><bygroups><token type="NameTag"/><token type="TextWhitespace"/><usingself state="generic"/><token type="Punctuation"/><token type="TextWhitespace"/></bygroups><push state="variable-tag-markup"/></rule>
|
||||
<rule pattern="([^\s%]+)(\s*)"><bygroups><token type="NameTag"/><token type="TextWhitespace"/></bygroups><push state="tag-markup"/></rule>
|
||||
</state>
|
||||
<state name="output">
|
||||
<rule><include state="whitespace"/></rule>
|
||||
<rule pattern="\}\}"><token type="Punctuation"/><pop depth="1"/></rule>
|
||||
<rule pattern="\|"><token type="Punctuation"/><push state="filters"/></rule>
|
||||
</state>
|
||||
<state name="filters">
|
||||
<rule><include state="whitespace"/></rule>
|
||||
<rule pattern="\}\}"><token type="Punctuation"/><push state="#pop" state="#pop"/></rule>
|
||||
<rule pattern="([^\s|:]+)(:?)(\s*)"><bygroups><token type="NameFunction"/><token type="Punctuation"/><token type="TextWhitespace"/></bygroups><push state="filter-markup"/></rule>
|
||||
</state>
|
||||
<state name="filter-markup">
|
||||
<rule pattern="\|"><token type="Punctuation"/><pop depth="1"/></rule>
|
||||
<rule><include state="end-of-tag"/></rule>
|
||||
<rule><include state="default-param-markup"/></rule>
|
||||
</state>
|
||||
<state name="condition">
|
||||
<rule><include state="end-of-block"/></rule>
|
||||
<rule><include state="whitespace"/></rule>
|
||||
<rule pattern="([^\s=!><]+)(\s*)([=!><]=?)(\s*)(\S+)(\s*)(%\})"><bygroups><usingself state="generic"/><token type="TextWhitespace"/><token type="Operator"/><token type="TextWhitespace"/><usingself state="generic"/><token type="TextWhitespace"/><token type="Punctuation"/></bygroups></rule>
|
||||
<rule pattern="\b!"><token type="Operator"/></rule>
|
||||
<rule pattern="\bnot\b"><token type="OperatorWord"/></rule>
|
||||
<rule pattern="([\w.\'"]+)(\s+)(contains)(\s+)([\w.\'"]+)"><bygroups><usingself state="generic"/><token type="TextWhitespace"/><token type="OperatorWord"/><token type="TextWhitespace"/><usingself state="generic"/></bygroups></rule>
|
||||
<rule><include state="generic"/></rule>
|
||||
<rule><include state="whitespace"/></rule>
|
||||
</state>
|
||||
<state name="generic-value">
|
||||
<rule><include state="generic"/></rule>
|
||||
<rule><include state="end-at-whitespace"/></rule>
|
||||
</state>
|
||||
<state name="operator">
|
||||
<rule pattern="(\s*)((=|!|>|<)=?)(\s*)"><bygroups><token type="TextWhitespace"/><token type="Operator"/>None<token type="TextWhitespace"/></bygroups><pop depth="1"/></rule>
|
||||
<rule pattern="(\s*)(\bcontains\b)(\s*)"><bygroups><token type="TextWhitespace"/><token type="OperatorWord"/><token type="TextWhitespace"/></bygroups><pop depth="1"/></rule>
|
||||
</state>
|
||||
<state name="end-of-tag">
|
||||
<rule pattern="\}\}"><token type="Punctuation"/><pop depth="1"/></rule>
|
||||
</state>
|
||||
<state name="end-of-block">
|
||||
<rule pattern="%\}"><token type="Punctuation"/><push state="#pop" state="#pop"/></rule>
|
||||
</state>
|
||||
<state name="end-at-whitespace">
|
||||
<rule pattern="\s+"><token type="TextWhitespace"/><pop depth="1"/></rule>
|
||||
</state>
|
||||
<state name="param-markup">
|
||||
<rule><include state="whitespace"/></rule>
|
||||
<rule pattern="([^\s=:]+)(\s*)(=|:)"><bygroups><token type="NameAttribute"/><token type="TextWhitespace"/><token type="Operator"/></bygroups></rule>
|
||||
<rule pattern="(\{\{)(\s*)([^\s}])(\s*)(\}\})"><bygroups><token type="Punctuation"/><token type="TextWhitespace"/><usingself state="variable"/><token type="TextWhitespace"/><token type="Punctuation"/></bygroups></rule>
|
||||
<rule><include state="string"/></rule>
|
||||
<rule><include state="number"/></rule>
|
||||
<rule><include state="keyword"/></rule>
|
||||
<rule pattern=","><token type="Punctuation"/></rule>
|
||||
</state>
|
||||
<state name="default-param-markup">
|
||||
<rule><include state="param-markup"/></rule>
|
||||
<rule pattern="."><token type="Text"/></rule>
|
||||
</state>
|
||||
<state name="variable-param-markup">
|
||||
<rule><include state="param-markup"/></rule>
|
||||
<rule><include state="variable"/></rule>
|
||||
<rule pattern="."><token type="Text"/></rule>
|
||||
</state>
|
||||
<state name="tag-markup">
|
||||
<rule pattern="%\}"><token type="Punctuation"/><push state="#pop" state="#pop"/></rule>
|
||||
<rule><include state="default-param-markup"/></rule>
|
||||
</state>
|
||||
<state name="variable-tag-markup">
|
||||
<rule pattern="%\}"><token type="Punctuation"/><push state="#pop" state="#pop"/></rule>
|
||||
<rule><include state="variable-param-markup"/></rule>
|
||||
</state>
|
||||
<state name="keyword">
|
||||
<rule pattern="\b(false|true)\b"><token type="KeywordConstant"/></rule>
|
||||
</state>
|
||||
<state name="variable">
|
||||
<rule pattern="[a-zA-Z_]\w*"><token type="NameVariable"/></rule>
|
||||
<rule pattern="(?<=\w)\.(?=\w)"><token type="Punctuation"/></rule>
|
||||
</state>
|
||||
<state name="string">
|
||||
<rule pattern="'[^']*'"><token type="LiteralStringSingle"/></rule>
|
||||
<rule pattern=""[^"]*""><token type="LiteralStringDouble"/></rule>
|
||||
</state>
|
||||
<state name="number">
|
||||
<rule pattern="\d+\.\d+"><token type="LiteralNumberFloat"/></rule>
|
||||
<rule pattern="\d+"><token type="LiteralNumberInteger"/></rule>
|
||||
</state>
|
||||
<state name="generic">
|
||||
<rule><include state="keyword"/></rule>
|
||||
<rule><include state="string"/></rule>
|
||||
<rule><include state="number"/></rule>
|
||||
<rule><include state="variable"/></rule>
|
||||
</state>
|
||||
<state name="whitespace">
|
||||
<rule pattern="[ \t]+"><token type="TextWhitespace"/></rule>
|
||||
</state>
|
||||
<state name="comment">
|
||||
<rule pattern="(\{%)(\s*)(endcomment)(\s*)(%\})"><bygroups><token type="Punctuation"/><token type="TextWhitespace"/><token type="NameTag"/><token type="TextWhitespace"/><token type="Punctuation"/></bygroups><push state="#pop" state="#pop"/></rule>
|
||||
<rule pattern="."><token type="Comment"/></rule>
|
||||
</state>
|
||||
<state name="raw">
|
||||
<rule pattern="[^{]+"><token type="Text"/></rule>
|
||||
<rule pattern="(\{%)(\s*)(endraw)(\s*)(%\})"><bygroups><token type="Punctuation"/><token type="TextWhitespace"/><token type="NameTag"/><token type="TextWhitespace"/><token type="Punctuation"/></bygroups><pop depth="1"/></rule>
|
||||
<rule pattern="\{"><token type="Text"/></rule>
|
||||
</state>
|
||||
</rules>
|
||||
</lexer>
|
||||
|
@ -1,47 +0,0 @@
|
||||
|
||||
<lexer>
|
||||
<config>
|
||||
<name>Twig</name>
|
||||
<alias>twig</alias>
|
||||
<mime_type>application/x-twig</mime_type>
|
||||
<dot_all>true</dot_all>
|
||||
</config>
|
||||
<rules>
|
||||
<state name="root">
|
||||
<rule pattern="[^{]+"><token type="Other"/></rule>
|
||||
<rule pattern="\{\{"><token type="CommentPreproc"/><push state="var"/></rule>
|
||||
<rule pattern="\{\#.*?\#\}"><token type="Comment"/></rule>
|
||||
<rule pattern="(\{%)(-?\s*)(raw)(\s*-?)(%\})(.*?)(\{%)(-?\s*)(endraw)(\s*-?)(%\})"><bygroups><token type="CommentPreproc"/><token type="Text"/><token type="Keyword"/><token type="Text"/><token type="CommentPreproc"/><token type="Other"/><token type="CommentPreproc"/><token type="Text"/><token type="Keyword"/><token type="Text"/><token type="CommentPreproc"/></bygroups></rule>
|
||||
<rule pattern="(\{%)(-?\s*)(verbatim)(\s*-?)(%\})(.*?)(\{%)(-?\s*)(endverbatim)(\s*-?)(%\})"><bygroups><token type="CommentPreproc"/><token type="Text"/><token type="Keyword"/><token type="Text"/><token type="CommentPreproc"/><token type="Other"/><token type="CommentPreproc"/><token type="Text"/><token type="Keyword"/><token type="Text"/><token type="CommentPreproc"/></bygroups></rule>
|
||||
<rule pattern="(\{%)(-?\s*)(filter)(\s+)((?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w-]|[^\x00-\x7f])*)"><bygroups><token type="CommentPreproc"/><token type="Text"/><token type="Keyword"/><token type="Text"/><token type="NameFunction"/></bygroups><push state="tag"/></rule>
|
||||
<rule pattern="(\{%)(-?\s*)([a-zA-Z_]\w*)"><bygroups><token type="CommentPreproc"/><token type="Text"/><token type="Keyword"/></bygroups><push state="tag"/></rule>
|
||||
<rule pattern="\{"><token type="Other"/></rule>
|
||||
</state>
|
||||
<state name="varnames">
|
||||
<rule pattern="(\|)(\s*)((?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w-]|[^\x00-\x7f])*)"><bygroups><token type="Operator"/><token type="Text"/><token type="NameFunction"/></bygroups></rule>
|
||||
<rule pattern="(is)(\s+)(not)?(\s*)((?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w-]|[^\x00-\x7f])*)"><bygroups><token type="Keyword"/><token type="Text"/><token type="Keyword"/><token type="Text"/><token type="NameFunction"/></bygroups></rule>
|
||||
<rule pattern="(?i)(true|false|none|null)\b"><token type="KeywordPseudo"/></rule>
|
||||
<rule pattern="(in|not|and|b-and|or|b-or|b-xor|isif|elseif|else|importconstant|defined|divisibleby|empty|even|iterable|odd|sameasmatches|starts\s+with|ends\s+with)\b"><token type="Keyword"/></rule>
|
||||
<rule pattern="(loop|block|parent)\b"><token type="NameBuiltin"/></rule>
|
||||
<rule pattern="(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w-]|[^\x00-\x7f])*"><token type="NameVariable"/></rule>
|
||||
<rule pattern="\.(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w-]|[^\x00-\x7f])*"><token type="NameVariable"/></rule>
|
||||
<rule pattern="\.[0-9]+"><token type="LiteralNumber"/></rule>
|
||||
<rule pattern=":?"(\\\\|\\[^\\]|[^"\\])*""><token type="LiteralStringDouble"/></rule>
|
||||
<rule pattern=":?'(\\\\|\\[^\\]|[^'\\])*'"><token type="LiteralStringSingle"/></rule>
|
||||
<rule pattern="([{}()\[\]+\-*/,:~%]|\.\.|\?|:|\*\*|\/\/|!=|[><=]=?)"><token type="Operator"/></rule>
|
||||
<rule pattern="[0-9](\.[0-9]*)?(eE[+-][0-9])?[flFLdD]?|0[xX][0-9a-fA-F]+[Ll]?"><token type="LiteralNumber"/></rule>
|
||||
</state>
|
||||
<state name="var">
|
||||
<rule pattern="\s+"><token type="Text"/></rule>
|
||||
<rule pattern="(-?)(\}\})"><bygroups><token type="Text"/><token type="CommentPreproc"/></bygroups><pop depth="1"/></rule>
|
||||
<rule><include state="varnames"/></rule>
|
||||
</state>
|
||||
<state name="tag">
|
||||
<rule pattern="\s+"><token type="Text"/></rule>
|
||||
<rule pattern="(-?)(%\})"><bygroups><token type="Text"/><token type="CommentPreproc"/></bygroups><pop depth="1"/></rule>
|
||||
<rule><include state="varnames"/></rule>
|
||||
<rule pattern="."><token type="Punctuation"/></rule>
|
||||
</state>
|
||||
</rules>
|
||||
</lexer>
|
||||
|
@ -1,55 +0,0 @@
|
||||
|
||||
<lexer>
|
||||
<config>
|
||||
<name>Velocity</name>
|
||||
<alias>velocity</alias>
|
||||
<filename>*.vm</filename>
|
||||
<filename>*.fhtml</filename>
|
||||
<dot_all>true</dot_all>
|
||||
</config>
|
||||
<rules>
|
||||
<state name="root">
|
||||
<rule pattern="[^{#$]+"><token type="Other"/></rule>
|
||||
<rule pattern="(#)(\*.*?\*)(#)"><bygroups><token type="CommentPreproc"/><token type="Comment"/><token type="CommentPreproc"/></bygroups></rule>
|
||||
<rule pattern="(##)(.*?$)"><bygroups><token type="CommentPreproc"/><token type="Comment"/></bygroups></rule>
|
||||
<rule pattern="(#\{?)([a-zA-Z_]\w*)(\}?)(\s?\()"><bygroups><token type="CommentPreproc"/><token type="NameFunction"/><token type="CommentPreproc"/><token type="Punctuation"/></bygroups><push state="directiveparams"/></rule>
|
||||
<rule pattern="(#\{?)([a-zA-Z_]\w*)(\}|\b)"><bygroups><token type="CommentPreproc"/><token type="NameFunction"/><token type="CommentPreproc"/></bygroups></rule>
|
||||
<rule pattern="\$!?\{?"><token type="Punctuation"/><push state="variable"/></rule>
|
||||
</state>
|
||||
<state name="variable">
|
||||
<rule pattern="[a-zA-Z_]\w*"><token type="NameVariable"/></rule>
|
||||
<rule pattern="\("><token type="Punctuation"/><push state="funcparams"/></rule>
|
||||
<rule pattern="(\.)([a-zA-Z_]\w*)"><bygroups><token type="Punctuation"/><token type="NameVariable"/></bygroups><push/></rule>
|
||||
<rule pattern="\}"><token type="Punctuation"/><pop depth="1"/></rule>
|
||||
<rule><pop depth="1"/></rule>
|
||||
</state>
|
||||
<state name="directiveparams">
|
||||
<rule pattern="(&&|\|\||==?|!=?|[-<>+*%&|^/])|\b(eq|ne|gt|lt|ge|le|not|in)\b"><token type="Operator"/></rule>
|
||||
<rule pattern="\["><token type="Operator"/><push state="rangeoperator"/></rule>
|
||||
<rule pattern="\b[a-zA-Z_]\w*\b"><token type="NameFunction"/></rule>
|
||||
<rule><include state="funcparams"/></rule>
|
||||
</state>
|
||||
<state name="rangeoperator">
|
||||
<rule pattern="\.\."><token type="Operator"/></rule>
|
||||
<rule><include state="funcparams"/></rule>
|
||||
<rule pattern="\]"><token type="Operator"/><pop depth="1"/></rule>
|
||||
</state>
|
||||
<state name="funcparams">
|
||||
<rule pattern="\$!?\{?"><token type="Punctuation"/><push state="variable"/></rule>
|
||||
<rule pattern="\s+"><token type="Text"/></rule>
|
||||
<rule pattern="[,:]"><token type="Punctuation"/></rule>
|
||||
<rule pattern=""(\\\\|\\[^\\]|[^"\\])*""><token type="LiteralStringDouble"/></rule>
|
||||
<rule pattern="'(\\\\|\\[^\\]|[^'\\])*'"><token type="LiteralStringSingle"/></rule>
|
||||
<rule pattern="0[xX][0-9a-fA-F]+[Ll]?"><token type="LiteralNumber"/></rule>
|
||||
<rule pattern="\b[0-9]+\b"><token type="LiteralNumber"/></rule>
|
||||
<rule pattern="(true|false|null)\b"><token type="KeywordConstant"/></rule>
|
||||
<rule pattern="\("><token type="Punctuation"/><push/></rule>
|
||||
<rule pattern="\)"><token type="Punctuation"/><pop depth="1"/></rule>
|
||||
<rule pattern="\{"><token type="Punctuation"/><push/></rule>
|
||||
<rule pattern="\}"><token type="Punctuation"/><pop depth="1"/></rule>
|
||||
<rule pattern="\["><token type="Punctuation"/><push/></rule>
|
||||
<rule pattern="\]"><token type="Punctuation"/><pop depth="1"/></rule>
|
||||
</state>
|
||||
</rules>
|
||||
</lexer>
|
||||
|
@ -40,18 +40,15 @@ for fname in glob.glob("lexers/*.xml"):
|
||||
with open("src/constants/lexers.cr", "w") as f:
|
||||
f.write("module Tartrazine\n")
|
||||
f.write(" LEXERS_BY_NAME = {\n")
|
||||
for k in sorted(lexer_by_name.keys()):
|
||||
v = lexer_by_name[k]
|
||||
for k, v in lexer_by_name.items():
|
||||
f.write(f'"{k}" => "{v}", \n')
|
||||
f.write("}\n")
|
||||
f.write(" LEXERS_BY_MIMETYPE = {\n")
|
||||
for k in sorted(lexer_by_mimetype.keys()):
|
||||
v = lexer_by_mimetype[k]
|
||||
for k, v in lexer_by_mimetype.items():
|
||||
f.write(f'"{k}" => "{v}", \n')
|
||||
f.write("}\n")
|
||||
f.write(" LEXERS_BY_FILENAME = {\n")
|
||||
for k in sorted(lexer_by_filename.keys()):
|
||||
v = lexer_by_filename[k]
|
||||
for k, v in lexer_by_filename.items():
|
||||
f.write(f'"{k}" => {str(list(v)).replace("'", "\"")}, \n')
|
||||
f.write("}\n")
|
||||
f.write("end\n")
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -92,5 +92,4 @@ if options["-f"]
|
||||
outf = File.open(options["-o"].as(String), "w")
|
||||
end
|
||||
formatter.format(input, lexer, outf)
|
||||
outf.close
|
||||
end
|
||||
|
82
x.html
Normal file
82
x.html
Normal file
@ -0,0 +1,82 @@
|
||||
<!DOCTYPE html><html><head><style>.e {color: #aa0000;background-color: #ffaaaa;}.b {background-color: #f0f3f3;tab-size: 8;}.k {color: #006699;font-weight: bold;}.kp {font-weight: 600;}.kt {color: #007788;}.na {color: #330099;}.nb {color: #336666;}.nc {color: #00aa88;font-weight: bold;}.nc {color: #336600;}.nd {color: #9999ff;}.ne {color: #999999;font-weight: bold;}.ne {color: #cc0000;font-weight: bold;}.nf {color: #cc00ff;}.nl {color: #9999ff;}.nn {color: #00ccff;font-weight: bold;}.nt {color: #330099;font-weight: bold;}.nv {color: #003333;}.ls {color: #cc3300;}.lsd {font-style: italic;}.lse {color: #cc3300;font-weight: bold;}.lsi {color: #aa0000;}.lso {color: #cc3300;}.lsr {color: #33aaaa;}.lss {color: #ffcc33;}.ln {color: #ff6600;}.o {color: #555555;}.ow {color: #000000;font-weight: bold;}.c {color: #0099ff;font-style: italic;}.cs {font-weight: bold;}.cp {color: #009999;font-style: normal;}.gd {background-color: #ffcccc;border: 1px solid #cc0000;}.ge {font-style: italic;}.ge {color: #ff0000;}.gh {color: #003300;font-weight: bold;}.gi {background-color: #ccffcc;border: 1px solid #00cc00;}.go {color: #aaaaaa;}.gp {color: #000099;font-weight: bold;}.gs {font-weight: bold;}.gs {color: #003300;font-weight: bold;}.gt {color: #99cc66;}.gu {text-decoration: underline;}.tw {color: #bbbbbb;}.lh {}</style></head><body><pre class="b" ><code class="b"><span class="gh"># TARTRAZINE</span><span class="t">
|
||||
</span><span class="t"></span><span class="t">
|
||||
</span><span class="t">Tartrazine</span><span class="t"> </span><span class="t">is</span><span class="t"> </span><span class="t">a</span><span class="t"> </span><span class="t">library</span><span class="t"> </span><span class="t">to</span><span class="t"> </span><span class="t">syntax-highlight</span><span class="t"> </span><span class="t">code.</span><span class="t"> </span><span class="t">It</span><span class="t"> </span><span class="t">is</span><span class="t">
|
||||
</span><span class="t">a</span><span class="t"> </span><span class="t">port</span><span class="t"> </span><span class="t">of</span><span class="t"> </span><span class="t">[</span><span class="nt">Pygments</span><span class="t">]</span><span class="t">(</span><span class="na">https://pygments.org/</span><span class="t">)</span><span class="t"> </span><span class="t">to</span><span class="t">
|
||||
</span><span class="t">[</span><span class="nt">Crystal</span><span class="t">]</span><span class="t">(</span><span class="na">https://crystal-lang.org/</span><span class="t">)</span><span class="t">.</span><span class="t"> </span><span class="t">Kind</span><span class="t"> </span><span class="t">of.</span><span class="t">
|
||||
</span><span class="t">
|
||||
</span><span class="t">The</span><span class="t"> </span><span class="t">CLI</span><span class="t"> </span><span class="t">tool</span><span class="t"> </span><span class="t">can</span><span class="t"> </span><span class="t">be</span><span class="t"> </span><span class="t">used</span><span class="t"> </span><span class="t">to</span><span class="t"> </span><span class="t">highlight</span><span class="t"> </span><span class="t">many</span><span class="t"> </span><span class="t">things</span><span class="t"> </span><span class="t">in</span><span class="t"> </span><span class="t">many</span><span class="t"> </span><span class="t">styles.</span><span class="t">
|
||||
</span><span class="t">
|
||||
</span><span class="gh"># A port of what? Why "kind of"?</span><span class="t">
|
||||
</span><span class="t"></span><span class="t">
|
||||
</span><span class="t">Pygments</span><span class="t"> </span><span class="t">is</span><span class="t"> </span><span class="t">a</span><span class="t"> </span><span class="t">staple</span><span class="t"> </span><span class="t">of</span><span class="t"> </span><span class="t">the</span><span class="t"> </span><span class="t">Python</span><span class="t"> </span><span class="t">ecosystem,</span><span class="t"> </span><span class="t">and</span><span class="t"> </span><span class="t">it's</span><span class="t"> </span><span class="t">great.</span><span class="t">
|
||||
</span><span class="t">It</span><span class="t"> </span><span class="t">lets</span><span class="t"> </span><span class="t">you</span><span class="t"> </span><span class="t">highlight</span><span class="t"> </span><span class="t">code</span><span class="t"> </span><span class="t">in</span><span class="t"> </span><span class="t">many</span><span class="t"> </span><span class="t">languages,</span><span class="t"> </span><span class="t">and</span><span class="t"> </span><span class="t">it</span><span class="t"> </span><span class="t">has</span><span class="t"> </span><span class="t">many</span><span class="t">
|
||||
</span><span class="t">themes.</span><span class="t"> </span><span class="t">Chroma</span><span class="t"> </span><span class="t">is</span><span class="t"> </span><span class="t">"Pygments</span><span class="t"> </span><span class="t">for</span><span class="t"> </span><span class="t">Go",</span><span class="t"> </span><span class="t">it's</span><span class="t"> </span><span class="t">actually</span><span class="t"> </span><span class="t">a</span><span class="t"> </span><span class="t">port</span><span class="t"> </span><span class="t">of</span><span class="t">
|
||||
</span><span class="t">Pygments</span><span class="t"> </span><span class="t">to</span><span class="t"> </span><span class="t">Go,</span><span class="t"> </span><span class="t">and</span><span class="t"> </span><span class="t">it's</span><span class="t"> </span><span class="t">great</span><span class="t"> </span><span class="t">too.</span><span class="t">
|
||||
</span><span class="t">
|
||||
</span><span class="t">I</span><span class="t"> </span><span class="t">wanted</span><span class="t"> </span><span class="t">that</span><span class="t"> </span><span class="t">in</span><span class="t"> </span><span class="t">Crystal,</span><span class="t"> </span><span class="t">so</span><span class="t"> </span><span class="t">I</span><span class="t"> </span><span class="t">started</span><span class="t"> </span><span class="t">this</span><span class="t"> </span><span class="t">project.</span><span class="t"> </span><span class="t">But</span><span class="t"> </span><span class="t">I</span><span class="t"> </span><span class="t">did</span><span class="t">
|
||||
</span><span class="t">not</span><span class="t"> </span><span class="t">read</span><span class="t"> </span><span class="t">much</span><span class="t"> </span><span class="t">of</span><span class="t"> </span><span class="t">the</span><span class="t"> </span><span class="t">Pygments</span><span class="t"> </span><span class="t">code.</span><span class="t"> </span><span class="t">Or</span><span class="t"> </span><span class="t">much</span><span class="t"> </span><span class="t">of</span><span class="t"> </span><span class="t">Chroma's.</span><span class="t">
|
||||
</span><span class="t">
|
||||
</span><span class="t">Chroma</span><span class="t"> </span><span class="t">has</span><span class="t"> </span><span class="t">taken</span><span class="t"> </span><span class="t">most</span><span class="t"> </span><span class="t">of</span><span class="t"> </span><span class="t">the</span><span class="t"> </span><span class="t">Pygments</span><span class="t"> </span><span class="t">lexers</span><span class="t"> </span><span class="t">and</span><span class="t"> </span><span class="t">turned</span><span class="t"> </span><span class="t">them</span><span class="t"> </span><span class="t">into</span><span class="t">
|
||||
</span><span class="t">XML</span><span class="t"> </span><span class="t">descriptions.</span><span class="t"> </span><span class="t">What</span><span class="t"> </span><span class="t">I</span><span class="t"> </span><span class="t">did</span><span class="t"> </span><span class="t">was</span><span class="t"> </span><span class="t">take</span><span class="t"> </span><span class="t">those</span><span class="t"> </span><span class="t">XML</span><span class="t"> </span><span class="t">files</span><span class="t"> </span><span class="t">from</span><span class="t"> </span><span class="t">Chroma</span><span class="t">
|
||||
</span><span class="t">and</span><span class="t"> </span><span class="t">a</span><span class="t"> </span><span class="t">pile</span><span class="t"> </span><span class="t">of</span><span class="t"> </span><span class="t">test</span><span class="t"> </span><span class="t">cases</span><span class="t"> </span><span class="t">from</span><span class="t"> </span><span class="t">Pygments,</span><span class="t"> </span><span class="t">and</span><span class="t"> </span><span class="t">I</span><span class="t"> </span><span class="t">slapped</span><span class="t"> </span><span class="t">them</span><span class="t"> </span><span class="t">together</span><span class="t">
|
||||
</span><span class="t">until</span><span class="t"> </span><span class="t">the</span><span class="t"> </span><span class="t">tests</span><span class="t"> </span><span class="t">passed</span><span class="t"> </span><span class="t">and</span><span class="t"> </span><span class="t">my</span><span class="t"> </span><span class="t">code</span><span class="t"> </span><span class="t">produced</span><span class="t"> </span><span class="t">the</span><span class="t"> </span><span class="t">same</span><span class="t"> </span><span class="t">output</span><span class="t"> </span><span class="t">as</span><span class="t">
|
||||
</span><span class="t">Chroma.</span><span class="t"> </span><span class="t">Think</span><span class="t"> </span><span class="t">of</span><span class="t"> </span><span class="t">it</span><span class="t"> </span><span class="t">as</span><span class="t"> </span><span class="ge">*extreme TDD*</span><span class="t">.</span><span class="t">
|
||||
</span><span class="t">
|
||||
</span><span class="t">Currently</span><span class="t"> </span><span class="t">the</span><span class="t"> </span><span class="t">pass</span><span class="t"> </span><span class="t">rate</span><span class="t"> </span><span class="t">for</span><span class="t"> </span><span class="t">tests</span><span class="t"> </span><span class="t">in</span><span class="t"> </span><span class="t">the</span><span class="t"> </span><span class="t">supported</span><span class="t"> </span><span class="t">languages</span><span class="t">
|
||||
</span><span class="t">is</span><span class="t"> </span><span class="lsb">`96.8%`</span><span class="t">,</span><span class="t"> </span><span class="t">which</span><span class="t"> </span><span class="t">is</span><span class="t"> </span><span class="ge">*not bad for a couple days hacking*</span><span class="t">.</span><span class="t">
|
||||
</span><span class="t">
|
||||
</span><span class="t">This</span><span class="t"> </span><span class="t">only</span><span class="t"> </span><span class="t">covers</span><span class="t"> </span><span class="t">the</span><span class="t"> </span><span class="t">RegexLexers,</span><span class="t"> </span><span class="t">which</span><span class="t"> </span><span class="t">are</span><span class="t"> </span><span class="t">the</span><span class="t"> </span><span class="t">most</span><span class="t"> </span><span class="t">common</span><span class="t"> </span><span class="t">ones,</span><span class="t">
|
||||
</span><span class="t">but</span><span class="t"> </span><span class="t">it</span><span class="t"> </span><span class="t">means</span><span class="t"> </span><span class="t">the</span><span class="t"> </span><span class="t">supported</span><span class="t"> </span><span class="t">languages</span><span class="t"> </span><span class="t">are</span><span class="t"> </span><span class="t">a</span><span class="t"> </span><span class="t">subset</span><span class="t"> </span><span class="t">of</span><span class="t"> </span><span class="t">Chroma's,</span><span class="t"> </span><span class="t">which</span><span class="t">
|
||||
</span><span class="t">is</span><span class="t"> </span><span class="t">a</span><span class="t"> </span><span class="t">subset</span><span class="t"> </span><span class="t">of</span><span class="t"> </span><span class="t">Pygments'.</span><span class="t">
|
||||
</span><span class="t">
|
||||
</span><span class="t">Currently</span><span class="t"> </span><span class="t">Tartrazine</span><span class="t"> </span><span class="t">supports</span><span class="t"> </span><span class="t">...</span><span class="t"> </span><span class="t">241</span><span class="t"> </span><span class="t">languages.</span><span class="t">
|
||||
</span><span class="t">
|
||||
</span><span class="t">It</span><span class="t"> </span><span class="t">has</span><span class="t"> </span><span class="t">331</span><span class="t"> </span><span class="t">themes</span><span class="t"> </span><span class="t">(63</span><span class="t"> </span><span class="t">from</span><span class="t"> </span><span class="t">Chroma,</span><span class="t"> </span><span class="t">the</span><span class="t"> </span><span class="t">rest</span><span class="t"> </span><span class="t">are</span><span class="t"> </span><span class="t">base16</span><span class="t"> </span><span class="t">themes</span><span class="t"> </span><span class="t">via</span><span class="t">
|
||||
</span><span class="t">[</span><span class="nt">Sixteen</span><span class="t">]</span><span class="t">(</span><span class="na">https://github.com/ralsina/sixteen</span><span class="t">)</span><span class="t">
|
||||
</span><span class="t">
|
||||
</span><span class="gs">## Installation</span><span class="t">
|
||||
</span><span class="t"></span><span class="t">
|
||||
</span><span class="t">From</span><span class="t"> </span><span class="t">prebuilt</span><span class="t"> </span><span class="t">binaries:</span><span class="t">
|
||||
</span><span class="t">
|
||||
</span><span class="t">Each</span><span class="t"> </span><span class="t">release</span><span class="t"> </span><span class="t">provides</span><span class="t"> </span><span class="t">statically-linked</span><span class="t"> </span><span class="t">binaries</span><span class="t"> </span><span class="t">that</span><span class="t"> </span><span class="t">should</span><span class="t">
|
||||
</span><span class="t">work</span><span class="t"> </span><span class="t">on</span><span class="t"> </span><span class="t">any</span><span class="t"> </span><span class="t">Linux.</span><span class="t"> </span><span class="t">Get</span><span class="t"> </span><span class="t">them</span><span class="t"> </span><span class="t">from</span><span class="t"> </span><span class="t">the</span><span class="t"> </span><span class="t">[</span><span class="nt">releases page</span><span class="t">]</span><span class="t">(</span><span class="na">https://github.com/ralsina/tartrazine/releases</span><span class="t">)</span><span class="t"> </span><span class="t">and</span><span class="t"> </span><span class="t">put</span><span class="t"> </span><span class="t">them</span><span class="t"> </span><span class="t">in</span><span class="t"> </span><span class="t">your</span><span class="t"> </span><span class="t">PATH.</span><span class="t">
|
||||
</span><span class="t">
|
||||
</span><span class="t">To</span><span class="t"> </span><span class="t">build</span><span class="t"> </span><span class="t">from</span><span class="t"> </span><span class="t">source:</span><span class="t">
|
||||
</span><span class="tw">
|
||||
</span><span class="tw"></span><span class="k">1.</span><span class="t"> </span><span class="t">Clone</span><span class="t"> </span><span class="t">this</span><span class="t"> </span><span class="t">repo</span><span class="t">
|
||||
</span><span class="t"></span><span class="k">2.</span><span class="t"> </span><span class="t">Run</span><span class="t"> </span><span class="lsb">`make`</span><span class="t"> </span><span class="t">to</span><span class="t"> </span><span class="t">build</span><span class="t"> </span><span class="t">the</span><span class="t"> </span><span class="lsb">`tartrazine`</span><span class="t"> </span><span class="t">binary</span><span class="t">
|
||||
</span><span class="t"></span><span class="k">3.</span><span class="t"> </span><span class="t">Copy</span><span class="t"> </span><span class="t">the</span><span class="t"> </span><span class="t">binary</span><span class="t"> </span><span class="t">somewhere</span><span class="t"> </span><span class="t">in</span><span class="t"> </span><span class="t">your</span><span class="t"> </span><span class="t">PATH.</span><span class="t">
|
||||
</span><span class="t"></span><span class="t">
|
||||
</span><span class="gs">## Usage as a CLI tool</span><span class="t">
|
||||
</span><span class="t"></span><span class="t">
|
||||
</span><span class="t">```shell
|
||||
</span><span class="t">$ tartrazine whatever.c -l c -t catppuccin-macchiato --line-numbers \
|
||||
</span><span class="t"> --standalone -o whatever.html
|
||||
</span><span class="t">```
|
||||
</span><span class="t"></span><span class="t">
|
||||
</span><span class="gs">## Usage as a Library</span><span class="t">
|
||||
</span><span class="t"></span><span class="t">
|
||||
</span><span class="t">This</span><span class="t"> </span><span class="t">works:</span><span class="t">
|
||||
</span><span class="t">
|
||||
</span><span class="t">```crystal
|
||||
</span><span class="t">require "tartrazine"
|
||||
</span><span class="t">
|
||||
</span><span class="t">lexer = Tartrazine.lexer("crystal")
|
||||
</span><span class="t">theme = Tartrazine.theme("catppuccin-macchiato")
|
||||
</span><span class="t">formatter = Tartrazine::Html.new
|
||||
</span><span class="t">formatter.theme = theme
|
||||
</span><span class="t">puts formatter.format(File.read(ARGV[0]), lexer)
|
||||
</span><span class="t">```
|
||||
</span><span class="t"></span><span class="t">
|
||||
</span><span class="gs">## Contributing</span><span class="t">
|
||||
</span><span class="t"></span><span class="tw">
|
||||
</span><span class="tw"></span><span class="k">1.</span><span class="t"> </span><span class="t">Fork</span><span class="t"> </span><span class="t">it</span><span class="t"> </span><span class="t">(<https://github.com/ralsina/tartrazine/fork>)</span><span class="t">
|
||||
</span><span class="t"></span><span class="k">2.</span><span class="t"> </span><span class="t">Create</span><span class="t"> </span><span class="t">your</span><span class="t"> </span><span class="t">feature</span><span class="t"> </span><span class="t">branch</span><span class="t"> </span><span class="t">(</span><span class="lsb">`git checkout -b my-new-feature`</span><span class="t">)</span><span class="t">
|
||||
</span><span class="t"></span><span class="k">3.</span><span class="t"> </span><span class="t">Commit</span><span class="t"> </span><span class="t">your</span><span class="t"> </span><span class="t">changes</span><span class="t"> </span><span class="t">(</span><span class="lsb">`git commit -am 'Add some feature'`</span><span class="t">)</span><span class="t">
|
||||
</span><span class="t"></span><span class="k">4.</span><span class="t"> </span><span class="t">Push</span><span class="t"> </span><span class="t">to</span><span class="t"> </span><span class="t">the</span><span class="t"> </span><span class="t">branch</span><span class="t"> </span><span class="t">(</span><span class="lsb">`git push origin my-new-feature`</span><span class="t">)</span><span class="t">
|
||||
</span><span class="t"></span><span class="k">5.</span><span class="t"> </span><span class="t">Create</span><span class="t"> </span><span class="t">a</span><span class="t"> </span><span class="t">new</span><span class="t"> </span><span class="t">Pull</span><span class="t"> </span><span class="t">Request</span><span class="t">
|
||||
</span><span class="t"></span><span class="t">
|
||||
</span><span class="gs">## Contributors</span><span class="t">
|
||||
</span><span class="t"></span><span class="tw">
|
||||
</span><span class="tw"></span><span class="k">-</span><span class="tw"> </span><span class="t">[</span><span class="nt">Roberto Alsina</span><span class="t">]</span><span class="t">(</span><span class="na">https://github.com/ralsina</span><span class="t">)</span><span class="t"> </span><span class="t">-</span><span class="t"> </span><span class="t">creator</span><span class="t"> </span><span class="t">and</span><span class="t"> </span><span class="t">maintainer</span><span class="t">
|
||||
</span><span class="t"></span></code></pre></body></html>
|
Loading…
x
Reference in New Issue
Block a user