From 59c8cab6a8cc9258a0f6442299ea6368ce11b306 Mon Sep 17 00:00:00 2001 From: ache Date: Sun, 29 Apr 2018 10:13:51 +0200 Subject: Fix the old bug with raw interpretation --- app.js | 215 ++++++----------------------------------------------------------- 1 file changed, 17 insertions(+), 198 deletions(-) (limited to 'app.js') diff --git a/app.js b/app.js index a904757..a37436e 100644 --- a/app.js +++ b/app.js @@ -3,150 +3,12 @@ const START = /^(\[_+)\n/g; const END = /\n(_+])/g; +const parseAttr = require('md-attr-parser'); + function locator(value, fromIndex) { const index = value.indexOf(START, fromIndex); return index; } -function prop2HTML(prop) { - let html = ''; - - if ('id' in prop && prop.id) { - html += ` id=${prop.id}`; - } - if ('class' in prop && prop.class) { - html += ` class="${prop.class.join(' ')}"`; - } - if ('key' in prop && prop.key) { - Object.entries(prop.key).forEach( - ([key, - value, - ]) => { - html += ' '; - if (value) { - html += `${key}="${value}"`; - } else { - html += key; - } - } - ); - } - - return html; -} - -function parseHTMLparam(value, indexNext) { - let letsEat = '{'; - indexNext++; - - const eat = chars => { - let eaten = ''; - while (chars.indexOf(value.charAt(indexNext)) >= 0) { - letsEat += value.charAt(indexNext); - eaten += value.charAt(indexNext); - indexNext++; - } - return eaten; - }; - const eatUntil = chars => { - let eaten = ''; - while (chars.indexOf(value.charAt(indexNext)) < 0) { - letsEat += value.charAt(indexNext); - eaten += value.charAt(indexNext); - indexNext++; - } - return eaten; - }; - - const prop = - {key: undefined /* {} */, - class: undefined /* [] */, - id: undefined, - }; - let type; - - while (value.charAt(indexNext) !== '}') { - let labelFirst = ''; - let labelSecond; - - eat(' \t\n\r\v'); - - if (value.charAt(indexNext) === '}') { // Fin l'accolade - continue; - } else if (value.charAt(indexNext) === '.') { // Classes - type = 'class'; - indexNext++; - letsEat += '.'; - } else if (value.charAt(indexNext) === '#') { // ID - type = 'id'; - indexNext++; - letsEat += '#'; - } else { // Key - type = 'key'; - } - - // Extract name - labelFirst = eatUntil('=\t\b\r\v  }'); - - if (value.charAt(indexNext) === '=') { // Set labelSecond - indexNext++; - letsEat += '='; - - if (value.charAt(indexNext) === '"') { - indexNext++; - letsEat += '"'; - labelSecond = eatUntil('"}\n'); - - if (value.charAt(indexNext) === '"') { - indexNext++; - letsEat += '"'; - } else { - // Erreur - } - } else if (value.charAt(indexNext) === '\'') { - indexNext++; - letsEat += '\''; - labelSecond = eatUntil('\'}\n'); - - if (value.charAt(indexNext) === '\'') { - indexNext++; - letsEat += '\''; - } else { - // Erreur - } - } else { - labelSecond = eatUntil(' \t\n\r\v=}'); - } - } - switch (type) { - case 'id': // ID - prop.id = labelFirst; - break; - case 'class': - if (!prop.class) { - prop.class = []; - } - prop.class.push(labelFirst); - break; - case 'key': - if (!prop.key) { - prop.key = {}; - } - if (labelFirst !== 'id' && labelFirst !== 'class') { - prop.key[labelFirst] = labelSecond || ''; - } - break; - default: - // Default - } - } - letsEat += '}'; - - return { - type, - prop, - eaten: letsEat, - }; -} function plugin() { function blockTokenizer(eat, value) { @@ -155,72 +17,30 @@ function plugin() { } let prop = { - key: undefined /* {} */, class: undefined /* [] */, id: undefined, }; let eaten = ''; - if (value.charAt(value.search(END) + value.match(END)[0].length) === '{') { - const res = parseHTMLparam(value, value.search(END) + value.match(END)[0].length); - eaten = res.eaten; - prop = res.prop; - } - if (value.search(END) > 0) { - return eat(value.slice(0, value.search(END)) + value.match(END)[0] + eaten)({ - type: 'html', - value: `` + - `${value.slice(value.match(START)[0].length, value.search(END))}` - '', - /* - - Type: 'form', - data: { - hName:'form', - hChildren : [ { - type: 'element', - tagName:'div', - properties: {}, - children: [ { - type:'element', - tagName: 'textarea', - properties: prop, - children: [ { type: 'text', - value: value.slice(value.match(START)[0].length+1, value.search(END)-1 ) - } ] - }] - }, { type:'element', tagName:'div', properties:{} } ] - } - - type: 'form', - children: [ { - type: 'texterea', - children: [ { type: 'text', - value: value.slice(value.match(START)[0].length+1, value.search(END)-1 ) - } ], - data: { - hName: 'textarea' - } - }], - */ - /* + if ((value.search(END) + value.match(END)[0].length) < value.length && + value.charAt(value.search(END) + value.match(END)[0].length) === '{') { + const res = parseAttr(value, value.search(END) + value.match(END)[0].length); + eaten = res.eaten; + prop = res.prop; + } + const t = eat(value.slice(0, value.match(END)[0].lenght) + eaten)({ + type: 'textarea', data: { - hName: 'form', - hChildren : [ { - type: 'texterea', - data: { - hName: 'textarea', - hChildren : [ { type: 'text', - value: value.slice(value.match(START)[0].length+1, value.search(END)-1 ) - } ] - } - }] - } - hName: 'form' - } */ + hName: 'TEXTAREA', + hProperties: prop, + hChildren: [{type: 'text', + value: value.slice(value.match(START)[0].length, value.search(END)), + }], + }, }); + return t; } return true; } @@ -229,7 +49,6 @@ function plugin() { const Parser = this.Parser; - // Inject blockTokenizer const blockTokenizers = Parser.prototype.blockTokenizers; const blockMethods = Parser.prototype.blockMethods; blockTokenizers.textinput = blockTokenizer; -- cgit v1.2.3