If I merge Unicode.odc with National.odc and reduce the result to the necessary functions then I can use BB 1.6 for shkola like the Russian version of BB 1.5
The result is
Код:
DEFINITION Unicode;
PROCEDURE IsLetter (ch: CHAR): BOOLEAN; (* Is it a letter? *)
PROCEDURE IsCap (ch: CHAR): BOOLEAN; (* Is it a capital letter? *)
PROCEDURE IsLow (ch: CHAR): BOOLEAN; (* Is it a lower letter? *)
PROCEDURE IsFirstIdentChar (ch: CHAR): BOOLEAN; (* Is it a first ident character? *)
PROCEDURE IsIdentChar (ch: CHAR): BOOLEAN; (* Is it a ident character? *)
PROCEDURE Cap (ch: CHAR): CHAR; (* convert letter to upper case *)
PROCEDURE Low (ch: CHAR): CHAR; (* convert letter to lower case *)
PROCEDURE Long (ch: SHORTCHAR): CHAR; (* convert to Unicode *)
PROCEDURE Short (ch: CHAR): SHORTCHAR; (* convert to ASCII code page *)
END Unicode.
This centralise all necessary changes into one new module called Unicode. The implementation is
Код:
MODULE Unicode;
PROCEDURE IsCap* (ch: CHAR): BOOLEAN;
BEGIN
RETURN (ch >= "A") & (ch <= "Z")
(* Unicode *)
OR (ch >= 0C0X) & (ch # 0D7X) & (ch <= 0DEX)
OR (ch >= 0410X) & (ch <= 042FX)
OR (ch = 0401X)
[color=#FF00FF](* Win1251 *)
OR (ch >= 0C0X) & (ch <= 0DFX)
OR (ch = 0A8X))[/color]
END IsCap;
PROCEDURE IsLow* (ch: CHAR): BOOLEAN;
BEGIN
RETURN (ch >= "a") & (ch <= "z")
(* Unicode *)
OR (ch >= 0E0X) & (ch # 0F7X) & (ch <= 0FEX)
OR (ch >= 0430X) & (ch <= 044FX)
OR (ch = 0451X)
[color=#FF00FF](* Win1251 *)
OR (ch >= 0E0X) & (ch <= 0FFX)
OR (ch = 0B8X))[/color]
END IsLow;
PROCEDURE IsLetter* (ch: CHAR): BOOLEAN;
BEGIN
RETURN IsCap(ch) OR IsLow(ch) OR (ch = 'ß')
END IsLetter;
PROCEDURE IsFirstIdentChar* (ch: CHAR): BOOLEAN;
BEGIN
RETURN IsLetter(ch) OR (ch = "_")
END IsFirstIdentChar;
PROCEDURE IsIdentChar* (ch: CHAR): BOOLEAN;
BEGIN
RETURN IsFirstIdentChar(ch) OR ("0" <= ch) & (ch <= "9")
END IsIdentChar;
PROCEDURE Cap* (ch: CHAR): CHAR;
BEGIN
IF IsLow(ch) THEN
IF ch = "ё" THEN ch := "Ё" ELSE ch := CHR(ORD(ch) - 32) END
END;
RETURN ch
END Cap;
PROCEDURE Low* (ch: CHAR): CHAR;
BEGIN
IF IsCap(ch) THEN
IF ch = "Ё" THEN ch := "ё" ELSE ch := CHR(ORD(ch) + 32) END
END;
RETURN ch
END Low;
PROCEDURE Long* (ch: SHORTCHAR): CHAR;
BEGIN
[color=#FF00FF](* ConvertToUnicode from Win1251 *)
IF ch = 0B8X THEN RETURN 0451X
ELSIF ch = 0A8X THEN RETURN 0401X
ELSIF (ch >= 0C0X) & (ch <= 0FFX) THEN RETURN CHR(ORD(ch) + 0350H) END;)[/color]
RETURN ch
END Long;
PROCEDURE Short* (ch: CHAR): SHORTCHAR;
BEGIN
[color=#FF00FF](* ConvertFromUnicode to Win1251 *)
IF ch = 0451X THEN RETURN 0B8X
ELSIF ch = 0401X THEN RETURN 0A8X
ELSIF (ch >= 0410X) & (ch <= 044FX) THEN RETURN SHORT(CHR(ORD(ch) - 0350H)) END;) [/color]
IF ch >= 100X THEN RETURN "?" ELSE RETURN SHORT(ch) END;
END Short;
END Unicode.
By using the red line BB 1.6 works like the BB1.5 Russian version
By deleting the red line it works like the original BB 1.6
All other changes are descript in
viewtopic.php?f=126&t=4468Just subsitute National to Unicode.
And the changes descript in
viewtopic.php?f=126&t=4487is the missing gap. Without it, it doesn't work.
I have this changes running. Should I mark the changed files with "B18 centralise Unicode functions" ?