1. 15 Sep, 2013 1 commit
    • commit-queue@webkit.org's avatar
      Implement the mmultiscripts tag · 99a9d2af
      commit-queue@webkit.org authored
      https://bugs.webkit.org/show_bug.cgi?id=99618
      
      Patch by Frédéric Wang <fred.wang@free.fr> on 2013-09-15
      Reviewed by Chris Fleizach.
      
      Source/WebCore:
      
      Tests: mathml/invalid-scripts-crash.html
             mathml/presentation/multiscripts-equivalence.html
             mathml/presentation/multiscripts-noscripts.html
             mathml/presentation/multiscripts-positions.html
             mathml/presentation/scripts-base-alignment.html
             mathml/presentation/scripts-horizontal-alignment.html
             mathml/presentation/scripts-vertical-alignment.html
             mathml/scripts-addChild.html
             mathml/scripts-removeChild.html
      
      This relies on the existing msub/msup/msubsup code to implement the mmultiscripts tag. This also improves dynamic addition/removal of children for these MathML elements and adds a specific style for invalid children, so that they render like an merror tag. Finally, this fixes a bad memory access in the Accessibility render object of msubsup.
      
      * CMakeLists.txt:
      * GNUmakefile.list.am:
      * Target.pri:
      * WebCore.vcxproj/WebCore.vcxproj:
      * WebCore.vcxproj/WebCore.vcxproj.filters:
      * WebCore.xcodeproj/project.pbxproj:
      * accessibility/AccessibilityRenderObject.cpp:
      (WebCore::AccessibilityRenderObject::isMathSubscriptSuperscript):
      (WebCore::AccessibilityRenderObject::mathSuperscriptObject):
      * css/mathml.css:
      (mo, mrow, mfenced, mfrac, msub, msup, msubsup, mmultiscripts, mprescripts, none, munder, mover, munderover, msqrt, mroot):
      (mover > :last-child, munderover > :last-child):
      (msub > * + *, msup > * + *, msubsup > * + *, mmultiscripts > * + *, munder > * + *, mover > * + *, munderover > * + *):
      (merror, msub > * + * + *, msup > * + * + *, msubsup > * + * + * + *, msub > mprescripts, msup > mprescripts, msubsup > mprescripts, msub > none, msup > none, msubsup > none, mmultiscripts > mprescripts ~ mprescripts, mmultiscripts > mprescripts ~ mprescripts ~ *):
      * mathml/MathMLInlineContainerElement.cpp:
      (WebCore::MathMLInlineContainerElement::createRenderer):
      * mathml/mathtags.in:
      * rendering/mathml/RenderMathMLBlock.h:
      (WebCore::RenderMathMLBlock::isRenderMathMLScripts):
      (WebCore::RenderMathMLBlock::isRenderMathMLScriptsWrapper):
      * rendering/mathml/RenderMathMLScripts.cpp: Added.
      (WebCore::isMPrescripts):
      (WebCore::RenderMathMLScripts::RenderMathMLScripts):
      (WebCore::RenderMathMLScripts::base):
      (WebCore::RenderMathMLScripts::fixAnonymousStyleForSubSupPair):
      (WebCore::RenderMathMLScripts::fixAnonymousStyles):
      (WebCore::RenderMathMLScripts::addChildInternal):
      (WebCore::RenderMathMLScripts::removeChildInternal):
      (WebCore::RenderMathMLScripts::addChild):
      (WebCore::RenderMathMLScripts::removeChild):
      (WebCore::RenderMathMLScripts::styleDidChange):
      (WebCore::RenderMathMLScripts::unembellishedOperator):
      (WebCore::RenderMathMLScripts::layout):
      (WebCore::RenderMathMLScripts::firstLineBoxBaseline):
      (WebCore::RenderMathMLScriptsWrapper::createAnonymousWrapper):
      (WebCore::RenderMathMLScriptsWrapper::addChildInternal):
      (WebCore::RenderMathMLScriptsWrapper::addChild):
      (WebCore::RenderMathMLScriptsWrapper::removeChildInternal):
      (WebCore::RenderMathMLScriptsWrapper::removeChild):
      * rendering/mathml/RenderMathMLScripts.h: Added.
      (WebCore::RenderMathMLScriptsWrapper::RenderMathMLScriptsWrapper):
      (WebCore::RenderMathMLScriptsWrapper::renderName):
      (WebCore::RenderMathMLScriptsWrapper::isRenderMathMLScriptsWrapper):
      (WebCore::toRenderMathMLScriptsWrapper):
      (WebCore::RenderMathMLScripts::isRenderMathMLScripts):
      (WebCore::RenderMathMLScripts::renderName):
      (WebCore::toRenderMathMLScripts):
      * rendering/mathml/RenderMathMLSubSup.cpp: Removed.
      * rendering/mathml/RenderMathMLSubSup.h: Removed.
      
      LayoutTests:
      
      Add many tests for script msub/msup/msubsup/mmultiscripts:
      - invalid markup
      - equivalence between mmultiscripts without scripts and mrow
      - equivalence between mmultiscripts and msub/msup/msubsup
      - position of scripts in mmultiscripts
      - baseline alignment of msub/msup/msubsup elements
      - horizontal/vertical alignment of scripts
      - adding/removing children with the DOM
      
      * TestExpectations: Some remaining MathML pixel tests are broken by this patch.
      * mathml/invalid-scripts-crash-expected.txt: Added.
      * mathml/invalid-scripts-crash.html: Added.
      * mathml/presentation/multiscripts-equivalence-expected.html: Added.
      * mathml/presentation/multiscripts-equivalence.html: Added.
      * mathml/presentation/multiscripts-noscripts-expected.html: Added.
      * mathml/presentation/multiscripts-noscripts.html: Added.
      * mathml/presentation/multiscripts-positions-expected.html: Added.
      * mathml/presentation/multiscripts-positions.html: Added.
      * mathml/presentation/scripts-base-alignment-expected.html: Added.
      * mathml/presentation/scripts-base-alignment.html: Added.
      * mathml/presentation/scripts-horizontal-alignment-expected.html: Added.
      * mathml/presentation/scripts-horizontal-alignment.html: Added.
      * mathml/presentation/scripts-vertical-alignment-expected.html: Added.
      * mathml/presentation/scripts-vertical-alignment.html: Added.
      * mathml/scripts-addChild-expected.html: Added.
      * mathml/scripts-addChild.html: Added.
      * mathml/scripts-removeChild-expected.html: Added.
      * mathml/scripts-removeChild.html: Added.
      * platform/mac/accessibility/mathml-multiscript-expected.txt: Reference updated.
      
      git-svn-id: http://svn.webkit.org/repository/webkit/trunk@155797 268f45cc-cd09-0410-ab3c-d52691b4dbfc
      99a9d2af