Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support LaTeX-to-Unicode tab expansion #21

Merged
merged 4 commits into from
May 24, 2014
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 58 additions & 1 deletion ftplugin/julia.vim
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,58 @@ setlocal define="^\s*macro\>"
" syntax-highlightened
let g:julia_highlight_operators=1

" Support for LaTex-to-Unicode conversion as in the Julia REPL

" (The dictionary was generated from within Julia with the following line:
" println("let g:latex_symbols = {", join([string("'", latex, "': '", unicode, "'") for (latex,unicode) in Base.REPLCompletions.latex_symbols], ','), "}")

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As the symbol table is updated in the future, this will have to be re-run. To generate smaller diffs when this happens, you might consider:

  • Putting one symbol per line
  • Sorting the symbols by codepoint: for (latex,unicode) in sort!(collect(Base.REPLCompletions.latex_symbols), by=x->x[2])

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorting is a good idea. As per one symbol per line, I tried and failed.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok this is also fixed now.

" )
let g:latex_symbols = {'\guilsinglright': '›','\blacktriangleright': '▸','\Re': 'ℜ','\pitchfork': '⋔','\Elzinglst': 'ʖ','\urcorner': '⌝','\pi': 'π','\nless': '≮','\sqsubseteq': '⊑','\Updownarrow': '⇕','\nrightarrow': '↛','\Theta': 'Θ','\rightmoon': '☾','\upsilon': 'υ','\copyright': '©','\smile': '⌣','\backsimeq': '⋍','\BbbPi': 'ℿ','\lq': '‘','\perp': '⊥','\textnrleg': 'ƞ','\llcorner': '⌞','\bigtimes': '⨉','\circleddash': '⊝','\leftharpoondown': '↽','\alpha': 'α','\between': '≬','\frown': '⌢','\RoundImplies': '⥰','\precneqq': '⪵','\nsupseteq': '⊉','\iota': 'ι','\overbrace': '︷','\rightharpoondown': '⇁','\tilde': '̃','\rightleftarrows': '⇄','\succapprox': '⪸','\Rsh': '↱','\fdiagovnearrow': '⤯','\original': '⊶','\nBumpeq': '≎̸','\nleftrightarrow': '↮','\clockoint': '⨏','\Im': 'ℑ','\Elzrarrx': '⥇','\leo': '♌','\DownArrowBar': '⤓','\surd': '√','\ge': '≥','\amalg': '⨿','\ElOr': '⩖','\uparrow': '↑','\Game': '⅁','\sterling': '£','\NestedGreaterGreater': '⪢','\bumpeqq': '⪮','\nVDash': '⊯','\leftarrowtriangle': '⇽','\lnsim': '⋦','\yen': '¥','\theta': 'θ','\gnapprox': '⪊','\male': '♂','\LeftUpVectorBar': '⥘','\NotLeftTriangleBar': '⧏̸','\nRightarrow': '⇏','\Elzsqspne': '⋥','\forks': '⫝̸','\Alpha': 'Α','\backepsilon': '϶','\psi': 'ψ','\ng': 'ŋ','\Sampi': 'Ϡ','\textperthousand': '‰','\l': 'ł','\star': '⋆','\Elzbtdl': 'ɬ','\Downarrow': '⇓','\lvertneqq': '≨︀','\S': '§','\NotLessLess': '≪̸','\omega': 'ω','\NotSquareSubset': '⊏̸','\boxcircle': '⧇','\Bumpeq': '≎','\gtreqless': '⋛','\daleth': 'ℸ','\recorder': '⌕','\Elroang': '⦆','\forksnot': '⫝','\Angle': '⦜','\shuffle': '⧢','\ReverseUpEquilibrium': '⥯','\Elzxrat': '℞','\Elztesh': 'ʧ','\Elzsbrhr': '˒','\rightleftharpoons': '⇌','\Elzrtln': 'ɳ','\checkmark': '✓','\Elzsqfnw': '┙','\Elzxh': 'ħ','\nsubseteqq': '⫅̸','\mars': '♂','\ngtr': '≯','\hksearow': '⤥','\lesssim': '≲','\obar': '⌽','\Colon': '∷','\sagittarius': '♐','\dot': '̇','\Omega': 'Ω','\looparrowright': '↬','\Vert': '‖','\fdiagovrdiag': '⤬','\ngeqslant': '⩾̸','\perspcorrespond': '⩞','\twoheadrightarrow': '↠','\beta': 'β','\c': '̧','\Elzrtlr': 'ɽ','\approxnotequal': '≆','\sqrt': '√','\plusdot': '⨥','\bigodot': '⨀','\subsetneqq': '⫋','\neg': '¬','\Elzreglst': 'ʕ','\barwedge': '⌅','\Elzrvbull': '◘','\Rightarrow': '⇒','\textasciicaron': 'ˇ','\Cap': '⋒','\aleph': 'ℵ','\xi': 'ξ','\lessapprox': '⪅','\ddddot': '⃜','\longrightarrow': '⟶','\Elzrais': '˔','\lmoustache': '⎰','\pm': '±','\prec': '≺','\disjquant': '⨈','\DH': 'Ð','\openbracketright': '〛','\Elzsqfr': '◨','\downharpoonleft': '⇃','\phi': 'ϕ','\lozenge': '◊','\L': 'Ł','\ni': '∋','\subseteqq': '⫅','\texttildelow': '˜','\heartsuit': '♡','\Elztrnsa': 'ɒ','\subset': '⊂','\venus': '♀','\thinspace': ' ','\fallingdotseq': '≒','\partialmeetcontraction': '⪣','\NotNestedLessLess': '⪡̸','\approx': '≈','\gtrless': '≷','\ntriangleleft': '⋪','\partial': '∂','\pluto': '♇','\kappa': 'κ','\textTheta': 'ϴ','\Vvdash': '⊪','\hspace': ' ','\leqslant': '⩽','\questeq': '≟','\wp': '℘','\gamma': 'γ','\NotGreaterGreater': '≫̸','\Doteq': '≑','\Elzlmrk': 'ː','\Elzdlcorn': '⎣','\nsubset': '⊄','\Equal': '⩵','\bkarow': '⤍','\intcup': '⨚','\P': '¶','\lneq': '⪇','\napprox': '≉','\Elztrnm': 'ɯ','\bigstar': '★','\lesseqgtr': '⋚','\ngeq': '≱','\varnothing': '∅','\supseteq': '⊇','\eta': 'η','\varrho': 'ϱ','\neptune': '♆','\Vdash': '⊩','\dots': '…','\longleftrightarrow': '⟷','\gemini': '♊','\nsupset': '⊅','\supsetneqq': '⫌','\bigtriangleup': '△','\diagup': '╱','\nexists': '∄','\image': '⊷','\underbrace': '︸','\boxplus': '⊞','\Zeta': 'Ζ','\texthvlig': 'ƕ','\OE': 'Œ','\circledcirc': '⊚','\capricornus': '♑','\towa': '⤪','\in': '∈','\chi': 'χ','\imath': 'ı','\Elzcirfl': '◐','\Elzrttrnr': 'ɻ','\Xi': 'Ξ','\RightUpVectorBar': '⥔','\veebar': '⊻','\nsuccsim': '≿̸','\verymuchless': '⋘','\textphi': 'ɸ','\Elztrnt': 'ʇ','\triangleq': '≜','\Beta': 'Β','\ast': '∗','\bigsqcup': '⨆','\Elzbar': '̶','\nequiv': '≢','\ncong': '≇','\Elzrtls': 'ʂ','\dddot': '⃛','\dotminus': '∸','\oint': '∮','\circlearrowleft': '↺','\diamondsuit': '♢','\nLeftarrow': '⇍','\Elzpscrv': 'ʋ','\Elzltlmr': 'ɱ','\acute': '́','\Elzddfnc': '⦙','\bigtriangledown': '▽','\Longleftarrow': '⟸','\nsucc': '⊁','\square': '□','\succ': '≻','\neovnwarrow': '⤱','\Elzfhr': 'ɾ','\langle': '〈','\DownRightVectorBar': '⥗','\clubsuit': '♣','\Stigma': 'Ϛ','\rightangle': '∟','\backsim': '∽','\Elzsblhr': '˓','\downdownarrows': '⇊','\lowint': '⨜','\Elzminhat': '⩟','\varphi': 'φ','\blacklozenge': '⧫','\Tau': 'Τ','\looparrowleft': '↫','\beth': 'ℶ','\nsim': '≁','\ocirc': '̊','\div': '÷','\Elztrnmlr': 'ɰ','\bigcupdot': '⨃','\bbsum': '⅀','\iiint': '∭','\cancer': '♋','\sqcup': '⊔','\Longrightarrow': '⟹','\subsetneq': '⊊','\dagger': '†','\textdoublepipe': 'ǂ','\textquotedblright': '”','\notlessgreater': '≸','\rightrightarrows': '⇉','\DownRightTeeVector': '⥟','\textturnk': 'ʞ','\allequal': '≌','\female': '♀','\cdotp': '·','\Elzcirfb': '◒','\ntrianglerighteq': '⋭','\ElzTimes': '⨯','\blacktriangle': '▴','\saturn': '♄','\DownLeftRightVector': '⥐','\Elzverti': 'ˌ','\curlyeqsucc': '⋟','\DownLeftTeeVector': '⥞','\Elzpes': '₧','\rdiagovfdiag': '⤫','\Elzxl': '̵','\mapsto': '↦','\maltese': '✠','\hslash': 'ℏ','\blacksquare': '■','\upuparrows': '⇈','\taurus': '♉','\vDash': '⊨','\conjquant': '⨇','\sim': '∼','\RuleDelayed': '⧴','\sum': '∑','\aquarius': '♒','\ggg': '⋙','\uranus': '♅','\rightthreetimes': '⋌','\ElzrLarr': '⥄','\O': 'Ø','\nbumpeq': '≏̸','\dashv': '⊣','\curlywedge': '⋏','\gg': '≫','\sqsupset': '⊐','\nprec': '⊀','\diamond': '⋄','\leftrightarrows': '⇆','\LeftUpTeeVector': '⥠','\eighthnote': '♪','\risingdotseq': '≓','\RightUpTeeVector': '⥜','\textonequarter': '¼','\iint': '∬','\nleqslant': '⩽̸','\textexclamdown': '¡','\nprecsim': '≾̸','\btimes': '⨲','\oe': 'œ','\forall': '∀','\textthreequarters': '¾','\Elztrna': 'ɐ','\rightarrowtriangle': '⇾','\supset': '⊃','\equiv': '≡','\sharp': '♯','\epsilon': 'ϵ','\ae': 'æ','\infty': '∞','\dualmap': '⧟','\bigotimes': '⨂','\eqslantgtr': '⪖','\lrcorner': '⌟','\nwarrow': '↖','\leqq': '≦','\lfloor': '⌊','\Elzdshfnc': '┆','\rightsquigarrow': '↝','\leftarrow': '←','\sphericalangle': '∢','\boxtimes': '⊠','\hkswarow': '⤦','\ElzOr': '⩔','\interleave': '⫴','\complement': '∁','\Ddownarrow': '⤋','\neqsim': '≂̸','\Koppa': 'Ϟ','\angle': '∠','\Eta': 'Η','\ll': '≪','\vartriangle': '▵','\Leftarrow': '⇐','\asymp': '≍','\times': '×','\wr': '≀','\twoheadrightarrowtail': '⤖','\ddotseq': '⩷','\ss': 'ß','\intcap': '⨙','\openbracketleft': '〚','\triangleleft': '◃','\nvdash': '⊬','\oiiint': '∰','\precnsim': '⋨','\UpEquilibrium': '⥮','\Elztrnrl': 'ɺ','\aries': '♈','\intercal': '⊺','\ntrianglelefteq': '⋬','\bigvee': '⋁','\minus': '−','\nleftarrow': '↚','\mho': '℧','\bigwedge': '⋀','\Elzdyogh': 'ʤ','\curlyvee': '⋎','\eth': 'ð','\lesseqqgtr': '⪋','\scorpio': '♏','\Elzrh': '̢','\upharpoonright': '↿','\lessdot': '⋖','\textordfeminine': 'ª','\coprod': '∐','\aa': 'å','\dblarrowupdown': '⇅','\cupdot': '⊍','\Lsh': '↰','\Elzcirfr': '◑','\Elzrtlt': 'ʈ','\trianglelefteq': '⊴','\degree': '°','\ddot': '̈','\ddagger': '‡','\bigcap': '⋂','\Elzpbgam': 'ɤ','\circeq': '≗','\Phi': 'Φ','\guilsinglleft': '‹','\AE': 'Æ','\check': '̌','\intx': '⨘','\Upsilon': 'Υ','\Elzinvw': 'ʍ','\LeftUpDownVector': '⥑','\Elzinvv': 'ʌ','\Dashv': '⫤','\Elzdefas': '⧋','\ltimes': '⋉','\leftrightarrow': '↔','\Mapsto': '⤇','\mid': '∣','\hookleftarrow': '↩','\LeftTriangleBar': '⧏','\swarrow': '↙','\textvisiblespace': '␣','\bar': '̄','\natural': '♮','\mp': '∓','\subseteq': '⊆','\NG': 'Ŋ','\LeftRightVector': '⥎','\gtreqqless': '⪌','\Longleftrightarrow': '⟺','\vdots': '⋮','\Elzltln': 'ɲ','\gimel': 'ℷ','\iiiint': '⨌','\TH': 'Þ','\clwintegral': '∱','\Lleftarrow': '⇚','\hat': '̂','\nearrow': '↗','\vartheta': 'ϑ','\Iota': 'Ι','\th': 'þ','\Elzvrecto': '▯','\kernelcontraction': '∻','\ntriangleright': '⋫','\breve': '̆','\succeq': '⪰','\enspace': ' ','\nwovnearrow': '⤲','\bigcirc': '○','\sigma': 'σ','\leftharpoonup': '↼','\textasciiacute': '´','\int': '∫','\curlyeqprec': '⋞','\Elztdcol': '⫶','\neovsearrow': '⤮','\Leftrightarrow': '⇔','\lceil': '⌈','\UpArrowBar': '⤒','\ne': '≠','\varsubsetneqq': '⊊︀','\bullet': '•','\boxbslash': '⧅','\precnapprox': '⪹','\precapprox': '⪷','\curvearrowright': '↷','\top': '⊤','\Elztrny': 'ʎ','\Elztrnr': 'ɹ','\blacktriangledown': '▾','\Elzhlmrk': 'ˑ','\rasp': 'ʼ','\downharpoonright': '⇂','\sqsubset': '⊏','\succsim': '≿','\dashV': '⫣','\Elzopeno': 'ɔ','\emdash': '—','\delta': 'δ','\rfloor': '⌋','\eqslantless': '⪕','\Elzverts': 'ˈ','\eqcolon': '≕','\nsubseteq': '⊈','\wedge': '∧','\cdots': '⋯','\spadesuit': '♠','\tildetrpl': '≋','\leftrightsquigarrow': '↭','\dbkarow': '⤏','\Sigma': 'Σ','\longmapsto': '⟼','\DownArrowUpArrow': '⇵','\intbar': '⨍','\npreceq': '⪯̸','\virgo': '♍','\boxast': '⧆','\Elzsbbrg': '̪','\drbkarrow': '⤐','\ell': 'ℓ','\tau': 'τ','\Vvert': '⦀','\circledS': 'Ⓢ','\boxdot': '⊡','\twoheadleftarrow': '↞','\textpertenthousand': '‱','\Uparrow': '⇑','\LeftVectorBar': '⥒','\textasciimacron': '¯','\nolinebreak': '⁠','\rangle': '〉','\libra': '♎','\Lambda': 'Λ','\sqsupseteq': '⊒','\odot': '⊙','\supseteqq': '⫆','\boxminus': '⊟','\textasciidieresis': '¨','\k': '̨','\textnumero': '№','\Pi': 'Π','\nparallel': '∦','\Elzpalh': '̡','\Elzsqfse': '◪','\gtrapprox': '⪆','\lessgtr': '≶','\Elzrl': 'ɼ','\coloneq': '≔','\pisces': '♓','\Elzreapos': '‛','\Elzsqfl': '◧','\eqcirc': '≖','\quarternote': '♩','\RightVectorBar': '⥓','\texttrademark': '™','\upharpoonleft': '↾','\wedgeq': '≙','\hookrightarrow': '↪','\supsetneq': '⊋','\succneqq': '⪶','\Elztrnh': 'ɥ','\precsim': '≾','\preceq': '⪯','\Gamma': 'Γ','\tosa': '⤩','\notin': '∉','\circ': '∘','\prime': '′','\cdot': '⋅','\uplus': '⊎','\rtimes': '⋊','\Elzesh': 'ʃ','\nmid': '∤','\DJ': 'Đ','\ElzAnd': '⩓','\DownLeftVectorBar': '⥖','\Supset': '⋑','\RightUpDownVector': '⥏','\Elzpupsil': 'ʊ','\varpi': 'ϖ','\circledast': '⊛','\cap': '∩','\Kappa': 'Κ','\vdash': '⊢','\because': '∵','\biguplus': '⨄','\textbrokenbar': '¦','\eqsim': '≂','\Elzclomeg': 'ɷ','\tona': '⤧','\setminus': '∖','\therefore': '∴','\leftarrowtail': '↢','\rightanglearc': '⊾','\measuredangle': '∡','\LeftTeeVector': '⥚','\longleftarrow': '⟵','\dj': 'đ','\intprod': '⨼','\notgreaterless': '≹','\ElzLap': '⧊','\gtrsim': '≳','\adots': '⋰','\rho': 'ρ','\leftthreetimes': '⋋','\jupiter': '♃','\bumpeq': '≏','\oiint': '∯','\Elzpgamma': 'ɣ','\dotplus': '∔','\searrow': '↘','\Elzlow': '˕','\VDash': '⊫','\boxdiag': '⧄','\varsigma': 'ς','\sqrint': '⨖','\nu': 'ν','\textquotedblleft': '“','\leftrightharpoons': '⇋','\preccurlyeq': '≼','\ddots': '⋱','\flat': '♭','\otimes': '⊗','\Elzrtll': 'ɭ','\lnapprox': '⪉','\vartriangleleft': '⊲','\NotSquareSuperset': '⊐̸','\Psi': 'Ψ','\RightDownVectorBar': '⥕','\ominus': '⊖','\grave': '̀','\bowtie': '⋈','\prod': '∏','\succcurlyeq': '≽','\geqslant': '⩾','\LeftDownVectorBar': '⥙','\bigoplus': '⨁','\nsucceq': '⪰̸','\obslash': '⦸','\H': '̋','\digamma': 'ϝ','\vartriangleright': '⊳','\nsupseteqq': '⫆̸','\Elzglst': 'ʔ','\NestedLessLess': '⪡','\o': 'ø','\divideontimes': '⋇','\triangleright': '▹','\NotNestedGreaterGreater': '⪢̸','\diagdown': '╲','\doteq': '≐','\upint': '⨛','\bigcup': '⋃','\simeq': '≃','\gvertneqq': '≩︀','\rightarrowtail': '↣','\multimap': '⊸','\Delta': 'Δ','\Elzyogh': 'ʒ','\Rho': 'Ρ','\backprime': '‵','\lambda': 'λ','\LeftDownTeeVector': '⥡','\starequal': '≛','\triangledown': '▿','\circlearrowright': '↻','\textquestiondown': '¿','\blacktriangleleft': '◂','\succnsim': '⋩','\cong': '≅','\varsupsetneq': '⊋︀','\quad': ' ','\bigsqcap': '⨅','\lazysinv': '∾','\RightTriangleBar': '⧐','\Subset': '⋐','\sqcap': '⊓','\succnapprox': '⪺','\nleq': '≰','\Elzlpargt': '⦠','\vee': '∨','\approxeq': '≊','\Elzschwa': 'ə','\RightTeeVector': '⥛','\rightharpoonup': '⇀','\hermitconjmatrix': '⊹','\textordmasculine': 'º','\rightarrow': '→','\geqq': '≧','\Mapsfrom': '⤆','\rmoustache': '⎱','\u': '˘','\intBar': '⨎','\Epsilon': 'Ε','\RightDownTeeVector': '⥝','\mu': 'μ','\zeta': 'ζ','\gneq': '⪈','\curvearrowleft': '↶','\mercury': '☿','\le': '≤','\ulcorner': '⌜','\varepsilon': 'ɛ','\Elzrtld': 'ɖ','\intprodr': '⨽','\downarrow': '↓','\minusdot': '⨪','\gtrdot': '⋗','\circledR': '®','\nVdash': '⊮','\nsime': '≄','\parallel': '∥','\NotRightTriangleBar': '⧐̸','\Digamma': 'Ϝ','\leftleftarrows': '⇇','\nvDash': '⊭','\Rrightarrow': '⇛','\toea': '⤨','\seovnearrow': '⤭','\gneqq': '≩','\textonehalf': '½','\ElzRlarr': '⥂','\Elzrtlz': 'ʐ','\oplus': '⊕','\rceil': '⌉','\updownarrow': '↕','\cup': '∪','\rdiagovsearrow': '⤰','\varkappa': 'ϰ','\cbrt': '∛','\trianglerighteq': '⊵','\AA': 'Å','\exists': '∃','\Uuparrow': '⤊','\thickspace': ' ','\endash': '–','\oslash': '⊘','\gnsim': '⋧','\Chi': 'Χ','\nabla': '∇','\models': '⊧','\lneqq': '≨','\Cup': '⋓','\propto': '∝','\rq': '’','\mlcp': '⫛','\leftsquigarrow': '↜'}

