Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r65105 - in website/public_html/beta/common/code: . test
From: dnljms_at_[hidden]
Date: 2010-08-29 07:57:14


Author: danieljames
Date: 2010-08-29 07:57:12 EDT (Sun, 29 Aug 2010)
New Revision: 65105
URL: http://svn.boost.org/trac/boost/changeset/65105

Log:
Try splitting the filters up again.

Locally, I'm seeing very large speed ups for redirect files which do
little processing so loading the php is a large part of the expense.
Added:
   website/public_html/beta/common/code/boost_filter_basic.php (contents, props changed)
   website/public_html/beta/common/code/boost_filter_boost_book_html.php (contents, props changed)
   website/public_html/beta/common/code/boost_filter_boost_frame1.php (contents, props changed)
   website/public_html/beta/common/code/boost_filter_boost_libs.php (contents, props changed)
   website/public_html/beta/common/code/boost_filter_cpp.php (contents, props changed)
   website/public_html/beta/common/code/boost_filter_simple.php (contents, props changed)
   website/public_html/beta/common/code/boost_filter_text.php (contents, props changed)
   website/public_html/beta/common/code/boost_filters.php (contents, props changed)
   website/public_html/beta/common/code/test/
   website/public_html/beta/common/code/test/test_filters.php (contents, props changed)
   website/public_html/beta/common/code/test/test_template.php (contents, props changed)
Text files modified:
   website/public_html/beta/common/code/boost_archive.php | 456 ---------------------------------------
   1 files changed, 2 insertions(+), 454 deletions(-)

Modified: website/public_html/beta/common/code/boost_archive.php
==============================================================================
--- website/public_html/beta/common/code/boost_archive.php (original)
+++ website/public_html/beta/common/code/boost_archive.php 2010-08-29 07:57:12 EDT (Sun, 29 Aug 2010)
@@ -102,7 +102,7 @@
     }
 
     $last_modified = max(
- strtotime("Sun, 11 Jul 2010 18:55:24 +0100"),
+ strtotime("Thu, 19 Aug 2010 09:06:00 +0100"),
         filemtime($check_file));
 
     if (!conditional_get($last_modified))
@@ -286,151 +286,11 @@
 //
 
 function echo_filtered($extractor, $params) {
+ require_once(dirname(__FILE__)."/boost_filter_$extractor.php");
     $extractor_name = $extractor.'_filter';
     call_user_func($extractor_name, $params);
 }
 
-function text_filter($params)
-{
- $params['title'] = htmlentities($params['key']);
-
- display_template($params['template'],
- new boost_archive_render_callbacks('text_filter_content', $params));
-}
-
-function text_filter_content($params)
-{
- print "<h3>".htmlentities($params['key'])."</h3>\n";
- print "<pre>\n";
- print_encoded_text($params, 'text');
- print "</pre>\n";
-}
-
-function cpp_filter($params) {
- $params['title'] = htmlentities($params['key']);
-
- display_template($params['template'],
- new boost_archive_render_callbacks('cpp_filter_content', $params));
-}
-
-function cpp_filter_content($params)
-{
- print "<h3>".htmlentities($params['key'])."</h3>\n";
- print "<pre>\n";
- print_encoded_text($params, 'cpp');
- print "</pre>\n";
-}
-
-function boost_book_html_filter($params) {
- html_init($params);
- display_template($params['template'],
- new boost_archive_render_callbacks('boost_book_html_filter_content', $params));
-}
-
-function boost_book_html_filter_content($params)
-{
- $text = prepare_html($params['content'], true);
-
- $text = substr($text,strpos($text,'<div class="spirit-nav">'));
- $text = substr($text,0,strpos($text,'</body>'));
- $text = str_replace('<hr>','',$text);
- $text = str_replace('<table width="100%">','<table class="footer-table">',$text);
- $text = str_replace('<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%">','<table class="footer-table">',$text);
- $text = preg_replace(
- '@[\s]+(border|cellpadding|cellspacing|width|height|valign|frame|rules|naturalsizeflag|background)=[^\s>]+@i',
- '',
- $text );
- ##
- for ($i = 0; $i < 8; $i++) {
- $text = preg_replace(
- '@<img src="[\./a-z]*images/(prev|up|home|next|tip|note|warning|important|caution|sidebar|hint|alert)\.png" alt="([^"]+)"([ /]*)>@Ssm',
- '<img src="/gfx/space.png" alt="${2}" class="${1}_image" />',
- $text );
- }
- ##
-
- print $text;
-}
-
-function boost_libs_filter($params)
-{
- html_init($params);
- $text = extract_html_body($params['content']);
- if($text) {
- $text = prepare_html($text, true);
- $text = remove_html_banner($text);
- $text = prepare_themed_html($text);
- $params['content'] = $text;
-
- display_template($params['template'],
- new boost_archive_render_callbacks('boost_libs_filter_content', $params));
- }
- else {
- print $params['content'];
- }
-}
-
-function boost_libs_filter_content($params)
-{
- return $params['content'];
-}
-
-function boost_frame1_filter($params) {
- html_init($params);
- display_template($params['template'],
- new boost_archive_render_callbacks(new boost_frame1_filter_content, $params));
-}
-
-function boost_frame1_filter_content($params)
-{
- $text = prepare_html($params['content'], true);
-
- $text = substr($text,strpos($text,'<div class="spirit-nav">'));
- $text = substr($text,0,strpos($text,'</body>'));
- for ($i = 0; $i < 8; $i++) {
- $text = preg_replace(
- '@<img src="[\./]*images/(.*\.png)" alt="(.*)"([ ][/])?>@Ssm',
- '<img src="/style-v2/css_0/${1}" alt="${2}" />',
- $text );
- }
- $text = str_replace('<hr>','',$text);
- $text = str_replace('<table width="100%">','<table class="footer-table">',$text);
- $text = preg_replace(
- '@[\s]+(border|cellpadding|cellspacing|width|height|valign|frame|rules|naturalsizeflag|background)=[^\s>]+@i',
- '',
- $text );
-
- print $text;
-}
-
-function simple_filter($params)
-{
- print prepare_html($params['content']);
-}
-
-function basic_filter($params)
-{
- $text = remove_html_banner($params['content']);
-
- $is_xhtml = preg_match('@<!DOCTYPE[^>]*xhtml_at_i', $text);
- $tag_end = $is_xhtml ? '/>' : '>';
-
- $match = null;
-
- if(preg_match('@(?:</head>\s*)?<body[^>]*>@is', $text, $match, PREG_OFFSET_CAPTURE)) {
- echo substr($text, 0, $match[0][1]);
- echo '<link rel="icon" href="/favicon.ico" type="image/ico"'.$tag_end;
- echo '<link rel="stylesheet" type="text/css" href="/style-v2/section-basic.css"'.$tag_end;
- echo $match[0][0];
- virtual("/common/heading-doc.html");
- echo prepare_html(substr($text, $match[0][1] + strlen($match[0][0])));
-
- }
- else {
- echo $text;
- }
-}
-
 /* File Not Found */
 
 function file_not_found($params, $message = null)
