diff options
author | John Koleszar <jkoleszar@google.com> | 2010-05-18 11:58:33 -0400 |
---|---|---|
committer | John Koleszar <jkoleszar@google.com> | 2010-05-18 11:58:33 -0400 |
commit | 0ea50ce9cb4b65eee6afa1d041fe8beb5abda667 (patch) | |
tree | 1f3b9019f28bc56fd3156f96e5a9653a983ee61b /examples/gen_example_doxy.php | |
download | libvpx-0ea50ce9cb4b65eee6afa1d041fe8beb5abda667.tar libvpx-0ea50ce9cb4b65eee6afa1d041fe8beb5abda667.tar.gz libvpx-0ea50ce9cb4b65eee6afa1d041fe8beb5abda667.tar.bz2 libvpx-0ea50ce9cb4b65eee6afa1d041fe8beb5abda667.zip |
Initial WebM release
Diffstat (limited to 'examples/gen_example_doxy.php')
-rwxr-xr-x | examples/gen_example_doxy.php | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/examples/gen_example_doxy.php b/examples/gen_example_doxy.php new file mode 100755 index 000000000..08beade5a --- /dev/null +++ b/examples/gen_example_doxy.php @@ -0,0 +1,223 @@ +#!/usr/bin/env php +/* + * Copyright (c) 2010 The VP8 project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license and patent + * grant that can be found in the LICENSE file in the root of the source + * tree. All contributing project authors may be found in the AUTHORS + * file in the root of the source tree. + */ + + +<?php + +/* This script converts markdown to doxygen htmlonly syntax, nesting the + * content inside a \page. It expects input on stdin and outputs on stdout. + * + * Usage: gen_example_doxy.php <page_identifier> "<page description>" + */ + + +$geshi_path = dirname($argv[0])."/includes/geshi/geshi/"; // Language files +$tmp_token = '<!-- I wanna rock you, Chaka Khan -->'; + +// Include prerequisites or exit +if(!include_once('includes/PHP-Markdown-Extra-1.2.3/markdown.php')) + die("Cannot load Markdown transformer.\n"); +if(!include_once('includes/PHP-SmartyPants-1.5.1e/smartypants.php')) + die("Cannot load SmartyPants transformer.\n"); +if(!include_once('includes/geshi/geshi.php')) + die("Cannot load GeSHi transformer.\n"); +// ASCIIMathPHP? +// HTML::Toc? +// Tidy? +// Prince? + +/** + * Generate XHTML body + * + */ + +$page_body = file_get_contents('php://stdin'); + +// Transform any MathML expressions in the body text +$regexp = '/\[\[(.*?)\]\]/'; // Double square bracket delimiters +$page_body = preg_replace_callback($regexp, 'ASCIIMathPHPCallback', $page_body); + +// Fix ASCIIMathPHP's output +$page_body = fix_asciiMath($page_body); + +// Wrap block-style <math> elements in <p>, since Markdown doesn't. +$page_body = preg_replace('/\n(<math.*<\/math>)\n/', '<p class="eq_para">$1</p>', $page_body); + +// Transform the body text to HTML +$page_body = Markdown($page_body); + +// Preprocess code blocks +// Decode XML entities. GeSHi doesn't anticipate that +// Markdown has already done this. +$regexp = '|<pre><code>(.*?)<\/code><\/pre>|si'; +while (preg_match($regexp, $page_body, $matches) > 0) +{ + // Replace 1st match with token + $page_body = preg_replace($regexp, $tmp_token, $page_body, 1); + $block_new = $matches[1]; + // Un-encode ampersand entities + $block_new = decode_markdown($block_new); + // Replace token with revised string + $page_body = preg_replace("|$tmp_token|", '<div class="codeblock">'.$block_new.'</div>', $page_body); +} + +// Run GeSHi over code blocks +$regexp = '|<div class="codeblock">(.*?)<\/div>|si'; +$language = 'c'; + +while (preg_match($regexp, $page_body, $matches)) +{ + $geshi = new GeSHi($matches[1], $language); + $geshi->set_language_path($geshi_path); + $block_new = $geshi->parse_code(); + // Strip annoying final newline + $block_new = preg_replace('|\n <\/pre>|', '</pre>' , $block_new); + // Remove style attribute (TODO: Research this in GeSHi) + $block_new = preg_replace('| style="font-family:monospace;"|', '' , $block_new); + $page_body = preg_replace($regexp, $block_new, $page_body, 1); + unset($geshi); // Clean up +} +unset($block_new); // Clean up + +// Apply typographic flourishes +$page_body = SmartyPants($page_body); + + +/** + * Generate Doxygen Body + * + */ +$page_id=(isset($argv[1]))?$argv[1]:""; +$page_desc=(isset($argv[2]))?$argv[2]:""; +print "/*!\\page ".$page_id." ".$page_desc."\n\\htmlonly\n"; +print $page_body; +print "\\endhtmlonly\n*/\n"; + +// --------------------------------------------------------- + +/** + * decode_markdown() + * + * Markdown encodes '&', '<' and '>' in detected code + * blocks, as a convenience. This will restore the + * encoded entities to ordinary characters, since a + * downstream transformer (like GeSHi) may not + * anticipate this. + * + **********************************************************/ + +function decode_markdown($input) +{ + $out = FALSE; + + $entities = array ('|&|' + ,'|<|' + ,'|>|' + ); + $characters = array ('&' + ,'<' + ,'>' + ); + $input = preg_replace($entities, $characters, $input); + $out = $input; + + return $out; +} + + +/** + * ASCIIMathML parser + * http://tinyurl.com/ASCIIMathPHP + * + * @PARAM mtch_arr array - Array of ASCIIMath expressions + * as returned by preg_replace_callback([pattern]). First + * dimension is the full matched string (with delimiter); + * 2nd dimension is the undelimited contents (typically + * a capture group). + * + **********************************************************/ + +function ASCIIMathPHPCallback($mtch_arr) +{ + $txt = trim($mtch_arr[1]); + + include('includes/ASCIIMathPHP-2.0/ASCIIMathPHP-2.0.cfg.php'); + require_once('includes/ASCIIMathPHP-2.0/ASCIIMathPHP-2.0.class.php'); + + static $asciimath; + + if (!isset($asciimath)) $asciimath = new ASCIIMathPHP($symbol_arr); + + $math_attr_arr = array('displaystyle' => 'true'); + + $asciimath->setExpr($txt); + $asciimath->genMathML($math_attr_arr); + + return($asciimath->getMathML()); +} + +/** + * fix_asciiMath() + * + * ASCIIMath pretty-prints its output, with linefeeds + * and tabs. Causes unexpected behavior in some renderers. + * This flattens <math> blocks. + * + * @PARAM page_body str - The <body> element of an + * XHTML page to transform. + * + **********************************************************/ + +function fix_asciiMath($page_body) +{ + $out = FALSE; + + // Remove linefeeds and whitespace in <math> elements + $tags_bad = array('/(<math.*?>)\n*\s*/' + , '/(<mstyle.*?>)\n*\s*/' + , '/(<\/mstyle>)\n*\s*/' + , '/(<mrow.*?>)\n*\s*/' + , '/(<\/mrow>)\n*\s*/' + , '/(<mo.*?>)\n*\s*/' + , '/(<\/mo>)\n*\s*/' + , '/(<mi.*?>)\n*\s*/' + , '/(<\/mi>)\n*\s*/' + , '/(<mn.*?>)\n*\s*/' + , '/(<\/mn>)\n*\s*/' + , '/(<mtext.*?>)\n*\s*/' + , '/(<\/mtext>)\n*\s*/' + , '/(<msqrt.*?>)\n*\s*/' + , '/(<\/msqrt>)\n*\s*/' + , '/(<mfrac.*?>)\n*\s*/' + , '/(<\/mfrac>)\n*\s*/' + ); + $tags_good = array( '$1' + , '$1' + , '$1' + , '$1' + , '$1' + , '$1' + , '$1' + , '$1' + , '$1' + , '$1' + , '$1' + , '$1' + , '$1' + , '$1' + , '$1' + , '$1' + , '$1' + ); + $out = preg_replace($tags_bad, $tags_good, $page_body); + + return $out; + +} |