Browse Source

Multilingual Oberon experiment

Arthur Yefimov 3 years ago
parent
commit
15fb7d2bd7
3 changed files with 49 additions and 15 deletions
  1. 7 7
      Data/Texts/ru.dat
  2. 28 0
      Programs/ЧтениеЧисел.Mod
  3. 14 8
      src/Editor.Mod

+ 7 - 7
Data/Texts/ru.dat

@@ -208,7 +208,7 @@ menuCut "&Вырезать"
 menuCopy "&Копировать"
 menuCopy "&Копировать"
 menuPaste "В&ставить"
 menuPaste "В&ставить"
 menuClear "&Удалить"
 menuClear "&Удалить"
-menuSelectAll "Выделить в&сё"
+menuSelectAll "В&ыделить всё"
 menuUnselect "С&нять выделение"
 menuUnselect "С&нять выделение"
 menuSearch "По&иск"
 menuSearch "По&иск"
 menuFind "&Найти..."
 menuFind "&Найти..."
@@ -222,10 +222,10 @@ menuParameters "&Параметры..."
 menuCompile "&Компиляция"
 menuCompile "&Компиляция"
 menuMake "&Смастерить"
 menuMake "&Смастерить"
 menuMakeAndRun "Смастерить и &запустить"
 menuMakeAndRun "Смастерить и &запустить"
-menuBuild "&Собрать"
-menuDebug "&Отладка"
+menuBuild "Со&брать"
+menuDebug "О&тладка"
 menuOutput "&Вывод"
 menuOutput "&Вывод"
-menuTools "&Сервис"
+menuTools "С&ервис"
 menuMessages "С&ообщения"
 menuMessages "С&ообщения"
 menuCalculator "&Калькулятор"
 menuCalculator "&Калькулятор"
 menuAsciiTable "&Таблица Ascii"
 menuAsciiTable "&Таблица Ascii"
@@ -247,7 +247,7 @@ menuLearnKeys "Изучить &клавиши"
 menuOpenOptions "&Открыть..."
 menuOpenOptions "&Открыть..."
 menuSaveOptions "&Сохранить"
 menuSaveOptions "&Сохранить"
 menuSaveOptionsAs "Сохранить &как..."
 menuSaveOptionsAs "Сохранить &как..."
-menuWindow "&Окно"
+menuWindow "Ок&но"
 menuTile "&Замостить"
 menuTile "&Замостить"
 menuCascade "&Каскад"
 menuCascade "&Каскад"
 menuCloseAll "З&акрыть все"
 menuCloseAll "З&акрыть все"
@@ -255,10 +255,10 @@ menuSizeMove "&Размер/двигать"
 menuZoom "Раз&вернуть"
 menuZoom "Раз&вернуть"
 menuNextWindow "&Следующее"
 menuNextWindow "&Следующее"
 menuPreviousWindow "&Предыдущее"
 menuPreviousWindow "&Предыдущее"
-menuCloseWindow "Зак&рыть"
+menuCloseWindow "Закр&ыть"
 menuListWindows "Сп&исок..."
 menuListWindows "Сп&исок..."
 menuRefreshDisplay "&Обновить дисплей"
 menuRefreshDisplay "&Обновить дисплей"
-menuHelp "Сп&равка"
+menuHelp "&Справка"
 menuContents "&Содержание"
 menuContents "&Содержание"
 menuIndex "И&ндекс"
 menuIndex "И&ндекс"
 menuTopicSearch "По&иск по темам"
 menuTopicSearch "По&иск по темам"

+ 28 - 0
Programs/ЧтениеЧисел.Mod

@@ -0,0 +1,28 @@
+МОДУЛЬ ЧтениеЧисел;
+ИМПОРТ Тексты, Ввод, Вывод;
+ПЕРЕМЕННЫЕ
+  имя: МАССИВ 100 ИЗ ЛИТЕРА;
+  а, б, в: ЦЕЛОЕ;
+  Т: Тексты.Текст;
+  С: Тексты.Сканер;
+НАЧАЛО
+  Вывод.Строка("Введите имя файла: ");
+  Ввод.Ряд(имя);
+
+  НОВЫЙ(Т);
+  Тексты.Открыть(Т, имя);
+  ЕСЛИ Т.длина = 0 ТОГДА
+    Вывод.Строка("Файл пуст."); Вывод.Перенос
+  ИНАЧЕ
+    Тексты.ОткрытьСканер(С, Т, 0);
+    Тексты.Сканировать(С);
+    ЕСЛИ С.класс = Тексты.Целое ТОГДА
+      а := С.и;
+      Вывод.Строка("Прочитано целое число: ");
+      Вывод.Целое(а); Вывод.Перенос
+    АЕСЛИ С.класс = Тексты.Имя ТОГДА
+      Вывод.Строка("Прочитано слово: ");
+      Вывод.Строка(С.с); Вывод.Перенос
+    КОНЕЦ
+  КОНЕЦ
+КОНЕЦ ЧтениеЧисел.

