|
| In questi ultimi giorni mi sono dedicato ad un piccolo progetto "casalingo"... PHPMarkdoc.
PHPMarkdoc
Lo scopo è quello di generare documentazione PHP nel formato Markdown in modo da poterlo usare per inserire la documentazione di una classe in un Wiki di Bitbucket o Github. L'idea mi è venuta quando dovevo scrivere la documentazione online di alcune classi che avevo creato per un progetto e vedendo che tutti i generatori automatici erano tutti per HTML ho pensato di crearne una mia versione che scrivesse tutto in Markdown.
Il progetto utilizza Java, mentre per legge i file da analizzare viene usato il PHP (php-cgi -f <file_name>). Il file source.php utilizza le API Reflection del PHP per leggere i dati delle classi dell'utente e le memorizza in una struttura Json che sarà letta e convertita in un oggetto FileDoc da Java.
Il codice dell'utente viene iniettato da Java utilizzato un file di "passaggio" che ho chiamato source_injector.php infatti, questo file viene creato da Java ogni volta che è necessario analizzare un file e contiene una singola linea:
CODICE require_once("URL_DEL_FILE_PHP");
In questo modo, all'interno di source.php è presente il codice PHP della classe (p.s al momento non è presente nessun algoritmo che "blocca" output diversi dal Json di source.php).
Le funzioni get_declared_classes, get_declared_interfaces, get_defined_functions e get_declared_traits si occuperanno di leggere i nomi delle classi dell'utente.
Va notato che, prima di require_once("source_injector.php"); troviamo:
CODICE $default_classes = get_declared_classes(); $default_interfaces = get_declared_interfaces(); $default_traits = get_declared_traits();
Con questo "trucco", possiamo fare in modo di isolare le classi di PHP da quelle dell'utente utilizzando array_diff.
Non c'è nulla del genere per le funzioni perchè il PHP già fa la divisione con un array interno con [internal] e [user] per differenziare i due tipi, eseguire un array_filter su questo array è obbligatorio per rimuovere da questo elenco le funzioni del parser (infatti, anche se get_defined_functions() viene eseguito prima che il source.php definisca una funzione, il PHP fa una prima l...Read the whole post...
- Tags:
- java,
- php,
- phpmarkdoc
|
|