$version, 'key' => $key, 'file' => $file, 'archive' => $archive ); } function display_from_archive( $archive_location_details, $content_map = array(), $extractor = null) { $_file = new boost_archive($archive_location_details, $content_map, $extractor); } class boost_archive { var $version_ = NULL; var $key_ = NULL; var $file_ = NULL; var $archive_ = NULL; var $extractor_ = NULL; var $extractor_instance_ = NULL; var $type_ = NULL; var $preprocess_ = NULL; var $title_ = NULL; var $charset_ = NULL; var $content_ = NULL; function boost_archive( $archive_location_details, $content_map = array(), $extractor = null) { $this->version_ = $archive_location_details['version']; $this->key_ = $archive_location_details['key']; $this->file_ = $archive_location_details['file']; $this->archive_ = $archive_location_details['archive']; $info_map = array_merge($content_map, array( array('@.*@','@[.](txt|py|rst|jam|v2|bat|sh|xml|qbk)$@i','text','text/plain'), array('@.*@','@[.](c|h|cpp|hpp)$@i','cpp','text/plain'), array('@.*@','@[.]png$@i','raw','image/png'), array('@.*@','@[.]gif$@i','raw','image/gif'), array('@.*@','@[.](jpg|jpeg|jpe)$@i','raw','image/jpeg'), array('@.*@','@[.]css$@i','raw','text/css'), array('@.*@','@[.]js$@i','raw','application/x-javascript'), array('@.*@','@[.]pdf$@i','raw','application/pdf'), array('@.*@','@[.](html|htm)$@i','raw','text/html'), array('@.*@','@[^.](Jamroot|Jamfile|ChangeLog)$@i','text','text/plain'), array('@.*@','@[.]dtd$@i','raw','application/xml-dtd'), )); foreach ($info_map as $i) { if (preg_match($i[1],$this->key_)) { $this->extractor_ = $i[2]; $this->type_ = $i[3]; $this->preprocess_ = isset($i[4]) ? $i[4] : NULL; break; } } if ($extractor) $this->extractor_ = $extractor; if (!$this->extractor_) $this->extractor_ = 'h404'; $extractor_name = $this->extractor_.'_filter'; $this->extractor_instance_ = new $extractor_name; $unzip = UNZIP .' -p '.escapeshellarg($this->archive_) .' '.escapeshellarg($this->file_); // Note: this can change $this->extractor_instance_: $this->content_ = $this->extractor_instance_->extract($this, $unzip); $this->extractor_instance_->init($this); if ($this->extractor_ != 'h404' && $this->extractor_ != 'raw' && $this->preprocess_) { $this->content_ = call_user_func($this->preprocess_, $this->content_); } $this->extractor_instance_->render($this); } function content_head() { $charset = $this->charset_ ? $this->charset_ : 'us-ascii'; $title = $this->title_ ? 'Boost C++ Libraries - '.$this->title_ : 'Boost C++ Libraries'; print <<
\n";
print htmlentities($archive->content_);
print "\n";
}
function render($archive) {
$archive->display_template();
}
}
class cpp_filter extends extract_filter_base
{
function init($archive)
{
$archive->title_ = htmlentities($archive->key_);
}
function content($archive)
{
$text = htmlentities($archive->content_);
print "\n";
$root = dirname(preg_replace('@([^/]+/)@','../',$archive->key_));
$text = preg_replace(
'@(#[ ]*include[ ]+<)(boost[^&]+)@Ssm',
'${1}${2}',
$text );
$text = preg_replace(
'@(#[ ]*include[ ]+")(boost[^&]+)@Ssm',
'${1}${2}',
$text );
print $text;
print "\n";
}
function render($archive) {
$archive->display_template();
}
}
class html_base_filter extends extract_filter_base
{
function init($archive)
{
preg_match('@text/html; charset=([^\s"\']+)@i',$archive->content_,$charset);
if (isset($charset[1]))
{
$archive->charset_ = $charset[1];
}
preg_match('@