CVS update: /cowiki/includes/cowiki/class/render/, /cowiki/includes/cowiki/class/parse/
[email protected] 15 Mar 2005 17:16:27 -0000
| Newsgroups | gmane.comp.php.cowiki.cvs |
|---|---|
| Message-ID | <[email protected]> |
User: cmarble Date: 05/03/15 09:16:27 Modified: /cowiki/includes/cowiki/class/render/ class.FrontHtmlTransformer.php /cowiki/includes/cowiki/class/parse/ class.WikiParser.php, class.WikiReverseParser.php Log: Issue number: 152, 174, 195, 196, 208 Obtained from: Submitted by: cmarble Reviewed by: This test file, below... *Emphasis* /Italics/ _Underlined_ --Struckout-- */EmIt/* /*ItEm*/ *_EmUn_* _*UnEm*_ <right>/_ItUn_/ _/UnIt/_/*_ItEmUn_*/ /_*ItUnEm*_/</right> *--_EmUnSt_--* --/_ItUn_/-- --/*StItEm*/-- --*/StEmIt/*-- blah blah blah set-piece blah blah malt-whiskey blah blah --struck out doesn't show *bold* here-- * <b>H</b>yper<i>T</i>ext <u>T</u>ransfer *P*rotocol * List * Sub-item * ... # numbered list # sub-item # ... # ... * ... * Text on one line<br>text on another line ...is what I'm using to check my progress. The WikiParser rejects brokenly balanced emphasis. Strikethrough is now --struckthrough-- rather than a single hyphen, so that set-pieces of malt-whiskey aren't even looked into. The line Hyper Text Transfer etc doesn't work and that's where I'm working at present. If all goes to plan, I may even be able to squeeze nested performance out of the emphasis code. i.e. --struck through *bold* would still-- appear bold It doesn't at present, just the striking shows up. Work in progress... File Changes: Directory: /cowiki/includes/cowiki/class/render/ ================================================ File [changed]: class.FrontHtmlTransformer.php Url: http://cowiki.tigris.org/source/browse/cowiki/includes/cowiki/class/render/class.FrontHtmlTransformer.php?r1=1.40&r2=1.41 Delta lines: +8 -3 ------------------- --- class.FrontHtmlTransformer.php 14 Mar 2005 17:14:59 -0000 1.40 +++ class.FrontHtmlTransformer.php 15 Mar 2005 17:16:27 -0000 1.41 @@ -2,7 +2,7 @@ /** * - * $Id: class.FrontHtmlTransformer.php,v 1.40 2005/03/14 17:14:59 cmarble Exp $ + * $Id: class.FrontHtmlTransformer.php,v 1.41 2005/03/15 17:16:27 cmarble Exp $ * * This file is part of coWiki. coWiki is free software under the terms of * the GNU General Public License (GPL). Read the LICENSE file. If you did @@ -17,7 +17,7 @@ * @author Daniel T. Gorski, <[email protected]> * @copyright (C) Daniel T. Gorski, {@link http://www.develnet.org} * @license http://www.gnu.org/licenses/gpl.html - * @version $Revision: 1.40 $ + * @version $Revision: 1.41 $ * */ @@ -732,9 +732,14 @@ // -------------------------------------------------------------------- protected function &_transformJustification(&$aMatches) { + /* $sStr = '<div width="100%" style="text-align:'.$aMatches[1].'">'; $sStr .= $aMatches[2]; - $sStr .= '</div>'; + $sStr .= '</p>'; + */ + $sStr = '<p width="100%" style="text-align:'.$aMatches[1].'">'; + $sStr .= $aMatches[2]; + $sStr .= '</p>'; return $sStr; } Directory: /cowiki/includes/cowiki/class/parse/ =============================================== File [changed]: class.WikiParser.php Url: http://cowiki.tigris.org/source/browse/cowiki/includes/cowiki/class/parse/class.WikiParser.php?r1=1.39&r2=1.40 Delta lines: +74 -65 --------------------- --- class.WikiParser.php 14 Mar 2005 17:14:59 -0000 1.39 +++ class.WikiParser.php 15 Mar 2005 17:16:27 -0000 1.40 @@ -2,7 +2,7 @@ /** * - * $Id: class.WikiParser.php,v 1.39 2005/03/14 17:14:59 cmarble Exp $ + * $Id: class.WikiParser.php,v 1.40 2005/03/15 17:16:27 cmarble Exp $ * * This file is part of coWiki. coWiki is free software under the terms of * the GNU General Public License (GPL). Read the LICENSE file. If you did @@ -21,7 +21,7 @@ * @author Daniel T. Gorski, <[email protected]> * @copyright (C) Daniel T. Gorski, {@link http://www.develnet.org} * @license http://www.gnu.org/licenses/gpl.html - * @version $Revision: 1.39 $ + * @version $Revision: 1.40 $ * */ @@ -53,6 +53,7 @@ define('WIKI_TOKEN_SUB', 19); define('WIKI_TOKEN_SUP', 20); define('WIKI_TOKEN_JUSTIFICATION', 21); + define('WIKI_TOKEN_EMPHASIS', 22); /** * coWiki - Wiki parser class * @@ -359,6 +360,10 @@ case WIKI_TOKEN_JUSTIFICATION: $sStr = $this->createJustificationElement($sStr, $mMeta); break; + + case WIKI_TOKEN_EMPHASIS: + $sStr = $this->createEmphasisElement($sStr, $mMeta); + break; } return $sStr; @@ -670,6 +675,39 @@ return '<'.$mMeta.'>'.$sStr.'</'.$mMeta.'>'; } + protected function createEmphasisElement(&$sStr, &$mMeta) { + + $sOpen = $sClose = ''; + for ($i=0 ; $i < strlen($mMeta) ; $i++ ){ + switch(substr($mMeta,$i,1)){ + case '_': + $sOpen .= "<u>"; + $sClose = "</u>".$sClose; + break; + case '-': + if(!strcmp(substr($mMeta,$i+1,1),'-')){ + $sOpen .= "<strike>"; + $sClose = "</strike>".$sClose; + $i++; + } + break; + case '=': + $sOpen .= "<tt>"; + $sClose = "</tt>".$sClose; + break; + case '*': + $sOpen .= "<b>"; + $sClose = "</b>".$sClose; + break; + case '/': + $sOpen .= "<i>"; + $sClose = "</i>".$sClose; + break; + } + } + return $sOpen . $sStr . $sClose; + } + // --- Element creator helpers ---------------------------------------- /** @@ -861,10 +899,6 @@ // processing. $sStr = $this->processToc($sStr); - // After this step all emphasis markups (bold, italic, ...) are - // converted. These markups are not tokenized. - $sStr = $this->processEmphasis($sStr); - // After this step all headings (+, ++, +++ -> H1, H2, H3 etc.) are // tokenized for further processing. $sStr = $this->processHeading($sStr); @@ -877,6 +911,13 @@ // processing. $sStr = $this->processBreak($sStr); + // After this step lists are tokenized for further processing. + $sStr = $this->processList($sStr); + + // After this step all emphasis markups (bold, italic, ...) are + // tokenized for further processing. + $sStr = $this->processEmphasis($sStr); + // After this step all subs (<sub>) are tokenized for further // processing. $sStr = $this->processSub($sStr); @@ -889,9 +930,6 @@ // for further processing. $sStr = $this->processJustification($sStr); - // After this step lists are tokenized for further processing. - $sStr = $this->processList($sStr); - // After this step all parameterized <table></table> are tokenized // for further processing. $sStr = $this->processParamTable($sStr); @@ -1362,72 +1400,43 @@ protected function processEmphasis(&$sStr) { /* - // These are the possible start delimiters for bold, italic - // and monospace emphasis markups - $sStart = '(\[\''; - - // These are the possible end delimiters for bold, italic - // and monospace emphasis markups - $sEnd = '\s,.;:!?()\[\]_-'; - */ + emphasis markup may be as widely spaced as an entire paragraph + /x/ - italics + *x* - bold + --x-- - strikethrough + _x_ - underlined + =x= - monospaced + */ - $sEmph= '([_-=\*]*)'; - - // Italic first, because we do not want to match "</foo>/bar" - $sStr = preg_replace( - '~ ([^<])? - (/|<(i|em)>) - ([^ \n/](\S?|.*(\S|\t))) - (/|</\3>) - ~Umix', - '\1<em>\4</em>', - $sStr - ); - // Bold - $sStr = preg_replace( - '~ (\*|<(b|strong)>) - ([^ \n\*](\S?|.*(\S|\t))) - (\*|</\2>) - ~Umix', - '<strong>\3</strong>', - $sStr - ); + $sEmph= '(-{2}|[_=\*/]+)'; + $sCont= '([^\n_=*/]*)'; + $sWord= '([^ \n/](\S?|.*(\S|\t)))'; - // Mono - $sStr = preg_replace( - '~ (=|<(tt)>) - ([^ \n=](\S?|.*(\S|\t))) - (=|</\2>) - ~Umix', - '<tt>\3</tt>', - $sStr - ); - - // Strikethrough - $sStr = preg_replace( - '~ (-|<(strike)>) - ([^ \n=](\S?|.*(\S|\t))) - (-|</\2>) - ~Umix', - '<strike>\3</strike>', + $sStr = preg_replace_callback( + '~ ((-{2}|[_=*/])+) + ([^\n_=*/]+) + ((-{2}|[_=*/])+) + ~mix', + array(&$this,'tokenizeEmphasis'), $sStr ); - - // Underlined - $sStr = preg_replace( - '~ (_|<(u)>) - ([^ \n=](\S?|.*(\S|\t))) - (_|</\2>) - ~Umix', - '<u>\3</u>', - $sStr - ); return $sStr; } + protected function tokenizeEmphasis(&$aMatches) { + //proper emphatic nesting + //echo implode('#',$aMatches); + //exit; + if ($aMatches[1]==strrev($aMatches[4])) { + return $this->tokenize($aMatches[3],WIKI_TOKEN_EMPHASIS, $aMatches[1]); + } else { + return $aMatches[0]; + } + } + // -------------------------------------------------------------------- /** @@ -1655,7 +1664,7 @@ protected function processJustification(&$sStr) { $sStr = preg_replace_callback( - '=<(left|center|right)>(.*)</\1>=Ui', + '=<(left|center|right)>(.*)</\1>=Usi', array(&$this, 'tokenizeJustification'), $sStr ); @@ -1682,7 +1691,7 @@ // Treat lists $sStr = preg_replace_callback( - '=\n((\*|#) .*\n)(?! {0,}(\*|#))=Us', + '=\n((\*|#) (.*)\n)(?! {0,}(\*|#))=Us', array(&$this, 'tokenizeList'), $sStr ); File [changed]: class.WikiReverseParser.php Url: http://cowiki.tigris.org/source/browse/cowiki/includes/cowiki/class/parse/class.WikiReverseParser.php?r1=1.14&r2=1.15 Delta lines: +7 -17 -------------------- --- class.WikiReverseParser.php 14 Mar 2005 17:14:59 -0000 1.14 +++ class.WikiReverseParser.php 15 Mar 2005 17:16:27 -0000 1.15 @@ -2,7 +2,7 @@ /** * - * $Id: class.WikiReverseParser.php,v 1.14 2005/03/14 17:14:59 cmarble Exp $ + * $Id: class.WikiReverseParser.php,v 1.15 2005/03/15 17:16:27 cmarble Exp $ * * This file is part of coWiki. coWiki is free software under the terms of * the GNU General Public License (GPL). Read the LICENSE file. If you did @@ -17,7 +17,7 @@ * @author Daniel T. Gorski, <[email protected]> * @copyright (C) Daniel T. Gorski, {@link http://www.develnet.org} * @license http://www.gnu.org/licenses/gpl.html - * @version $Revision: 1.14 $ + * @version $Revision: 1.15 $ * */ @@ -135,7 +135,6 @@ $sStr = $this->processPosting($sStr); $sStr = $this->processParagraph($sStr); $sStr = $this->processHeading($sStr); - $sStr = $this->processEmphasis($sStr); $sStr = $this->processHorizontalRule($sStr); $sStr = $this->processVariable($sStr); $sStr = $this->processPlugin($sStr); @@ -145,6 +144,7 @@ $sStr = $this->processSup($sStr); $sStr = $this->processSub($sStr); $sStr = $this->processJustification($sStr); + $sStr = $this->processEmphasis($sStr); $sStr = $this->processList($sStr); $sStr = $this->processTable($sStr); $sStr = $this->processQuote($sStr); // last one! @@ -437,24 +437,14 @@ //italic $sStr = preg_replace( - '=<em>(.*)</em>=Ums', - '/\1/', - $sStr - ); - $sStr = preg_replace( - '=<i>(.*)</i>=Ums', - '/\1/', + '=<(em|i)>(.*)</\1>=Ums', + '/\2/', $sStr ); //bold $sStr = preg_replace( - '=<strong>(.*)</strong>=Ums', - '*\1*', - $sStr - ); - $sStr = preg_replace( - '=<b>(.*)</b>=Ums', - '*\1*', + '=<(strong|b)>(.*)</\1>=Ums', + '*\2*', $sStr ); //monospaced @@ -466,7 +456,7 @@ //strikethrough $sStr = preg_replace( '=<strike>(.*)</strike>=Ums', - '-\1-', + '--\1--', $sStr ); //underlined @@ -883,7 +873,7 @@ protected function processJustification(&$sStr) { $sStr = preg_replace( - '=<(left|center|right)>(.*)</\\1>=Ums', + '=<(left|center|right)>(.*)</\\1>=Usi', "<\\1>\\2</\\1>", $sStr );