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-2022 OberonCore и коллектив авторов.