Article View: pl.comp.lang.python
Article #27984Re: kolorowanie składni
From: Rob Wolfe
Date: Mon, 04 Apr 2011 20:28
Date: Mon, 04 Apr 2011 20:28
132 lines
5525 bytes
5525 bytes
Mateuszzz <km_wawaUSUNMNIE@vp.pl> writes:
> Witam,
>
> chciałbym skopiować skrypt Pythona do dokumentu Worda, jednocześnie
> zachowując kolorowanie składni.
> W jaki sposób można to wykonać?
> Widziałem edytory (niestety nie dla Pythona) pozwalające na eksport do
> htmla - gdy taki plik posiadamy wystarczyło skopiować tekst z
> przeglądarki.
>
> Innym pomysłem jaki przyszedł mi do głowy jest napisanie makra, które
> automatycznie "pokoloruje" za nas odpowiedni fragment (jednocześnie
> obawiam się, że mogłoby zafarbować również inne wyrazy niż słowa
> kluczowe)...
Jeszcze innym pomysłem jest użycie reStructuredText [1]_, czyli prostego
języka znaczników. Tych znaczników można użyć w dowolnym edytorze
i są też narzędzia pozwalające przekształcić go np. do html-a.
Przykładowo mając taki tekst:
# -->-- code.rst -->--
Wymagania:
#. `docutils <http://docutils.sourceforge.net/>`_
#. `pygments <http://pygments.org/download/>`_
#. `rst2html-highlight <http://docutils.sourceforge.net/sandbox/code-block-directive/rst2html-highlight>`_
#. `pygments_code_block_directive.py <http://docutils.sourceforge.net/sandbox/code-block-directive/pygments_code_block_directive.py>`_
Przykładowy kod:
.. code-block:: python
def foo(s, lst):
ret = None
for elem in lst:
if s in elem:
ret = elem
break
return ret
# -->-- code.rst -->--
do wygenerowania html-a wystarczy takie oto polecenie:
$ rst2html-highlight --stylesheet=default.css --link-stylesheet code.rst > code.html
(Na początku powyższego tekstu podałem linki do wszystkiego co jest potrzebne,
aby móc wygenerować html z reST.)
gdzie default.css, to dowolny stylesheet, ale najprościej utworzyć go
w ten sposób [2]_:
$ pygmentize -S default -f html > default.css
Osobiście do generowania html-i używam takiego programiku:
# -->-- make.py -->--
import sys
from subprocess import call
def run(inname, outname):
call(['rst2html-highlight', '--stylesheet=style/code.css',
'--link-stylesheet', '--input-encoding=utf-8',
'--output-encoding=utf-8', inname, outname])
if __name__ == '__main__':
run(sys.argv[1], sys.argv[2])
# -->-- make.py -->--
gdzie "style/code.css", to mój osobisty stylesheet, a tekst jest pisany
w utf-8.
A tak wygląda efekt końcowy po przetworzeniu do html-a powyższego przykładu:
-->-- code.html -->--
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.7: http://docutils.sourceforge.net/" />
<title></title>
<link rel="stylesheet" href="default.css" type="text/css" />
</head>
<body>
<div class="document">
<p>Wymagania:</p>
<ol class="arabic simple">
<li><a class="reference external"
href="http://docutils.sourceforge.net/">docutils</a></li>
<li><a class="reference external"
href="http://pygments.org/download/">pygments</a></li>
<li><a class="reference external"
href="http://docutils.sourceforge.net/sandbox/code-block-directive/rst2html-highlight">rst2html-highlight</a></li>
<li><a class="reference external"
href="http://docutils.sourceforge.net/sandbox/code-block-directive/pygments_code_block_directive.py">pygments_code_block_directive.py</a></li>
</ol>
<p>Przykładowy kod:</p>
<blockquote>
<pre class="code-block python literal-block">
<span class="k">def</span> <span class="nf">foo</span><span class="p">
(</span><span class="n">s</span><span class="p">,</span>
<span class="n">lst</span><span class="p">):</span>
<span class="n">ret</span> <span class="o">=</span> <span class="bp">None</span>
<span class="k">for</span> <span class="n">elem</span> <span
class="ow">in</span>
<span class="n">lst</span><span class="p">:</span>
<span class="k">if</span> <span class="n">s</span>
<span class="ow">in</span> <span class="n">elem</span><span class="p">:</span>
<span class="n">ret</span> <span class="o">=</span>
<span class="n">elem</span>
<span class="k">break</span>
<span class="k">return</span> <span class="n">ret</span>
</pre>
</blockquote>
</div>
</body>
</html>
-->-- code.html -->--
.. [1] http://docutils.sourceforge.net/rst.html
.. [2] http://pylit.berlios.de/examples/pygments-default.css.html
RW
Technical Details
Message-ID:
<87hbadkbgf.fsf@smsnet.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!nf1.ipartners.pl!ipartners.pl!plix.pl!newsfeed1.plix.pl!goblin3!goblin2!goblin.stu.neva.ru!aioe.org!.POSTED!not-for-mailReferences:
<4d9a0ec2$0$2488$65785112@news.neostrada.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!nf1.ipartners.pl!ipartners.pl!plix.pl!newsfeed1.plix.pl!goblin3!goblin2!goblin.stu.neva.ru!aioe.org!.POSTED!not-for-mail From: Rob Wolfe <rw@smsnet.pl> Newsgroups: pl.comp.lang.python Subject: Re: kolorowanie składni Date: Mon, 04 Apr 2011 22:28:48 +0200 Organization: Aioe.org NNTP Server Lines: 132 Message-ID: <87hbadkbgf.fsf@smsnet.pl> References: <4d9a0ec2$0$2488$65785112@news.neostrada.pl> NNTP-Posting-Host: 2rGoQNolRk9jw3eVwM369A.user.speranza.aioe.org Mime-Version: 1.0 X-Complaints-To: abuse@aioe.org User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) X-Notice: Filtered by postfilter v. 0.8.2 Cancel-Lock: sha1:pprUWZzMR1MyAIqu/QhxO9FiPwM= Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit