$len = strlen($text);
- $return = array();
+ $return = [];
$lastSpace = null;
$inTag = false;
$i = $tagWidth = 0;
case '>':
$inTag = false;
-
- default:
+ break;
}
if ($inTag) {
function extract_paragraphs($element)
{
- $paragraphs = array();
+ $paragraphs = [];
foreach ($element->getElementsByTagName('para') as $p) {
$text = '';
foreach ($p->childNodes as $child) {
function format_doc($doc)
{
- $chunks = array();
+ $chunks = [];
if (!empty($doc['description'])) {
$chunks[] = '<comment>Description:</comment>';
function thunk_tags($text)
{
- $tagMap = array(
+ $tagMap = [
'parameter>' => 'strong>',
'function>' => 'strong>',
'literal>' => 'return>',
'type>' => 'info>',
'constant>' => 'info>',
- );
+ ];
- $andBack = array(
+ $andBack = [
'&' => '&',
'&true;' => '<return>true</return>',
'&false;' => '<return>false</return>',
'&null;' => '<return>null</return>',
- );
+ ];
return strtr(strip_tags(strtr($text, $tagMap), '<strong><return><info>'), $andBack);
}
}
}
-$docs = array();
-foreach (glob($argv[1] . '/*/*/*.xml') as $function) {
- $funcname = basename($function);
- if ($funcname === 'main.xml' || strpos($funcname, 'entities.') === 0) {
- continue;
- }
-
- $xmlstr = str_replace('&', '&', file_get_contents($function));
-
- $xml = new DOMDocument();
- $xml->preserveWhiteSpace = false;
-
- if (!@$xml->loadXml($xmlstr)) {
- echo "XML Parse Error: $function\n";
- continue;
- }
-
- $doc = array();
+function format_function_doc($xml)
+{
+ $doc = [];
$refsect1s = $xml->getElementsByTagName('refsect1');
foreach ($refsect1s as $refsect1) {
$role = $refsect1->getAttribute('role');
break;
case 'parameters':
- $params = array();
+ $params = [];
$vars = $refsect1->getElementsByTagName('varlistentry');
foreach ($vars as $var) {
if ($name = $var->getElementsByTagName('parameter')->item(0)) {
- $params[] = array(
+ $params[] = [
'name' => '$' . $name->textContent,
'type' => find_type($xml, $name->textContent),
'description' => extract_paragraphs($var),
- );
+ ];
}
}
$doc['description'] = trim($desc);
}
- $formatted = format_doc($doc);
+ $ids = [];
foreach ($xml->getElementsByTagName('refname') as $ref) {
- $docs[$ref->textContent] = $formatted;
+ $ids[] = $ref->textContent;
+ }
+
+ return [$ids, format_doc($doc)];
+}
+
+function format_class_doc($xml)
+{
+ // @todo implement this
+ return [[], null];
+}
+
+$dir = new RecursiveDirectoryIterator($argv[1]);
+$filter = new RecursiveCallbackFilterIterator($dir, function ($current, $key, $iterator) {
+ return $current->getFilename()[0] !== '.' &&
+ ($current->isDir() || $current->getExtension() === 'xml') &&
+ strpos($current->getFilename(), 'entities.') !== 0 &&
+ $current->getFilename() !== 'pdo_4d'; // Temporarily blacklist this one, the docs are weird.
+});
+$iterator = new RecursiveIteratorIterator($filter);
+
+$docs = [];
+foreach ($iterator as $file) {
+ $xmlstr = str_replace('&', '&', file_get_contents($file));
+
+ $xml = new DOMDocument();
+ $xml->preserveWhiteSpace = false;
+
+ if (!@$xml->loadXml($xmlstr)) {
+ echo "XML Parse Error: $file\n";
+ continue;
+ }
+
+ if ($xml->getElementsByTagName('refentry')->length !== 0) {
+ list($ids, $doc) = format_function_doc($xml);
+ } elseif ($xml->getElementsByTagName('classref')->length !== 0) {
+ list($ids, $doc) = format_class_doc($xml);
+ } else {
+ $ids = [];
+ $doc = null;
+ }
+
+ foreach ($ids as $id) {
+ $docs[$id] = $doc;
}
}
$db->query('CREATE TABLE php_manual (id char(256) PRIMARY KEY, doc TEXT)');
$cmd = $db->prepare('INSERT INTO php_manual (id, doc) VALUES (?, ?)');
foreach ($docs as $id => $doc) {
- $cmd->execute(array($id, $doc));
+ $cmd->execute([$id, $doc]);
}