omcUnicodeMap
Карта юникод-литер.
omcunicodemap.txt omcunicodemap.7z
Запись текста-карты юникод-литер 0000-FFFF
Команда Unicode_map.Open формирует текст с картой юникод-литер и открывает его в режиме обзора (Dev→Browser Mode):
- Копирование литер: выделить (двойной щелчок) и перетащить в нужный документ.
- Навигация — по полужирным числам-кодам: по-горизонтали — прыжок на соотв-ю 100H-ю пределах текущей 1000H-и; по-вертикали — прыжок на соответствующую тысячу.
- Перед 1000H-ми — ссылки на юникод-карты в википедии: http://en.wikibooks.org/wiki/Unicode/Character_reference/0000-0FFF
Замечания:
- Литеры 00H-1FH и 7FH являются особыми для текстов Блэкбокса, поэтому выводятся их коды.
- Если документ сохранять — имеет смысл убрать1) две первые бесполезные строчки.
- Для вставки в текст частоупотребимых литер (после того, как они найдены в таблице), можно завести команды в меню2):
PROCEDURE InsertChar* (x: INTEGER); VAR msg: Controllers.EditMsg; BEGIN msg.op := Controllers.pasteChar; msg.char := CHR(x); Controllers.Forward(msg) END InsertChar;
"Вставить тире" "" "Xxx.InsertChar(2015H)" "StdCmds.PasteCharGuard"
MODULE Unicode_map;
IMPORT
Strings, Ports, Views, Containers, Fonts,
StdLinks,
TextModels, TextViews, TextControllers, TextMappers, TextRulers;
PROCEDURE IntToHex4Str (x: INTEGER; OUT s: ARRAY OF CHAR);
BEGIN
Strings.IntToStringForm(x, Strings.hexadecimal, 4, "0", Strings.hideBase, s)
END IntToHex4Str;
PROCEDURE WriteLLink (VAR fmt: TextMappers.Formatter; IN cmd: ARRAY OF CHAR);
BEGIN
fmt.WriteView(StdLinks.dir.NewLink(cmd))
END WriteLLink;
PROCEDURE WriteLLinkX (VAR fmt: TextMappers.Formatter; c: INTEGER);
VAR s: ARRAY 5 OF CHAR;
BEGIN
IntToHex4Str(c, s);
WriteLLink(fmt, "StdLinks.ShowTarget('" + s + "')")
END WriteLLinkX;
PROCEDURE WriteLTargetX (VAR fmt: TextMappers.Formatter; c: INTEGER);
VAR s: ARRAY 5 OF CHAR;
BEGIN
Strings.IntToStringForm(c, Strings.hexadecimal, 4, "0", Strings.hideBase, s);
fmt.WriteView(StdLinks.dir.NewTarget(s))
END WriteLTargetX;
PROCEDURE WriteRLink (VAR fmt: TextMappers.Formatter);
BEGIN
fmt.WriteView(StdLinks.dir.NewLink(""))
END WriteRLink;
PROCEDURE WriteRTarget (VAR fmt: TextMappers.Formatter);
BEGIN
fmt.WriteView(StdLinks.dir.NewTarget(""))
END WriteRTarget;
PROCEDURE WriteWikiLink (VAR fmt: TextMappers.Formatter; c: INTEGER);
VAR
normal, blueUnderlined: TextModels.Attributes;
s: ARRAY 5 OF CHAR; s1: ARRAY 10 OF CHAR;
BEGIN
normal := fmt.rider.attr;
blueUnderlined := TextModels.NewColor(
TextModels.NewStyle(fmt.rider.attr, {Fonts.underline}),
Ports.blue);
IntToHex4Str(c, s1); IntToHex4Str(c + 0FFFH, s);
s1 := s1 + "-" + s;
fmt.WriteLn;
fmt.rider.SetAttr(blueUnderlined);
WriteLTargetX(fmt, c);
WriteRTarget(fmt);
WriteLLink(fmt, "i21sysCalls.Open('"
+ "http://en.wikibooks.org/wiki/Unicode/Character_reference/" + s1
+ "')");
fmt.WriteString(s1);
WriteRLink(fmt);
fmt.rider.SetAttr(normal)
END WriteWikiLink;
PROCEDURE WriteHeader (VAR fmt: TextMappers.Formatter; c: INTEGER);
VAR
i: INTEGER;
normal, bold: TextModels.Attributes;
BEGIN
normal := fmt.rider.attr;
bold := TextModels.NewWeight(fmt.rider.attr, Fonts.bold);
fmt.WriteLn;
fmt.rider.SetAttr(bold);
WriteLTargetX(fmt, c);
fmt.WriteString("U+");
WriteRTarget(fmt);
i := 0;
WHILE i < 10H DO
fmt.WriteTab;
WriteLLinkX(fmt, (c - c MOD 1000H) + i * 100H);
fmt.WriteIntForm(i, TextMappers.hexadecimal, 1, "0", TextMappers.hideBase);
WriteRLink(fmt);
INC(i)
END;
fmt.rider.SetAttr(normal)
END WriteHeader;
PROCEDURE WriteText (VAR fmt: TextMappers.Formatter);
VAR
c: INTEGER;
normal, bold: TextModels.Attributes;
BEGIN
normal := fmt.rider.attr;
bold := TextModels.NewWeight(fmt.rider.attr, Fonts.bold);
c := 0H;
WHILE c <= 0FFFFH DO
IF c MOD 1000H = 0 THEN WriteWikiLink(fmt, c) END;
IF c MOD 100H = 0 THEN WriteHeader(fmt, c) END;
IF c MOD 10H = 0 THEN
fmt.WriteLn;
fmt.rider.SetAttr(bold);
WriteLLinkX(fmt, c DIV 10H MOD 10H * 1000H);
fmt.WriteIntForm(c, TextMappers.hexadecimal, 4, "0", TextMappers.hideBase);
WriteRLink(fmt);
fmt.rider.SetAttr(normal)
END;
fmt.WriteTab; fmt.WriteChar(CHR(c));
INC(c)
END
END WriteText;
PROCEDURE MakeRuler (OUT r: TextRulers.Ruler);
VAR i: INTEGER;
BEGIN
r := TextRulers.dir.New(NIL);
TextRulers.AddTab(r, 15 * Ports.mm);
i := 1;
WHILE i <= 16 DO
TextRulers.AddTab(r, (15 + 9 * i) * Ports.mm);
INC(i)
END
END MakeRuler;
PROCEDURE Open*;
VAR
t: TextModels.Model; fmt: TextMappers.Formatter;
v: TextViews.View; r: TextRulers.Ruler;
BEGIN
t := TextModels.dir.New();
fmt.ConnectTo(t); WriteText(fmt);
v := TextViews.dir.New(t);
MakeRuler(r); v.SetDefaults(r, TextModels.dir.attr);
Views.OpenView(v);
v.ThisController().SetOpts({Containers.noCaret})
END Open;
END Unicode_map.
© 2005-2025 OberonCore и коллектив авторов.

