Domanda

Sto lavorando a un documento in lattice che richiederà la composizione di quantità significative di codice sorgente di Python. Sto usando pygments (il modulo python, non la demo online) per incapsulare questo pitone in lattice, che funziona bene tranne nel caso di lunghe linee singole - che continuano semplicemente fuori dalla pagina. Potrei avvolgere manualmente queste righe, tranne per il fatto che questa non mi sembra una soluzione così elegante, e preferisco passare il tempo a scervellarmi con soluzioni automatizzate pazze piuttosto che con compiti ripetitivi.

Quello che vorrei è un modo di elaborare il codice sorgente di Python per avvolgere le linee ad una certa lunghezza massima di caratteri, preservando al contempo la funzionalità. Ho avuto un po 'di gioco con un po' di pitone e il più vicino a cui sono arrivato è l'inserimento di \\\ n nell'ultimo spazio bianco prima della lunghezza massima della linea - ma ovviamente, se finisce in stringhe e commenti, le cose vanno male. Francamente, non sono sicuro di come affrontare questo problema.

Quindi, qualcuno è a conoscenza di un modulo o di uno strumento in grado di elaborare il codice sorgente in modo che nessuna riga superi una certa lunghezza - o almeno un buon modo per iniziare a programmare qualcosa del genere?

È stato utile?

Soluzione

Potresti voler estendere un po 'il tuo approccio attuale, ma usando il tokenize modulo dalla libreria standard per determinare dove posizionare le interruzioni di riga. In questo modo puoi vedere i token effettivi (COMMENT, STRING, ecc.) Del tuo codice sorgente anziché solo le parole separate da spazi bianchi.

Ecco un breve esempio di cosa può fare il tokenize:

>>> from cStringIO import StringIO
>>> from tokenize import tokenize
>>> 
>>> python_code = '''
... def foo(): # This is a comment
...     print 'foo'
... '''
>>> 
>>> fp = StringIO(python_code)
>>> 
>>> tokenize(fp.readline)
1,0-1,1:    NL  '\n'
2,0-2,3:    NAME    'def'
2,4-2,7:    NAME    'foo'
2,7-2,8:    OP  '('
2,8-2,9:    OP  ')'
2,9-2,10:   OP  ':'
2,11-2,30:  COMMENT '# This is a comment'
2,30-2,31:  NEWLINE '\n'
3,0-3,4:    INDENT  '    '
3,4-3,9:    NAME    'print'
3,10-3,15:  STRING  "'foo'"
3,15-3,16:  NEWLINE '\n'
4,0-4,0:    DEDENT  ''
4,0-4,0:    ENDMARKER   ''

Altri suggerimenti

Uso il pacchetto elenchi in LaTeX per inserire il codice sorgente; fa evidenziare la sintassi, linebreaks et al.

Inserisci quanto segue nel tuo preambolo:

\usepackage{listings}
%\lstloadlanguages{Python} # Load only these languages
\newcommand{\MyHookSign}{\hbox{\ensuremath\hookleftarrow}}

\lstset{
    % Language
    language=Python,
    % Basic setup
    %basicstyle=\footnotesize,
    basicstyle=\scriptsize,
    keywordstyle=\bfseries,
    commentstyle=,
    % Looks
    frame=single,
    % Linebreaks
    breaklines,
    prebreak={\space\MyHookSign},
    % Line numbering
    tabsize=4,
    stepnumber=5,
    numbers=left,
    firstnumber=1,
    %numberstyle=\scriptsize,
    numberstyle=\tiny,
    % Above and beyond ASCII!
    extendedchars=true
}

Il pacchetto ha un hook per il codice inline, inclusi interi file, mostrandolo come figure, ...

Verificherei uno strumento di formattazione in un editor come NetBeans.

Quando riformatti java, corregge correttamente la lunghezza delle linee sia all'interno che all'esterno dei commenti, se lo stesso algoritmo fosse applicato a Python, funzionerebbe.

Per Java ti permette di impostare qualsiasi larghezza di avvolgimento e una serie di altri parametri. Sarei piuttosto sorpreso se non esistesse né nativo né come plugin.

Non posso dirlo con certezza solo dalla descrizione, ma vale la pena provarlo:

http://www.netbeans.org/features/python/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top