Просмотр исходного кода

[visual] Decorate `\ce` command (#16459)

GitOrigin-RevId: 0eab030489f97e43874e41d6d4895dc4de46521a
Alf Eaton 2 лет назад
Родитель
Сommit
ace673b95a

+ 27 - 0
services/web/frontend/js/features/source-editor/extensions/visual/atomic-decorations.ts

@@ -1108,6 +1108,33 @@ export const atomicDecorations = (options: Options) => {
                       widget: new TeXWidget(),
                     }).range(nodeRef.from, nodeRef.to)
                   )
+                  return false
+                }
+              } else if (commandName === '\\ce') {
+                // Chemical equation/formula, from the `mhchem` CTAN package.
+                // Handled by the MathJaX mhchem extension:
+                // https://docs.mathjax.org/en/latest/input/tex/extensions/mhchem.html
+                if (textArgumentNode && shouldDecorate(state, nodeRef)) {
+                  const innerContent = state.doc
+                    .sliceString(
+                      textArgumentNode.from + 1,
+                      textArgumentNode.to - 1
+                    )
+                    .trim()
+
+                  if (innerContent.length) {
+                    const outerContent = state.doc.sliceString(
+                      nodeRef.from,
+                      nodeRef.to
+                    )
+
+                    decorations.push(
+                      Decoration.replace({
+                        widget: new MathWidget(outerContent, false),
+                      }).range(nodeRef.from, nodeRef.to)
+                    )
+                  }
+
                   return false
                 }
               } else if (hasCharacterSubstitution(commandName)) {