1
0
Fork 0
mirror of https://github.com/sbrl/Pepperminty-Wiki.git synced 2024-11-25 17:23:00 +00:00

Rewrite parser backend. Currently untested.

This commit is contained in:
Starbeamrainbowlabs 2015-10-04 09:10:14 +01:00
parent 93492c7ddc
commit bdfec1c6f3
6 changed files with 68 additions and 29 deletions

View file

@ -54,6 +54,11 @@ $settings->defaultpage = "Main Page";
// automatically views the default page (see above). // automatically views the default page (see above).
$settings->defaultaction = "view"; $settings->defaultaction = "view";
// The parser to use when rendering pages. Defaults to 'default', which is a
// modified version of slimdown, originally written by
// Johnny Broadway <johnny@johnnybroadway.com>.
$settings->parser = "default";
// Whether to show a list of subpages at the bottom of the page. // Whether to show a list of subpages at the bottom of the page.
$settings->show_subpages = true; $settings->show_subpages = true;
@ -821,15 +826,26 @@ function add_action($action_name, $func)
$actions->$action_name = $func; $actions->$action_name = $func;
} }
// Function to register a new parser. If multiple parsers are registered then // Function to register a new parser.
// only the last parser registered will actually be used. $parsers = new stdClass();
$parse_page_source = function() { $parsers->none = function() {
throw new Exception("No parser registered!"); throw new Exception("No parser registered!");
}; };
function add_parser($parser_code) function add_parser($name, $parser_code)
{ {
global $parse_page_source; global $parsers;
$parse_page_source = $parser_code; if(isset($parsers->$name))
throw new Exception("Can't register parser with name '$name' because a parser with that name already exists.");
$parsers->$name = $parser_code;
}
function parse_page_source($source)
{
global $settings, $parsers;
if(!isset($parsers->{$settings->parser}))
exit(page_renderer::render_main("Parsing error - $settings->sitename", "<p>Parsing some page source data failed. This is most likely because $settings->sitename has the parser setting set incorrectly. Please contact <a href='mailto:" . hide_email($settings->admindetails["email"]) . "'>" . $settings->admindetails["name"] . "</a>, your Administrator."));
return $parsers->{$settings->parser}($source);
} }
// Function to register a new proprocessor that will be executed just before // Function to register a new proprocessor that will be executed just before
@ -1193,7 +1209,7 @@ register_module([
register_module([ register_module([
"name" => "Page editor", "name" => "Page editor",
"version" => "0.10", "version" => "0.11",
"author" => "Starbeamrainbowlabs", "author" => "Starbeamrainbowlabs",
"description" => "Allows you to edit pages by adding the edit and save actions. You should probably include this one.", "description" => "Allows you to edit pages by adding the edit and save actions. You should probably include this one.",
"id" => "page-edit", "id" => "page-edit",
@ -1331,6 +1347,10 @@ register_module([
else else
$pageindex->$page->lasteditor = utf8_encode("anonymous"); $pageindex->$page->lasteditor = utf8_encode("anonymous");
// A hack to resave the pagedata if the preprocessors have
// changed it. We need this because the preprocessors *must*
// run _after_ the pageindex has been updated.
$pagedata_orig = $pagedata;
// Execute all the preprocessors // Execute all the preprocessors
foreach($save_preprocessors as $func) foreach($save_preprocessors as $func)
@ -1338,6 +1358,9 @@ register_module([
$func($pageindex->$page, $pagedata); $func($pageindex->$page, $pagedata);
} }
if($pagedata !== $pagedata_orig)
file_put_contents("$env->page.md", $pagedata);
file_put_contents("./pageindex.json", json_encode($pageindex, JSON_PRETTY_PRINT)); file_put_contents("./pageindex.json", json_encode($pageindex, JSON_PRETTY_PRINT));
@ -1762,13 +1785,13 @@ register_module([
register_module([ register_module([
"name" => "Page viewer", "name" => "Page viewer",
"version" => "0.10", "version" => "0.11",
"author" => "Starbeamrainbowlabs", "author" => "Starbeamrainbowlabs",
"description" => "Allows you to view pages. You reallyshould include this one.", "description" => "Allows you to view pages. You reallyshould include this one.",
"id" => "page-view", "id" => "page-view",
"code" => function() { "code" => function() {
add_action("view", function() { add_action("view", function() {
global $pageindex, $settings, $env, $parse_page_source; global $pageindex, $settings, $env;
// Check to make sure that the page exists // Check to make sure that the page exists
$page = $env->page; $page = $env->page;
@ -1818,7 +1841,7 @@ register_module([
$parsing_start = microtime(true); $parsing_start = microtime(true);
$content .= $parse_page_source(file_get_contents("$env->page.md")); $content .= parse_page_source(file_get_contents("$env->page.md"));
if($settings->show_subpages) if($settings->show_subpages)
{ {
@ -1855,12 +1878,12 @@ register_module([
register_module([ register_module([
"name" => "Default Parser", "name" => "Default Parser",
"version" => "0.7", "version" => "0.8",
"author" => "Johnny Broadway & Starbeamrainbowlabs", "author" => "Johnny Broadway & Starbeamrainbowlabs",
"description" => "The default parser for Pepperminty Wiki. Based on Johnny Broadway's Slimdown (with more than a few modifications). This parser's features are documented in the help page.", "description" => "The default parser for Pepperminty Wiki. Based on Johnny Broadway's Slimdown (with more than a few modifications). This parser's features are documented in the help page.",
"id" => "parser-default", "id" => "parser-default",
"code" => function() { "code" => function() {
add_parser(function($markdown) { add_parser("default", function($markdown) {
return Slimdown::render($markdown); return Slimdown::render($markdown);
}); });
} }

View file

@ -588,15 +588,26 @@ function add_action($action_name, $func)
$actions->$action_name = $func; $actions->$action_name = $func;
} }
// Function to register a new parser. If multiple parsers are registered then // Function to register a new parser.
// only the last parser registered will actually be used. $parsers = new stdClass();
$parse_page_source = function() { $parsers->none = function() {
throw new Exception("No parser registered!"); throw new Exception("No parser registered!");
}; };
function add_parser($parser_code) function add_parser($name, $parser_code)
{ {
global $parse_page_source; global $parsers;
$parse_page_source = $parser_code; if(isset($parsers->$name))
throw new Exception("Can't register parser with name '$name' because a parser with that name already exists.");
$parsers->$name = $parser_code;
}
function parse_page_source($source)
{
global $settings, $parsers;
if(!isset($parsers->{$settings->parser}))
exit(page_renderer::render_main("Parsing error - $settings->sitename", "<p>Parsing some page source data failed. This is most likely because $settings->sitename has the parser setting set incorrectly. Please contact <a href='mailto:" . hide_email($settings->admindetails["email"]) . "'>" . $settings->admindetails["name"] . "</a>, your Administrator."));
return $parsers->{$settings->parser}($source);
} }
// Function to register a new proprocessor that will be executed just before // Function to register a new proprocessor that will be executed just before

View file

@ -64,11 +64,11 @@
}, },
{ {
"name": "Page editor", "name": "Page editor",
"version": "0.10", "version": "0.11",
"author": "Starbeamrainbowlabs", "author": "Starbeamrainbowlabs",
"description": "Allows you to edit pages by adding the edit and save actions. You should probably include this one.", "description": "Allows you to edit pages by adding the edit and save actions. You should probably include this one.",
"id": "page-edit", "id": "page-edit",
"lastupdate": 1443874970, "lastupdate": 1443945594,
"optional": false "optional": false
}, },
{ {
@ -136,20 +136,20 @@
}, },
{ {
"name": "Page viewer", "name": "Page viewer",
"version": "0.10", "version": "0.11",
"author": "Starbeamrainbowlabs", "author": "Starbeamrainbowlabs",
"description": "Allows you to view pages. You reallyshould include this one.", "description": "Allows you to view pages. You reallyshould include this one.",
"id": "page-view", "id": "page-view",
"lastupdate": 1443875776, "lastupdate": 1443946169,
"optional": false "optional": false
}, },
{ {
"name": "Default Parser", "name": "Default Parser",
"version": "0.7", "version": "0.8",
"author": "Johnny Broadway & Starbeamrainbowlabs", "author": "Johnny Broadway & Starbeamrainbowlabs",
"description": "The default parser for Pepperminty Wiki. Based on Johnny Broadway's Slimdown (with more than a few modifications). This parser's features are documented in the help page.", "description": "The default parser for Pepperminty Wiki. Based on Johnny Broadway's Slimdown (with more than a few modifications). This parser's features are documented in the help page.",
"id": "parser-default", "id": "parser-default",
"lastupdate": 1442928533, "lastupdate": 1443945169,
"optional": false "optional": false
} }
] ]

View file

@ -1,13 +1,13 @@
<?php <?php
register_module([ register_module([
"name" => "Page viewer", "name" => "Page viewer",
"version" => "0.10", "version" => "0.11",
"author" => "Starbeamrainbowlabs", "author" => "Starbeamrainbowlabs",
"description" => "Allows you to view pages. You reallyshould include this one.", "description" => "Allows you to view pages. You reallyshould include this one.",
"id" => "page-view", "id" => "page-view",
"code" => function() { "code" => function() {
add_action("view", function() { add_action("view", function() {
global $pageindex, $settings, $env, $parse_page_source; global $pageindex, $settings, $env;
// Check to make sure that the page exists // Check to make sure that the page exists
$page = $env->page; $page = $env->page;
@ -57,7 +57,7 @@ register_module([
$parsing_start = microtime(true); $parsing_start = microtime(true);
$content .= $parse_page_source(file_get_contents("$env->page.md")); $content .= parse_page_source(file_get_contents("$env->page.md"));
if($settings->show_subpages) if($settings->show_subpages)
{ {

View file

@ -1,12 +1,12 @@
<?php <?php
register_module([ register_module([
"name" => "Default Parser", "name" => "Default Parser",
"version" => "0.7", "version" => "0.8",
"author" => "Johnny Broadway & Starbeamrainbowlabs", "author" => "Johnny Broadway & Starbeamrainbowlabs",
"description" => "The default parser for Pepperminty Wiki. Based on Johnny Broadway's Slimdown (with more than a few modifications). This parser's features are documented in the help page.", "description" => "The default parser for Pepperminty Wiki. Based on Johnny Broadway's Slimdown (with more than a few modifications). This parser's features are documented in the help page.",
"id" => "parser-default", "id" => "parser-default",
"code" => function() { "code" => function() {
add_parser(function($markdown) { add_parser("default", function($markdown) {
return Slimdown::render($markdown); return Slimdown::render($markdown);
}); });
} }

View file

@ -51,6 +51,11 @@ $settings->defaultpage = "Main Page";
// automatically views the default page (see above). // automatically views the default page (see above).
$settings->defaultaction = "view"; $settings->defaultaction = "view";
// The parser to use when rendering pages. Defaults to 'default', which is a
// modified version of slimdown, originally written by
// Johnny Broadway <johnny@johnnybroadway.com>.
$settings->parser = "default";
// Whether to show a list of subpages at the bottom of the page. // Whether to show a list of subpages at the bottom of the page.
$settings->show_subpages = true; $settings->show_subpages = true;