@markuplint/rules
Advanced tools
Comparing version 1.0.0-alpha.13 to 1.0.0-alpha.14
@@ -106,3 +106,3 @@ "use strict"; | ||
// [node.raw]: node.indentation.width, | ||
// // rule: node.rule, | ||
// rule: node.rule, | ||
// parentIndentWidth, | ||
@@ -109,0 +109,0 @@ // childIndentWidth, |
@@ -187,6 +187,33 @@ "use strict"; | ||
} | ||
var targetsMaybeIncludesNotAllowedDescendants = Array.from(new Set(matched.split(/><|<|>/g).filter(function (_) { return _; }))); | ||
var _a = groupName.split(/(?<=[a-z0-9])_/gi), type = _a[0], _selector = _a.slice(2); | ||
// console.log({ type, _selector }); | ||
switch (type) { | ||
case 'ACM': { | ||
var model = _selector[0], tag_1 = _selector[1]; | ||
var selectors = unfold_content_models_to_tags_1.default("#" + model).filter(function (selector) { | ||
var _a = /^([^[\]]+)(?:\[[^\]]+\])?$/.exec(selector) || [], tagName = _a[1]; | ||
return tagName.toLowerCase() === tag_1.toLowerCase(); | ||
}); | ||
for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) { | ||
var node = nodes_1[_i]; | ||
if (node.type === 'Text') { | ||
continue; | ||
} | ||
if (node.nodeName.toLowerCase() !== tag_1.toLowerCase()) { | ||
continue; | ||
} | ||
for (var _b = 0, selectors_1 = selectors; _b < selectors_1.length; _b++) { | ||
var selector = selectors_1[_b]; | ||
var matched_1 = node.matches(selector); | ||
// console.log({ raw: node.raw, selector, matched }); | ||
if (matched_1) { | ||
return { value: true }; | ||
} | ||
} | ||
return { value: false }; | ||
} | ||
break; | ||
} | ||
case 'NAD': { | ||
var targetsMaybeIncludesNotAllowedDescendants = Array.from(new Set(matched.split(/><|<|>/g).filter(function (_) { return _; }))); | ||
var contents_1 = new Set(); | ||
@@ -217,6 +244,6 @@ var transparentGroupName = groupNames.find(function (name) { return /^TRANSPARENT_[0-9]+$/.test(name); }); | ||
// }); | ||
for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) { | ||
var node = nodes_1[_i]; | ||
for (var _b = 0, targetsMaybeIncludesNotAllowedDescendants_1 = targetsMaybeIncludesNotAllowedDescendants; _b < targetsMaybeIncludesNotAllowedDescendants_1.length; _b++) { | ||
var target_1 = targetsMaybeIncludesNotAllowedDescendants_1[_b]; | ||
for (var _c = 0, nodes_2 = nodes; _c < nodes_2.length; _c++) { | ||
var node = nodes_2[_c]; | ||
for (var _d = 0, targetsMaybeIncludesNotAllowedDescendants_1 = targetsMaybeIncludesNotAllowedDescendants; _d < targetsMaybeIncludesNotAllowedDescendants_1.length; _d++) { | ||
var target_1 = targetsMaybeIncludesNotAllowedDescendants_1[_d]; | ||
if (node.type === 'Text') { | ||
@@ -231,4 +258,4 @@ if (selectors.includes('#text')) { | ||
} | ||
for (var _c = 0, selectors_1 = selectors; _c < selectors_1.length; _c++) { | ||
var selector = selectors_1[_c]; | ||
for (var _e = 0, selectors_2 = selectors; _e < selectors_2.length; _e++) { | ||
var selector = selectors_2[_e]; | ||
// console.log({ selector, target }); | ||
@@ -235,0 +262,0 @@ // Self |
@@ -9,2 +9,4 @@ import { PermittedContent } from '@markuplint/ml-spec'; | ||
private _interleavePattern; | ||
private _targetTags; | ||
private _resolveTags; | ||
} |
@@ -68,3 +68,3 @@ "use strict"; | ||
if (isTarget(contentRule)) { | ||
return targetTags(contentRule, ignore, min, max); | ||
return this._targetTags(contentRule, ignore, min, max); | ||
} | ||
@@ -85,3 +85,3 @@ var notAllowedDescendantsNamedCapture = ''; | ||
} | ||
pattern = targetTags(nodeRule.require, nodeRule.ignore || null, nodeRule.min || 1, nodeRule.max || nodeRule.min || 1); | ||
pattern = this._targetTags(nodeRule.require, nodeRule.ignore || null, nodeRule.min || 1, nodeRule.max || nodeRule.min || 1); | ||
} | ||
@@ -97,3 +97,3 @@ else if (isOptionalContents(nodeRule)) { | ||
} | ||
pattern = targetTags(nodeRule.optional, nodeRule.ignore || null, 0, nodeRule.max || 1); | ||
pattern = this._targetTags(nodeRule.optional, nodeRule.ignore || null, 0, nodeRule.max || 1); | ||
} | ||
@@ -154,2 +154,53 @@ else if (isOneOrMoreContents(nodeRule)) { | ||
}; | ||
ExpGenerator.prototype._targetTags = function (target, ignore, min, max) { | ||
var tagList = this._resolveTags(target); | ||
var ignoreList = ignore ? this._resolveTags(ignore) : null; | ||
if (ignoreList) { | ||
ignoreList.forEach(function (ignore) { return tagList.delete(ignore); }); | ||
} | ||
return join(Array.from(tagList), createRange(min, max)); | ||
}; | ||
ExpGenerator.prototype._resolveTags = function (target) { | ||
var _this = this; | ||
var list = Array.isArray(target) ? target : [target]; | ||
var tagList = new Set(); | ||
var _loop_1 = function (name_1) { | ||
if (name_1 !== '#text' && name_1[0] === '#') { | ||
switch (name_1) { | ||
case '#transparent': { | ||
tagList.add(___TRANSPARENT___); | ||
break; | ||
} | ||
case '#custom': { | ||
tagList.add(CUSTOM_ELEMENT); | ||
break; | ||
} | ||
default: { | ||
var selectors = unfold_content_models_to_tags_1.default(name_1); | ||
selectors.forEach(function (selector) { | ||
if (selector === '#custom') { | ||
tagList.add(CUSTOM_ELEMENT); | ||
return; | ||
} | ||
if (/]$/i.test(selector)) { | ||
var _a = /^([^[\]]+)\[[^\]]+\]$/.exec(selector) || [], tagName = _a[1]; | ||
// ACM = Attributes by comtent model | ||
var exp = "(?<ACM_" + _this._id + "_" + name_1.slice(1) + "_" + tagName + "><" + tagName + ">)"; | ||
tagList.add(exp); | ||
return; | ||
} | ||
tagList.add("<" + selector + ">"); | ||
}); | ||
} | ||
} | ||
return "continue"; | ||
} | ||
tagList.add("<" + name_1 + ">"); | ||
}; | ||
for (var _i = 0, list_1 = list; _i < list_1.length; _i++) { | ||
var name_1 = list_1[_i]; | ||
_loop_1(name_1); | ||
} | ||
return tagList; | ||
}; | ||
return ExpGenerator; | ||
@@ -176,42 +227,2 @@ }()); | ||
} | ||
function resolveTags(target) { | ||
var list = Array.isArray(target) ? target : [target]; | ||
var tagList = new Set(); | ||
for (var _i = 0, list_1 = list; _i < list_1.length; _i++) { | ||
var name_1 = list_1[_i]; | ||
if (name_1 !== '#text' && name_1[0] === '#') { | ||
switch (name_1) { | ||
case '#transparent': { | ||
tagList.add(___TRANSPARENT___); | ||
break; | ||
} | ||
case '#custom': { | ||
tagList.add(CUSTOM_ELEMENT); | ||
break; | ||
} | ||
default: { | ||
var tags = unfold_content_models_to_tags_1.default(name_1); | ||
tags.forEach(function (tag) { | ||
if (tag === '#custom') { | ||
tagList.add(CUSTOM_ELEMENT); | ||
return; | ||
} | ||
tagList.add("<" + espace(tag) + ">"); | ||
}); | ||
} | ||
} | ||
continue; | ||
} | ||
tagList.add("<" + espace(name_1) + ">"); | ||
} | ||
return tagList; | ||
} | ||
function targetTags(target, ignore, min, max) { | ||
var tagList = resolveTags(target); | ||
var ignoreList = ignore ? resolveTags(ignore) : null; | ||
if (ignoreList) { | ||
ignoreList.forEach(function (ignore) { return tagList.delete(ignore); }); | ||
} | ||
return join(Array.from(tagList), createRange(min, max)); | ||
} | ||
function createRange(min, max) { | ||
@@ -248,4 +259,1 @@ var result = "{" + min + "," + max + "}"; | ||
} | ||
function espace(selector) { | ||
return selector.replace(/\[/g, '【').replace(/\]/g, '】'); | ||
} |
{ | ||
"name": "@markuplint/rules", | ||
"version": "1.0.0-alpha.13", | ||
"version": "1.0.0-alpha.14", | ||
"description": "Rules for markuplint", | ||
@@ -23,5 +23,5 @@ "repository": "git@github.com:markuplint/markuplint.git", | ||
"devDependencies": { | ||
"@markuplint/ml-core": "^1.0.0-alpha.11" | ||
"@markuplint/ml-core": "^1.0.0-alpha.12" | ||
}, | ||
"gitHead": "5966e1fa119ba9813e5a19d760a794abd88da08c" | ||
"gitHead": "81b3d6bf0e833f0e79c4f65a32203136de6edd23" | ||
} |
Sorry, the diff of this file is not supported yet
5168
484357