From c7d24c42496f88e486232bb0e9ef4fb5cdeb4616 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraj=20Lieskovsk=C3=BD?= Date: Sun, 29 Nov 2020 18:33:38 +0100 Subject: [PATCH 01/14] Ignore empty lines when running through a file using "ctrl+enter" don't send empty lines. In essence ignores "cmd" of zero length and also doesn't send "code" of zero length. --- code_getter/getter.py | 6 ++++-- send_code.py | 5 +++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/code_getter/getter.py b/code_getter/getter.py index 07d4e5c..49b0930 100644 --- a/code_getter/getter.py +++ b/code_getter/getter.py @@ -90,8 +90,10 @@ def get_code(self): view.sel().subtract(original_s) self.advance(s) moved = True - - cmd += self.substr(s) + '\n' + + subs_cmd = self.substr(s) + if subs_cmd: + cmd += subs_cmd + '\n' if moved: view.show(view.sel()) diff --git a/send_code.py b/send_code.py index 1b18c10..d00f0eb 100644 --- a/send_code.py +++ b/send_code.py @@ -25,5 +25,6 @@ def run(self, edit, code=None, cmd=None, prog=None, resolve=True, confirmation=N code = getter.resolve(code) else: code = getter.get_code() - - sublime.set_timeout_async(lambda: sender.send_text(code)) + + if code: + sublime.set_timeout_async(lambda: sender.send_text(code)) From 2a273d7b06e4286aa2b0530d16a0745b24f9bf98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraj=20Lieskovsk=C3=BD?= Date: Sun, 29 Nov 2020 19:47:20 +0100 Subject: [PATCH 02/14] Matlab uses julia syntax --- code_getter/getter.py | 2 ++ settings.py | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/code_getter/getter.py b/code_getter/getter.py index 49b0930..b6b5c91 100644 --- a/code_getter/getter.py +++ b/code_getter/getter.py @@ -53,6 +53,8 @@ def initialize(cls, view): return PythonCodeGetter(view) elif syntax == "julia": return JuliaCodeGetter(view) + elif syntax == "matlab": + return JuliaCodeGetter(view) else: return CodeGetter(view) diff --git a/settings.py b/settings.py index 2f9ba9e..34cf195 100644 --- a/settings.py +++ b/settings.py @@ -8,7 +8,8 @@ class Settings: "text.html.markdown.rmarkdown": "rmd", "text.html.markdown": "md", "source.python": "python", - "source.julia": "julia" + "source.julia": "julia", + "source.matlab": "matlab" } def __init__(self, view): From 8e7195567c4d6d7b9ccf466d162574bc2e036e75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraj=20Lieskovsk=C3=BD?= Date: Sun, 29 Nov 2020 19:59:57 +0100 Subject: [PATCH 03/14] Should match on start of julia comment block "#=" --- code_getter/getter.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code_getter/getter.py b/code_getter/getter.py index 49b0930..bd54b02 100644 --- a/code_getter/getter.py +++ b/code_getter/getter.py @@ -359,6 +359,9 @@ def expand_line(self, s): "function", "macro", "if", "for", "while", "try", "module", "abstruct", "type", "struct", "immutable", "mutable" ] + + print(re.match(r"\s*\b(#=)\b", thiscmd)) + if (re.match(r"\s*\b(?:{})\b".format("|".join(keywords)), thiscmd) and not re.match(r".*\bend\b\s*$", thiscmd)) or \ (re.match(r".*\b(?:begin|let|quote)\b\s*", thiscmd)): From 7ffe6d2963be126d119952a2247214f97b6116b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraj=20Lieskovsk=C3=BD?= Date: Mon, 30 Nov 2020 00:27:16 +0100 Subject: [PATCH 04/14] Matches julia comment blocks --- code_getter/getter.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/code_getter/getter.py b/code_getter/getter.py index bd54b02..9d9800f 100644 --- a/code_getter/getter.py +++ b/code_getter/getter.py @@ -360,8 +360,6 @@ def expand_line(self, s): "abstruct", "type", "struct", "immutable", "mutable" ] - print(re.match(r"\s*\b(#=)\b", thiscmd)) - if (re.match(r"\s*\b(?:{})\b".format("|".join(keywords)), thiscmd) and not re.match(r".*\bend\b\s*$", thiscmd)) or \ (re.match(r".*\b(?:begin|let|quote)\b\s*", thiscmd)): @@ -380,6 +378,11 @@ def expand_line(self, s): s = sublime.Region(s.begin(), line.end()) break + elif re.match(r"\s*#=", thiscmd) and not re.match(r".*=#\s", thiscmd): + indentation = re.match(r"^(\s*)", thiscmd).group(1) + endline = view.find(r"^" + indentation + r"=#", s.begin()) + s = sublime.Region(s.begin(), view.line(endline.end()).end()) + else: s = self.forward_expand(s, pattern=r"[+\-*/](?=\s*$)") From 66afbc035eac1c472399355fd01d7a785680ec22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraj=20Lieskovsk=C3=BD?= Date: Mon, 30 Nov 2020 00:28:23 +0100 Subject: [PATCH 05/14] Reverting "ignore empty lines" --- code_getter/getter.py | 6 ++---- send_code.py | 5 ++--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/code_getter/getter.py b/code_getter/getter.py index 9d9800f..a1c14af 100644 --- a/code_getter/getter.py +++ b/code_getter/getter.py @@ -90,10 +90,8 @@ def get_code(self): view.sel().subtract(original_s) self.advance(s) moved = True - - subs_cmd = self.substr(s) - if subs_cmd: - cmd += subs_cmd + '\n' + + cmd += self.substr(s) + '\n' if moved: view.show(view.sel()) diff --git a/send_code.py b/send_code.py index d00f0eb..1b18c10 100644 --- a/send_code.py +++ b/send_code.py @@ -25,6 +25,5 @@ def run(self, edit, code=None, cmd=None, prog=None, resolve=True, confirmation=N code = getter.resolve(code) else: code = getter.get_code() - - if code: - sublime.set_timeout_async(lambda: sender.send_text(code)) + + sublime.set_timeout_async(lambda: sender.send_text(code)) From 0fd52c5374b0b53476959dc590e0c30faf71f71b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraj=20Lieskovsk=C3=BD?= Date: Sun, 29 Nov 2020 23:49:24 +0100 Subject: [PATCH 06/14] Reverting "ignore empty lines" --- code_getter/getter.py | 6 ++---- send_code.py | 5 ++--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/code_getter/getter.py b/code_getter/getter.py index b6b5c91..059af85 100644 --- a/code_getter/getter.py +++ b/code_getter/getter.py @@ -92,10 +92,8 @@ def get_code(self): view.sel().subtract(original_s) self.advance(s) moved = True - - subs_cmd = self.substr(s) - if subs_cmd: - cmd += subs_cmd + '\n' + + cmd += self.substr(s) + '\n' if moved: view.show(view.sel()) diff --git a/send_code.py b/send_code.py index d00f0eb..1b18c10 100644 --- a/send_code.py +++ b/send_code.py @@ -25,6 +25,5 @@ def run(self, edit, code=None, cmd=None, prog=None, resolve=True, confirmation=N code = getter.resolve(code) else: code = getter.get_code() - - if code: - sublime.set_timeout_async(lambda: sender.send_text(code)) + + sublime.set_timeout_async(lambda: sender.send_text(code)) From 3fed50eaae6467ebb2c1dfb5b5a1956e5bc22069 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraj=20Lieskovsk=C3=BD?= Date: Mon, 30 Nov 2020 00:28:23 +0100 Subject: [PATCH 07/14] Reverting "ignore empty lines" nothing --- code_getter/getter.py | 7 ++----- send_code.py | 5 ++--- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/code_getter/getter.py b/code_getter/getter.py index 9d9800f..bac204b 100644 --- a/code_getter/getter.py +++ b/code_getter/getter.py @@ -90,10 +90,8 @@ def get_code(self): view.sel().subtract(original_s) self.advance(s) moved = True - - subs_cmd = self.substr(s) - if subs_cmd: - cmd += subs_cmd + '\n' + + cmd += self.substr(s) + '\n' if moved: view.show(view.sel()) @@ -359,7 +357,6 @@ def expand_line(self, s): "function", "macro", "if", "for", "while", "try", "module", "abstruct", "type", "struct", "immutable", "mutable" ] - if (re.match(r"\s*\b(?:{})\b".format("|".join(keywords)), thiscmd) and not re.match(r".*\bend\b\s*$", thiscmd)) or \ (re.match(r".*\b(?:begin|let|quote)\b\s*", thiscmd)): diff --git a/send_code.py b/send_code.py index d00f0eb..1b18c10 100644 --- a/send_code.py +++ b/send_code.py @@ -25,6 +25,5 @@ def run(self, edit, code=None, cmd=None, prog=None, resolve=True, confirmation=N code = getter.resolve(code) else: code = getter.get_code() - - if code: - sublime.set_timeout_async(lambda: sender.send_text(code)) + + sublime.set_timeout_async(lambda: sender.send_text(code)) From 1c7e9defeb6bc0c03a04a0ea5dad0ea94b3e84ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraj=20Lieskovsk=C3=BD?= Date: Mon, 30 Nov 2020 06:06:33 +0100 Subject: [PATCH 08/14] Matlab syntax separated --- code_getter/getter.py | 51 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/code_getter/getter.py b/code_getter/getter.py index 5c84cc9..884686b 100644 --- a/code_getter/getter.py +++ b/code_getter/getter.py @@ -54,7 +54,7 @@ def initialize(cls, view): elif syntax == "julia": return JuliaCodeGetter(view) elif syntax == "matlab": - return JuliaCodeGetter(view) + return MatlabCodeGetter(view) else: return CodeGetter(view) @@ -377,7 +377,7 @@ def expand_line(self, s): s = sublime.Region(s.begin(), line.end()) break - elif re.match(r"\s*#=", thiscmd) and not re.match(r".*=#\s", thiscmd): + elif re.match(r"\s*#=", thiscmd) and not re.match(r".*=#\s*$", thiscmd): indentation = re.match(r"^(\s*)", thiscmd).group(1) endline = view.find(r"^" + indentation + r"=#", s.begin()) s = sublime.Region(s.begin(), view.line(endline.end()).end()) @@ -388,6 +388,53 @@ def expand_line(self, s): return s +class MatlabCodeGetter(CodeGetter): + + def expand_line(self, s): + view = self.view + if view.score_selector(s.begin(), "string"): + return s + + s_block = self.block_expand(s) + if s_block != s: + return s_block + + thiscmd = view.substr(s) + row = view.rowcol(s.begin())[0] + lastrow = view.rowcol(view.size())[0] + + keywords = [ + "if", "for", "while" + ] + if (re.match(r"\s*\b(?:{})\b".format("|".join(keywords)), thiscmd) and + not re.match(r".*\bend\b\s*$", thiscmd)): + indentation = re.match(r"^(\s*)", thiscmd).group(1) + endline = view.find(r"^" + indentation + r"\bend\b", s.begin()) + s = sublime.Region(s.begin(), view.line(endline.end()).end()) + + elif re.match(r"\s*\b(using|import|export)\b", thiscmd): + row = view.rowcol(s.begin())[0] + lastrow = view.rowcol(view.size())[0] + while row <= lastrow: + line = view.line(view.text_point(row, 0)) + if re.match(r".*[:,]\s*$", view.substr(line)): + row = row + 1 + else: + s = sublime.Region(s.begin(), line.end()) + break + + elif re.match(r"\s*%{", thiscmd) and not re.match(r".*%}\s*$", thiscmd): + indentation = re.match(r"^(\s*)", thiscmd).group(1) + endline = view.find(r"^" + indentation + r"%}", s.begin()) + no_cmts = True, + s = sublime.Region(s.begin(), view.line(endline.end()).end()) + + else: + s = self.forward_expand(s, pattern=r"[+\-*/](?=\s*$)") + + return s + + class MarkDownCodeGetter(CodeGetter): def advance(self, s): From c62a52ca33f3dc11d553b5cb4bcd5bf8b072c3a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraj=20Lieskovsk=C3=BD?= Date: Mon, 30 Nov 2020 06:12:20 +0100 Subject: [PATCH 09/14] full matlab syntax --- code_getter/getter.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code_getter/getter.py b/code_getter/getter.py index 884686b..51b3572 100644 --- a/code_getter/getter.py +++ b/code_getter/getter.py @@ -404,7 +404,7 @@ def expand_line(self, s): lastrow = view.rowcol(view.size())[0] keywords = [ - "if", "for", "while" + "for", "while", "switch", "try", "if", "parfor" ] if (re.match(r"\s*\b(?:{})\b".format("|".join(keywords)), thiscmd) and not re.match(r".*\bend\b\s*$", thiscmd)): @@ -412,7 +412,7 @@ def expand_line(self, s): endline = view.find(r"^" + indentation + r"\bend\b", s.begin()) s = sublime.Region(s.begin(), view.line(endline.end()).end()) - elif re.match(r"\s*\b(using|import|export)\b", thiscmd): + elif re.match(r"\s*\bimport\b", thiscmd): #not sure about this but matlab has no export and using row = view.rowcol(s.begin())[0] lastrow = view.rowcol(view.size())[0] while row <= lastrow: From e872a1576267b7c1c8b5f336e6bc248d78f73246 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraj=20Lieskovsk=C3=BD?= Date: Mon, 30 Nov 2020 16:29:04 +0100 Subject: [PATCH 10/14] Matlab Syntax And Comment Blocks For Matlab And Julia Matlab syntax - Expands all blocks that can be terminated with "end" Matches also "function" to "end" for compatibility with octave Uses array matching from Julia Keeps matching for "import" in comparison to Julia as does not have the others (haven't used it personally but according to documentation should work correctly) Comment blocks - Expands comment blocks for both Matlab and Julia Fake blocks (Julia and Matlab) - "fake blocks" which match around code you want to send all at once (speeds up debugging ). Deficiencies - matches Matlab comment blocks even if there is more text after %{ even though I added "\s*$" (r"\s*%{\s*$", thiscmd). Maybe .re library differs from the regex checking tool I was using. Feature suggestions/plans - Expanding blocks around array when sending it while on it's last line: A = [ 1 2 4 3 ]; ["enter"] Sending only #==# for Julie and %{%} of matlab comment blocks option (de-cluttering your console write-out ) Update getter.py --- code_getter/getter.py | 17 ++++++++++++++--- code_sender/sender.py | 6 ++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/code_getter/getter.py b/code_getter/getter.py index 51b3572..9016f5e 100644 --- a/code_getter/getter.py +++ b/code_getter/getter.py @@ -381,6 +381,11 @@ def expand_line(self, s): indentation = re.match(r"^(\s*)", thiscmd).group(1) endline = view.find(r"^" + indentation + r"=#", s.begin()) s = sublime.Region(s.begin(), view.line(endline.end()).end()) + + elif re.match(r"\s*#>>", thiscmd) and not re.match(r".*#<<\s*$", thiscmd): + indentation = re.match(r"^(\s*)", thiscmd).group(1) + endline = view.find(r"^" + indentation + r"#<<", s.begin()) + s = sublime.Region(s.begin(), view.line(endline.end()).end()) else: s = self.forward_expand(s, pattern=r"[+\-*/](?=\s*$)") @@ -404,7 +409,8 @@ def expand_line(self, s): lastrow = view.rowcol(view.size())[0] keywords = [ - "for", "while", "switch", "try", "if", "parfor" + "for", "while", "switch", "try", "if", "parfor", + "function" ] if (re.match(r"\s*\b(?:{})\b".format("|".join(keywords)), thiscmd) and not re.match(r".*\bend\b\s*$", thiscmd)): @@ -412,7 +418,7 @@ def expand_line(self, s): endline = view.find(r"^" + indentation + r"\bend\b", s.begin()) s = sublime.Region(s.begin(), view.line(endline.end()).end()) - elif re.match(r"\s*\bimport\b", thiscmd): #not sure about this but matlab has no export and using + elif re.match(r"\s*\bimport\b", thiscmd): row = view.rowcol(s.begin())[0] lastrow = view.rowcol(view.size())[0] while row <= lastrow: @@ -423,12 +429,17 @@ def expand_line(self, s): s = sublime.Region(s.begin(), line.end()) break - elif re.match(r"\s*%{", thiscmd) and not re.match(r".*%}\s*$", thiscmd): + elif re.match(r"\s*%{\s*$", thiscmd): indentation = re.match(r"^(\s*)", thiscmd).group(1) endline = view.find(r"^" + indentation + r"%}", s.begin()) no_cmts = True, s = sublime.Region(s.begin(), view.line(endline.end()).end()) + elif re.match(r"\s*%>>", thiscmd) and not re.match(r".*%<<\s*$", thiscmd): + indentation = re.match(r"^(\s*)", thiscmd).group(1) + endline = view.find(r"^" + indentation + r"%<<", s.begin()) + s = sublime.Region(s.begin(), view.line(endline.end()).end()) + else: s = self.forward_expand(s, pattern=r"[+\-*/](?=\s*$)") diff --git a/code_sender/sender.py b/code_sender/sender.py index 102d344..9934223 100644 --- a/code_sender/sender.py +++ b/code_sender/sender.py @@ -39,6 +39,8 @@ def initialize(cls, view, **kwargs): return PythonCodeSender(view, **kwargs) elif syntax == "julia": return JuliaCodeSender(view, **kwargs) + elif syntax == "matlab": + return MatlabCodeSender(view, **kwargs) else: return CodeSender(view, **kwargs) @@ -288,3 +290,7 @@ def send_to_terminus(self, cmd): class JuliaCodeSender(CodeSender): pass + +class MatlabCodeSender(CodeSender): + + pass From ca132208670d54c179f82018e70263b0d57c633d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraj=20Lieskovsk=C3=BD?= Date: Tue, 1 Dec 2020 08:37:17 +0100 Subject: [PATCH 11/14] backwards sq bracket matching for Matlab and Julia --- code_getter/getter.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/code_getter/getter.py b/code_getter/getter.py index 9016f5e..4a96341 100644 --- a/code_getter/getter.py +++ b/code_getter/getter.py @@ -200,6 +200,22 @@ def backward_expand(self, s, pattern=r"[+\-*/](?=\s*$)", scope="keyword.operator break return s + + def backward_sq_bracket_expand(self, s, pattern=r"[\[](?=\s*$)"): + # backward_expand previous lines ending with operators + + view = self.view + row = view.rowcol(s.begin())[0] + while row > 0: + row = row - 1 + line = view.line(view.text_point(row, 0)) + if re.search(pattern, view.substr(line)): + endpt = self.find_inline(r"\S(?=\s*$)", line.begin()).begin() + if endpt != -1: + s = sublime.Region(line.begin(), s.end()) + continue + break + return s def block_expand(self, s): # expand block based on block_start_pattern and block_end_pattern @@ -387,6 +403,9 @@ def expand_line(self, s): endline = view.find(r"^" + indentation + r"#<<", s.begin()) s = sublime.Region(s.begin(), view.line(endline.end()).end()) + elif re.match(r".*].*$", thiscmd) and not re.match(r".*\[.*$", thiscmd): + s = self.backward_sq_bracket_expand(s, pattern=r"[\[](?=\s*)") + else: s = self.forward_expand(s, pattern=r"[+\-*/](?=\s*$)") @@ -439,6 +458,9 @@ def expand_line(self, s): indentation = re.match(r"^(\s*)", thiscmd).group(1) endline = view.find(r"^" + indentation + r"%<<", s.begin()) s = sublime.Region(s.begin(), view.line(endline.end()).end()) + + elif re.match(r".*].*$", thiscmd) and not re.match(r".*\[.*$", thiscmd): + s = self.backward_sq_bracket_expand(s, pattern=r"[\[](?=\s*)") else: s = self.forward_expand(s, pattern=r"[+\-*/](?=\s*$)") From 7e164a5e736ed52b5d4785258d890980c6cdea37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraj=20Lieskovsk=C3=BD?= Date: Tue, 1 Dec 2020 23:36:24 +0100 Subject: [PATCH 12/14] slight correction --- code_getter/getter.py | 1 - 1 file changed, 1 deletion(-) diff --git a/code_getter/getter.py b/code_getter/getter.py index 4a96341..1194051 100644 --- a/code_getter/getter.py +++ b/code_getter/getter.py @@ -451,7 +451,6 @@ def expand_line(self, s): elif re.match(r"\s*%{\s*$", thiscmd): indentation = re.match(r"^(\s*)", thiscmd).group(1) endline = view.find(r"^" + indentation + r"%}", s.begin()) - no_cmts = True, s = sublime.Region(s.begin(), view.line(endline.end()).end()) elif re.match(r"\s*%>>", thiscmd) and not re.match(r".*%<<\s*$", thiscmd): From 61ef080ab54ea4a37bf977d440ff86137738fbd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraj=20Lieskovsk=C3=BD?= Date: Wed, 2 Dec 2020 12:40:38 +0100 Subject: [PATCH 13/14] fixed comment block recognition --- code_getter/getter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code_getter/getter.py b/code_getter/getter.py index 1194051..96f403f 100644 --- a/code_getter/getter.py +++ b/code_getter/getter.py @@ -448,7 +448,7 @@ def expand_line(self, s): s = sublime.Region(s.begin(), line.end()) break - elif re.match(r"\s*%{\s*$", thiscmd): + elif re.match(r"^\s*%{\s*$", thiscmd): indentation = re.match(r"^(\s*)", thiscmd).group(1) endline = view.find(r"^" + indentation + r"%}", s.begin()) s = sublime.Region(s.begin(), view.line(endline.end()).end()) From e90f27834d292ce3c3690b9de9af17b4a37023a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraj=20Lieskovsk=C3=BD?= Date: Wed, 2 Dec 2020 13:17:11 +0100 Subject: [PATCH 14/14] Revert of square brackets --- code_getter/getter.py | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/code_getter/getter.py b/code_getter/getter.py index 96f403f..5ef884e 100644 --- a/code_getter/getter.py +++ b/code_getter/getter.py @@ -200,22 +200,6 @@ def backward_expand(self, s, pattern=r"[+\-*/](?=\s*$)", scope="keyword.operator break return s - - def backward_sq_bracket_expand(self, s, pattern=r"[\[](?=\s*$)"): - # backward_expand previous lines ending with operators - - view = self.view - row = view.rowcol(s.begin())[0] - while row > 0: - row = row - 1 - line = view.line(view.text_point(row, 0)) - if re.search(pattern, view.substr(line)): - endpt = self.find_inline(r"\S(?=\s*$)", line.begin()).begin() - if endpt != -1: - s = sublime.Region(line.begin(), s.end()) - continue - break - return s def block_expand(self, s): # expand block based on block_start_pattern and block_end_pattern @@ -403,9 +387,6 @@ def expand_line(self, s): endline = view.find(r"^" + indentation + r"#<<", s.begin()) s = sublime.Region(s.begin(), view.line(endline.end()).end()) - elif re.match(r".*].*$", thiscmd) and not re.match(r".*\[.*$", thiscmd): - s = self.backward_sq_bracket_expand(s, pattern=r"[\[](?=\s*)") - else: s = self.forward_expand(s, pattern=r"[+\-*/](?=\s*$)") @@ -457,9 +438,6 @@ def expand_line(self, s): indentation = re.match(r"^(\s*)", thiscmd).group(1) endline = view.find(r"^" + indentation + r"%<<", s.begin()) s = sublime.Region(s.begin(), view.line(endline.end()).end()) - - elif re.match(r".*].*$", thiscmd) and not re.match(r".*\[.*$", thiscmd): - s = self.backward_sq_bracket_expand(s, pattern=r"[\[](?=\s*)") else: s = self.forward_expand(s, pattern=r"[+\-*/](?=\s*$)")