1+
2+ Функция Разобрать (Исходник ) Экспорт
3+ Возврат Parse(Исходник);
4+ КонецФункции // Разобрать()
5+
6+ Function Parse (Src , Pos = 1 ) Export
7+ List = New Array;
8+ Pos = Pos + 1 ;
9+ Chr = Mid (Src, Pos, 1 );
10+ If Chr = Chars.LF Then
11+ Pos = Pos + 1 ;
12+ Chr = Mid (Src, Pos, 1 );
13+ EndIf ;
14+ Beg = Pos;
15+ While Chr <> "" Do
16+ If Chr = "{" Then
17+ List.Add(Parse(Src, Pos));
18+ Pos = Pos + 1 ;
19+ Chr = Mid (Src, Pos, 1 );
20+ If Chr = Chars.LF Then
21+ Pos = Pos + 1 ;
22+ Chr = Mid (Src, Pos, 1 );
23+ EndIf ;
24+ Beg = Pos;
25+ ElsIf Chr = "," Then
26+ If Beg < Pos Then
27+ List.Add(Mid (Src, Beg, Pos - Beg));
28+ EndIf ;
29+ Pos = Pos + 1 ;
30+ Chr = Mid (Src, Pos, 1 );
31+ If Chr = Chars.LF Then
32+ Pos = Pos + 1 ;
33+ Chr = Mid (Src, Pos, 1 );
34+ EndIf ;
35+ Beg = Pos;
36+ ElsIf Chr = "}" Then
37+ If Beg < Pos Then
38+ List.Add(Mid (Src, Beg, Pos - Beg));
39+ EndIf ;
40+ Break ;
41+ ElsIf Chr = """ " Then
42+ While Chr = """ " Do
43+ Pos = Pos + 1 ;
44+ While Mid (Src, Pos, 1 ) <> """ " Do
45+ Pos = Pos + 1 ;
46+ EndDo ;
47+ Pos = Pos + 1 ;
48+ Chr = Mid (Src, Pos, 1 );
49+ EndDo ;
50+ Else
51+ Pos = Pos + 1 ;
52+ Chr = Mid (Src, Pos, 1 );
53+ EndIf ;
54+ EndDo ;
55+ Return List;
56+ EndFunction // Parse()
57+
58+ Function ParseLimited (Src , Limit = 10 , Pos = 1 , Level = 0 ) Export
59+ List = New Array;
60+ Pos = Pos + 1 ;
61+ Chr = Mid (Src, Pos, 1 );
62+ If Chr = Chars.LF Then
63+ Pos = Pos + 1 ;
64+ Chr = Mid (Src, Pos, 1 );
65+ EndIf ;
66+ Beg = Pos;
67+ While Chr <> "" Do
68+ If Chr = "{" Then
69+ If Level < Limit Then
70+ List.Add(ParseLimited(Src, Limit, Pos, Level + 1 ));
71+ Pos = Pos + 1 ;
72+ Chr = Mid (Src, Pos, 1 );
73+ If Chr = Chars.LF Then
74+ Pos = Pos + 1 ;
75+ Chr = Mid (Src, Pos, 1 );
76+ EndIf ;
77+ Beg = Pos;
78+ Else
79+ Level = Level + 1 ;
80+ Pos = Pos + 1 ;
81+ Chr = Mid (Src, Pos, 1 );
82+ EndIf ;
83+ ElsIf Chr = "," Then
84+ If Level < Limit Then
85+ If Beg < Pos Then
86+ List.Add(Mid (Src, Beg, Pos - Beg));
87+ EndIf ;
88+ Pos = Pos + 1 ;
89+ Chr = Mid (Src, Pos, 1 );
90+ If Chr = Chars.LF Then
91+ Pos = Pos + 1 ;
92+ Chr = Mid (Src, Pos, 1 );
93+ EndIf ;
94+ Beg = Pos;
95+ Else
96+ Pos = Pos + 1 ;
97+ Chr = Mid (Src, Pos, 1 );
98+ EndIf ;
99+ ElsIf Chr = "}" Then
100+ Level = Level - 1 ;
101+ If Level < Limit Then
102+ If Beg < Pos Then
103+ List.Add(Mid (Src, Beg, Pos - Beg));
104+ EndIf ;
105+ Break ;
106+ Else
107+ Pos = Pos + 1 ;
108+ Chr = Mid (Src, Pos, 1 );
109+ EndIf ;
110+ ElsIf Chr = """ " Then
111+ While Chr = """ " Do
112+ Pos = Pos + 1 ;
113+ While Mid (Src, Pos, 1 ) <> """ " Do
114+ Pos = Pos + 1 ;
115+ EndDo ;
116+ Pos = Pos + 1 ;
117+ Chr = Mid (Src, Pos, 1 );
118+ EndDo ;
119+ Else
120+ Pos = Pos + 1 ;
121+ Chr = Mid (Src, Pos, 1 );
122+ EndIf ;
123+ EndDo ;
124+ Return List;
125+ EndFunction // ParseLimited()
0 commit comments