Subversion Repositories Kolibri OS

Rev

Rev 9902 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
8728 leency 1
(*
9902 akron1 2
    Copyright 2021-2023 Anton Krotov
8728 leency 3
 
4
    This file is part of CEdit.
5
 
6
    CEdit is free software: you can redistribute it and/or modify
7
    it under the terms of the GNU General Public License as published by
8
    the Free Software Foundation, either version 3 of the License, or
9
    (at your option) any later version.
10
 
11
    CEdit is distributed in the hope that it will be useful,
12
    but WITHOUT ANY WARRANTY; without even the implied warranty of
13
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
    GNU General Public License for more details.
15
 
16
    You should have received a copy of the GNU General Public License
17
    along with CEdit. If not, see .
18
*)
19
 
20
MODULE Encodings;
21
 
22
CONST
9906 akron1 23
	CP866* = 0; CP1251* = 1; UTF8* = 2; UTF8BOM* = 3; (*UTF16LE* = 4;*)
8728 leency 24
 
9906 akron1 25
	UNDEF* = ORD("?");
8728 leency 26
 
9906 akron1 27
	EOL_CRLF* = 0; EOL_LF* = 1; EOL_CR* = 2;
28
	CR = 0DX; LF = 0AX;
9659 akron1 29
 
8728 leency 30
TYPE
9906 akron1 31
	CP* = ARRAY 256 OF INTEGER;
8728 leency 32
 
9906 akron1 33
	tEOL* = ARRAY 3 OF WCHAR;
9659 akron1 34
 
8728 leency 35
VAR
9906 akron1 36
	cp1251*, cp866*: CP;
37
	names*: ARRAY 4, 16 OF WCHAR;
38
	UNI*: ARRAY 65536, 2 OF BYTE;
8728 leency 39
 
9906 akron1 40
	eol*: ARRAY 3 OF tEOL;
41
	eolNames*: ARRAY 3, 16 OF WCHAR;
8728 leency 42
 
9659 akron1 43
 
8728 leency 44
PROCEDURE InitCP (VAR cp: CP);
45
VAR
9906 akron1 46
	i: INTEGER;
8728 leency 47
BEGIN
9906 akron1 48
	FOR i := 0H TO 7FH DO
49
		cp[i] := i
50
	END
8728 leency 51
END InitCP;
52
 
53
 
54
PROCEDURE Init8 (VAR cp: CP; VAR n: INTEGER; a, b, c, d, e, f, g, h: INTEGER);
55
BEGIN
9906 akron1 56
	cp[n] := a; INC(n);
57
	cp[n] := b; INC(n);
58
	cp[n] := c; INC(n);
59
	cp[n] := d; INC(n);
60
	cp[n] := e; INC(n);
61
	cp[n] := f; INC(n);
62
	cp[n] := g; INC(n);
63
	cp[n] := h; INC(n);
8728 leency 64
END Init8;
65
 
66
 
9708 akron1 67
PROCEDURE InitCP1251 (VAR cp: CP);
8728 leency 68
VAR
9906 akron1 69
	n, i: INTEGER;
8728 leency 70
BEGIN
9659 akron1 71
	InitCP(cp);
9906 akron1 72
	FOR i := 0410H TO 044FH DO
73
		cp[i - 350H] := i
74
	END;
75
	n := 80H;
76
	Init8(cp, n, 0402H, 0403H, 201AH, 0453H, 201EH, 2026H, 2020H, 2021H);
77
	Init8(cp, n, 20ACH, 2030H, 0409H, 2039H, 040AH, 040CH, 040BH, 040FH);
78
	Init8(cp, n, 0452H, 2018H, 2019H, 201CH, 201DH, 2022H, 2013H, 2014H);
79
	Init8(cp, n, UNDEF, 2122H, 0459H, 203AH, 045AH, 045CH, 045BH, 045FH);
80
	Init8(cp, n, 00A0H, 040EH, 045EH, 0408H, 00A4H, 0490H, 00A6H, 00A7H);
81
	Init8(cp, n, 0401H, 00A9H, 0404H, 00ABH, 00ACH, 00ADH, 00AEH, 0407H);
82
	Init8(cp, n, 00B0H, 00B1H, 0406H, 0456H, 0491H, 00B5H, 00B6H, 00B7H);
83
	Init8(cp, n, 0451H, 2116H, 0454H, 00BBH, 0458H, 0405H, 0455H, 0457H);
9708 akron1 84
END InitCP1251;
8728 leency 85
 
86
 
87
PROCEDURE InitCP866 (VAR cp: CP);
88
VAR
9906 akron1 89
	n, i: INTEGER;
8728 leency 90
BEGIN
9659 akron1 91
	InitCP(cp);
9336 akron1 92
	FOR i := 0410H TO 043FH DO
9906 akron1 93
		cp[i - 390H] := i
9336 akron1 94
	END;
95
	FOR i := 0440H TO 044FH DO
9906 akron1 96
		cp[i - 360H] := i
9336 akron1 97
	END;
98
	n := 0B0H;
99
	Init8(cp, n, 2591H, 2592H, 2593H, 2502H, 2524H, 2561H, 2562H, 2556H);
100
	Init8(cp, n, 2555H, 2563H, 2551H, 2557H, 255DH, 255CH, 255BH, 2510H);
101
	Init8(cp, n, 2514H, 2534H, 252CH, 251CH, 2500H, 253CH, 255EH, 255FH);
102
	Init8(cp, n, 255AH, 2554H, 2569H, 2566H, 2560H, 2550H, 256CH, 2567H);
103
	Init8(cp, n, 2568H, 2564H, 2565H, 2559H, 2558H, 2552H, 2553H, 256BH);
104
	Init8(cp, n, 256AH, 2518H, 250CH, 2588H, 2584H, 258CH, 2590H, 2580H);
105
	n := 0F0H;
106
	Init8(cp, n, 0401H, 0451H, 0404H, 0454H, 0407H, 0457H, 040EH, 045EH);
107
	Init8(cp, n, 00B0H, 2219H, 00B7H, 221AH, 2116H, 00A4H, 25A0H, 00A0H);
8728 leency 108
END InitCP866;
109
 
110
 
111
PROCEDURE setUNI;
112
VAR
9906 akron1 113
	i: INTEGER;
8728 leency 114
BEGIN
9906 akron1 115
	FOR i := 0 TO 65535 DO
116
		UNI[i, CP866]  := UNDEF;
117
		UNI[i, CP1251] := UNDEF
118
	END;
119
	FOR i := 0 TO 255 DO
120
		UNI[cp1251[i], CP1251] := i;
121
		UNI[cp866[i], CP866] := i
122
	END
8728 leency 123
END setUNI;
124
 
125
 
126
BEGIN
9906 akron1 127
	eol[EOL_CRLF] := CR + LF;
128
	eol[EOL_LF]   := LF;
129
	eol[EOL_CR]   := CR;
130
	eolNames[EOL_CRLF] := "CRLF";
131
	eolNames[EOL_LF]   := "LF";
132
	eolNames[EOL_CR]   := "CR";
133
	names[CP866]   := "CP866";
134
	names[CP1251]  := "CP1251";
135
	names[UTF8]    := "UTF-8";
136
	names[UTF8BOM] := "UTF-8-BOM";
137
	InitCP1251(cp1251);
138
	InitCP866(cp866);
139
	setUNI
8728 leency 140
END Encodings.