{
pascalx.io.charset.basiclatin — базовая латиница с кодами символов
от $0000 до $00ff.
Copyright © 2021, 2026 Малик Разработчик
Это свободная программа: вы можете перераспространять её и/или изменять
её на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
в каком она была опубликована Фондом свободного программного обеспечения;
либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
Эта программа распространяется в надежде, что она будет полезной,
но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
общественной лицензии GNU.
Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
вместе с этой программой. Если это не так, см.
<https://www.gnu.org/licenses/>.
}
unit pascalx.io.charset.basiclatin;
{$MODE DELPHI}
interface
{%region} uses
pascalx.lang;
{%endregion}
{$TYPEINFO ON}
{$CALLING REGISTER}
const UNIT_NAME = 'pascalx.io.charset.basiclatin';
{%region} type
BasicLatin = class;
BasicLatin = class
public
class function isDigit(character: uchar): boolean; static;
class function isLowerCase(character: uchar): boolean; static;
class function isUpperCase(character: uchar): boolean; static;
class function toLowerCase(character: uchar): uchar; static;
class function toUpperCase(character: uchar): uchar; static;
class function orderOf(character: uchar): int; static;
end;
{%endregion}
implementation
{$CALLING REGISTER}
{%region BasicLatin}
class function BasicLatin.isDigit(character: uchar): boolean;
begin
result := (character >= '0') and (character <= '9');
end;
class function BasicLatin.isLowerCase(character: uchar): boolean;
begin
result := (character >= 'a') and (character <= 'z') or (character >= #$00df) and (character <= #$00f6) or (character >= #$00f8) and (character <= #$00ff);
end;
class function BasicLatin.isUpperCase(character: uchar): boolean;
begin
result := (character >= 'A') and (character <= 'Z') or (character >= #$00c0) and (character <= #$00d6) or (character >= #$00d8) and (character <= #$00de);
end;
class function BasicLatin.toLowerCase(character: uchar): uchar;
begin
if (character >= 'A') and (character <= 'Z') or (character >= #$00c0) and (character <= #$00d6) or (character >= #$00d8) and (character <= #$00de) then begin
result := uchar(int(character) + $0020);
exit;
end;
result := character;
end;
class function BasicLatin.toUpperCase(character: uchar): uchar;
begin
if (character >= 'a') and (character <= 'z') or (character >= #$00e0) and (character <= #$00f6) or (character >= #$00f8) and (character <= #$00fe) then begin
result := uchar(int(character) - $0020);
exit;
end;
result := character;
end;
class function BasicLatin.orderOf(character: uchar): int;
begin
case character of
#$00c0, { À }
#$00c1, { Á }
#$00c2, { Â }
#$00c3, { Ã }
#$00c4, { Ä }
#$00c5, { Å }
#$00c6, { Æ }
#$00e0, { à }
#$00e1, { á }
#$00e2, { â }
#$00e3, { ã }
#$00e4, { ä }
#$00e5, { å }
#$00e6: { æ }
character := 'A';
#$00c7, { Ç }
#$00e7: { ç }
character := 'C';
#$00c8, { È }
#$00c9, { É }
#$00ca, { Ê }
#$00cb, { Ë }
#$00e8, { è }
#$00e9, { é }
#$00ea, { ê }
#$00eb: { ë }
character := 'E';
#$00cc, { Ì }
#$00cd, { Í }
#$00ce, { Î }
#$00cf, { Ï }
#$00ec, { ì }
#$00ed, { í }
#$00ee, { î }
#$00ef: { ï }
character := 'I';
#$00d0, { Ð }
#$00de, { Þ }
#$00f0, { ð }
#$00fe: { þ }
character := 'D';
#$00d1, { Ñ }
#$00f1: { ñ }
character := 'N';
#$00d2, { Ò }
#$00d3, { Ó }
#$00d4, { Ô }
#$00d5, { Õ }
#$00d6, { Ö }
#$00d8, { Ø }
#$00f2, { ò }
#$00f3, { ó }
#$00f4, { ô }
#$00f5, { õ }
#$00f6, { ö }
#$00f8: { ø }
character := 'O';
#$00d9, { Ù }
#$00da, { Ú }
#$00db, { Û }
#$00dc, { Ü }
#$00f9, { ù }
#$00fa, { ú }
#$00fb, { û }
#$00fc: { ü }
character := 'U';
#$00dd, { Ý }
#$00fd, { ý }
#$00ff: { ÿ }
character := 'Y';
#$00df: { ß }
character := 'S';
else
if (character >= 'a') and (character <= 'z') then dec(character, $0020);
end;
if (character >= 'A') and (character <= 'Z') then begin
result := int(character) - int('A');
exit;
end;
if (character >= '0') and (character <= '9') then begin
result := int(character) - (int('0') - 26);
exit;
end;
result := int(character) + 36;
end;
{%endregion}
end.