constructs.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /**
  2. * @typedef {import('micromark-util-types').Extension} Extension
  3. */
  4. import {
  5. attention,
  6. autolink,
  7. blockQuote,
  8. characterEscape,
  9. characterReference,
  10. codeFenced,
  11. codeIndented,
  12. codeText,
  13. definition,
  14. hardBreakEscape,
  15. headingAtx,
  16. htmlFlow,
  17. htmlText,
  18. labelEnd,
  19. labelStartImage,
  20. labelStartLink,
  21. lineEnding,
  22. list,
  23. setextUnderline,
  24. thematicBreak
  25. } from 'micromark-core-commonmark'
  26. import {codes} from 'micromark-util-symbol'
  27. import {resolver as resolveText} from './initialize/text.js'
  28. /** @satisfies {Extension['document']} */
  29. export const document = {
  30. [codes.asterisk]: list,
  31. [codes.plusSign]: list,
  32. [codes.dash]: list,
  33. [codes.digit0]: list,
  34. [codes.digit1]: list,
  35. [codes.digit2]: list,
  36. [codes.digit3]: list,
  37. [codes.digit4]: list,
  38. [codes.digit5]: list,
  39. [codes.digit6]: list,
  40. [codes.digit7]: list,
  41. [codes.digit8]: list,
  42. [codes.digit9]: list,
  43. [codes.greaterThan]: blockQuote
  44. }
  45. /** @satisfies {Extension['contentInitial']} */
  46. export const contentInitial = {
  47. [codes.leftSquareBracket]: definition
  48. }
  49. /** @satisfies {Extension['flowInitial']} */
  50. export const flowInitial = {
  51. [codes.horizontalTab]: codeIndented,
  52. [codes.virtualSpace]: codeIndented,
  53. [codes.space]: codeIndented
  54. }
  55. /** @satisfies {Extension['flow']} */
  56. export const flow = {
  57. [codes.numberSign]: headingAtx,
  58. [codes.asterisk]: thematicBreak,
  59. [codes.dash]: [setextUnderline, thematicBreak],
  60. [codes.lessThan]: htmlFlow,
  61. [codes.equalsTo]: setextUnderline,
  62. [codes.underscore]: thematicBreak,
  63. [codes.graveAccent]: codeFenced,
  64. [codes.tilde]: codeFenced
  65. }
  66. /** @satisfies {Extension['string']} */
  67. export const string = {
  68. [codes.ampersand]: characterReference,
  69. [codes.backslash]: characterEscape
  70. }
  71. /** @satisfies {Extension['text']} */
  72. export const text = {
  73. [codes.carriageReturn]: lineEnding,
  74. [codes.lineFeed]: lineEnding,
  75. [codes.carriageReturnLineFeed]: lineEnding,
  76. [codes.exclamationMark]: labelStartImage,
  77. [codes.ampersand]: characterReference,
  78. [codes.asterisk]: attention,
  79. [codes.lessThan]: [autolink, htmlText],
  80. [codes.leftSquareBracket]: labelStartLink,
  81. [codes.backslash]: [hardBreakEscape, characterEscape],
  82. [codes.rightSquareBracket]: labelEnd,
  83. [codes.underscore]: attention,
  84. [codes.graveAccent]: codeText
  85. }
  86. /** @satisfies {Extension['insideSpan']} */
  87. export const insideSpan = {null: [attention, resolveText]}
  88. /** @satisfies {Extension['attentionMarkers']} */
  89. export const attentionMarkers = {null: [codes.asterisk, codes.underscore]}
  90. /** @satisfies {Extension['disable']} */
  91. export const disable = {null: []}