Calligra/Formula Shape

From KDE Community Wiki

KFormula is a formula editor for KOffice and can be used to create and edit mathematical formulas that can be included in other KOffice documents. It provides simple input facilities and supports the functionality you expect from a KOffice application.

TODO

Flake

KFormula 1.x provides both a library and a kpart. KFormula 2 will still provide a part, but it won't provide a library anymore, it will make use of Calligra/Flake and provide a shape and a tool. To accomplish this we have to do the following:

  • Move code from libs/kformula to kformula/flake (IN PROGRESS)
  • KFormula application should make use of FormulaShape
  • Complete display support of FormulaShape elements
  • Use KConfig to get KFormula's default settings
  • Finish AttributeManager to handle defaults
  • Write FormulaTool to be able to edit FormulaShapes

ODF / MathML

KFormula 1.6 got great ODF / MathML support, but there're still some elements and attributes unsupported. The complete list of unsupported things follow. Each element of the list includes with kind of support is lacking: loading means that the property is lost while parsing the document, saving means that the property is not written, rendering means that the property is not properly shown, or not shown at all. Many of these tasks are quite easy to implement and could be considered Junior Jobs. (see also the testsuite)

NOTE: Only Presentation Markup is considered here.

Token Elements

mo

  • Support for attribute form: rendering ( Section 3.2.5.2, 3.2.5.7 )
  • Support for attribute fence: rendering ( Section 3.2.5.2, 3.2.5.7 )
  • Support for attribute separator: rendering ( Section 3.2.5.2, 3.2.5.7 )
  • Support for attribute lspace: rendering ( Section 3.2.5.2, 3.2.5.7 )
  • Support for attribute rspace: rendering ( Section 3.2.5.2, 3.2.5.7 )
  • Support for attribute stretchy: rendering ( Section 3.2.5.2, 3.2.5.7, 3.2.5.8 )
  • Support for attribute symmetric: rendering ( Section 3.2.5.2, 3.2.5.7, 3.2.5.8 )
  • Support for attribute maxsize: rendering ( Section 3.2.5.2, 3.2.5.7, 3.2.5.8 )
  • Support for attribute minsize: rendering ( Section 3.2.5.2, 3.2.5.7, 3.2.5.8 )
  • Support for attribute largeop: rendering ( Section 3.2.5.2, 3.2.5.7, 3.2.5.9 )
  • Support for attribute movablelimits: rendering ( Section 3.2.5.2, 3.2.5.7, 3.2.5.9 )
  • Support for attribute accent: rendering ( Section 3.2.5.2, 3.2.5.7 )

mtext

  • Proper support for space-like elements ( Section 3.2.6.2 )

mspace

  • Support for attribute linebreak: rendering ( Section 3.2.7.2 )

ms

  • Support for attribute lquote: rendering ( Section 3.2.8.2 )
  • Support for attribute rquote: rendering ( Section 3.2.8.2 )
  • Support for escaping content ( Section 3.2.8.2 )

Misc

  • Support for <malignmark> element inside Token Elements ( Sections 3.2.1, 3.5.5 )
  • Implement surrounding spaces around Token Elements

General Layout Schemata

mrow

  • Support for 1 argument behaviour as the argument itself ( Section 3.3.1.2.1 )
  • Support for proper grouping of mrow elements ( Section 3.3.1.3.1 )

mfrac

  • Support for attribute bevelled: rendering ( Section 3.3.2.2 )

