Arlolra has uploaded a new change for review.
https://gerrit.wikimedia.org/r/250853
Change subject: WIP: Make serializer state a property of the serializer
......................................................................
WIP: Make serializer state a property of the serializer
* We're passing it all over WTS as it is.
Change-Id: I22a89ee483d931b17ebae391400bc8815272513a
---
M lib/html2wt/LinkHandler.js
M lib/html2wt/SerializerState.js
M lib/html2wt/TagHandlers.js
M lib/html2wt/WikitextSerializer.js
M lib/html2wt/escapeWikitext.js
M lib/html2wt/separators.js
6 files changed, 36 insertions(+), 20 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/parsoid
refs/changes/53/250853/1
diff --git a/lib/html2wt/LinkHandler.js b/lib/html2wt/LinkHandler.js
index 37a433a..678084d 100644
--- a/lib/html2wt/LinkHandler.js
+++ b/lib/html2wt/LinkHandler.js
@@ -267,7 +267,7 @@
state.onSOL = solState;
state.wteHandlerStack.push(state.serializer.wteHandlers.wikilinkHandler);
state.inLink = true;
- var res = state.serializer.wteHandlers.escapeWikiText(state, str, {
node: node });
+ var res = state.serializer.wteHandlers.escapeWikiText(str, { node: node
});
state.inLink = false;
state.wteHandlerStack.pop();
diff --git a/lib/html2wt/SerializerState.js b/lib/html2wt/SerializerState.js
index 4ab8d7d..2f5a1d3 100644
--- a/lib/html2wt/SerializerState.js
+++ b/lib/html2wt/SerializerState.js
@@ -140,6 +140,21 @@
/**
*/
+SSP.initMode = function(selserMode) {
+ this.selserMode = selserMode || false;
+ this.rtTestMode = this.rtTestMode &&
+ !this.selserMode; // Always false in selser mode.
+};
+
+/**
+ */
+SSP.updateSep = function(node) {
+ this.sep.lastSourceNode = node;
+ this.sep.lastSourceSep = this.sep.src;
+};
+
+/**
+ */
SSP.resetCurrLine = function(node) {
this.currLine = {
text: '',
@@ -175,7 +190,7 @@
var nextChild = null;
while (child) {
- nextChild = this.serializer._serializeNode(child, this);
+ nextChild = this.serializer._serializeNode(child);
if (nextChild === node) {
// serialized all children
break;
@@ -325,7 +340,7 @@
if (origSep !== undefined && WTSUtils.isValidSep(origSep)) {
this.pushSep(origSep, node, 'ORIG-SEP:');
} else {
- var sep = this.serializer.buildSep(this, node);
+ var sep = this.serializer.buildSep(node);
if (sep !== undefined) {
this.pushSep(sep, node, 'SEP:');
}
@@ -342,7 +357,7 @@
var origRes = res;
if (this.escapeText) {
res = new ConstrainedText({
- text: this.serializer.wteHandlers.escapeWikiText(this,
res.text, {
+ text:
this.serializer.wteHandlers.escapeWikiText(res.text, {
node: node,
isLastChild: DU.nextNonDeletedSibling(node) ===
null,
}),
@@ -421,9 +436,8 @@
});
this.push(res, node);
- // Update state
- this.sep.lastSourceNode = node;
- this.sep.lastSourceSep = this.sep.src;
+ // Update separator state
+ this.updateSep(node);
// Update sol flag. Test for
// newlines followed by optional includeonly or comments
diff --git a/lib/html2wt/TagHandlers.js b/lib/html2wt/TagHandlers.js
index 93bc3a2..8f62e8c 100644
--- a/lib/html2wt/TagHandlers.js
+++ b/lib/html2wt/TagHandlers.js
@@ -1004,14 +1004,14 @@
// nothing to do
} else if
(child.nodeName === 'SPAN' &&
child.getAttribute('typeof') === 'mw:Entity') {
-
state.serializer._serializeNode(child, state);
+
state.serializer._serializeNode(child);
} else {
state.emitChunk(child.outerHTML, node);
}
} else if (DU.isText(child)) {
state.emitChunk(DU.escapeNowikiTags(child.nodeValue), child);
} else {
-
state.serializer._serializeNode(child, state);
+
state.serializer._serializeNode(child);
}
child = child.nextSibling;
}
diff --git a/lib/html2wt/WikitextSerializer.js
b/lib/html2wt/WikitextSerializer.js
index fb97a11..9a6c143 100644
--- a/lib/html2wt/WikitextSerializer.js
+++ b/lib/html2wt/WikitextSerializer.js
@@ -65,6 +65,8 @@
// WT escaping handlers
this.wteHandlers = new WTEModule.WikitextEscapeHandlers(this.env, this);
+ this.state = new SerializerState(this, this.options);
+
this.logType = this.options.logType || "trace/wts";
this.trace = this.env.log.bind(this.env, this.logType);
}
@@ -943,8 +945,9 @@
/**
* Internal worker. Recursively serialize a DOM subtree.
*/
-WSP._serializeNode = function(node, state) {
+WSP._serializeNode = function(node) {
var prev, next, nextNode;
+ var state = this.state;
if (state.selserMode) {
this.trace(function() { return traceNodeName(node); },
@@ -1357,11 +1360,8 @@
this.env.page.editedDoc = body.ownerDocument;
}
- var state = new SerializerState(this, this.options);
-
- // Init state
- state.selserMode = selserMode || false;
- state.rtTestMode = state.rtTestMode && !state.selserMode; // always
false in selser mode
+ var state = this.state;
+ state.initMode(selserMode);
// Normalize the DOM
(new Normalizer(state)).normalizeDOM(body);
@@ -1371,8 +1371,8 @@
return "--- DOM --- \n" + body.outerHTML + "\n-----------";
});
- state.sep.lastSourceNode = body;
- state.currLine.firstNode = body.firstChild;
+ state.updateSep(body);
+ state.resetCurrLine(body.firstChild);
state.serializeChildren(body);
// Emit child-parent seps.
diff --git a/lib/html2wt/escapeWikitext.js b/lib/html2wt/escapeWikitext.js
index a152a73..3043354 100644
--- a/lib/html2wt/escapeWikitext.js
+++ b/lib/html2wt/escapeWikitext.js
@@ -559,7 +559,8 @@
}
-WEHP.escapeWikiText = function(state, text, opts) {
+WEHP.escapeWikiText = function(text, opts) {
+ var state = this.serializer.state;
state.env.log("trace/wt-escape", "EWT:", function() { return
JSON.stringify(text); });
/* -----------------------------------------------------------------
@@ -644,7 +645,7 @@
state.currLine.text = '';
opts.inMultilineMode = true;
}
- return self.escapeWikiText(state, line, opts);
+ return self.escapeWikiText(line, opts);
}).join('\n');
state.wteHandlerStack.pop();
diff --git a/lib/html2wt/separators.js b/lib/html2wt/separators.js
index 2bba598..272b1e8 100644
--- a/lib/html2wt/separators.js
+++ b/lib/html2wt/separators.js
@@ -531,7 +531,8 @@
* Emit a separator based on the collected (and merged) constraints
* and existing separator text. Called when new output is triggered.
*/
-var buildSep = function(state, node) {
+var buildSep = function(node) {
+ var state = this.state;
var origNode = node;
var src = state.env.page.src;
var prevNode = state.sep.lastSourceNode;
--
To view, visit https://gerrit.wikimedia.org/r/250853
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I22a89ee483d931b17ebae391400bc8815272513a
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Arlolra <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits