Commit graph

5261 commits

Author SHA1 Message Date
Subramanya Sastry b059502b3e Extension handling rewrite + cite extension refactoring.
Tokenization
------------
* Fixed tokenizer to correctly parse extension tags in different
  contexts: with start and end tags, in self-closing tag mode,
  and to correctly handle scenarios when the exension end-tag is
  followed by a '#' (the special char used to skip over extension
  content).

* Removed the distinction in the tokenizer between installed
  extensions and natively supported extension tags (<ref> and
  <references> for ex.).  They all tokenize and get processed
  identically and get handled by different paths in the extension
  handler.

* Template and TemplateArg tokens now carry tpl. transclusion
  source alongwith them since tsr information will not be
  accurate when they show up in extension contexts that in turn
  showed up in template context that were expanded by the php
  preprocessor.

  Ex: {{echo|<ref>{{echo|foo}}</ref>}}

  The tsr for the ref-tag will correspond to the
  template-source of the echo-template, NOT the original top-level
  page. So, env.page.src.substring(..) will return incorrect
  source for the innermost {{echo|foo}}. This fix of carrying
  along tpl transclusion source in the token itself eliminates
  this problem.

Knowledge of native extensions
------------------------------
* Natively implemented extension tags (<ref> and <references>)
  are hardcoded in env.conf.parsoid.  At some point, it would
  be good to have a registration mechanism for parsoid-native
  extensions.

Extension handling
------------------
* Extracted extension handling out of the template handler into
  its own handler class. Right now, this class inherits from the
  template handler in order to be able to reuse a lot of the
  expansion and encapsulation functionality currently in the
  Template Handler.

* This handler now handles extensions that are:
  (a) natively implemented and registered with Parsoid.
  (b) implemented as a PHP extension and expanded by relying on
      the PHP preprocessor.

  For (a), it uses information from env.conf.parsoid to find
  ext-handlers for natively implemented ext-tags.  However, this
  can be cleaned up at some point by making available a registration
  mechanism.

Cite/Ref/References
-------------------
* Reworked the cite handler to split up ref-token processing
  and references token processing.
  * The handler now processes ref-tokens, parses content all
    the way to html output and encapsulates the html in an
    attribute of a meta-token that serves as a placeholder for
    where the ref-token occured.
  * References are handled as a DOM post-pass where these meta
    placeholder tokens are collected, content extracted from
    the attribute and spit out at the site of a references tag.
    The DOM walking is in DOMPostProcessor.js, but the actual
    processing is part of the Cite.js to keep all cite extension
    handling code in one place.

Parser pipeline
---------------
* Restructured parser pipeline recipes based on changes to Cite,
  TemplateHandler, and ExtensionHandler.

* Added a couple functions to the parser pipeline:
  1. resetState to reset state before starting a new top-level parse
     when pipelines are reused across top-level parses (ex: parser
     tests)
  2. setSourceOffsets to set start/end offsets of the source being
     handled by the pipeline.  This is required to correctly set tsr
     values when extension content (which is a substring of original
     top-level text) is parsed in its own pipeline.

Other fixes
-----------
* Removed env parameter from the Params object since it was not
  being used and seemed like unnecessary state propagation.
* Removed a FIXME in DOMUtils.buildTokensFromDOM by reusing code
  in the tokenizer that converts "\n" in text to NlTks.
* Cleanup of Util.shiftTokenTSR.
* ext.util.TokenCollection is now no longer used by anything.
  Added a FIXME and left around in case we are able to improve
  tokenizing and handling of *include* tags that can eliminate the
  need for the messy TokenAndAttrCollector.

Test results
------------
* No change in parser tests results.

* Tested with a few different files.
  - en:BO page seems to be parsed about 10% faster than before
    (needs verification).
  - Referencs on the en:BO page seem to be more accurate than
    before.

Change-Id: I8a095fa9fa976c7b3a2a4bd968dc9db4270b105f
2013-03-14 15:25:45 -05:00
Translation updater bot 77e8d943f2 Localisation updates from http://translatewiki.net.
Change-Id: I73521de4876114a79291bb21f4cb89d4a47d7aab
2013-03-08 17:03:48 +00:00
Translation updater bot e38f93866c Localisation updates from http://translatewiki.net.
Change-Id: I399e8e90e19a01f07199700c438c0231bb3dad21
2013-03-06 21:49:07 +00:00
Translation updater bot adfe9d972b Localisation updates from http://translatewiki.net.
Change-Id: I8be14e1d693a33d170cabf5b7e63a6e06a5209b6
2013-03-04 21:31:14 +00:00
Subramanya Sastry a2e817311d Clear refs for a group after references are emitted for the group.
* A references tag for a group can appear multiple times on a page.
  Ex: en:List_of_number-one_albums_from_the_1960s_%28UK%29 uses
  {{Reflist|group=lower-alpha}} more than once, and each reflist
  tag emits references accumulated since the previous references
  output.  This requires clearing the refs for the group after it
  is emitted.

