/**
* Common file strategies for PHP
*
* @author Eric Bouwers
*/
module php/strategy/files
strategies
/**
* Simple inclusion of files. Only matches the direct strings
* and includes the files it finds. Fills a newly created
* environment with the newly included files.
*
*/
include-files-simple =
where(?doc ; init-php-environment(|doc))
; procedural-topdown(try(process-include-and-require-files(fill-and-include)))
fill-and-include =
where( ?doc ; fill-php-environment(|doc))
; procedural-topdown( try( process-include-and-require-files(fill-and-include)))
strategies
/**
* Complex inclusion of files. Uses the simple evaluation strategy
* to get as many files as possible. Does not fail when a file-name cannot
* be found. Fills a newly created environment with the newly included files.
*/
include-files-complex =
where( ?doc ; init-php-environment(|doc))
; main-constant-propogation
strategies
/**
* Printing of included files. This will print all included files in the
* same directory with a certain post-fix. This post-fix must be given.
*
* @param post-fix The string that is to be added after every filename
*/
print-included-files(s|post-fix) =
log(|Debug(), "Start printing included files.")
; env := <get-php-environment>
; get-all-inclusion-ids
; ?[ "main-file" | <id>] /*main AST should be first */
; map(print-included-file(s|env,post-fix))
; log(|Debug(), "End printing included files.")
print-included-file(s|env,post-fix) =
?iid
; log(|Debug(), "Printing included file, id: ", iid)
; <?Inclusionid(path,_)> iid
; ast := <get-inclusion-file(|iid)> env
; path' := <conc-strings> (path,post-fix)
; ast' := <s ; box2text-string(|80)> ast
; log(|Debug(), "Opening file: ", path')
; file := <fopen> (path', "w")
; <fputs> (ast',file)
; <fclose> file
; log(|Debug(), "Closing file: ", path')