figure.ts 704 B

123456789101112131415161718192021222324252627
  1. import { SyntaxNode, SyntaxNodeRef } from '@lezer/common'
  2. import { CenteringCtrlSeq } from '../../lezer-latex/latex.terms.mjs'
  3. export function centeringNodeForEnvironment(
  4. node: SyntaxNodeRef
  5. ): SyntaxNode | null {
  6. let centeringNode: SyntaxNode | null = null
  7. const cursor = node.node.cursor()
  8. cursor.next()
  9. cursor.iterate(nodeRef => {
  10. if (centeringNode) {
  11. return false
  12. }
  13. if (nodeRef.from > node.to) {
  14. return false
  15. }
  16. if (nodeRef.type.is(CenteringCtrlSeq)) {
  17. centeringNode = nodeRef.node
  18. return false
  19. }
  20. // don't descend into nested environments
  21. if (nodeRef.type.is('$Environment')) {
  22. return false
  23. }
  24. })
  25. return centeringNode
  26. }