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

Reply via email to