mikuli.cz

:)
git clone https://git.sr.ht/~ashymad/mikuli.cz
Log | Files | Refs

commit bfe60ffec746e2418d3374b2a7cb8222225be9bf
parent 2bee745a540430dea4bee8c317a0dfc0e6b83df5
Author: markseu <mark2011@mayberg.se>
Date:   Wed,  5 Aug 2015 10:46:19 +0200

Core update (Markdown)

Diffstat:
MREADME.md | 2+-
Msystem/core/core.php | 2+-
Msystem/plugins/markdown.php | 55+++++++++++++++++++++++++++++++++----------------------
3 files changed, 35 insertions(+), 24 deletions(-)

diff --git a/README.md b/README.md @@ -1,4 +1,4 @@ -Yellow 0.5.28 +Yellow 0.5.29 ============= [![Yellow](https://raw.githubusercontent.com/wiki/datenstrom/yellow/images/yellow.jpg)](http://datenstrom.se/yellow) diff --git a/system/core/core.php b/system/core/core.php @@ -5,7 +5,7 @@ // Yellow main class class Yellow { - const Version = "0.5.28"; + const Version = "0.5.29"; var $page; //current page var $pages; //pages from file system var $files; //files from file system diff --git a/system/plugins/markdown.php b/system/plugins/markdown.php @@ -5,7 +5,7 @@ // Markdown plugin class YellowMarkdown { - const Version = "0.5.7"; + const Version = "0.5.8"; var $yellow; //access to API // Handle initialisation @@ -100,9 +100,8 @@ class YellowMarkdownParser extends MarkdownExtraParser // Handle fenced code blocks function _doFencedCodeBlocks_callback($matches) { - $name = trim($matches[2]." ".$matches[3]); $text = $matches[4]; - $output = $this->page->parseContentBlock($name, $text, false); + if(!empty($matches[2])) $output = $this->page->parseContentBlock($matches[2]." ".$matches[3], $text, false); if(is_null($output)) { $attr = $this->doExtraAttributes("pre", $dummy =& $matches[3]); @@ -177,7 +176,7 @@ class YellowMarkdownParser extends MarkdownExtraParser // // Original Markdown // Copyright (c) 2004-2006 John Gruber -// <http://daringfireball.net/projects/markdown/> +// <https://daringfireball.net/projects/markdown/> // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -253,6 +252,9 @@ class MarkdownParser { # Optional header id="" generation callback function. public $header_id_func = null; + + # Optional function for converting code block content to HTML + public $code_block_content_func = null; # Class attribute to toggle "enhanced ordered list" behaviour # setting this to true will allow ordered lists to start from the index @@ -682,7 +684,7 @@ class MarkdownParser { "doImages" => 10, "doAnchors" => 20, - # Make links out of things like `<http://example.com/>` + # Make links out of things like `<https://example.com/>` # Must come after doAnchors, because you can use < and > # delimiters in inline links like [this](<url>). "doAutoLinks" => 30, @@ -1213,7 +1215,11 @@ class MarkdownParser { $codeblock = $matches[1]; $codeblock = $this->outdent($codeblock); - $codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES); + if ($this->code_block_content_func) { + $codeblock = call_user_func($this->code_block_content_func, $codeblock, ""); + } else { + $codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES); + } # trim leading newlines and trailing newlines $codeblock = preg_replace('/\A\n+|\n+\z/', '', $codeblock); @@ -1822,7 +1828,7 @@ class MarkdownExtraParser extends MarkdownParser { # Class attribute for code blocks goes on the `code` tag; # setting this to true will put attributes on the `pre` tag instead. public $code_attr_on_pre = false; - + # Predefined abbreviations. public $predef_abbr = array(); @@ -1915,7 +1921,7 @@ class MarkdownExtraParser extends MarkdownParser { # Expression to use when parsing in a context when no capture is desired protected $id_class_attr_nocatch_re = '\{(?:[ ]*[#.a-z][-_:a-zA-Z0-9=]+){1,}[ ]*\}'; - protected function doExtraAttributes($tag_name, $attr, $defaultIdValue = null) { + protected function doExtraAttributes($tag_name, $attr, $defaultIdValue = null, $classes = array()) { # # Parse attributes caught by the $this->id_class_attr_catch_re expression # and return the HTML-formatted list of attributes. @@ -1925,14 +1931,13 @@ class MarkdownExtraParser extends MarkdownParser { # In addition, this method also supports supplying a default Id value, # which will be used to populate the id attribute in case it was not # overridden. - if (empty($attr) && !$defaultIdValue) return ""; + if (empty($attr) && !$defaultIdValue && empty($classes)) return ""; # Split on components preg_match_all('/[#.a-z][-_:a-zA-Z0-9=]+/', $attr, $matches); $elements = $matches[0]; # handle classes and ids (only first id taken into account) - $classes = array(); $attributes = array(); $id = false; foreach ($elements as $element) { @@ -2129,12 +2134,10 @@ class MarkdownExtraParser extends MarkdownParser { # Fenced code block marker (?<= ^ | \n ) [ ]{0,'.($indent+3).'}(?:~{3,}|`{3,}) - [ ]* - (?: - \.?[-_:a-zA-Z0-9]+ # standalone class name - | - '.$this->id_class_attr_nocatch_re.' # extra attributes - )? + [ ]* + (?: \.?[-_:a-zA-Z0-9]+ )? # standalone class name + [ ]* + (?: '.$this->id_class_attr_nocatch_re.' )? # extra attributes [ ]* (?= \n ) ' : '' ). ' # End (if not is span). @@ -2190,7 +2193,7 @@ class MarkdownExtraParser extends MarkdownParser { # Note: need to recheck the whole tag to disambiguate backtick # fences from code spans # - if (preg_match('{^\n?([ ]{0,'.($indent+3).'})(~{3,}|`{3,})[ ]*(?:\.?[-_:a-zA-Z0-9]+|'.$this->id_class_attr_nocatch_re.')?[ ]*\n?$}', $tag, $capture)) { + if (preg_match('{^\n?([ ]{0,'.($indent+3).'})(~{3,}|`{3,})[ ]*(?:\.?[-_:a-zA-Z0-9]+)?[ ]*(?:'.$this->id_class_attr_nocatch_re.')?[ ]*\n?$}', $tag, $capture)) { # Fenced code block marker: find matching end marker. $fence_indent = strlen($capture[1]); # use captured indent in re $fence_re = $capture[2]; # use captured fence in re @@ -3074,7 +3077,9 @@ class MarkdownExtraParser extends MarkdownParser { [ ]* (?: \.?([-_:a-zA-Z0-9]+) # 2: standalone class name - | + )? + [ ]* + (?: '.$this->id_class_attr_catch_re.' # 3: Extra attributes )? [ ]* \n # Whitespace and newline following marker. @@ -3098,17 +3103,23 @@ class MarkdownExtraParser extends MarkdownParser { $classname =& $matches[2]; $attrs =& $matches[3]; $codeblock = $matches[4]; - $codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES); + + if ($this->code_block_content_func) { + $codeblock = call_user_func($this->code_block_content_func, $codeblock, $classname); + } else { + $codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES); + } + $codeblock = preg_replace_callback('/^\n+/', array($this, '_doFencedCodeBlocks_newlines'), $codeblock); + $classes = array(); if ($classname != "") { if ($classname{0} == '.') $classname = substr($classname, 1); - $attr_str = ' class="'.$this->code_class_prefix.$classname.'"'; - } else { - $attr_str = $this->doExtraAttributes($this->code_attr_on_pre ? "pre" : "code", $attrs); + $classes[] = $this->code_class_prefix.$classname; } + $attr_str = $this->doExtraAttributes($this->code_attr_on_pre ? "pre" : "code", $attrs, null, $classes); $pre_attr_str = $this->code_attr_on_pre ? $attr_str : ''; $code_attr_str = $this->code_attr_on_pre ? '' : $attr_str; $codeblock = "<pre$pre_attr_str><code$code_attr_str>$codeblock</code></pre>";