1414 along with this program. If not, see <http://www.gnu.org/licenses/>.
1515 """
1616
17- class SemicolonSplitter ():
17+ class Splitter ():
18+ """A splitter: splits a script into separate chunks. By default, the
19+ separator is the semicolon. Ignores separators in comments or strings"""
1820 __NONE = 0
1921
2022 __OPEN_BLOCK_COMMENT_C1 = 10
@@ -38,60 +40,60 @@ def __init__(self, block_comment=("/*", "*/"), line_comment="--", splitter=";"):
3840
3941 def split (self , script ):
4042 cur_chunk = []
41- state = SemicolonSplitter .__NONE
43+ state = Splitter .__NONE
4244 for c in script :
43- if state == SemicolonSplitter .__NONE :
45+ if state == Splitter .__NONE :
4446 if c == self .__block_comment [0 ][0 ]:
45- state = SemicolonSplitter .__OPEN_BLOCK_COMMENT_C1
47+ state = Splitter .__OPEN_BLOCK_COMMENT_C1
4648 elif c == self .__line_comment [0 ]:
47- state = SemicolonSplitter .__OPEN_LINE_COMMENT_C1
49+ state = Splitter .__OPEN_LINE_COMMENT_C1
4850 elif c == "\" " :
49- state = SemicolonSplitter .__DOUBLE_QUOTED
51+ state = Splitter .__DOUBLE_QUOTED
5052 elif c == "'" :
51- state = SemicolonSplitter .__SINGLE_QUOTED
53+ state = Splitter .__SINGLE_QUOTED
5254 elif c == self .__splitter :
5355 chunk = "" .join (cur_chunk ).strip ()
5456 if chunk :
5557 yield chunk
5658 cur_chunk = []
5759 continue
58- elif state == SemicolonSplitter .__OPEN_BLOCK_COMMENT_C1 :
60+ elif state == Splitter .__OPEN_BLOCK_COMMENT_C1 :
5961 if c == self .__block_comment [0 ][1 ]:
60- state = SemicolonSplitter .__BLOCK_COMMENT_OPENED
62+ state = Splitter .__BLOCK_COMMENT_OPENED
6163 else :
62- state = SemicolonSplitter .__NONE
63- elif state == SemicolonSplitter .__BLOCK_COMMENT_OPENED :
64+ state = Splitter .__NONE
65+ elif state == Splitter .__BLOCK_COMMENT_OPENED :
6466 if c == self .__block_comment [1 ][0 ]:
65- state = SemicolonSplitter .__BLOCK_COMMENT_OPENED_CLOSE_BLOCK_COMMENT_C1
66- elif state == SemicolonSplitter .__BLOCK_COMMENT_OPENED_CLOSE_BLOCK_COMMENT_C1 :
67+ state = Splitter .__BLOCK_COMMENT_OPENED_CLOSE_BLOCK_COMMENT_C1
68+ elif state == Splitter .__BLOCK_COMMENT_OPENED_CLOSE_BLOCK_COMMENT_C1 :
6769 if c == self .__block_comment [1 ][1 ]:
6870 cur_chunk = []
69- state = SemicolonSplitter .__NONE
71+ state = Splitter .__NONE
7072 continue
71- elif state == SemicolonSplitter .__OPEN_LINE_COMMENT_C1 :
73+ elif state == Splitter .__OPEN_LINE_COMMENT_C1 :
7274 if c == self .__line_comment [1 ]:
73- state = SemicolonSplitter .__LINE_COMMENT_OPENED
75+ state = Splitter .__LINE_COMMENT_OPENED
7476 else :
75- state = SemicolonSplitter .__NONE
76- elif state == SemicolonSplitter .__LINE_COMMENT_OPENED :
77+ state = Splitter .__NONE
78+ elif state == Splitter .__LINE_COMMENT_OPENED :
7779 if c == "\n " :
7880 cur_chunk = []
79- state = SemicolonSplitter .__NONE
81+ state = Splitter .__NONE
8082 continue
81- elif state == SemicolonSplitter .__DOUBLE_QUOTED :
83+ elif state == Splitter .__DOUBLE_QUOTED :
8284 if c == "\\ " :
83- state = SemicolonSplitter .__DOUBLE_QUOTED_ESCAPE
85+ state = Splitter .__DOUBLE_QUOTED_ESCAPE
8486 if c == "\" " :
85- state = SemicolonSplitter .__NONE
86- elif state == SemicolonSplitter .__DOUBLE_QUOTED_ESCAPE :
87- state = SemicolonSplitter .__DOUBLE_QUOTED ;
88- elif state == SemicolonSplitter .__SINGLE_QUOTED :
87+ state = Splitter .__NONE
88+ elif state == Splitter .__DOUBLE_QUOTED_ESCAPE :
89+ state = Splitter .__DOUBLE_QUOTED ;
90+ elif state == Splitter .__SINGLE_QUOTED :
8991 if c == "\\ " :
90- state = SemicolonSplitter .__SINGLE_QUOTED_ESCAPE
92+ state = Splitter .__SINGLE_QUOTED_ESCAPE
9193 if c == "'" :
92- state = SemicolonSplitter .__NONE
93- elif state == SemicolonSplitter .__SINGLE_QUOTED_ESCAPE :
94- state = SemicolonSplitter .__SINGLE_QUOTED ;
94+ state = Splitter .__NONE
95+ elif state == Splitter .__SINGLE_QUOTED_ESCAPE :
96+ state = Splitter .__SINGLE_QUOTED ;
9597
9698 cur_chunk .append (c )
9799
0 commit comments