了解到Parsedown这款解析器是在HyperDown作者的git里,作者罗列了几个知名的解析器,也陈述了自己造轮子的(HyperDown)的原因。HyperDown是Typecho的默认解析器,说真的,从wordpress转用typecho,一方便是觉得typecho响应更快,另一方面,是markdown的书写方式。
但HyperDown默认解析的html标签有限,或者得去改动HyperDown的文件以扩展功能,或者考虑利用插件的方式来替换掉该文件实现的功能。无论采用哪种方式,都牺牲了一定的兼容性,假如后续需要修改回原有的解析器时(比如升级版本后被转为默认解析,或更换主题后新的主题使用了默认解析器),本来展示的好好的页面,就可能会出现一些不该出现的html标签字样的内容。
扯远了,虽然暂时不准备替换,单还是想了解一下方法,百度搜索到MoeShin的一篇文章《Typecho主题通过插件接口更换markdown解析》,解决了自己的困惑,摘录其代码如下:
首先在主题function.php文件下添加:
/**
* 主题插件
*
* @package theme_plugin
*/
class theme_plugin{
public static function markdown($text){
require_once 'Parsedown.php'; //Parsedown.php文件路径
return Parsedown::instance()->setBreaksEnabled(true)->text($text);
}
}
在themeInit函数下添加:
Typecho_Plugin::factory('Widget_Abstract_Contents')->markdown = ['theme_plugin', 'markdown'];
Typecho_Plugin::factory('Widget_Abstract_Comments')->markdown = ['theme_plugin', 'markdown'];
插件版本的完整代码:
<?php
/**
* Parsedown
*
* @package Parsedown Plugin
* @version 1.0
*/
class Parsedown_Plugin implements Typecho_Plugin_Interface
{
/**
* 激活插件
*/
public static function activate()
{
Typecho_Plugin::factory('Widget_Abstract_Contents')->markdown = array('Parsedown_Plugin', 'markdown');
Typecho_Plugin::factory('Widget_Abstract_Comments')->markdown = array('Parsedown_Plugin', 'markdown');
}
/**
* 禁用插件
*/
public static function deactivate()
{}
/**
* 插件设置
*/
public static function config(Typecho_Widget_Helper_Form $form)
{}
public static function personalConfig(Typecho_Widget_Helper_Form $form)
{}
public static function markdown($text)
{
require_once dirname(__FILE__) . '/Parsedown.php';
return Parsedown::instance()
->setBreaksEnabled(true)
->text($text);
}
}