Subramanya Sastry has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/104757


Change subject: Fix to makeSepIndentPreSafe: always safe when nested in an 
indentPre!
......................................................................

Fix to makeSepIndentPreSafe: always safe when nested in an indentPre!

* echo " ''a''\n  ''b''" | node parse --wt2wt was normalizing
  whitespace on the second line because makeSepIndentPreSafe was
  not checking if the separator came from a node that was nested
  inside an indentPre. A simple check for state.inIndentPre fixes
  this issue.

* Added a parser test to capture this which passes wt2wt mode.

* This eliminates dirty diffs seen in RT testing
  Ex: jawiki:ベルマン-フォード法

* Additional change: separator constraints were being destructively
  updated in --trace wts mode. Fixed this to prevent hair-tearing
  during debugging.

Change-Id: I2cc2e79137637df191c2544982cc08b2a0777de4
---
M lib/mediawiki.WikitextSerializer.js
M tests/parserTests.txt
2 files changed, 22 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/parsoid 
refs/changes/57/104757/1

diff --git a/lib/mediawiki.WikitextSerializer.js 
b/lib/mediawiki.WikitextSerializer.js
index d0617c7..186b519 100644
--- a/lib/mediawiki.WikitextSerializer.js
+++ b/lib/mediawiki.WikitextSerializer.js
@@ -3880,7 +3880,7 @@
        }
 
        if (this.debugging) {
-               var constraints = nlConstraints;
+               var constraints = Util.clone(nlConstraints);
                constraints.constraintInfo = undefined;
                this.trace('makeSeparator', sep, origSep, minNls, sepNlCount, 
constraints);
        }
@@ -4004,8 +4004,9 @@
        // We also should test for onSOL state to deal with HTML like
        // <ul> <li>foo</li></ul>
        // and strip the leading space before non-indent-pre-safe tags
-       if (sep.match(/\n+ +(<!--(?:[^\-]|-(?!->))*-->[^\n]*)?$/g) || (
-               (constraintInfo.onSOL && sep.match(/ 
+(<!--(?:[^\-]|-(?!->))*-->[^\n]*)?$/g))))
+       if (!state.inIndentPre &&
+               (sep.match(/\n+ +(<!--(?:[^\-]|-(?!->))*-->[^\n]*)?$/g) || (
+               (constraintInfo.onSOL && sep.match(/ 
+(<!--(?:[^\-]|-(?!->))*-->[^\n]*)?$/g)))))
        {
                // 'sep' is the separator before 'nodeB' and it has leading 
spaces on a newline.
                // We have to decide whether that leading space will trigger 
indent-pres in wikitext.
@@ -4085,6 +4086,12 @@
                }
        }
 
+       if (this.debugging) {
+               var constraints = nlConstraints;
+               constraints.constraintInfo = undefined;
+               this.trace('makePreSafe  ', sep, constraints);
+       }
+
        return sep;
 };
 
diff --git a/tests/parserTests.txt b/tests/parserTests.txt
index 6f2f7de..a6b9e63 100644
--- a/tests/parserTests.txt
+++ b/tests/parserTests.txt
@@ -2284,6 +2284,18 @@
 </pre>
 !! end
 
+!! test
+5c. White-space in indent-pre
+!! input
+ ''a''
+  ''b''
+   ''c''
+!! result
+<pre><i>a</i>
+ <i>b</i>
+  <i>c</i>
+</pre>
+!! end
 
 !! test
 6. Pre-blocks should extend across lines with leading WS even when there is no 
wrappable content

-- 
To view, visit https://gerrit.wikimedia.org/r/104757
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2cc2e79137637df191c2544982cc08b2a0777de4
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Subramanya Sastry <ssas...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to