* Parsoid wasn't clearing the group's refs.  This resulted in
  duplicate ref output which in turn crashed template encapsulation
  code that relies on template ids being unique.

* This patch fixes it which fixes the crasher on
  en:List_of_number-one_albums_from_the_1960s_%28UK%29

* No change in parser test results.

Change-Id: I48ba9c3fe2249c6ef1c1bf068c22c7985fa16e8f
2013-02-28 17:07:03 -06:00
Translation updater bot 96f4fe7cf1 Localisation updates from http://translatewiki.net.
Change-Id: I09dcc9bb5c411c0efa4a54cb5f2f0bf0989eb319
2013-02-24 20:35:18 +00:00
Translation updater bot 4b92551241 Localisation updates from http://translatewiki.net.
Change-Id: Ia5b0f6b971a781182505b9e89f7f2b88731d38cf
2013-02-23 20:33:49 +00:00
Brad Jorsch 73f856820e (bug 32368) Handle cloned parsers
If the parser is cloned, we need to clone our data object and
reassociate the hooks. Otherwise references may be lost when the clone
has ParserClearState called.

Change-Id: Ic1d75850e8d610ea890e34c38d062a358fd55178
Depends-On: Ieec65c908d71e89b9a66f83b9a626f842aadacbb
2013-02-22 21:24:14 +00:00
Translation updater bot 6e0187c9f3 Localisation updates from http://translatewiki.net.
Change-Id: Iec8a129309adc2f6e476b34fab5bb077044477ee
2013-02-22 20:10:43 +00:00
Subramanya Sastry fb27cd0b4a Handle multiply-referenced ref-tags without duplicate ref-content.
* When named-ref-tags are used multiple times in a document, the
  Cite.onReferences function was outputting the ref-content once
  for each use in the references section. While this is "harmless"
  for regular ref-content, when the ref-content has templates
  (ex: {[cite .. }}), that template content is duplicated several
  times -- this also means that template expansions seen in the
  output no longer has unique ids. Occasionally, this trips up
  DOM passes (template encapsulation) which make the reasonable
  assumption that template ids are unique. It introduced an
  infinite loop in the code that detects template range nestings
  and overlaps. This is not triggered always, but only in certain
  scenarios. en:Euphoria (Enrique Iglesias album) was a page that
  sent the parser into an infinite loop.

* Now fixed by outputting ref-content once.

* In addition, added an error-check in the DOM post-pass that might
  get stuck in an infinite loop to output an error message.

* No change in parser test results.

* en:Euphoria (Enrique Iglesias album) now parses and rts without
  getting stuck in an infinite loop.  Possibly other pages as well.

Change-Id: I81a055999eefe3ca36dfb8a9cda3fee538ae6c65
2013-02-20 17:50:52 -06:00
Translation updater bot a316acdf4b Localisation updates from http://translatewiki.net.
Change-Id: I263bb206970fee2dc754f423c681225d0d4cfa2b
2013-02-18 20:53:32 +00:00
C. Scott Ananian cade728dcb Replace jquery dependency with a minimal 'fakejquery'.
The 'fakejquery' module just defines the bits we use: $.each, $.map,
$.extend, $.isArray, $.isEmptyObject (and the internal functions required
to implement those).

