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

*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 <args> watch <file> --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 <buffer> <silent> <Enter> :call <SID>JumpToHeader()<CR>
" 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 <args>
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 <v0.8, workaround for https://github.com/typst/typst/issues/1937
" set errorformat^=\/%f:%l:%c:%m
if !exists("g:typst_recommended_style") || g:typst_recommended_style != 0
setlocal expandtab
setlocal tabstop=8
setlocal softtabstop=2
setlocal shiftwidth=2
endif
if g:typst_folding
setlocal foldexpr=typst#foldexpr()
setlocal foldmethod=expr
if !exists("b:undo_ftplugin")
let b:undo_ftplugin = ""
endif
let b:undo_ftplugin .= "|setl foldexpr< foldmethod<"
endif
if g:typst_conceal
setlocal conceallevel=2
endif
setlocal commentstring=//\ %s
setlocal comments=s1:/*,mb:*,ex:*/,://
setlocal formatoptions+=croqn
setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s*
setlocal formatlistpat+=\\\|^\\s*[-+\]\\s\\+
if has('win32')
setlocal iskeyword=a-z,A-Z,48-57,_,-,128-167,224-235
else
setlocal iskeyword=a-z,A-Z,48-57,_,-,192-255
endif
setlocal suffixesadd=.typ
command! -nargs=* -buffer TypstWatch call typst#TypstWatch(<f-args>)
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\\@<!".typmath[0]."\\a\\@!' contained conceal cchar=".typmath[1]
exe "syn match typstMathSymbol '".typmath[0]."' contained conceal cchar=".typmath[1]
endfor
let s:typstMathList2=[
\ ['\[|', '⟦'],
\ ['|\]', '⟧'],
\ ['||', '‖'],
\ ['\*', '∗'],
\ [':=', '≔'],
\ ['::=', '⩴'],
\ ['\.\.\.', '…'],
\ ["\\'", "′"],
\ ['=:', '≕'],
\ ['!=', '≠'],
\ ['>>', '≫'],
\ ['>=', '≥'],
\ ['>>>', '⋙'],
\ ['<<', '≪'],
\ ['<=', '≤'],
\ ['<<<', '⋘'],
\ ['->', '→'],
\ ['|->', '↦'],
\ ['=>', '⇒'],
\ ['|=>', '⤇'],
\ ['==>', '⟹'],
\ ['-->', '⟶'],
\ ['\~\~>', '⟿'],
\ ['\~>', '⇝'],
\ ['>->', '↣'],
\ ['->>', '↠'],
\ ['<-', '←'],
\ ['<==', '⟸'],
\ ['<--', '⟵'],
\ ['<\~\~', '⬳'],
\ ['<\~', '⇜'],
\ ['<-<', '↢'],
\ ['<<-', '↞'],
\ ['<->', '↔'],
\ ['<=>', '⇔'],
\ ['<==>', '⟺'],
\ ['<-->', '⟷'],
\ ]
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\\@<!cal(".typmath[0].")' contained conceal cchar=".typmath[1]
" exe "syn match typstMathSymbol '\\a\\@<!fca(".typmath[0].")' contained conceal cchar=".typmath[1]
exe "syn match typstMathSymbol 'cal(".typmath[0].")' contained conceal cchar=".typmath[1]
exe "syn match typstMathSymbol 'fca(".typmath[0].")' contained conceal cchar=".typmath[1]
endfor
let s:typstBBList=[
\ ['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', '𝕫'],
\ ['0', '𝟘'],
\ ['1', '𝟙'],
\ ['2', '𝟚'],
\ ['3', '𝟛'],
\ ['4', '𝟜'],
\ ['5', '𝟝'],
\ ['6', '𝟞'],
\ ['7', '𝟟'],
\ ['8', '𝟠'],
\ ['9', '𝟡'],
\ ]
for typmath in s:typstBBList
"exe "syn match typstMathSymbol '\\(\\<\\|_\\)\\zsbb(".typmath[0].")' contained conceal cchar=".typmath[1]
"exe "syn match typstMathSymbol '\\(\\<\\|_\\)\\zsfbb(".typmath[0].")' contained conceal cchar=".typmath[1]
" exe "syn match typstMathSymbol '\\a\\@<!bb(".typmath[0].")' contained conceal cchar=".typmath[1]
" exe "syn match typstMathSymbol '\\a\\@<!fbb(".typmath[0].")' contained conceal cchar=".typmath[1]
exe "syn match typstMathSymbol 'bb(".typmath[0].")' contained conceal cchar=".typmath[1]
exe "syn match typstMathSymbol 'fbb(".typmath[0].")' contained conceal cchar=".typmath[1]
endfor
syntax region typstMathBold
\ matchgroup=typstMathFunction start=/fb(/ end=/)/
\ contains=@typstMath
\ contained concealends
syntax region typstMathBold
\ matchgroup=typstMathFunction start=/bold(/ end=/)/
\ contains=@typstMath
\ contained concealends
highlight default link typstMathBold typstMarkupBold
let s:typstSubList=[
\ ['0', '₀'],
\ ['1', '₁'],
\ ['2', '₂'],
\ ['3', '₃'],
\ ['4', '₄'],
\ ['5', '₅'],
\ ['6', '₆'],
\ ['7', '₇'],
\ ['8', '₈'],
\ ['9', '₉'],
\ ['+', '₊'],
\ ['-', '₋'],
\ ['=', '₌'],
\ ['a', 'ₐ'],
\ ['e', 'ₑ'],
\ ['o', 'ₒ'],
\ ['x', 'ₓ'],
\ ['h', 'ₕ'],
\ ['k', 'ₖ'],
\ ['l', 'ₗ'],
\ ['m', 'ₘ'],
\ ['n', 'ₙ'],
\ ['p', 'ₚ'],
\ ['s', 'ₛ'],
\ ['t', 'ₜ'],
\ ]
for typmath in s:typstSubList
exe "syn match typstMathScripts '_".typmath[0]."' contained conceal cchar=".typmath[1]
endfor
let s:typstSupList=[
\ ['0', '⁰'],
\ ['1', '¹'],
\ ['2', '²'],
\ ['3', '³'],
\ ['4', '⁴'],
\ ['5', '⁵'],
\ ['6', '⁶'],
\ ['7', '⁷'],
\ ['8', '⁸'],
\ ['9', '⁹'],
\ ['+', '⁺'],
\ ['-', '⁻'],
\ ['=', '⁼'],
\ ['n', 'ⁿ'],
\ ['i', 'ⁱ'],
\ ]
for typmath in s:typstSupList
exe "syn match typstMathScripts '\\^".typmath[0]."' contained conceal cchar=".typmath[1]
endfor
" vim: sw=4 sts=4 et fdm=marker fdl=0
================================================
FILE: syntax/typst.vim
================================================
" Vim syntax file
" Language: Typst
" Maintainer: Kaj Munhoz Arfvidsson
" Upstream: https://github.com/kaarmu/typst.vim
if exists("b:current_syntax") | finish | endif
call typst#options#init()
if !g:typst_syntax_highlight | finish | endif
syntax sync fromstart
syntax spell toplevel
" Common {{{1
syntax cluster typstCommon
\ contains=@typstComment
" Common > 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))@<![\.\[\(]@!/
syntax match typstCodeFieldAccess
\ contained
\ /\v<\K%(\k|-)*>(<%(let|set|show|import|include|context))@<!\.[\[\(]@!/
\ nextgroup=typstCodeFieldAccess,typstCodeFunction
" Code > Functions {{{2
syntax cluster typstCodeFunctions
\ contains=typstCodeFunction
syntax match typstCodeFunction
\ contained
\ /\v<\K%(\k|-)*>(<%(let|set|show|import|include|context))@<![\(\[]@=/
\ nextgroup=typstCodeFunctionArgument
syntax match typstCodeFunctionArgument
\ contained
\ /\v%(%(\(.{-}\)|\[.{-}\]|\{.{-}\}))*/ transparent
\ contains=@typstCode
" Code > 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=/\\\@<!\$/ end=/\\\@<!\$/
\ contains=@typstMath
" Hashtag {{{1
syntax cluster typstHashtag
\ contains=@typstHashtagKeywords
\ ,@typstHashtagConstants
\ ,@typstHashtagIdentifiers
\ ,@typstHashtagFunctions
\ ,@typstHashtagParens
" Hashtag > 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))@<![\.\[\(]@!/
syntax match typstHashtagFieldAccess
\ /\v#\K%(\k|-)*>(<%(let|set|show|import|include|context))@<!\.[\[\(]@!/
\ nextgroup=typstCodeFieldAccess,typstCodeFunction
if g:typst_conceal_emoji
runtime! syntax/typst-emoji.vim
endif
" Hashtag > Functions {{{2
syntax cluster typstHashtagFunctions
\ contains=typstHashtagFunction
syntax match typstHashtagFunction
\ /\v#\K%(\k|-)*>(<%(let|set|show|import|include|context))@<![\(\[]@=/
\ nextgroup=typstCodeFunctionArgument
" Hashtag > 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=/\\\@<!\$/
\ contains=@typstMath
" Markup {{{1
syntax cluster typstMarkup
\ contains=@typstCommon
\ ,@Spell
\ ,@typstHashtag
\ ,@typstMarkupText
\ ,@typstMarkupParens
" Markup > 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<!\*\S@=.{-}(\n.{-1,})*\S@1<=\\@1<!\*/
\ contains=typstMarkupBoldRegion
syntax match typstMarkupItalic
\ /\v(\w|\\)@1<!_\S@=.{-}(\n.{-1,})*\S@1<=\\@1<!_/
\ contains=typstMarkupItalicRegion
syntax match typstMarkupBoldItalic
\ contained
\ /\v(\w|\\)@1<![_\*]\S@=.{-}(\n.{-1,})*\S@1<=\\@1<!\2/
\ contains=typstMarkupBoldRegion,typstMarkupItalicRegion
if g:typst_conceal
syntax region typstMarkupBoldRegion
\ contained
\ transparent matchgroup=typstMarkupBold
\ start=/\(^\|[^0-9a-zA-Z]\)\@<=\*/ end=/\*\($\|[^0-9a-zA-Z]\)\@=/
\ concealends contains=typstMarkupBoldItalic,typstMarkupLabel,@Spell
syntax region typstMarkupItalicRegion
\ contained
\ transparent matchgroup=typstMarkupItalic
\ start=/\(^\|[^0-9a-zA-Z]\)\@<=_/ end=/_\($\|[^0-9a-zA-Z]\)\@=/
\ concealends contains=typstMarkupBoldItalic,typstMarkupLabel,@Spell
else
syntax region typstMarkupBoldRegion
\ contained
\ transparent matchgroup=typstMarkupBold
\ start=/\(^\|[^0-9a-zA-Z]\)\@<=\*/ end=/\*\($\|[^0-9a-zA-Z]\)\@=/
\ contains=typstMarkupBoldItalic,typstMarkupLabel,@Spell
syntax region typstMarkupItalicRegion
\ contained
\ transparent matchgroup=typstMarkupItalic
\ start=/\(^\|[^0-9a-zA-Z]\)\@<=_/ end=/_\($\|[^0-9a-zA-Z]\)\@=/
\ contains=typstMarkupBoldItalic,typstMarkupLabel,@Spell
endif
" Linebreak & Special Whitespace
syntax match typstMarkupLinebreak
\ /\\\\/
syntax match typstMarkupNonbreakingSpace
\ /\~/
" Special Symbols
syntax match typstMarkupSoftHyphen
\ /-?/
syntax match typstMarkupDash
\ /-\{2,3}/
syntax match typstMarkupEllipsis
\ /\.\.\./
" Markup > Parens {{{2
syntax cluster typstMarkupParens
\ contains=typstMarkupBracket
\ ,typstMarkupDollar
syntax region typstMarkupBracket
\ matchgroup=Noise start=/\[/ end=/\]/
\ contains=@typstMarkup
syntax region typstMarkupDollar
\ matchgroup=Special start=/\\\@<!\$/ end=/\\\@<!\$/
\ contains=@typstMath
" Math {{{1
syntax cluster typstMath
\ contains=@typstCommon
\ ,@typstHashtag
\ ,typstMathIdentifier
\ ,typstMathFunction
\ ,typstMathNumber
\ ,typstMathSymbol
\ ,typstMathBold
\ ,typstMathScripts
\ ,typstMathQuote
" a math identifier should be like \k without '_'
syntax match typstMathIdentifier
\ /\v<\a%(\a|\d)+>/
\ 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
}
}
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
Condensed preview — 15 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (121K chars).
[
{
"path": ".gitignore",
"chars": 7,
"preview": "*.swp\n\n"
},
{
"path": "LICENSE",
"chars": 1078,
"preview": "MIT License\n\nCopyright (c) 2023 Kaj Munhoz Arfvidsson\n\nPermission is hereby granted, free of charge, to any person obtai"
},
{
"path": "README.md",
"chars": 4778,
"preview": "# 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 t"
},
{
"path": "autoload/typst/options.vim",
"chars": 1040,
"preview": "\nlet s:initialized = v:false\n\nfunction! typst#options#init() abort \" {{{1\n if s:initialized | return | endif\n\n cal"
},
{
"path": "autoload/typst.vim",
"chars": 10448,
"preview": "function! typst#TypstWatch(...)\n \" Prepare command\n \" NOTE: added arguments #23 but they will always be like\n \""
},
{
"path": "compiler/typst.vim",
"chars": 890,
"preview": "\" Vim compiler file\n\" Compiler: typst\n\nif exists(\"current_compiler\")\n finish\nendif\nlet current_compiler = g:typst_cmd"
},
{
"path": "ftdetect/typst.vim",
"chars": 53,
"preview": "autocmd! BufRead,BufNewFile *.typ set filetype=typst\n"
},
{
"path": "ftplugin/typst.vim",
"chars": 1497,
"preview": "\" Only do this when not done yet for this buffer\nif exists(\"b:did_ftplugin\") | finish | endif\nlet b:did_ftplugin = 1\n\nle"
},
{
"path": "indent/typst.vim",
"chars": 1678,
"preview": "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 "
},
{
"path": "syntax/typst-embedded.vim",
"chars": 890,
"preview": "\" Vim syntax file\n\" Language: Typst\n\" Maintainer: Kaj Munhoz Arfvidsson\n\" Upstream: https://github.com/kaarmu/typst.vim\n"
},
{
"path": "syntax/typst-emoji.vim",
"chars": 36061,
"preview": "\" Vim syntax file\n\" Language: Typst\n\" Maintainer: Kaj Munhoz Arfvidsson\n\" Upstream: https://github.com/kaarmu/typst.vim\n"
},
{
"path": "syntax/typst-symbols.vim",
"chars": 29917,
"preview": "\" Vim syntax file\n\" Language: Typst\n\" Maintainer: Kaj Munhoz Arfvidsson\n\" Upstream: https://github.com/kaarmu/typst.vim\n"
},
{
"path": "syntax/typst.vim",
"chars": 16441,
"preview": "\" Vim syntax file\n\" Language: Typst\n\" Maintainer: Kaj Munhoz Arfvidsson\n\" Upstream: https://github.com/kaarmu/typst.vim\n"
},
{
"path": "tests/italic-bold.typ",
"chars": 466,
"preview": "= 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// Ial"
},
{
"path": "tests/leaky-modes.typ",
"chars": 682,
"preview": "= 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: "
}
]
About this extraction
This page contains the full source code of the kaarmu/typst.vim GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 15 files (103.4 KB), approximately 40.0k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.