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