+ 14 - 8
src/Editor.Mod

@@ -362,13 +362,16 @@ END StringsFindPrev;
 PROCEDURE GetCharClass(ch: CHAR): INTEGER;
 PROCEDURE GetCharClass(ch: CHAR): INTEGER;
 VAR class: INTEGER;
 VAR class: INTEGER;
 BEGIN
 BEGIN
-  CASE ch OF
-    'a'..'z', 'A'..'Z', '_': class := charAlpha
-  | '0'..'9': class := charDigit
-  | '-', '+': class := charMinusPlus
-  | '"', "'": class := charQuote
-  | '(': class := charOpenBracket
-  ELSE class := charOther END ;
+  IF ('a' <= ch) & (ch <= 'z') OR ('A' <= ch) & (ch <= 'Z') OR
+     ('а' <= ch) & (ch <= 'я') OR ('А' <= ch) & (ch <= 'Я') OR
+     (ch = 'ё') OR (ch = 'Ё')
+  THEN class := charAlpha
+  ELSIF ('0' <= ch) & (ch <= '9') THEN class := charDigit
+  ELSIF (ch = '-') & (ch = '+') THEN class := charMinusPlus
+  ELSIF (ch = '"') OR (ch = "'") THEN class := charQuote
+  ELSIF ch = '(' THEN class := charOpenBracket
+  ELSE class := charOther
+  END ;
 RETURN class END GetCharClass;
 RETURN class END GetCharClass;
 
 
 PROCEDURE IsHexDigit(ch: CHAR): BOOLEAN;
 PROCEDURE IsHexDigit(ch: CHAR): BOOLEAN;
@@ -385,7 +388,7 @@ VAR part: ARRAY 32 OF CHAR; result: BOOLEAN;
   BEGIN RETURN keyword = part
   BEGIN RETURN keyword = part
   END KW;
   END KW;
 BEGIN
 BEGIN
-  IF (s[x] >= 'A') & (s[x] <= 'Z') THEN
+  IF (s[x] >= 'A') & (s[x] <= 'Z') OR (s[x] >= 'А') & (s[x] <= 'Я') THEN
     Strings.Extract(s, x, len, part);
     Strings.Extract(s, x, len, part);
     result := KW('ABS') OR KW('ASH') OR KW('BOOLEAN') OR KW('CAP') OR
     result := KW('ABS') OR KW('ASH') OR KW('BOOLEAN') OR KW('CAP') OR
       KW('CHAR') OR KW('CHR') OR KW('COPY') OR KW('DEC') OR KW('ENTIER') OR
       KW('CHAR') OR KW('CHR') OR KW('COPY') OR KW('DEC') OR KW('ENTIER') OR
@@ -404,6 +407,9 @@ BEGIN
       KW('UNTIL') OR KW('CONST') OR KW('MOD') OR KW('FLOOR') OR KW('LSL') OR
       KW('UNTIL') OR KW('CONST') OR KW('MOD') OR KW('FLOOR') OR KW('LSL') OR
       KW('ASR') OR KW('ROR') OR KW('ASSERT') OR KW('BYTE') OR
       KW('ASR') OR KW('ROR') OR KW('ASSERT') OR KW('BYTE') OR
       KW('SHORTCHAR') OR KW('SYSTEM')
       KW('SHORTCHAR') OR KW('SYSTEM')
+      OR KW('МОДУЛЬ') OR KW('ИМПОРТ') OR KW('ПЕРЕМЕННЫЕ') OR KW('МАССИВ') OR
+      KW('ИЗ') OR KW('ЛИТЕРА') OR KW('ЦЕЛОЕ') OR KW('НАЧАЛО') OR KW('НОВЫЙ') OR
+      KW('ЕСЛИ') OR KW('ТОГДА') OR KW('ИНАЧЕ') OR KW('АЕСЛИ') OR KW('КОНЕЦ')
   ELSE result := FALSE
   ELSE result := FALSE
   END ;
   END ;
 RETURN result END IsKeywordInString;
 RETURN result END IsKeywordInString;