mirror of
https://scm.univ-tours.fr/22107988t/rappaurio-sae501_502.git
synced 2025-08-30 00:05:58 +02:00
93 lines
3.9 KiB
JavaScript
93 lines
3.9 KiB
JavaScript
"use strict";
|
|
|
|
var _contextsMap;
|
|
|
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
|
|
var tag = require('./tree-constructor-context-handlers/tag');
|
|
|
|
var tagContent = require('./tree-constructor-context-handlers/tag-content');
|
|
|
|
var tagName = require('./tree-constructor-context-handlers/tag-name');
|
|
|
|
var attributes = require('./tree-constructor-context-handlers/attributes');
|
|
|
|
var attribute = require('./tree-constructor-context-handlers/attribute');
|
|
|
|
var attributeValue = require('./tree-constructor-context-handlers/attribute-value');
|
|
|
|
var comment = require('./tree-constructor-context-handlers/comment');
|
|
|
|
var doctype = require('./tree-constructor-context-handlers/doctype');
|
|
|
|
var doctypeAttributes = require('./tree-constructor-context-handlers/doctype-attributes');
|
|
|
|
var doctypeAttribute = require('./tree-constructor-context-handlers/doctype-attribute');
|
|
|
|
var scriptTag = require('./tree-constructor-context-handlers/script-tag');
|
|
|
|
var styleTag = require('./tree-constructor-context-handlers/style-tag');
|
|
|
|
var _require = require('./constants/tree-constructor-contexts'),
|
|
TAG_CONTENT_CONTEXT = _require.TAG_CONTENT_CONTEXT,
|
|
TAG_CONTEXT = _require.TAG_CONTEXT,
|
|
TAG_NAME_CONTEXT = _require.TAG_NAME_CONTEXT,
|
|
ATTRIBUTES_CONTEXT = _require.ATTRIBUTES_CONTEXT,
|
|
ATTRIBUTE_CONTEXT = _require.ATTRIBUTE_CONTEXT,
|
|
ATTRIBUTE_VALUE_CONTEXT = _require.ATTRIBUTE_VALUE_CONTEXT,
|
|
COMMENT_CONTEXT = _require.COMMENT_CONTEXT,
|
|
DOCTYPE_CONTEXT = _require.DOCTYPE_CONTEXT,
|
|
DOCTYPE_ATTRIBUTES_CONTEXT = _require.DOCTYPE_ATTRIBUTES_CONTEXT,
|
|
DOCTYPE_ATTRIBUTE_CONTEXT = _require.DOCTYPE_ATTRIBUTE_CONTEXT,
|
|
SCRIPT_TAG_CONTEXT = _require.SCRIPT_TAG_CONTEXT,
|
|
STYLE_TAG_CONTEXT = _require.STYLE_TAG_CONTEXT;
|
|
|
|
var _require2 = require('./constants/ast-nodes'),
|
|
NODE_DOCUMENT = _require2.NODE_DOCUMENT;
|
|
|
|
var contextsMap = (_contextsMap = {}, _defineProperty(_contextsMap, TAG_CONTENT_CONTEXT, tagContent), _defineProperty(_contextsMap, TAG_CONTEXT, tag), _defineProperty(_contextsMap, TAG_NAME_CONTEXT, tagName), _defineProperty(_contextsMap, ATTRIBUTES_CONTEXT, attributes), _defineProperty(_contextsMap, ATTRIBUTE_CONTEXT, attribute), _defineProperty(_contextsMap, ATTRIBUTE_VALUE_CONTEXT, attributeValue), _defineProperty(_contextsMap, COMMENT_CONTEXT, comment), _defineProperty(_contextsMap, DOCTYPE_CONTEXT, doctype), _defineProperty(_contextsMap, DOCTYPE_ATTRIBUTES_CONTEXT, doctypeAttributes), _defineProperty(_contextsMap, DOCTYPE_ATTRIBUTE_CONTEXT, doctypeAttribute), _defineProperty(_contextsMap, SCRIPT_TAG_CONTEXT, scriptTag), _defineProperty(_contextsMap, STYLE_TAG_CONTEXT, styleTag), _contextsMap);
|
|
|
|
function processTokens(tokens, state, positionOffset) {
|
|
var tokenIndex = state.caretPosition - positionOffset;
|
|
|
|
while (tokenIndex < tokens.length) {
|
|
var token = tokens[tokenIndex];
|
|
var contextHandler = contextsMap[state.currentContext.type];
|
|
state = contextHandler(token, state);
|
|
tokenIndex = state.caretPosition - positionOffset;
|
|
}
|
|
|
|
return state;
|
|
}
|
|
|
|
module.exports = function constructTree() {
|
|
var tokens = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
var existingState = arguments.length > 1 ? arguments[1] : undefined;
|
|
var state = existingState;
|
|
|
|
if (existingState === undefined) {
|
|
var rootContext = {
|
|
type: TAG_CONTENT_CONTEXT,
|
|
parentRef: undefined,
|
|
content: []
|
|
};
|
|
var rootNode = {
|
|
nodeType: NODE_DOCUMENT,
|
|
parentRef: undefined,
|
|
content: {}
|
|
};
|
|
state = {
|
|
caretPosition: 0,
|
|
currentContext: rootContext,
|
|
currentNode: rootNode,
|
|
rootNode: rootNode
|
|
};
|
|
}
|
|
|
|
var positionOffset = state.caretPosition;
|
|
processTokens(tokens, state, positionOffset);
|
|
return {
|
|
state: state,
|
|
ast: state.rootNode
|
|
};
|
|
}; |