This is an automated email from the ASF dual-hosted git repository.

shenyi pushed a commit to branch live-example
in repository https://gitbox.apache.org/repos/asf/incubator-echarts-doc.git


The following commit(s) were added to refs/heads/live-example by this push:
     new 9835d71  example: fix code may be breaked by the marked parser
9835d71 is described below

commit 9835d71b2506b5c631068dbe4c0be938a93bc2ae
Author: pissang <bm2736...@gmail.com>
AuthorDate: Thu Jun 18 11:06:35 2020 +0800

    example: fix code may be breaked by the marked parser
---
 package-lock.json                  |  3 +-
 package.json                       |  1 -
 tool/md2json.js                    | 33 +++++++++++++++----
 zh/option/component/axis-common.md |  2 ++
 zh/option/component/radius-axis.md | 67 ++++++++++++++++++++++++++++++++++++++
 5 files changed, 97 insertions(+), 9 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 18e0a81..b93edf2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4431,7 +4431,8 @@
     "html-entities": {
       "version": "1.3.1",
       "resolved": 
"https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz";,
-      "integrity": 
"sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA=="
+      "integrity": 
"sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==",
+      "dev": true
     },
     "htmlparser2": {
       "version": "4.1.0",
diff --git a/package.json b/package.json
index d81a152..8e579ed 100644
--- a/package.json
+++ b/package.json
@@ -53,7 +53,6 @@
     "codemirror": "^5.54.0",
     "element-ui": "^2.13.2",
     "highlight.js": "^9.18.1",
-    "html-entities": "^1.3.1",
     "js-beautify": "^1.11.0",
     "jsonpack": "^1.1.5",
     "lodash.debounce": "^4.0.8",
diff --git a/tool/md2json.js b/tool/md2json.js
index bcc0052..34f508b 100644
--- a/tool/md2json.js
+++ b/tool/md2json.js
@@ -3,8 +3,6 @@ const marked = require('marked');
 const etpl = require('etpl');
 const glob = require('glob');
 const htmlparser2 = require('htmlparser2');
-const Entities = require('html-entities').AllHtmlEntities;
-const entities = new Entities();
 
 function convert(opts, cb) {
     const mdPath = opts.path;
@@ -214,17 +212,20 @@ function mdToJsonSchema(mdStr, maxDepth, imagePath) {
         properties[name] = property;
     }
 
-    function parseUIControl(html, property) {
+    function parseUIControl(html, property, codeMap) {
         let currentExampleCode;
         let out = '';
         const parser = new htmlparser2.Parser({
             onopentag(tagName, attrib) {
                 if (tagName === 'examplebaseoption') {
-                    currentExampleCode = attrib;
+                    currentExampleCode = Object.assign({
+                        code: ''
+                    }, attrib);
                 }
                 else if (tagName.startsWith('exampleuicontrol')) {
                     const type = tagName.replace('exampleuicontrol', 
'').toLowerCase();
-                    if (['boolean', 'color', 'number', 'vector', 'enum', 
'angle', 'percent', 'percentvector'].indexOf(type) < 0) {
+                    if (['boolean', 'color', 'number', 'vector', 'enum', 
'angle', 'percent', 'percentvector', 'text']
+                        .indexOf(type) < 0) {
                         console.error(`Unkown ExampleUIControl Type ${type}`);
                     }
                     property.uiControl = {
@@ -243,7 +244,11 @@ function mdToJsonSchema(mdStr, maxDepth, imagePath) {
             },
             ontext(data) {
                 if (currentExampleCode) {
-                    currentExampleCode.code += entities.decode(data);
+                    // Get code from map;
+                    if (!codeMap[data]) {
+                        throw new Error('Can\'t find code.', codeMap, data);
+                    }
+                    currentExampleCode.code = codeMap[data];
                 }
                 else {
                     out += data;
@@ -261,6 +266,7 @@ function mdToJsonSchema(mdStr, maxDepth, imagePath) {
                 }
             }
         });
+
         parser.write(html);
         parser.end();
 
@@ -334,8 +340,21 @@ function mdToJsonSchema(mdStr, maxDepth, imagePath) {
             return iframe.join('');
         });
 
+        const codeMap = {};
+        const codeKeyPrefx = 'example_base_option_code_';
+        let codeIndex=  0;
+        // Convert the code the a simple key.
+        // Avoid marked converting the markers in the code unexpectly.
+        // Like convert * to em.
+        // Also no need to decode entity
+        section = 
section.replace(/(<\s*ExampleBaseOption[^>]*>)([\s\S]*?)(<\s*\/ExampleBaseOption\s*>)/g,
 function (text, openTag, code, closeTag) {
+            const codeKey = codeKeyPrefx + (codeIndex++);
+            codeMap[codeKey] = code;
+            return openTag + codeKey + closeTag
+        });
+
         renderer.html = function (html) {
-            return parseUIControl(html, property);
+            return parseUIControl(html, property, codeMap);
         };
 
         property.description = marked(section, {
diff --git a/zh/option/component/axis-common.md 
b/zh/option/component/axis-common.md
index 7b675cd..87ad2e4 100644
--- a/zh/option/component/axis-common.md
+++ b/zh/option/component/axis-common.md
@@ -418,6 +418,8 @@ splitLine: {
 <!-- Overwrite color -->
 ##${prefix} color(Color)
 
+<ExampleUIControlColor />
+
 坐标轴名称的颜色,默认取 
[axisLine.lineStyle.color](~${componentType}.axisLine.lineStyle.color)。
 
 
diff --git a/zh/option/component/radius-axis.md 
b/zh/option/component/radius-axis.md
index 841356e..ea9e466 100644
--- a/zh/option/component/radius-axis.md
+++ b/zh/option/component/radius-axis.md
@@ -5,6 +5,73 @@
 
 极坐标系的径向轴。
 
+<ExampleBaseOption name="two-number-axis" title="双数值轴">
+const data = [];
+
+for (let i = 0; i <= 360; i++) {
+    const t = i / 180 * Math.PI;
+    const r = Math.sin(2 * t) * Math.cos(2 * t);
+    data.push([r, i]);
+}
+
+const option = {
+    polar: {
+        center: ['50%', '54%']
+    },
+    tooltip: {
+        trigger: 'axis',
+        axisPointer: {
+            type: 'cross'
+        }
+    },
+    angleAxis: {
+        type: 'value',
+        startAngle: 0,
+    },
+    radiusAxis: {
+        min: 0
+    },
+    series: [{
+        coordinateSystem: 'polar',
+        name: 'line',
+        type: 'line',
+        showSymbol: false,
+        data: data
+    }],
+    animationDuration: 2000
+};
+</ExampleBaseOption>
+
+<ExampleBaseOption name="two-category-axis" title="双类目轴">
+
+const hours = ['12a', '1a', '2a', '3a', '4a', '5a', '6a',
+        '7a', '8a', '9a','10a','11a',
+        '12p', '1p', '2p', '3p', '4p', '5p',
+        '6p', '7p', '8p', '9p', '10p', '11p'];
+const days = ['Saturday', 'Friday', 'Thursday',
+        'Wednesday', 'Tuesday', 'Monday', 'Sunday'];
+
+const option = {
+    title: {
+        text: 'Punch Card of Github'
+    },
+    legend: {
+        data: ['Punch Card'],
+        left: 'right'
+    },
+    polar: {},
+    angleAxis: {
+        type: 'category',
+        data: hours,
+        boundaryGap: false
+    },
+    radiusAxis: {
+        type: 'category',
+        data: days
+    }
+};
+</ExampleBaseOption>
+
 {{use: partial-component-id(prefix="#")}}
 
 ## polarIndex(number) = 0


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@echarts.apache.org
For additional commands, e-mail: commits-h...@echarts.apache.org

Reply via email to