Change-Id: I626b2f3a3d3a8d395d0c9679e01d3399403636dd
2013-02-15 17:54:43 -05:00
Translation updater bot b307789876 Localisation updates from http://translatewiki.net.
Change-Id: Iedd80dc6e0e8e1753bbac74c9e37e970f1d30fc5
2013-02-07 20:35:21 +00:00
Translation updater bot 497d251cfc Localisation updates from http://translatewiki.net.
Change-Id: Icff23879edabc68bdda874efd711493a40d5cbab
2013-02-04 22:17:43 +00:00
Translation updater bot f1b22c4be1 Localisation updates from http://translatewiki.net.
Change-Id: I6ac8cf10345de9a95a9fafaee6220488a2ab02d9
2013-02-01 22:13:19 +00:00
Translation updater bot 455c4b212f Localisation updates from http://translatewiki.net.
Change-Id: Ibf035c2006697bae904c4f008292d6f597a5451e
2013-01-28 21:51:27 +00:00
Translation updater bot f40d505b41 Localisation updates from http://translatewiki.net.
Change-Id: I077618edb570226e0b22e65b1256d89eea44ed70
2013-01-27 17:33:15 +00:00
Translation updater bot 1bbced41d9 Localisation updates from http://translatewiki.net.
Change-Id: I69e1474f633c5af68b08cc7aae14948e46e46c24
2013-01-25 20:34:34 +00:00
Translation updater bot 8db8d47416 Localisation updates from http://translatewiki.net.
Change-Id: I0d899e7bfeded94966a86edb231a56bd3e3993e8
2013-01-23 22:11:20 +00:00
Translation updater bot a1c6477183 Localisation updates from http://translatewiki.net.
Change-Id: If226676d5a558748425d088841b4dd5a4e6a443f
2013-01-21 20:46:09 +00:00
Siebrand 7dbc17812d Merge "Adapt the <gallery> parser test for $wgResponsiveImages" 2013-01-17 13:08:53 +00:00
Translation updater bot bfaec9aeb5 Localisation updates from http://translatewiki.net.
Change-Id: I9710053042c7438de43d44313300cdfe63998014
2013-01-15 21:30:46 +00:00
Translation updater bot 2d5c277dc2 Localisation updates from http://translatewiki.net.
Change-Id: Ic80366fb780795bf0f7cefdc6727e3e09998dcc9
2013-01-14 21:52:14 +00:00
Translation updater bot 5627eaedb8 Localisation updates from http://translatewiki.net.
Change-Id: Iabea5e9dfd37162ddb534465fbdc6d9ea1940cc4
2013-01-13 20:35:43 +00:00
Gabriel Wicke 2013cd72ea Eradicate env.text, only use env.page.src from now on.
Change-Id: Id87390a5d0e46f6bc1b713b04335cad43bc66baa
2013-01-09 18:07:21 -08:00
Translation updater bot c413fef398 Localisation updates from http://translatewiki.net.
Change-Id: I72cd6a070694a500f8850619aa83ab4508943f67
2013-01-06 20:07:51 +00:00
Translation updater bot a59cab5d01 Localisation updates from http://translatewiki.net.
Change-Id: Id2f9330a5bad14126a2ec12e4bec72d63ce4a966
2012-12-31 20:34:30 +00:00
Translation updater bot bdb77b3554 Localisation updates from http://translatewiki.net.
Change-Id: I2db5c268baae21659239f6f612d13b035c2afa0c
2012-12-30 19:33:38 +00:00
Translation updater bot 9c49217e01 Localisation updates from http://translatewiki.net.
Change-Id: I868795f07586fc1beb44aca7319935e2acd0992c
2012-12-29 19:36:42 +00:00
Translation updater bot 7a3a450292 Localisation updates from http://translatewiki.net.
Change-Id: I846440365511bad8f213fa6d8c699d594b97a9ae
2012-12-26 21:01:56 +00:00
Translation updater bot dbce1e38b8 Localisation updates from http://translatewiki.net.
Change-Id: I35f62de286acc7f050be896387e1154aa90ba67c
2012-12-23 21:45:48 +00:00
Translation updater bot 32319a28e4 Localisation updates from http://translatewiki.net.
Change-Id: I3ec65778ff092cae2a8a9f2e5c8c8a856d945cf7
2012-12-19 19:57:41 +00:00
Translation updater bot e1b491c988 Localisation updates from http://translatewiki.net.
Change-Id: If26dc6c1e0bae6789133a01d024c42326c8daf74
2012-12-16 20:48:04 +00:00
Translation updater bot 873323192a Localisation updates from http://translatewiki.net.
Change-Id: I737f3c188649cd0701fc47e1ccdd0a46ed883ce9
2012-12-13 20:27:19 +00:00
Translation updater bot 69c749334e Localisation updates from http://translatewiki.net.
Change-Id: Ifc9b9cc34690ca416d598a7202416cbc0eaf2228
2012-12-09 20:24:17 +00:00
Translation updater bot d3fa0ced20 Localisation updates from http://translatewiki.net.
Change-Id: I0d0a24c72024c8f9561f6e01bd7db46870ea447f
2012-12-07 21:53:39 +00:00
Translation updater bot 598a888281 Localisation updates from http://translatewiki.net.
Change-Id: I5fe4a1927dd7d9173df4e7950973f3c6dcd76e61
2012-12-06 20:13:26 +00:00
Translation updater bot d0639a3490 Localisation updates from http://translatewiki.net.
Change-Id: Ib4aac9ebb7a15568a5016d7b724ec1b91b4cf412
2012-12-05 20:53:10 +00:00
Translation updater bot d5204c2f99 Localisation updates from http://translatewiki.net.
Change-Id: Ib6e6d19f89455d8a4687e34a121809fd16689709
2012-12-04 21:04:16 +00:00
Translation updater bot e276605215 Localisation updates from http://translatewiki.net.
Change-Id: I885bedf381ff90f81019c18289a7abf7d35ba492
2012-12-02 20:39:03 +00:00
Subramanya Sastry 1de2752f0d Added a new parsing pipeline for processing ref tokens.
* Added a tokens/x-mediawiki/post-expansion sub-pipeline that
  is used to process ref-content.  This same pipeline type
  could also be used to post-process tokenized content from
  other extensions.
