[
  {
    "path": ".gitignore",
    "content": "*.swp\n\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2023 Kaj Munhoz Arfvidsson\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# typst.vim\n\n*OBS: Work In Progress*\n\n(Neo)vim plugin for [Typst](https://typst.app).\n\nI am applying the 80/20 rule in this project since I prefer to have\nsomething now rather than waiting for everything later.\n\n## Features\n\n![image](https://user-images.githubusercontent.com/19633647/230785889-0d449fc3-747b-4183-b00b-14c0ea8dd590.png)\n*Editing [typst-palette](https://github.com/kaarmu/typst-palette) in Vim with the gruvbox colorscheme*\n\n**Existing**\n- Vim syntax highlighting.\n- Compile the active document with `:make`.\n- Concealing for italic, bold. Can be enabled with `g:typst_conceal`.\n- Concealing symbols in math mode. Can be enabled with `g:typst_conceal_math`.\n- Emojis! Can be enabled with `g:typst_conceal_emoji`.\n- Syntax highlighting of code blocks. See `g:typst_embedded_languages`.\n\n**Possible features**\n- Formatting using [this](https://github.com/astrale-sharp/typst-fmt/)?\n- Even better highlighting for neovim using treesitter?\n\nDo you miss anything from other packages, e.g. `vimtex`, create an issue\nand I'll probably add it! Also feel free to make a PR!\n\n## Installation\n\n### packer.nvim\n\n```lua\nrequire('packer').startup(function(use)\n\n    use {'kaarmu/typst.vim', ft = {'typst'}}\n\nend)\n```\n\n- Call `:so %` or restart neovim to reload config\n- Call `:PackerSync`\n\n### lazy.nvim\n```lua\nreturn {\n  'kaarmu/typst.vim',\n  ft = 'typst',\n  lazy=false,\n}\n```\n\n### vim-plug\n\n```vim\ncall plug#begin('~/.vim/plugged')\n    Plug 'kaarmu/typst.vim'\ncall plug#end()\n```\n\n- Restart (neo)vim to reload config\n- Call `:PlugInstall`\n\n## Usage\n\n### Options\n\n- `g:typst_syntax_highlight`:\n    Enable syntax highlighting.\n    *Default:* `1`\n- `g:typst_cmd`:\n    Specifies the location of the Typst executable.\n    *Default:* `'typst'`\n- `g:typst_pdf_viewer`:\n    Specifies pdf viewer that `typst watch --open` will use.\n    *Default:* `''`\n- `g:typst_output_to_tmp`:\n    Redirect compiled PDFs to `/tmp/typst_out/` followed by the file's path relative to `$HOME`.\n    *Default:* `0`\n- `g:typst_conceal`:\n    Enable concealment.\n    *Default:* `0`\n- `g:typst_conceal_math`:\n    Enable concealment for math symbols in math mode (i.e. replaces symbols\n    with their actual unicode character). **OBS**: this can affect performance,\n    see issue [#64](https://github.com/kaarmu/typst.vim/issues/64).\n    *Default:* `g:typst_conceal`\n- `g:typst_conceal_emoji`:\n    Enable concealing emojis, e.g. `#emoji.alien` becomes 👽.\n    *Default:* `g:typst_conceal`\n- `g:typst_auto_close_toc`:\n    Specifies whether TOC will be automatically closed after using it.\n    *Default:* `0`\n- `g:typst_auto_open_quickfix`:\n    Specifies whether the quickfix list should automatically open when there are errors from typst.\n    *Default:* `1`\n- `g:typst_embedded_languages`:\n    A list of languages that will be highlighted in code blocks. Typst is always highlighted.\n    If language name is different from the syntax file name, you can use renaming, e.g. `'rs -> rust'`\n    (spaces around the arrow are mandatory).\n    *Default:* `[]`\n- `g:typst_folding`:\n    Enable folding for typst heading\n    *Default:* `0`\n- `g:typst_foldnested`:\n    Enable nested foldings\n    *Default:* `1`\n\n### Commands\n\n- `:TypstWatch`:\n    Watches your document and recompiles on change; also opens the document with your default pdf viewer.\n\n### Scripting\n\n- `typst#synstack(kwargs)`:\n    Detects the inner most syntax group under the cursor by default.\n    **Arguments.** Accepts a single argument `kwargs` of dictionary type that can include the following keys (with defaults).\n    *pos:* `getcurpos()[1:3]`.\n    *only_inner:* `v:true`.\n    **Note.** Does not work with treesitter enabled, see [#117].\n- `typst#in_markup(...)`:\n    Returns true if syntax under the cursor is in \"markup\" mode.\n    **Arguments.** Passes all arguments to `typst#synstack`.\n- `typst#in_code(...)`:\n    Returns true if syntax under the cursor is in \"code\" mode.\n    **Arguments.** Passes all arguments to `typst#synstack`.\n- `typst#in_math(...)`:\n    Returns true if syntax under the cursor is in \"math\" mode.\n    **Arguments.** Passes all arguments to `typst#synstack`.\n- `typst#in_comment(...)`:\n    Returns true if syntax under the cursor is a comment.\n    **Arguments.** Passes all arguments to `typst#synstack`.\n\n## Tips\n\nIf you are using `neovim` you can install [typst-lsp](https://github.com/nvarner/typst-lsp).\nThere exist a server configuration in `nvim-lspconfig` so it should be easy to set it up. The\nconfig currently requires that you're working in a git repo. Once the neovim+LSP recognizes\nthe file the LSP will compile your document while you write (almost like a wysiwyg!). By default\nit will compile on save but you can set it to compile-on-write as well.\n\n[#117]: https://github.com/kaarmu/typst.vim/issues/117\n\n"
  },
  {
    "path": "autoload/typst/options.vim",
    "content": "\nlet s:initialized = v:false\n\nfunction! typst#options#init() abort \" {{{1\n    if s:initialized | return | endif\n\n    call s:declare_option('typst_syntax_highlight', 1)\n    call s:declare_option('typst_cmd', 'typst')\n    call s:declare_option('typst_pdf_viewer', '')\n    call s:declare_option('typst_output_to_tmp', 0)\n    call s:declare_option('typst_conceal', 0)\n    call s:declare_option('typst_conceal_math', g:typst_conceal)\n    call s:declare_option('typst_conceal_emoji', g:typst_conceal)\n    call s:declare_option('typst_auto_close_toc', 0)\n    call s:declare_option('typst_auto_open_quickfix', 1)\n    call s:declare_option('typst_embedded_languages', [])\n    call s:declare_option('typst_folding', 0)\n    call s:declare_option('typst_foldnested', 1)\n\n    let s:initialized = v:true\nendfunction \" }}}1\n\nfunction! s:declare_option(option, default) \" {{{1\n    let l:option = 'g:' . a:option\n    if !exists(l:option)\n        let {l:option} = a:default\n    endif\nendfunction \" }}}1\n\n\" vim: tabstop=8 shiftwidth=4 softtabstop=4 expandtab\n"
  },
  {
    "path": "autoload/typst.vim",
    "content": "function! typst#TypstWatch(...)\n    \" Prepare command\n    \" NOTE: added arguments #23 but they will always be like\n    \" `typst <args> watch <file> --open` so in the future this might be\n    \" sensitive to in which order typst options should come.\n    let l:cmd = g:typst_cmd\n        \\ . ' watch'\n        \\ . ' ' . join(a:000)\n        \\ . ' --diagnostic-format short'\n        \\ . \" '\" . expand('%') . \"'\"\n\n    \" Add custom output directory if enabled\n    if g:typst_output_to_tmp\n        let l:file_path = expand('%:p')\n        let l:home_dir = expand('$HOME')\n        \" Remove HOME directory prefix if present\n        if l:file_path =~# '^' . l:home_dir\n            let l:relative_path = substitute(l:file_path, '^' . l:home_dir . '/', '', '')\n        else\n            let l:relative_path = l:file_path\n        endif\n        \" Strip .typ or .typst extension before adding .pdf\n        let l:relative_path = substitute(l:relative_path, '\\.\\(typ\\|typst\\)$', '', '')\n        let l:output_path = '/tmp/typst_out/' . l:relative_path . '.pdf'\n        \" Create output directory if it doesn't exist\n        let l:output_dir = fnamemodify(l:output_path, ':h')\n        call mkdir(l:output_dir, 'p')\n        let l:cmd = l:cmd . ' \"' . l:output_path . '\"'\n    endif\n\n    if !empty(g:typst_pdf_viewer)\n        let l:cmd = l:cmd . ' --open ' . g:typst_pdf_viewer\n    else\n        let l:cmd = l:cmd . ' --open'\n    endif\n\n    \" Write message\n    echom 'Starting: ' . l:cmd\n\n    let l:str = has('win32')\n              \\ ? 'cmd /s /c \"' . l:cmd . '\"'\n              \\ : 'sh -c \"' . l:cmd . '\"'\n\n    if has('nvim')\n        let l:JobStart = function('jobstart')\n        let l:JobStop = function('jobstop')\n        let l:options = {'on_stderr': 'typst#TypstWatcherCb'}\n    else\n        let l:JobStart = function('job_start')\n        let l:JobStop = function('job_stop')\n        let l:options = {'err_mode': 'raw',\n                        \\'err_cb': 'typst#TypstWatcherCb'}\n    endif\n\n    if exists('s:watcher') \" && job_status(s:watcher) == 'run'\n        \" echoerr 'TypstWatch is already running.'\n        call l:JobStop(s:watcher)\n    endif\n\n    let s:watcher = l:JobStart(l:str, l:options)\n\nendfunction\n\n\" Callback function for job exit\nfunction! typst#TypstWatcherCb(channel, content, ...)\n    let l:errors = []\n    let l:lines = a:content\n    if !has('nvim')\n\tlet l:lines = split(l:lines, \"\\n\")\n    endif\n    for l:line in l:lines\n        \" Probably this match can be done using errorformat.\n\t\" Maybe do something like vim-dispatch.\n        let l:match = matchlist(l:line, '\\v^([^:]+):(\\d+):(\\d+):\\s*(.+)$')\n        if 0 < len(l:match)\n            let l:error = {'filename': l:match[1],\n                          \\'lnum': l:match[2],\n                          \\'col': l:match[3],\n                          \\'text': l:match[4]}\n            call add(l:errors, l:error)\n        endif\n    endfor\n    call setqflist(l:errors)\n    if g:typst_auto_open_quickfix\n        execute empty(l:errors) ? 'cclose' : 'copen | wincmd p'\n    endif\nendfunction\n\n\" Below are adapted from preservim/vim-markdown\n\" They have their own MIT License at https://github.com/preservim/vim-markdown#license\nlet s:headersRegexp = '^='\n\n\" For each level, contains the regexp that matches at that level only.\n\"\nlet s:levelRegexpDict = {\n    \\ 1: '^=[^=]',\n    \\ 2: '^==[^=]',\n    \\ 3: '^===[^=]',\n    \\ 4: '^====[^=]',\n    \\ 5: '^=====[^=]',\n    \\ 6: '^======[^=]'\n\\ }\n\n\n\" Returns the level of the header at the given line.\n\"\n\" If there is no header at the given line, returns `0`.\n\"\nfunction! s:GetLevelOfHeaderAtLine(linenum)\n    let l:lines = join(getline(a:linenum, a:linenum + 1), \"\\n\")\n    for l:key in keys(s:levelRegexpDict)\n        if l:lines =~ get(s:levelRegexpDict, l:key)\n            return l:key\n        endif\n    endfor\n    return 0\nendfunction\n\nfunction! s:GetHeaderLineNum(...)\n    if a:0 == 0\n        let l:l = line('.')\n    else\n        let l:l = a:1\n    endif\n    while(l:l > 0)\n        if join(getline(l:l, l:l + 1), \"\\n\") =~ s:headersRegexp\n            return l:l\n        endif\n        let l:l -= 1\n    endwhile\n    return 0\nendfunction\n\nfunction! s:GetHeaderLevel(...)\n    if a:0 == 0\n        let l:line = line('.')\n    else\n        let l:line = a:1\n    endif\n    let l:linenum = s:GetHeaderLineNum(l:line)\n    if l:linenum !=# 0\n        return s:GetLevelOfHeaderAtLine(l:linenum)\n    else\n        return 0\n    endif\nendfunction\n\nfunction! s:GetHeaderList()\n    let l:bufnr = bufnr('%')\n    let l:fenced_block = 0\n    let l:front_matter = 0\n    let l:header_list = []\n    let l:vim_markdown_frontmatter = get(g:, 'vim_markdown_frontmatter', 0)\n    for i in range(1, line('$'))\n        let l:lineraw = getline(i)\n        let l:l1 = getline(i+1)\n        let l:line = substitute(l:lineraw, '#', \"\\\\\\#\", 'g')\n        if join(getline(i, i + 1), \"\\n\") =~# s:headersRegexp && l:line =~# '^\\S'\n            let l:is_header = 1\n        else\n            let l:is_header = 0\n        endif\n        if l:is_header ==# 1 && l:fenced_block ==# 0 && l:front_matter ==# 0\n            if match(l:line, '^#') > -1\n                let l:line = substitute(l:line, '\\v^#*[ ]*', '', '')\n                let l:line = substitute(l:line, '\\v[ ]*#*$', '', '')\n            endif\n            let l:level = s:GetHeaderLevel(i)\n            let l:item = {'level': l:level, 'text': l:line, 'lnum': i, 'bufnr': bufnr}\n            let l:header_list = l:header_list + [l:item]\n        endif\n    endfor\n    return l:header_list\nendfunction\n\nfunction! typst#Toc(...)\n    if a:0 > 0\n        let l:window_type = a:1\n    else\n        let l:window_type = 'vertical'\n    endif\n\n    let l:cursor_line = line('.')\n    let l:cursor_header = 0\n    let l:header_list = s:GetHeaderList()\n    let l:indented_header_list = []\n    if len(l:header_list) == 0\n        echom 'Toc: No headers.'\n        return\n    endif\n    let l:header_max_len = 0\n    let l:vim_markdown_toc_autofit = get(g:, 'vim_markdown_toc_autofit', 0)\n    for h in l:header_list\n        if l:cursor_header == 0\n            let l:header_line = h.lnum\n            if l:header_line == l:cursor_line\n                let l:cursor_header = index(l:header_list, h) + 1\n            elseif l:header_line > l:cursor_line\n                let l:cursor_header = index(l:header_list, h)\n            endif\n        endif\n        let l:text = repeat('  ', h.level-1) . h.text\n        let l:total_len = strdisplaywidth(l:text)\n        if l:total_len > l:header_max_len\n            let l:header_max_len = l:total_len\n        endif\n        let l:item = {'lnum': h.lnum, 'text': l:text, 'valid': 1, 'bufnr': h.bufnr, 'col': 1}\n        let l:indented_header_list = l:indented_header_list + [l:item]\n    endfor\n\n    \" Open the TOC buffer in a new window\n    let l:orig_winid = win_getid()\n    let l:toc_bufnr = bufnr('TOC', 1)\n    \" execute 'sbuffer ' . l:toc_bufnr\n    if a:0 > 0\n        if a:1 == 'vertical'\n            execute 'vsplit +buffer' . l:toc_bufnr\n            if (&columns/2) > l:header_max_len && l:vim_markdown_toc_autofit == 1\n                execute 'vertical resize ' . (l:header_max_len + 1 + 3)\n            else\n                execute 'vertical resize ' . (&columns/2)\n            endif\n        elseif a:1 == 'tab'\n            execute 'tabnew | buffer' . l:toc_bufnr\n        else\n            execute 'sbuffer ' . l:toc_bufnr\n        endif\n    else\n        execute 'sbuffer ' . l:toc_bufnr\n    endif\n\n    setlocal buftype=nofile\n    setlocal bufhidden=delete\n    call setbufline(l:toc_bufnr, 1, map(copy(l:indented_header_list), 'v:val.text'))\n    let b:indented_header_list = l:indented_header_list\n    let b:orig_winid = l:orig_winid\n\n    \" Define a mapping to jump to the corresponding line in the original file when a line is clicked\n    nnoremap <buffer> <silent> <Enter> :call <SID>JumpToHeader()<CR>\n\n    \" Move the cursor to the current header in the TOC\n    execute 'normal! ' . l:cursor_header . 'G'\n\nendfunction\n\nfunction! s:JumpToHeader()\n    let l:lnum = line('.')\n    let l:header_info = b:indented_header_list[l:lnum - 1]\n    let l:orig_winid = b:orig_winid\n    call win_execute(l:orig_winid, 'buffer ' . l:header_info.bufnr)\n    call win_execute(l:orig_winid, 'normal! ' . l:header_info.lnum . 'G')\n    if g:typst_auto_close_toc\n        bwipeout!\n    endif\n    call win_gotoid(l:orig_winid)\nendfunction\n\n\" Detect context for #51\n\" Detects the inner most syntax group under the cursor by default.\nfunction! typst#synstack(kwargs = {}) abort \n    let l:pos = get(a:kwargs, 'pos', getcurpos()[1:3])\n    let l:only_inner = get(a:kwargs, 'only_inner', v:true)\n    if mode() ==# 'i'\n        let l:pos[1] -= 1\n    endif\n    call map(l:pos, 'max([v:val, 1])')\n\n    let l:stack = map(synstack(l:pos[0], l:pos[1]), \"synIDattr(v:val, 'name')\")\n    return l:only_inner ? l:stack[-1:] : l:stack\nendfunction\n\nfunction! typst#in_markup(...) abort\n    let l:stack = call('typst#synstack', a:000)\n    let l:ret = empty(l:stack)\n    for l:name in l:stack\n        let l:ret = l:ret \n            \\ || l:name =~? '^typstMarkup'\n            \\ || l:name =~? 'Bracket$'\n    endfor\n    return l:ret\nendfunction\n\nfunction! typst#in_code(...) abort\n    let l:ret = v:false\n    for l:name in call('typst#synstack', a:000)\n        let l:ret = l:ret \n            \\ || l:name =~? '^typstCode'\n            \\ || l:name =~? 'Brace$'\n    endfor \n    return l:ret\nendfunction\n\nfunction! typst#in_math(...) abort\n    let l:ret = v:false\n    for l:name in call('typst#synstack', a:000)\n        let l:ret = l:ret \n            \\ || l:name =~? '^typstMath'\n            \\ || l:name =~? 'Dollar$'\n    endfor\n    return l:ret\nendfunction\n\nfunction! typst#in_comment(...) abort\n    let l:ret = v:false\n    for l:name in call('typst#synstack', a:000)\n        let l:ret = l:ret \n            \\ || l:name =~? '^typstComment'\n    endfor\n    return l:ret\nendfunction\n\n\nfunction! typst#foldexpr()\n    let line = getline(v:lnum)\n\n    \" Whenever the user wants to fold nested headers under the parent\n    let nested = g:typst_folding\n\n    \" Regular headers\n    let depth = match(line, '\\(^=\\+\\)\\@<=\\( .*$\\)\\@=')\n\n    \" Do not fold nested regular headers\n    if depth > 1 && !nested\n        let depth = 1\n    endif\n\n    if depth > 0\n        \" check syntax, it should be typstMarkupHeading\n        let syncode = synstack(v:lnum, 1)\n        if len(syncode) > 0 && synIDattr(syncode[0], 'name') ==# 'typstMarkupHeading'\n            return \">\" . depth\n        endif\n    endif\n\n    return \"=\"\nendfunction\n"
  },
  {
    "path": "compiler/typst.vim",
    "content": "\" Vim compiler file\n\" Compiler: typst\n\nif exists(\"current_compiler\")\n    finish\nendif\nlet current_compiler = g:typst_cmd\n\nlet s:save_cpo = &cpo\nset cpo&vim\n\nif exists(\":CompilerSet\") != 2\n    command -nargs=* CompilerSet setlocal <args>\nendif\n\n\" With `--diagnostic-format` we can use the default errorformat\nlet s:makeprg = [current_compiler, 'compile',\n              \\  '--diagnostic-format', 'short']\n\nif has('patch-7.4.191')\n    call add(s:makeprg, '%:S')\nelse\n    call add(s:makeprg, '%')\nendif\n\n\" This style of `CompilerSet makeprg` is non-typical.  The reason is that I\n\" want to avoid a long string of escaped spaces and we can very succinctly\n\" build makeprg.  You cannot write something like this `CompilerSet\n\" makeprg=s:makeprg`.\nexecute 'CompilerSet makeprg=' . join(s:makeprg, '\\ ')\n\nlet &cpo = s:save_cpo\nunlet s:save_cpo\n\" vim: tabstop=8 shiftwidth=4 softtabstop=4 expandtab\n"
  },
  {
    "path": "ftdetect/typst.vim",
    "content": "autocmd! BufRead,BufNewFile *.typ set filetype=typst\n"
  },
  {
    "path": "ftplugin/typst.vim",
    "content": "\" Only do this when not done yet for this buffer\nif exists(\"b:did_ftplugin\") | finish | endif\nlet b:did_ftplugin = 1\n\nlet s:cpo_orig = &cpo\nset cpo&vim\n\ncall typst#options#init()\n\ncompiler typst\n\n\" \" If you're on typst <v0.8, workaround for https://github.com/typst/typst/issues/1937\n\" set errorformat^=\\/%f:%l:%c:%m\n\nif !exists(\"g:typst_recommended_style\") || g:typst_recommended_style != 0\n    setlocal expandtab\n    setlocal tabstop=8\n    setlocal softtabstop=2\n    setlocal shiftwidth=2\nendif\n\nif g:typst_folding\n    setlocal foldexpr=typst#foldexpr()\n    setlocal foldmethod=expr\n    if !exists(\"b:undo_ftplugin\")\n        let b:undo_ftplugin = \"\"\n    endif\n    let b:undo_ftplugin .= \"|setl foldexpr< foldmethod<\"\nendif\n\nif g:typst_conceal\n    setlocal conceallevel=2\nendif\n\nsetlocal commentstring=//\\ %s\nsetlocal comments=s1:/*,mb:*,ex:*/,://\n\nsetlocal formatoptions+=croqn\nsetlocal formatlistpat=^\\\\s*\\\\d\\\\+[\\\\]:.)}\\\\t\\ ]\\\\s*\nsetlocal formatlistpat+=\\\\\\|^\\\\s*[-+\\]\\\\s\\\\+\n\nif has('win32')\n    setlocal iskeyword=a-z,A-Z,48-57,_,-,128-167,224-235\nelse\n    setlocal iskeyword=a-z,A-Z,48-57,_,-,192-255\nendif\n\nsetlocal suffixesadd=.typ\n\ncommand! -nargs=* -buffer TypstWatch call typst#TypstWatch(<f-args>)\n\ncommand! -buffer Toc call typst#Toc('vertical')\ncommand! -buffer Toch call typst#Toc('horizontal')\ncommand! -buffer Tocv call typst#Toc('vertical')\ncommand! -buffer Toct call typst#Toc('tab')\n\nlet &cpo = s:cpo_orig\nunlet s:cpo_orig\n\n\" vim: tabstop=8 shiftwidth=4 softtabstop=4 expandtab\n"
  },
  {
    "path": "indent/typst.vim",
    "content": "if exists('b:did_indent')\n  finish\nendif\n\nlet b:did_indent = 1\n\nlet s:cpo_save = &cpoptions\nset cpoptions&vim\n\nsetlocal autoindent\nsetlocal indentexpr=TypstIndentExpr()\n\" setlocal indentkeys=... \" We use the default\n\n\" This wrapper function is used to enhance performance.\nfunction! TypstIndentExpr() abort\n    return TypstIndent(v:lnum)\nendfunction\n\nfunction! TypstIndent(lnum) abort \" {{{1\n    let s:sw = shiftwidth()\n\n    let [l:plnum, l:pline] = s:get_prev_nonblank(a:lnum - 1)\n    if l:plnum == 0 | return 0 | endif\n\n    let l:line = getline(a:lnum)\n    let l:ind = indent(l:plnum)\n\n    let l:synname = synIDattr(synID(a:lnum, 1, 1), \"name\")\n\n    \" Use last indent for block comments\n    if l:synname == 'typstCommentBlock'\n        return l:ind\n    \" do not change the indents of bullet lists\n    elseif l:synname == 'typstMarkupBulletList'\n        return indent(a:lnum)\n    endif\n\n    if l:pline =~ '\\v[{[(]\\s*$'\n        let l:ind += s:sw\n    endif\n\n    if l:line =~ '\\v^\\s*[}\\])]'\n        let l:ind -= s:sw\n    endif\n\n    return l:ind\nendfunction\n\" }}}1\n\n\" Gets the previous non-blank line that is not a comment.\nfunction! s:get_prev_nonblank(lnum) abort \" {{{1\n    let l:lnum = prevnonblank(a:lnum)\n    let l:line = getline(l:lnum)\n\n    while l:lnum > 0 && l:line =~ '^\\s*//'\n        let l:lnum = prevnonblank(l:lnum - 1)\n        let l:line = getline(l:lnum)\n    endwhile\n\n    return [l:lnum, s:remove_comments(l:line)]\nendfunction\n\" }}}1\n\n\" Removes comments from the given line.\nfunction! s:remove_comments(line) abort \" {{{1\n    return substitute(a:line, '\\s*//.*', '', '')\nendfunction\n\" }}}1\n\nlet &cpoptions = s:cpo_save\nunlet s:cpo_save\n\n\" vim: et sts=2 sw=2 ft=vim\n"
  },
  {
    "path": "syntax/typst-embedded.vim",
    "content": "\" Vim syntax file\n\" Language: Typst\n\" Maintainer: Kaj Munhoz Arfvidsson\n\" Upstream: https://github.com/kaarmu/typst.vim\n\nfor s:name in g:typst_embedded_languages\n    let s:langname = substitute(s:name, '  *-> .*$', '', '')\n    let s:langfile = substitute(s:name, '^.* ->  *', '', '')\n    let s:include = ['syntax include'\n                \\   ,'@typstEmbedded_'..s:langname\n                \\   ,'syntax/'..s:langfile..'.vim']\n    let s:rule = ['syn region'\n                \\,s:langname\n                \\,'matchgroup=Macro'\n                \\,'start=/```'..s:langname..'\\>/ end=/```/'\n                \\,'contains=@typstEmbedded_'..s:langname\n                \\,'keepend']\n    if g:typst_conceal\n        let s:rule += ['concealends']\n    endif\n    execute 'silent! ' .. join(s:include, ' ')\n    unlet! b:current_syntax\n    execute join(s:rule, ' ')\nendfor\n\n\" vim: sw=4 sts=4 et fdm=marker fdl=0\n"
  },
  {
    "path": "syntax/typst-emoji.vim",
    "content": "\" Vim syntax file\n\" Language: Typst\n\" Maintainer: Kaj Munhoz Arfvidsson\n\" Upstream: https://github.com/kaarmu/typst.vim\n\nlet s:typstEmojiList = [\n    \\ ['abacus', '🧮'],\n    \\ ['abc', '🔤'],\n    \\ ['abcd', '🔡'],\n    \\ ['ABCD', '🔠'],\n    \\ ['accordion', '🪗'],\n    \\ ['aesculapius', '⚕'],\n    \\ ['airplane', '✈'],\n    \\ ['airplane\\.landing', '🛬'],\n    \\ ['airplane\\.small', '🛩'],\n    \\ ['airplane\\.takeoff', '🛫'],\n    \\ ['alembic', '⚗'],\n    \\ ['alien', '👽'],\n    \\ ['alien\\.monster', '👾'],\n    \\ ['ambulance', '🚑'],\n    \\ ['amphora', '🏺'],\n    \\ ['anchor', '⚓'],\n    \\ ['anger', '💢'],\n    \\ ['ant', '🐜'],\n    \\ ['apple\\.green', '🍏'],\n    \\ ['apple\\.red', '🍎'],\n    \\ ['arm\\.mech', '🦾'],\n    \\ ['arm\\.muscle', '💪'],\n    \\ ['arm\\.selfie', '🤳'],\n    \\ ['arrow\\.r\\.filled', '➡'],\n    \\ ['arrow\\.r\\.hook', '↪'],\n    \\ ['arrow\\.r\\.soon', '🔜'],\n    \\ ['arrow\\.l\\.filled', '⬅'],\n    \\ ['arrow\\.l\\.hook', '↩'],\n    \\ ['arrow\\.l\\.back', '🔙'],\n    \\ ['arrow\\.l\\.end', '🔚'],\n    \\ ['arrow\\.t\\.filled', '⬆'],\n    \\ ['arrow\\.t\\.curve', '⤴'],\n    \\ ['arrow\\.t\\.top', '🔝'],\n    \\ ['arrow\\.b\\.filled', '⬇'],\n    \\ ['arrow\\.b\\.curve', '⤵'],\n    \\ ['arrow\\.l\\.r', '↔'],\n    \\ ['arrow\\.l\\.r\\.on', '🔛'],\n    \\ ['arrow\\.t\\.b', '↕'],\n    \\ ['arrow\\.bl', '↙'],\n    \\ ['arrow\\.br', '↘'],\n    \\ ['arrow\\.tl', '↖'],\n    \\ ['arrow\\.tr', '↗'],\n    \\ ['arrows\\.cycle', '🔄'],\n    \\ ['ast', '*'],\n    \\ ['ast\\.box', '✳'],\n    \\ ['atm', '🏧'],\n    \\ ['atom', '⚛'],\n    \\ ['aubergine', '🍆'],\n    \\ ['avocado', '🥑'],\n    \\ ['axe', '🪓'],\n    \\ ['baby', '👶'],\n    \\ ['baby\\.angel', '👼'],\n    \\ ['baby\\.box', '🚼'],\n    \\ ['babybottle', '🍼'],\n    \\ ['backpack', '🎒'],\n    \\ ['bacon', '🥓'],\n    \\ ['badger', '🦡'],\n    \\ ['badminton', '🏸'],\n    \\ ['bagel', '🥯'],\n    \\ ['baggageclaim', '🛄'],\n    \\ ['baguette', '🥖'],\n    \\ ['balloon', '🎈'],\n    \\ ['ballot\\.check', '☑'],\n    \\ ['ballotbox', '🗳'],\n    \\ ['banana', '🍌'],\n    \\ ['banjo', '🪕'],\n    \\ ['bank', '🏦'],\n    \\ ['barberpole', '💈'],\n    \\ ['baseball', '⚾'],\n    \\ ['basecap', '🧢'],\n    \\ ['basket', '🧺'],\n    \\ ['basketball', '⛹'],\n    \\ ['basketball\\.ball', '🏀'],\n    \\ ['bat', '🦇'],\n    \\ ['bathtub', '🛀'],\n    \\ ['bathtub\\.foam', '🛁'],\n    \\ ['battery', '🔋'],\n    \\ ['battery\\.low', '🪫'],\n    \\ ['beach\\.palm', '🏝'],\n    \\ ['beach\\.umbrella', '🏖'],\n    \\ ['beads', '📿'],\n    \\ ['beans', '🫘'],\n    \\ ['bear', '🐻'],\n    \\ ['beaver', '🦫'],\n    \\ ['bed', '🛏'],\n    \\ ['bed\\.person', '🛌'],\n    \\ ['bee', '🐝'],\n    \\ ['beer', '🍺'],\n    \\ ['beer\\.clink', '🍻'],\n    \\ ['beetle', '🪲'],\n    \\ ['beetle\\.lady', '🐞'],\n    \\ ['bell', '🔔'],\n    \\ ['bell\\.ding', '🛎'],\n    \\ ['bell\\.not', '🔕'],\n    \\ ['bento', '🍱'],\n    \\ ['bicyclist', '🚴'],\n    \\ ['bicyclist\\.mountain', '🚵'],\n    \\ ['bike', '🚲'],\n    \\ ['bike\\.not', '🚳'],\n    \\ ['bikini', '👙'],\n    \\ ['billiards', '🎱'],\n    \\ ['bin', '🗑'],\n    \\ ['biohazard', '☣'],\n    \\ ['bird', '🐦'],\n    \\ ['bison', '🦬'],\n    \\ ['blood', '🩸'],\n    \\ ['blouse', '👚'],\n    \\ ['blowfish', '🐡'],\n    \\ ['blueberries', '🫐'],\n    \\ ['boar', '🐗'],\n    \\ ['boat\\.sail', '⛵'],\n    \\ ['boat\\.row', '🚣'],\n    \\ ['boat\\.motor', '🛥'],\n    \\ ['boat\\.speed', '🚤'],\n    \\ ['boat\\.canoe', '🛶'],\n    \\ ['bolt', '🔩'],\n    \\ ['bomb', '💣'],\n    \\ ['bone', '🦴'],\n    \\ ['book\\.red', '📕'],\n    \\ ['book\\.blue', '📘'],\n    \\ ['book\\.green', '📗'],\n    \\ ['book\\.orange', '📙'],\n    \\ ['book\\.spiral', '📒'],\n    \\ ['book\\.open', '📖'],\n    \\ ['bookmark', '🔖'],\n    \\ ['books', '📚'],\n    \\ ['boomerang', '🪃'],\n    \\ ['bordercontrol', '🛂'],\n    \\ ['bouquet', '💐'],\n    \\ ['bow', '🏹'],\n    \\ ['bowl\\.spoon', '🥣'],\n    \\ ['bowl\\.steam', '🍜'],\n    \\ ['bowling', '🎳'],\n    \\ ['boxing', '🥊'],\n    \\ ['boy', '👦'],\n    \\ ['brain', '🧠'],\n    \\ ['bread', '🍞'],\n    \\ ['brick', '🧱'],\n    \\ ['bride', '👰'],\n    \\ ['bridge\\.fog', '🌁'],\n    \\ ['bridge\\.night', '🌉'],\n    \\ ['briefcase', '💼'],\n    \\ ['briefs', '🩲'],\n    \\ ['brightness\\.high', '🔆'],\n    \\ ['brightness\\.low', '🔅'],\n    \\ ['broccoli', '🥦'],\n    \\ ['broom', '🧹'],\n    \\ ['brush', '🖌'],\n    \\ ['bubble\\.speech\\.r', '💬'],\n    \\ ['bubble\\.speech\\.l', '🗨'],\n    \\ ['bubble\\.thought', '💭'],\n    \\ ['bubble\\.anger\\.r', '🗯'],\n    \\ ['bubbles', '🫧'],\n    \\ ['bubbletea', '🧋'],\n    \\ ['bucket', '🪣'],\n    \\ ['buffalo\\.water', '🐃'],\n    \\ ['bug', '🐛'],\n    \\ ['builder', '👷'],\n    \\ ['burger', '🍔'],\n    \\ ['burrito', '🌯'],\n    \\ ['bus', '🚌'],\n    \\ ['bus\\.front', '🚍'],\n    \\ ['bus\\.small', '🚐'],\n    \\ ['bus\\.stop', '🚏'],\n    \\ ['bus\\.trolley', '🚎'],\n    \\ ['butter', '🧈'],\n    \\ ['butterfly', '🦋'],\n    \\ ['button', '🔲'],\n    \\ ['button\\.alt', '🔳'],\n    \\ ['button\\.radio', '🔘'],\n    \\ ['cabinet\\.file', '🗄'],\n    \\ ['cablecar', '🚠'],\n    \\ ['cablecar\\.small', '🚡'],\n    \\ ['cactus', '🌵'],\n    \\ ['cake', '🎂'],\n    \\ ['cake\\.fish', '🍥'],\n    \\ ['cake\\.moon', '🥮'],\n    \\ ['cake\\.slice', '🍰'],\n    \\ ['calendar', '📅'],\n    \\ ['calendar\\.spiral', '🗓'],\n    \\ ['calendar\\.tearoff', '📆'],\n    \\ ['camel', '🐫'],\n    \\ ['camel\\.dromedar', '🐪'],\n    \\ ['camera', '📷'],\n    \\ ['camera\\.flash', '📸'],\n    \\ ['camera\\.movie', '🎥'],\n    \\ ['camera\\.movie\\.box', '🎦'],\n    \\ ['camera\\.video', '📹'],\n    \\ ['camping', '🏕'],\n    \\ ['can', '🥫'],\n    \\ ['candle', '🕯'],\n    \\ ['candy', '🍬'],\n    \\ ['cane', '🦯'],\n    \\ ['car', '🚗'],\n    \\ ['car\\.front', '🚘'],\n    \\ ['car\\.pickup', '🛻'],\n    \\ ['car\\.police', '🚓'],\n    \\ ['car\\.police\\.front', '🚔'],\n    \\ ['car\\.racing', '🏎'],\n    \\ ['car\\.rickshaw', '🛺'],\n    \\ ['car\\.suv', '🚙'],\n    \\ ['card\\.credit', '💳'],\n    \\ ['card\\.id', '🪪'],\n    \\ ['cardindex', '📇'],\n    \\ ['carrot', '🥕'],\n    \\ ['cart', '🛒'],\n    \\ ['cassette', '📼'],\n    \\ ['castle\\.eu', '🏰'],\n    \\ ['castle\\.jp', '🏯'],\n    \\ ['cat', '🐈'],\n    \\ ['cat\\.face', '🐱'],\n    \\ ['cat\\.face\\.angry', '😾'],\n    \\ ['cat\\.face\\.cry', '😿'],\n    \\ ['cat\\.face\\.heart', '😻'],\n    \\ ['cat\\.face\\.joy', '😹'],\n    \\ ['cat\\.face\\.kiss', '😽'],\n    \\ ['cat\\.face\\.laugh', '😸'],\n    \\ ['cat\\.face\\.shock', '🙀'],\n    \\ ['cat\\.face\\.smile', '😺'],\n    \\ ['cat\\.face\\.smirk', '😼'],\n    \\ ['chain', '🔗'],\n    \\ ['chains', '⛓'],\n    \\ ['chair', '🪑'],\n    \\ ['champagne', '🍾'],\n    \\ ['chart\\.bar', '📊'],\n    \\ ['chart\\.up', '📈'],\n    \\ ['chart\\.down', '📉'],\n    \\ ['chart\\.yen\\.up', '💹'],\n    \\ ['checkmark\\.heavy', '✔'],\n    \\ ['checkmark\\.box', '✅'],\n    \\ ['cheese', '🧀'],\n    \\ ['cherries', '🍒'],\n    \\ ['chess', '♟'],\n    \\ ['chestnut', '🌰'],\n    \\ ['chicken', '🐔'],\n    \\ ['chicken\\.baby', '🐥'],\n    \\ ['chicken\\.baby\\.egg', '🐣'],\n    \\ ['chicken\\.baby\\.head', '🐤'],\n    \\ ['chicken\\.leg', '🍗'],\n    \\ ['chicken\\.male', '🐓'],\n    \\ ['child', '🧒'],\n    \\ ['chipmunk', '🐿'],\n    \\ ['chocolate', '🍫'],\n    \\ ['chopsticks', '🥢'],\n    \\ ['church', '⛪'],\n    \\ ['church\\.love', '💒'],\n    \\ ['cigarette', '🚬'],\n    \\ ['cigarette\\.not', '🚭'],\n    \\ ['circle\\.black', '⚫'],\n    \\ ['circle\\.blue', '🔵'],\n    \\ ['circle\\.brown', '🟤'],\n    \\ ['circle\\.green', '🟢'],\n    \\ ['circle\\.orange', '🟠'],\n    \\ ['circle\\.purple', '🟣'],\n    \\ ['circle\\.white', '⚪'],\n    \\ ['circle\\.red', '🔴'],\n    \\ ['circle\\.yellow', '🟡'],\n    \\ ['circle\\.stroked', '⭕'],\n    \\ ['circus', '🎪'],\n    \\ ['city', '🏙'],\n    \\ ['city\\.dusk', '🌆'],\n    \\ ['city\\.night', '🌃'],\n    \\ ['city\\.sunset', '🌇'],\n    \\ ['clamp', '🗜'],\n    \\ ['clapperboard', '🎬'],\n    \\ ['climbing', '🧗'],\n    \\ ['clip', '📎'],\n    \\ ['clipboard', '📋'],\n    \\ ['clips', '🖇'],\n    \\ ['clock\\.one', '🕐'],\n    \\ ['clock\\.one\\.thirty', '🕜'],\n    \\ ['clock\\.two', '🕑'],\n    \\ ['clock\\.two\\.thirty', '🕝'],\n    \\ ['clock\\.three', '🕒'],\n    \\ ['clock\\.three\\.thirty', '🕞'],\n    \\ ['clock\\.four', '🕓'],\n    \\ ['clock\\.four\\.thirty', '🕟'],\n    \\ ['clock\\.five', '🕔'],\n    \\ ['clock\\.five\\.thirty', '🕠'],\n    \\ ['clock\\.six', '🕕'],\n    \\ ['clock\\.six\\.thirty', '🕡'],\n    \\ ['clock\\.seven', '🕖'],\n    \\ ['clock\\.seven\\.thirty', '🕢'],\n    \\ ['clock\\.eight', '🕗'],\n    \\ ['clock\\.eight\\.thirty', '🕣'],\n    \\ ['clock\\.nine', '🕘'],\n    \\ ['clock\\.nine\\.thirty', '🕤'],\n    \\ ['clock\\.ten', '🕙'],\n    \\ ['clock\\.ten\\.thirty', '🕥'],\n    \\ ['clock\\.eleven', '🕚'],\n    \\ ['clock\\.eleven\\.thirty', '🕦'],\n    \\ ['clock\\.twelve', '🕛'],\n    \\ ['clock\\.twelve\\.thirty', '🕧'],\n    \\ ['clock\\.alarm', '⏰'],\n    \\ ['clock\\.old', '🕰'],\n    \\ ['clock\\.timer', '⏲'],\n    \\ ['cloud', '☁'],\n    \\ ['cloud\\.dust', '💨'],\n    \\ ['cloud\\.rain', '🌧'],\n    \\ ['cloud\\.snow', '🌨'],\n    \\ ['cloud\\.storm', '⛈'],\n    \\ ['cloud\\.sun', '⛅'],\n    \\ ['cloud\\.sun\\.hidden', '🌥'],\n    \\ ['cloud\\.sun\\.rain', '🌦'],\n    \\ ['cloud\\.thunder', '🌩'],\n    \\ ['coat', '🧥'],\n    \\ ['coat\\.lab', '🥼'],\n    \\ ['cockroach', '🪳'],\n    \\ ['cocktail\\.martini', '🍸'],\n    \\ ['cocktail\\.tropical', '🍹'],\n    \\ ['coconut', '🥥'],\n    \\ ['coffee', '☕'],\n    \\ ['coffin', '⚰'],\n    \\ ['coin', '🪙'],\n    \\ ['comet', '☄'],\n    \\ ['compass', '🧭'],\n    \\ ['computer', '🖥'],\n    \\ ['computermouse', '🖱'],\n    \\ ['confetti', '🎊'],\n    \\ ['construction', '🚧'],\n    \\ ['controller', '🎮'],\n    \\ ['cookie', '🍪'],\n    \\ ['cookie\\.fortune', '🥠'],\n    \\ ['cooking', '🍳'],\n    \\ ['cool', '🆒'],\n    \\ ['copyright', '©'],\n    \\ ['coral', '🪸'],\n    \\ ['corn', '🌽'],\n    \\ ['couch', '🛋'],\n    \\ ['couple', '💑'],\n    \\ ['cow', '🐄'],\n    \\ ['cow\\.face', '🐮'],\n    \\ ['crab', '🦀'],\n    \\ ['crane', '🏗'],\n    \\ ['crayon', '🖍'],\n    \\ ['cricket', '🦗'],\n    \\ ['cricketbat', '🏏'],\n    \\ ['crocodile', '🐊'],\n    \\ ['croissant', '🥐'],\n    \\ ['crossmark', '❌'],\n    \\ ['crossmark\\.box', '❎'],\n    \\ ['crown', '👑'],\n    \\ ['crutch', '🩼'],\n    \\ ['crystal', '🔮'],\n    \\ ['cucumber', '🥒'],\n    \\ ['cup\\.straw', '🥤'],\n    \\ ['cupcake', '🧁'],\n    \\ ['curling', '🥌'],\n    \\ ['curry', '🍛'],\n    \\ ['custard', '🍮'],\n    \\ ['customs', '🛃'],\n    \\ ['cutlery', '🍴'],\n    \\ ['cyclone', '🌀'],\n    \\ ['dancing\\.man', '🕺'],\n    \\ ['dancing\\.woman', '💃'],\n    \\ ['dancing\\.women\\.bunny', '👯'],\n    \\ ['darts', '🎯'],\n    \\ ['dash\\.wave\\.double', '〰'],\n    \\ ['deer', '🦌'],\n    \\ ['desert', '🏜'],\n    \\ ['detective', '🕵'],\n    \\ ['diamond\\.blue', '🔷'],\n    \\ ['diamond\\.blue\\.small', '🔹'],\n    \\ ['diamond\\.orange', '🔶'],\n    \\ ['diamond\\.orange\\.small', '🔸'],\n    \\ ['diamond\\.dot', '💠'],\n    \\ ['die', '🎲'],\n    \\ ['dino\\.pod', '🦕'],\n    \\ ['dino\\.rex', '🦖'],\n    \\ ['disc\\.cd', '💿'],\n    \\ ['disc\\.dvd', '📀'],\n    \\ ['disc\\.mini', '💽'],\n    \\ ['discoball', '🪩'],\n    \\ ['diving', '🤿'],\n    \\ ['dodo', '🦤'],\n    \\ ['dog', '🐕'],\n    \\ ['dog\\.face', '🐶'],\n    \\ ['dog\\.guide', '🦮'],\n    \\ ['dog\\.poodle', '🐩'],\n    \\ ['dollar', '💲'],\n    \\ ['dolphin', '🐬'],\n    \\ ['donut', '🍩'],\n    \\ ['door', '🚪'],\n    \\ ['dove\\.peace', '🕊'],\n    \\ ['dragon', '🐉'],\n    \\ ['dragon\\.face', '🐲'],\n    \\ ['dress', '👗'],\n    \\ ['dress\\.kimono', '👘'],\n    \\ ['dress\\.sari', '🥻'],\n    \\ ['drop', '💧'],\n    \\ ['drops', '💦'],\n    \\ ['drum', '🥁'],\n    \\ ['drum\\.big', '🪘'],\n    \\ ['duck', '🦆'],\n    \\ ['dumpling', '🥟'],\n    \\ ['eagle', '🦅'],\n    \\ ['ear', '👂'],\n    \\ ['ear\\.aid', '🦻'],\n    \\ ['egg', '🥚'],\n    \\ ['eighteen\\.not', '🔞'],\n    \\ ['elephant', '🐘'],\n    \\ ['elevator', '🛗'],\n    \\ ['elf', '🧝'],\n    \\ ['email', '📧'],\n    \\ ['excl', '❗'],\n    \\ ['excl\\.white', '❕'],\n    \\ ['excl\\.double', '‼'],\n    \\ ['excl\\.quest', '⁉'],\n    \\ ['explosion', '💥'],\n    \\ ['extinguisher', '🧯'],\n    \\ ['eye', '👁'],\n    \\ ['eyes', '👀'],\n    \\ ['face\\.grin', '😀'],\n    \\ ['face\\.angry', '😠'],\n    \\ ['face\\.angry\\.red', '😡'],\n    \\ ['face\\.anguish', '😧'],\n    \\ ['face\\.astonish', '😲'],\n    \\ ['face\\.bandage', '🤕'],\n    \\ ['face\\.beam', '😁'],\n    \\ ['face\\.blank', '😶'],\n    \\ ['face\\.clown', '🤡'],\n    \\ ['face\\.cold', '🥶'],\n    \\ ['face\\.concern', '😦'],\n    \\ ['face\\.cool', '😎'],\n    \\ ['face\\.cover', '🤭'],\n    \\ ['face\\.cowboy', '🤠'],\n    \\ ['face\\.cry', '😭'],\n    \\ ['face\\.devil\\.smile', '😈'],\n    \\ ['face\\.devil\\.frown', '👿'],\n    \\ ['face\\.diagonal', '🫤'],\n    \\ ['face\\.disguise', '🥸'],\n    \\ ['face\\.dizzy', '😵'],\n    \\ ['face\\.dotted', '🫥'],\n    \\ ['face\\.down', '😞'],\n    \\ ['face\\.down\\.sweat', '😓'],\n    \\ ['face\\.drool', '🤤'],\n    \\ ['face\\.explode', '🤯'],\n    \\ ['face\\.eyeroll', '🙄'],\n    \\ ['face\\.friendly', '☺'],\n    \\ ['face\\.fear', '😨'],\n    \\ ['face\\.fear\\.sweat', '😰'],\n    \\ ['face\\.fever', '🤒'],\n    \\ ['face\\.flush', '😳'],\n    \\ ['face\\.frown', '☹'],\n    \\ ['face\\.frown\\.slight', '🙁'],\n    \\ ['face\\.frust', '😣'],\n    \\ ['face\\.goofy', '🤪'],\n    \\ ['face\\.halo', '😇'],\n    \\ ['face\\.happy', '😊'],\n    \\ ['face\\.heart', '😍'],\n    \\ ['face\\.hearts', '🥰'],\n    \\ ['face\\.heat', '🥵'],\n    \\ ['face\\.hug', '🤗'],\n    \\ ['face\\.inv', '🙃'],\n    \\ ['face\\.joy', '😂'],\n    \\ ['face\\.kiss', '😗'],\n    \\ ['face\\.kiss\\.smile', '😙'],\n    \\ ['face\\.kiss\\.heart', '😘'],\n    \\ ['face\\.kiss\\.blush', '😚'],\n    \\ ['face\\.lick', '😋'],\n    \\ ['face\\.lie', '🤥'],\n    \\ ['face\\.mask', '😷'],\n    \\ ['face\\.meh', '😒'],\n    \\ ['face\\.melt', '🫠'],\n    \\ ['face\\.money', '🤑'],\n    \\ ['face\\.monocle', '🧐'],\n    \\ ['face\\.nausea', '🤢'],\n    \\ ['face\\.nerd', '🤓'],\n    \\ ['face\\.neutral', '😐'],\n    \\ ['face\\.open', '😃'],\n    \\ ['face\\.party', '🥳'],\n    \\ ['face\\.peek', '🫣'],\n    \\ ['face\\.plead', '🥺'],\n    \\ ['face\\.relief', '😌'],\n    \\ ['face\\.rofl', '🤣'],\n    \\ ['face\\.sad', '😔'],\n    \\ ['face\\.salute', '🫡'],\n    \\ ['face\\.shock', '😱'],\n    \\ ['face\\.shush', '🤫'],\n    \\ ['face\\.skeptic', '🤨'],\n    \\ ['face\\.sleep', '😴'],\n    \\ ['face\\.sleepy', '😪'],\n    \\ ['face\\.smile', '😄'],\n    \\ ['face\\.smile\\.slight', '🙂'],\n    \\ ['face\\.smile\\.sweat', '😅'],\n    \\ ['face\\.smile\\.tear', '🥲'],\n    \\ ['face\\.smirk', '😏'],\n    \\ ['face\\.sneeze', '🤧'],\n    \\ ['face\\.speak\\.not', '🫢'],\n    \\ ['face\\.squint', '😆'],\n    \\ ['face\\.stars', '🤩'],\n    \\ ['face\\.straight', '😑'],\n    \\ ['face\\.suffer', '😖'],\n    \\ ['face\\.surprise', '😯'],\n    \\ ['face\\.symbols', '🤬'],\n    \\ ['face\\.tear', '😢'],\n    \\ ['face\\.tear\\.relief', '😥'],\n    \\ ['face\\.tear\\.withheld', '🥹'],\n    \\ ['face\\.teeth', '😬'],\n    \\ ['face\\.think', '🤔'],\n    \\ ['face\\.tired', '😫'],\n    \\ ['face\\.tongue', '😛'],\n    \\ ['face\\.tongue\\.squint', '😝'],\n    \\ ['face\\.tongue\\.wink', '😜'],\n    \\ ['face\\.triumph', '😤'],\n    \\ ['face\\.unhappy', '😕'],\n    \\ ['face\\.vomit', '🤮'],\n    \\ ['face\\.weary', '😩'],\n    \\ ['face\\.wink', '😉'],\n    \\ ['face\\.woozy', '🥴'],\n    \\ ['face\\.worry', '😟'],\n    \\ ['face\\.wow', '😮'],\n    \\ ['face\\.yawn', '🥱'],\n    \\ ['face\\.zip', '🤐'],\n    \\ ['factory', '🏭'],\n    \\ ['fairy', '🧚'],\n    \\ ['faith\\.christ', '✝'],\n    \\ ['faith\\.dharma', '☸'],\n    \\ ['faith\\.islam', '☪'],\n    \\ ['faith\\.judaism', '✡'],\n    \\ ['faith\\.menorah', '🕎'],\n    \\ ['faith\\.om', '🕉'],\n    \\ ['faith\\.orthodox', '☦'],\n    \\ ['faith\\.peace', '☮'],\n    \\ ['faith\\.star\\.dot', '🔯'],\n    \\ ['faith\\.worship', '🛐'],\n    \\ ['faith\\.yinyang', '☯'],\n    \\ ['falafel', '🧆'],\n    \\ ['family', '👪'],\n    \\ ['fax', '📠'],\n    \\ ['feather', '🪶'],\n    \\ ['feeding\\.breast', '🤱'],\n    \\ ['fencing', '🤺'],\n    \\ ['ferriswheel', '🎡'],\n    \\ ['filebox', '🗃'],\n    \\ ['filedividers', '🗂'],\n    \\ ['film', '🎞'],\n    \\ ['finger\\.r', '👉'],\n    \\ ['finger\\.l', '👈'],\n    \\ ['finger\\.t', '👆'],\n    \\ ['finger\\.t\\.alt', '☝'],\n    \\ ['finger\\.b', '👇'],\n    \\ ['finger\\.front', '🫵'],\n    \\ ['finger\\.m', '🖕'],\n    \\ ['fingers\\.cross', '🤞'],\n    \\ ['fingers\\.pinch', '🤌'],\n    \\ ['fingers\\.snap', '🫰'],\n    \\ ['fire', '🔥'],\n    \\ ['firecracker', '🧨'],\n    \\ ['fireengine', '🚒'],\n    \\ ['fireworks', '🎆'],\n    \\ ['fish', '🐟'],\n    \\ ['fish\\.tropical', '🐠'],\n    \\ ['fishing', '🎣'],\n    \\ ['fist\\.front', '👊'],\n    \\ ['fist\\.r', '🤜'],\n    \\ ['fist\\.l', '🤛'],\n    \\ ['fist\\.raised', '✊'],\n    \\ ['flag\\.black', '🏴'],\n    \\ ['flag\\.white', '🏳'],\n    \\ ['flag\\.goal', '🏁'],\n    \\ ['flag\\.golf', '⛳'],\n    \\ ['flag\\.red', '🚩'],\n    \\ ['flags\\.jp\\.crossed', '🎌'],\n    \\ ['flamingo', '🦩'],\n    \\ ['flashlight', '🔦'],\n    \\ ['flatbread', '🫓'],\n    \\ ['fleur', '⚜'],\n    \\ ['floppy', '💾'],\n    \\ ['flower\\.hibiscus', '🌺'],\n    \\ ['flower\\.lotus', '🪷'],\n    \\ ['flower\\.pink', '🌸'],\n    \\ ['flower\\.rose', '🌹'],\n    \\ ['flower\\.sun', '🌻'],\n    \\ ['flower\\.tulip', '🌷'],\n    \\ ['flower\\.white', '💮'],\n    \\ ['flower\\.wilted', '🥀'],\n    \\ ['flower\\.yellow', '🌼'],\n    \\ ['fly', '🪰'],\n    \\ ['fog', '🌫'],\n    \\ ['folder', '📁'],\n    \\ ['folder\\.open', '📂'],\n    \\ ['fondue', '🫕'],\n    \\ ['foot', '🦶'],\n    \\ ['football', '⚽'],\n    \\ ['football\\.am', '🏈'],\n    \\ ['forex', '💱'],\n    \\ ['fountain', '⛲'],\n    \\ ['fox', '🦊'],\n    \\ ['free', '🆓'],\n    \\ ['fries', '🍟'],\n    \\ ['frisbee', '🥏'],\n    \\ ['frog\\.face', '🐸'],\n    \\ ['fuelpump', '⛽'],\n    \\ ['garlic', '🧄'],\n    \\ ['gear', '⚙'],\n    \\ ['gem', '💎'],\n    \\ ['genie', '🧞'],\n    \\ ['ghost', '👻'],\n    \\ ['giraffe', '🦒'],\n    \\ ['girl', '👧'],\n    \\ ['glass\\.clink', '🥂'],\n    \\ ['glass\\.milk', '🥛'],\n    \\ ['glass\\.pour', '🫗'],\n    \\ ['glass\\.tumbler', '🥃'],\n    \\ ['glasses', '👓'],\n    \\ ['glasses\\.sun', '🕶'],\n    \\ ['globe\\.am', '🌎'],\n    \\ ['globe\\.as\\.au', '🌏'],\n    \\ ['globe\\.eu\\.af', '🌍'],\n    \\ ['globe\\.meridian', '🌐'],\n    \\ ['gloves', '🧤'],\n    \\ ['goal', '🥅'],\n    \\ ['goat', '🐐'],\n    \\ ['goggles', '🥽'],\n    \\ ['golfing', '🏌'],\n    \\ ['gorilla', '🦍'],\n    \\ ['grapes', '🍇'],\n    \\ ['guard\\.man', '💂'],\n    \\ ['guitar', '🎸'],\n    \\ ['gymnastics', '🤸'],\n    \\ ['haircut', '💇'],\n    \\ ['hammer', '🔨'],\n    \\ ['hammer\\.pick', '⚒'],\n    \\ ['hammer\\.wrench', '🛠'],\n    \\ ['hamsa', '🪬'],\n    \\ ['hamster\\.face', '🐹'],\n    \\ ['hand\\.raised', '✋'],\n    \\ ['hand\\.raised\\.alt', '🤚'],\n    \\ ['hand\\.r', '🫱'],\n    \\ ['hand\\.l', '🫲'],\n    \\ ['hand\\.t', '🫴'],\n    \\ ['hand\\.b', '🫳'],\n    \\ ['hand\\.ok', '👌'],\n    \\ ['hand\\.call', '🤙'],\n    \\ ['hand\\.love', '🤟'],\n    \\ ['hand\\.part', '🖖'],\n    \\ ['hand\\.peace', '✌'],\n    \\ ['hand\\.pinch', '🤏'],\n    \\ ['hand\\.rock', '🤘'],\n    \\ ['hand\\.splay', '🖐'],\n    \\ ['hand\\.wave', '👋'],\n    \\ ['hand\\.write', '✍'],\n    \\ ['handbag', '👜'],\n    \\ ['handball', '🤾'],\n    \\ ['handholding\\.man\\.man', '👬'],\n    \\ ['handholding\\.woman\\.man', '👫'],\n    \\ ['handholding\\.woman\\.woman', '👭'],\n    \\ ['hands\\.folded', '🙏'],\n    \\ ['hands\\.palms', '🤲'],\n    \\ ['hands\\.clap', '👏'],\n    \\ ['hands\\.heart', '🫶'],\n    \\ ['hands\\.open', '👐'],\n    \\ ['hands\\.raised', '🙌'],\n    \\ ['hands\\.shake', '🤝'],\n    \\ ['hash', '#'],\n    \\ ['hat\\.ribbon', '👒'],\n    \\ ['hat\\.top', '🎩'],\n    \\ ['headphone', '🎧'],\n    \\ ['heart', '❤'],\n    \\ ['heart\\.arrow', '💘'],\n    \\ ['heart\\.beat', '💓'],\n    \\ ['heart\\.black', '🖤'],\n    \\ ['heart\\.blue', '💙'],\n    \\ ['heart\\.box', '💟'],\n    \\ ['heart\\.broken', '💔'],\n    \\ ['heart\\.brown', '🤎'],\n    \\ ['heart\\.double', '💕'],\n    \\ ['heart\\.excl', '❣'],\n    \\ ['heart\\.green', '💚'],\n    \\ ['heart\\.grow', '💗'],\n    \\ ['heart\\.orange', '🧡'],\n    \\ ['heart\\.purple', '💜'],\n    \\ ['heart\\.real', '🫀'],\n    \\ ['heart\\.revolve', '💞'],\n    \\ ['heart\\.ribbon', '💝'],\n    \\ ['heart\\.spark', '💖'],\n    \\ ['heart\\.white', '🤍'],\n    \\ ['heart\\.yellow', '💛'],\n    \\ ['hedgehog', '🦔'],\n    \\ ['helicopter', '🚁'],\n    \\ ['helix', '🧬'],\n    \\ ['helmet\\.cross', '⛑'],\n    \\ ['helmet\\.military', '🪖'],\n    \\ ['hippo', '🦛'],\n    \\ ['hockey', '🏑'],\n    \\ ['hole', '🕳'],\n    \\ ['honey', '🍯'],\n    \\ ['hongbao', '🧧'],\n    \\ ['hook', '🪝'],\n    \\ ['horn\\.postal', '📯'],\n    \\ ['horse', '🐎'],\n    \\ ['horse\\.carousel', '🎠'],\n    \\ ['horse\\.face', '🐴'],\n    \\ ['horse\\.race', '🏇'],\n    \\ ['hospital', '🏥'],\n    \\ ['hotdog', '🌭'],\n    \\ ['hotel', '🏨'],\n    \\ ['hotel\\.love', '🏩'],\n    \\ ['hotspring', '♨'],\n    \\ ['hourglass', '⌛'],\n    \\ ['hourglass\\.flow', '⏳'],\n    \\ ['house', '🏠'],\n    \\ ['house\\.derelict', '🏚'],\n    \\ ['house\\.garden', '🏡'],\n    \\ ['house\\.multiple', '🏘'],\n    \\ ['hundred', '💯'],\n    \\ ['hut', '🛖'],\n    \\ ['ice', '🧊'],\n    \\ ['icecream', '🍨'],\n    \\ ['icecream\\.shaved', '🍧'],\n    \\ ['icecream\\.soft', '🍦'],\n    \\ ['icehockey', '🏒'],\n    \\ ['id', '🆔'],\n    \\ ['info', 'ℹ'],\n    \\ ['izakaya', '🏮'],\n    \\ ['jar', '🫙'],\n    \\ ['jeans', '👖'],\n    \\ ['jigsaw', '🧩'],\n    \\ ['joystick', '🕹'],\n    \\ ['juggling', '🤹'],\n    \\ ['juice', '🧃'],\n    \\ ['kaaba', '🕋'],\n    \\ ['kadomatsu', '🎍'],\n    \\ ['kangaroo', '🦘'],\n    \\ ['gachi', '🈷'],\n    \\ ['go', '🈴'],\n    \\ ['hi', '㊙'],\n    \\ ['ka', '🉑'],\n    \\ ['kachi', '🈹'],\n    \\ ['kara', '🈳'],\n    \\ ['kon', '🈲'],\n    \\ ['man', '👨'],\n    \\ ['man\\.box', '🚹'],\n    \\ ['man\\.crown', '🤴'],\n    \\ ['man\\.guapimao', '👲'],\n    \\ ['man\\.levitate', '🕴'],\n    \\ ['man\\.old', '👴'],\n    \\ ['man\\.pregnant', '🫃'],\n    \\ ['man\\.turban', '👳'],\n    \\ ['man\\.tuxedo', '🤵'],\n    \\ ['muryo', '🈚'],\n    \\ ['shin', '🈸'],\n    \\ ['shuku', '㊗'],\n    \\ ['toku', '🉐'],\n    \\ ['yo', '🈺'],\n    \\ ['yubi', '🈯'],\n    \\ ['yuryo', '🈶'],\n    \\ ['koko', '🈁'],\n    \\ ['sa', '🈂'],\n    \\ ['kebab', '🥙'],\n    \\ ['key', '🔑'],\n    \\ ['key\\.old', '🗝'],\n    \\ ['keyboard', '⌨'],\n    \\ ['kiss', '💏'],\n    \\ ['kissmark', '💋'],\n    \\ ['kite', '🪁'],\n    \\ ['kiwi', '🥝'],\n    \\ ['knife', '🔪'],\n    \\ ['knife\\.dagger', '🗡'],\n    \\ ['knot', '🪢'],\n    \\ ['koala', '🐨'],\n    \\ ['koinobori', '🎏'],\n    \\ ['label', '🏷'],\n    \\ ['lacrosse', '🥍'],\n    \\ ['ladder', '🪜'],\n    \\ ['lamp\\.diya', '🪔'],\n    \\ ['laptop', '💻'],\n    \\ ['a', '🅰'],\n    \\ ['ab', '🆎'],\n    \\ ['b', '🅱'],\n    \\ ['cl', '🆑'],\n    \\ ['o', '🅾'],\n    \\ ['leaf\\.clover\\.three', '☘'],\n    \\ ['leaf\\.clover\\.four', '🍀'],\n    \\ ['leaf\\.fall', '🍂'],\n    \\ ['leaf\\.herb', '🌿'],\n    \\ ['leaf\\.maple', '🍁'],\n    \\ ['leaf\\.wind', '🍃'],\n    \\ ['leftluggage', '🛅'],\n    \\ ['leg', '🦵'],\n    \\ ['leg\\.mech', '🦿'],\n    \\ ['lemon', '🍋'],\n    \\ ['leopard', '🐆'],\n    \\ ['letter\\.love', '💌'],\n    \\ ['liberty', '🗽'],\n    \\ ['lightbulb', '💡'],\n    \\ ['lightning', '⚡'],\n    \\ ['lion', '🦁'],\n    \\ ['lipstick', '💄'],\n    \\ ['litter', '🚮'],\n    \\ ['litter\\.not', '🚯'],\n    \\ ['lizard', '🦎'],\n    \\ ['llama', '🦙'],\n    \\ ['lobster', '🦞'],\n    \\ ['lock', '🔒'],\n    \\ ['lock\\.key', '🔐'],\n    \\ ['lock\\.open', '🔓'],\n    \\ ['lock\\.pen', '🔏'],\n    \\ ['lollipop', '🍭'],\n    \\ ['lotion', '🧴'],\n    \\ ['luggage', '🧳'],\n    \\ ['lungs', '🫁'],\n    \\ ['mage', '🧙'],\n    \\ ['magnet', '🧲'],\n    \\ ['magnify\\.r', '🔎'],\n    \\ ['magnify\\.l', '🔍'],\n    \\ ['mahjong\\.dragon\\.red', '🀄'],\n    \\ ['mail', '✉'],\n    \\ ['mail\\.arrow', '📩'],\n    \\ ['mailbox\\.closed\\.empty', '📪'],\n    \\ ['mailbox\\.closed\\.full', '📫'],\n    \\ ['mailbox\\.open\\.empty', '📭'],\n    \\ ['mailbox\\.open\\.full', '📬'],\n    \\ ['mammoth', '🦣'],\n    \\ ['mango', '🥭'],\n    \\ ['map\\.world', '🗺'],\n    \\ ['map\\.jp', '🗾'],\n    \\ ['martialarts', '🥋'],\n    \\ ['masks', '🎭'],\n    \\ ['mate', '🧉'],\n    \\ ['matryoshka', '🪆'],\n    \\ ['meat', '🥩'],\n    \\ ['meat\\.bone', '🍖'],\n    \\ ['medal\\.first', '🥇'],\n    \\ ['medal\\.second', '🥈'],\n    \\ ['medal\\.third', '🥉'],\n    \\ ['medal\\.sports', '🏅'],\n    \\ ['medal\\.military', '🎖'],\n    \\ ['megaphone', '📢'],\n    \\ ['megaphone\\.simple', '📣'],\n    \\ ['melon', '🍈'],\n    \\ ['merperson', '🧜'],\n    \\ ['metro', 'Ⓜ'],\n    \\ ['microbe', '🦠'],\n    \\ ['microphone', '🎤'],\n    \\ ['microphone\\.studio', '🎙'],\n    \\ ['microscope', '🔬'],\n    \\ ['milkyway', '🌌'],\n    \\ ['mirror', '🪞'],\n    \\ ['mixer', '🎛'],\n    \\ ['money\\.bag', '💰'],\n    \\ ['money\\.dollar', '💵'],\n    \\ ['money\\.euro', '💶'],\n    \\ ['money\\.pound', '💷'],\n    \\ ['money\\.yen', '💴'],\n    \\ ['money\\.wings', '💸'],\n    \\ ['monkey', '🐒'],\n    \\ ['monkey\\.face', '🐵'],\n    \\ ['monkey\\.hear\\.not', '🙉'],\n    \\ ['monkey\\.see\\.not', '🙈'],\n    \\ ['monkey\\.speak\\.not', '🙊'],\n    \\ ['moon\\.crescent', '🌙'],\n    \\ ['moon\\.full', '🌕'],\n    \\ ['moon\\.full\\.face', '🌝'],\n    \\ ['moon\\.new', '🌑'],\n    \\ ['moon\\.new\\.face', '🌚'],\n    \\ ['moon\\.wane\\.one', '🌖'],\n    \\ ['moon\\.wane\\.two', '🌗'],\n    \\ ['moon\\.wane\\.three\\.face', '🌜'],\n    \\ ['moon\\.wane\\.three', '🌘'],\n    \\ ['moon\\.wax\\.one', '🌒'],\n    \\ ['moon\\.wax\\.two', '🌓'],\n    \\ ['moon\\.wax\\.two\\.face', '🌛'],\n    \\ ['moon\\.wax\\.three', '🌔'],\n    \\ ['mortarboard', '🎓'],\n    \\ ['mosque', '🕌'],\n    \\ ['mosquito', '🦟'],\n    \\ ['motorcycle', '🏍'],\n    \\ ['motorway', '🛣'],\n    \\ ['mountain', '⛰'],\n    \\ ['mountain\\.fuji', '🗻'],\n    \\ ['mountain\\.snow', '🏔'],\n    \\ ['mountain\\.sunrise', '🌄'],\n    \\ ['mouse', '🐁'],\n    \\ ['mouse\\.face', '🐭'],\n    \\ ['mousetrap', '🪤'],\n    \\ ['mouth', '👄'],\n    \\ ['mouth\\.bite', '🫦'],\n    \\ ['moyai', '🗿'],\n    \\ ['museum', '🏛'],\n    \\ ['mushroom', '🍄'],\n    \\ ['musicalscore', '🎼'],\n    \\ ['nails\\.polish', '💅'],\n    \\ ['namebadge', '📛'],\n    \\ ['nazar', '🧿'],\n    \\ ['necktie', '👔'],\n    \\ ['needle', '🪡'],\n    \\ ['nest\\.empty', '🪹'],\n    \\ ['nest\\.eggs', '🪺'],\n    \\ ['new', '🆕'],\n    \\ ['newspaper', '📰'],\n    \\ ['newspaper\\.rolled', '🗞'],\n    \\ ['ng', '🆖'],\n    \\ ['ningyo', '🎎'],\n    \\ ['ninja', '🥷'],\n    \\ ['noentry', '⛔'],\n    \\ ['nose', '👃'],\n    \\ ['notebook', '📓'],\n    \\ ['notebook\\.deco', '📔'],\n    \\ ['notepad', '🗒'],\n    \\ ['notes', '🎵'],\n    \\ ['notes\\.triple', '🎶'],\n    \\ ['numbers', '🔢'],\n    \\ ['octopus', '🐙'],\n    \\ ['office', '🏢'],\n    \\ ['oil', '🛢'],\n    \\ ['ok', '🆗'],\n    \\ ['olive', '🫒'],\n    \\ ['oni', '👹'],\n    \\ ['onion', '🧅'],\n    \\ ['orangutan', '🦧'],\n    \\ ['otter', '🦦'],\n    \\ ['owl', '🦉'],\n    \\ ['ox', '🐂'],\n    \\ ['oyster', '🦪'],\n    \\ ['package', '📦'],\n    \\ ['paella', '🥘'],\n    \\ ['page', '📄'],\n    \\ ['page\\.curl', '📃'],\n    \\ ['page\\.pencil', '📝'],\n    \\ ['pager', '📟'],\n    \\ ['pages\\.tabs', '📑'],\n    \\ ['painting', '🖼'],\n    \\ ['palette', '🎨'],\n    \\ ['pancakes', '🥞'],\n    \\ ['panda', '🐼'],\n    \\ ['parachute', '🪂'],\n    \\ ['park', '🏞'],\n    \\ ['parking', '🅿'],\n    \\ ['parrot', '🦜'],\n    \\ ['partalteration', '〽'],\n    \\ ['party', '🎉'],\n    \\ ['peach', '🍑'],\n    \\ ['peacock', '🦚'],\n    \\ ['peanuts', '🥜'],\n    \\ ['pear', '🍐'],\n    \\ ['pedestrian', '🚶'],\n    \\ ['pedestrian\\.not', '🚷'],\n    \\ ['pen\\.ball', '🖊'],\n    \\ ['pen\\.fountain', '🖋'],\n    \\ ['pencil', '✏'],\n    \\ ['penguin', '🐧'],\n    \\ ['pepper', '🫑'],\n    \\ ['pepper\\.hot', '🌶'],\n    \\ ['person', '🧑'],\n    \\ ['person\\.angry', '🙎'],\n    \\ ['person\\.beard', '🧔'],\n    \\ ['person\\.blonde', '👱'],\n    \\ ['person\\.bow', '🙇'],\n    \\ ['person\\.crown', '🫅'],\n    \\ ['person\\.deaf', '🧏'],\n    \\ ['person\\.facepalm', '🤦'],\n    \\ ['person\\.frown', '🙍'],\n    \\ ['person\\.hijab', '🧕'],\n    \\ ['person\\.kneel', '🧎'],\n    \\ ['person\\.lotus', '🧘'],\n    \\ ['person\\.massage', '💆'],\n    \\ ['person\\.no', '🙅'],\n    \\ ['person\\.ok', '🙆'],\n    \\ ['person\\.old', '🧓'],\n    \\ ['person\\.pregnant', '🫄'],\n    \\ ['person\\.raise', '🙋'],\n    \\ ['person\\.sassy', '💁'],\n    \\ ['person\\.shrug', '🤷'],\n    \\ ['person\\.stand', '🧍'],\n    \\ ['person\\.steam', '🧖'],\n    \\ ['petri', '🧫'],\n    \\ ['phone', '📱'],\n    \\ ['phone\\.arrow', '📲'],\n    \\ ['phone\\.classic', '☎'],\n    \\ ['phone\\.not', '📵'],\n    \\ ['phone\\.off', '📴'],\n    \\ ['phone\\.receiver', '📞'],\n    \\ ['phone\\.signal', '📶'],\n    \\ ['phone\\.vibrate', '📳'],\n    \\ ['piano', '🎹'],\n    \\ ['pick', '⛏'],\n    \\ ['pie', '🥧'],\n    \\ ['pig', '🐖'],\n    \\ ['pig\\.face', '🐷'],\n    \\ ['pig\\.nose', '🐽'],\n    \\ ['pill', '💊'],\n    \\ ['pin', '📌'],\n    \\ ['pin\\.round', '📍'],\n    \\ ['pinata', '🪅'],\n    \\ ['pineapple', '🍍'],\n    \\ ['pingpong', '🏓'],\n    \\ ['pistol', '🔫'],\n    \\ ['pizza', '🍕'],\n    \\ ['placard', '🪧'],\n    \\ ['planet', '🪐'],\n    \\ ['plant', '🪴'],\n    \\ ['plaster', '🩹'],\n    \\ ['plate\\.cutlery', '🍽'],\n    \\ ['playback\\.down', '⏬'],\n    \\ ['playback\\.eject', '⏏'],\n    \\ ['playback\\.forward', '⏩'],\n    \\ ['playback\\.pause', '⏸'],\n    \\ ['playback\\.record', '⏺'],\n    \\ ['playback\\.repeat', '🔁'],\n    \\ ['playback\\.repeat\\.once', '🔂'],\n    \\ ['playback\\.repeat\\.v', '🔃'],\n    \\ ['playback\\.restart', '⏮'],\n    \\ ['playback\\.rewind', '⏪'],\n    \\ ['playback\\.shuffle', '🔀'],\n    \\ ['playback\\.skip', '⏭'],\n    \\ ['playback\\.stop', '⏹'],\n    \\ ['playback\\.toggle', '⏯'],\n    \\ ['playback\\.up', '⏫'],\n    \\ ['playingcard\\.flower', '🎴'],\n    \\ ['playingcard\\.joker', '🃏'],\n    \\ ['plunger', '🪠'],\n    \\ ['policeofficer', '👮'],\n    \\ ['poo', '💩'],\n    \\ ['popcorn', '🍿'],\n    \\ ['post\\.eu', '🏤'],\n    \\ ['post\\.jp', '🏣'],\n    \\ ['postbox', '📮'],\n    \\ ['potato', '🥔'],\n    \\ ['potato\\.sweet', '🍠'],\n    \\ ['pouch', '👝'],\n    \\ ['powerplug', '🔌'],\n    \\ ['present', '🎁'],\n    \\ ['pretzel', '🥨'],\n    \\ ['printer', '🖨'],\n    \\ ['prints\\.foot', '👣'],\n    \\ ['prints\\.paw', '🐾'],\n    \\ ['prohibited', '🚫'],\n    \\ ['projector', '📽'],\n    \\ ['pumpkin\\.lantern', '🎃'],\n    \\ ['purse', '👛'],\n    \\ ['quest', '❓'],\n    \\ ['quest\\.white', '❔'],\n    \\ ['rabbit', '🐇'],\n    \\ ['rabbit\\.face', '🐰'],\n    \\ ['raccoon', '🦝'],\n    \\ ['radio', '📻'],\n    \\ ['radioactive', '☢'],\n    \\ ['railway', '🛤'],\n    \\ ['rainbow', '🌈'],\n    \\ ['ram', '🐏'],\n    \\ ['rat', '🐀'],\n    \\ ['razor', '🪒'],\n    \\ ['receipt', '🧾'],\n    \\ ['recycling', '♻'],\n    \\ ['reg', '®'],\n    \\ ['restroom', '🚻'],\n    \\ ['rhino', '🦏'],\n    \\ ['ribbon', '🎀'],\n    \\ ['ribbon\\.remind', '🎗'],\n    \\ ['rice', '🍚'],\n    \\ ['rice\\.cracker', '🍘'],\n    \\ ['rice\\.ear', '🌾'],\n    \\ ['rice\\.onigiri', '🍙'],\n    \\ ['ring', '💍'],\n    \\ ['ringbuoy', '🛟'],\n    \\ ['robot', '🤖'],\n    \\ ['rock', '🪨'],\n    \\ ['rocket', '🚀'],\n    \\ ['rollercoaster', '🎢'],\n    \\ ['rosette', '🏵'],\n    \\ ['rugby', '🏉'],\n    \\ ['ruler', '📏'],\n    \\ ['ruler\\.triangle', '📐'],\n    \\ ['running', '🏃'],\n    \\ ['safetypin', '🧷'],\n    \\ ['safetyvest', '🦺'],\n    \\ ['sake', '🍶'],\n    \\ ['salad', '🥗'],\n    \\ ['salt', '🧂'],\n    \\ ['sandwich', '🥪'],\n    \\ ['santa\\.man', '🎅'],\n    \\ ['santa\\.woman', '🤶'],\n    \\ ['satdish', '📡'],\n    \\ ['satellite', '🛰'],\n    \\ ['saw', '🪚'],\n    \\ ['saxophone', '🎷'],\n    \\ ['scales', '⚖'],\n    \\ ['scarf', '🧣'],\n    \\ ['school', '🏫'],\n    \\ ['scissors', '✂'],\n    \\ ['scooter', '🛴'],\n    \\ ['scooter\\.motor', '🛵'],\n    \\ ['scorpion', '🦂'],\n    \\ ['screwdriver', '🪛'],\n    \\ ['scroll', '📜'],\n    \\ ['seal', '🦭'],\n    \\ ['seat', '💺'],\n    \\ ['seedling', '🌱'],\n    \\ ['shark', '🦈'],\n    \\ ['sheep', '🐑'],\n    \\ ['shell\\.spiral', '🐚'],\n    \\ ['shield', '🛡'],\n    \\ ['ship', '🚢'],\n    \\ ['ship\\.cruise', '🛳'],\n    \\ ['ship\\.ferry', '⛴'],\n    \\ ['shirt\\.sports', '🎽'],\n    \\ ['shirt\\.t', '👕'],\n    \\ ['shoe', '👞'],\n    \\ ['shoe\\.ballet', '🩰'],\n    \\ ['shoe\\.flat', '🥿'],\n    \\ ['shoe\\.heel', '👠'],\n    \\ ['shoe\\.hike', '🥾'],\n    \\ ['shoe\\.ice', '⛸'],\n    \\ ['shoe\\.roller', '🛼'],\n    \\ ['shoe\\.sandal\\.heel', '👡'],\n    \\ ['shoe\\.ski', '🎿'],\n    \\ ['shoe\\.sneaker', '👟'],\n    \\ ['shoe\\.tall', '👢'],\n    \\ ['shoe\\.thong', '🩴'],\n    \\ ['shopping', '🛍'],\n    \\ ['shorts', '🩳'],\n    \\ ['shoshinsha', '🔰'],\n    \\ ['shower', '🚿'],\n    \\ ['shrimp', '🦐'],\n    \\ ['shrimp\\.fried', '🍤'],\n    \\ ['shrine', '⛩'],\n    \\ ['sign\\.crossing', '🚸'],\n    \\ ['sign\\.stop', '🛑'],\n    \\ ['silhouette', '👤'],\n    \\ ['silhouette\\.double', '👥'],\n    \\ ['silhouette\\.hug', '🫂'],\n    \\ ['silhouette\\.speak', '🗣'],\n    \\ ['siren', '🚨'],\n    \\ ['skateboard', '🛹'],\n    \\ ['skewer\\.dango', '🍡'],\n    \\ ['skewer\\.oden', '🍢'],\n    \\ ['skiing', '⛷'],\n    \\ ['skull', '💀'],\n    \\ ['skull\\.bones', '☠'],\n    \\ ['skunk', '🦨'],\n    \\ ['sled', '🛷'],\n    \\ ['slide', '🛝'],\n    \\ ['slider', '🎚'],\n    \\ ['sloth', '🦥'],\n    \\ ['slots', '🎰'],\n    \\ ['snail', '🐌'],\n    \\ ['snake', '🐍'],\n    \\ ['snowboarding', '🏂'],\n    \\ ['snowflake', '❄'],\n    \\ ['snowman', '⛄'],\n    \\ ['snowman\\.snow', '☃'],\n    \\ ['soap', '🧼'],\n    \\ ['socks', '🧦'],\n    \\ ['softball', '🥎'],\n    \\ ['sos', '🆘'],\n    \\ ['soup', '🍲'],\n    \\ ['spaghetti', '🍝'],\n    \\ ['sparkle\\.box', '❇'],\n    \\ ['sparkler', '🎇'],\n    \\ ['sparkles', '✨'],\n    \\ ['speaker', '🔈'],\n    \\ ['speaker\\.not', '🔇'],\n    \\ ['speaker\\.wave', '🔉'],\n    \\ ['speaker\\.waves', '🔊'],\n    \\ ['spider', '🕷'],\n    \\ ['spiderweb', '🕸'],\n    \\ ['spinach', '🥬'],\n    \\ ['sponge', '🧽'],\n    \\ ['spoon', '🥄'],\n    \\ ['square\\.black', '⬛'],\n    \\ ['square\\.black\\.tiny', '▪'],\n    \\ ['square\\.black\\.small', '◾'],\n    \\ ['square\\.black\\.medium', '◼'],\n    \\ ['square\\.white', '⬜'],\n    \\ ['square\\.white\\.tiny', '▫'],\n    \\ ['square\\.white\\.small', '◽'],\n    \\ ['square\\.white\\.medium', '◻'],\n    \\ ['square\\.blue', '🟦'],\n    \\ ['square\\.brown', '🟫'],\n    \\ ['square\\.green', '🟩'],\n    \\ ['square\\.orange', '🟧'],\n    \\ ['square\\.purple', '🟪'],\n    \\ ['square\\.red', '🟥'],\n    \\ ['square\\.yellow', '🟨'],\n    \\ ['squid', '🦑'],\n    \\ ['stadium', '🏟'],\n    \\ ['star', '⭐'],\n    \\ ['star\\.arc', '💫'],\n    \\ ['star\\.box', '✴'],\n    \\ ['star\\.glow', '🌟'],\n    \\ ['star\\.shoot', '🌠'],\n    \\ ['stethoscope', '🩺'],\n    \\ ['store\\.big', '🏬'],\n    \\ ['store\\.small', '🏪'],\n    \\ ['strawberry', '🍓'],\n    \\ ['suit\\.club', '♣'],\n    \\ ['suit\\.diamond', '♦'],\n    \\ ['suit\\.heart', '♥'],\n    \\ ['suit\\.spade', '♠'],\n    \\ ['sun', '☀'],\n    \\ ['sun\\.cloud', '🌤'],\n    \\ ['sun\\.face', '🌞'],\n    \\ ['sunrise', '🌅'],\n    \\ ['superhero', '🦸'],\n    \\ ['supervillain', '🦹'],\n    \\ ['surfing', '🏄'],\n    \\ ['sushi', '🍣'],\n    \\ ['swan', '🦢'],\n    \\ ['swimming', '🏊'],\n    \\ ['swimsuit', '🩱'],\n    \\ ['swords', '⚔'],\n    \\ ['symbols', '🔣'],\n    \\ ['synagogue', '🕍'],\n    \\ ['syringe', '💉'],\n    \\ ['taco', '🌮'],\n    \\ ['takeout', '🥡'],\n    \\ ['tamale', '🫔'],\n    \\ ['tanabata', '🎋'],\n    \\ ['tangerine', '🍊'],\n    \\ ['tap', '🚰'],\n    \\ ['tap\\.not', '🚱'],\n    \\ ['taxi', '🚕'],\n    \\ ['taxi\\.front', '🚖'],\n    \\ ['teacup', '🍵'],\n    \\ ['teapot', '🫖'],\n    \\ ['teddy', '🧸'],\n    \\ ['telescope', '🔭'],\n    \\ ['temple', '🛕'],\n    \\ ['ten', '🔟'],\n    \\ ['tengu', '👺'],\n    \\ ['tennis', '🎾'],\n    \\ ['tent', '⛺'],\n    \\ ['testtube', '🧪'],\n    \\ ['thermometer', '🌡'],\n    \\ ['thread', '🧵'],\n    \\ ['thumb\\.up', '👍'],\n    \\ ['thumb\\.down', '👎'],\n    \\ ['ticket\\.event', '🎟'],\n    \\ ['ticket\\.travel', '🎫'],\n    \\ ['tiger', '🐅'],\n    \\ ['tiger\\.face', '🐯'],\n    \\ ['tm', '™'],\n    \\ ['toilet', '🚽'],\n    \\ ['toiletpaper', '🧻'],\n    \\ ['tomato', '🍅'],\n    \\ ['tombstone', '🪦'],\n    \\ ['tongue', '👅'],\n    \\ ['toolbox', '🧰'],\n    \\ ['tooth', '🦷'],\n    \\ ['toothbrush', '🪥'],\n    \\ ['tornado', '🌪'],\n    \\ ['tower\\.tokyo', '🗼'],\n    \\ ['trackball', '🖲'],\n    \\ ['tractor', '🚜'],\n    \\ ['trafficlight\\.v', '🚦'],\n    \\ ['trafficlight\\.h', '🚥'],\n    \\ ['train', '🚆'],\n    \\ ['train\\.car', '🚃'],\n    \\ ['train\\.light', '🚈'],\n    \\ ['train\\.metro', '🚇'],\n    \\ ['train\\.mono', '🚝'],\n    \\ ['train\\.mountain', '🚞'],\n    \\ ['train\\.speed', '🚄'],\n    \\ ['train\\.speed\\.bullet', '🚅'],\n    \\ ['train\\.steam', '🚂'],\n    \\ ['train\\.stop', '🚉'],\n    \\ ['train\\.suspend', '🚟'],\n    \\ ['train\\.tram', '🚊'],\n    \\ ['train\\.tram\\.car', '🚋'],\n    \\ ['transgender', '⚧'],\n    \\ ['tray\\.inbox', '📥'],\n    \\ ['tray\\.mail', '📨'],\n    \\ ['tray\\.outbox', '📤'],\n    \\ ['tree\\.deciduous', '🌳'],\n    \\ ['tree\\.evergreen', '🌲'],\n    \\ ['tree\\.palm', '🌴'],\n    \\ ['tree\\.xmas', '🎄'],\n    \\ ['triangle\\.r', '▶'],\n    \\ ['triangle\\.l', '◀'],\n    \\ ['triangle\\.t', '🔼'],\n    \\ ['triangle\\.b', '🔽'],\n    \\ ['triangle\\.t\\.red', '🔺'],\n    \\ ['triangle\\.b\\.red', '🔻'],\n    \\ ['trident', '🔱'],\n    \\ ['troll', '🧌'],\n    \\ ['trophy', '🏆'],\n    \\ ['truck', '🚚'],\n    \\ ['truck\\.trailer', '🚛'],\n    \\ ['trumpet', '🎺'],\n    \\ ['tsukimi', '🎑'],\n    \\ ['turkey', '🦃'],\n    \\ ['turtle', '🐢'],\n    \\ ['tv', '📺'],\n    \\ ['ufo', '🛸'],\n    \\ ['umbrella\\.open', '☂'],\n    \\ ['umbrella\\.closed', '🌂'],\n    \\ ['umbrella\\.rain', '☔'],\n    \\ ['umbrella\\.sun', '⛱'],\n    \\ ['unicorn', '🦄'],\n    \\ ['unknown', '🦳'],\n    \\ ['up', '🆙'],\n    \\ ['urn', '⚱'],\n    \\ ['vampire', '🧛'],\n    \\ ['violin', '🎻'],\n    \\ ['volcano', '🌋'],\n    \\ ['volleyball', '🏐'],\n    \\ ['vs', '🆚'],\n    \\ ['waffle', '🧇'],\n    \\ ['wand', '🪄'],\n    \\ ['warning', '⚠'],\n    \\ ['watch', '⌚'],\n    \\ ['watch\\.stop', '⏱'],\n    \\ ['watermelon', '🍉'],\n    \\ ['waterpolo', '🤽'],\n    \\ ['wave', '🌊'],\n    \\ ['wc', '🚾'],\n    \\ ['weightlifting', '🏋'],\n    \\ ['whale', '🐋'],\n    \\ ['whale\\.spout', '🐳'],\n    \\ ['wheel', '🛞'],\n    \\ ['wheelchair', '🦽'],\n    \\ ['wheelchair\\.box', '♿'],\n    \\ ['wheelchair\\.motor', '🦼'],\n    \\ ['wind', '🌬'],\n    \\ ['windchime', '🎐'],\n    \\ ['window', '🪟'],\n    \\ ['wine', '🍷'],\n    \\ ['wolf', '🐺'],\n    \\ ['woman', '👩'],\n    \\ ['woman\\.box', '🚺'],\n    \\ ['woman\\.crown', '👸'],\n    \\ ['woman\\.old', '👵'],\n    \\ ['woman\\.pregnant', '🤰'],\n    \\ ['wood', '🪵'],\n    \\ ['worm', '🪱'],\n    \\ ['wrench', '🔧'],\n    \\ ['wrestling', '🤼'],\n    \\ ['xray', '🩻'],\n    \\ ['yarn', '🧶'],\n    \\ ['yoyo', '🪀'],\n    \\ ['zebra', '🦓'],\n    \\ ['zodiac\\.aquarius', '♒'],\n    \\ ['zodiac\\.aries', '♈'],\n    \\ ['zodiac\\.cancer', '♋'],\n    \\ ['zodiac\\.capri', '♑'],\n    \\ ['zodiac\\.gemini', '♊'],\n    \\ ['zodiac\\.leo', '♌'],\n    \\ ['zodiac\\.libra', '♎'],\n    \\ ['zodiac\\.ophi', '⛎'],\n    \\ ['zodiac\\.pisces', '♓'],\n    \\ ['zodiac\\.sagit', '♐'],\n    \\ ['zodiac\\.scorpio', '♏'],\n    \\ ['zodiac\\.taurus', '♉'],\n    \\ ['zodiac\\.virgo', '♍'],\n    \\ ['zombie', '🧟'],\n    \\ ['zzz', '💤'],\n\\ ]\n\nfor typmath in s:typstEmojiList\n    exe \"syn match typstMarkupEmoji '#emoji\\.\".typmath[0].\"\\\\>' conceal cchar=\".typmath[1]\nendfor\n\n\" vim: sw=4 sts=4 et fdm=marker fdl=0 \n"
  },
  {
    "path": "syntax/typst-symbols.vim",
    "content": "\" Vim syntax file\n\" Language: Typst\n\" Maintainer: Kaj Munhoz Arfvidsson\n\" Upstream: https://github.com/kaarmu/typst.vim\n\nlet s:typstMathList=[\n    \\ [\"quote\\.single\", \"'\"],\n    \\ ['AA', '𝔸'],\n    \\ ['Alpha', 'Α'],\n    \\ ['BB', '𝔹'],\n    \\ ['Beta', 'Β'],\n    \\ ['CC', 'ℂ'],\n    \\ ['Chi', 'Χ'],\n    \\ ['DD', '𝔻'],\n    \\ ['Delta', 'Δ'],\n    \\ ['EE', '𝔼'],\n    \\ ['Epsilon', 'Ε'],\n    \\ ['Eta', 'Η'],\n    \\ ['FF', '𝔽'],\n    \\ ['GG', '𝔾'],\n    \\ ['Gamma', 'Γ'],\n    \\ ['HH', 'ℍ'],\n    \\ ['II', '𝕀'],\n    \\ ['Im', 'ℑ'],\n    \\ ['Iota', 'Ι'],\n    \\ ['JJ', '𝕁'],\n    \\ ['KK', '𝕂'],\n    \\ ['Kai', 'Ϗ'],\n    \\ ['Kappa', 'Κ'],\n    \\ ['LL', '𝕃'],\n    \\ ['Lambda', 'Λ'],\n    \\ ['MM', '𝕄'],\n    \\ ['Mu', 'Μ'],\n    \\ ['NN', 'ℕ'],\n    \\ ['Nu', 'Ν'],\n    \\ ['OO', '𝕆'],\n    \\ ['Omega', 'Ω'],\n    \\ ['Omicron', 'Ο'],\n    \\ ['PP', 'ℙ'],\n    \\ ['Phi', 'Φ'],\n    \\ ['Pi', 'Π'],\n    \\ ['Psi', 'Ψ'],\n    \\ ['QQ', 'ℚ'],\n    \\ ['RR', 'ℝ'],\n    \\ ['Re', 'ℜ'],\n    \\ ['Rho', 'Ρ'],\n    \\ ['SS', '𝕊'],\n    \\ ['Sigma', 'Σ'],\n    \\ ['TT', '𝕋'],\n    \\ ['Tau', 'Τ'],\n    \\ ['Theta', 'Θ'],\n    \\ ['UU', '𝕌'],\n    \\ ['Upsilon', 'Υ'],\n    \\ ['VV', '𝕍'],\n    \\ ['WW', '𝕎'],\n    \\ ['XX', '𝕏'],\n    \\ ['Xi', 'Ξ'],\n    \\ ['YY', '𝕐'],\n    \\ ['ZZ', 'ℤ'],\n    \\ ['Zeta', 'Ζ'],\n    \\ ['acute', '´'],\n    \\ ['acute\\.double', '˝'],\n    \\ ['alef', 'א'],\n    \\ ['aleph', 'א'],\n    \\ ['alpha', 'α'],\n    \\ ['amp', '&'],\n    \\ ['amp\\.inv', '⅋'],\n    \\ ['and', '∧'],\n    \\ ['and\\.big', '⋀'],\n    \\ ['and\\.curly', '⋏'],\n    \\ ['and\\.dot', '⟑'],\n    \\ ['and\\.double', '⩓'],\n    \\ ['angle', '∠'],\n    \\ ['angle\\.acute', '⦟'],\n    \\ ['angle\\.arc', '∡'],\n    \\ ['angle\\.arc\\.rev', '⦛'],\n    \\ ['angle\\.l', '⟨'],\n    \\ ['angle\\.l\\.double', '《'],\n    \\ ['angle\\.r', '⟩'],\n    \\ ['angle\\.r\\.double', '》'],\n    \\ ['angle\\.rev', '⦣'],\n    \\ ['angle\\.right', '∟'],\n    \\ ['angle\\.right\\.arc', '⊾'],\n    \\ ['angle\\.right\\.dot', '⦝'],\n    \\ ['angle\\.right\\.rev', '⯾'],\n    \\ ['angle\\.right\\.sq', '⦜'],\n    \\ ['angle\\.spatial', '⟀'],\n    \\ ['angle\\.spheric', '∢'],\n    \\ ['angle\\.spheric\\.rev', '⦠'],\n    \\ ['angle\\.spheric\\.top', '⦡'],\n    \\ ['angstrom', 'Å'],\n    \\ ['approx', '≈'],\n    \\ ['approx\\.eq', '≊'],\n    \\ ['approx\\.not', '≉'],\n    \\ ['arrow\\.b', '↓'],\n    \\ ['arrow\\.b\\.bar', '↧'],\n    \\ ['arrow\\.b\\.curve', '⤵'],\n    \\ ['arrow\\.b\\.dashed', '⇣'],\n    \\ ['arrow\\.b\\.double', '⇓'],\n    \\ ['arrow\\.b\\.filled', '⬇'],\n    \\ ['arrow\\.b\\.quad', '⟱'],\n    \\ ['arrow\\.b\\.stop', '⤓'],\n    \\ ['arrow\\.b\\.stroked', '⇩'],\n    \\ ['arrow\\.b\\.triple', '⤋'],\n    \\ ['arrow\\.b\\.twohead', '↡'],\n    \\ ['arrow\\.bl', '↙'],\n    \\ ['arrow\\.bl\\.double', '⇙'],\n    \\ ['arrow\\.bl\\.filled', '⬋'],\n    \\ ['arrow\\.bl\\.hook', '⤦'],\n    \\ ['arrow\\.bl\\.stroked', '⬃'],\n    \\ ['arrow\\.br', '↘'],\n    \\ ['arrow\\.br\\.double', '⇘'],\n    \\ ['arrow\\.br\\.filled', '⬊'],\n    \\ ['arrow\\.br\\.hook', '⤥'],\n    \\ ['arrow\\.br\\.stroked', '⬂'],\n    \\ ['arrow\\.ccw', '↺'],\n    \\ ['arrow\\.ccw\\.half', '↶'],\n    \\ ['arrow\\.cw', '↻'],\n    \\ ['arrow\\.cw\\.half', '↷'],\n    \\ ['arrow\\.l', '←'],\n    \\ ['arrow\\.l\\.bar', '↤'],\n    \\ ['arrow\\.l\\.curve', '⤶'],\n    \\ ['arrow\\.l\\.dashed', '⇠'],\n    \\ ['arrow\\.l\\.dotted', '⬸'],\n    \\ ['arrow\\.l\\.double', '⇐'],\n    \\ ['arrow\\.l\\.double\\.bar', '⤆'],\n    \\ ['arrow\\.l\\.double\\.long', '⟸'],\n    \\ ['arrow\\.l\\.double\\.long\\.bar', '⟽'],\n    \\ ['arrow\\.l\\.double\\.not', '⇍'],\n    \\ ['arrow\\.l\\.filled', '⬅'],\n    \\ ['arrow\\.l\\.hook', '↩'],\n    \\ ['arrow\\.l\\.long', '⟵'],\n    \\ ['arrow\\.l\\.long\\.bar', '⟻'],\n    \\ ['arrow\\.l\\.long\\.squiggly', '⬳'],\n    \\ ['arrow\\.l\\.loop', '↫'],\n    \\ ['arrow\\.l\\.not', '↚'],\n    \\ ['arrow\\.l\\.quad', '⭅'],\n    \\ ['arrow\\.l\\.r', '↔'],\n    \\ ['arrow\\.l\\.r\\.double', '⇔'],\n    \\ ['arrow\\.l\\.r\\.double\\.long', '⟺'],\n    \\ ['arrow\\.l\\.r\\.double\\.not', '⇎'],\n    \\ ['arrow\\.l\\.r\\.filled', '⬌'],\n    \\ ['arrow\\.l\\.r\\.long', '⟷'],\n    \\ ['arrow\\.l\\.r\\.not', '↮'],\n    \\ ['arrow\\.l\\.r\\.stroked', '⬄'],\n    \\ ['arrow\\.l\\.r\\.wave', '↭'],\n    \\ ['arrow\\.l\\.squiggly', '⇜'],\n    \\ ['arrow\\.l\\.stop', '⇤'],\n    \\ ['arrow\\.l\\.stroked', '⇦'],\n    \\ ['arrow\\.l\\.tail', '↢'],\n    \\ ['arrow\\.l\\.triple', '⇚'],\n    \\ ['arrow\\.l\\.twohead', '↞'],\n    \\ ['arrow\\.l\\.twohead\\.bar', '⬶'],\n    \\ ['arrow\\.l\\.wave', '↜'],\n    \\ ['arrow\\.r', '→'],\n    \\ ['arrow\\.r\\.bar', '↦'],\n    \\ ['arrow\\.r\\.curve', '⤷'],\n    \\ ['arrow\\.r\\.dashed', '⇢'],\n    \\ ['arrow\\.r\\.dotted', '⤑'],\n    \\ ['arrow\\.r\\.double', '⇒'],\n    \\ ['arrow\\.r\\.double\\.bar', '⤇'],\n    \\ ['arrow\\.r\\.double\\.long', '⟹'],\n    \\ ['arrow\\.r\\.double\\.long\\.bar', '⟾'],\n    \\ ['arrow\\.r\\.double\\.not', '⇏'],\n    \\ ['arrow\\.r\\.filled', '➡'],\n    \\ ['arrow\\.r\\.hook', '↪'],\n    \\ ['arrow\\.r\\.long', '⟶'],\n    \\ ['arrow\\.r\\.long\\.bar', '⟼'],\n    \\ ['arrow\\.r\\.long\\.squiggly', '⟿'],\n    \\ ['arrow\\.r\\.loop', '↬'],\n    \\ ['arrow\\.r\\.not', '↛'],\n    \\ ['arrow\\.r\\.quad', '⭆'],\n    \\ ['arrow\\.r\\.squiggly', '⇝'],\n    \\ ['arrow\\.r\\.stop', '⇥'],\n    \\ ['arrow\\.r\\.stroked', '⇨'],\n    \\ ['arrow\\.r\\.tail', '↣'],\n    \\ ['arrow\\.r\\.triple', '⇛'],\n    \\ ['arrow\\.r\\.twohead', '↠'],\n    \\ ['arrow\\.r\\.twohead\\.bar', '⤅'],\n    \\ ['arrow\\.r\\.wave', '↝'],\n    \\ ['arrow\\.t', '↑'],\n    \\ ['arrow\\.t\\.b', '↕'],\n    \\ ['arrow\\.t\\.b\\.double', '⇕'],\n    \\ ['arrow\\.t\\.b\\.filled', '⬍'],\n    \\ ['arrow\\.t\\.b\\.stroked', '⇳'],\n    \\ ['arrow\\.t\\.bar', '↥'],\n    \\ ['arrow\\.t\\.curve', '⤴'],\n    \\ ['arrow\\.t\\.dashed', '⇡'],\n    \\ ['arrow\\.t\\.double', '⇑'],\n    \\ ['arrow\\.t\\.filled', '⬆'],\n    \\ ['arrow\\.t\\.quad', '⟰'],\n    \\ ['arrow\\.t\\.stop', '⤒'],\n    \\ ['arrow\\.t\\.stroked', '⇧'],\n    \\ ['arrow\\.t\\.triple', '⤊'],\n    \\ ['arrow\\.t\\.twohead', '↟'],\n    \\ ['arrow\\.tl', '↖'],\n    \\ ['arrow\\.tl\\.br', '⤡'],\n    \\ ['arrow\\.tl\\.double', '⇖'],\n    \\ ['arrow\\.tl\\.filled', '⬉'],\n    \\ ['arrow\\.tl\\.hook', '⤣'],\n    \\ ['arrow\\.tl\\.stroked', '⬁'],\n    \\ ['arrow\\.tr', '↗'],\n    \\ ['arrow\\.tr\\.bl', '⤢'],\n    \\ ['arrow\\.tr\\.double', '⇗'],\n    \\ ['arrow\\.tr\\.filled', '⬈'],\n    \\ ['arrow\\.tr\\.hook', '⤤'],\n    \\ ['arrow\\.tr\\.stroked', '⬀'],\n    \\ ['arrow\\.zigzag', '↯'],\n    \\ ['arrowhead\\.b', '⌄'],\n    \\ ['arrowhead\\.t', '⌃'],\n    \\ ['arrows\\.bb', '⇊'],\n    \\ ['arrows\\.bt', '⇵'],\n    \\ ['arrows\\.ll', '⇇'],\n    \\ ['arrows\\.lll', '⬱'],\n    \\ ['arrows\\.lr', '⇆'],\n    \\ ['arrows\\.lr\\.stop', '↹'],\n    \\ ['arrows\\.rl', '⇄'],\n    \\ ['arrows\\.rr', '⇉'],\n    \\ ['arrows\\.rrr', '⇶'],\n    \\ ['arrows\\.tb', '⇅'],\n    \\ ['arrows\\.tt', '⇈'],\n    \\ ['ast\\.basic', '*'],\n    \\ ['ast\\.circle', '⊛'],\n    \\ ['ast\\.double', '⁑'],\n    \\ ['ast\\.low', '⁎'],\n    \\ ['ast\\.op', '∗'],\n    \\ ['ast\\.small', '﹡'],\n    \\ ['ast\\.square', '⧆'],\n    \\ ['ast\\.triple', '⁂'],\n    \\ ['at', '@'],\n    \\ ['backslash', '\\'],\n    \\ ['backslash\\.circle', '⦸'],\n    \\ ['backslash\\.not', '⧷'],\n    \\ ['ballot', '☐'],\n    \\ ['ballot\\.x', '☒'],\n    \\ ['bar\\.h', '―'],\n    \\ ['bar\\.v', '|'],\n    \\ ['bar\\.v\\.broken', '¦'],\n    \\ ['bar\\.v\\.circle', '⦶'],\n    \\ ['bar\\.v\\.double', '‖'],\n    \\ ['bar\\.v\\.triple', '⦀'],\n    \\ ['because', '∵'],\n    \\ ['bet', 'ב'],\n    \\ ['beta', 'β'],\n    \\ ['beta\\.alt', 'ϐ'],\n    \\ ['beth', 'ב'],\n    \\ ['bitcoin', '₿'],\n    \\ ['bot', '⊥'],\n    \\ ['brace\\.b', '⏟'],\n    \\ ['brace\\.l', '{'],\n    \\ ['brace\\.r', '}'],\n    \\ ['brace\\.t', '⏞'],\n    \\ ['bracket\\.b', '⎵'],\n    \\ ['bracket\\.l', '['],\n    \\ ['bracket\\.l\\.double', '⟦'],\n    \\ ['bracket\\.r', ']'],\n    \\ ['bracket\\.r\\.double', '⟧'],\n    \\ ['bracket\\.t', '⎴'],\n    \\ ['breve', '˘'],\n    \\ ['bullet', '•'],\n    \\ ['caret', '‸'],\n    \\ ['caron', 'ˇ'],\n    \\ ['checkmark', '✓'],\n    \\ ['checkmark\\.light', '🗸'],\n    \\ ['chi', 'χ'],\n    \\ ['circle\\.dotted', '◌'],\n    \\ ['circle\\.filled', '●'],\n    \\ ['circle\\.filled\\.big', '⬤'],\n    \\ ['circle\\.filled\\.small', '∙'],\n    \\ ['circle\\.filled\\.tiny', '⦁'],\n    \\ ['circle\\.nested', '⊚'],\n    \\ ['circle\\.stroked', '○'],\n    \\ ['circle\\.stroked\\.big', '◯'],\n    \\ ['circle\\.stroked\\.small', '⚬'],\n    \\ ['circle\\.stroked\\.tiny', '∘'],\n    \\ ['co', '℅'],\n    \\ ['colon', ':'],\n    \\ ['colon\\.double\\.eq', '⩴'],\n    \\ ['colon\\.eq', '≔'],\n    \\ ['comma', ','],\n    \\ ['complement', '∁'],\n    \\ ['compose', '∘'],\n    \\ ['convolve', '∗'],\n    \\ ['copyright', '©'],\n    \\ ['copyright\\.sound', '℗'],\n    \\ ['dagger', '†'],\n    \\ ['dagger\\.double', '‡'],\n    \\ ['dash\\.circle', '⊝'],\n    \\ ['dash\\.colon', '∹'],\n    \\ ['dash\\.em', '—'],\n    \\ ['dash\\.en', '–'],\n    \\ ['dash\\.fig', '‒'],\n    \\ ['dash\\.wave', '〜'],\n    \\ ['dash\\.wave\\.double', '〰'],\n    \\ ['degree', '°'],\n    \\ ['degree\\.c', '℃'],\n    \\ ['degree\\.f', '℉'],\n    \\ ['delta', 'δ'],\n    \\ ['diaer', '¨'],\n    \\ ['diameter', '⌀'],\n    \\ ['diamond\\.filled', '◆'],\n    \\ ['diamond\\.filled\\.medium', '⬥'],\n    \\ ['diamond\\.filled\\.small', '⬩'],\n    \\ ['diamond\\.stroked', '◇'],\n    \\ ['diamond\\.stroked\\.dot', '⟐'],\n    \\ ['diamond\\.stroked\\.medium', '⬦'],\n    \\ ['diamond\\.stroked\\.small', '⋄'],\n    \\ ['diff', '∂'],\n    \\ ['div', '÷'],\n    \\ ['div\\.circle', '⨸'],\n    \\ ['divides', '∣'],\n    \\ ['divides\\.not', '∤'],\n    \\ ['dollar', '$'],\n    \\ ['dot\\.basic', '.'],\n    \\ ['dot\\.c', '·'],\n    \\ ['dot\\.circle', '⊙'],\n    \\ ['dot\\.circle\\.big', '⨀'],\n    \\ ['dot\\.double', '¨'],\n    \\ ['dot\\.op', '⋅'],\n    \\ ['dot\\.quad', '⃜'],\n    \\ ['dot\\.square', '⊡'],\n    \\ ['dot\\.triple', '⃛'],\n    \\ ['dotless\\.i', '𝚤'],\n    \\ ['dotless\\.j', '𝚥'],\n    \\ ['dots\\.down', '⋱'],\n    \\ ['dots\\.h', '…'],\n    \\ ['dots\\.h\\.c', '⋯'],\n    \\ ['dots\\.up', '⋰'],\n    \\ ['dots\\.v', '⋮'],\n    \\ ['ell', 'ℓ'],\n    \\ ['ellipse\\.filled\\.h', '⬬'],\n    \\ ['ellipse\\.filled\\.v', '⬮'],\n    \\ ['ellipse\\.stroked\\.h', '⬭'],\n    \\ ['ellipse\\.stroked\\.v', '⬯'],\n    \\ ['emptyset', '∅'],\n    \\ ['emptyset\\.rev', '⦰'],\n    \\ ['epsilon', 'ε'],\n    \\ ['epsilon\\.alt', 'ϵ'],\n    \\ ['eq', '='],\n    \\ ['eq\\.circle', '⊜'],\n    \\ ['eq\\.colon', '≕'],\n    \\ ['eq\\.def', '≝'],\n    \\ ['eq\\.delta', '≜'],\n    \\ ['eq\\.equi', '≚'],\n    \\ ['eq\\.est', '≙'],\n    \\ ['eq\\.gt', '⋝'],\n    \\ ['eq\\.lt', '⋜'],\n    \\ ['eq\\.m', '≞'],\n    \\ ['eq\\.not', '≠'],\n    \\ ['eq\\.prec', '⋞'],\n    \\ ['eq\\.quad', '≣'],\n    \\ ['eq\\.quest', '≟'],\n    \\ ['eq\\.small', '﹦'],\n    \\ ['eq\\.star', '≛'],\n    \\ ['eq\\.succ', '⋟'],\n    \\ ['eq\\.triple', '≡'],\n    \\ ['equiv', '≡'],\n    \\ ['equiv\\.not', '≢'],\n    \\ ['eta', 'η'],\n    \\ ['euro', '€'],\n    \\ ['excl', '!'],\n    \\ ['excl\\.double', '‼'],\n    \\ ['excl\\.inv', '¡'],\n    \\ ['excl\\.quest', '⁉'],\n    \\ ['exists', '∃'],\n    \\ ['exists\\.not', '∄'],\n    \\ ['fence\\.dotted', '⦙'],\n    \\ ['fence\\.l', '⧘'],\n    \\ ['fence\\.l\\.double', '⧚'],\n    \\ ['fence\\.r', '⧙'],\n    \\ ['fence\\.r\\.double', '⧛'],\n    \\ ['floral', '❦'],\n    \\ ['floral\\.l', '☙'],\n    \\ ['floral\\.r', '❧'],\n    \\ ['forall', '∀'],\n    \\ ['franc', '₣'],\n    \\ ['gamma', 'γ'],\n    \\ ['gimel', 'ג'],\n    \\ ['gimmel', 'ג'],\n    \\ ['grave', '`'],\n    \\ ['gt', '>'],\n    \\ ['gt\\.circle', '⧁'],\n    \\ ['gt\\.curly', '≻'],\n    \\ ['gt\\.curly\\.approx', '⪸'],\n    \\ ['gt\\.curly\\.double', '⪼'],\n    \\ ['gt\\.curly\\.eq', '≽'],\n    \\ ['gt\\.curly\\.eq\\.not', '⋡'],\n    \\ ['gt\\.curly\\.equiv', '⪴'],\n    \\ ['gt\\.curly\\.napprox', '⪺'],\n    \\ ['gt\\.curly\\.nequiv', '⪶'],\n    \\ ['gt\\.curly\\.not', '⊁'],\n    \\ ['gt\\.curly\\.ntilde', '⋩'],\n    \\ ['gt\\.curly\\.tilde', '≿'],\n    \\ ['gt\\.dot', '⋗'],\n    \\ ['gt\\.double', '≫'],\n    \\ ['gt\\.eq', '≥'],\n    \\ ['gt\\.eq\\.lt', '⋛'],\n    \\ ['gt\\.eq\\.not', '≱'],\n    \\ ['gt\\.eq\\.slant', '⩾'],\n    \\ ['gt\\.equiv', '≧'],\n    \\ ['gt\\.lt', '≷'],\n    \\ ['gt\\.lt\\.not', '≹'],\n    \\ ['gt\\.nequiv', '≩'],\n    \\ ['gt\\.not', '≯'],\n    \\ ['gt\\.ntilde', '⋧'],\n    \\ ['gt\\.small', '﹥'],\n    \\ ['gt\\.tilde', '≳'],\n    \\ ['gt\\.tilde\\.not', '≵'],\n    \\ ['gt\\.tri', '⊳'],\n    \\ ['gt\\.tri\\.eq', '⊵'],\n    \\ ['gt\\.tri\\.eq\\.not', '⋭'],\n    \\ ['gt\\.tri\\.not', '⋫'],\n    \\ ['gt\\.triple', '⋙'],\n    \\ ['gt\\.triple\\.nested', '⫸'],\n    \\ ['harpoon\\.bl', '⇃'],\n    \\ ['harpoon\\.bl\\.bar', '⥡'],\n    \\ ['harpoon\\.bl\\.stop', '⥙'],\n    \\ ['harpoon\\.br', '⇂'],\n    \\ ['harpoon\\.br\\.bar', '⥝'],\n    \\ ['harpoon\\.br\\.stop', '⥕'],\n    \\ ['harpoon\\.lb', '↽'],\n    \\ ['harpoon\\.lb\\.bar', '⥞'],\n    \\ ['harpoon\\.lb\\.rb', '⥐'],\n    \\ ['harpoon\\.lb\\.rt', '⥋'],\n    \\ ['harpoon\\.lb\\.stop', '⥖'],\n    \\ ['harpoon\\.lt', '↼'],\n    \\ ['harpoon\\.lt\\.bar', '⥚'],\n    \\ ['harpoon\\.lt\\.rb', '⥊'],\n    \\ ['harpoon\\.lt\\.rt', '⥎'],\n    \\ ['harpoon\\.lt\\.stop', '⥒'],\n    \\ ['harpoon\\.rb', '⇁'],\n    \\ ['harpoon\\.rb\\.bar', '⥟'],\n    \\ ['harpoon\\.rb\\.stop', '⥗'],\n    \\ ['harpoon\\.rt', '⇀'],\n    \\ ['harpoon\\.rt\\.bar', '⥛'],\n    \\ ['harpoon\\.rt\\.stop', '⥓'],\n    \\ ['harpoon\\.tl', '↿'],\n    \\ ['harpoon\\.tl\\.bar', '⥠'],\n    \\ ['harpoon\\.tl\\.bl', '⥑'],\n    \\ ['harpoon\\.tl\\.br', '⥍'],\n    \\ ['harpoon\\.tl\\.stop', '⥘'],\n    \\ ['harpoon\\.tr', '↾'],\n    \\ ['harpoon\\.tr\\.bar', '⥜'],\n    \\ ['harpoon\\.tr\\.bl', '⥌'],\n    \\ ['harpoon\\.tr\\.br', '⥏'],\n    \\ ['harpoon\\.tr\\.stop', '⥔'],\n    \\ ['harpoons\\.blbr', '⥥'],\n    \\ ['harpoons\\.bltr', '⥯'],\n    \\ ['harpoons\\.lbrb', '⥧'],\n    \\ ['harpoons\\.ltlb', '⥢'],\n    \\ ['harpoons\\.ltrb', '⇋'],\n    \\ ['harpoons\\.ltrt', '⥦'],\n    \\ ['harpoons\\.rblb', '⥩'],\n    \\ ['harpoons\\.rtlb', '⇌'],\n    \\ ['harpoons\\.rtlt', '⥨'],\n    \\ ['harpoons\\.rtrb', '⥤'],\n    \\ ['harpoons\\.tlbr', '⥮'],\n    \\ ['harpoons\\.tltr', '⥣'],\n    \\ ['hash', '#'],\n    \\ ['hat', '^'],\n    \\ ['hexa\\.filled', '⬢'],\n    \\ ['hexa\\.stroked', '⬡'],\n    \\ ['hyph', '‐'],\n    \\ ['hyph\\.minus', '-'],\n    \\ ['hyph\\.nobreak', '‑'],\n    \\ ['hyph\\.point', '‧'],\n    \\ ['in', '∈'],\n    \\ ['in\\.not', '∉'],\n    \\ ['in\\.rev', '∋'],\n    \\ ['in\\.rev\\.not', '∌'],\n    \\ ['in\\.rev\\.small', '∍'],\n    \\ ['in\\.small', '∊'],\n    \\ ['infinity', '∞'],\n    \\ ['integral', '∫'],\n    \\ ['integral\\.arrow\\.hook', '⨗'],\n    \\ ['integral\\.ccw', '⨑'],\n    \\ ['integral\\.cont', '∮'],\n    \\ ['integral\\.cont\\.ccw', '∳'],\n    \\ ['integral\\.cont\\.cw', '∲'],\n    \\ ['integral\\.cw', '∱'],\n    \\ ['integral\\.double', '∬'],\n    \\ ['integral\\.quad', '⨌'],\n    \\ ['integral\\.sect', '⨙'],\n    \\ ['integral\\.square', '⨖'],\n    \\ ['integral\\.surf', '∯'],\n    \\ ['integral\\.times', '⨘'],\n    \\ ['integral\\.triple', '∭'],\n    \\ ['integral\\.union', '⨚'],\n    \\ ['integral\\.vol', '∰'],\n    \\ ['interrobang', '‽'],\n    \\ ['iota', 'ι'],\n    \\ ['join', '⨝'],\n    \\ ['join\\.l', '⟕'],\n    \\ ['join\\.l\\.r', '⟗'],\n    \\ ['join\\.r', '⟖'],\n    \\ ['kai', 'ϗ'],\n    \\ ['kappa', 'κ'],\n    \\ ['kappa\\.alt', 'ϰ'],\n    \\ ['kelvin', 'K'],\n    \\ ['lambda', 'λ'],\n    \\ ['laplace', '∆'],\n    \\ ['lira', '₺'],\n    \\ ['lozenge\\.filled', '⧫'],\n    \\ ['lozenge\\.filled\\.medium', '⬧'],\n    \\ ['lozenge\\.filled\\.small', '⬪'],\n    \\ ['lozenge\\.stroked', '◊'],\n    \\ ['lozenge\\.stroked\\.medium', '⬨'],\n    \\ ['lozenge\\.stroked\\.small', '⬫'],\n    \\ ['lt', '<'],\n    \\ ['lt\\.circle', '⧀'],\n    \\ ['lt\\.curly', '≺'],\n    \\ ['lt\\.curly\\.approx', '⪷'],\n    \\ ['lt\\.curly\\.double', '⪻'],\n    \\ ['lt\\.curly\\.eq', '≼'],\n    \\ ['lt\\.curly\\.eq\\.not', '⋠'],\n    \\ ['lt\\.curly\\.equiv', '⪳'],\n    \\ ['lt\\.curly\\.napprox', '⪹'],\n    \\ ['lt\\.curly\\.nequiv', '⪵'],\n    \\ ['lt\\.curly\\.not', '⊀'],\n    \\ ['lt\\.curly\\.ntilde', '⋨'],\n    \\ ['lt\\.curly\\.tilde', '≾'],\n    \\ ['lt\\.dot', '⋖'],\n    \\ ['lt\\.double', '≪'],\n    \\ ['lt\\.eq', '≤'],\n    \\ ['lt\\.eq\\.gt', '⋚'],\n    \\ ['lt\\.eq\\.not', '≰'],\n    \\ ['lt\\.eq\\.slant', '⩽'],\n    \\ ['lt\\.equiv', '≦'],\n    \\ ['lt\\.gt', '≶'],\n    \\ ['lt\\.gt\\.not', '≸'],\n    \\ ['lt\\.nequiv', '≨'],\n    \\ ['lt\\.not', '≮'],\n    \\ ['lt\\.ntilde', '⋦'],\n    \\ ['lt\\.small', '﹤'],\n    \\ ['lt\\.tilde', '≲'],\n    \\ ['lt\\.tilde\\.not', '≴'],\n    \\ ['lt\\.tri', '⊲'],\n    \\ ['lt\\.tri\\.eq', '⊴'],\n    \\ ['lt\\.tri\\.eq\\.not', '⋬'],\n    \\ ['lt\\.tri\\.not', '⋪'],\n    \\ ['lt\\.triple', '⋘'],\n    \\ ['lt\\.triple\\.nested', '⫷'],\n    \\ ['macron', '¯'],\n    \\ ['maltese', '✠'],\n    \\ ['minus', '−'],\n    \\ ['minus\\.circle', '⊖'],\n    \\ ['minus\\.dot', '∸'],\n    \\ ['minus\\.plus', '∓'],\n    \\ ['minus\\.square', '⊟'],\n    \\ ['minus\\.tilde', '≂'],\n    \\ ['minus\\.triangle', '⨺'],\n    \\ ['models', '⊧'],\n    \\ ['mu', 'μ'],\n    \\ ['multimap', '⊸'],\n    \\ ['nabla', '∇'],\n    \\ ['not', '¬'],\n    \\ ['notes\\.down', '🎝'],\n    \\ ['notes\\.up', '🎜'],\n    \\ ['nothing', '∅'],\n    \\ ['nothing\\.rev', '⦰'],\n    \\ ['nu', 'ν'],\n    \\ ['ohm', 'Ω'],\n    \\ ['ohm\\.inv', '℧'],\n    \\ ['omega', 'ω'],\n    \\ ['omicron', 'ο'],\n    \\ ['oo', '∞'],\n    \\ ['or', '∨'],\n    \\ ['or\\.big', '⋁'],\n    \\ ['or\\.curly', '⋎'],\n    \\ ['or\\.dot', '⟇'],\n    \\ ['or\\.double', '⩔'],\n    \\ ['parallel', '∥'],\n    \\ ['parallel\\.circle', '⦷'],\n    \\ ['parallel\\.not', '∦'],\n    \\ ['paren\\.b', '⏝'],\n    \\ ['paren\\.l', '('],\n    \\ ['paren\\.r', ')'],\n    \\ ['paren\\.t', '⏜'],\n    \\ ['partial', '∂'],\n    \\ ['penta\\.filled', '⬟'],\n    \\ ['penta\\.stroked', '⬠'],\n    \\ ['percent', '%'],\n    \\ ['permille', '‰'],\n    \\ ['perp', '⟂'],\n    \\ ['perp\\.circle', '⦹'],\n    \\ ['peso', '₱'],\n    \\ ['phi', 'φ'],\n    \\ ['phi\\.alt', 'ϕ'],\n    \\ ['pi', 'π'],\n    \\ ['pi\\.alt', 'ϖ'],\n    \\ ['pilcrow', '¶'],\n    \\ ['pilcrow\\.rev', '⁋'],\n    \\ ['planck', 'ℎ'],\n    \\ ['planck\\.reduce', 'ℏ'],\n    \\ ['plus', '+'],\n    \\ ['plus\\.circle', '⊕'],\n    \\ ['plus\\.circle\\.arrow', '⟴'],\n    \\ ['plus\\.circle\\.big', '⨁'],\n    \\ ['plus\\.dot', '∔'],\n    \\ ['plus\\.minus', '±'],\n    \\ ['plus\\.small', '﹢'],\n    \\ ['plus\\.square', '⊞'],\n    \\ ['plus\\.triangle', '⨹'],\n    \\ ['pound', '£'],\n    \\ ['prec', '≺'],\n    \\ ['prec\\.approx', '⪷'],\n    \\ ['prec\\.double', '⪻'],\n    \\ ['prec\\.eq', '≼'],\n    \\ ['prec\\.eq\\.not', '⋠'],\n    \\ ['prec\\.equiv', '⪳'],\n    \\ ['prec\\.napprox', '⪹'],\n    \\ ['prec\\.nequiv', '⪵'],\n    \\ ['prec\\.not', '⊀'],\n    \\ ['prec\\.ntilde', '⋨'],\n    \\ ['prec\\.tilde', '≾'],\n    \\ ['prime', '′'],\n    \\ ['prime\\.double', '″'],\n    \\ ['prime\\.double\\.rev', '‶'],\n    \\ ['prime\\.quad', '⁗'],\n    \\ ['prime\\.rev', '‵'],\n    \\ ['prime\\.triple', '‴'],\n    \\ ['prime\\.triple\\.rev', '‷'],\n    \\ ['product', '∏'],\n    \\ ['product\\.co', '∐'],\n    \\ ['prop', '∝'],\n    \\ ['psi', 'ψ'],\n    \\ ['qed', '∎'],\n    \\ ['quest', '?'],\n    \\ ['quest\\.double', '⁇'],\n    \\ ['quest\\.excl', '⁈'],\n    \\ ['quest\\.inv', '¿'],\n    \\ ['quote\\.angle\\.l\\.double', '«'],\n    \\ ['quote\\.angle\\.l\\.single', '‹'],\n    \\ ['quote\\.angle\\.r\\.double', '»'],\n    \\ ['quote\\.angle\\.r\\.single', '›'],\n    \\ ['quote\\.double', '\"'],\n    \\ ['quote\\.high\\.double', '‟'],\n    \\ ['quote\\.high\\.single', '‛'],\n    \\ ['quote\\.l\\.double', '“'],\n    \\ ['quote\\.l\\.single', '‘'],\n    \\ ['quote\\.low\\.double', '„'],\n    \\ ['quote\\.low\\.single', '‚'],\n    \\ ['quote\\.r\\.double', '”'],\n    \\ ['quote\\.r\\.single', '’'],\n    \\ ['ratio', '∶'],\n    \\ ['rect\\.filled\\.h', '▬'],\n    \\ ['rect\\.filled\\.v', '▮'],\n    \\ ['rect\\.stroked\\.h', '▭'],\n    \\ ['rect\\.stroked\\.v', '▯'],\n    \\ ['refmark', '※'],\n    \\ ['rho', 'ρ'],\n    \\ ['rho\\.alt', 'ϱ'],\n    \\ ['ruble', '₽'],\n    \\ ['rupee', '₹'],\n    \\ ['sect', '∩'],\n    \\ ['sect\\.and', '⩄'],\n    \\ ['sect\\.big', '⋂'],\n    \\ ['sect\\.dot', '⩀'],\n    \\ ['sect\\.double', '⋒'],\n    \\ ['sect\\.sq', '⊓'],\n    \\ ['sect\\.sq\\.big', '⨅'],\n    \\ ['sect\\.sq\\.double', '⩎'],\n    \\ ['section', '§'],\n    \\ ['semi', ';'],\n    \\ ['semi\\.rev', '⁏'],\n    \\ ['servicemark', '℠'],\n    \\ ['shin', 'ש'],\n    \\ ['sigma', 'σ'],\n    \\ ['sigma\\.alt', 'ς'],\n    \\ ['slash', '/'],\n    \\ ['slash\\.big', '⧸'],\n    \\ ['slash\\.double', '⫽'],\n    \\ ['slash\\.triple', '⫻'],\n    \\ ['smash', '⨳'],\n    \\ ['space', '␣'],\n    \\ ['square\\.filled', '■'],\n    \\ ['square\\.filled\\.big', '⬛'],\n    \\ ['square\\.filled\\.medium', '◼'],\n    \\ ['square\\.filled\\.small', '◾'],\n    \\ ['square\\.filled\\.tiny', '▪'],\n    \\ ['square\\.stroked', '□'],\n    \\ ['square\\.stroked\\.big', '⬜'],\n    \\ ['square\\.stroked\\.dotted', '⬚'],\n    \\ ['square\\.stroked\\.medium', '◻'],\n    \\ ['square\\.stroked\\.rounded', '▢'],\n    \\ ['square\\.stroked\\.small', '◽'],\n    \\ ['square\\.stroked\\.tiny', '▫'],\n    \\ ['star\\.filled', '★'],\n    \\ ['star\\.op', '⋆'],\n    \\ ['star\\.stroked', '★'],\n    \\ ['subset', '⊂'],\n    \\ ['subset\\.dot', '⪽'],\n    \\ ['subset\\.double', '⋐'],\n    \\ ['subset\\.eq', '⊆'],\n    \\ ['subset\\.eq\\.not', '⊈'],\n    \\ ['subset\\.eq\\.sq', '⊑'],\n    \\ ['subset\\.eq\\.sq\\.not', '⋢'],\n    \\ ['subset\\.neq', '⊊'],\n    \\ ['subset\\.not', '⊄'],\n    \\ ['subset\\.sq', '⊏'],\n    \\ ['subset\\.sq\\.neq', '⋤'],\n    \\ ['succ', '≻'],\n    \\ ['succ\\.approx', '⪸'],\n    \\ ['succ\\.double', '⪼'],\n    \\ ['succ\\.eq', '≽'],\n    \\ ['succ\\.eq\\.not', '⋡'],\n    \\ ['succ\\.equiv', '⪴'],\n    \\ ['succ\\.napprox', '⪺'],\n    \\ ['succ\\.nequiv', '⪶'],\n    \\ ['succ\\.not', '⊁'],\n    \\ ['succ\\.ntilde', '⋩'],\n    \\ ['succ\\.tilde', '≿'],\n    \\ ['suit\\.club', '♣'],\n    \\ ['suit\\.diamond', '♦'],\n    \\ ['suit\\.heart', '♥'],\n    \\ ['suit\\.spade', '♠'],\n    \\ ['sum', '∑'],\n    \\ ['sum\\.integral', '⨋'],\n    \\ ['supset', '⊃'],\n    \\ ['supset\\.dot', '⪾'],\n    \\ ['supset\\.double', '⋑'],\n    \\ ['supset\\.eq', '⊇'],\n    \\ ['supset\\.eq\\.not', '⊉'],\n    \\ ['supset\\.eq\\.sq', '⊒'],\n    \\ ['supset\\.eq\\.sq\\.not', '⋣'],\n    \\ ['supset\\.neq', '⊋'],\n    \\ ['supset\\.not', '⊅'],\n    \\ ['supset\\.sq', '⊐'],\n    \\ ['supset\\.sq\\.neq', '⋥'],\n    \\ ['tack\\.b', '⊤'],\n    \\ ['tack\\.b\\.big', '⟙'],\n    \\ ['tack\\.b\\.double', '⫪'],\n    \\ ['tack\\.b\\.short', '⫟'],\n    \\ ['tack\\.l', '⊣'],\n    \\ ['tack\\.l\\.double', '⫤'],\n    \\ ['tack\\.l\\.long', '⟞'],\n    \\ ['tack\\.l\\.r', '⟛'],\n    \\ ['tack\\.l\\.short', '⫞'],\n    \\ ['tack\\.r', '⊢'],\n    \\ ['tack\\.r\\.double', '⊨'],\n    \\ ['tack\\.r\\.double\\.not', '⊭'],\n    \\ ['tack\\.r\\.long', '⟝'],\n    \\ ['tack\\.r\\.not', '⊬'],\n    \\ ['tack\\.r\\.short', '⊦'],\n    \\ ['tack\\.t', '⊥'],\n    \\ ['tack\\.t\\.big', '⟘'],\n    \\ ['tack\\.t\\.double', '⫫'],\n    \\ ['tack\\.t\\.short', '⫠'],\n    \\ ['tau', 'τ'],\n    \\ ['therefore', '∴'],\n    \\ ['theta', 'θ'],\n    \\ ['theta\\.alt', 'ϑ'],\n    \\ ['tilde\\.basic', '~'],\n    \\ ['tilde\\.eq', '≃'],\n    \\ ['tilde\\.eq\\.not', '≄'],\n    \\ ['tilde\\.eq\\.rev', '⋍'],\n    \\ ['tilde\\.equiv', '≅'],\n    \\ ['tilde\\.equiv\\.not', '≇'],\n    \\ ['tilde\\.nequiv', '≆'],\n    \\ ['tilde\\.not', '≁'],\n    \\ ['tilde\\.op', '∼'],\n    \\ ['tilde\\.rev', '∽'],\n    \\ ['tilde\\.rev\\.equiv', '≌'],\n    \\ ['tilde\\.triple', '≋'],\n    \\ ['times', '×'],\n    \\ ['times\\.big', '⨉'],\n    \\ ['times\\.circle', '⊗'],\n    \\ ['times\\.circle\\.big', '⨂'],\n    \\ ['times\\.div', '⋇'],\n    \\ ['times\\.l', '⋉'],\n    \\ ['times\\.r', '⋊'],\n    \\ ['times\\.square', '⊠'],\n    \\ ['times\\.three\\.l', '⋋'],\n    \\ ['times\\.three\\.r', '⋌'],\n    \\ ['times\\.triangle', '⨻'],\n    \\ ['top', '⊤'],\n    \\ ['triangle\\.filled\\.b', '▼'],\n    \\ ['triangle\\.filled\\.bl', '◣'],\n    \\ ['triangle\\.filled\\.br', '◢'],\n    \\ ['triangle\\.filled\\.l', '◀'],\n    \\ ['triangle\\.filled\\.r', '▶'],\n    \\ ['triangle\\.filled\\.small\\.b', '▾'],\n    \\ ['triangle\\.filled\\.small\\.l', '◂'],\n    \\ ['triangle\\.filled\\.small\\.r', '▸'],\n    \\ ['triangle\\.filled\\.small\\.t', '▴'],\n    \\ ['triangle\\.filled\\.t', '▲'],\n    \\ ['triangle\\.filled\\.tl', '◤'],\n    \\ ['triangle\\.filled\\.tr', '◥'],\n    \\ ['triangle\\.stroked\\.b', '▽'],\n    \\ ['triangle\\.stroked\\.bl', '◺'],\n    \\ ['triangle\\.stroked\\.br', '◿'],\n    \\ ['triangle\\.stroked\\.dot', '◬'],\n    \\ ['triangle\\.stroked\\.l', '◁'],\n    \\ ['triangle\\.stroked\\.nested', '⟁'],\n    \\ ['triangle\\.stroked\\.r', '▷'],\n    \\ ['triangle\\.stroked\\.rounded', '🛆'],\n    \\ ['triangle\\.stroked\\.small\\.b', '▿'],\n    \\ ['triangle\\.stroked\\.small\\.l', '◃'],\n    \\ ['triangle\\.stroked\\.small\\.r', '▹'],\n    \\ ['triangle\\.stroked\\.small\\.t', '▵'],\n    \\ ['triangle\\.stroked\\.t', '△'],\n    \\ ['triangle\\.stroked\\.tl', '◸'],\n    \\ ['triangle\\.stroked\\.tr', '◹'],\n    \\ ['turtle\\.b', '⏡'],\n    \\ ['turtle\\.l', '〔'],\n    \\ ['turtle\\.r', '〕'],\n    \\ ['turtle\\.t', '⏠'],\n    \\ ['union', '∪'],\n    \\ ['union\\.arrow', '⊌'],\n    \\ ['union\\.big', '⋃'],\n    \\ ['union\\.dot', '⊍'],\n    \\ ['union\\.dot\\.big', '⨃'],\n    \\ ['union\\.double', '⋓'],\n    \\ ['union\\.minus', '⩁'],\n    \\ ['union\\.or', '⩅'],\n    \\ ['union\\.plus', '⊎'],\n    \\ ['union\\.plus\\.big', '⨄'],\n    \\ ['union\\.sq', '⊔'],\n    \\ ['union\\.sq\\.big', '⨆'],\n    \\ ['union\\.sq\\.double', '⩏'],\n    \\ ['upsilon', 'υ'],\n    \\ ['without', '∖'],\n    \\ ['won', '₩'],\n    \\ ['wreath', '≀'],\n    \\ ['xi', 'ξ'],\n    \\ ['xor', '⊕'],\n    \\ ['xor\\.big', '⨁'],\n    \\ ['yen', '¥'],\n    \\ ['zeta', 'ζ'],\n\\ ]\n\nfor typmath in s:typstMathList\n    \"exe \"syn match typstMathSymbol '\\\\(\\\\<\\\\|_\\\\)\\\\zs\".typmath[0].\"\\\\ze\\\\(\\\\>[^.]\\\\|_\\\\|$\\\\)' contained conceal cchar=\".typmath[1]\n    \" exe \"syn match typstMathSymbol '\\\\a\\\\@<!\".typmath[0].\"\\\\a\\\\@!' contained conceal cchar=\".typmath[1]\n    exe \"syn match typstMathSymbol '\".typmath[0].\"' contained conceal cchar=\".typmath[1]\nendfor\n\nlet s:typstMathList2=[\n    \\ ['\\[|', '⟦'],\n    \\ ['|\\]', '⟧'],\n    \\ ['||', '‖'],\n    \\ ['\\*', '∗'],\n    \\ [':=', '≔'],\n    \\ ['::=', '⩴'],\n    \\ ['\\.\\.\\.', '…'],\n    \\ [\"\\\\'\", \"′\"],\n    \\ ['=:', '≕'],\n    \\ ['!=', '≠'],\n    \\ ['>>', '≫'],\n    \\ ['>=', '≥'],\n    \\ ['>>>', '⋙'],\n    \\ ['<<', '≪'],\n    \\ ['<=', '≤'],\n    \\ ['<<<', '⋘'],\n    \\ ['->', '→'],\n    \\ ['|->', '↦'],\n    \\ ['=>', '⇒'],\n    \\ ['|=>', '⤇'],\n    \\ ['==>', '⟹'],\n    \\ ['-->', '⟶'],\n    \\ ['\\~\\~>', '⟿'],\n    \\ ['\\~>', '⇝'],\n    \\ ['>->', '↣'],\n    \\ ['->>', '↠'],\n    \\ ['<-', '←'],\n    \\ ['<==', '⟸'],\n    \\ ['<--', '⟵'],\n    \\ ['<\\~\\~', '⬳'],\n    \\ ['<\\~', '⇜'],\n    \\ ['<-<', '↢'],\n    \\ ['<<-', '↞'],\n    \\ ['<->', '↔'],\n    \\ ['<=>', '⇔'],\n    \\ ['<==>', '⟺'],\n    \\ ['<-->', '⟷'],\n\\ ]\n\nfor typmath in s:typstMathList2\n    \"exe \"syn match typstMathSymbol '\\\\(\\\\<\\\\|^\\\\|\\\\w\\\\|\\\\s\\\\|\\\\$\\\\)\\\\zs\".typmath[0].\"\\\\ze\\\\(\\\\w\\\\|\\\\s\\\\|$\\\\|\\\\$\\\\)' contained conceal cchar=\".typmath[1]\n    exe \"syn match typstMathSymbol '\".typmath[0].\"' contained conceal cchar=\".typmath[1]\nendfor\n\nlet s:typstCalList=[\n    \\ ['A', '𝓐'],\n    \\ ['B', '𝓑'],\n    \\ ['C', '𝓒'],\n    \\ ['D', '𝓓'],\n    \\ ['E', '𝓔'],\n    \\ ['F', '𝓕'],\n    \\ ['G', '𝓖'],\n    \\ ['H', '𝓗'],\n    \\ ['I', '𝓘'],\n    \\ ['J', '𝓙'],\n    \\ ['K', '𝓚'],\n    \\ ['L', '𝓛'],\n    \\ ['M', '𝓜'],\n    \\ ['N', '𝓝'],\n    \\ ['O', '𝓞'],\n    \\ ['P', '𝓟'],\n    \\ ['Q', '𝓠'],\n    \\ ['R', '𝓡'],\n    \\ ['S', '𝓢'],\n    \\ ['T', '𝓣'],\n    \\ ['U', '𝓤'],\n    \\ ['V', '𝓥'],\n    \\ ['W', '𝓦'],\n    \\ ['X', '𝓧'],\n    \\ ['Y', '𝓨'],\n    \\ ['Z', '𝓩'],\n    \\ ['a', '𝓪'],\n    \\ ['b', '𝓫'],\n    \\ ['c', '𝓬'],\n    \\ ['d', '𝓭'],\n    \\ ['e', '𝓮'],\n    \\ ['f', '𝓯'],\n    \\ ['g', '𝓰'],\n    \\ ['h', '𝓱'],\n    \\ ['i', '𝓲'],\n    \\ ['j', '𝓳'],\n    \\ ['k', '𝓴'],\n    \\ ['l', '𝓵'],\n    \\ ['m', '𝓶'],\n    \\ ['n', '𝓷'],\n    \\ ['o', '𝓸'],\n    \\ ['p', '𝓹'],\n    \\ ['q', '𝓺'],\n    \\ ['r', '𝓻'],\n    \\ ['s', '𝓼'],\n    \\ ['t', '𝓽'],\n    \\ ['u', '𝓾'],\n    \\ ['v', '𝓿'],\n    \\ ['w', '𝔀'],\n    \\ ['x', '𝔁'],\n    \\ ['y', '𝔂'],\n    \\ ['z', '𝔃'],\n\\ ]\n\nfor typmath in s:typstCalList\n    \"exe \"syn match typstMathSymbol '\\\\%(\\\\<\\\\|_\\\\)\\\\zscal(\".typmath[0].\")' contained conceal cchar=\".typmath[1]\n    \"exe \"syn match typstMathSymbol '\\\\%(\\\\<\\\\|_\\\\)\\\\zsfca(\".typmath[0].\")' contained conceal cchar=\".typmath[1]\n    \" exe \"syn match typstMathSymbol '\\\\a\\\\@<!cal(\".typmath[0].\")' contained conceal cchar=\".typmath[1]\n    \" exe \"syn match typstMathSymbol '\\\\a\\\\@<!fca(\".typmath[0].\")' contained conceal cchar=\".typmath[1]\n    exe \"syn match typstMathSymbol 'cal(\".typmath[0].\")' contained conceal cchar=\".typmath[1]\n    exe \"syn match typstMathSymbol 'fca(\".typmath[0].\")' contained conceal cchar=\".typmath[1]\nendfor\n\nlet s:typstBBList=[\n    \\ ['A', '𝔸'],\n    \\ ['B', '𝔹'],\n    \\ ['C', 'ℂ'],\n    \\ ['D', '𝔻'],\n    \\ ['E', '𝔼'],\n    \\ ['F', '𝔽'],\n    \\ ['G', '𝔾'],\n    \\ ['H', 'ℍ'],\n    \\ ['I', '𝕀'],\n    \\ ['J', '𝕁'],\n    \\ ['K', '𝕂'],\n    \\ ['L', '𝕃'],\n    \\ ['M', '𝕄'],\n    \\ ['N', 'ℕ'],\n    \\ ['O', '𝕆'],\n    \\ ['P', 'ℙ'],\n    \\ ['Q', 'ℚ'],\n    \\ ['R', 'ℝ'],\n    \\ ['S', '𝕊'],\n    \\ ['T', '𝕋'],\n    \\ ['U', '𝕌'],\n    \\ ['V', '𝕍'],\n    \\ ['W', '𝕎'],\n    \\ ['X', '𝕏'],\n    \\ ['Y', '𝕐'],\n    \\ ['Z', 'ℤ'],\n    \\ ['a', '𝕒'],\n    \\ ['b', '𝕓'],\n    \\ ['c', '𝕔'],\n    \\ ['d', '𝕕'],\n    \\ ['e', '𝕖'],\n    \\ ['f', '𝕗'],\n    \\ ['g', '𝕘'],\n    \\ ['h', '𝕙'],\n    \\ ['i', '𝕚'],\n    \\ ['j', '𝕛'],\n    \\ ['k', '𝕜'],\n    \\ ['l', '𝕝'],\n    \\ ['m', '𝕞'],\n    \\ ['n', '𝕟'],\n    \\ ['o', '𝕠'],\n    \\ ['p', '𝕡'],\n    \\ ['q', '𝕢'],\n    \\ ['r', '𝕣'],\n    \\ ['s', '𝕤'],\n    \\ ['t', '𝕥'],\n    \\ ['u', '𝕦'],\n    \\ ['v', '𝕧'],\n    \\ ['w', '𝕨'],\n    \\ ['x', '𝕩'],\n    \\ ['y', '𝕪'],\n    \\ ['z', '𝕫'],\n    \\ ['0', '𝟘'],\n    \\ ['1', '𝟙'],\n    \\ ['2', '𝟚'],\n    \\ ['3', '𝟛'],\n    \\ ['4', '𝟜'],\n    \\ ['5', '𝟝'],\n    \\ ['6', '𝟞'],\n    \\ ['7', '𝟟'],\n    \\ ['8', '𝟠'],\n    \\ ['9', '𝟡'],\n\\ ]\n\nfor typmath in s:typstBBList\n    \"exe \"syn match typstMathSymbol '\\\\(\\\\<\\\\|_\\\\)\\\\zsbb(\".typmath[0].\")' contained conceal cchar=\".typmath[1]\n    \"exe \"syn match typstMathSymbol '\\\\(\\\\<\\\\|_\\\\)\\\\zsfbb(\".typmath[0].\")' contained conceal cchar=\".typmath[1]\n    \" exe \"syn match typstMathSymbol '\\\\a\\\\@<!bb(\".typmath[0].\")' contained conceal cchar=\".typmath[1]\n    \" exe \"syn match typstMathSymbol '\\\\a\\\\@<!fbb(\".typmath[0].\")' contained conceal cchar=\".typmath[1]\n    exe \"syn match typstMathSymbol 'bb(\".typmath[0].\")' contained conceal cchar=\".typmath[1]\n    exe \"syn match typstMathSymbol 'fbb(\".typmath[0].\")' contained conceal cchar=\".typmath[1]\nendfor\n\n\nsyntax region typstMathBold\n    \\ matchgroup=typstMathFunction start=/fb(/ end=/)/\n    \\ contains=@typstMath\n    \\ contained concealends\n\nsyntax region typstMathBold\n    \\ matchgroup=typstMathFunction start=/bold(/ end=/)/\n    \\ contains=@typstMath\n    \\ contained concealends\n\nhighlight default link typstMathBold         typstMarkupBold\n\nlet s:typstSubList=[\n    \\ ['0', '₀'],\n    \\ ['1', '₁'],\n    \\ ['2', '₂'],\n    \\ ['3', '₃'],\n    \\ ['4', '₄'],\n    \\ ['5', '₅'],\n    \\ ['6', '₆'],\n    \\ ['7', '₇'],\n    \\ ['8', '₈'],\n    \\ ['9', '₉'],\n    \\ ['+', '₊'],\n    \\ ['-', '₋'],\n    \\ ['=', '₌'],\n    \\ ['a', 'ₐ'],\n    \\ ['e', 'ₑ'],\n    \\ ['o', 'ₒ'],\n    \\ ['x', 'ₓ'],\n    \\ ['h', 'ₕ'],\n    \\ ['k', 'ₖ'],\n    \\ ['l', 'ₗ'],\n    \\ ['m', 'ₘ'],\n    \\ ['n', 'ₙ'],\n    \\ ['p', 'ₚ'],\n    \\ ['s', 'ₛ'],\n    \\ ['t', 'ₜ'],\n\\ ]\n\nfor typmath in s:typstSubList\n    exe \"syn match typstMathScripts '_\".typmath[0].\"' contained conceal cchar=\".typmath[1]\nendfor\n\nlet s:typstSupList=[\n    \\ ['0', '⁰'],\n    \\ ['1', '¹'],\n    \\ ['2', '²'],\n    \\ ['3', '³'],\n    \\ ['4', '⁴'],\n    \\ ['5', '⁵'],\n    \\ ['6', '⁶'],\n    \\ ['7', '⁷'],\n    \\ ['8', '⁸'],\n    \\ ['9', '⁹'],\n    \\ ['+', '⁺'],\n    \\ ['-', '⁻'],\n    \\ ['=', '⁼'],\n    \\ ['n', 'ⁿ'],\n    \\ ['i', 'ⁱ'],\n\\ ]\n\nfor typmath in s:typstSupList\n    exe \"syn match typstMathScripts '\\\\^\".typmath[0].\"' contained conceal cchar=\".typmath[1]\nendfor\n\n\" vim: sw=4 sts=4 et fdm=marker fdl=0 \n"
  },
  {
    "path": "syntax/typst.vim",
    "content": "\" Vim syntax file\n\" Language: Typst\n\" Maintainer: Kaj Munhoz Arfvidsson\n\" Upstream: https://github.com/kaarmu/typst.vim\n\nif exists(\"b:current_syntax\") | finish | endif\n\ncall typst#options#init()\nif !g:typst_syntax_highlight | finish | endif\n\nsyntax sync fromstart\nsyntax spell toplevel\n\n\" Common {{{1\nsyntax cluster typstCommon\n    \\ contains=@typstComment\n\n\" Common > Comment {{{2\nsyntax cluster typstComment\n    \\ contains=typstCommentBlock,typstCommentLine\nsyntax region typstCommentBlock\n    \\ start=\"/\\*\" end=\"\\*/\" keepend\n    \\ contains=typstCommentTodo,@Spell\nsyntax match typstCommentLine\n    \\ #//.*#\n    \\ contains=typstCommentTodo,@Spell\nsyntax keyword typstCommentTodo\n    \\ contained\n    \\ TODO FIXME XXX TBD\n\n\n\" Code {{{1\nsyntax cluster typstCode\n    \\ contains=@typstCommon\n            \\ ,@typstCodeKeywords\n            \\ ,@typstCodeConstants\n            \\ ,@typstCodeIdentifiers\n            \\ ,@typstCodeFunctions\n            \\ ,@typstCodeParens\n\n\" Code > Keywords {{{2\nsyntax cluster typstCodeKeywords\n    \\ contains=typstCodeConditional\n            \\ ,typstCodeRepeat\n            \\ ,typstCodeKeyword\n            \\ ,typstCodeStatement\nsyntax keyword typstCodeConditional\n    \\ contained\n    \\ if else\nsyntax keyword typstCodeRepeat\n    \\ contained\n    \\ while for\nsyntax keyword typstCodeKeyword\n    \\ contained\n    \\ not in and or return\nsyntax region typstCodeStatement\n    \\ contained\n    \\ matchgroup=typstCodeStatementWord start=/\\v(let|set|import|include|context)>/\n    \\ matchgroup=Noise end=/\\v%(;|$)/\n    \\ contains=@typstCode\nsyntax region typstCodeStatement\n    \\ contained\n    \\ matchgroup=typstCodeStatementWord start=/show/\n    \\ matchgroup=Noise end=/\\v%(:|$)/ keepend\n    \\ contains=@typstCode\n    \\ skipwhite nextgroup=@typstCode,typstCodeShowRocket\nsyntax match typstCodeShowRocket\n    \\ contained\n    \\ /.*=>/\n    \\ contains=@typstCode\n    \\ skipwhite nextgroup=@typstCode\n\n\" Code > Identifiers {{{2\nsyntax cluster typstCodeIdentifiers\n    \\ contains=typstCodeIdentifier\n            \\ ,typstCodeFieldAccess\nsyntax match typstCodeIdentifier\n    \\ contained\n    \\ /\\v<\\K%(\\k|-)*>(<%(let|set|show|import|include|context))@<![\\.\\[\\(]@!/\nsyntax match typstCodeFieldAccess\n    \\ contained\n    \\ /\\v<\\K%(\\k|-)*>(<%(let|set|show|import|include|context))@<!\\.[\\[\\(]@!/\n    \\ nextgroup=typstCodeFieldAccess,typstCodeFunction\n\n\" Code > Functions {{{2\nsyntax cluster typstCodeFunctions\n    \\ contains=typstCodeFunction\nsyntax match typstCodeFunction\n    \\ contained\n    \\ /\\v<\\K%(\\k|-)*>(<%(let|set|show|import|include|context))@<![\\(\\[]@=/\n    \\ nextgroup=typstCodeFunctionArgument\nsyntax match typstCodeFunctionArgument\n    \\ contained\n    \\ /\\v%(%(\\(.{-}\\)|\\[.{-}\\]|\\{.{-}\\}))*/ transparent\n    \\ contains=@typstCode\n\n\" Code > Constants {{{2\nsyntax cluster typstCodeConstants\n    \\ contains=typstCodeConstant\n            \\ ,typstCodeFloat\n            \\ ,typstCodeInteger\n            \\ ,typstCodeString\n            \\ ,typstCodeLabel\nsyntax match typstCodeConstant\n    \\ contained\n    \\ /\\v<%(none|auto|true|false)-@!>/\nsyntax match typstCodeInteger\n    \\ contained\n    \\ /\\v<%(\\d+|0b[01]+|0o[0-7]+|0x\\x+)>/\n\n\" 1.0, 1., .0, 1.e6, 1.e-6, 1.e+6, 1e6\nsyntax match typstCodeFloat\n    \\ contained\n    \\ /\\v<%(%(\\d+\\.\\d*|\\.\\d+)%([eE][+-]?\\d+)?|\\d+[eE][+-]?\\d+)/\n    \\ nextgroup=typstCodeFloatRatio ,typstCodeFloatLength ,typstCodeFloatAngle ,typstCodeFloatFraction\nsyntax match typstCodeFloatRatio contained /%/\nsyntax match typstCodeFloatLength contained /\\v(pt|mm|cm|in|em)>/\nsyntax match typstCodeFloatAngle contained /\\v(deg|rad)>/\nsyntax match typstCodeFloatFraction contained /fr\\>/\n\nsyntax region typstCodeString\n    \\ contained\n    \\ start=/\"/ skip=/\\v\\\\\\\\|\\\\\"/ end=/\"/\n    \\ contains=@Spell\nsyntax match typstCodeLabel\n    \\ contained\n    \\ /\\v\\<%(\\k|:|\\.|-)*\\>/\n\n\" Code > Parens {{{2\nsyntax cluster typstCodeParens\n    \\ contains=typstCodeParen\n            \\ ,typstCodeBrace\n            \\ ,typstCodeBracket\n            \\ ,typstCodeDollar\n            \\ ,typstMarkupRawInline\n            \\ ,typstMarkupRawBlock\nsyntax region typstCodeParen\n    \\ contained\n    \\ matchgroup=Noise start=/(/ end=/)/\n    \\ contains=@typstCode\nsyntax region typstCodeBrace\n    \\ contained\n    \\ matchgroup=Noise start=/{/ end=/}/\n    \\ contains=@typstCode\nsyntax region typstCodeBracket\n    \\ contained\n    \\ matchgroup=Noise start=/\\[/ end=/\\]/\n    \\ contains=@typstMarkup\nsyntax region typstCodeDollar\n    \\ contained\n    \\ matchgroup=Number start=/\\\\\\@<!\\$/ end=/\\\\\\@<!\\$/\n    \\ contains=@typstMath\n\n\n\" Hashtag {{{1\nsyntax cluster typstHashtag\n    \\ contains=@typstHashtagKeywords\n            \\ ,@typstHashtagConstants\n            \\ ,@typstHashtagIdentifiers\n            \\ ,@typstHashtagFunctions\n            \\ ,@typstHashtagParens\n\n\" Hashtag > Keywords {{{2\nsyntax cluster typstHashtagKeywords\n    \\ contains=typstHashtagConditional\n            \\ ,typstHashtagRepeat\n            \\ ,typstHashtagKeywords\n            \\ ,typstHashtagStatement\n\n\" syntax match typstHashtagControlFlowError\n\"     \\ /\\v#%(if|while|for)>-@!.{-}$\\_.{-}%(\\{|\\[|\\()/\nsyntax match typstHashtagControlFlow\n    \\ /\\v#%(if|while|for)>.{-}\\ze%(\\{|\\[|\\()/\n    \\ contains=typstHashtagConditional,typstHashtagRepeat\n    \\ nextgroup=@typstCode\nsyntax region typstHashtagConditional\n    \\ contained\n    \\ start=/\\v#if>/ end=/\\v\\ze(\\{|\\[)/\n    \\ contains=@typstCode\nsyntax region typstHashtagRepeat\n    \\ contained\n    \\ start=/\\v#(while|for)>/ end=/\\v\\ze(\\{|\\[)/\n    \\ contains=@typstCode\nsyntax match typstHashtagKeyword\n    \\ /\\v#(return)>/\n    \\ skipwhite nextgroup=@typstCode\nsyntax region typstHashtagStatement\n    \\ matchgroup=typstHashtagStatementWord start=/\\v#(let|set|import|include|context)>/\n    \\ matchgroup=Noise end=/\\v%(;|$)/\n    \\ contains=@typstCode\nsyntax region typstHashtagStatement\n    \\ matchgroup=typstHashtagStatementWord start=/#show/\n    \\ matchgroup=Noise end=/\\v%(:|$)/ keepend\n    \\ contains=@typstCode\n    \\ skipwhite nextgroup=@typstCode,typstCodeShowRocket\n\n\" Hashtag > Constants {{{2\nsyntax cluster typstHashtagConstants\n    \\ contains=typstHashtagConstant\nsyntax match typstHashtagConstant\n    \\ /\\v#(none|auto|true|false)>/\n\n\" Hashtag > Identifiers {{{2\nsyntax cluster typstHashtagIdentifiers\n    \\ contains=typstHashtagIdentifier\n            \\ ,typstHashtagFieldAccess\nsyntax match typstHashtagIdentifier\n    \\ /\\v#\\K%(\\k|-)*>(<%(let|set|show|import|include|context))@<![\\.\\[\\(]@!/\nsyntax match typstHashtagFieldAccess\n    \\ /\\v#\\K%(\\k|-)*>(<%(let|set|show|import|include|context))@<!\\.[\\[\\(]@!/\n    \\ nextgroup=typstCodeFieldAccess,typstCodeFunction\n\nif g:typst_conceal_emoji\n    runtime! syntax/typst-emoji.vim\nendif\n\n\n\" Hashtag > Functions {{{2\nsyntax cluster typstHashtagFunctions\n    \\ contains=typstHashtagFunction\nsyntax match typstHashtagFunction\n    \\ /\\v#\\K%(\\k|-)*>(<%(let|set|show|import|include|context))@<![\\(\\[]@=/\n    \\ nextgroup=typstCodeFunctionArgument\n\n\" Hashtag > Parens {{{2\nsyntax cluster typstHashtagParens\n    \\ contains=typstHashtagParen\n            \\ ,typstHashtagBrace\n            \\ ,typstHashtagBracket\n            \\ ,typstHashtagDollar\nsyntax region typstHashtagParen\n    \\ matchgroup=Noise start=/#(/ end=/)/\n    \\ contains=@typstCode\nsyntax region typstHashtagBrace\n    \\ matchgroup=Noise start=/#{/ end=/}/\n    \\ contains=@typstCode\nsyntax region typstHashtagBracket\n    \\ matchgroup=Noise start=/#\\[/ end=/\\]/\n    \\ contains=@typstMarkup\nsyntax region typstHashtagDollar\n    \\ matchgroup=Noise start=/#\\$/ end=/\\\\\\@<!\\$/\n    \\ contains=@typstMath\n\n\n\" Markup {{{1\nsyntax cluster typstMarkup\n    \\ contains=@typstCommon\n            \\ ,@Spell\n            \\ ,@typstHashtag\n            \\ ,@typstMarkupText\n            \\ ,@typstMarkupParens\n\n\" Markup > Text {{{2\nsyntax cluster typstMarkupText\n    \\ contains=typstMarkupRawInline\n            \\ ,typstMarkupRawBlock\n            \\ ,typstMarkupLabel\n            \\ ,typstMarkupRefMarker\n            \\ ,typstMarkupUrl\n            \\ ,typstMarkupHeading\n            \\ ,typstMarkupBulletList\n            \\ ,typstMarkupEnumList\n            \\ ,typstMarkupTermMarker\n            \\ ,typstMarkupBold\n            \\ ,typstMarkupItalic\n            \\ ,typstMarkupLinebreak\n            \\ ,typstMarkupNonbreakingSpace\n            \\ ,typstMarkupSoftHyphen\n            \\ ,typstMarkupDash\n            \\ ,typstMarkupEllipsis\n\n\" Raw Text\nsyntax match typstMarkupRawInline\n    \\ /`.\\{-}`/\nsyntax region typstMarkupRawBlock\n    \\ matchgroup=Macro start=/```\\w*/\n    \\ matchgroup=Macro end=/```/ keepend\nif g:typst_conceal\n    syntax region typstMarkupCodeBlockTypst\n        \\ matchgroup=Macro start=/```typst/\n        \\ matchgroup=Macro end=/```/ contains=@typstCode keepend\n        \\ concealends\nelse\n    syntax region typstMarkupCodeBlockTypst\n        \\ matchgroup=Macro start=/```typst/\n        \\ matchgroup=Macro end=/```/ contains=@typstCode keepend\nendif\nruntime! syntax/typst-embedded.vim\n\n\" Label & Reference\nsyntax match typstMarkupLabel\n    \\ /\\v\\<%(\\k|:|\\.|-)*\\>/\n\" Ref markers can't end in ':' or '.', but labels can\nsyntax match typstMarkupRefMarker\n    \\ /\\v\\@%(\\k|:|\\.|-)*%(\\k|-)/\n\n\" URL\nsyntax match typstMarkupUrl\n    \\ #\\v\\w+://\\S*#\n\n\" Heading\nsyntax match typstMarkupHeading\n    \\ /^\\s*\\zs=\\{1,6}\\s.*$/\n    \\ contains=typstMarkupLabel,@Spell\n\n\" Lists\nsyntax match typstMarkupBulletList\n    \\ /\\v^\\s*-\\s+/\nsyntax match typstMarkupEnumList\n    \\ /\\v^\\s*(\\+|\\d+\\.)\\s+/\nsyntax region typstMarkupTermMarker\n    \\ oneline start=/\\v^\\s*\\/\\s/ end=/:/\n    \\ contains=@typstMarkup\n\n\" Bold & Italic\nsyntax match typstMarkupBold\n    \\ /\\v(\\w|\\\\)@1<!\\*\\S@=.{-}(\\n.{-1,})*\\S@1<=\\\\@1<!\\*/\n    \\ contains=typstMarkupBoldRegion\nsyntax match typstMarkupItalic\n    \\ /\\v(\\w|\\\\)@1<!_\\S@=.{-}(\\n.{-1,})*\\S@1<=\\\\@1<!_/\n    \\ contains=typstMarkupItalicRegion\nsyntax match typstMarkupBoldItalic\n    \\ contained\n    \\ /\\v(\\w|\\\\)@1<![_\\*]\\S@=.{-}(\\n.{-1,})*\\S@1<=\\\\@1<!\\2/\n    \\ contains=typstMarkupBoldRegion,typstMarkupItalicRegion\nif g:typst_conceal\n    syntax region typstMarkupBoldRegion\n        \\ contained\n        \\ transparent matchgroup=typstMarkupBold\n        \\ start=/\\(^\\|[^0-9a-zA-Z]\\)\\@<=\\*/ end=/\\*\\($\\|[^0-9a-zA-Z]\\)\\@=/\n        \\ concealends contains=typstMarkupBoldItalic,typstMarkupLabel,@Spell\n    syntax region typstMarkupItalicRegion\n        \\ contained\n        \\ transparent matchgroup=typstMarkupItalic\n        \\ start=/\\(^\\|[^0-9a-zA-Z]\\)\\@<=_/ end=/_\\($\\|[^0-9a-zA-Z]\\)\\@=/\n        \\ concealends contains=typstMarkupBoldItalic,typstMarkupLabel,@Spell\nelse\n    syntax region typstMarkupBoldRegion\n        \\ contained\n        \\ transparent matchgroup=typstMarkupBold\n        \\ start=/\\(^\\|[^0-9a-zA-Z]\\)\\@<=\\*/ end=/\\*\\($\\|[^0-9a-zA-Z]\\)\\@=/\n        \\ contains=typstMarkupBoldItalic,typstMarkupLabel,@Spell\n    syntax region typstMarkupItalicRegion\n        \\ contained\n        \\ transparent matchgroup=typstMarkupItalic\n        \\ start=/\\(^\\|[^0-9a-zA-Z]\\)\\@<=_/ end=/_\\($\\|[^0-9a-zA-Z]\\)\\@=/\n        \\ contains=typstMarkupBoldItalic,typstMarkupLabel,@Spell\nendif\n\n\" Linebreak & Special Whitespace\nsyntax match typstMarkupLinebreak\n    \\ /\\\\\\\\/\nsyntax match typstMarkupNonbreakingSpace\n    \\ /\\~/\n\n\" Special Symbols\nsyntax match typstMarkupSoftHyphen\n    \\ /-?/\nsyntax match typstMarkupDash\n    \\ /-\\{2,3}/\nsyntax match typstMarkupEllipsis\n    \\ /\\.\\.\\./\n\n\" Markup > Parens {{{2\nsyntax cluster typstMarkupParens\n    \\ contains=typstMarkupBracket\n            \\ ,typstMarkupDollar\nsyntax region typstMarkupBracket\n    \\ matchgroup=Noise start=/\\[/ end=/\\]/\n    \\ contains=@typstMarkup\nsyntax region typstMarkupDollar\n    \\ matchgroup=Special start=/\\\\\\@<!\\$/ end=/\\\\\\@<!\\$/\n    \\ contains=@typstMath\n\n\n\" Math {{{1\nsyntax cluster typstMath\n    \\ contains=@typstCommon\n            \\ ,@typstHashtag\n            \\ ,typstMathIdentifier\n            \\ ,typstMathFunction\n            \\ ,typstMathNumber\n            \\ ,typstMathSymbol\n            \\ ,typstMathBold\n            \\ ,typstMathScripts\n            \\ ,typstMathQuote\n\n\" a math identifier should be like \\k without '_'\nsyntax match typstMathIdentifier\n    \\ /\\v<\\a%(\\a|\\d)+>/\n    \\ contained\nsyntax match typstMathFunction\n    \\ /\\v<\\a%(\\a|\\d)+\\ze\\(/\n    \\ contained\nsyntax match typstMathNumber\n    \\ /\\v<\\d+>/\n    \\ contained\nsyntax region typstMathQuote\n    \\ matchgroup=String start=/\"/ skip=/\\\\\"/ end=/\"/\n    \\ contained\n\nif g:typst_conceal_math\n    runtime! syntax/typst-symbols.vim\nendif\n\n\n\" Math > Linked groups {{{2\nhighlight default link typstMathIdentifier          Identifier\nhighlight default link typstMathFunction            Statement\nhighlight default link typstMathNumber              Number\nhighlight default link typstMathSymbol              Statement\n\n\" Highlighting {{{1\n\n\" Highlighting > Linked groups {{{2\nhighlight default link typstCommentBlock            Comment\nhighlight default link typstCommentLine             Comment\nhighlight default link typstCommentTodo             Todo\nhighlight default link typstCodeConditional         Conditional\nhighlight default link typstCodeRepeat              Repeat\nhighlight default link typstCodeKeyword             Keyword\nhighlight default link typstCodeConstant            Constant\nhighlight default link typstCodeInteger             Number\nhighlight default link typstCodeFloat               Number\nhighlight default link typstCodeFloatLength         Number\nhighlight default link typstCodeFloatAngle          Number\nhighlight default link typstCodeFloatRatio          Number\nhighlight default link typstCodeFloatFraction       Number\nhighlight default link typstCodeString              String\nhighlight default link typstCodeLabel               Structure\nhighlight default link typstCodeStatementWord       Statement\nhighlight default link typstCodeIdentifier          Identifier\nhighlight default link typstCodeFieldAccess         Identifier\nhighlight default link typstCodeFunction            Function\nhighlight default link typstCodeParen               Noise\nhighlight default link typstCodeBrace               Noise\nhighlight default link typstCodeBracket             Noise\nhighlight default link typstCodeDollar              Noise\n\" highlight default link typstHashtagControlFlowError Error\nhighlight default link typstHashtagConditional      Conditional\nhighlight default link typstHashtagRepeat           Repeat\nhighlight default link typstHashtagKeyword          Keyword\nhighlight default link typstHashtagConstant         Constant\nhighlight default link typstHashtagStatementWord    Statement\nhighlight default link typstHashtagIdentifier       Identifier\nhighlight default link typstHashtagFieldAccess      Identifier\nhighlight default link typstHashtagFunction         Function\nhighlight default link typstHashtagParen            Noise\nhighlight default link typstHashtagBrace            Noise\nhighlight default link typstHashtagBracket          Noise\nhighlight default link typstHashtagDollar           Noise\nhighlight default link typstMarkupRawInline         Macro\nhighlight default link typstMarkupRawBlock          Macro\nhighlight default link typstMarkupLabel             Structure\nhighlight default link typstMarkupRefMarker         Structure\nhighlight default link typstMarkupBulletList        Structure\nhighlight default link typstMarkupHeading           Title\n\" highlight default link typstMarkupItalicError       Error\n\" highlight default link typstMarkupBoldError         Error\nhighlight default link typstMarkupEnumList          Structure\nhighlight default link typstMarkupLinebreak         Structure\nhighlight default link typstMarkupNonbreakingSpace  Structure\nhighlight default link typstMarkupSoftHyphen        Structure\nhighlight default link typstMarkupDash              Structure\nhighlight default link typstMarkupEllipsis          Structure\nhighlight default link typstMarkupTermMarker        Structure\nhighlight default link typstMarkupDollar            Noise\n\n\" Highlighting > Custom Styling {{{2\nhighlight! Conceal ctermfg=NONE ctermbg=NONE guifg=NONE guibg=NONE\n\nhighlight default typstMarkupUrl                        term=underline          cterm=underline         gui=underline\nhighlight default typstMarkupBold                       term=bold               cterm=bold              gui=bold\nhighlight default typstMarkupItalic                     term=italic             cterm=italic            gui=italic\nhighlight default typstMarkupBoldItalic                 term=bold,italic        cterm=bold,italic       gui=bold,italic\n\n\" }}}1\n\nlet b:current_syntax = \"typst\"\n\n\" vim: sw=4 sts=4 et fdm=marker fdl=0 \n"
  },
  {
    "path": "tests/italic-bold.typ",
    "content": "= Italic\n\n// Italic\n_Lorem ipsum_\n\n// Not italic\nLorem\\_ipsum\n\n// Italic\n_Lorem\\_ipsum_\n\n// Error\n_Lorem ipsum\\_\n\n// Ialic\n_Lorem\nipsum_\n\n// Error\n_Lorem\n\nipsum_\n\n// Citations\n\n_Lorem ipsum_ @dolor_sit\n\n_Lorem ipsum_ #cite(\"dolor_sit\")\n\n\n= Bold\n\n// Bold\n*Lorem ipsum*\n\n// Not bold\nLorem\\*ipsum\n\n// Bold\n*Lorem\\*ipsum*\n\n// Error\n*Lorem ipsum\\*\n\n// Bold\n*Lorem\nipsum*\n\n// Error\n*Lorem\n\nipsum*\n\n// Citations\n\n*Lorem ipsum* @dolor_sit\n\n*Lorem ipsum* #cite(\"dolor_sit\")\n\n"
  },
  {
    "path": "tests/leaky-modes.typ",
    "content": "= Leaky Bodies\n\n== Issue #69\n\n// Broken\n\n#show link: underline\n#show link: set text(navy)\n#show par: set block(spacing: 1.75em)\n\n// Not Broken\n\n#show link: underline\n#show link: set text(navy);;\n#show par: set block(spacing: 1.75em)\n\n== Issue #46 (solved)\n\n// Not Broken \n\n#{ // Function body\n  [ // Content block\n  + text\n  + text\n  + #box()[text another text]\n  + text\n  + text\n  ]\n}\n\n// Broken\n\n#{ // Function body\n  [ // Content block\n  + text\n  + text\n  + #box()[text\n    another text]\n  + text\n  + text\n  ]\n}\n\n== Issue #43 (solved)\n\n#while index < 3 {\n    let x = \"abc\"  // Wrong highlighting\n}\n\n#{\n    while index < 3 {\n        let x = \"abc\"  // Correct highlighting\n    }\n}\n"
  }
]