Subversion Repositories Kolibri OS

Rev

Rev 8728 | Rev 9336 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
8728 leency 1
(*
2
    Copyright 2021 Anton Krotov
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
23
    CP866* = 0; W1251* = 1; UTF8* = 2; UTF8BOM* = 3; UTF16LE* = 4;
24
 
25
    UNDEF* = -1;
26
 
27
TYPE
28
    CP = ARRAY 256 OF INTEGER;
29
 
30
VAR
31
    cpW1251*, cp866*: CP;
9073 leency 32
    names*: ARRAY 4, 16 OF WCHAR;
8728 leency 33
    UNI*: ARRAY 65536, 2 OF INTEGER;
34
 
35
 
36
PROCEDURE InitCP (VAR cp: CP);
37
VAR
38
    i: INTEGER;
39
BEGIN
40
    FOR i := 0H TO 7FH DO
41
        cp[i] := i
42
    END
43
END InitCP;
44
 
45
 
46
PROCEDURE Init8 (VAR cp: CP; VAR n: INTEGER; a, b, c, d, e, f, g, h: INTEGER);
47
BEGIN
48
    cp[n] := a; INC(n);
49
    cp[n] := b; INC(n);
50
    cp[n] := c; INC(n);
51
    cp[n] := d; INC(n);
52
    cp[n] := e; INC(n);
53
    cp[n] := f; INC(n);
54
    cp[n] := g; INC(n);
55
    cp[n] := h; INC(n);
56
END Init8;
57
 
58
 
59
PROCEDURE InitW1251 (VAR cp: CP);
60
VAR
61
    n, i: INTEGER;
62
BEGIN
63
    n := 80H;
64
    Init8(cp, n, 0402H, 0403H, 201AH, 0453H, 201EH, 2026H, 2020H, 2021H);
65
    Init8(cp, n, 20ACH, 2030H, 0409H, 2039H, 040AH, 040CH, 040BH, 040FH);
66
    Init8(cp, n, 0452H, 2018H, 2019H, 201CH, 201DH, 2022H, 2013H, 2014H);
67
    Init8(cp, n, UNDEF, 2122H, 0459H, 203AH, 045AH, 045CH, 045BH, 045FH);
68
    Init8(cp, n, 00A0H, 040EH, 045EH, 0408H, 00A4H, 0490H, 00A6H, 00A7H);
69
    Init8(cp, n, 0401H, 00A9H, 0404H, 00ABH, 00ACH, 00ADH, 00AEH, 0407H);
70
    Init8(cp, n, 00B0H, 00B1H, 0406H, 0456H, 0491H, 00B5H, 00B6H, 00B7H);
71
    Init8(cp, n, 0451H, 2116H, 0454H, 00BBH, 0458H, 0405H, 0455H, 0457H);
72
    FOR i := 0410H TO 044FH DO
73
        cp[i - 350H] := i
74
    END;
75
    InitCP(cp)
76
END InitW1251;
77
 
78
 
79
PROCEDURE InitCP866 (VAR cp: CP);
80
VAR
81
    n, i: INTEGER;
82
BEGIN
83
   FOR i := 0410H TO 043FH DO
84
       cp[i - 0410H + 80H] := i
85
   END;
86
   FOR i := 0440H TO 044FH DO
87
       cp[i - 0440H + 0E0H] := i
88
   END;
89
   n := 0B0H;
90
   Init8(cp, n, 2591H, 2592H, 2593H, 2502H, 2524H, 2561H, 2562H, 2556H);
91
   Init8(cp, n, 2555H, 2563H, 2551H, 2557H, 255DH, 255CH, 255BH, 2510H);
92
   Init8(cp, n, 2514H, 2534H, 252CH, 251CH, 2500H, 253CH, 255EH, 255FH);
93
   Init8(cp, n, 255AH, 2554H, 2569H, 2566H, 2560H, 2550H, 256CH, 2567H);
94
   Init8(cp, n, 2568H, 2564H, 2565H, 2559H, 2558H, 2552H, 2553H, 256BH);
95
   Init8(cp, n, 256AH, 2518H, 250CH, 2588H, 2584H, 258CH, 2590H, 2580H);
96
 
97
   n := 0F0H;
98
   Init8(cp, n, 0401H, 0451H, 0404H, 0454H, 0407H, 0457H, 040EH, 045EH);
99
   Init8(cp, n, 00B0H, 2219H, 00B7H, 221AH, 2116H, 00A4H, 25A0H, 00A0H);
100
 
101
   InitCP(cp)
102
END InitCP866;
103
 
104
 
105
PROCEDURE setUNI;
106
VAR
107
    i: INTEGER;
108
BEGIN
109
    FOR i := 0 TO 65535 DO
110
        UNI[i, CP866] := UNDEF;
111
        UNI[i, W1251] := UNDEF;
112
    END;
113
    FOR i := 0 TO 255 DO
114
        IF cpW1251[i] # UNDEF THEN
115
            UNI[cpW1251[i], W1251] := i
116
        END;
117
        IF cp866[i] # UNDEF THEN
118
            UNI[cp866[i], CP866] := i
119
        END
120
    END
121
END setUNI;
122
 
123
 
124
BEGIN
9073 leency 125
    names[CP866]   := "CP866";
126
    names[W1251]   := "Windows-1251";
127
    names[UTF8]    := "UTF-8";
128
    names[UTF8BOM] := "UTF-8-BOM";
8728 leency 129
    InitW1251(cpW1251);
130
    InitCP866(cp866);
131
    setUNI
132
END Encodings.