2013-12-11 12 views
12

Voglio creare diversi file da un singolo modello, che differiscono solo da un nome di variabile. Per esempio:Testo strutturato (Sfinge): sostituzione in un nome file?

(file1.rst):

.. |variable| replace:: 1 
.. include template.rst 

(template.rst):

Variable |variable| 
===================== 

Image 
------- 

.. image:: ./images/|variable|-image.png 

dove naturalmente non ho un'immagine chiamata" ./images/1-image. png". La sostituzione di "| variabile |" da "1" funziona bene nel titolo, ma non nel nome del file immagine, e alla compilazione ottengo:

WARNING: image file not readable: ./images/|variable|-image.png 

Come posso ottenere resto per rendere la sostituzione nel nome della variabile troppo? (se questo cambia qualcosa, sto usando Sphinx).

risposta

6

Ci sono due problemi qui: un problema di sostituzione, e un problema di ordine parsing.

Per il primo problema, il riferimento sostituzione|variable| non possono avere caratteri adiacenti (oltre a spazi bianchi o forse _ per collegamenti ipertestuali) altrimenti non sarà analizzare come riferimento la sostituzione, quindi è necessario sfuggire:

./images/\ |variable|\ -image.png 

Tuttavia, il secondo problema è in attesa dietro l'angolo. Anche se non sono sicuro dei dettagli, sembra che la reST non sia in grado di analizzare le sostituzioni all'interno di altre direttive. Penso che per prima cosa analizzi la direttiva immagine, che la colloca nell'albero dei documenti e quindi fuori dalla portata del meccanismo di sostituzione. Allo stesso modo, non penso sia possibile utilizzare una sostituzione per inserire il contenuto destinato ad essere analizzato (ad esempio .. |img1| replace::`.. image:: images/1-image.png`). Questo è tutto speculativo basato su alcuni test e sulla mia comprensione incompleta del official documentation, quindi qualcuno più esperto può correggere ciò che ho detto qui.

Penso che tu sia a conoscenza dell'effettiva direttiva di sostituzione dell'immagine (al contrario della sostituzione del testo), ma non penso che raggiunga la generalità a cui miri (avrai comunque bisogno di una direttiva separata per immagine a partire dalla | variabile |), ma in ogni caso sembra che questo:

.. |img1| image:: images/1-image.png 

dal momento che si sta utilizzando Sfinge, si può provare a creare il proprio interno direttiva (v this answer per informazioni), ma ha vinto Risolviamo il problema delle sostituzioni-interno-markup.

+0

Così, in breve mi stai dicendo che non esiste un modo semplice per fare questo ... io davvero non vedo come aggirare questo problema ordine di analisi. Peccato, perché limita le possibilità di templating di reST. Alla fine ho deciso di fare la sostituzione usando uno script Python che duplica il codice di reST. È brutto ma funziona bene. Comunque grazie ! – pierre

Problemi correlati