* Cleaned up transform handler ranks a bit.
* Fixed paragraph-handler to accept initial state and also
  fixed it to do a complete reset on encountering EOFTk.
  Cite ref-content handling uses the sub-pipeline while
  passing the inBlockToken flag to prevent top-level p-wrapping
  of ref-content.
* Fixes references output on en:Barack Obama and introduces
  lists in individual ref items.
* No change in parser tests -- how do we add tests for testing
  extensions like cite/ref?

Change-Id: I928a3a0f5f989ec28bbe73383794fe6f32599fd1
2012-11-29 15:58:15 -06:00
Subramanya Sastry d257cee069 Fixed #tag parser function.
* Updated #tag parser function code to set tag attributes.
  This lets {{Reflist|group=n}} to pass the group=n attribute
  to the <references> tag.  In turn, this fixes incorrect
  reference listing in the above template call.  This then
  fixes crashers in en:Prophet Muhammed, en:The PS3 and such
  pages.

  - TODO: parser output for Prophet Muhammed is still broken
  where content from body ends up in a table that has
  display:none css set.

* Minor code cleanup in AttributeTransformManager.process
  and added comment about lazy processing.

Change-Id: If528a3a5c6e22d3ff691dfc6b5b2f00201a26384
2012-11-29 11:24:24 -06:00
Gabriel Wicke fdde795b0f Trivial: Remove dead variable
And a commit so I can restart the test run with the native template expansion
enabled.

Change-Id: Ie3f44ac6f681257dc690ab230a880601b9799ade
2012-11-28 00:56:45 -08:00
Gabriel Wicke bad9921a2d Make Cite <references> group attribute handling more robust
The PHP preprocessor returns a references tag with an empty group attribute,
which we did not map to the null reference group. This caused the references
listing to vanish when using the PHP preprocessor.

This patch makes sure the attribute is converted to a string, stripped of
leading/trailing whitespace and finally set to null if no string remains.

No changes in parser tests, since Cite is in a separate extension.

Change-Id: Ib3de375225947a78c362370be8d78504fa24def2
2012-11-27 15:18:42 -08:00
Translation updater bot 3c80bb478d Localisation updates from http://translatewiki.net.
Change-Id: I212c63c9443a685b5c1b0fd3b6ab39caa6d675d0
2012-11-27 21:01:40 +00:00
Platonides d91d8a8f63 Adapt the <gallery> parser test for $wgResponsiveImages
$wgResponsiveImages was added and enabled by default in 966cda.
Makes the wiki to use thumb urls in some cases (up to 2x)
where we showed the original before.

Change-Id: I7b399c7d8ef9e47f8cd5c999738ec349e1585777
2012-11-26 22:08:11 +01:00
Brad Jorsch e6c76b5d23 (bug 13073) Work around Tidy confusion
If the <references> tag is wrapped (e.g. <div><references></div>) and
the first ref on the page contains a newline, Tidy will get confused and
insert extra paragraph breaks in the output.

We can avoid this easily enough by inserting a newline between
MediaWiki:cite_references_prefix and the first reference's <li>.

Note since this changes the output we also have to adjust the parser
tests to expect the new output.

Change-Id: I8222d53eaf2b20f842915fe90af724711a20bfc5
2012-11-26 19:29:03 +01:00
Translation updater bot 7fecd37a2d Localisation updates from http://translatewiki.net.
Change-Id: Ie403725a6dd9400e3666ed5e9c4d36f855cc9dea
2012-11-25 20:48:28 +00:00
Translation updater bot 9b0baaabda Localisation updates from http://translatewiki.net.
Change-Id: I0c0beede7a1381977560114f10de5663550427db
2012-11-22 20:39:46 +00:00
Subramanya Sastry 3eff5dfc13 Unrelated fixes/cleanup addressing recent git-review comments.
* Replaced empty (mw:Placeholder) span tags with meta-tag.
* Minor code refactoring in DSR computation.
* Removed hardcoding of "mwt" prefix for object ids.
* Added rt-info for html tags that are not lower-case in the
  source wikitext.
  - Additional 2 wt2wt tests green.

Change-Id: I9bb6a075bc60b6d78186d23000128eef6a04c787
2012-11-20 19:42:30 -06:00