Piero V.

Filtri di FlatPress portati in Python

Da un bel po’ di tempo sto pensando di passare ad un sistema in Python per gestire il mio sito.

C’è solo una cosa che mi ferma: quando scrivo un articolo, la maggior parte è scritta in HTML puro, però ci sono anche alcuni tag speciali che usano dei plugin FlatPress ed in generale prima di mandare in output un post ci sono diversi filtri, ereditati da WordPress, che ne modificano il contenuto, abbellendone la tipografia (per esempio cambiando gli apici e le virgolette normali), bilanciando i tag se mi ero dimenticato di farlo etc.

Sono tanti anni che scrivo questo articoli su questo sito e ormai ne ho già accumulato un discreto numero, quindi passarli uno ad uno è un’opzione improponibile. Rimangono le due possibilità di prerenderizzare tutto e portare nel nuovo sistema un codice in puro HTML, oppure portare al nuovo sistema i vecchi filtri. Io ho scelto quest’ultima.

Alla fine FlatPress non ne usa così tanti: di default solo wpautop, wptexturize e conver_chars, che rispettivamente sistemano gli a capo, i break e i paragrafi, sistemano la tipografia e convertono alcune entities. Poi però ci sono anche alcuni plugin, in particolare il BBCode che aiuta davvero molto con l’inserimento delle immagini e la gesione di lightbox.

Per i filtri di Wordpress non c’è stato molto da fare, se non trascriverli, ed almeno wpautop l’ho trovato già fatto. Invece per il BBCode ho sfruttato bbcode di Dan Watson, implementandogli un po’ i tag come fa FlatPress.

In più ho implementato anche alcuni altri plugin, come Read more, Footnotes ed in parte Quick Gallery.

Per non imporre troppi vincoli se mai qualcun altro vorrà usare questi file, ho creato una classe BBPlugins per estendere il plugin BBCode e per esempio rimappare gli URL, fare effettivamente la lista delle immagini che vanno nella quick gallery, implementare lightbox, le thumbnails e l’evidenziazione della sintassi dei linguaggi di programmazione. Di per sé BBPlugins contiene solo dei placeholder, dovrebbe essere estesa per implementare tali funzionalità e bisognerebbe passare la classe da usare per i plugin con il metodo fplegacy.setBBplugins(classe).

Sempre per imporre il minor numero di vincoli, ho tenuto le dipendenze al limite: obbligatorio è solo bbcode, poi opzionalmente possono essere usati Pillow, per ottenere automaticamente la dimensione delle immagini, e iptcinfo3 se avete intenzione di includere nei file JPEG le didascalie (era l’unico modo con la quickgallery per mettere didascalie personalizzate).

Come si può capire dal quel 3, questi file sono scritti e testati in Python 3. Potrebbero funzionare anche su Python 2, ma senza supporto a Unicode. Ho preso questa decisione perché ormai Python 2 ha il certificato di morte pronto e anche un framework importante come Django ha cessato il supporto a questa versione del linguaggio.

Infine due note sulla licenza: WordPress è rilasciato sotto GPLv2, quindi mi sono dovuto adeguare anche io a questa licenza. Qualora eliminaste le dipendenze su codice rilasciato sotto quella licenza, potrete fare quello che volete del codice che ho scritto personalmente.

Detto ciò, se volete potete scaricare il tutto. Dentro ai vari file troverete ulteriori informazioni sulle modifiche che sono stato costretto a fare, o su alcune migliorie.