mstyle

  • Support for attributes of all presentation elements which do not have required values ( Section 3.3.4.1, 3.3.4.2 ):
  • form (mo)
  • fence (mo)
  • separator (mo)
  • lspace (mo)
  • rspace (mo)
  • stretchy (mo)
  • symmetric (mo)
  • maxsize (mo)
  • minsize (mo)
  • largeop (mo)
  • movablelimits (mo)
  • accent (mo)
  • width (mspace)
  • heigth (mspace)
  • depth (mspace)
  • linebreak (mspace)
  • lquote (ms)
  • rquote (ms)
  • linethickness (mfrac)
  • numalign (mfrac)
  • denomalign (mfrac)
  • bevelled (mfrac)
  • PrivoxyWindowOpen(mfenced)
  • close (mfenced)
  • separators (mfenced)
  • notation (menclose)
  • subscriptshift (msub, msubsup, mmultiscripts)
  • superscriptshift (msup, msubsup, mmultiscripts)
  • accentunder (munder, munderover)
  • accent (mover, munderover)
  • align (mtable)
  • rowalign (mtable)
  • columnalign (mtable)
  • groupalign (mtable)
  • alignmentscope (mtable)
  • columnwidth (mtable)
  • width (mtable)
  • rowspacing (mtable)
  • columnspacing (mtable)
  • rowlines (mtable)
  • columnlines (mtable)
  • frame (mtable)
  • framespaciing (mtable)
  • equalrows (mtable)
  • equalcolumns (mtable)
  • displaystyle (mtable)
  • side (mtable)
  • minlabelspacing (mtable)
  • rowspan (mtd)
  • columnspan (mtd)
  • edge (malignmark)
  • selection (maction)
  • Support for rendering differences for attribute displaystyle ( Section 3.3.4.2.1 ) OPTIONAL
  • Support proper order of priority applying attribute scriptlevel ( Section 3.3.4.2.2 ) OPTIONAL

mfenced

  • Support for arbitrary string in attribute open ( Section 3.3.8.2 )
  • Support for arbitrary string in attribute close ( Section 3.3.8.2 )

menclose

  • Support for longdiv value ( Section 3.3.9.2 ) OPTIONAL
  • Support for actuarial value ( Section 3.3.9.2) OPTIONAL
  • Support for radical value ( Section 3.3.9.2 ) OPTIONAL
  • Support for box value ( Section 3.3.9.2) OPTIONAL
  • Support for roundedbox value ( Section 3.3.9.2 ) OPTIONAL
  • Support for circle value ( Section 3.3.9.2) OPTIONAL
  • Support for left value ( Section 3.3.9.2) OPTIONAL
  • Support for right value ( Section 3.3.9.2) OPTIONAL
  • Support for top value ( Section 3.3.9.2) OPTIONAL
  • Support for bottom value ( Section 3.3.9.2) OPTIONAL
  • Support for updiagonalstrike value ( Section 3.3.9.2) OPTIONAL
  • Support for downdiagonalstrike value ( Section 3.3.9.2) OPTIONAL
  • Support for verticalstrike value ( Section 3.3.9.2) OPTIONAL
  • Support for horizontalstrike value ( Section 3.3.9.2) OPTIONAL

Script and Limit Schemata

munder

  • Support for attribute accentunder: rendering ( Section 3.4.4.2 )
  • Proper rendering of underscript element

mover

  • Support for attribute accent: rendering ( Section 3.4.5.2 )
  • Proper rendering of overscript element

munderover

  • Support for attribute accent: rendering ( Section 3.4.6.2, 3.4.5.2 )
  • Support for attribute accentunder: rendering ( Section 3.4.6.2, 3.4.4.2 )
  • Proper rendering of overscript element
  • Proper rendering of underscript element

mmultiscripts

  • Support for <mmultiscripts> element: loading, saving, rendering ( Section 3.4.7.1 )
  • Support for attribute subscriptshift: loading, saving, rendering ( Section 3.4.7.2, 3.4.3.2 )
  • Support for attribute superscriptshift: loading, saving, rendering ( Section 3.4.7.2, 3.4.3.2 )

Tables and Matrices

mtable

  • Support proper alignment ( Section 3.5.5.10 )
  • Support for MathML 1.01 deprecated inferred mtr loading ( Section 3.5.1.1 ) OPTIONAL
  • Support for MathML 1.01 deprecated inferred mtd loading ( Section 3.5.1.1 ) OPTIONAL
  • Support for attribute align: rendering ( Section 3.5.1.2 )
  • Support for attribute rowalign: rendering ( Section 3.5.1.2 )
  • Support for attribute columnalign: rendering ( Section 3.5.1.2, 3.5.5 )
  • Support for attribute alignmentscope: rendering ( Section 3.5.1.2, 3.5.5, 3.5.5.9 )
  • Support for attribute columnwidth: rendering ( Section 3.5.1.2 )
  • Support for attribute width: rendering ( Section 3.5.1.2 )
  • Support for attribute rowspacing: rendering ( Section 3.5.1.2 )
  • Support for attribute columnspacing: rendering ( Section 3.5.1.2 )
  • Support for attribute rowlines: rendering ( Section 3.5.1.2 )
  • Support for attribute columnlines: rendering ( Section 3.5.1.2 )
  • Support for attribute frame: rendering ( Section 3.5.1.2 )
  • Support for attribute framespacing: rendering ( Section 3.5.1.2 )
  • Support for attribute equalrows: rendering ( Section 3.5.1.2 )
  • Support for attribute equalcolumns: rendering ( Section 3.5.1.2 )
  • Support for attribute displaystyle: rendering ( Section 3.5.1.2 )
  • Support for attribute side: rendering ( Section 3.5.1.2 )
  • Support for attribute minlabelspacing: rendering ( Section 3.5.1.2 )

