diff --git a/index.php b/index.php
index 088d648..cf5833e 100644
--- a/index.php
+++ b/index.php
@@ -62,102 +62,40 @@ negligence or otherwise) arising in any way out of the use of this
software, even if advised of the possibility of such damage.
*/
-
require_once dirname( __FILE__ ) . '/libs/functions.php';
-$options = get_options();
-
$command_line=FALSE;
if(isset($argv)){
+ require_once dirname( __FILE__ ) . '/libs/static.php';
define("CLI",TRUE);
echo 'Daux.io documentation generator'."\n";
-
+
if(!isset($argv[1]))
$argv[1]= 'help';
switch ($argv[1]) {
//Generate static web documentation
case 'generate':
- clean_copy_assets(dirname(__FILE__).'/static');
-
- //Generate index.html
- $markdown_structure = array();
- $base_url = '.';
- $index = generate_page($options, array(''), $base_url, TRUE, $markdown_structure);
- file_put_contents('./static/index.html', $index);
- echo '.';
-
- foreach ($markdown_structure as $element) {
- echo '.';
- $flat_tree_tmp = array();
- if( preg_match('/\.\/(.*)\/(.*)$/', $element['url'], $final_folder) ){
- @mkdir('./static/'.$final_folder[1]);
-
- $url_params = preg_split('/\//',$final_folder[1] );
- $folder_count = count($url_params);
- array_push( $url_params , $final_folder[2] );
-
- $base_url = relative_base($folder_count);
- $file = generate_page($options, $url_params, $base_url, TRUE, $flat_tree_tmp);
- file_put_contents('./static/'.$final_folder[1].'/'.$final_folder[2].'.html', $file);
- }else{
- $strFile = str_replace('./', '', $element['url']);
- $base_url = '.';
- $file = generate_page($options, array($strFile), $base_url, TRUE, $flat_tree_tmp);
- file_put_contents('./static/'.$strFile.'.html', $file);
- }
- }
- echo "finished\n";
- echo "The documentation is generated in static folder\n";
- break;
- //Generate one-page documentation
- case 'full-doc':
- clean_copy_assets(dirname(__FILE__).'/static');
-
- $options['template'] ='full-doc';
- $markdown_structure = array();
- //Generate index.html
- $markdown_structure = array();
- $base_url = '.';
- $index = generate_page($options, array(''), $base_url, TRUE, $markdown_structure);
- file_put_contents('./static/full-doc.html', load_tpl_block('full-doc-blocks/head', $options, $base_url).$index);
- echo '.';
- array_pop($markdown_structure);
-
- foreach ($markdown_structure as $element) {
- echo '.';
- $flat_tree_tmp = array();
- if( preg_match('/\.\/(.*)\/(.*)$/', $element['url'], $final_folder) ){
- $url_params = preg_split('/\//',$final_folder[1] );
- $folder_count = count($url_params);
- array_push( $url_params , $final_folder[2] );
-
- $file = generate_page($options, $url_params, $base_url, TRUE, $flat_tree_tmp);
- file_put_contents('./static/full-doc.html', $file, FILE_APPEND);
- }else{
- $strFile = str_replace('./', '', $element['url']);
- $file = generate_page($options, array($strFile), $base_url, TRUE, $flat_tree_tmp);
- file_put_contents('./static/full-doc.html', $file, FILE_APPEND);
- }
- }
- file_put_contents('./static/full-doc.html', file_get_contents('template/full-doc-blocks/foot.tpl'), FILE_APPEND);
- echo "finished\n";
+ generate_static();
+ echo "Finished\n";
echo "The documentation is generated in static folder\n";
break;
default:
- echo "\n";
+ echo "\n";
echo 'Usage:'."\n";
echo ' php index.php generate'."\n";
- echo ' php index.php full-doc'."\n";
- echo "\n";
- echo 'generate. Generate static web'."\n";
- echo 'fulldoc. Generate one-file documentation static html'."\n";
+ echo 'Generate static web'."\n";
echo "\n";
break;
- }
+ }
exit();
}
+require_once(dirname( __FILE__)."/libs/live.php");
+$base_path = str_replace("/index.php", "", $_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
define("CLI", FALSE);
-
-$url_params = url_params();
-generate_page($options, $url_params, get_base_url());
-
+build_tree();
+$remove = array($base_path . '/');
+if (!$options['clean_urls']) $remove[] = 'index.php?';
+$request = str_replace($remove, "", $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
+if (isset($_POST['markdown']) && $options['file_editor'])
+ file_put_contents(clean_url_to_file($request), $_POST['markdown']);
+echo generate_live($request);
diff --git a/libs/functions.php b/libs/functions.php
index 0c64245..b47cdd1 100644
--- a/libs/functions.php
+++ b/libs/functions.php
@@ -1,583 +1,230 @@
"Documentation",
- 'tagline' => false,
- 'image' => false,
- 'theme' => 'blue',
- 'docs_path' => 'docs',
- 'date_modified' => true,
- 'float' => true,
- 'repo' => false,
- 'toggle_code' => false,
- 'twitter' => array(),
- 'links' => array(),
- 'colors' => false,
- 'clean_urls' => true,
- 'google_analytics' => false,
- 'piwik_analytics' => false,
- 'piwik_analytics_id' => 1,
- 'ignore' => array(),
- 'languages' => array(),
- 'file_editor' => false,
- 'template' => 'default'
- );
-
- // Load User Config
- $config_file = './docs/config.json';
- if (file_exists($config_file)) {
- $config = json_decode(file_get_contents($config_file), true);
- $options = array_merge($options, $config);
- }
-
- if ($options['theme'] !== 'custom') {
- // Load Theme
- if (!in_array($options['theme'], array("blue","navy","green","red"))) {
- echo "Daux.io Config Error:
The theme you set is not not a valid option. Please use one of the following options: " . join(array_keys($themes), ', ') . ' or learn more about how to customize the colors.';
- exit;
- }
- } else {
- if (empty($options['colors'])) {
- echo 'Daux.io Config Error:
You are trying to use a custom theme, but did not setup your color options in the config. Learn more about how to customize the colors.';
- exit;
- }
- }
-
- return $options;
-}
-
-function homepage_url($tree) {
- // Check for homepage
- if (isset($tree['index'])) {
- return '/';
- } else {
- return docs_url($tree, false);
- }
-}
-
-function docs_url($tree, $branch = false) {
- // Get next branch
- if (!$branch) {
- $branch = current($tree);
- }
-
- if ($branch['type'] === 'file') {
- return $branch['url'];
- } else if (!empty($branch['tree'])) {
- return docs_url($branch['tree']);
- } else {
- // Try next folder...
- $branch = next($tree);
- if ($branch) {
- return docs_url($tree, $branch);
- } else {
- echo 'Daux.io Config Error:
Unable to find the first page in the /docs folder. Double check you have at least one file in the root of of the /docs folder. Also make sure you do not have any empty folders. Visit the docs to learn more about how the default routing works.';
- exit;
- }
- }
-}
-
-function load_page($tree, $url_params) {
- if (count($url_params) > 0) {
- $branch = find_branch($tree, $url_params);
- } else {
- $branch = current($tree);
- }
-
- $page = array();
-
- if (isset($branch['type']) && $branch['type'] == 'file') {
- $html = '';
- if ($branch['name'] !== 'index') {
-
- $page['title'] = $branch['title'];
- $page['modified'] = filemtime($branch['path']);
-
- }
- $html .= MarkdownExtended(file_get_contents($branch['path']));
-
- // Markdown editor related
- $page['markdown'] = file_get_contents($branch['path']);
- $page['path'] = $branch['path'];
-
- $page['html'] = $html;
-
- } else {
-
- $page['title'] = "Oh no";
- $page['html'] = "
Oh No. That page doesn't exist
";
-
- }
-
-
- return $page;
-}
-
-
-function find_branch($tree, $url_params) {
- foreach($url_params as $peice) {
-
- // Support for cyrillic URLs
- $peice = urldecode($peice);
-
- // Check for homepage
- if (empty($peice)) {
- $peice = 'index';
- }
-
- if (isset($tree[$peice])) {
- if ($tree[$peice]['type'] == 'folder') {
- $tree = $tree[$peice]['tree'];
- } else {
- $tree = $tree[$peice];
- }
- } else {
- return false;
- }
- }
-
- return $tree;
-}
-
-function url_path() {
- $url = parse_url((isset($_SERVER['REQUEST_URI']))?$_SERVER['REQUEST_URI']:'');
- $url = $url['path'];
- return $url;
-}
-
-function url_params() {
- $url = rawurldecode(get_uri());
- $params = explode('/', trim($url, '/'));
- return $params;
-}
-
-function clean_sort($text) {
- // Remove .md file extension
- $text = str_replace('.md', '', $text);
-
- // Remove sort placeholder
- $parts = explode('_', $text);
- if (isset($parts[0]) && is_numeric($parts[0])) {
- unset($parts[0]);
- }
- $text = implode('_', $parts);
-
- return $text;
-}
-
-function clean_name($text) {
- $text = str_replace('_', ' ', $text);
- return $text;
-}
-
-function RFC3986UrlEncode($string) {
- $entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D');
- $replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]");
- return str_replace($entities, $replacements, urlencode($string));
-}
-
-function build_nav($tree, $url_params) {
- // Remove Index
- unset($tree['index']);
-
- $url_path = url_path();
- $html = '';
- foreach($tree as $key => $val) {
- // Active Tree Node
- if (isset($url_params[0]) && $url_params[0] == $val['clean']) {
- array_shift($url_params);
-
- // Final Node
- if ($url_path == RFC3986UrlEncode($val['url'])) {
- $html .= '- ';
- } else {
- $html .= '
- ';
- }
- } else {
- $html .= '
- ';
- }
-
- if ($val['type'] == 'folder') {
- $html .= ''.$val['name'].'';
- $html .= build_nav($val['tree'], $url_params);
- } else {
- $html .= ''.$val['name'].'';
- }
-
- $html .= '
';
- }
- $html .= '
';
- return $html;
-}
-
-function get_ignored() {
- // TODO: Add support for wildcards
- // TODO: Add support for specific paths, i.e. /Publish/Somefile.md vs. /Don't_Publish/Somefile.md
- $options = get_options();
- $default_ignored_files = array('config.json', 'cgi-bin', 'Thumbs.db');
- $default_ignored_folders = array(); // To allow for easy addition of default folders if found necessary in the future
- $user_ignored_files = array();
- $user_ignored_folders = array();
- // Check if ignore settings exist
- if(array_key_exists('ignore', $options)) {
- if(array_key_exists('files', $options['ignore'])) {
- $user_ignored_files = $options['ignore']['files'];
- }
- if(array_key_exists('folders', $options['ignore'])) {
- $user_ignored_folders = $options['ignore']['folders'];
- }
- }
-
- // Merge all ignore arrays together
- $all_ignored = array_merge($default_ignored_files, $default_ignored_folders, $user_ignored_files, $user_ignored_folders);
-
- // Return array of all ignored files and folders
- return $all_ignored;
-}
-
-function get_tree($path = '.', $clean_path = '', $title = '', $first = true, $language = null, &$flat_tree = null){
- $options = get_options();
- $tree = array();
- $ignore = get_ignored();
- $dh = @opendir($path);
- $index = 0;
-
- // Build array of paths
- $paths = array();
- while(false !== ($file = readdir($dh))){
- $paths[$file] = $file;
- }
-
- // Close the directory handle
- closedir($dh);
-
- // Sort paths
- sort($paths);
-
- if ($first && $language !== null) {
- $language_path = $language . "/";
- } else {
- $language_path = "";
- }
-
- // Loop through the paths
- // while(false !== ($file = readdir($dh))){
- foreach($paths as $file) {
-
- // Check that this file or folder is not to be ignored
- if(!in_array($file, $ignore) && $file[0] !== '.') {
- $full_path = "$path/$file";
- $clean_sort = clean_sort($file);
-
- // If clean_urls is set to false and this is the first branch of the tree, append index.php to the clean_path.
- if($options['clean_urls'] == false)
- {
- if($first)
- {
- $url = $clean_path . '/' . $language_path . 'index.php/' . $clean_sort;
- }
- else
- {
- $url = $clean_path . '/' . $language_path . $clean_sort;
- }
- }
- else
- {
- $url = $clean_path . '/' . $language_path . $clean_sort;
- }
-
- $clean_name = clean_name($clean_sort);
-
- // Title
- if (empty($title)) {
- $full_title = $clean_name;
- } else {
- $full_title = $title . ': ' . $clean_name;
- }
-
- if(is_dir("$path/$file")) {
- // Directory
- $tree[$clean_sort] = array(
- 'type' => 'folder',
- 'name' => $clean_name,
- 'title' => $full_title,
- 'path' => $full_path,
- 'clean' => $clean_sort,
- 'url' => $url,
- 'tree'=> (isset($flat_tree) && $flat_tree!==NULL)?
- get_tree($full_path, $url, $full_title, false, $language, $flat_tree):
- get_tree($full_path, $url, $full_title, false, $language)
- );
- } else {
- // File
- $tree[$clean_sort] = array(
- 'type' => 'file',
- 'name' => $clean_name,
- 'title' => $full_title,
- 'path' => $full_path,
- 'clean' => $clean_sort,
- 'url' => $url,
- );
-
- if(isset($flat_tree) && $flat_tree!==NULL)
- array_push($flat_tree, $tree[$clean_sort]);
- }
- }
- $index++;
- }
-
- return $tree;
-}
-
-/**
- * Get's the current "pretty" URI from the URL. It will also correct the QUERY_STRING server var and the $_GET array.
- * It supports all forms of mod_rewrite and the following forms of URL:
- *
- * http://example.com/index.php/foo (returns '/foo')
- * http://example.com/index.php?/foo (returns '/foo')
- * http://example.com/index.php/foo?baz=bar (returns '/foo')
- * http://example.com/index.php?/foo?baz=bar (returns '/foo')
- *
- * Similarly using mod_rewrite to remove index.php:
- * http://example.com/foo (returns '/foo')
- * http://example.com/foo?baz=bar (returns '/foo')
- *
- * @author Dan Horrigan
- * @copyright Dan Horrigan
- * @license MIT License
- * @param bool $prefix_slash whether to return the uri with a '/' in front
- * @return string the uri
- */
-function get_uri($prefix_slash = true)
-{
- if (isset($_SERVER['PATH_INFO']))
- {
- $uri = $_SERVER['PATH_INFO'];
- }
- elseif (isset($_SERVER['REQUEST_URI']))
- {
- $uri = $_SERVER['REQUEST_URI'];
- if (strpos($uri, $_SERVER['SCRIPT_NAME']) === 0)
- {
- $uri = substr($uri, strlen($_SERVER['SCRIPT_NAME']));
- }
- elseif (strpos($uri, dirname($_SERVER['SCRIPT_NAME'])) === 0)
- {
- $uri = substr($uri, strlen(dirname($_SERVER['SCRIPT_NAME'])));
- }
-
- // This section ensures that even on servers that require the URI to be in the query string (Nginx) a correct
- // URI is found, and also fixes the QUERY_STRING server var and $_GET array.
- if (strncmp($uri, '?/', 2) === 0)
- {
- $uri = substr($uri, 2);
- }
- $parts = preg_split('#\?#i', $uri, 2);
- $uri = $parts[0];
- if (isset($parts[1]))
- {
- $_SERVER['QUERY_STRING'] = $parts[1];
- parse_str($_SERVER['QUERY_STRING'], $_GET);
- }
- else
- {
- $_SERVER['QUERY_STRING'] = '';
- $_GET = array();
- }
- $uri = parse_url($uri, PHP_URL_PATH);
- }
- else
- {
- // Couldn't determine the URI, so just return false
- return false;
- }
-
- // Do some final cleaning of the URI and return it
- return ($prefix_slash ? '/' : '').str_replace(array('//', '../'), '/', trim($uri, '/'));
-}
-
-function handle_editor_post($post, $page) {
- if(file_exists($page["path"])) {
- file_put_contents($page["path"], $post["markdown"]);
- } else {
- throw new Exception("File doesn't exist", 1);
- }
-}
-
-/**
- * Generate the page using the correct $url_params
- */
-
-function generate_page($options, $url_params, $base_url, $return=FALSE, &$flat_tree=NULL){
- //documentation folder defined in various folder languages
- if (count($options['languages']) > 0 && count($url_params) > 0 && strlen($url_params[0]) > 0) {
- $language = array_shift($url_params);
- $base_path = $options['docs_path']. DIRECTORY_SEPARATOR . $language;
- } else {
- $language = null;
- $base_path = $options['docs_path'];
- }
-
- // If a timezone has been set in the config file, override the default PHP timezone for this application.
- if(isset($options['timezone']))
- {
- date_default_timezone_set($options['timezone']);
- }
-
- $tree = (isset($flat_tree))?
- get_tree($base_path, $base_url, '', true, $language,$flat_tree):
- get_tree($base_path, $base_url, '', true, $language);
-
- // If a language is set in the config, rewrite urls based on the language
- if (! isset($language) || $language === null) {
- $homepage_url = homepage_url($tree);
- } else {
- $homepage_url = "/";
- }
-
- if($url_params[0]=='')
- $homepage = TRUE;
- else
- $homepage = FALSE;
-
- // Redirect to docs, if there is no homepage
- if ($homepage && $homepage_url !== '/') {
- header('Location: '.docs_url($tree));
- }
-
- $docs_url = docs_url($tree);
- $page = load_page($tree, $url_params);
-
-
- // Handle AJAX requests for file editing
- if(isset($_POST["markdown"]) && $options["file_editor"] === true) {
- handle_editor_post($_POST, $page);
- die;
- }
-
-
-
- ob_start();
-
- include('template/'.$options['template'].'.tpl');
- if ($return === TRUE)
- {
- $buffer = ob_get_contents();
- @ob_end_clean();
- return $buffer;
- }else{
- ob_end_flush();
- }
-}
-
-function load_tpl_block($file, $options, $base_url){
- ob_start();
-
- include('template/'.$file.'.tpl');
- $buffer = ob_get_contents();
- @ob_end_clean();
- return $buffer;
-}
-
-function copy_recursive($source, $dest, $ignoreList = array()){
- $src_folder=str_replace(array('.','/'), '', $source);
- @mkdir($dest.DIRECTORY_SEPARATOR.$src_folder);
- foreach (
- $iterator = new RecursiveIteratorIterator(
- new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS),
- RecursiveIteratorIterator::SELF_FIRST) as $item
- ) {
- if ($item->isDir()) {
- @mkdir($dest . DIRECTORY_SEPARATOR . $src_folder . DIRECTORY_SEPARATOR .$iterator->getSubPathName());
- } else {
- if (!$ignoreList || !in_array($item, $ignoreList)) @copy($item, $dest . DIRECTORY_SEPARATOR .$src_folder. DIRECTORY_SEPARATOR .$iterator->getSubPathName());
- }
- }
-}
-
-function clean_directory($directory){
- foreach (
- $iterator = new RecursiveIteratorIterator(
- new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::SKIP_DOTS),
- RecursiveIteratorIterator::SELF_FIRST) as $item
- ) {
- @unlink($directory.DIRECTORY_SEPARATOR.$iterator->getSubPathName());
- }
-}
-
-function relative_base($count){
- $relative = '';
- for ($i=0; ($i < $count); $i++ ){
- if (! ($i == 0))
- $relative .= '/';
- $relative .= '..';
- }
- return $relative;
-}
-
-function clean_copy_assets($path){
- @mkdir($path);
- $options = $GLOBALS["options"];
- //Clean
- clean_directory($path);
- //Copy assets
- $unnecessaryImgs = array('./img/favicon.png', './img/favicon-blue.png', './img/favicon-green.png', './img/favicon-navy.png', './img/favicon-red.png');
- $unnecessaryJs = array();
- if ($options['colors']) {
- @mkdir($path.'/less');
- @mkdir($path.'/less/import');
- @copy('./less/import/daux-base.less', $path.'/less/import/daux-base.less');
- $unnecessaryImgs = array_diff($unnecessaryImgs, array('./img/favicon.png'));
- } else {
- $unnecessaryJs = array('./js/less.min.js');
- @mkdir($path.'/css');
- @copy('./css/daux-'.$options['theme'].'.min.css', $path.'/css/daux-'.$options['theme'].'.min.css');
- $unnecessaryImgs = array_diff($unnecessaryImgs, array('./img/favicon-'.$options['theme'].'.png'));
- }
- copy_recursive('./img', $path.'/', $unnecessaryImgs);
- copy_recursive('./js', $path.'/', $unnecessaryJs);
-}
+ require_once(dirname( __FILE__)."/markdown_extended.php");
+ $tree = array();
+ $base = dirname(dirname(__FILE__));
+ $options = get_options();
+ $docs_path = $base . '/' . $options['docs_path'];
+ $multilanguage = !empty($options['languages']) ? TRUE : FALSE;
+
+ // Options
+ function get_options() {
+ global $base;
+ $options = array(
+ 'title' => "Documentation",
+ 'tagline' => false,
+ 'image' => false,
+ 'theme' => 'red',
+ 'docs_path' => 'docs',
+ 'date_modified' => true,
+ 'float' => true,
+ 'repo' => false,
+ 'toggle_code' => false,
+ 'twitter' => array(),
+ 'links' => array(),
+ 'colors' => false,
+ 'clean_urls' => true,
+ 'google_analytics' => false,
+ 'piwik_analytics' => false,
+ 'piwik_analytics_id' => 1,
+ 'ignore' => array(),
+ 'languages' => array(),
+ 'file_editor' => false,
+ 'template' => 'default'
+ );
+ // Load User Config
+ $config_file = $base . '/docs/config.json';
+ if (file_exists($config_file)) {
+ $config = json_decode(file_get_contents($config_file), true);
+ $options = array_merge($options, $config);
+ }
+ if (!isset($options['ignore']['files'])) $options['ignore']['files'] = array();
+ if (!isset($options['ignore']['folders'])) $options['ignore']['folders'] = array();
+
+ if ($options['theme'] !== 'custom') {
+ $themes = array("blue","navy","green","red");
+ if (!in_array($options['theme'], $themes)) {
+ echo "Daux.io Config Error:
The theme you set is not not a valid option. Please use one of the following options: " . join(array_keys($themes), ', ') . ' or learn more about how to customize the colors.';
+ exit;
+ }
+ } else {
+ if (empty($options['colors'])) {
+ echo 'Daux.io Config Error:
You are trying to use a custom theme, but did not setup your color options in the config. Learn more about how to customize the colors.';
+ exit;
+ }
+ }
+ return $options;
+ }
+
+ // Build Directory Tree
+ function build_tree() {
+ global $tree, $options, $docs_path , $multilanguage, $output_language;
+ if (!$multilanguage) $tree = directory_tree($docs_path, $options['ignore']);
+ else
+ foreach ($options['languages'] as $languageKey => $language) {
+ $output_language = $languageKey;
+ $tree[$languageKey] = directory_tree($docs_path . '/' . $languageKey, $options['ignore']);
+ }
+ }
+
+ // Recursively add files & directories to Tree
+ function directory_tree($dir, $ignore) {
+ global $base_doc, $multilanguage, $output_language;
+ $tree = array();
+ $Item = array_diff(scandir($dir), array(".", "..", "index.md"));
+ foreach ($Item as $key => $value) {
+ if (is_dir($dir . '/' . $value)) {
+ if (!in_array($value, $ignore['folders']))
+ $tree[$value] = directory_tree($dir . '/' . $value, $ignore);
+ } else if (!in_array($value, $ignore['files'])) {
+ if (substr($value, -3) === ".md") {
+ $tree[$value] = $value;
+ if ($multilanguage)
+ $base_doc[$output_language] = isset($base_doc[$output_language]) ? $base_doc[$output_language] : $dir . '/' . $value;
+ else $base_doc = isset($base_doc) ? $base_doc : $dir . '/' . $value;
+ }
+ }
+ }
+ return $tree;
+ }
+
+ // Build Navigation
+ function get_navigation($url) {
+ global $tree, $multilanguage, $output_language, $output_path;
+ $dir = isset($output_path) ? $output_path : '';
+ $return = "";
+ $return .= $multilanguage ? build_navigation($tree[$output_language], (($dir !== '') ? $dir . '/' : '') . $output_language, $url) : build_navigation($tree, $dir, $url);
+ $return .= "
";
+ return $return;
+ }
+
+ function build_navigation($tree, $current_dir, $url) {
+ global $mode, $base_path, $docs_path, $options;
+ $return = "";
+ if ($mode === 'Static') $t = relative_path($current_dir . "/.", $url) . '/';
+ else {
+ $t = "http://" . $base_path . '/';
+ if (!$options['clean_urls']) $t .= 'index.php?';
+ $rel = clean_url($current_dir, 'Live');
+ $t .= ($rel === '') ? '' : $rel . '/';
+ }
+ foreach ($tree as $key => $node)
+ if (is_array($node)) {
+ $return .= "";
+ $return .= clean_url($key, "Title");
+ $return .= "";
+ $return .= "";
+ $dir = ($current_dir === '') ? $key : $current_dir . '/' . $key;
+ $return .= build_navigation($node, $dir, $url);
+ $return .= "
";
+ $return .= "";
+ }
+ else {
+ $return .= "" . clean_url($node, "Title");
+ $return .= "";
+ }
+ return $return;
+ }
+
+ // Generate Documentation from Markdown file
+ function generate_page($file) {
+ global $base, $base_doc, $base_path, $docs_path, $options, $mode, $relative_base;
+ $template = $options['template'];
+ $filename = substr(strrchr($file, "/"), 1);
+ if ($filename === 'index.md') $homepage = TRUE;
+ else $homepage = FALSE;
+ if (!$file) {
+ $page['path'] = '';
+ $page['markdown'] = '';
+ $page['content'] = '';
+ $page['title'] = 'Oh No';
+ $page['content'] = "Oh No. That page doesn't exist
";
+ $options['file_editor'] = false;
+ } else {
+ $page['path'] = str_replace($docs_path . '/', "", $file);
+ $page['markdown'] = file_get_contents($file);
+ $page['content'] = MarkDownExtended($page['markdown']);
+ $page['title'] = clean_url($file, 'Title');
+ }
+ $relative_base = ($mode === 'Static') ? relative_path("", $file) : "http://" . $base_path . '/';
+ ob_start();
+ include($base . "/template/" . $template . ".tpl");
+ $return = ob_get_contents();
+ @ob_end_clean();
+ return $return;
+ }
+
+ // File to URL
+ function clean_url($url, $mode = 'Static') {
+ global $docs_path, $output_path, $options;
+ switch ($mode) {
+ case 'Live':
+ $url = str_replace(array(".md", ".html", ".php"), "", $url);
+ case 'Static':
+ $url = str_replace(".md", ".html", $url);
+ $remove = array($docs_path . '/');
+ if (isset($output_path)) $remove[] = $output_path . '/';
+ $url = str_replace($remove, "", $url);
+ $url = explode('/', $url);
+ foreach ($url as &$a) {
+ $a = explode('_', $a);
+ if (isset($a[0]) && is_numeric($a[0])) unset($a[0]);
+ $a = implode('_', $a);
+ }
+ $url = implode('/', $url);
+ return $url;
+ case 'Title':
+ case 'Filename':
+ $t = substr_count($url, '/');
+ if ($t > 0) $url = substr(strrchr($url, "/"), 1);
+ $url = explode('_', $url);
+ if (isset($url[0]) && is_numeric($url[0])) unset($url[0]);
+ if ($mode === 'Filename') $url = implode('_', $url);
+ else $url = implode(' ', $url);
+ $url = str_replace(array(".md", ".html"), "", $url);
+ return $url;
+
+ }
+ }
+
+ // Get Path based on Server. For Use in template file.
+ function get_url($url) {
+ global $mode, $options, $relative_base;
+ $t = clean_url($url, $mode);
+ if ($t === 'index') {
+ if ($mode === 'Static') return $relative_base . 'index.html';
+ else return $relative_base;
+ }
+ if ($mode === 'Live' && !$options['clean_urls']) $t = 'index.php?' . $t;
+ return $t;
+ }
+
+ // Relative Path From Path2 to Path1
+ function relative_path($path1, $path2) {
+ global $output_path, $docs_path, $base;
+ $remove = array($docs_path . '/');
+ if (isset($output_path)) $remove[] = $output_path . '/';
+ $remove[] = $base . '/';
+ $path1 = str_replace($remove, "", $path1);
+ $path2 = str_replace($remove, "", $path2);
+ $nesting = substr_count($path2, "/");
+ if ($nesting == 0) return clean_url($path1);
+ $return = "";
+ $t = 0;
+ while ($t < $nesting) {
+ $return .= "../";
+ $t += 1;
+ }
+ $return .= clean_url($path1);
+ return $return;
+ }
+
+
+?>
diff --git a/libs/live.php b/libs/live.php
new file mode 100644
index 0000000..e5d71d5
--- /dev/null
+++ b/libs/live.php
@@ -0,0 +1,51 @@
+
\ No newline at end of file
diff --git a/libs/static.php b/libs/static.php
new file mode 100644
index 0000000..7edf2c6
--- /dev/null
+++ b/libs/static.php
@@ -0,0 +1,90 @@
+ $language) {
+ $output_language = $languageKey;
+ generate_static_branch($tree[$languageKey], $languageKey);
+ }
+ $index = $docs_path . '/index.md';
+ if (is_file($index)) {
+ $index = generate_page($index);
+ file_put_contents($output_path . '/index.html', $index);
+ }
+ }
+
+ // Generate Static Content For Given Directory
+ function generate_static_branch($tree, $current_dir) {
+ global $docs_path, $output_path;
+ $p = $output_path;
+ if ($current_dir !== '') {
+ $p .= '/' . clean_url($current_dir);
+ $current_dir .= '/';
+ }
+ if (!is_dir($p)) @mkdir($p);
+ foreach ($tree as $key => $node)
+ if (is_array($node)) generate_static_branch($node, $current_dir . $key);
+ else {
+ $html = generate_page($docs_path . '/' . $current_dir . $node);
+ file_put_contents($p . "/" . clean_url($node), $html);
+ }
+ }
+
+ // Rmdir
+ function clean_directory($dir) {
+ $it = new RecursiveDirectoryIterator($dir);
+ $files = new RecursiveIteratorIterator($it,
+ RecursiveIteratorIterator::CHILD_FIRST);
+ foreach($files as $file) {
+ if ($file->getFilename() === '.' || $file->getFilename() === '..') continue;
+ if ($file->isDir()) rmdir($file->getRealPath());
+ else unlink($file->getRealPath());
+ }
+ }
+
+ // Copy Local Assets
+ function clean_copy_assets($path){
+ @mkdir($path);
+ $options = $GLOBALS["options"];
+ //Clean
+ clean_directory($path);
+ //Copy assets
+ $unnecessaryImgs = array('./img/favicon.png', './img/favicon-blue.png', './img/favicon-green.png', './img/favicon-navy.png', './img/favicon-red.png');
+ $unnecessaryJs = array();
+ if ($options['colors']) {
+ $unnecessaryLess = array('./less/daux-blue.less', './less/daux-green.less', './less/daux-navy.less', './less/daux-red.less');
+ copy_recursive('./less', $path.'/', $unnecessaryLess);
+ $unnecessaryImgs = array_diff($unnecessaryImgs, array('./img/favicon.png'));
+ } else {
+ $unnecessaryJs = array('./js/less.min.js');
+ @mkdir($path.'/css');
+ @copy('./css/daux-'.$options['theme'].'.min.css', $path.'/css/daux-'.$options['theme'].'.min.css');
+ $unnecessaryImgs = array_diff($unnecessaryImgs, array('./img/favicon-'.$options['theme'].'.png'));
+ }
+ copy_recursive('./img', $path.'/', $unnecessaryImgs);
+ copy_recursive('./js', $path.'/', $unnecessaryJs);
+ }
+
+
+ // Copy Recursive
+ function copy_recursive($source, $dest, $ignoreList = array()) {
+ $src_folder=str_replace(array('.','/'), '', $source);
+ @mkdir($dest . '/' . $src_folder);
+ foreach (
+ $iterator = new RecursiveIteratorIterator(
+ new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS),
+ RecursiveIteratorIterator::SELF_FIRST) as $item
+ ) {
+ if ($item->isDir()) @mkdir($dest . '/' . $src_folder . '/' .$iterator->getSubPathName());
+ else if (!$ignoreList || !in_array($item, $ignoreList)) @copy($item, $dest . '/' .$src_folder. '/' .$iterator->getSubPathName());
+ }
+ }
+
+?>
\ No newline at end of file
diff --git a/template/default.tpl b/template/default.tpl
index 2745f09..6a4dfbf 100644
--- a/template/default.tpl
+++ b/template/default.tpl
@@ -1,17 +1,17 @@
-
-
-
-
+
+
+
+
-
+
-
+
@@ -23,22 +23,22 @@
-
+
-
+
-
+
-
+
Generated by Daux.io
@@ -57,7 +57,7 @@
-
+
@@ -75,12 +75,12 @@
0) { ?>
$language_name) { ?>
-
" class="btn btn-primary btn-hero">
+
-
+
View Documentation
@@ -93,7 +93,7 @@
@@ -134,7 +134,7 @@
-
+
Generated by Daux.io
@@ -153,8 +153,7 @@
-
-
+