XPP (XPML Page Parser) - An embedded perl language designed to co-exist with HTML
use Apache::XPP; my $xpp = Apache::XPP->new( Apache->request ); $xpml->run;
Apache Apache::Constants File::stat FileHandle HTTP::Request LWP::UserAgent
Nothing
Apache::XPP is an HTML parser which on run time compiles and runs embedded perl code.
$Apache::XPP::main_class
XPP sub-classes must set $Apache::XPP::main_class to the name of the sub-class. This will allow xinclude/include to work properly.
$debug
Activates debugging output. All debugging output is sent to STDERR.
At present there are only 4 levels of debugging : 0 - no debugging (default) 1 - some debugging 2 - verbose debugging 3 - adds some Data::Dumper calls
$debuglines
Optionally, you can activate the $debuglines, which will cause all debugging output to include the line numbers (in this file) of the debugging.
handler
The Apache handler hook. This is the entry point for the Apache module. It takes the Apache request object ($r) as its parameter and builds a new XPP object to handle the request. In order to support the procedural nature of include() and xinclude() a global is defined. If you subclass Apache::XPP replace the value of the global "$Apache::XPP::main_class" with your class name.
new
Creates a new XPP object. Valid parameter keys are:
source - A block of xpp code to be parsed
filename - A filename/url specifying a code block
All other parameters will be stashed in the xpp object.
preparse
Pre-Parses the object's code, converting TAGS to text and xpp code. This method passes a reference to the xpp source to each preparser returned by the preparse class's parses method. (The preparse class is returned by the preparseclass method).
parses
preparseclass
parse
Parses the object's xpp source code, populating the object's code attribute with a subroutine reference which when run (with the run method), will result in the printing of the xpp page.
code
run
Runs the XPP code (set by the parse method), passing any arguments supplied to the code. This should have the effect of printing the xpp page to STDOUT.
returnrun
Calls run with @arguments as specified, catching all output destined for STDOUT, and returning the results as a string.
load
Returns the code specified by $filename. If $filename begins with a url specifier (e.g. http://), LWP::UserAgent will be used to retrieve the file. If $filename begins with a '/', it will be treated as a rooted filename. Otherwise the filename will be as a file relative to XPPIncludeDir
qualify
Qualifies the passed name to a fully rooted filename by using either incdir or docroot.
incdir
docroot
Returns the include directory from which include and xinclude will retrieve source from by default. See include, xinclude, and load for more documentation on this process.
include
xinclude
Returns the document root directory from which all rooted filenames will be retrieved in include, and xinclude.
r
Returns the Apache request object
Static, unbuffered, unparsed content include. It can be used within an xpml script by simply saying
include $filename;
See the load method for more information
Dynamic, parsed, buffered content include. It can be used within an xpml script by simply saying
xinclude $filename;
debug
Manipulates debug level. See $debug above.
N.B. -- at present these flags are global, not per object. Method works as static or dynamic.
Returns the plaintext of the include file $inc_location.
Returns the XPP parsed text of the include file $inc_location, passing @ARGS to the page as arguments.
$Log: XPP.pm,v $ Revision 1.32 2002/02/15 05:00:01 kasei - fixed bugs introduced by adding Apache::XPP::Inline
Revision 1.31 2002/02/15 02:39:31 kasei - merged 1.30 and 1.28 conflicts
Revision 1.30 2002/02/15 02:17:06 kasei - Fixed quoting bug with $r->content_type - Changed use constant to use subs for Apache constants when in a non m_p environment
Revision 1.29 2002/02/01 08:22:12 kasei Reduced dependance on Apache (still waiting on testing to confirm nothing broke)
Revision 1.28 2002/01/16 22:06:46 kasei - Updated README to mention version 2.01 - POD typo fix in XPP.pm
Revision 1.27 2002/01/16 21:06:01 kasei Updated VERSION variables to 2.01
Revision 1.26 2002/01/16 21:00:02 kasei - Added PREREQ_PM arguments to Makefile.PL - XPP.pm now only uses Data::Dumper if $debug >= 3 (not listed as a prereq)
Revision 1.25 2000/09/23 01:22:06 dweimer Fixed VHostIncludeDir's, thanks david.
Revision 1.24 2000/09/20 00:33:18 zhobson Fixed a warning in docroot(), misplaced "-" made it look like an invalid range
Revision 1.23 2000/09/08 22:26:44 david added, changed, revised, and otherwise cleaned up a lot of POD cleaned up new() - removed dependence on MD5 (uses conventional checksum) - folded nearly duplicate header and footer code into a loop incdir() - now uses Apache->server_root_relative() instead of $ENV{SERVER_ROOT} debug() - new method to manipulate $debug and $debuglines globals Apache::XPP::Tie class now uses $debug settings of Apache::XPP class
"This would go great with gwack-a-mole!" - Z.B.
Revision 1.22 2000/09/08 00:42:45 dougw Took out rscope stuff.
Revision 1.21 2000/09/07 23:42:23 greg fixed POD
Revision 1.20 2000/09/07 23:30:40 dougw Fixed over.
Revision 1.19 2000/09/07 20:15:54 david new(), r() - makes previous bug fix less agressive, yet more thorough.
Revision 1.18 2000/09/07 19:49:01 david r() - fixed peculiar (and elusive) bug where DirectoryIndex accessed pages (and potentially any page using a subrequest) caused a segmentation fault with cached pages.
Revision 1.17 2000/09/07 18:48:11 dougw Small update
Revision 1.16 2000/09/07 18:45:14 dougw Version update
Revision 1.15 2000/09/06 23:42:50 dougw Modified POD to be consistent with BingoX
perl(1).
None
precompile
Copyright (c) 2000, Cnation Inc. All Rights Reserved. This module is free software. It may be used, redistributed and/or modified under the terms of the GNU Lesser General Public License as published by the Free Software Foundation. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Greg Williams <greg@cnation.com> Doug Weimer <dougw@cnation.com>
To install Apache::XPP, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Apache::XPP
CPAN shell
perl -MCPAN -e shell install Apache::XPP
For more information on module installation, please visit the detailed CPAN module installation guide.