';
$html = preg_replace($pattern,$replacement,$html);
$html = str_replace("}}","",$html);
$html = str_replace("|","",$html);
/**
* 替换变量名
*/
$pattern = "/([a-z]+?)=/";
$replacement = '';
$html = preg_replace($pattern,$replacement,$html);
$html = str_replace("","
",$html);
$html = str_replace("","
",$html);
$html = "".$html."";
return $html;
}
public static function xmlQueryId(string $xml, string $id):string{
$dom = simplexml_load_string($xml);
$tpl_list = $dom->xpath('//MdTpl');
foreach ($tpl_list as $key => $tpl) {
foreach ($tpl->children() as $param) {
# 处理每个参数
if($param->getName() === "param"){
foreach($param->attributes() as $pa => $pa_value){
$pValue = $pa_value->__toString();
if($pa === "name" && $pValue === "id"){
if($param->__toString() === $id){
return $tpl->asXML();
}
}
}
}
}
}
return "";
}
public static function take_sentence(string $xml):array{
$output = [];
$dom = simplexml_load_string($xml);
$tpl_list = $dom->xpath('//MdTpl');
foreach ($tpl_list as $key => $tpl) {
foreach($tpl->attributes() as $a => $a_value){
if($a==="name"){
if($a_value->__toString() ==="sent"){
foreach ($tpl->children() as $param) {
# 处理每个参数
if($param->getName() === "param"){
$sent = $param->__toString();
if(!empty($sent)){
$output[] = $sent;
break;
}
}
}
}
}
}
}
return $output;
}
public static function xml2tpl(string $xml, $channelId="",$mode='read'):string{
/**
* 解析xml
* 获取模版参数
* 生成react 组件参数
*/
//$xml = str_replace(['',''],['',''],$xml);
$dom = simplexml_load_string($xml);
$tpl_list = $dom->xpath('//MdTpl');
foreach ($tpl_list as $key => $tpl) {
/**
* 遍历 MdTpl 处理参数
*/
$props = [];
$tpl_name = '';
foreach($tpl->attributes() as $a => $a_value){
if($a==="name"){
$tpl_name = $a_value;
}
}
$param_id = 0;
foreach ($tpl->children() as $param) {
# 处理每个参数
if($param->getName() === "param"){
$param_id++;
$props["{$param_id}"] = $param->__toString();
foreach($param->attributes() as $pa => $pa_value){
if($pa === "name"){
$props["{$pa_value}"] = $param->__toString();
}
}
}
}
/**
* 生成模版参数
*/
$tplRender = new TemplateRender($props,$channelId,$mode);
$tplProps = $tplRender->render($tpl_name);
if($tplProps){
$tpl->addAttribute("props",$tplProps['props']);
$tpl->addAttribute("tpl",$tplProps['tpl']);
$tpl->addChild($tplProps['tag'],$tplProps['html']);
}
}
$html = str_replace('','',$dom->asXML()) ;
$html = str_replace(['',''],['',''],$html);
return $html;
}
public static function render2($markdown,$channelId='',$queryId=null,$mode='read',$channelType){
$wiki = MdRender::markdown2wiki($markdown,$channelType);
$html = MdRender::wiki2xml($wiki);
if(!is_null($queryId)){
$html = MdRender::xmlQueryId($html, $queryId);
}
$tpl = MdRender::xml2tpl($html,$channelId,$mode);
return $tpl;
}
public static function markdown2wiki(string $markdown,$channelType): string{
/**
* nissaya
* aaa=bbb\n
* {{nissaya|aaa|bbb}}
*/
if($channelType==='nissaya'){
$pattern = '/(.+?)=(.+?)\n/';
$replacement = '{{nissaya|$1|$2}}';
$markdown = preg_replace($pattern,$replacement,$markdown);
$pattern = '/(.+?)=(.?)\n/';
$replacement = '{{nissaya|$1|$2}}';
$markdown = preg_replace($pattern,$replacement,$markdown);
$pattern = '/(.?)=(.+?)\n/';
$replacement = '{{nissaya|$1|$2}}';
$markdown = preg_replace($pattern,$replacement,$markdown);
}
/**
* 替换换行符
* react 无法处理
替换为代替换行符作用
*/
$markdown = str_replace('
','',$markdown);
/**
* markdown -> html
*/
$html = Str::markdown($markdown);
#替换术语
$pattern = "/\[\[(.+?)\]\]/";
$replacement = '{{term|$1}}';
$html = preg_replace($pattern,$replacement,$html);
#替换句子模版
$pattern = "/\{\{([0-9].+?)\}\}/";
$replacement = '{{sent|$1}}';
$html = preg_replace($pattern,$replacement,$html);
#替换注释
#bla
#{{note|bla}}
$pattern = '/(.+?)<\/code>/';
$replacement = '{{note|$1}}';
$html = preg_replace($pattern,$replacement,$html);
return $html;
}
/**
*
*/
public static function render($markdown,$channelId,$queryId=null,$mode='read',$channelType='translation'){
return MdRender::render2($markdown,$channelId,$queryId,$mode,$channelType);
}
}