forked from randy3k/LaTeXBox
-
Notifications
You must be signed in to change notification settings - Fork 0
/
autolrpair.py
34 lines (28 loc) · 1.76 KB
/
autolrpair.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import sublime, sublime_plugin
import re
# for auto pair \left \right pairs
class AutoLeftRightPairListener(sublime_plugin.EventListener):
def on_query_context(self, view, key, operator, operand, match_all):
if view.is_scratch() or view.settings().get('is_widget'): return
if not view.score_selector(view.sel()[0].end() if len(view.sel())>0 else 0, "meta.definition.math.latex"): return
if key == 'in_brackets':
out = all([view.substr(sel.begin()-1)=='(' and view.substr(sel.end())==')' for sel in view.sel()])
return (out == operand) if operator==0 else not (out == operand)
elif key == 'in_square_brackets':
out = all([view.substr(sel.begin()-1)=='[' and view.substr(sel.end())==']' for sel in view.sel()])
return (out == operand) if operator==0 else not (out == operand)
elif key == 'in_curly_brackets':
out = all([view.substr(sublime.Region(sel.begin()-2,sel.begin()))=='\\{' and view.substr(sublime.Region(sel.begin(),sel.begin()+2))=='\\}' for sel in view.sel()])
return (out == operand) if operator==0 else not (out == operand)
class AutoLeftRightPairCommand(sublime_plugin.TextCommand):
def run(self, edit, arg):
view = self.view
sel = [(s.begin(),s.end()) for s in view.sel()]
view.sel().clear()
for a,b in reversed(sel):
print(len(arg[0]))
view.replace(edit, sublime.Region(a-len(arg[0]),b+len(arg[1])), view.substr(sublime.Region(a,b)))
view.sel().add(sublime.Region(a-len(arg[0]),b-len(arg[0])))
left = "\\left"+ arg[0].replace('\\', '\\\\')
right = "\\right"+ arg[1].replace('\\', '\\\\')
view.run_command("insert_snippet", {"contents": left+"${1:$SELECTION}"+right})