ReVo Blog


Friends

Friends Posts

profile for Marco Acierno at Stack Overflow, Q&A for professional and enthusiast programmers
profile for Marco Acierno on Stack Exchange, a network of free, community-driven Q&A sites
3 user(s) online
F_ACTIVE
3 guests
0 members
0 Anonymous Members
[ View Complete List ]


Last comments


Statistics
F_STATS
ReVo Blog have:
8 articles, 0 comments, 1 members,
167 total visits, 0 monthly visits

The newest member is .ReVo.


B_NORM    
view post Posted on 25/7/2014, 13:50 by: .ReVo. Reply
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
Comments: 0 | Views: 7Last Post by: .ReVo. (25/7/2014, 13:50)
 

Search: