gegl_utils.pas 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. {
  2. * Copyright (c) 2021 SSW
  3. *
  4. * This software is provided 'as-is', without any express or
  5. * implied warranty. In no event will the authors be held
  6. * liable for any damages arising from the use of this software.
  7. *
  8. * Permission is granted to anyone to use this software for any purpose,
  9. * including commercial applications, and to alter it and redistribute
  10. * it freely, subject to the following restrictions:
  11. *
  12. * 1. The origin of this software must not be misrepresented;
  13. * you must not claim that you wrote the original software.
  14. * If you use this software in a product, an acknowledgment
  15. * in the product documentation would be appreciated but
  16. * is not required.
  17. *
  18. * 2. Altered source versions must be plainly marked as such,
  19. * and must not be misrepresented as being the original software.
  20. *
  21. * 3. This notice may not be removed or altered from any
  22. * source distribution.
  23. }
  24. unit gegl_utils;
  25. {$I zgl_config.cfg}
  26. interface
  27. var
  28. // Rus: глобальная строка, для любого использования. Удобно для использования
  29. // для загрузки разных ресурсов.
  30. // Eng:
  31. LoadText: UTF8String;
  32. // Rus: флаг, показывающий, занята глобальная строка или нет. Вы должны его
  33. // включать если загрузили ресурс и отключать, когда больше этот ресурс
  34. // не нужен. И желательно освобождать строку полностью.
  35. // Eng:
  36. fLoadTextClearing: Boolean = True;
  37. {$IfDef DELPHI7_AND_DOWN}
  38. // Delphi 7 and down - UTF8. Rus only.
  39. function AscToUtf8Rus(text: AnsiString): UTF8String;
  40. function ByteToUtf8Rus(myByte: Byte): UTF8String;
  41. {$EndIf}
  42. // Rus: переводим клавиатурные коды в русскую символику. Для других языков, надо
  43. // свою функцию делать. И знать клавиатурную раскладку.
  44. // Eng: we translate keyboard codes into Russian symbols. For other languages, you
  45. // need to do your own function. It is imperative to know the keyboard layout
  46. // for this language.
  47. procedure EngToRus(var symb: LongWord);
  48. // Rus: то же самое, но только переводим в Unicode.
  49. // Eng: the same, but only translating to Unicode.
  50. procedure EngToRusUnicode(var symb: LongWord);
  51. // Rus: установка значения флага для глобальной загружаемой строки. Указываем что
  52. // строка занята или свободна. Если освобождаем, то строка очистится.
  53. // Eng:
  54. procedure set_FlagForLoadText(flag: Boolean); {$IfDef USE_INLINE}inline;{$EndIf}
  55. // Rus: возвращаем значение флага для глобальной строки. Занята строка или свободна?
  56. // Eng:
  57. function get_FlagForLoadText: Boolean; {$IfDef USE_INLINE}inline;{$EndIf}
  58. implementation
  59. {$IfDef DELPHI7_AND_DOWN}
  60. function AscToUtf8Rus(text: AnsiString): UTF8String;
  61. var
  62. i, len: Integer;
  63. n: Byte;
  64. begin
  65. Result := '';
  66. len := Length(text);
  67. for i := 1 to len do
  68. begin
  69. n := byte(text[i]);
  70. case n of
  71. 0..127: Result := Result + chr(n);
  72. 192..255: Result := Result + chr($D0) + chr(n - $C0 + $90);
  73. 168: Result := Result + chr($D0) + chr($81); // Ё
  74. 184: Result := Result + chr($D1) + chr($91); // ё
  75. 185: Result := Result + chr($E2) + chr($84) + chr($96); // №
  76. end;
  77. end;
  78. end;
  79. function ByteToUtf8Rus(myByte: Byte): UTF8String;
  80. begin
  81. case myByte of
  82. 0..127: Result := chr(myByte);
  83. 192..255: Result := chr($D0) + chr((myByte - $C0 + $90));
  84. 168: Result := chr($D0) + chr($81);
  85. 184: Result := chr($D1) + chr($91);
  86. 185: Result := Result + chr($E2) + chr($84) + chr($96);
  87. end;
  88. end;
  89. {$EndIf}
  90. procedure EngToRus(var symb: LongWord);
  91. begin
  92. case symb of
  93. 102 : symb := 224; // а
  94. 44 : symb := 225; // б
  95. 68 : symb := 194; // в
  96. 85 : symb := 195; // г
  97. 76 : symb := 196; // д
  98. 84 : symb := 197; // е
  99. 96 : symb := 184; // ё
  100. 59 : symb := 230; // ж
  101. 80 : symb := 199; // з
  102. 66 : symb := 200; // и
  103. 81 : symb := 201; // й
  104. 82 : symb := 202; // к
  105. 75 : symb := 203; // л
  106. 86 : symb := 204; // м
  107. 89 : symb := 205; // н
  108. 74 : symb := 206; // о
  109. 71 : symb := 207; // п
  110. 72 : symb := 208; // р
  111. 67 : symb := 209; // с
  112. 78 : symb := 210; // т
  113. 69 : symb := 211; // у
  114. 65 : symb := 212; // ф
  115. 91 : symb := 245; // х
  116. 87 : symb := 214; // ц
  117. 88 : symb := 215; // ч
  118. 73 : symb := 216; // ш
  119. 79 : symb := 217; // щ
  120. 93 : symb := 250; // ъ
  121. 83 : symb := 219; // ы
  122. 77 : symb := 220; // ь
  123. 39 : symb := 253; // э
  124. 46 : symb := 254; // ю
  125. 90 : symb := 223; // я
  126. 70 : symb := 192; // А
  127. 60 : symb := 193; // Б
  128. 100 : symb := 226; // В
  129. 117 : symb := 227; // Г
  130. 108 : symb := 228; // Д
  131. 116 : symb := 229; // Е
  132. 126 : symb := 168; // Ё
  133. 58 : symb := 198; // Ж
  134. 112 : symb := 231; // З
  135. 98 : symb := 232; // И
  136. 113 : symb := 233; // Й
  137. 114 : symb := 234; // К
  138. 107 : symb := 235; // Л
  139. 118 : symb := 236; // М
  140. 121 : symb := 237; // Н
  141. 106 : symb := 238; // О
  142. 103 : symb := 239; // П
  143. 104 : symb := 240; // Р
  144. 99 : symb := 241; // С
  145. 110 : symb := 242; // Т
  146. 101 : symb := 243; // У
  147. 97 : symb := 244; // Ф
  148. 123 : symb := 213; // Х
  149. 119 : symb := 246; // Ц
  150. 120 : symb := 247; // Ч
  151. 105 : symb := 248; // Ш
  152. 111 : symb := 249; // Щ
  153. 125 : symb := 218; // Ъ
  154. 115 : symb := 251; // Ы
  155. 109 : symb := 252; // Ь
  156. 34 : symb := 221; // Э
  157. 62 : symb := 222; // Ю
  158. 122 : symb := 255; // Я
  159. 35: symb := 185; // №
  160. end;
  161. end;
  162. procedure EngToRusUnicode(var symb: LongWord);
  163. begin
  164. case symb of
  165. 102 : symb := 1072; // а !!
  166. 44 : symb := 1073; // б !!
  167. 100 : symb := 1074; // в !!
  168. 117 : symb := 1075; // г !!
  169. 108 : symb := 1076; // д !!
  170. 116 : symb := 1077; // е !!
  171. 96 : symb := 1105; // ё !!
  172. 59 : symb := 1078; // ж !!
  173. 112 : symb := 1079; // з !!
  174. 98 : symb := 1080; // и !!
  175. 113 : symb := 1081; // й !!
  176. 114 : symb := 1082; // к !!
  177. 107 : symb := 1083; // л !!
  178. 118 : symb := 1084; // м !!
  179. 121 : symb := 1085; // н !!
  180. 106 : symb := 1086; // о !!
  181. 103 : symb := 1087; // п !!
  182. 104 : symb := 1088; // р !!
  183. 99 : symb := 1089; // с !!
  184. 110 : symb := 1090; // т !!
  185. 101 : symb := 1091; // у !!
  186. 97 : symb := 1092; // ф !!
  187. 91 : symb := 1093; // х !!
  188. 119 : symb := 1094; // ц !!
  189. 120 : symb := 1095; // ч !!
  190. 105 : symb := 1096; // ш !!
  191. 111 : symb := 1097; // щ !!
  192. 93 : symb := 1098; // ъ !!
  193. 115 : symb := 1099; // ы !!
  194. 109 : symb := 1100; // ь !!
  195. 39 : symb := 1101; // э !!
  196. 46 : symb := 1102; // ю !!
  197. 122 : symb := 1103; // я
  198. 70 : symb := 1040; // А !!
  199. 60 : symb := 1041; // Б !!
  200. 68 : symb := 1042; // В !!
  201. 85 : symb := 1043; // Г !!
  202. 76 : symb := 1044; // Д !!
  203. 84 : symb := 1045; // Е !!
  204. 126 : symb := 1025; // Ё !!
  205. 58 : symb := 1046; // Ж !!
  206. 80 : symb := 1047; // З !!
  207. 66 : symb := 1048; // И !!
  208. 81 : symb := 1049; // Й !!
  209. 82 : symb := 1050; // К !!
  210. 75 : symb := 1051; // Л !!
  211. 86 : symb := 1052; // М !!
  212. 89 : symb := 1053; // Н !!
  213. 74 : symb := 1054; // О !!
  214. 71 : symb := 1055; // П !!
  215. 72 : symb := 1056; // Р !!
  216. 67 : symb := 1057; // С !!
  217. 78 : symb := 1058; // Т !!
  218. 69 : symb := 1059; // У !!
  219. 65 : symb := 1060; // Ф !!
  220. 123 : symb := 1061; // Х !!
  221. 87 : symb := 1062; // Ц !!
  222. 88 : symb := 1063; // Ч !!
  223. 73 : symb := 1064; // Ш !!
  224. 79 : symb := 1065; // Щ !!
  225. 125 : symb := 1066; // Ъ !!
  226. 83 : symb := 1067; // Ы !!
  227. 77 : symb := 1068; // Ь !!
  228. 34 : symb := 1069; // Э
  229. 62 : symb := 1070; // Ю
  230. 90 : symb := 1071; // Я
  231. 35 : symb := 8470; // №
  232. end;
  233. end;
  234. procedure set_FlagForLoadText(flag: Boolean);
  235. begin
  236. if flag = True then
  237. LoadText := '';
  238. fLoadTextClearing := flag;
  239. end;
  240. function get_FlagForLoadText: Boolean;
  241. begin
  242. Result := fLoadTextClearing;
  243. end;
  244. end.