Unfinished Content This page needs some work; contributions are welcome!
State DocumentIn-memory XML is used for everything The shared DOM means that pipp is not thread-safe
Note: this describes an ideal build process. The current implementation is a bit more hacky, mostly due to the need to build new children before pages that depend on changed state.
Normal command line usage of Pipp is to conduct partial builds, effectively that only changed files are built. To do this, Pipp examines each page in
A build phase works as follows: the files are built in turn, with the output files written as each file is built. Any new children, or changes to exported variables are recorded. At the end of a build phase,
For partial builds, only two phases should ever be necessary, but the development web server may require more.
Development Web Server
The development web server essentially provides on-demand partial builds. It uses a slightly process to produce the list of files for the first build phase. When a page is accessed, it identifies all the pages that this page depends on exported variables from (including itself). If any of these have changed file dependencies, they are rebuilt.
There is also the option to perform a full rebuild. This deletes the existing
In future versions of Pipp, These issues will be handled in partial builds.
If Pipp encounters an error, the build stops immediately. Both the command-line and development web server report the exception to the use.
There are some issues around loss of state if a page fails to build. Some pages may have already been built successfully. If these have changed any state,
To address this, while building, Pipp keeps track of files that have changed their state. If there is an error later in the build, Pipp deletes their output files. This ensures that they will be rebuilt during the next partial build.
To support partial builds, Pipp stores dependency information in
In general, the user does not need to be aware of dependency tracking. File dependencies are automatically created by pipp_file, pipp_map_view, pipp_code, pipp_thumbnail and pipp_gtitle. Export dependencies are automatically created by pipp_import and pipp_import_join. However, a stylesheet used by pipp_map_view must explicitly record dependencies, by calling pipp_export_depend.
Pages are often dependent on their own exported variables. This is due to an implementation detail of pipp_map_view. Because pipp.xml is only generated after each build phase, it is out-of-date when the pipp_map_view tag is processed, so the page needs to be built again in next phase. This issue may be addressed in future versions of Pipp.
Tooltray AppUse of registry