Răsfoiți Sursa

支持mermaid

visuddhinanda 2 ani în urmă
părinte
comite
1bb1b33b92
2 a modificat fișierele cu 49 adăugiri și 12 ștergeri
  1. 34 12
      app/Http/Api/MdRender.php
  2. 15 0
      app/Http/Api/TemplateRender.php

+ 34 - 12
app/Http/Api/MdRender.php

@@ -170,7 +170,6 @@ class MdRender{
          * 获取模版参数
          * 生成react 组件参数
          */
-        //Log::error($xml);
         try{
             $dom = simplexml_load_string($xml);
         }catch(\Exception $e){
@@ -179,6 +178,12 @@ class MdRender{
             return "<span>xml解析错误{$e}</span>";
         }
 
+        if(!$dom){
+            Log::error($e);
+            Log::error($xml);
+            return "<span>xml解析错误</span>";
+        }
+
         /*
         $doc = new \DOMDocument();
         $xml = str_replace('MdTpl','dfn',$xml);
@@ -280,17 +285,6 @@ class MdRender{
                 }
                 $markdown = implode('',$nissayaWord);
             }else if($contentType === "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);
-                $pattern = '/(.?)=(.+?)\n/';
-                $replacement = '{{nissaya|$1|$2}}';
-                $markdown = preg_replace($pattern,$replacement,$markdown);
-                */
                 $lines = explode("\n",$markdown);
                 $newLines = array();
                 foreach ($lines as  $line) {
@@ -308,6 +302,33 @@ class MdRender{
         }
         //$markdown = preg_replace("/\n\n/","<div></div>",$markdown);
 
+                /**
+         * 处理mermaid
+         */
+        if(strpos($markdown,"```mermaid") !== FALSE){
+            $lines = explode("\n",$markdown);
+            $newLines = array();
+            $mermaidBegin = false;
+            $mermaidString = array();
+            foreach ($lines as  $line) {
+                if($line === "```mermaid"){
+                    $mermaidBegin = true;
+                    $mermaidString = [];
+                    continue;
+                }
+                if($mermaidBegin){
+                    if($line === "```"){
+                        $newLines[] = "{{mermaid|".base64_encode(\json_encode($mermaidString))."}}";
+                        $mermaidBegin = false;
+                    }else{
+                        $mermaidString[] = $line;
+                    }
+                }else{
+                    $newLines[] = $line;
+                }
+            }
+            $markdown = implode("\n",$newLines);
+        }
 
         /**
          * 替换换行符
@@ -347,6 +368,7 @@ class MdRender{
         $replacement = '{{note|$1}}';
         $html = preg_replace($pattern,$replacement,$html);
 
+
         return $html;
     }
 

+ 15 - 0
app/Http/Api/TemplateRender.php

@@ -52,6 +52,9 @@ class TemplateRender{
             case 'nissaya':
                 $result = $this->render_nissaya();
                 break;
+            case 'mermaid':
+                $result = $this->render_mermaid();
+                break;
             default:
                 # code...
                 $result = [
@@ -274,6 +277,18 @@ class TemplateRender{
             ];
     }
 
+    private  function render_mermaid(){
+        $text = json_decode(base64_decode($this->get_param($this->param,"text",1)));
+
+        $props = ["text" => implode("\n",$text)];
+        return [
+            'props'=>base64_encode(\json_encode($props)),
+            'html'=>"mermaid",
+            'tag'=>'div',
+            'tpl'=>'mermaid',
+            ];
+    }
+
     private  function get_param(array $param,string $name,int $id,string $default=''){
         if(isset($param[$name])){
             return trim($param[$name]);