mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
Added more pygments options for code blocks
This commit is contained in:
parent
e228357f58
commit
ece437f8fd
17 changed files with 196 additions and 16 deletions
|
|
@ -8,20 +8,29 @@ from pygments import highlight
|
||||||
from pygments.lexers import get_lexer_by_name, TextLexer
|
from pygments.lexers import get_lexer_by_name, TextLexer
|
||||||
import re
|
import re
|
||||||
|
|
||||||
INLINESTYLES = False
|
|
||||||
DEFAULT = HtmlFormatter(noclasses=INLINESTYLES)
|
|
||||||
VARIANTS = {
|
|
||||||
'linenos': HtmlFormatter(noclasses=INLINESTYLES, linenos=True),
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class Pygments(Directive):
|
class Pygments(Directive):
|
||||||
""" Source code syntax hightlighting.
|
""" Source code syntax highlighting.
|
||||||
"""
|
"""
|
||||||
required_arguments = 1
|
required_arguments = 1
|
||||||
optional_arguments = 0
|
optional_arguments = 0
|
||||||
final_argument_whitespace = True
|
final_argument_whitespace = True
|
||||||
option_spec = dict([(key, directives.flag) for key in VARIANTS])
|
option_spec = {
|
||||||
|
'anchorlinenos': directives.flag,
|
||||||
|
'classprefix': directives.unchanged,
|
||||||
|
'hl_lines': directives.unchanged,
|
||||||
|
'lineanchors': directives.unchanged,
|
||||||
|
'linenos': directives.unchanged,
|
||||||
|
'linenospecial': directives.nonnegative_int,
|
||||||
|
'linenostart': directives.nonnegative_int,
|
||||||
|
'linenostep': directives.nonnegative_int,
|
||||||
|
'lineseparator': directives.unchanged,
|
||||||
|
'linespans': directives.unchanged,
|
||||||
|
'nobackground': directives.flag,
|
||||||
|
'nowrap': directives.flag,
|
||||||
|
'tagsfile': directives.unchanged,
|
||||||
|
'tagurlformat': directives.unchanged,
|
||||||
|
}
|
||||||
has_content = True
|
has_content = True
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
|
|
@ -31,9 +40,17 @@ class Pygments(Directive):
|
||||||
except ValueError:
|
except ValueError:
|
||||||
# no lexer found - use the text one instead of an exception
|
# no lexer found - use the text one instead of an exception
|
||||||
lexer = TextLexer()
|
lexer = TextLexer()
|
||||||
# take an arbitrary option if more than one is given
|
|
||||||
formatter = self.options and VARIANTS[list(self.options.keys())[0]] \
|
if ('linenos' in self.options and
|
||||||
or DEFAULT
|
self.options['linenos'] not in ('table', 'inline')):
|
||||||
|
self.options['linenos'] = 'table'
|
||||||
|
|
||||||
|
for flag in ('nowrap', 'nobackground', 'anchorlinenos'):
|
||||||
|
if flag in self.options:
|
||||||
|
self.options[flag] = True
|
||||||
|
|
||||||
|
# noclasses should already default to False, but just in case...
|
||||||
|
formatter = HtmlFormatter(noclasses=False, **self.options)
|
||||||
parsed = highlight('\n'.join(self.content), lexer, formatter)
|
parsed = highlight('\n'.join(self.content), lexer, formatter)
|
||||||
return [nodes.raw('', parsed, format='html')]
|
return [nodes.raw('', parsed, format='html')]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,9 @@
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</td></tr></table><p>Lovely.</p>
|
</td></tr></table><p>Lovely.</p>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="section" id="testing-more-sourcecode-directives">
|
||||||
|
<h2>Testing more sourcecode directives</h2>
|
||||||
|
<div class="highlight"><pre><span id="foo-8"><a name="foo-8"></a><span class="lineno special"> 8</span> <span class="testingk">def</span> <span class="testingnf">run</span><span class="testingp">(</span><span class="testingbp">self</span><span class="testingp">):</span><br></span><span id="foo-9"><a name="foo-9"></a><span class="lineno"> </span> <span class="testingbp">self</span><span class="testingo">.</span><span class="testingn">assert_has_content</span><span class="testingp">()</span><br></span><span id="foo-10"><a name="foo-10"></a><span class="lineno special">10</span> <span class="testingk">try</span><span class="testingp">:</span><br></span><span id="foo-11"><a name="foo-11"></a><span class="lineno"> </span> <span class="testingn">lexer</span> <span class="testingo">=</span> <span class="testingn">get_lexer_by_name</span><span class="testingp">(</span><span class="testingbp">self</span><span class="testingo">.</span><span class="testingn">arguments</span><span class="testingp">[</span><span class="testingmi">0</span><span class="testingp">])</span><br></span><span id="foo-12"><a name="foo-12"></a><span class="lineno special">12</span> <span class="testingk">except</span> <span class="testingne">ValueError ...</span></span></pre></div></div>
|
||||||
<a class="readmore" href="/unbelievable.html">read more</a>
|
<a class="readmore" href="/unbelievable.html">read more</a>
|
||||||
</div><!-- /.entry-content -->
|
</div><!-- /.entry-content -->
|
||||||
</article></li>
|
</article></li>
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -221,7 +221,9 @@ YEAH !</p>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</td></tr></table><p>Lovely.</p>
|
</td></tr></table><p>Lovely.</p>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="section" id="testing-more-sourcecode-directives">
|
||||||
|
<h2>Testing more sourcecode directives</h2>
|
||||||
|
<div class="highlight"><pre><span id="foo-8"><a name="foo-8"></a><span class="lineno special"> 8</span> <span class="testingk">def</span> <span class="testingnf">run</span><span class="testingp">(</span><span class="testingbp">self</span><span class="testingp">):</span><br></span><span id="foo-9"><a name="foo-9"></a><span class="lineno"> </span> <span class="testingbp">self</span><span class="testingo">.</span><span class="testingn">assert_has_content</span><span class="testingp">()</span><br></span><span id="foo-10"><a name="foo-10"></a><span class="lineno special">10</span> <span class="testingk">try</span><span class="testingp">:</span><br></span><span id="foo-11"><a name="foo-11"></a><span class="lineno"> </span> <span class="testingn">lexer</span> <span class="testingo">=</span> <span class="testingn">get_lexer_by_name</span><span class="testingp">(</span><span class="testingbp">self</span><span class="testingo">.</span><span class="testingn">arguments</span><span class="testingp">[</span><span class="testingmi">0</span><span class="testingp">])</span><br></span><span id="foo-12"><a name="foo-12"></a><span class="lineno special">12</span> <span class="testingk">except</span> <span class="testingne">ValueError ...</span></span></pre></div></div>
|
||||||
<a class="readmore" href="/unbelievable.html">read more</a>
|
<a class="readmore" href="/unbelievable.html">read more</a>
|
||||||
</div><!-- /.entry-content -->
|
</div><!-- /.entry-content -->
|
||||||
</article></li>
|
</article></li>
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -57,7 +57,9 @@
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</td></tr></table><p>Lovely.</p>
|
</td></tr></table><p>Lovely.</p>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="section" id="testing-more-sourcecode-directives">
|
||||||
|
<h2>Testing more sourcecode directives</h2>
|
||||||
|
<div class="highlight"><pre><span id="foo-8"><a name="foo-8"></a><span class="lineno special"> 8</span> <span class="testingk">def</span> <span class="testingnf">run</span><span class="testingp">(</span><span class="testingbp">self</span><span class="testingp">):</span><br></span><span id="foo-9"><a name="foo-9"></a><span class="lineno"> </span> <span class="testingbp">self</span><span class="testingo">.</span><span class="testingn">assert_has_content</span><span class="testingp">()</span><br></span><span id="foo-10"><a name="foo-10"></a><span class="lineno special">10</span> <span class="testingk">try</span><span class="testingp">:</span><br></span><span id="foo-11"><a name="foo-11"></a><span class="lineno"> </span> <span class="testingn">lexer</span> <span class="testingo">=</span> <span class="testingn">get_lexer_by_name</span><span class="testingp">(</span><span class="testingbp">self</span><span class="testingo">.</span><span class="testingn">arguments</span><span class="testingp">[</span><span class="testingmi">0</span><span class="testingp">])</span><br></span><span id="foo-12"><a name="foo-12"></a><span class="lineno special">12</span> <span class="testingk">except</span> <span class="testingne">ValueError ...</span></span></pre></div></div>
|
||||||
<a class="readmore" href="../unbelievable.html">read more</a>
|
<a class="readmore" href="../unbelievable.html">read more</a>
|
||||||
<p>There are <a href="../unbelievable.html#disqus_thread">comments</a>.</p> </div><!-- /.entry-content -->
|
<p>There are <a href="../unbelievable.html#disqus_thread">comments</a>.</p> </div><!-- /.entry-content -->
|
||||||
</article></li>
|
</article></li>
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,9 @@
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</td></tr></table><p>Lovely.</p>
|
</td></tr></table><p>Lovely.</p>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="section" id="testing-more-sourcecode-directives">
|
||||||
|
<h2>Testing more sourcecode directives</h2>
|
||||||
|
<div class="highlight"><pre><span id="foo-8"><a name="foo-8"></a><span class="lineno special"> 8</span> <span class="testingk">def</span> <span class="testingnf">run</span><span class="testingp">(</span><span class="testingbp">self</span><span class="testingp">):</span><br></span><span id="foo-9"><a name="foo-9"></a><span class="lineno"> </span> <span class="testingbp">self</span><span class="testingo">.</span><span class="testingn">assert_has_content</span><span class="testingp">()</span><br></span><span id="foo-10"><a name="foo-10"></a><span class="lineno special">10</span> <span class="testingk">try</span><span class="testingp">:</span><br></span><span id="foo-11"><a name="foo-11"></a><span class="lineno"> </span> <span class="testingn">lexer</span> <span class="testingo">=</span> <span class="testingn">get_lexer_by_name</span><span class="testingp">(</span><span class="testingbp">self</span><span class="testingo">.</span><span class="testingn">arguments</span><span class="testingp">[</span><span class="testingmi">0</span><span class="testingp">])</span><br></span><span id="foo-12"><a name="foo-12"></a><span class="lineno special">12</span> <span class="testingk">except</span> <span class="testingne">ValueError ...</span></span></pre></div></div>
|
||||||
<a class="readmore" href="../unbelievable.html">read more</a>
|
<a class="readmore" href="../unbelievable.html">read more</a>
|
||||||
<p>There are <a href="../unbelievable.html#disqus_thread">comments</a>.</p> </div><!-- /.entry-content -->
|
<p>There are <a href="../unbelievable.html#disqus_thread">comments</a>.</p> </div><!-- /.entry-content -->
|
||||||
</article></li>
|
</article></li>
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -57,7 +57,9 @@
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</td></tr></table><p>Lovely.</p>
|
</td></tr></table><p>Lovely.</p>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="section" id="testing-more-sourcecode-directives">
|
||||||
|
<h2>Testing more sourcecode directives</h2>
|
||||||
|
<div class="highlight"><pre><span id="foo-8"><a name="foo-8"></a><span class="lineno special"> 8</span> <span class="testingk">def</span> <span class="testingnf">run</span><span class="testingp">(</span><span class="testingbp">self</span><span class="testingp">):</span><br></span><span id="foo-9"><a name="foo-9"></a><span class="lineno"> </span> <span class="testingbp">self</span><span class="testingo">.</span><span class="testingn">assert_has_content</span><span class="testingp">()</span><br></span><span id="foo-10"><a name="foo-10"></a><span class="lineno special">10</span> <span class="testingk">try</span><span class="testingp">:</span><br></span><span id="foo-11"><a name="foo-11"></a><span class="lineno"> </span> <span class="testingn">lexer</span> <span class="testingo">=</span> <span class="testingn">get_lexer_by_name</span><span class="testingp">(</span><span class="testingbp">self</span><span class="testingo">.</span><span class="testingn">arguments</span><span class="testingp">[</span><span class="testingmi">0</span><span class="testingp">])</span><br></span><span id="foo-12"><a name="foo-12"></a><span class="lineno special">12</span> <span class="testingk">except</span> <span class="testingne">ValueError ...</span></span></pre></div></div>
|
||||||
<a class="readmore" href="./unbelievable.html">read more</a>
|
<a class="readmore" href="./unbelievable.html">read more</a>
|
||||||
<p>There are <a href="./unbelievable.html#disqus_thread">comments</a>.</p> </div><!-- /.entry-content -->
|
<p>There are <a href="./unbelievable.html#disqus_thread">comments</a>.</p> </div><!-- /.entry-content -->
|
||||||
</article></li>
|
</article></li>
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -18,3 +18,56 @@ Testing sourcecode directive
|
||||||
|
|
||||||
|
|
||||||
Lovely.
|
Lovely.
|
||||||
|
|
||||||
|
Testing more sourcecode directives
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
.. sourcecode:: python
|
||||||
|
:anchorlinenos:
|
||||||
|
:classprefix: testing
|
||||||
|
:hl_lines: 10,11,12
|
||||||
|
:lineanchors: foo
|
||||||
|
:linenos: inline
|
||||||
|
:linenospecial: 2
|
||||||
|
:linenostart: 8
|
||||||
|
:linenostep: 2
|
||||||
|
:lineseparator: <br>
|
||||||
|
:linespans: foo
|
||||||
|
:nobackground:
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
self.assert_has_content()
|
||||||
|
try:
|
||||||
|
lexer = get_lexer_by_name(self.arguments[0])
|
||||||
|
except ValueError:
|
||||||
|
# no lexer found - use the text one instead of an exception
|
||||||
|
lexer = TextLexer()
|
||||||
|
|
||||||
|
if ('linenos' in self.options and
|
||||||
|
self.options['linenos'] not in ('table', 'inline')):
|
||||||
|
self.options['linenos'] = 'table'
|
||||||
|
|
||||||
|
for flag in ('nowrap', 'nobackground', 'anchorlinenos'):
|
||||||
|
if flag in self.options:
|
||||||
|
self.options[flag] = True
|
||||||
|
|
||||||
|
# noclasses should already default to False, but just in case...
|
||||||
|
formatter = HtmlFormatter(noclasses=False, **self.options)
|
||||||
|
parsed = highlight('\n'.join(self.content), lexer, formatter)
|
||||||
|
return [nodes.raw('', parsed, format='html')]
|
||||||
|
|
||||||
|
|
||||||
|
Lovely.
|
||||||
|
|
||||||
|
Testing even more sourcecode directives
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
.. sourcecode:: python
|
||||||
|
:linenos: table
|
||||||
|
:nowrap:
|
||||||
|
|
||||||
|
|
||||||
|
formatter = self.options and VARIANTS[self.options.keys()[0]]
|
||||||
|
|
||||||
|
|
||||||
|
Lovely.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue