diff --git a/src/renderer.js b/src/renderer.js
index 289e7b9..2fd6a91 100644
--- a/src/renderer.js
+++ b/src/renderer.js
@@ -5,6 +5,55 @@ const showdown = require('showdown');
module.exports = (config) => {
const converter = new showdown.Converter(config['showdown']);
+ /**
+ * get parts outside of codes/scripts
+ * @param {string} data
+ * @returns {{index:number, end:number, text:string}[]} parts
+ */
+ const getParts = (data) => {
+ let parts = [];
+ let match;
+ let i = 0;
+ while ((match = /```/m.exec(data.slice(i)))) {
+ parts.push({
+ index: i,
+ end: i + match.index,
+ text: data.slice(i, i + match.index),
+ });
+ i += match.index + match[0].length;
+ }
+ if (i < data.length)
+ parts.push({
+ index: i,
+ end: data.length,
+ text: data.slice(i, data.length),
+ });
+
+ parts = parts.filter((p, i) => i % 2 === 0); //filter out code parts
+
+ // detect scripts outside of code
+ parts.forEach((p, pi) => {
+ let i = 0;
+ const subParts = [];
+ while ((match = /(\n\n``````kenobi';
+ const parts = renderer.getParts(data);
+ expect(parts.map(p => p.text)).toEqual([
+ 'Hello\nthere\n', '\ngeneral', '\n', '\n', 'kenobi'
+ ]);
+ });
+});
+
describe('Test Showdown', () => {
test('normal', (done) => {
renderer.renderShowDown('# Hello', (html) => {
@@ -112,6 +129,13 @@ describe('Test PlantUML', () => {
});
});
+ test('plantuml ignored in code', (done) => {
+ renderer.renderPlantUML('code:\n```@startuml\nBob -> Alice : hello\n@enduml```', (data) => {
+ expect(data).toBe('code:\n```@startuml\nBob -> Alice : hello\n@enduml```');
+ done();
+ });
+ });
+
test('plantuml multiple uml', (done) => {
renderer.renderPlantUML('@startuml\nBob -> Alice : hello\n@enduml\n@startuml\nBob -> Alice : hello\n@enduml', (data) => {
expect(data).toBe('
\n
');