brackets.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import data from './data/bidiBrackets.data.js'
  2. import { parseCharacterMap } from './util/parseCharacterMap.js'
  3. let openToClose, closeToOpen, canonical
  4. function parse () {
  5. if (!openToClose) {
  6. //const start = performance.now()
  7. let { map, reverseMap } = parseCharacterMap(data.pairs, true)
  8. openToClose = map
  9. closeToOpen = reverseMap
  10. canonical = parseCharacterMap(data.canonical, false).map
  11. //console.log(`brackets parsed in ${performance.now() - start}ms`)
  12. }
  13. }
  14. /**
  15. * Get the opening bracket character corresponding to a given closing bracket character.
  16. * @param {string} char
  17. * @returns {string | null}
  18. */
  19. export function openingToClosingBracket (char) {
  20. parse()
  21. return openToClose.get(char) || null
  22. }
  23. /**
  24. * Get the closing bracket character corresponding to a given opening bracket character.
  25. * @param {string} char
  26. * @returns {string | null}
  27. */
  28. export function closingToOpeningBracket (char) {
  29. parse()
  30. return closeToOpen.get(char) || null
  31. }
  32. /**
  33. * Retrieves the canonical form of a bracket character.
  34. * @param {string} char
  35. * @returns {string | null}
  36. */
  37. export function getCanonicalBracket (char) {
  38. parse()
  39. return canonical.get(char) || null
  40. }