🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.python
Article #27984

Re: kolorowanie składni

#27984
From: Rob Wolfe
Date: Mon, 04 Apr 2011 20:28
132 lines
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-mail
References: <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