OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 19:11

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Report illegal charcters
СообщениеДобавлено: Среда, 11 Сентябрь, 2013 08:55 

Зарегистрирован: Суббота, 24 Август, 2013 08:57
Сообщения: 81
Robert ask for reporting illegal Unicode character during compiling:

If I write
Код:
   VAR
     z  :  REAL;
   BEGIN
     z  :=  %108.3;

the compiler complains (factor starts with incorrect symbol).

However, if I replace '%' with '‰' (Unicode 2030) there is no complaint; the 'per-thousand' sign is simply ignored. Surely there should be a complaint?


I found in the mailing list the solution from Chris:

Chris Burrows in BLACKBOX@LISTS.OBERON.CH at Sat, 31 Dec 2011 14:42:37 +1030 писал(а):
It appears that (except when processing string constants) the compiler simply ignores any character that is not included in the 256-character LATIN-1 character set defined for the Component Pascal language. The relevant line of code is in DevCPM.Get:

Код:
   PROCEDURE DevCPM.Get* (VAR ch: SHORTCHAR);
      VAR ch1: CHAR;
   BEGIN
      REPEAT in.ReadChar(ch1); INC(curpos) UNTIL (ch1 < 100X) & (ch1 # TextModels.viewcode);
      ch := SHORT(ch1)
   END Get;


I haven't tested it but if you want to see compile-time errors then try modifying this function so that instead of ignoring the bad characters it substitutes a LATIN-1 character that is not part of the Component Pascal language. e.g. something like:

Код:
   PROCEDURE DevCPM.Get* (VAR ch: SHORTCHAR);
      VAR ch1: CHAR;
   BEGIN
      REPEAT in.ReadChar(ch1); INC(curpos) UNTIL (ch1 # TextModels.viewcode);
       IF ch1 >= 100X THEN ch := "?" ELSE ch := SHORT(ch1) END
   END Get;


A 16-bit Unicode character in your source code should then result in the same compilation error as the '%' character did in your example.



Further I found in viewtopic.php?f=116&t=1837 the solution:

Код:
   PROCEDURE DevCPM.Get* (VAR ch: SHORTCHAR);
      VAR ch1: CHAR;
      REPEAT in.ReadChar(ch1); INC(curpos) UNTIL ch1 # TextModels.viewcode;
      ch := UniLang.Short(ch1);
   END Get;

Where can I find the source of MODULE UniLang? What does it do?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Report illegal charcters
СообщениеДобавлено: Среда, 11 Сентябрь, 2013 11:00 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Zinn писал(а):
Further I found in viewtopic.php?f=116&t=1837 the solution:
Код:
   PROCEDURE DevCPM.Get* (VAR ch: SHORTCHAR);
      VAR ch1: CHAR;
      REPEAT in.ReadChar(ch1); INC(curpos) UNTIL ch1 # TextModels.viewcode;
      ch := UniLang.Short(ch1);
   END Get;
Where can I find the source of MODULE UniLang? What does it do?
See http://oberoncore.ru/projects/bb16ce (https://svn.oberoncore.ru/community/old/BlackBox/trunk/).
Код:
MODULE DevCPM;
...
   IMPORT SYSTEM, Kernel, Files, Stores, Models, Views, TextModels, TextMappers, Log, DevMarkers,
      UniLang := UnicodeOberon;
...
Код:
DEFINITION UnicodeOberon;

   PROCEDURE IsFirstIdentChar (ch: CHAR): BOOLEAN;
   PROCEDURE IsIdentChar (ch: CHAR): BOOLEAN;
   PROCEDURE Long (ch: SHORTCHAR): CHAR;
   PROCEDURE LongIdent (IN src: ARRAY OF SHORTCHAR; OUT dst: ARRAY OF CHAR);
   PROCEDURE Short (ch: CHAR): SHORTCHAR;
   PROCEDURE ShortIdent (IN src: ARRAY OF CHAR; OUT dst: ARRAY OF SHORTCHAR);

END UnicodeOberon.
Код:
PROCEDURE Short* (ch : CHAR) : SHORTCHAR;
BEGIN
   RETURN hook.ToShort(ch)
END Short;
Im refered to it in viewtopic.php?p=82081#p82081
Евгений Темиргалеев писал(а):


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Report illegal charcters
СообщениеДобавлено: Среда, 11 Сентябрь, 2013 11:02 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Zinn писал(а):
Код:
IF ch1 >= 100X THEN ch := "?" ELSE ch := SHORT(ch1) END
A 16-bit Unicode character in your source code should then result in the same compilation error as the '%' character did in your example.
It seems to me it's good solution for standard BB now. The way in bb16ce-project mentioned above is the same.
Код:
(* © 2006 И.Н.Горячев *)
(*  Автоматически сгенерированный файл. Создан 22-03-2006 16:35:54  *)

MODULE UnicodeCsLatin1;
...
PROCEDURE (c : Win) FromUnicode (ch : CHAR) : CHAR;
VAR res : CHAR;
BEGIN
   CASE ch OF
       00000X..0007FX : res := ch
   |   000A0X..000FFX : res := ch
...
   |   02122X : res := 00099X
   ELSE
      res := 03FX <------------------------------------------------------------- see here
   END;
   RETURN res
END FromUnicode;
See also http://oberoncore.ru/bbcc/subs/unicode


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Report illegal charcters
СообщениеДобавлено: Понедельник, 04 Ноябрь, 2013 19:16 

Зарегистрирован: Суббота, 24 Август, 2013 08:57
Сообщения: 81
The solution of this problem here is the missing link in the topic "National.odc for BB 1.6".
You find the result in the topic "Using BB 1.6 for shkola (with code page)".


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB