From c747273ddd0656b348598b64c78b72d2d4ca23d1 Mon Sep 17 00:00:00 2001 From: wei <> Date: Thu, 1 Jun 2006 11:30:16 +0000 Subject: adding TMarkdown for markdown syntax --- framework/Web/UI/WebControls/TMarkdown.php | 113 +++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 framework/Web/UI/WebControls/TMarkdown.php (limited to 'framework/Web/UI/WebControls') diff --git a/framework/Web/UI/WebControls/TMarkdown.php b/framework/Web/UI/WebControls/TMarkdown.php new file mode 100644 index 00000000..49660b4e --- /dev/null +++ b/framework/Web/UI/WebControls/TMarkdown.php @@ -0,0 +1,113 @@ + + * @link http://www.pradosoft.com/ + * @copyright Copyright © 2005 PradoSoft + * @license http://www.pradosoft.com/license/ + * @version $Revision: $ $Date: $ + * @package System.Web.UI.WebControls + */ + +/** + * TMarkdown class + * + * TMarkdown is a control that produces HTML from code with markdown syntax. + * + * Markdown is a text-to-HTML conversion tool for web writers. Markdown allows + * you to write using an easy-to-read, easy-to-write plain text format, then + * convert it to structurally valid XHTML (or HTML). + * Further documentation regarding Markdown can be found at + * http://daringfireball.net/projects/markdown/ + * + * To use TMarkdown, simply enclose the content to be rendered within + * the body of TMarkdown in a template. + * + * See http://www.pradosoft.com/demos/quickstart/?page=Markdown for + * details on the Markdown syntax usage. + * + * @author Wei Zhuo + * @version $Revision: $ $Date: $ + * @package System.Web.UI.WebControls + * @since 3.0 + */ +class TMarkdown extends TControl +{ + /** + * @var TTextHighlighter + */ + private $_highlighter; + + /** + * Renders body content. + * This method overrides parent implementation by removing + * malicious javascript code from the body content + * @param THtmlWriter writer + */ + public function render($writer) + { + $textWriter=new TTextWriter; + parent::render(new THtmlWriter($textWriter)); + $writer->write($this->renderMarkdown($textWriter->flush())); + } + + /** + * Use MarkdownParser to render the HTML content. + * @param string markdown content + * @return string HTML content + */ + protected function renderMarkdown($text) + { + $renderer = Prado::createComponent('System.3rdParty.Markdown.MarkdownParser'); + $result = $renderer->parse($text); + return preg_replace_callback( + '/
\[\s*(\w+)\s*\]\n+((.|\n)*?)\s*<\\/code><\\/pre>/im', 
+				array($this, 'highlightCode'), $result);
+	}
+
+	/**
+	 * @return TTextHighlighter source code highlighter
+	 */
+	public function getTextHighlighter()
+	{
+		if(is_null($this->_highlighter))
+			$this->_highlighter = new TTextHighlighter;
+		return $this->_highlighter;
+	}
+
+	
+	/**
+	 * Highlights source code using TTextHighlighter
+	 * @param array matches of code blocks
+	 * @return string highlighted code.
+	 */
+	protected function highlightCode($matches)
+	{
+		$text = new TTextWriter;
+		$writer = new THtmlWriter($text);
+		$hi = $this->getTextHighlighter();
+		if($hi->getControls()->getCount() > 0)
+			$hi->getControls()->removeAt(0);
+		$hi->addParsedObject(html_entity_decode($matches[2]));
+		$hi->setLanguage($matches[1]);
+		$hi->render($writer);
+		return $text->flush();
+	}
+
+	/**
+	 * Registers css style for the highlighted result.
+	 * This method overrides parent implementation.
+	 * @param THtmlWriter writer
+	 */
+	public function onPreRender($writer)
+	{
+		parent::onPreRender($writer);
+		$hi = $this->getTextHighlighter();
+		$this->getControls()->insertAt(0,$hi);
+		$hi->onPreRender($writer);
+		$this->getControls()->removeAt(0);
+	}
+}
+
+?>
\ No newline at end of file
-- 
cgit v1.2.3