@@ -520,316 +380,6 @@
     return $url['scheme'].'://'.$url['host'] . $url['path'];
 }
 
-function html_init($params)
-{
- preg_match('@text/html; charset=([^\s"\']+)@i',$params['content'],$charset);
- if (isset($charset[1]))
- {
- $params['charset'] = $charset[1];
- }
-
- preg_match('@<title>([^<]+)</title>@i',$params['content'],$title);
- if (isset($title[1]))
- {
- $params['title'] = $title[1];
- }
-}
-
-function extract_html_body($text) {
- preg_match('@<body[^>]*>@i',$text,$body_begin,PREG_OFFSET_CAPTURE);
- preg_match('@</body>@i',$text,$body_end,PREG_OFFSET_CAPTURE);
- if (!isset($body_begin[0]))
- {
- //~ Attempt to recover some content from illegal HTML that is missing the body tag.
- preg_match('@</head>@i',$text,$body_begin,PREG_OFFSET_CAPTURE);
- }
- if (!isset($body_begin[0]))
- {
- //~ Attempt to recover some content from illegal HTML that is missing the body tag.
- preg_match('@<html[^>]*>@i',$text,$body_begin,PREG_OFFSET_CAPTURE);
- }
- if (!isset($body_begin[0]))
- {
- //~ Attempt to recover some content from illegal HTML that is missing the body tag.
- preg_match('@<(hr|div|img|p|h1|h2|h3|h4)[^>]*>@i',$text,$body_begin,PREG_OFFSET_CAPTURE);
- }
- if (!isset($body_begin[0]))
- {
- return;
- }
- else if (!isset($body_end[0]))
- {
- $text = substr($text,
- $body_begin[0][1]+strlen($body_begin[0][0]));
- }
- else
- {
- $text = substr($text,
- $body_begin[0][1]+strlen($body_begin[0][0]),
- $body_end[0][1]-($body_begin[0][1]+strlen($body_begin[0][0])) );
- }
-
- return $text;
-}
-
-function prepare_html($text, $full = false) {
- $text = preg_replace(
- '@href="?http://(?:www.)?boost.org/?([^"\s]*)"?@i',
- 'href="/${1}"',
- $text );
-
- if($full) {
- $text = preg_replace(
- '@href="?(?:\.\./)+people/(.*\.htm)"?@i',
- 'href="/users/people/${1}l"',
- $text );
- $text = preg_replace(
- '@href="?(?:\.\./)+(LICENSE_[^"\s]*\.txt)"?@i',
- 'href="/${1}"',
- $text );
- $text = preg_replace(
- '@<a\s+(class="[^"]+")?\s*href="?(http|mailto)(:[^"\s]*)"?@i',
- '<a class="external" href="${2}${3}"',
- $text );
- }
-
- return $text;
-}
-
-function remove_html_banner($text) {
- $match = null;
-
- if(preg_match('@(<table[^<>]*>?)(.*?)(</table>(?:\s*<hr\s*/?>\s*)?)@si',$text,$match,PREG_OFFSET_CAPTURE)
- && strpos($match[2][0], 'boost.png') !== FALSE
- ) {
- $header = preg_match('@<td[^<>]*>?([^<]*<(h[12]|p).*?)</td>@is', $match[2][2], $table_contents_header);
-
- $head = substr($text, 0, $match[0][1]);
- $header = $header ? $table_contents_header[1] : '';
- $tail = substr($text, $match[0][1] + strlen($match[0][0]));
- return $head.$header.$tail;
- }
- else if(preg_match('@<(?:p|blockquote)@', $text, $match, PREG_OFFSET_CAPTURE)) {
- $pos = $match[0][1];
- $header = substr($text, 0, $pos);
- $tail = substr($text, $pos);
-
- $header = preg_replace('@(<h\d>\s*)<img[^>]*src="(\.\.\/)*boost\.png"[^>]*>@', '$1', $header);
- $header = preg_replace('@<img[^>]*src="(\.\.\/)*boost\.png"[^>]*>\s*<[hb]r.*?>@', '', $header);
-
- return $header.$tail;
- }
- else {
- // Shouldn't really get here....
- return $text;
- }
-}
-
-function prepare_themed_html($text) {
- $text = preg_replace(
- '@(<a[^>]+>[\s]*)?<img.*boost\.png[^>]*>([\s]*</a>)?@i',
- '',
- $text );
- $text = preg_replace(
- '@<img(.*)align="?right"?[^>]*>@i',
- '<img${1} class="right-inset" />',
- $text );
- $text = preg_replace(
- '@<img(.*)align="?absmiddle"?[^>]*>@i',
- '<img${1} class="inline" />',
- $text );
- /* Remove certain attributes */
- $text = preg_replace(
- '@[\s]+(border|cellpadding|cellspacing|width|height|valign|align|frame|rules|naturalsizeflag|background)=("[^"]*"?|\'[^\']*\'?|[^\s/>]+)@i',
- '',
- $text );
- $text = preg_replace(
- '@<table[\s]+(border)[^\s>]*@i',
- '<table',
- $text );
- $text = preg_replace(
- '@<[/]?(font|hr)[^>]*>@i',
- '',
- $text );
- $text = preg_replace(
- '@<([^\s]+)[\s]+>@i',
- '<${1}>',
- $text );
- $text = _preg_replace_bounds(
- '@<blockquote>[\s]*(<pre>)@i','@(</pre>)[\s]*</blockquote>@i',
- '${1}','${1}',
- $text );
- $text = _preg_replace_bounds(
- '@<blockquote>[\s]*(<p>)@i','@(</p>)[\s]*</blockquote>@i',
- '${1}','${1}',
- $text );
- $text = _preg_replace_bounds(
- '@<blockquote>[\s]*(<table>)@i','@(</table>)[\s]*</blockquote>@i',
- '${1}','${1}',
- $text );
- $text = _preg_replace_bounds(
- '@<blockquote>[\s]*<li>@i','@</li>[\s]*</blockquote>@i',
- '<ul><li>','</li></ul>',
- $text );
- $text = _preg_replace_bounds(
- '@(?:<blockquote>[\s]*)+<h2>@i','@</h2>(?:[\s]*</blockquote>)+@i',
- '<h2>','</h2>',
- $text );
- $text = preg_replace(
- '@(<a name=[^\s>]+[\s]*>)[\s]*(</?[^a])@i',
- '${1}</a>${2}',
- $text );
- $text = preg_replace(
- '@<table>([\s]+<tr>[\s]+<td>.*_arr.*</td>[\s]+<td>.*</td>[\s]+<td>.*</td>[\s]+</tr>[\s]+)</table>@i',
- '<table class="pyste-nav">${1}</table>',
- $text );
- $text = preg_replace(
- '@<table>([\s]+<tr>[\s]+<td)[\s]+class="note_box">@i',
- '<table class="note_box">${1}>',
- $text );
- $text = preg_replace(
- '@<table>([\s]+<tr>[\s]+<td[\s]+class="table_title">)@i',
- '<table class="toc">${1}',
- $text );
- $text = preg_replace(
- '@src=".*theme/u_arr\.gif"@i',
- 'src="/gfx/space.png" class="up_image"',
- $text );
- $text = preg_replace(
- '@src=".*theme/l_arr\.gif"@i',
- 'src="/gfx/space.png" class="prev_image"',
- $text );
- $text = preg_replace(
- '@src=".*theme/r_arr\.gif"@i',
- 'src="/gfx/space.png" class="next_image"',
- $text );
- $text = preg_replace(
- '@src=".*theme/u_arr_disabled\.gif"@i',
- 'src="/gfx/space.png" class="up_image_disabled"',
- $text );
- $text = preg_replace(
- '@src=".*theme/l_arr_disabled\.gif"@i',
- 'src="/gfx/space.png" class="prev_image_disabled"',
- $text );
- $text = preg_replace(
- '@src=".*theme/r_arr_disabled\.gif"@i',
- 'src="/gfx/space.png" class="next_image_disabled"',
- $text );
- $text = preg_replace(
- '@src=".*theme/note\.gif"@i',
- 'src="/gfx/space.png" class="note_image"',
- $text );
- $text = preg_replace(
- '@src=".*theme/alert\.gif"@i',
- 'src="/gfx/space.png" class="caution_image"',
- $text );
- $text = preg_replace(
- '@src=".*theme/bulb\.gif"@i',
- 'src="/gfx/space.png" class="tip_image"',
- $text );
- $text = preg_replace(
- '@<img src=".*theme/(?:bullet|lens)\.gif">@i',
- '',
- $text );
- $text = preg_replace(
- '@(<img src=".*theme/(?:arrow)\.gif")>@i',
- '${1} class="inline">',
- $text );
- return $text;
-}
-
-// This takes a plain text file and outputs encoded html with marked
-// up links.
-
-function print_encoded_text($params, $type) {
- $root = dirname(preg_replace('@([^/]+/)@','../',$params['key']));
-
- // John Gruber's regular expression for finding urls
- // http://daringfireball.net/2009/11/liberal_regex_for_matching_urls
-
- foreach(preg_split(
- '@\b((?:[\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|[^[:punct:]\s]|/))@',
- $params['content'], -1, PREG_SPLIT_DELIM_CAPTURE)
- as $index => $part)
- {
- if($index % 2 == 0) {
- $html = htmlentities($part);
-
- if($type == 'cpp') {
- $html = preg_replace(
- '@(#[ ]*include[ ]+&lt;)(boost[^&]+)@Ssm',
- '${1}${2}',
- $html );
- $html = preg_replace(
- '@(#[ ]*include[ ]+&quot;)(boost[^&]+)@Ssm',
- '${1}${2}',
- $html );
- }
-
- print $html;
- }
- else {
- $url = process_absolute_url($part, $root);
- if($url) {
- print ''.htmlentities($part).'';
- }
- else {
- print htmlentities($part);
- }
- }
- }
-}
-
-function process_absolute_url($url, $root = null) {
- // Simplified version of the 'loose' regular expression from
- // http://blog.stevenlevithan.com/archives/parseuri
- //
- // (c) Steven Levithan <stevenlevithan.com>
- // MIT License
-
- if(!preg_match(
- '~^'.
- // Protocol(1): (Could also remove the userinfo detection stuff?)
- '(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?'.
- '(?:\/\/)?'.
- // Authority(2)
- '('.
- // User info
- '(?:[^:@]*:?[^:@]*@)?'.
- // Host(3)
- '([^:\/?#]*)'.
- // Port
- '(?::\d*)?'.
- ')'.
- // Relative(4)
- '(\/.*)'.
- '~',
- $url, $matches))
- {
- return;
- }
-
- $protocol = $matches[1];
- $authority = $matches[2];
- $host = $matches[3];
- $relative = $matches[4];
-
- if(!$authority) return;
-
- if($root &&
- ($host == 'boost.org' || $host == 'www.boost.org') &&
- (strpos($relative, '/lib') === 0))
- {
- $url = $root.$relative;
- }
- else
- {
- $url = ($protocol ? $protocol : 'http').'://'.$authority.$relative;
- }
-
- return $url;
-}
-
 // Display the content in the standard boost template
 
 function display_template($template, $callbacks) {
@@ -860,5 +410,3 @@
     default: return 'Unknown unzip error code: ' + $exit_status;
     }
 }
