Ciao Carlo e grazie a te per il benvenuto.
In FidoReadPHP, il file di esempio
index.php non fa moltissimo, si limita solo a configurare una classe FidoParser con un disegno ed alcune cose che gli servono (i font da utilizzare, le librerie eccetera) e poi è FidoParser che fa il lavoro. In pratica, bisogna fare le cose seguenti:
- Recuperare il disegno all'interno di un post, identificato con dei tag che possono essere [fcd] e [/fcd] per coerenza con il primo sito che ha adottato questo metodo. FidoReadPHP non riconosce encoding tipo Base64, quindi bisognerà avere cura di trasformare il tutto in una stringa UTF-8.
- Creare un'istanza di classe FidoParser passandogli il codice che contiene il disegno da processare, le librerie ed i font da utilizzare.
- Recuperare l'immagine creata da FidoParser e salvarla, per esempio in formato PNG con dimensioni adeguate.
- Mostrarla all'utente all'interno del post permettendo al contempo di accedere al sorgente.
Naturalmente, dato che FidoParser richiede un po' di tempo per creare l'immagine, la cosa da fare è creare una cache di immagini che viene aggiornata solo quando ci sono novità. In altre parole, le immagini devono essere create solo quando necessario e non tutte le volte che il server risponde ad un accesso ad una pagina.
Vediamo insieme il codice necessario per creare un disegno come quello che mae89 ha suggerito all'inizio di questa discussione. Dapprima bisognerà creare un'istanza della classe FidoParser contenente il codice da mostrare. In questo esempio ho copiato ed incollato il codice fornito da mae89, mentre in un'applicazione più realistica questo sarà stato estratto dal post e memorizzato in una variabile.
Codice: Seleziona tutto
require_once('FidoParser.php');
error_reporting(-1);
$fidoParser = new FidoParser('[FIDOCAD]
MC 70 50 0 0 170
MC 80 75 0 0 580
MC 160 75 0 0 580
MC 135 75 0 0 080
MC 170 55 0 0 080
MC 45 75 0 0 080
MC 40 70 1 0 100
MC 20 65 0 0 200
MC 35 85 2 0 200
LI 35 65 40 65 0
LI 40 65 40 70 0
LI 35 85 40 85 0
LI 40 80 40 85 0
LI 40 85 40 85 0
LI 70 50 70 75 0
LI 80 50 105 50 0
LI 105 50 105 80 0
LI 105 50 105 40 0
LI 105 80 130 80 0
LI 130 80 130 75 0
LI 130 75 135 75 0
LI 145 75 165 75 0
LI 165 75 155 75 0
LI 155 75 155 55 0
LI 155 55 170 55 0
LI 180 55 185 55 0
LI 185 55 185 80 0
LI 20 65 20 110 0
LI 20 110 185 110 0
LI 185 110 185 80 0
LI 185 80 205 80 0
MC 80 75 0 0 045
MC 160 85 0 0 045
TY 30 75 4 3 0 0 0 * P3
TY 50 65 4 3 0 0 0 * R6
TY 75 40 4 3 0 0 0 * Co
TY 135 65 4 3 0 0 0 * R1
TY 175 45 4 3 0 0 0 * R2
TY 210 75 4 3 0 0 0 Verdana Vq
TY 105 30 4 3 0 0 0 * Vt
LI 55 75 70 75 0
LI 70 75 70 85 0
LI 70 85 80 85 0
LI 80 85 70 85 0');
La seconda cosa da fare è caricare le librerie necessarie:
Codice: Seleziona tutto
$standardLibraryString = file_get_contents('./FCDstdlib_en.fcl', true);
$fidoParser->readLibrary($standardLibraryString, "");
$pcbLibraryString = file_get_contents('./PCB_en.fcl', true);
$fidoParser->readLibrary($pcbLibraryString, "pcb");
$ihramLibraryString = file_get_contents('./IHRAM_en.fcl', true);
$fidoParser->readLibrary($ihramLibraryString, "ihram");
Colgo l'occasione per annunciare che poche ore fa ho fatto uscire una nuova versione di FidoCadJ, comprendente una libreria in più. Dovrei aggiornare anche FidoReadPHP perché venga fornita con il download ufficiale.
Dopodiché, si forniscono al sistema alcune sostituzioni relative ai font da utilizzare. FidoReadPHP contiene al suo interno i font Liberation, che hanno metriche compatibili con i font Microsoft più diffusi, ma che non hanno problemi ad essere distribuiti in un software con licenza G.P.L. v. 3.
http://it.wikipedia.org/wiki/Liberation_(font)
Codice: Seleziona tutto
$fidoParser->registerFont("Arial", "fonts/liberation/LiberationSans-Regular.ttf");
$fidoParser->registerFont("Helvetica", "fonts/liberation/LiberationSans-Regular.ttf");
$fidoParser->registerFont("Times", "fonts/liberation/LiberationSerif-Regular.ttf");
$fidoParser->registerFont("Times New Roman", "fonts/liberation/LiberationSerif-Regular.ttf");
$fidoParser->registerFont("Times Roman", "fonts/liberation/LiberationSerif-Regular.ttf");
$fidoParser->registerFont("Courier", "fonts/liberation/LiberationMono-Regular.ttf");
$fidoParser->registerFont("Courier New", "fonts/liberation/LiberationMono-Regular.ttf");
L'ultima cosa necessaria è la creazione dell'immagine propriamente detta. La classe FidoParser processerà il codice e restituirà un'immagine con le caratteristiche richieste:
Codice: Seleziona tutto
// We set up 2 pixels for each logical units and we ask FidoReadPHP to calculate
// the size of the image for us.
$fidoParser->setupSize(2, -1, -1);
// We create the image
$fidoParser->parse();
// We get the image
$my_img = $fidoParser->getImage();
$my_img contiene ora l'immagine che si potrà mostrare all'utente, oppure scrivere in cache.
Detto questo, come ho detto sopra, il progetto FidoReadPHP è giovane ed anche se sembra funzionare da diversi mesi su Grix.it, c'è un certo margine di miglioramento. Per esempio, con alcuni interpreti PHP, vengono mostrati numerosi warning.
Io posso fornire assistenza riguardo a FidoCadJ e FidoReadPHP, ma non posso scrivere io il MOD, perché non sono pratico di phpBB ed a dire il vero non sono neppure un virtuoso del PHP.