OberonCore https://forum.oberoncore.ru/ |
|
#003 ... -> IsAlpha IsUpper IsLower ... ? https://forum.oberoncore.ru/viewtopic.php?f=134&t=5699 |
Страница 1 из 1 |
Автор: | Иван Денисов [ Вторник, 10 Май, 2016 00:00 ] |
Заголовок сообщения: | #003 ... -> IsAlpha IsUpper IsLower ... ? |
Синхронизировал Freenix сборку с 1.7 для варианта Linux и Windows. Есть проблема пока с поиском аналогов функций IsAlpha IsUpper IsLower и т.п. поэтому пока не поддерживаются кириллические идентификаторы как в 1.7. Но зато применены все правки каркаса! Также, может кто-то придумает как рисовать подчеркивание в Ports.DrawSpace. |
Автор: | Info21 [ Вторник, 10 Май, 2016 01:42 ] |
Заголовок сообщения: | Re: Synced with 1.7-beta1 |
Иван Денисов писал(а): Есть проблема пока с поиском аналогов функций IsAlpha IsUpper IsLower IsAlpha -- это то, что называют alphanumeric character?Об удобной минимальности базового набора таких функций задумчивость была? |
Автор: | Иван Денисов [ Вторник, 10 Май, 2016 04:45 ] |
Заголовок сообщения: | Re: Synced with 1.7-beta1 |
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. |
Автор: | Иван Денисов [ Вторник, 10 Май, 2016 04:58 ] |
Заголовок сообщения: | Re: Synced with 1.7-beta1 |
Нашел вот библиотеку wctype. http://linux.die.net/include/wctype.h Как думаете, хорошая идея её использовать? |
Автор: | Info21 [ Вторник, 10 Май, 2016 10:41 ] |
Заголовок сообщения: | Re: Synced with 1.7-beta1 |
Спасибо, понял. Альфа -- это просто буква, letter. |
Автор: | Info21 [ Вторник, 10 Май, 2016 10:46 ] |
Заголовок сообщения: | Re: Synced with 1.7-beta1 |
Иван Денисов писал(а): Нашел вот библиотеку wctype. Я бы не спешил.http://linux.die.net/include/wctype.h Как думаете, хорошая идея её использовать? Держать в поле зрения надо, и аккуратно вводить необходимые кусочки. Но целиком что-то кооптировать -- опасно. |
Автор: | Kemet [ Среда, 11 Май, 2016 20:23 ] |
Заголовок сообщения: | Re: Synced with 1.7-beta1 |
Это всё (достаточно легко ) можно сделать на КП - просто поиск по соответствующим таблицам. Как минимум, пример, можно посмотреть пакет unicode в Go. |
Автор: | Trurl [ Воскресенье, 31 Декабрь, 2017 11:41 ] |
Заголовок сообщения: | Re: Synced with 1.7-beta1 |
Иван Денисов писал(а): Вот такие у них назначения: Цитата: PROCEDURE Upper (ch: CHAR): CHAR Returns the upper case character corresponding to ch. А если в разных языках ch соответствуют разные прописные, какую из них надо выбрать? |
Автор: | Иван Денисов [ Понедельник, 01 Январь, 2018 11:44 ] |
Заголовок сообщения: | Re: Synced with 1.7-beta1 |
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; |
Автор: | Alexander Shiryaev [ Понедельник, 01 Январь, 2018 13:30 ] |
Заголовок сообщения: | Re: Synced with 1.7-beta1 |
https://github.com/BlackBoxCenter/blackbox/blob/master/System/Mod/Kernel.odc |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |