Go to file
Subramanya Sastry 8174c9dafc First attempt implementing rewriting rules on the DOM
- This is implemented as a post-processing pass.
- Might require additional checks to verify rewriteability.
- Implemented as a pair-wise tag DOM minimization strategy,
  i.e. it takes tag pairs (B, I) for ex, and attempts to
  normalize the tree just for those tag pairs.  Normalizing
  across multiple tags is implemented as pairwise rewriting
  across all pairs:  Ex:(b,i), (b,u),(i,u) for (b,i,u)
- Copied over attributes as part of rewriting, but some of the
  attributes lose their meaning on rewriting since tags are
  reordered (ex: sourcePosn, sourceTagPosn). How do we handle this?

Output examples and possible issues to fix:
   <i><b><u>biu</u></b></i><b><u>bu</u></b><u>u</u>
gets rewritten to:
   <u><b><i>biu</i>bu</b>u</u>

But, the equivalent wikitext form:
   '''''<u>biu</u>''''''''<u>bu</u>'''<u>u</u>
does not get rewritten because of parsing differences.
This wikitext gets parsed into:
   <i><b><u>biu</u>'''</b></i><u>bu<b>u</b></u>
The extra ''' token in the middle thwarts DOM rewriting.

However, a slightly different version:
   "'''''<u>biu</u>''<u>bu</u>'''<u>u</u>"
gets properly normalized to:
   <u>'''''biu''bu'''u</u>

An alternative, but fun strategy to play with is to use the following
two normalization primitives: S(wap) and M(erge).
- S rewrites T1(T2(x)) into T2(T1(x))
  (ex: <b><i>foo</i></b> ==> <i><b>foo</b></i>)
- M rewrites (T(x),T(y)) into (T(x,y)).
  (ex: <b>foo</b><b>bar</b> ==> <b>foobar</b>)

The current rewriting strategy could possibly be re-implemented as S-M
rewriting.  The problem to solve there would be to find an efficient
rewriting strategy that is guaranteed to lead to a normal form.  I may
not play with it now, but just documenting it for later (to play with
in my spare time).

This commit is just as a record of fun/experimental code where I get to
learn details of JS, wikitext, parsing, and DOM manipulation.  Next
version of this code will attempt to introduce minimal DOM restructuring
across multiple tags at once which can be more efficient.

gwicke: Removed now passing test from whitelist, and updated another whitelist
entry which is now improved.

Change-Id: Ie97bcb164eb62c34ba61aa76ba2f4c232aa713d8
2012-05-29 08:17:57 +02:00
api Slightly improve formatting of web service; test commit message tweak 2012-05-25 16:36:14 +02:00
contentEditable First implementation of IME for content editable 2012-02-09 00:51:59 +00:00
demos Build out ve.Surface constructor to support multiple editor instances 2012-04-26 11:56:47 -07:00
modules First attempt implementing rewriting rules on the DOM 2012-05-29 08:17:57 +02:00
tests First attempt implementing rewriting rules on the DOM 2012-05-29 08:17:57 +02:00
.gitignore Add .gitignore 2012-05-21 01:50:53 +01:00
.gitreview Add .gitreview file 2012-03-22 13:54:55 -07:00
README update a couple notes in VE readme 2011-11-02 21:14:04 +00:00
SpecialVisualEditorSandbox.php unnecessary to define messages here, followup r105972 2011-12-13 09:34:05 +00:00
VisualEditor.alias.php Localisation updates from http://translatewiki.net. 2012-05-23 19:21:14 +00:00
VisualEditor.i18n.php Localisation updates from http://translatewiki.net. 2012-05-14 19:42:58 +00:00
VisualEditor.php Add links in sandbox and demo to ve.dm.DocumentSychronizer.js 2012-04-02 13:28:09 -07:00

We're starting to merge bits from Wikidom and ParserPlayground tests here.
Enjoy!

Short-term work highlights:
* convert parser to wikidom format & using the wikidom serializer
* port/update/write more tests
* Special: page to host the editor as a standalone demo
* Opt-in test mode to switch the editor in on EditPage (initially blank)
* Use serializer to save pages from editor
* Use parser to load pages into editor

Long-term work highlights:
* more thorough & bulk testing
* more extension support