mtr

  • Support for attribute rowalign: loading, saving, rendering ( Section 3.5.2.2 )
  • Support for attribute columnalign: loading, saving, rendering ( Section 3.5.2.2 )
  • Support for attribute groupalign: loading, saving, rendering ( Section 3.5.2.2, 3.5.5, 3.5.5.7 )

mlabeledtr

  • Support for <mlabeledtr> element: loading, saving, rendering ( Section 3.5.3 )
  • Support for attribute rowalign: loading, saving, rendering ( Section 3.5.3.2, 3.5.2.2 )
  • Support for attribute columnalign: loading, saving, rendering ( Section 3.5.3.2, 3.5.2.2 )
  • Support for attribute groupalign: loading, saving, rendering ( Section 3.5.3.2, 3.5.2.2, 3.5.5, 3.5.5.7 )

mtd

  • Support for attribute rowspan: loading, saving, rendering ( Section 3.5.4.2 )
  • Support for attribute columnspan: loading, saving, rendering ( Section 3.5.4.2 )
  • Support for attribute rowalign: loading, saving, rendering ( Section 3.5.4.2 )
  • Support for attribute columnalign: loading, saving, rendering ( Section 3.5.4.2 )
  • Support for attribute groupalign: loading, saving, rendering ( Section 3.5.4.2, 3.5.5, 3.5.5.7 )

malignmark

  • Support for <malignmark> element: loading, saving, rendering ( Section 3.5.5.4, 3.5.5.9 )
  • Support for attribute edge: loading, saving, rendering ( Section 3.5.5.5 )

maligngroup

  • Support for <maligngroup> element: loading, saving, rendering ( Section 3.5.5.1, 3.5.5.2, 3.5.5.3, 3.5.5.9 )
  • Support for attribute gropualign: loading, saving, rendering ( Section 3.5.5.6, 3.5.5.7 )

Enlivening Expressions

maction

  • Support for toggle actiontype ( Section 3.6.1.1 ) OPTIONAL
  • Support for statusline actiontype ( Section 3.6.1.1 ) OPTIONAL
  • Support for tooltip actiontype ( Section 3.6.1.1 ) OPTIONAL
  • Support for highlight actiontype ( Section 3.6.1.1 ) OPTIONAL

Misc

  • Full support for named unicode characters, ( Chapter 6 )

Filters

  • Support KFormula's old document format (.kfo) through a filter
  • Full TeX import / export support.

Font support

KFormula supports Unicode fonts and includes currently Arev Sans fonts, which have very good support for mathematical symbols. However, KFormula still relies on TeX fonts for some symbol drawing. Thus, work in this area include:

  • Find better math supporting free fonts. Arev Sans has good support, yet not perfect, if we find a better free font, we should provide it instead. This can be considered a Junior Job.
  • Get rid of TeX symbol drawing. These symbols are mostly different kind of brackets, not properly supported by Arev Sans currently. Once we find a font that supports them, we could fully rely on Unicode fonts.

Accesibility

  • Accesibility compliance. Fulfil Gary's report issues.

Usability

  • Direct formula edition, posibly through various languages: OOo, TeX, possibly others.
  • Usability review of KFormula

Scripting

  • Add kross support

Others

  • Wishlist in [1], apart from BUG #53563, which I consider out of scope for KFormula but could make sense integration with applications like KAlgebra.
  • Any other idea for KFormula, I'd like to hear it !
  • Comparison of Formula Editors