__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Utility function to convert wiki-like to Markdown format
*
* @package core
* @subpackage lib
* @copyright Howard Miller, 2005
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**#@+
* state defines
*/
define( "STATE_NONE",1 ); // blank line has been detected, so looking for first line on next para
define( "STATE_PARAGRAPH",2 ); // currently processing vanilla paragraph
define( "STATE_BLOCKQUOTE",3 ); // currently processing blockquote section
define( "STATE_PREFORM",4 ); // currently processing preformatted text
define( "STATE_NOTIKI",5 ); // currently processing preformatted / no formatting
/**#@-*/
/**#@+
* list defines
*/
define( "LIST_NONE", 1 ); // no lists active
define( "LIST_UNORDERED", 2 ); // unordered list active
define( "LIST_ORDERED", 3 ); // ordered list active
define( "LIST_DEFINITION", 4 ); // definition list active
/**#@-*/
/**
* @package moodlecore
* @copyright Howard Miller, 2005
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class WikiToMarkdown {
var $block_state;
var $list_state;
var $list_depth;
var $list_backtrack;
var $output; // output buffer
var $courseid;
function close_block($state ) {
// provide appropriate closure for block according to state
// if in list close this first
$lclose = "";
if ($this->list_state != LIST_NONE) {
$lclose = $this->do_list( " ",true );
}
$sclose = "";
switch ($state) {
case STATE_PARAGRAPH:
$sclose = "\n";
break;
case STATE_BLOCKQUOTE:
$sclose = "\n";
break;
case STATE_PREFORM:
$sclose = "</pre>\n";
break;
case STATE_NOTIKI:
$sclose = "\n";
break;
}
return $lclose . $sclose;
}
function do_replace($line, $mark, $tag ) {
// do the regex thingy for things like bold, italic etc
// $mark is the magic character, and $tag the HTML tag to insert
// BODGE: replace inline $mark characters in places where we want them ignored
// they will be put back after main substitutue, stops problems with eg, and/or
$bodge = chr(1);
$line = preg_replace( '/([[:alnum:]])'.$mark.'([[:alnum:]])/i', '\\1'.$bodge.'\\2',$line );
$regex = '/(^| |[(.,])'.$mark.'([^'.$mark.']*)'.$mark.'([^[:alnum:]]|$)/i';
$replace = '\\1<'.$tag.'>\\2</'.$tag.'>\\3';
$line = preg_replace( $regex, $replace, $line );
// BODGE: back we go
$line = preg_replace( '/'.$bodge.'/i', $mark, $line );
return $line;
}
function do_replace_markdown($line, $mark, $tag ) {
// do the regex thingy for things like bold, italic etc
// $mark is the magic character, and $tag the HTML tag to insert
// MARKDOWN version does not generate HTML tags, just straigt replace
// BODGE: replace inline $mark characters in places where we want them ignored
// they will be put back after main substitutue, stops problems with eg, and/or
$bodge = chr(1);
$line = preg_replace( '/([[:alnum:]])'.$mark.'([[:alnum:]])/i', '\\1'.$bodge.'\\2',$line );
$regex = '/(^| |[(.,])'.$mark.'([^'.$mark.']*)'.$mark.'([^[:alnum:]]|$)/i';
$replace = '\\1'.$tag.'\\2'.$tag.'\\3';
$line = preg_replace( $regex, $replace, $line );
// BODGE: back we go
$line = preg_replace( '/'.$bodge.'/i', $mark, $line );
return $line;
}
function do_replace_sub($line, $mark, $tag ) {
// do regex for subscript and superscript (slightly different)
// $mark is the magic character and $tag the HTML tag to insert
$regex = '/'.$mark.'([^'.$mark.']*)'.$mark.'/i';
$replace = '<'.$tag.'>\\1</'.$tag.'>';
return preg_replace( $regex, $replace, $line );
}
function do_list($line, $blank=false ) {
// handle line with list character on it
// if blank line implies drop to level 0
// get magic character and then delete it from the line if not blank
if ($blank) {
$listchar="";
$count = 0;
}
else {
$listchar = $line[0];
$count = strspn( $line, $listchar );
$line = preg_replace( "/^[".$listchar."]+ /i", "", $line );
}
// find what sort of list this character represents
$list_tag = "";
$list_close_tag = "";
$item_tag = "";
$item_close_tag = "";
$list_style = LIST_NONE;
switch ($listchar) {
case '*':
$list_tag = "";
$list_close_tag = "";
$item_tag = "*";
$item_close_tag = "";
$list_style = LIST_UNORDERED;
break;
case '#':
$list_tag = "";
$list_close_tag = "";
$item_tag = "1.";
$item_close_tag = "";
$list_style = LIST_ORDERED;
break;
case ';':
$list_tag = "<dl>";
$list_close_tag = "</dl>";
$item_tag = "<dd>";
$item_close_tag = "</dd>";
$list_style = LIST_DEFINITION;
break;
case ':':
$list_tag = "<dl>";
$list_close_tag = "</dl>";
$item_tag = "<dt>";
$item_close_tag = "</dt>";
$list_style = LIST_DEFINITION;
break;
}
// tag opening/closing regime now - fun bit :-)
$tags = "";
// if depth has reduced do number of closes to restore level
for ($i=$this->list_depth; $i>$count; $i-- ) {
$close_tag = array_pop( $this->list_backtrack );
$tags = $tags . $close_tag;
}
// if depth has increased do number of opens to balance
for ($i=$this->list_depth; $i<$count; $i++ ) {
array_push( $this->list_backtrack, "$list_close_tag" );
$tags = $tags . "$list_tag";
}
// ok, so list state is now same as style and depth same as count
$this->list_state = $list_style;
$this->list_depth = $count;
// get indent
$indent = substr( " ",1,$count-1 );
if ($blank) {
$newline = $tags;
}
else {
$newline = $tags . $indent . "$item_tag " . $line . "$item_close_tag";
}
return $newline;
}
function line_replace($line ) {
// return line after various formatting replacements
// have been made - order is vital to stop them interfering with each other
global $CFG;
// ---- (at least) means a <hr />
// MARKDOWN: no change so leave
// is this a list line (starts with * # ; :)
if (preg_match( "/^([*]+|[#]+|[;]+|[:]+) /i", $line )) {
$line = $this->do_list( $line );
}
// typographic conventions
// MARKDOWN: no equiv. so convert to entity as before
// $line = str_replace( "--", "—", $line );
// $line = str_replace( " - ", " – ", $line );
$line = str_replace( "...", " … ", $line );
$line = str_replace( "(R)", "®", $line );
$line = str_replace( "(r)", "®", $line );
$line = str_replace( "(TM)", "™", $line );
$line = str_replace( "(tm)", "™", $line );
$line = str_replace( "(C)", "©", $line );
$line = str_replace( "1/4", "¼", $line );
$line = str_replace( "1/2", "½", $line );
$line = str_replace( "3/4", "¾", $line );
$line = preg_replace( "/([[:digit:]]+[[:space:]]*)x([[:space:]]*[[:digit:]]+)/i", "\\1×\\2", $line ); // (digits) x (digits) - multiply
// do formatting tags
// NOTE: The / replacement *has* to be first, or it will screw the
// HTML tags that are added by the other ones
// MARKDOWN: only bold and italic change, rest are just HTML
$line = $this->do_replace_markdown( $line, "\*", "**" );
$line = $this->do_replace_markdown( $line, "/", "*" );
$line = $this->do_replace( $line, "\+", "ins" );
// $line = $this->do_replace( $line, "-", "del" );
$line = $this->do_replace_sub( $line, "~", "sub" );
$line = $this->do_replace_sub( $line, "\^", "sup" );
$line = $this->do_replace( $line, "%", "code" );
$line = $this->do_replace( $line, "@", "cite" );
// convert urls into proper link with optional link text URL(text)
// MARDOWN: HTML conversion should work fine
$line = preg_replace("/([[:space:]]|^)([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])\(([^)]+)\)/i",
"\\1[\\5](\\2://\\3\\4)", $line);
$line = preg_replace("/([[:space:]])www\.([^[:space:]]*)([[:alnum:]#?/&=])\(([^)]+)\)/i",
"\\1[\\5](http://www.\\2\\3)", $line);
// make urls (with and without httpd) into proper links
$line = preg_replace("/([[:space:]]|^)([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])/i",
"\\1<\\2://\\3\\4>", $line);
$line = preg_replace("/([[:space:]])www\.([^[:space:]]*)([[:alnum:]#?/&=])/i",
"\\1<http://www.\\2\\3\>", $line);
// make email addresses into mailtos....
// MARKDOWN doesn't quite support this, so do as html
$line = preg_replace("/([[:space:]]|^)([[:alnum:]._-]+@[[:alnum:]._-]+)\(([^)]+)\)/i",
"\\1<a href=\"mailto:\\2\">\\3</a>", $line);
// !# at the beginning of any lines means a heading
// MARKDOWN: value (1-6) becomes number of hashes
if (preg_match( "/^!([1-6]) (.*)$/i", $line, $regs )) {
$depth = substr( $line, 1, 1 );
$out = substr( '##########', 0, $depth);
$line = preg_replace( "/^!([1-6]) (.*)$/i", "$out \\2", $line );
}
// acronym handing, example HTML(Hypertext Markyp Language)
// MARKDOWN: no equiv. so just leave as HTML
$line = preg_replace( "/([A-Z]+)\(([^)]+)\)/", "<acronym title=\"\\2\">\\1</acronym>", $line );
// Replace resource link >>##(Description Text)
// MARKDOWN: change to MD web link style
$line = preg_replace("/ ([a-zA-Z]+):([0-9]+)\(([^)]+)\)/i",
" [\\3](".$CFG->wwwroot."/mod/\\1/view.php?id=\\2) ", $line );
$coursefileurl = array(moodle_url::make_legacyfile_url($this->courseid, null));
// Replace picture resource link
$line = preg_replace("#/([a-zA-Z0-9./_-]+)(png|gif|jpg)\(([^)]+)\)#i",
"", $line );
// Replace file resource link
$line = preg_replace("#file:/([[:alnum:]/._-]+)\(([^)]+)\)#i",
"[\\2](".$coursefileurl."/\\1)", $line );
return $line;
}
function convert($content,$courseid ) {
// main entry point for processing Wiki-like text
// $content is string containing text with Wiki-Like formatting
// return: string containing Markdown formatting
// initialisation stuff
$this->output = "";
$this->block_state = STATE_NONE;
$this->list_state = LIST_NONE;
$this->list_depth = 0;
$this->list_backtrack = array();
$this->courseid = $courseid;
// split content into array of single lines
$lines = explode( "\n",$content );
$buffer = "";
// run through lines
foreach( $lines as $line ) {
// is this a blank line?
$blank_line = preg_match( "/^[[:blank:]\r]*$/i", $line );
if ($blank_line) {
// first end current block according to state
$buffer = $buffer . $this->close_block( $this->block_state );
$this->block_state = STATE_NONE;
continue;
}
// act now depending on current block state
if ($this->block_state == STATE_NONE) {
// first character of line defines block type
if (preg_match( "/^> /i",$line )) {
// blockquote
$buffer = $buffer . $this->line_replace( $line ). "\n";
$this->block_state = STATE_BLOCKQUOTE;
}
else
if (preg_match( "/^ /i",$line) ) {
// preformatted text
// MARKDOWN: no real equiv. so just use <pre>
$buffer = $buffer . "<pre>\n";
$buffer = $buffer . $this->line_replace($line) . "\n";
$this->block_state = STATE_PREFORM;
}
else
if (preg_match("/^\% /i",$line) ) {
// preformatted text - no processing
// MARKDOWN: this is MD code form of a paragraph
$buffer = $buffer . " " . preg_replace( "/^\%/i","",$line) . "\n";
$this->block_state = STATE_NOTIKI;
}
else {
// ordinary paragraph
$buffer = $buffer . $this->line_replace($line) . "\n";
$this->block_state = STATE_PARAGRAPH;
}
continue;
}
if (($this->block_state == STATE_PARAGRAPH) |
($this->block_state == STATE_BLOCKQUOTE) |
($this->block_state == STATE_PREFORM) ) {
$buffer = $buffer . $this->line_replace($line) . "\n";
continue;
}
elseif ($this->block_state == STATE_NOTIKI) {
$buffer = $buffer . " " .$line . "\n";
}
}
// close off any block level tags
$buffer = $buffer . $this->close_block( $this->block_state );
//return $buffer;
return $buffer;
}
}
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| adodb | Folder | 0777 |
|
|
| ajax | Folder | 0777 |
|
|
| amd | Folder | 0777 |
|
|
| antivirus | Folder | 0777 |
|
|
| aws-sdk | Folder | 0777 |
|
|
| behat | Folder | 0777 |
|
|
| bennu | Folder | 0777 |
|
|
| classes | Folder | 0777 |
|
|
| db | Folder | 0777 |
|
|
| ddl | Folder | 0777 |
|
|
| dml | Folder | 0777 |
|
|
| dtl | Folder | 0777 |
|
|
| editor | Folder | 0777 |
|
|
| emoji-data | Folder | 0777 |
|
|
| evalmath | Folder | 0777 |
|
|
| external | Folder | 0777 |
|
|
| filebrowser | Folder | 0777 |
|
|
| filestorage | Folder | 0777 |
|
|
| fonts | Folder | 0777 |
|
|
| form | Folder | 0777 |
|
|
| geopattern-php | Folder | 0777 |
|
|
| giggsey | Folder | 0777 |
|
|
| Folder | 0777 |
|
||
| grade | Folder | 0777 |
|
|
| guzzlehttp | Folder | 0777 |
|
|
| html2text | Folder | 0777 |
|
|
| htmlpurifier | Folder | 0777 |
|
|
| jmespath | Folder | 0777 |
|
|
| jquery | Folder | 0777 |
|
|
| laravel | Folder | 0777 |
|
|
| lti1p3 | Folder | 0777 |
|
|
| ltiprovider | Folder | 0777 |
|
|
| markdown | Folder | 0777 |
|
|
| maxmind | Folder | 0777 |
|
|
| minify | Folder | 0777 |
|
|
| mlbackend | Folder | 0777 |
|
|
| mustache | Folder | 0777 |
|
|
| nikic | Folder | 0777 |
|
|
| openspout | Folder | 0777 |
|
|
| pear | Folder | 0777 |
|
|
| php-css-parser | Folder | 0777 |
|
|
| php-di | Folder | 0777 |
|
|
| php-enum | Folder | 0777 |
|
|
| php-jwt | Folder | 0777 |
|
|
| phpmailer | Folder | 0777 |
|
|
| phpspreadsheet | Folder | 0777 |
|
|
| phpunit | Folder | 0777 |
|
|
| phpxmlrpc | Folder | 0777 |
|
|
| plist | Folder | 0777 |
|
|
| polyfills | Folder | 0777 |
|
|
| portfolio | Folder | 0777 |
|
|
| psr | Folder | 0777 |
|
|
| ralouphie | Folder | 0777 |
|
|
| requirejs | Folder | 0777 |
|
|
| rtlcss | Folder | 0777 |
|
|
| scssphp | Folder | 0777 |
|
|
| simplepie | Folder | 0777 |
|
|
| slim | Folder | 0777 |
|
|
| spatie | Folder | 0777 |
|
|
| symfony | Folder | 0777 |
|
|
| table | Folder | 0777 |
|
|
| tcpdf | Folder | 0777 |
|
|
| templates | Folder | 0777 |
|
|
| testing | Folder | 0777 |
|
|
| tests | Folder | 0777 |
|
|
| userkey | Folder | 0777 |
|
|
| webauthn | Folder | 0777 |
|
|
| xapi | Folder | 0777 |
|
|
| xhprof | Folder | 0777 |
|
|
| xmldb | Folder | 0777 |
|
|
| yui | Folder | 0777 |
|
|
| yuilib | Folder | 0777 |
|
|
| zipstream | Folder | 0777 |
|
|
| UPGRADING.md | File | 26.35 KB | 0777 |
|
| accesslib.php | File | 184.94 KB | 0777 |
|
| adminlib.php | File | 398.39 KB | 0777 |
|
| apis.json | File | 7.09 KB | 0777 |
|
| apis.schema.json | File | 1.06 KB | 0777 |
|
| authlib.php | File | 46.33 KB | 0777 |
|
| badgeslib.php | File | 55.15 KB | 0777 |
|
| blocklib.php | File | 106.57 KB | 0777 |
|
| cacert.pem | File | 239.21 KB | 0777 |
|
| cacert.txt | File | 811 B | 0777 |
|
| clilib.php | File | 9.58 KB | 0777 |
|
| completionlib.php | File | 70.38 KB | 0777 |
|
| componentlib.class.php | File | 29.51 KB | 0777 |
|
| components.json | File | 3.98 KB | 0777 |
|
| conditionlib.php | File | 1.11 KB | 0777 |
|
| configonlylib.php | File | 8.19 KB | 0777 |
|
| cookies.js | File | 2.37 KB | 0777 |
|
| cronlib.php | File | 1.07 KB | 0777 |
|
| csslib.php | File | 6.81 KB | 0777 |
|
| csvlib.class.php | File | 17.72 KB | 0777 |
|
| customcheckslib.php | File | 1.5 KB | 0777 |
|
| datalib.php | File | 85.59 KB | 0777 |
|
| ddllib.php | File | 4.72 KB | 0777 |
|
| default.ttf | File | 502.23 KB | 0777 |
|
| deprecatedlib.php | File | 25.18 KB | 0777 |
|
| dmllib.php | File | 12.47 KB | 0777 |
|
| dtllib.php | File | 2.58 KB | 0777 |
|
| editorlib.php | File | 6.43 KB | 0777 |
|
| emptyfile.php | File | 809 B | 0777 |
|
| enrollib.php | File | 138.47 KB | 0777 |
|
| environmentlib.php | File | 58.32 KB | 0777 |
|
| excellib.class.php | File | 30.24 KB | 0777 |
|
| externallib.php | File | 9.54 KB | 0777 |
|
| filelib.php | File | 204.42 KB | 0777 |
|
| filterlib.php | File | 42.89 KB | 0777 |
|
| flickrclient.php | File | 10.1 KB | 0777 |
|
| flickrlib.php | File | 52.19 KB | 0777 |
|
| formslib.php | File | 151.53 KB | 0777 |
|
| gdlib.php | File | 17.71 KB | 0777 |
|
| googleapi.php | File | 9.48 KB | 0777 |
|
| gradelib.php | File | 62.29 KB | 0777 |
|
| graphlib.php | File | 86.81 KB | 0777 |
|
| grouplib.php | File | 59.67 KB | 0777 |
|
| index.html | File | 1 B | 0777 |
|
| installlib.php | File | 18.79 KB | 0777 |
|
| javascript-static.js | File | 42.38 KB | 0777 |
|
| javascript.php | File | 4.11 KB | 0777 |
|
| jslib.php | File | 4.21 KB | 0777 |
|
| jssourcemap.php | File | 2.51 KB | 0777 |
|
| ldaplib.php | File | 18.19 KB | 0777 |
|
| lexer.php | File | 15.92 KB | 0777 |
|
| licenselib.php | File | 12.42 KB | 0777 |
|
| licenses.json | File | 2.29 KB | 0777 |
|
| listlib.php | File | 29.37 KB | 0777 |
|
| mathslib.php | File | 4.47 KB | 0777 |
|
| messagelib.php | File | 32.76 KB | 0777 |
|
| modinfolib.php | File | 143.39 KB | 0777 |
|
| moodlelib.php | File | 359 KB | 0777 |
|
| myprofilelib.php | File | 18.35 KB | 0777 |
|
| navigationlib.php | File | 264.31 KB | 0777 |
|
| oauthlib.php | File | 24.97 KB | 0777 |
|
| odslib.class.php | File | 57.65 KB | 0777 |
|
| outputactions.php | File | 1.04 KB | 0777 |
|
| outputcomponents.php | File | 1.04 KB | 0777 |
|
| outputfactories.php | File | 1.04 KB | 0777 |
|
| outputfragmentrequirementslib.php | File | 1.04 KB | 0777 |
|
| outputlib.php | File | 11.99 KB | 0777 |
|
| outputrenderers.php | File | 1.04 KB | 0777 |
|
| outputrequirementslib.php | File | 1.04 KB | 0777 |
|
| pagelib.php | File | 91.58 KB | 0777 |
|
| pdflib.php | File | 10.11 KB | 0777 |
|
| phpminimumversionlib.php | File | 3.08 KB | 0777 |
|
| plagiarismlib.php | File | 3.38 KB | 0777 |
|
| plugins.json | File | 15.21 KB | 0777 |
|
| plugins.schema.json | File | 1.28 KB | 0777 |
|
| portfoliolib.php | File | 53.58 KB | 0777 |
|
| questionlib.php | File | 79.14 KB | 0777 |
|
| recaptchalib_v2.php | File | 6.53 KB | 0777 |
|
| requirejs.php | File | 7.4 KB | 0777 |
|
| resourcelib.php | File | 8.89 KB | 0777 |
|
| rsslib.php | File | 17.94 KB | 0777 |
|
| searchlib.php | File | 17.29 KB | 0777 |
|
| sessionlib.php | File | 4.86 KB | 0777 |
|
| setup.php | File | 43.98 KB | 0777 |
|
| setuplib.php | File | 62.59 KB | 0777 |
|
| soaplib.php | File | 5.28 KB | 0777 |
|
| statslib.php | File | 67.81 KB | 0777 |
|
| tablelib.php | File | 1.47 KB | 0777 |
|
| thirdpartylibs.xml | File | 31.13 KB | 0777 |
|
| tokeniserlib.php | File | 16.69 KB | 0777 |
|
| upgrade.txt | File | 180.01 KB | 0777 |
|
| upgradelib.php | File | 107.07 KB | 0777 |
|
| uploadlib.php | File | 1.9 KB | 0777 |
|
| validateurlsyntax.php | File | 23.05 KB | 0777 |
|
| wasmlib.php | File | 4.29 KB | 0777 |
|
| webdavlib.php | File | 69.59 KB | 0777 |
|
| weblib.php | File | 92.3 KB | 0777 |
|
| wiki_to_markdown.php | File | 13.08 KB | 0777 |
|
| wordlist.txt | File | 1.23 KB | 0777 |
|
| xhtml.xsl | File | 223 B | 0777 |
|
| xmlize.php | File | 8.82 KB | 0777 |
|
| xsendfilelib.php | File | 3.02 KB | 0777 |
|