Skip to content

Instantly share code, notes, and snippets.

@Gavinok
Last active October 8, 2020 19:27
Show Gist options
  • Save Gavinok/5ca63c763d2ee821a5699777a9b81208 to your computer and use it in GitHub Desktop.
Save Gavinok/5ca63c763d2ee821a5699777a9b81208 to your computer and use it in GitHub Desktop.
add this to your .vim/after/syntax/groff.vim
fun! s:GroffConceal(group,pat,cchar)
exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
endfun
if exists('g:groff_greek')
call s:GroffConceal('roffGreek' ,'\<alpha\>' ,'α')
call s:GroffConceal('roffGreek' ,'\<beta\>' ,'β')
call s:GroffConceal('roffGreek' ,'\<gamma\>' ,'γ')
call s:GroffConceal('roffGreek' ,'\<delta\>' ,'δ')
call s:GroffConceal('roffGreek' ,'\<epsilon\>' ,'ϵ')
call s:GroffConceal('roffGreek' ,'\<varepsilon\>' ,'ε')
call s:GroffConceal('roffGreek' ,'\<zeta\>' ,'ζ')
call s:GroffConceal('roffGreek' ,'\<eta\>' ,'η')
call s:GroffConceal('roffGreek' ,'\<theta\>' ,'θ')
call s:GroffConceal('roffGreek' ,'\<vartheta\>' ,'ϑ')
call s:GroffConceal('roffGreek' ,'\<iota\>' ,'ι')
call s:GroffConceal('roffGreek' ,'\<kappa\>' ,'κ')
call s:GroffConceal('roffGreek' ,'\<lambda\>' ,'λ')
call s:GroffConceal('roffGreek' ,'\<mu\>' ,'μ')
call s:GroffConceal('roffGreek' ,'\<nu\>' ,'ν')
call s:GroffConceal('roffGreek' ,'\<xi\>' ,'ξ')
call s:GroffConceal('roffGreek' ,'\<pi\>' ,'π')
call s:GroffConceal('roffGreek' ,'\<varpi\>' ,'ϖ')
call s:GroffConceal('roffGreek' ,'\<rho\>' ,'ρ')
call s:GroffConceal('roffGreek' ,'\<varrho\>' ,'ϱ')
call s:GroffConceal('roffGreek' ,'\<sigma\>' ,'σ')
call s:GroffConceal('roffGreek' ,'\<varsigma\>' ,'ς')
call s:GroffConceal('roffGreek' ,'\<tau\>' ,'τ')
call s:GroffConceal('roffGreek' ,'\<upsilon\>' ,'υ')
call s:GroffConceal('roffGreek' ,'\<phi\>' ,'ϕ')
call s:GroffConceal('roffGreek' ,'\<varphi\>' ,'φ')
call s:GroffConceal('roffGreek' ,'\<chi\>' ,'χ')
call s:GroffConceal('roffGreek' ,'\<psi\>' ,'ψ')
call s:GroffConceal('roffGreek' ,'\<omega\>' ,'ω')
call s:GroffConceal('roffGreek' ,'\<GAMMA\>' ,'Γ')
call s:GroffConceal('roffGreek' ,'\<DELTA\>' ,'Δ')
call s:GroffConceal('roffGreek' ,'\<THETA\>' ,'Θ')
call s:GroffConceal('roffGreek' ,'\<LAMBDA\>' ,'Λ')
call s:GroffConceal('roffGreek' ,'\<XI\>' ,'Ξ')
call s:GroffConceal('roffGreek' ,'\<PI\>' ,'Π')
call s:GroffConceal('roffGreek' ,'\<SIGMA\>' ,'Σ')
call s:GroffConceal('roffGreek' ,'\<UPSILON\>' ,'Υ')
call s:GroffConceal('roffGreek' ,'\<PHI\>' ,'Φ')
call s:GroffConceal('roffGreek' ,'\<CHI\>' ,'Χ')
call s:GroffConceal('roffGreek' ,'\<PSI\>' ,'Ψ')
call s:GroffConceal('roffGreek' ,'\<OMEGA\>' ,'Ω')
endif
if exists('g:groff_math')
call s:GroffConceal('roffMath' , '>= ' , '≥')
call s:GroffConceal('roffMath' , '<= ' , '≤')
call s:GroffConceal('roffMath' , '== ' , '≡')
call s:GroffConceal('roffMath' , '!= ' , '≠')
call s:GroffConceal('roffMath' , '\<int\>' , '∫')
call s:GroffConceal('roffMath' , '\<inf\>' , '∞')
call s:GroffConceal('roffMath' , '\<leftarrow\>' , '←')
call s:GroffConceal('roffMath' , '\<rightarrow\>' , '→')
call s:GroffConceal('roffMath' , '\<partial\>' , '∂')
call s:GroffConceal('roffMath' , '\<prime \>' , '′')
call s:GroffConceal('roffMath' , '\<times\>' , '×')
call s:GroffConceal('roffMath' , '\<prod\>' , '∏')
call s:GroffConceal('roffMath' , '\<del\>' , '∇')
call s:GroffConceal('roffMath' , '\<grad\>' , '∇')
call s:GroffConceal('roffMath' , '\<inter\>' , '∩')
call s:GroffConceal('roffMath' , '\<union\>' , '∪')
call s:GroffConceal('roffMath' , '\<sum\>' , '∑')
call s:GroffConceal('roffMath' , '\<sqrt\>' , '√')
call s:GroffConceal('roffMath' , '\<over\>' , '/')
endif
if exists('g:groff_supsub')
fun! s:SuperSub(group,leader,pat,cchar)
" call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">")
exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
exe 'syn match '.a:group."s '".a:pat ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
endfun
call s:SuperSub('roffSuperscript',' sup ','0','⁰')
call s:SuperSub('roffSuperscript',' sup ','1','¹')
call s:SuperSub('roffSuperscript',' sup ','2','²')
call s:SuperSub('roffSuperscript',' sup ','3','³')
call s:SuperSub('roffSuperscript',' sup ','4','⁴')
call s:SuperSub('roffSuperscript',' sup ','5','⁵')
call s:SuperSub('roffSuperscript',' sup ','6','⁶')
call s:SuperSub('roffSuperscript',' sup ','7','⁷')
call s:SuperSub('roffSuperscript',' sup ','8','⁸')
call s:SuperSub('roffSuperscript',' sup ','9','⁹')
call s:SuperSub('roffSuperscript',' sup ','a','ᵃ')
call s:SuperSub('roffSuperscript',' sup ','b','ᵇ')
call s:SuperSub('roffSuperscript',' sup ','c','ᶜ')
call s:SuperSub('roffSuperscript',' sup ','d','ᵈ')
call s:SuperSub('roffSuperscript',' sup ','e','ᵉ')
call s:SuperSub('roffSuperscript',' sup ','f','ᶠ')
call s:SuperSub('roffSuperscript',' sup ','g','ᵍ')
call s:SuperSub('roffSuperscript',' sup ','h','ʰ')
call s:SuperSub('roffSuperscript',' sup ','i','ⁱ')
call s:SuperSub('roffSuperscript',' sup ','j','ʲ')
call s:SuperSub('roffSuperscript',' sup ','k','ᵏ')
call s:SuperSub('roffSuperscript',' sup ','l','ˡ')
call s:SuperSub('roffSuperscript',' sup ','m','ᵐ')
call s:SuperSub('roffSuperscript',' sup ','n','ⁿ')
call s:SuperSub('roffSuperscript',' sup ','o','ᵒ')
call s:SuperSub('roffSuperscript',' sup ','p','ᵖ')
call s:SuperSub('roffSuperscript',' sup ','r','ʳ')
call s:SuperSub('roffSuperscript',' sup ','s','ˢ')
call s:SuperSub('roffSuperscript',' sup ','t','ᵗ')
call s:SuperSub('roffSuperscript',' sup ','u','ᵘ')
call s:SuperSub('roffSuperscript',' sup ','v','ᵛ')
call s:SuperSub('roffSuperscript',' sup ','w','ʷ')
call s:SuperSub('roffSuperscript',' sup ','x','ˣ')
call s:SuperSub('roffSuperscript',' sup ','y','ʸ')
call s:SuperSub('roffSuperscript',' sup ','z','ᶻ')
call s:SuperSub('roffSuperscript',' sup ','A','ᴬ')
call s:SuperSub('roffSuperscript',' sup ','B','ᴮ')
call s:SuperSub('roffSuperscript',' sup ','D','ᴰ')
call s:SuperSub('roffSuperscript',' sup ','E','ᴱ')
call s:SuperSub('roffSuperscript',' sup ','G','ᴳ')
call s:SuperSub('roffSuperscript',' sup ','H','ᴴ')
call s:SuperSub('roffSuperscript',' sup ','I','ᴵ')
call s:SuperSub('roffSuperscript',' sup ','J','ᴶ')
call s:SuperSub('roffSuperscript',' sup ','K','ᴷ')
call s:SuperSub('roffSuperscript',' sup ','L','ᴸ')
call s:SuperSub('roffSuperscript',' sup ','M','ᴹ')
call s:SuperSub('roffSuperscript',' sup ','N','ᴺ')
call s:SuperSub('roffSuperscript',' sup ','O','ᴼ')
call s:SuperSub('roffSuperscript',' sup ','P','ᴾ')
call s:SuperSub('roffSuperscript',' sup ','R','ᴿ')
call s:SuperSub('roffSuperscript',' sup ','T','ᵀ')
call s:SuperSub('roffSuperscript',' sup ','U','ᵁ')
call s:SuperSub('roffSuperscript',' sup ','W','ᵂ')
call s:SuperSub('roffSuperscript',' sup ',',','︐')
call s:SuperSub('roffSuperscript',' sup ',':','︓')
call s:SuperSub('roffSuperscript',' sup ',';','︔')
call s:SuperSub('roffSuperscript',' sup ','+','⁺')
call s:SuperSub('roffSuperscript',' sup ','-','⁻')
call s:SuperSub('roffSuperscript',' sup ','<','˂')
call s:SuperSub('roffSuperscript',' sup ','>','˃')
call s:SuperSub('roffSuperscript',' sup ','/','ˊ')
call s:SuperSub('roffSuperscript',' sup ','(','⁽')
call s:SuperSub('roffSuperscript',' sup ',')','⁾')
call s:SuperSub('roffSuperscript',' sup ','\.','˙')
call s:SuperSub('roffSuperscript',' sup ','=','˭')
call s:SuperSub('roffSuperscript',' sup ','4','⁴')
call s:SuperSub('roffSuperscript',' sup ','5','⁵')
call s:SuperSub('roffSuperscript',' sup ','6','⁶')
call s:SuperSub('roffSuperscript',' sup ','7','⁷')
call s:SuperSub('roffSuperscript',' sup ','8','⁸')
call s:SuperSub('roffSuperscript',' sup ','9','⁹')
call s:SuperSub('roffSuperscript',' sup ','a','ᵃ')
call s:SuperSub('roffSuperscript',' sup ','b','ᵇ')
call s:SuperSub('roffSuperscript',' sup ','c','ᶜ')
call s:SuperSub('roffSuperscript',' sup ','d','ᵈ')
call s:SuperSub('roffSuperscript',' sup ','e','ᵉ')
call s:SuperSub('roffSuperscript',' sup ','f','ᶠ')
call s:SuperSub('roffSuperscript',' sup ','g','ᵍ')
call s:SuperSub('roffSuperscript',' sup ','h','ʰ')
call s:SuperSub('roffSuperscript',' sup ','i','ⁱ')
call s:SuperSub('roffSuperscript',' sup ','j','ʲ')
call s:SuperSub('roffSuperscript',' sup ','k','ᵏ')
call s:SuperSub('roffSuperscript',' sup ','l','ˡ')
call s:SuperSub('roffSuperscript',' sup ','m','ᵐ')
call s:SuperSub('roffSuperscript',' sup ','n','ⁿ')
call s:SuperSub('roffSuperscript',' sup ','o','ᵒ')
call s:SuperSub('roffSuperscript',' sup ','p','ᵖ')
call s:SuperSub('roffSuperscript',' sup ','r','ʳ')
call s:SuperSub('roffSuperscript',' sup ','s','ˢ')
call s:SuperSub('roffSuperscript',' sup ','t','ᵗ')
call s:SuperSub('roffSuperscript',' sup ','u','ᵘ')
call s:SuperSub('roffSuperscript',' sup ','v','ᵛ')
call s:SuperSub('roffSuperscript',' sup ','w','ʷ')
call s:SuperSub('roffSuperscript',' sup ','x','ˣ')
call s:SuperSub('roffSuperscript',' sup ','y','ʸ')
call s:SuperSub('roffSuperscript',' sup ','z','ᶻ')
call s:SuperSub('roffSuperscript',' sup ','A','ᴬ')
call s:SuperSub('roffSuperscript',' sup ','B','ᴮ')
call s:SuperSub('roffSuperscript',' sup ','D','ᴰ')
call s:SuperSub('roffSuperscript',' sup ','E','ᴱ')
call s:SuperSub('roffSuperscript',' sup ','G','ᴳ')
call s:SuperSub('roffSuperscript',' sup ','H','ᴴ')
call s:SuperSub('roffSuperscript',' sup ','I','ᴵ')
call s:SuperSub('roffSuperscript',' sup ','J','ᴶ')
call s:SuperSub('roffSuperscript',' sup ','K','ᴷ')
call s:SuperSub('roffSuperscript',' sup ','L','ᴸ')
call s:SuperSub('roffSuperscript',' sup ','M','ᴹ')
call s:SuperSub('roffSuperscript',' sup ','N','ᴺ')
call s:SuperSub('roffSuperscript',' sup ','O','ᴼ')
call s:SuperSub('roffSuperscript',' sup ','P','ᴾ')
call s:SuperSub('roffSuperscript',' sup ','R','ᴿ')
call s:SuperSub('roffSuperscript',' sup ','T','ᵀ')
call s:SuperSub('roffSuperscript',' sup ','U','ᵁ')
call s:SuperSub('roffSuperscript',' sup ','W','ᵂ')
call s:SuperSub('roffSuperscript',' sup ','+','⁺')
call s:SuperSub('roffSuperscript',' sup ','-','⁻')
call s:SuperSub('roffSubscript',' sub ','0','₀')
call s:SuperSub('roffSubscript',' sub ','1','₁')
call s:SuperSub('roffSubscript',' sub ','2','₂')
call s:SuperSub('roffSubscript',' sub ','3','₃')
call s:SuperSub('roffSubscript',' sub ','4','₄')
call s:SuperSub('roffSubscript',' sub ','5','₅')
call s:SuperSub('roffSubscript',' sub ','6','₆')
call s:SuperSub('roffSubscript',' sub ','7','₇')
call s:SuperSub('roffSubscript',' sub ','8','₈')
call s:SuperSub('roffSubscript',' sub ','9','₉')
call s:SuperSub('roffSubscript',' sub ','a','ₐ')
call s:SuperSub('roffSubscript',' sub ','e','ₑ')
call s:SuperSub('roffSubscript',' sub ','h','ₕ')
call s:SuperSub('roffSubscript',' sub ','i','ᵢ')
call s:SuperSub('roffSubscript',' sub ','j','ⱼ')
call s:SuperSub('roffSubscript',' sub ','k','ₖ')
call s:SuperSub('roffSubscript',' sub ','l','ₗ')
call s:SuperSub('roffSubscript',' sub ','m','ₘ')
call s:SuperSub('roffSubscript',' sub ','n','ₙ')
call s:SuperSub('roffSubscript',' sub ','o','ₒ')
call s:SuperSub('roffSubscript',' sub ','p','ₚ')
call s:SuperSub('roffSubscript',' sub ','r','ᵣ')
call s:SuperSub('roffSubscript',' sub ','s','ₛ')
call s:SuperSub('roffSubscript',' sub ','t','ₜ')
call s:SuperSub('roffSubscript',' sub ','u','ᵤ')
call s:SuperSub('roffSubscript',' sub ','v','ᵥ')
call s:SuperSub('roffSubscript',' sub ','x','ₓ')
call s:SuperSub('roffSubscript',' sub ',',','︐')
call s:SuperSub('roffSubscript',' sub ','+','₊')
call s:SuperSub('roffSubscript',' sub ','-','₋')
call s:SuperSub('roffSubscript',' sub ','/','ˏ')
call s:SuperSub('roffSubscript',' sub ','(','₍')
call s:SuperSub('roffSubscript',' sub ',')','₎')
call s:SuperSub('roffSubscript',' sub ','\.','‸')
call s:SuperSub('roffSubscript',' sub ','r','ᵣ')
call s:SuperSub('roffSubscript',' sub ','v','ᵥ')
call s:SuperSub('roffSubscript',' sub ','x','ₓ')
call s:SuperSub('roffSubscript',' sub ','\\beta\>' ,'ᵦ')
call s:SuperSub('roffSubscript',' sub ','\\delta\>','ᵨ')
call s:SuperSub('roffSubscript',' sub ','\\phi\>' ,'ᵩ')
call s:SuperSub('roffSubscript',' sub ','\\gamma\>','ᵧ')
call s:SuperSub('roffSubscript',' sub ','\\chi\>' ,'ᵪ')
delfun s:SuperSub
endif
hi def link roffMath Special
syn region nroffEquation start=/^\.\s*EQ\>/ end=/^\.\s*EN\>/ contains=roffGreek,roffMath,roffSuperscript,roffSubscript fold
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment