Comparing version 0.2.8 to 0.2.9
102
cbml.js
@@ -10,4 +10,4 @@ (function (exportName) { | ||
* zswang (http://weibo.com/zswang) | ||
* @version 0.2.8 | ||
* @date 2016-06-28 | ||
* @version 0.2.9 | ||
* @date 2016-07-13 | ||
*/ | ||
@@ -99,2 +99,6 @@ /*<function name="decodeHTML">*/ | ||
var tokens = []; | ||
var S = { // 扫描的信息 | ||
text: code, | ||
pos: 0 // 扫描位置 | ||
}; | ||
function pushToken(type, pos, endpos, data) { | ||
@@ -124,6 +128,2 @@ if (endpos <= pos) { | ||
} | ||
var S = { // 扫描的信息 | ||
text: code, | ||
pos: 0 // 扫描位置 | ||
}; | ||
while (S.pos < S.text.length) { | ||
@@ -278,10 +278,12 @@ // find tagName // 「《!--jdists」--》 | ||
if (language === 'c') { // jsx | ||
var isJsx; | ||
var isJSX; | ||
/*jshint loopfunc: true */ | ||
Object.keys(attrs).some(function (key) { | ||
if (!attrStyles[key] && /^\s*\{/.test(attrs[key])) { | ||
isJsx = true; | ||
isJSX = true; | ||
return true; | ||
} | ||
}); | ||
if (isJsx) { | ||
/*jshint loopfunc: false */ | ||
if (isJSX) { | ||
match = S.text.substring(S.pos + offset).match(/^[^]*?>\*\//); | ||
@@ -344,2 +346,43 @@ if (match) { | ||
/** | ||
* 将没有闭合的左侧标签转换成文本节点,并合并相邻的文本节点 | ||
* | ||
* @param {string} code 当前代码 | ||
* @param {Object} parentNode 父节点 | ||
*/ | ||
function left2text(code, parentNode) { | ||
if (!parentNode || !parentNode.nodes) { | ||
return; | ||
} | ||
for (var i = parentNode.nodes.length - 1; i >= 0; i--) { | ||
var node = parentNode.nodes[i]; | ||
left2text(code, node); | ||
if (node.type === 'left') { | ||
node.type = 'text'; | ||
var firstChild = node.nodes[0]; | ||
if (firstChild) { | ||
var lastChild = node.nodes[node.nodes.length - 1]; | ||
node.endpos = firstChild.pos; | ||
node.value = code.slice(node.pos, node.endpos); | ||
var params = [i + 1, 0]; | ||
[].push.apply(params, node.nodes); | ||
[].splice.apply(parentNode.nodes, params); | ||
if (parentNode.type !== 'cbml') { | ||
parentNode.endpos = lastChild.endpos; | ||
parentNode.value = code.slice(parentNode.pos, parentNode.endpos); | ||
} | ||
} | ||
delete node.nodes; // 移除子节点 | ||
delete node.tag; | ||
delete node.attrs; | ||
delete node.language; | ||
} | ||
var nextNode = parentNode.nodes[i + 1]; | ||
if (nextNode && node.type === 'text' && nextNode.type === 'text') { // 合并文本 | ||
nextNode.pos = node.pos; | ||
nextNode.value = code.slice(nextNode.pos, nextNode.endpos); | ||
parentNode.nodes.splice(i, 1); | ||
} | ||
} | ||
} | ||
/** | ||
* CBML 解析 | ||
@@ -452,43 +495,2 @@ * | ||
exports.parse = parse; | ||
/** | ||
* 将没有闭合的左侧标签转换成文本节点,并合并相邻的文本节点 | ||
* | ||
* @param {string} code 当前代码 | ||
* @param {Object} parentNode 父节点 | ||
*/ | ||
function left2text(code, parentNode) { | ||
if (!parentNode || !parentNode.nodes) { | ||
return; | ||
} | ||
for (var i = parentNode.nodes.length - 1; i >= 0; i--) { | ||
var node = parentNode.nodes[i]; | ||
left2text(code, node); | ||
if (node.type === 'left') { | ||
node.type = 'text'; | ||
var firstChild = node.nodes[0]; | ||
if (firstChild) { | ||
var lastChild = node.nodes[node.nodes.length - 1]; | ||
node.endpos = firstChild.pos; | ||
node.value = code.slice(node.pos, node.endpos); | ||
var params = [i + 1, 0]; | ||
[].push.apply(params, node.nodes); | ||
[].splice.apply(parentNode.nodes, params); | ||
if (parentNode.type !== 'cbml') { | ||
parentNode.endpos = lastChild.endpos; | ||
parentNode.value = code.slice(parentNode.pos, parentNode.endpos); | ||
} | ||
} | ||
delete node.nodes; // 移除子节点 | ||
delete node.tag; | ||
delete node.attrs; | ||
delete node.language; | ||
} | ||
var nextNode = parentNode.nodes[i + 1]; | ||
if (nextNode && node.type === 'text' && nextNode.type === 'text') { // 合并文本 | ||
nextNode.pos = node.pos; | ||
nextNode.value = code.slice(nextNode.pos, nextNode.endpos); | ||
parentNode.nodes.splice(i, 1); | ||
} | ||
} | ||
} | ||
/* global define,module,window */ | ||
@@ -495,0 +497,0 @@ /* exported exports */ |
@@ -0,0 +0,0 @@ #!/usr/bin/env node |
{ | ||
"name": "cbml", | ||
"version": "0.2.8", | ||
"version": "0.2.9", | ||
"description": "CBML Parser", | ||
@@ -5,0 +5,0 @@ "homepage": "https://github.com/cbml/cbmljs", |
@@ -0,0 +0,0 @@ # [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Coverage Status][coverage-image]][coverage-url] |
544
18650