-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOtherFunctions.~pas
More file actions
194 lines (165 loc) · 4.96 KB
/
OtherFunctions.~pas
File metadata and controls
194 lines (165 loc) · 4.96 KB
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
unit OtherFunctions;
interface
uses
UsesUnit, StdCtrls;
procedure ofDeleteComments(var str: string);
procedure LoadTextFromFileToMemo(const fileName: string; memoCode: TMemo);
procedure ofDeleteFiguresFromText(memoCode: TMemo);
function ofConvertRealToString(const expierence: real): string;
procedure ofAddEnterAfterConstr(var Input: string; const ConstrBegin, ConstrEnd: string);
implementation
uses
SysUtils;
procedure LoadTextFromFileToMemo(const fileName: string; memoCode: TMemo);
var
tempFile: text;
tempStr: string;
begin
AssignFile(tempFile, fileName);
Reset(tempFile);
while (not eof(tempFile)) do
begin
readln(tempFile, tempStr);
memoCode.Lines.Add(tempStr);
end;
CloseFile(tempFile);
memoCode.Lines.Text := trim(memoCode.Lines.Text);
end;
procedure ofDeleteStringPartFromTo(var str: string; const strBegin, strEnd: string; const with2: boolean);
var
tempStr: string;
posSymb, commentLen, strLen, strEndLen: integer;
begin
strLen := Length(str);
strEndLen := Length(strEnd);
while pos(strBegin, str) <> 0 do
begin
posSymb := pos(strBegin, str);
tempStr := copy(str, posSymb, strLen + 1 - posSymb);
commentLen := pos(strEnd, tempStr);
if commentLen <> 0 then
begin
if with2 then
delete(str, posSymb, commentLen - 1 + strEndLen)
else
delete(str, posSymb, commentLen - 1);
end
else
delete(str, posSymb, strLen + 1 - posSymb);
end;
end;
procedure ofReplaceAll(var str: string; const expression, replacement: string);
var
expressionLen: integer;
posSymb: integer;
begin
expressionLen := Length(expression);
while pos(expression, str) <> 0 do
begin
posSymb := pos(expression, str);
delete(str, posSymb, expressionLen);
insert(replacement, str, posSymb)
end;
end;
procedure AddNewLinesAfterSymbol(var str: string; const expression: string);
var
posSymb, addedLen: integer;
tempStr: string;
begin
tempStr := str;
addedLen := 0;
while pos(expression, tempStr) <> 0 do
begin
posSymb := pos(expression, tempStr);
addedLen := addedLen + posSymb;
insert(#13#10, str, addedLen + Length(expression));
insert(#13#10, str, addedLen);
addedLen := addedLen + 4;
delete(tempStr, 1, posSymb);
end;
end;
procedure ofDeleteInnerFigure(var Input: string; BrakeSymbolOpen: Char = '('; BrakeSymbolClose: Char = ')'); //óäàëÿåò èíôðîìàöèþ ìåæäó ñêîáêàìè, òèï êîòîðûõ çàäàí BrakeSymbol. Ïî óìîë÷àíèþ ñêîáêè ()
var
i, BrakesOpenPos, BrakesClosePos: Integer;
begin
BrakesOpenPos := -1;
BrakesClosePos := -1;
for i := 0 to Length(Input) - 1 do
begin
if Input[i] = BrakeSymbolOpen then
begin
BrakesOpenPos := i;
Break;
end
end;
for i := 1 to Length(Input) do
if Input[i] = BrakeSymbolClose then
BrakesClosePos := i;
if (BrakesOpenPos <> -1) and (BrakesClosePos <> -1) then
Delete(Input, BrakesOpenPos + 1, BrakesClosePos - BrakesOpenPos - 1);
end;
procedure ofDeleteFiguresFromText(memoCode: TMemo);
var
count: integer;
tempStr: string;
begin
for count := 0 to (memoCode.Lines.Count - 1) do
begin
tempStr := memoCode.Lines[count];
ofDeleteInnerFigure(tempStr);
ofDeleteInnerFigure(tempStr, '[', ']');
memoCode.Lines[count] := tempStr;
end;
end;
procedure ofDeleteComments(var str: string);
begin
ofDeleteStringPartFromTo(str, '//', #13#10, false);
ofDeleteStringPartFromTo(str, '/*', '*/', true);
ofReplaceAll(str, #9, ' ');
ofReplaceAll(str, #13#10 + ' ', #13#10);
ofReplaceAll(str, ' ', ' ');
AddNewLinesAfterSymbol(str, 'else');
AddNewLinesAfterSymbol(str, '{' + #13#10);
AddNewLinesAfterSymbol(str, #13#10 + '}');
//âûçîâû ïðîöåëóðû, âñòàÿëâþùåé #13#10 ïðè îïðåä. óñëîâèÿõ
ofAddEnterAfterConstr(str, 'if', ')');
ofAddEnterAfterConstr(str, 'case', ':');
ofAddEnterAfterConstr(str, 'default', ':');
//êîíåö âûçîâà ïðîöåëóðû, âñòàÿëâþùåé #13#10 ïðè îïðåä. óñëîâèÿõ
ofReplaceAll(str, #13#10 + ' ', #13#10);
ofReplaceAll(str, ' ' + #13#10, #13#10);
ofReplaceAll(str, #13#10 + ' ' + #13#10, #13#10);
ofReplaceAll(str, #13#10#13#10, #13#10);
if pos(#13#10, str) = 1 then
delete(str, 1, 2);
end;
function ofConvertRealToString(const expierence: real): string;
begin
result := FloatToStr(expierence);
delete(result, 6, Length(result) - 5);
end;
procedure ofAddEnterAfterConstr;
var
FirstWordPoint, SecondWordPointPoint,LenFirstConstr,LenSecondConstr,i,j: Integer;
Enter, TempStr: string;
begin
SetLength(Enter, 2);
Enter[1] := #13;
Enter[2] := #10;
LenFirstConstr := Length(ConstrBegin);
LenSecondConstr := Length(ConstrEnd);
for i:= 1 to Length(Input) - LenFirstConstr do
begin
TempStr := Copy(Input,i,LenFirstConstr);
if LowerCase(TempStr) = LowerCase(ConstrBegin) then
begin
for j := i+LenFirstConstr to Length(Input) do
begin
TempStr := Copy(Input,j,LenSecondConstr);
if LowerCase(TempStr) = LowerCase(ConstrEnd) then
Insert(Enter, Input, j+LenSecondConstr);
end;
end;
end;
end;
end.