$param) { if ($param['optional'] || isset($param['default']) || $optional_depth != 0) { ++$optional_depth; if ($i != 0) { $istr .= ' [, '; } else { $istr .= '[ '; } } elseif ($i != 0) { $istr .= ', '; } $istr .= $param['type']; $istr .= ' '; $istr .= $param['name']; if (isset($param['default'])) { $istr .= ' = '.vimstring_escape($param['default']); } } $istr .= str_repeat(']', $optional_depth); if ($signature['return_type']) { $istr .= ' | '.$signature['return_type']; } return trim($istr); } function get_extension_names($docs_dir) { $re = array(); $doc = new DOMDocument('1.0', 'utf-8'); $doc->loadHTMLFile($docs_dir.'/extensions.membership.html'); $xpath = new DOMXPath($doc); $links_nodes = $xpath->query('//ul[@class="itemizedlist"]//a[@class="xref"]'); foreach ($links_nodes as $link_node) { $re[$link_node->getAttribute('href')] = $link_node->textContent; } $doc = new DOMDocument('1.0', 'utf-8'); @$doc->loadHTMLFile($docs_dir.'/funcref.html'); $xpath = new DOMXPath($doc); $link_nodes = $xpath->query('//ul[@class="chunklist chunklist_set chunklist_children"]/li/a'); foreach ($link_nodes as $link_node) { $re[$link_node->getAttribute('href')] = $link_node->textContent; } foreach (array('langref.html', 'appendices.html', 'features.html') as $file) { $doc = new DOMDocument('1.0', 'utf-8'); $doc->loadHTMLFile($docs_dir.'/'.$file); $xpath = new DOMXPath($doc); $category_nodes = $xpath->query('//ul[@class="chunklist chunklist_book"]/li'); foreach ($category_nodes as $category_node) { $category_name_node = $xpath->query('a', $category_node)->item(0); $category_name = trim($category_name_node->textContent); $re[$category_name_node->getAttribute('href')] = $category_name; $link_nodes = $xpath->query('ul[@class="chunklist chunklist_book chunklist_children"]/li/a', $category_node); if ($link_nodes->length > 0) { foreach ($link_nodes as $link_node) { // save sub-category file names under the category name $re[$link_node->getAttribute('href')] = $category_name; } } } } return $re; } function get_extension_name($file, $extensions) { $doc_dir = dirname($file); $current_file = basename($file); $files_checked = array(); do { if (isset($extensions[$current_file])) { return $extensions[$current_file]; } $doc = new DOMDocument; $doc->loadHTMLFile($doc_dir.'/'.$current_file); $xpath = new DOMXPath($doc); $up_link = $xpath->query('//ul[@class="breadcrumbs-container"]/li[position()>=2 and position() <= (last() - 1)]/a'); if ($up_link->length == 0) { fwrite(STDERR, "\nWARNING: Can't find up link in ".$current_file.' started ascending from '.$file); return null; } $up_href = $up_link->item(0)->getAttribute('href'); if ($current_file == $up_href) { fwrite(STDERR, "\nWARNING: up link traversal got stuck at ".$current_file." started ascending from ".$file); return null; } $files_checked[] = $current_file; $current_file = $up_href; } while ($current_file != 'index.html'); fwrite(STDERR, "\nNOTICE: Can't find extension name for ".$file." files checked: ".join(", ", $files_checked)); return '_unknow'; } function array_index_by_col($arr, $col, $overwrite_duplicate = true) { $tmp = array(); foreach ($arr as $i) { if (!isset($tmp[$i[$col]]) || $overwrite_duplicate) { $tmp[$i[$col]] = $i; } } return $tmp; } function vimstring_escape($str) { return str_replace("'", "''", $str); } function filenameize($str) { $clean = preg_replace('/[^a-zA-Z0-9\/_|+ -]/', '', $str); $clean = strtolower(trim($clean, '_')); $clean = preg_replace('/[\/_|+ -]+/', '_', $clean); return $clean; }