OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: #003 ... -> IsAlpha IsUpper IsLower ... ?
СообщениеДобавлено: Вторник, 10 Май, 2016 00:00 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Синхронизировал Freenix сборку с 1.7 для варианта Linux и Windows.

Есть проблема пока с поиском аналогов функций IsAlpha IsUpper IsLower и т.п. поэтому пока не поддерживаются кириллические идентификаторы как в 1.7.
Но зато применены все правки каркаса!

Также, может кто-то придумает как рисовать подчеркивание в Ports.DrawSpace.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Synced with 1.7-beta1
СообщениеДобавлено: Вторник, 10 Май, 2016 01:42 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Иван Денисов писал(а):
Есть проблема пока с поиском аналогов функций IsAlpha IsUpper IsLower
IsAlpha -- это то, что называют alphanumeric character?

Об удобной минимальности базового набора таких функций задумчивость была?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Synced with 1.7-beta1
СообщениеДобавлено: Вторник, 10 Май, 2016 04:45 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Info21 писал(а):
Иван Денисов писал(а):
Есть проблема пока с поиском аналогов функций IsAlpha IsUpper IsLower
IsAlpha -- это то, что называют alphanumeric character?

Об удобной минимальности базового набора таких функций задумчивость была?


Вот так сейчас они реализованы на Windows.

Код:
PROCEDURE IsAlpha* (ch: CHAR): BOOLEAN;
      VAR type: SHORTINT; res: INTEGER;
   BEGIN
      (* note that WinApi.IsCharAlphaW returns FALSE for all Hiragana and Katakana syllables and is slower *)
      res := WinApi.GetStringTypeW(WinApi.CT_CTYPE1, S.VAL(WinApi.PtrWSTR, S.ADR(ch)), 1, type);
      RETURN BITS(WinApi.C1_ALPHA) * BITS(type) # {}
   END IsAlpha;

   PROCEDURE Upper* (ch: CHAR): CHAR;
   BEGIN
      IF ("a" <= ch) & (ch <= "z") THEN RETURN CAP(ch) (* common case optimized *)
      ELSIF ch > 7FX THEN RETURN S.VAL(CHAR, WinApi.CharUpperW( S.VAL(WinApi.PtrWSTR, ch )))
      ELSE RETURN ch
      END
   END Upper;

   PROCEDURE IsUpper* (ch: CHAR): BOOLEAN;
   BEGIN
      IF ("A" <= ch) & (ch <= "Z") THEN RETURN TRUE
      ELSIF ch > 7FX THEN RETURN WinApi.IsCharUpperW(ch) # 0
      ELSE RETURN FALSE
      END
   END IsUpper;

   PROCEDURE Lower* (ch: CHAR): CHAR;
   BEGIN
      IF ("A" <= ch) & (ch <= "Z") THEN RETURN CHR(ORD(ch) + 32)
      ELSIF ch > 7FX THEN RETURN S.VAL(CHAR, WinApi.CharLowerW(S.VAL(WinApi.PtrWSTR, ch)))
      ELSE RETURN ch
      END
   END Lower;

   PROCEDURE IsLower* (ch: CHAR): BOOLEAN;
   BEGIN
      IF ("a" <= ch) & (ch <= "z") THEN RETURN TRUE
      ELSIF ch > 7FX THEN RETURN WinApi.IsCharLowerW(ch) # 0
      ELSE RETURN FALSE
      END
   END IsLower;


Вот такие у них назначения:
Цитата:
PROCEDURE IsAlpha (ch: CHAR): BOOLEAN
Checks if ch is an alphabetical character, rather than a digit or symbol.

PROCEDURE Upper (ch: CHAR): CHAR
Returns the upper case character corresponding to ch.

PROCEDURE IsUpper (ch: CHAR): BOOLEAN
Checks if ch is an upper case alphabetical character.

PROCEDURE Lower (ch: CHAR): CHAR
Returns the lower case character corresponding to ch.

PROCEDURE IsLower (ch: CHAR): BOOLEAN
Checks if ch is a lower case alphabetical character.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Synced with 1.7-beta1
СообщениеДобавлено: Вторник, 10 Май, 2016 04:58 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Нашел вот библиотеку wctype.
http://linux.die.net/include/wctype.h

Как думаете, хорошая идея её использовать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Synced with 1.7-beta1
СообщениеДобавлено: Вторник, 10 Май, 2016 10:41 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Спасибо, понял. Альфа -- это просто буква, letter.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Synced with 1.7-beta1
СообщениеДобавлено: Вторник, 10 Май, 2016 10:46 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Иван Денисов писал(а):
Нашел вот библиотеку wctype.
http://linux.die.net/include/wctype.h

Как думаете, хорошая идея её использовать?
Я бы не спешил.

Держать в поле зрения надо, и аккуратно вводить необходимые кусочки.

Но целиком что-то кооптировать -- опасно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Synced with 1.7-beta1
СообщениеДобавлено: Среда, 11 Май, 2016 20:23 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
Это всё (достаточно легко ) можно сделать на КП - просто поиск по соответствующим таблицам. Как минимум, пример, можно посмотреть пакет unicode в Go.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Synced with 1.7-beta1
СообщениеДобавлено: Воскресенье, 31 Декабрь, 2017 11:41 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Иван Денисов писал(а):
Вот такие у них назначения:
Цитата:
PROCEDURE Upper (ch: CHAR): CHAR
Returns the upper case character corresponding to ch.

А если в разных языках ch соответствуют разные прописные, какую из них надо выбрать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Synced with 1.7-beta1
СообщениеДобавлено: Понедельник, 01 Январь, 2018 11:44 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Trurl писал(а):
Иван Денисов писал(а):
Вот такие у них назначения:
Цитата:
PROCEDURE Upper (ch: CHAR): CHAR
Returns the upper case character corresponding to ch.

А если в разных языках ch соответствуют разные прописные, какую из них надо выбрать?


Вот Александр сделал реализацию через стандартную библиотеку. Я не знаю какой там алгоритм внутри, но для Кириллицы всё корректно работает.

Код:
   PROCEDURE Upper* (ch: CHAR): CHAR;
   BEGIN
      IF ("a" <= ch) & (ch <= "z") THEN RETURN CAP(ch) (* common case optimized *)
      ELSIF ch > 7FX THEN RETURN CHR(LibW.towupper(ORD(ch)))
      ELSE RETURN ch
      END
   END Upper;

   PROCEDURE Lower* (ch: CHAR): CHAR;
   BEGIN
      IF ("A" <= ch) & (ch <= "Z") THEN RETURN CHR(ORD(ch) + 32)
      ELSIF ch > 7FX THEN RETURN CHR(LibW.towlower(ORD(ch)))
      ELSE RETURN ch
      END
   END Lower;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Synced with 1.7-beta1
СообщениеДобавлено: Понедельник, 01 Январь, 2018 13:30 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 473
Откуда: KZ
https://github.com/BlackBoxCenter/blackbox/blob/master/System/Mod/Kernel.odc


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

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


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

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


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

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