$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r61988 - in website/public_html/beta: common/code doc
From: daniel_james_at_[hidden]
Date: 2010-05-15 06:49:07
Author: danieljames
Date: 2010-05-15 06:49:06 EDT (Sat, 15 May 2010)
New Revision: 61988
URL: http://svn.boost.org/trac/boost/changeset/61988
Log:
Automatically detect redirect files in documentation.
Text files modified: 
   website/public_html/beta/common/code/boost_archive.php |    45 ++++++++++++++++++++++++++++++++++++++++
   website/public_html/beta/doc/display_libs.php          |    39 ----------------------------------      
   2 files changed, 45 insertions(+), 39 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-05-15 06:49:06 EDT (Sat, 15 May 2010)
@@ -112,6 +112,13 @@
         return;
     }
 
+    if($type == 'text/html') {
+        if(html_headers($archive->content_)) {
+            echo $archive->content_;
+            exit(0);
+        }
+    }
+
     if ($preprocess) {
         $archive->content_ = call_user_func($preprocess, $archive->content_);
     }
@@ -393,6 +400,44 @@
  * HTML processing functions
  */
 
+function html_headers($content)
+{
+    if(preg_match(
+        '@<meta\s+http-equiv\s*=\s*["\']?refresh["\']?\s+content\s*=\s*["\']0;\s*URL=([^"\']*)["\']\s*/?>@i',
+        $content,
+        $redirect))
+    {
+        header('Location: '.resolve_url($redirect[1]), TRUE, 301);
+        return true;
+    }
+}
+
+// Not a full implementation. Just good enough for redirecting.
+function resolve_url($url) {
+    $url = parse_url($url);
+
+    if(isset($url['schme'])) return $url;
+
+    $url['scheme'] = 'http'; # Detect other schemes?
+
+    if(!isset($url['host'])) {
+        $url['host'] = $_SERVER['SERVER_NAME'];
+        
+        if($url['path'][0] != '/') {
+            $path = explode('/', $_SERVER['REQUEST_URI']);
+            array_pop($path);
+            $rel_path = explode('/', $url['path']);
+            while(isset($rel_path[0]) && $rel_path[0] == '..') {
+                array_pop($path);
+                array_shift($rel_path);
+            }
+            $url['path'] = implode('/', $path).'/'.implode('/', $rel_path);
+        }
+    }
+    
+    return $url['scheme'].'://'.$url['host'] . $url['path'];
+}
+
 function html_init($archive)
 {
     preg_match('@text/html; charset=([^\s"\']+)@i',$archive->content_,$charset);
Modified: website/public_html/beta/doc/display_libs.php
==============================================================================
--- website/public_html/beta/doc/display_libs.php	(original)
+++ website/public_html/beta/doc/display_libs.php	2010-05-15 06:49:06 EDT (Sat, 15 May 2010)
@@ -46,53 +46,14 @@
 display_from_archive(
   $location,
   array(
-  //~ array(version-regex,path-regex,raw|simple|text|cpp|boost_book_html|boost_libs_html,mime-type[,preprocess hook]),
-  //~ this handles most of the simple cases of index.htm(l) redirect files
-  array(
-    '@1_('.implode('|',array(
-      '34','35',
-      )).')_[0-9]@',
-    '@^libs/('.implode('|',array(
-      'accumulators','algorithm/string','any','array','asio','assign','bind','bimap',
-      'circular_buffer',
-      'concept_check','config','date_time','date_time/doc','disjoint_sets',
-      'dynamic_bitset','exception','filesystem','foreach','function',
-      'functional/factory','functional/forward','functional/hash',
-      'function_types','fusion','graph','interprocess','intrusive',
-      'io','iostreams','iterator','lambda',
-      'lambda/doc','math','math/doc','mem_fn','mpl',
-      'multi_array','multi_index','numeric','numeric/conversion','numeric/interval/doc',
-      'numeric/ublas','unmeric/ublas/doc','optional','parameter','pool','preprocessor',
-      'program_options','program_options/doc','property_map','proto','ptr_container','python',
-      'python/doc/tutorial','python/doc/v2','regex','serialization','signals',
-      'signals/doc','smart_ptr','statechart','static_assert','system','test',
-      'thread','thread/doc','tr1','tuple','typeof',
-      'type_traits','units','unordered','variant','xpressive'
-      )).')/index.(html|htm)$@i',
-    'raw','text/html'),
   //~ special cases that can't be processed at all (some redirects)
-  array('@.*@','@^libs/index.html$@i','raw','text/html'),
-  array('@.*@','@^libs/bind/ref.html$@i','raw','text/html'),
-  array('@.*@','@^libs/config/config.htm$@i','raw','text/html'),
   array('@.*@','@^libs/gil/doc/.*(html|htm)$@i','raw','text/html'),
-  array('@.*@','@^libs/math/doc/common_factor.html$@i','raw','text/html'),
   array('@.*@','@^libs/preprocessor/doc/.*(html|htm)$@i','raw','text/html'),
   array('@.*@','@^libs/test/doc/components/test_tools/reference/.*(html|htm)$@i','raw','text/html'),
-  array('@.*@','@^libs/python/doc/PyConDC_2003/bpl.html$@i','raw','text/html'),
   array('@.*@','@^libs/spirit/.*(html|htm)$@i','simple','text/html', 'add_spirit_analytics'),
   array('@.*@','@^libs/fusion/.*(html|htm)$@i','basic','text/html', 'add_spirit_analytics'),
-  array('@.*@','@^libs/static_assert/static_assert.htm$@i','raw','text/html'),
-  array('@.*@','@^libs/type_traits/cxx_type_traits.htm$@i','raw','text/html'),
-  array('@.*@','@^libs/utility/iterator_adaptors.htm$@i','raw','text/html'),
   array('@.*@','@^libs/wave/.*(html|htm)$@i','raw','text/html'),
   array('@.*@','@^libs/range/doc/.*(html|htm)$@i','raw','text/html'),
-  array('@.*@','@^status/index.html$@i','raw','text/html'),
-  array('@.*@','@^tools/boostbook/index.html$@i','raw','text/html'),
-  array('@.*@','@^tools/build/index.html$@i','raw','text/html'),
-  array('@.*@','@^tools/jam/index.html$@i','raw','text/html'),
-  array('@.*@','@^tools/quickbook/index.html$@i','raw','text/html'),
-  array('@.*@','@^tools/regression/index.html?$@i','raw','text/html'),
-  array('@.*@','@^wiki/index.html$@i','raw','text/html'),
   //~ special cases that can't be embeded in the standard frame
   array('@.*@','@^libs/iostreams/doc/.*(html|htm)$@i','simple','text/html'),
   array('@.*@','@^libs/serialization/doc/.*(html|htm)$@i','simple','text/html'),