-
-?>

Added: website/public_html/beta/common/code/boost_filter_basic.php
==============================================================================
--- (empty file)
+++ website/public_html/beta/common/code/boost_filter_basic.php 2010-08-29 07:57:12 EDT (Sun, 29 Aug 2010)
@@ -0,0 +1,31 @@
+<?php
+/*
+ Copyright 2005-2008 Redshift Software, Inc.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+require_once(dirname(__FILE__).'/boost_filters.php');
+
+function basic_filter($params)
+{
+ $text = remove_html_banner($params['content']);
+
+ $is_xhtml = preg_match('@<!DOCTYPE[^>]*xhtml_at_i', $text);
+ $tag_end = $is_xhtml ? '/>' : '>';
+
+ $match = null;
+
+ if(preg_match('@(?:</head>\s*)?<body[^>]*>@is', $text, $match, PREG_OFFSET_CAPTURE)) {
+ echo substr($text, 0, $match[0][1]);
+ echo '<link rel="icon" href="/favicon.ico" type="image/ico"'.$tag_end;
+ echo '<link rel="stylesheet" type="text/css" href="/style-v2/section-basic.css"'.$tag_end;
+ echo $match[0][0];
+ virtual("/common/heading-doc.html");
+ echo prepare_html(substr($text, $match[0][1] + strlen($match[0][0])));
+
+ }
+ else {
+ echo $text;
+ }
+}

Added: website/public_html/beta/common/code/boost_filter_boost_book_html.php
==============================================================================
--- (empty file)
+++ website/public_html/beta/common/code/boost_filter_boost_book_html.php 2010-08-29 07:57:12 EDT (Sun, 29 Aug 2010)
@@ -0,0 +1,39 @@
+<?php
+/*
+ Copyright 2005-2008 Redshift Software, Inc.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+require_once(dirname(__FILE__).'/boost_filters.php');
+
+function boost_book_html_filter($params) {
+ html_init($params);
+ display_template($params['template'],
+ new boost_archive_render_callbacks('boost_book_html_filter_content', $params));
+}
+
+function boost_book_html_filter_content($params)
+{
+ $text = prepare_html($params['content'], true);
+
+ $text = substr($text,strpos($text,'<div class="spirit-nav">'));
+ $text = substr($text,0,strpos($text,'</body>'));
+ $text = str_replace('<hr>','',$text);
+ $text = str_replace('<table width="100%">','<table class="footer-table">',$text);
+ $text = str_replace('<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%">','<table class="footer-table">',$text);
+ $text = preg_replace(
+ '@[\s]+(border|cellpadding|cellspacing|width|height|valign|frame|rules|naturalsizeflag|background)=[^\s>]+@i',
+ '',
+ $text );
+ ##
+ for ($i = 0; $i < 8; $i++) {
+ $text = preg_replace(
+ '@<img src="[\./a-z]*images/(prev|up|home|next|tip|note|warning|important|caution|sidebar|hint|alert)\.png" alt="([^"]+)"([ /]*)>@Ssm',
+ '<img src="/gfx/space.png" alt="${2}" class="${1}_image" />',
+ $text );
+ }
+ ##
+
+ print $text;
+}

Added: website/public_html/beta/common/code/boost_filter_boost_frame1.php
==============================================================================
--- (empty file)
+++ website/public_html/beta/common/code/boost_filter_boost_frame1.php 2010-08-29 07:57:12 EDT (Sun, 29 Aug 2010)
@@ -0,0 +1,36 @@
+<?php
+/*
+ Copyright 2005-2008 Redshift Software, Inc.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+require_once(dirname(__FILE__).'/boost_filters.php');
+
+function boost_frame1_filter($params) {
+ html_init($params);
+ display_template($params['template'],
+ new boost_archive_render_callbacks(new boost_frame1_filter_content, $params));
+}
+
+function boost_frame1_filter_content($params)
+{
+ $text = prepare_html($params['content'], true);
+
+ $text = substr($text,strpos($text,'<div class="spirit-nav">'));
+ $text = substr($text,0,strpos($text,'</body>'));
+ for ($i = 0; $i < 8; $i++) {
+ $text = preg_replace(
+ '@<img src="[\./]*images/(.*\.png)" alt="(.*)"([ ][/])?>@Ssm',
+ '<img src="/style-v2/css_0/${1}" alt="${2}" />',
+ $text );
+ }
+ $text = str_replace('<hr>','',$text);
+ $text = str_replace('<table width="100%">','<table class="footer-table">',$text);
+ $text = preg_replace(
+ '@[\s]+(border|cellpadding|cellspacing|width|height|valign|frame|rules|naturalsizeflag|background)=[^\s>]+@i',
+ '',
+ $text );
+
+ print $text;
+}

Added: website/public_html/beta/common/code/boost_filter_boost_libs.php
==============================================================================
--- (empty file)
+++ website/public_html/beta/common/code/boost_filter_boost_libs.php 2010-08-29 07:57:12 EDT (Sun, 29 Aug 2010)
@@ -0,0 +1,144 @@
+<?php
+/*
+ Copyright 2005-2008 Redshift Software, Inc.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+require_once(dirname(__FILE__).'/boost_filters.php');
+
+function boost_libs_filter($params)
+{
+ html_init($params);
+ $text = extract_html_body($params['content']);
+ if($text) {
+ $text = prepare_html($text, true);
+ $text = remove_html_banner($text);
+ $text = prepare_themed_html($text);
+ $params['content'] = $text;
+
+ display_template($params['template'],
+ new boost_archive_render_callbacks('boost_libs_filter_content', $params));
+ }
+ else {
+ print $params['content'];
+ }
+}
+
+function boost_libs_filter_content($params)
+{
+ return $params['content'];
+}
+
+function prepare_themed_html($text) {
+ $text = preg_replace(
+ '@(<a[^>]+>[\s]*)?<img.*boost\.png[^>]*>([\s]*</a>)?@i',
+ '',
+ $text );
+ $text = preg_replace(
+ '@<img(.*)align="?right"?[^>]*>@i',
+ '<img${1} class="right-inset" />',
+ $text );
+ $text = preg_replace(
+ '@<img(.*)align="?absmiddle"?[^>]*>@i',
+ '<img${1} class="inline" />',
+ $text );
+ /* Remove certain attributes */
+ $text = preg_replace(
+ '@[\s]+(border|cellpadding|cellspacing|width|height|valign|align|frame|rules|naturalsizeflag|background)=("[^"]*"?|\'[^\']*\'?|[^\s/>]+)@i',
+ '',
+ $text );
+ $text = preg_replace(
+ '@<table[\s]+(border)[^\s>]*@i',
+ '<table',
+ $text );
+ $text = preg_replace(
+ '@<[/]?(font|hr)[^>]*>@i',
+ '',
+ $text );
+ $text = preg_replace(
+ '@<([^\s]+)[\s]+>@i',
+ '<${1}>',
+ $text );
+ $text = _preg_replace_bounds(
+ '@<blockquote>[\s]*(<pre>)@i','@(</pre>)[\s]*</blockquote>@i',
+ '${1}','${1}',
+ $text );
+ $text = _preg_replace_bounds(
+ '@<blockquote>[\s]*(<p>)@i','@(</p>)[\s]*</blockquote>@i',
+ '${1}','${1}',
+ $text );
+ $text = _preg_replace_bounds(
+ '@<blockquote>[\s]*(<table>)@i','@(</table>)[\s]*</blockquote>@i',
+ '${1}','${1}',
+ $text );
+ $text = _preg_replace_bounds(
+ '@<blockquote>[\s]*<li>@i','@</li>[\s]*</blockquote>@i',
+ '<ul><li>','</li></ul>',
+ $text );
+ $text = _preg_replace_bounds(
+ '@(?:<blockquote>[\s]*)+<h2>@i','@</h2>(?:[\s]*</blockquote>)+@i',
+ '<h2>','</h2>',
+ $text );
+ $text = preg_replace(
+ '@(<a name=[^\s>]+[\s]*>)[\s]*(</?[^a])@i',
+ '${1}</a>${2}',
+ $text );
+ $text = preg_replace(
+ '@<table>([\s]+<tr>[\s]+<td>.*_arr.*</td>[\s]+<td>.*</td>[\s]+<td>.*</td>[\s]+</tr>[\s]+)</table>@i',
+ '<table class="pyste-nav">${1}</table>',
+ $text );
+ $text = preg_replace(
+ '@<table>([\s]+<tr>[\s]+<td)[\s]+class="note_box">@i',
+ '<table class="note_box">${1}>',
+ $text );
+ $text = preg_replace(
+ '@<table>([\s]+<tr>[\s]+<td[\s]+class="table_title">)@i',
+ '<table class="toc">${1}',
+ $text );
+ $text = preg_replace(
+ '@src=".*theme/u_arr\.gif"@i',
+ 'src="/gfx/space.png" class="up_image"',
+ $text );
+ $text = preg_replace(
+ '@src=".*theme/l_arr\.gif"@i',
+ 'src="/gfx/space.png" class="prev_image"',
+ $text );
+ $text = preg_replace(
+ '@src=".*theme/r_arr\.gif"@i',
+ 'src="/gfx/space.png" class="next_image"',
+ $text );
+ $text = preg_replace(
+ '@src=".*theme/u_arr_disabled\.gif"@i',
+ 'src="/gfx/space.png" class="up_image_disabled"',
+ $text );
+ $text = preg_replace(
+ '@src=".*theme/l_arr_disabled\.gif"@i',
+ 'src="/gfx/space.png" class="prev_image_disabled"',
+ $text );
+ $text = preg_replace(
+ '@src=".*theme/r_arr_disabled\.gif"@i',
+ 'src="/gfx/space.png" class="next_image_disabled"',
+ $text );
+ $text = preg_replace(
+ '@src=".*theme/note\.gif"@i',
+ 'src="/gfx/space.png" class="note_image"',
+ $text );
+ $text = preg_replace(
+ '@src=".*theme/alert\.gif"@i',
+ 'src="/gfx/space.png" class="caution_image"',
+ $text );
+ $text = preg_replace(
+ '@src=".*theme/bulb\.gif"@i',
+ 'src="/gfx/space.png" class="tip_image"',
+ $text );
+ $text = preg_replace(
+ '@<img src=".*theme/(?:bullet|lens)\.gif">@i',
+ '',
+ $text );
+ $text = preg_replace(
+ '@(<img src=".*theme/(?:arrow)\.gif")>@i',
+ '${1} class="inline">',
+ $text );
+ return $text;
+}

Added: website/public_html/beta/common/code/boost_filter_cpp.php
==============================================================================
--- (empty file)
+++ website/public_html/beta/common/code/boost_filter_cpp.php 2010-08-29 07:57:12 EDT (Sun, 29 Aug 2010)
@@ -0,0 +1,23 @@
+<?php
+/*
+ Copyright 2005-2008 Redshift Software, Inc.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+require_once(dirname(__FILE__).'/boost_filter_text.php');
+
+function cpp_filter($params) {
+ $params['title'] = htmlentities($params['key']);
+
+ display_template($params['template'],
+ new boost_archive_render_callbacks('cpp_filter_content', $params));
+}
+
+function cpp_filter_content($params)
+{
+ print "<h3>".htmlentities($params['key'])."</h3>\n";
+ print "<pre>\n";
+ print_encoded_text($params, 'cpp');
+ print "</pre>\n";
+}

Added: website/public_html/beta/common/code/boost_filter_simple.php
==============================================================================
--- (empty file)
+++ website/public_html/beta/common/code/boost_filter_simple.php 2010-08-29 07:57:12 EDT (Sun, 29 Aug 2010)
@@ -0,0 +1,13 @@
+<?php
+/*
+ Copyright 2005-2008 Redshift Software, Inc.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+require_once(dirname(__FILE__).'/boost_filters.php');
+
+function simple_filter($params)
+{
+ print prepare_html($params['content']);
+}

Added: website/public_html/beta/common/code/boost_filter_text.php
==============================================================================
--- (empty file)
+++ website/public_html/beta/common/code/boost_filter_text.php 2010-08-29 07:57:12 EDT (Sun, 29 Aug 2010)
@@ -0,0 +1,114 @@
+<?php
+/*
+ Copyright 2005-2008 Redshift Software, Inc.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+function text_filter($params)
+{
+ $params['title'] = htmlentities($params['key']);
+
+ display_template($params['template'],
+ new boost_archive_render_callbacks('text_filter_content', $params));
+}
+
+function text_filter_content($params)
+{
+ print "<h3>".htmlentities($params['key'])."</h3>\n";
+ print "<pre>\n";
+ print_encoded_text($params, 'text');
+ print "</pre>\n";
+}
+
+// This takes a plain text file and outputs encoded html with marked
+// up links.
+
+function print_encoded_text($params, $type) {
+ $root = dirname(preg_replace('@([^/]+/)@','../',$params['key']));
+
+ // John Gruber's regular expression for finding urls
+ // http://daringfireball.net/2009/11/liberal_regex_for_matching_urls
+
+ foreach(preg_split(
+ '@\b((?:[\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|[^[:punct:]\s]|/))@',
+ $params['content'], -1, PREG_SPLIT_DELIM_CAPTURE)
+ as $index => $part)
+ {
+ if($index % 2 == 0) {
+ $html = htmlentities($part);
+
+ if($type == 'cpp') {
+ $html = preg_replace(
+ '@(#[ ]*include[ ]+&lt;)(boost[^&]+)@Ssm',
+ '${1}${2}',
+ $html );
+ $html = preg_replace(
+ '@(#[ ]*include[ ]+&quot;)(boost[^&]+)@Ssm',
+ '${1}${2}',
+ $html );
+ }
+
+ print $html;
+ }
+ else {
+ $url = process_absolute_url($part, $root);
+ if($url) {
+ print ''.htmlentities($part).'';
+ }
+ else {
+ print htmlentities($part);
+ }
+ }
+ }
+}
+
+function process_absolute_url($url, $root = null) {
+ // Simplified version of the 'loose' regular expression from
+ // http://blog.stevenlevithan.com/archives/parseuri
+ //
+ // (c) Steven Levithan <stevenlevithan.com>
+ // MIT License
+
+ if(!preg_match(
+ '~^'.
+ // Protocol(1): (Could also remove the userinfo detection stuff?)
+ '(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?'.
+ '(?:\/\/)?'.
+ // Authority(2)
+ '('.
+ // User info
+ '(?:[^:@]*:?[^:@]*@)?'.
+ // Host(3)
+ '([^:\/?#]*)'.
+ // Port
+ '(?::\d*)?'.
+ ')'.
+ // Relative(4)
+ '(\/.*)'.
+ '~',
+ $url, $matches))
+ {
+ return;
+ }
+
+ $protocol = $matches[1];
+ $authority = $matches[2];
+ $host = $matches[3];
+ $relative = $matches[4];
+
+ if(!$authority) return;
+
+ if($root &&
+ ($host == 'boost.org' || $host == 'www.boost.org') &&
+ (strpos($relative, '/lib') === 0))
+ {
+ $url = $root.$relative;
+ }
+ else
+ {
+ $url = ($protocol ? $protocol : 'http').'://'.$authority.$relative;
+ }
+
+ return $url;
+}

Added: website/public_html/beta/common/code/boost_filters.php
==============================================================================
--- (empty file)
+++ website/public_html/beta/common/code/boost_filters.php 2010-08-29 07:57:12 EDT (Sun, 29 Aug 2010)
@@ -0,0 +1,115 @@
+<?php
+/*
+ Copyright 2005-2008 Redshift Software, Inc.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*
+ * HTML processing functions
+ */
+
+function html_init($params)
+{
+ preg_match('@text/html; charset=([^\s"\']+)@i',$params['content'],$charset);
+ if (isset($charset[1]))
+ {
+ $params['charset'] = $charset[1];
+ }
+
+ preg_match('@<title>([^<]+)</title>@i',$params['content'],$title);
+ if (isset($title[1]))
+ {
+ $params['title'] = $title[1];
+ }
+}
+
+function extract_html_body($text) {
+ preg_match('@<body[^>]*>@i',$text,$body_begin,PREG_OFFSET_CAPTURE);
+ preg_match('@</body>@i',$text,$body_end,PREG_OFFSET_CAPTURE);
+ if (!isset($body_begin[0]))
+ {
+ //~ Attempt to recover some content from illegal HTML that is missing the body tag.
+ preg_match('@</head>@i',$text,$body_begin,PREG_OFFSET_CAPTURE);
+ }
+ if (!isset($body_begin[0]))
+ {
+ //~ Attempt to recover some content from illegal HTML that is missing the body tag.
+ preg_match('@<html[^>]*>@i',$text,$body_begin,PREG_OFFSET_CAPTURE);
+ }
+ if (!isset($body_begin[0]))
+ {
+ //~ Attempt to recover some content from illegal HTML that is missing the body tag.
+ preg_match('@<(hr|div|img|p|h1|h2|h3|h4)[^>]*>@i',$text,$body_begin,PREG_OFFSET_CAPTURE);
+ }
+ if (!isset($body_begin[0]))
+ {
+ return;
+ }
+ else if (!isset($body_end[0]))
+ {
+ $text = substr($text,
+ $body_begin[0][1]+strlen($body_begin[0][0]));
+ }
+ else
+ {
+ $text = substr($text,
+ $body_begin[0][1]+strlen($body_begin[0][0]),
+ $body_end[0][1]-($body_begin[0][1]+strlen($body_begin[0][0])) );
+ }
+
+ return $text;
+}
+
+function prepare_html($text, $full = false) {
+ $text = preg_replace(
+ '@href="?http://(?:www.)?boost.org/?([^"\s]*)"?@i',
+ 'href="/${1}"',
+ $text );
+
+ if($full) {
+ $text = preg_replace(
+ '@href="?(?:\.\./)+people/(.*\.htm)"?@i',
+ 'href="/users/people/${1}l"',
+ $text );
+ $text = preg_replace(
+ '@href="?(?:\.\./)+(LICENSE_[^"\s]*\.txt)"?@i',
+ 'href="/${1}"',
+ $text );
+ $text = preg_replace(
+ '@<a\s+(class="[^"]+")?\s*href="?(http|mailto)(:[^"\s]*)"?@i',
+ '<a class="external" href="${2}${3}"',
+ $text );
+ }
+
+ return $text;
+}
+
+function remove_html_banner($text) {
+ $match = null;
+
+ if(preg_match('@(<table[^<>]*>?)(.*?)(</table>(?:\s*<hr\s*/?>\s*)?)@si',$text,$match,PREG_OFFSET_CAPTURE)
+ && strpos($match[2][0], 'boost.png') !== FALSE
+ ) {
+ $header = preg_match('@<td[^<>]*>?([^<]*<(h[12]|p).*?)</td>@is', $match[2][2], $table_contents_header);
+
+ $head = substr($text, 0, $match[0][1]);
+ $header = $header ? $table_contents_header[1] : '';
+ $tail = substr($text, $match[0][1] + strlen($match[0][0]));
+ return $head.$header.$tail;
+ }
+ else if(preg_match('@<(?:p|blockquote)@', $text, $match, PREG_OFFSET_CAPTURE)) {
+ $pos = $match[0][1];
+ $header = substr($text, 0, $pos);
+ $tail = substr($text, $pos);
+
+ $header = preg_replace('@(<h\d>\s*)<img[^>]*src="(\.\.\/)*boost\.png"[^>]*>@', '$1', $header);
+ $header = preg_replace('@<img[^>]*src="(\.\.\/)*boost\.png"[^>]*>\s*<[hb]r.*?>@', '', $header);
+
+ return $header.$tail;
+ }
+ else {
+ // Shouldn't really get here....
+ return $text;
+ }
+}