function! LaTeXtoUnicode_omnifunc(findstart, base)
if a:findstart == 1
let cnum = col('.')
let l = getline('.')
let i = match(l[0:cnum-2], '\\[A-Za-z]\+$')
if i == -1
let i = -3
endif
return i
else
if has_key(g:latex_symbols, a:base)
return [g:latex_symbols[a:base]]
else
return []
end
endif
endfunction

set omnifunc=LaTeXtoUnicode_omnifunc

function! JuliaAttemptTabCompletion()
let l = getline('.')
let cnum = col('.')
let i = LaTeXtoUnicode_omnifunc(1, '')
if i >= 0
let base = l[i : cnum-2]
let uni = LaTeXtoUnicode_omnifunc(0, base)
if empty(uni)
let i = -3
else
let b = ''
for j in range(len(base))
let b = b . "\b"
endfor
return b . uni[0]
endif
endif
if i < 0
return "\t"
endif
endfunction

let b:undo_ftplugin = "setlocal include< suffixesadd< comments< commentstring<"
\ . " define< shiftwidth< expandtab< indentexpr< indentkeys< cinoptions<"
\ . " define< shiftwidth< expandtab< indentexpr< indentkeys< cinoptions< omnifunc<"
\ . " | delfunction LaTeXtoUnicode_omnifunc | delfunction JuliaAttemptTabCompletion"

if exists("loaded_matchit")
let b:match_ignorecase = 0
Expand Down Expand Up @@ -63,6 +113,13 @@ if exists("loaded_matchit")
\ . " | delfunction JuliaGetMatchWords"
endif

if exists("loaded_supertab")
call SuperTabChain(&omnifunc, "<c-p>")
call SuperTabSetDefaultCompletionType("<c-x><c-u>")
else
imap <expr> <Tab> JuliaAttemptTabCompletion()
endif

if has("gui_win32")
let b:browsefilter = "Julia Source Files (*.jl)\t*.jl\n"
let b:undo_ftplugin = b:undo_ftplugin . " | unlet! b:browsefilter"
Expand Down