Added: website/public_html/beta/common/code/test/test_filters.php
==============================================================================
--- (empty file)
+++ website/public_html/beta/common/code/test/test_filters.php 2010-08-29 07:57:12 EDT (Sun, 29 Aug 2010)
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Filter Tests</title>
+</head>
+<body>
+<h1>Filter Tests</h1>
+
+<?php
+
+require_once(dirname(__FILE__) . '/../boost_archive.php');
+$template = dirname(__FILE__) . '/test_template.php';
+
+$failure_count = 0;
+
+function filter_test($filter, $params, $expected) {
+ ob_start();
+ echo_filtered($filter, $params);
+ $result = ob_get_clean();
+
+ if(trim($result) != trim($expected)) {
+ global $failure_count;
+ ++$failure_count;
+
+ echo
+ '<h2>Failure for filter $filter</h2>',
+ '<p>Expected:</p><pre>',
+ htmlentities($expected),
+ '</pre><p>Result:</p><pre>',
+ htmlentities($result),
+ '</pre>';
+ }
+}
+
+/* Plain Text */
+
+$test_text = <<<EOL
+Hello World!
+EOL;
+
+$test_text_expected = <<<EOL
+<!DOCTYPE html>
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII" />
+<title>Boost C++ Libraries - Hello_world_test.txt</title></head>
+<body>
+<h3>Hello_world_test.txt</h3>
+<pre>
+Hello World!</pre>
+</body>
+</html>
+EOL;
+
+$params = Array(
+ 'template' => $template,
+ 'key' => 'Hello_world_test.txt',
+ 'charset' => 'US-ASCII',
+ 'content' => $test_text
+);
+
+filter_test('text', $params, $test_text_expected);
+
+/* C++ */
+
+$test_cpp = <<<EOL
+#include <boost/config.hpp>
+
+int main() {}
+EOL;
+
+$test_cpp_expected = <<<EOL
+<!DOCTYPE html>
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII" />
+<title>Boost C++ Libraries - foo/test.cpp</title></head>
+<body>
+<h3>foo/test.cpp</h3>
+<pre>
+#include &lt;boost/config.hpp&gt;
+
+int main() {}</pre>
+</body>
+</html>
+EOL;
+
+$params = Array(
+ 'template' => $template,
+ 'key' => 'foo/test.cpp',
+ 'charset' => 'US-ASCII',
+ 'content' => $test_cpp
+);
+
+filter_test('cpp', $params, $test_cpp_expected);
+
+/* HTML */
+
+$test_doc = <<<EOL
+<!DOCTYPE html>
+<html>
+<head>
+<title>Test Document</title>
+</head>
+<body>
+<h1>Simple test case for the filters</h1>
+<p>For now just test a
+link to an external site,
+an absolute path and
+a relative path.
+</p>
+</body>
+</html>
+EOL;
+
+$params = Array(
+ 'template' => $template,
+ 'content' => $test_doc
+);
+
+filter_test('boost_book_html', $params, '');
+filter_test('boost_libs', $params, '');
+filter_test('simple', $params, '');
+filter_test('basic', $params, '');
+
+/* Frames */
+
+//boost_frame1
+
+
+echo $failure_count > 0 ? "<p>Failure count: $failure_count</p>" : "<p>All passed</p>";
+
+?>
+</body>
+</html>
\ No newline at end of file

Added: website/public_html/beta/common/code/test/test_template.php
==============================================================================
--- (empty file)
+++ website/public_html/beta/common/code/test/test_template.php 2010-08-29 07:57:12 EDT (Sun, 29 Aug 2010)
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+<?php $_file->content_head(); ?>
+</head>
+<body>
+<?php $_file->content(); ?>
+</body>
+</html>
\ No newline at end of file


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk