Функции отображения юникод-символов

Issue #135 closed
Oleg Sychev repo owner created an issue

Originally reported on Google Code with ID 135

Нужно провести анализ юникод-символов, и разработать функции выдачи символа в человеко-читаемом
виде по коду и по символу.

Чтобы плохо видные символы (пробелы и т.д.) заменялись словесным описанием.

Reported by oasychev on 2012-07-31 14:03:15

Comments (11)

  1. Former user Account Deleted

    ``` разработаны функции: qtype_preg_description_leaf_charset::describe_nonprinting - возвращает описание символа только если оно требуется, иначе возвращается null; qtype_preg_description_leaf_charset::describe_chr - возвращает описание символа если оно требуется, иначе возвращается сам символ;

    результат описания [\x00-\xff]: one of the following characters: character with code 0x0, character with code 0x1, character with code 0x2, character with code 0x3, character with code 0x4, character with code 0x5, character with code 0x6, character with code 0x7, character with code 0x8, tabulation, newline(LF), character with code 0xB, character with code 0xC, carriage return character, character with code 0xE, character with code 0xF, character with code 0x10, character with code 0x11, character with code 0x12, character with code 0x13, character with code 0x14, character with code 0x15, character with code 0x16, character with code 0x17, character with code 0x18, character with code 0x19, character with code 0x1A, character with code 0x1B, character with code 0x1C, character with code 0x1D, character with code 0x1E, character with code 0x1F, space, !, ", #, $, %, &, ', (, ), *, +, -, ., /, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, :, ;, <, =, >, ?, @, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, [, \, ], ^, _, `, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, {, |, }, , character with code 0x7F, character with code 0x80, character with code 0x81, character with code 0x82, character with code 0x83, character with code 0x84, character with code 0x85, character with code 0x86, character with code 0x87, character with code 0x88, character with code 0x89, character with code 0x8A, character with code 0x8B, character with code 0x8C, character with code 0x8D, character with code 0x8E, character with code 0x8F, character with code 0x90, character with code 0x91, character with code 0x92, character with code 0x93, character with code 0x94, character with code 0x95, character with code 0x96, character with code 0x97, character with code 0x98, character with code 0x99, character with code 0x9A, character with code 0x9B, character with code 0x9C, character with code 0x9D, character with code 0x9E, character with code 0x9F, non-breaking space, ¡, ¢, £, ¤, ¥, ¦, §, ¨, ©, ª, «, ¬, soft hyphen character, ®, ¯, °, ±, ², ³, ´, µ, ¶, ·, ¸, ¹, º, », ¼, ½, ¾, ¿, À, Á, Â, Ã, Ä, Å, Æ, Ç, È, É, Ê, Ë, Ì, Í, Î, Ï, Ð, Ñ, Ò, Ó, Ô, Õ, Ö, ×, Ø, Ù, Ú, Û, Ü, Ý, Þ, ß, à, á, â, ã, ä, å, æ, ç, è, é, ê, ë, ì, í, î, ï, ð, ñ, ò, ó, ô, õ, ö, ÷, ø, ù, ú, û, ü, ý, þ, ÿ; ```

    Reported by `TOPT.iiiii` on 2012-08-09 14:55:31 - Status changed: `Fixed`

  2. Oleg Sychev reporter

    ``` Вообще для многих непечатаемых кодов ASCII до пробела есть названия, у вас их меньше

    Кроме того, существует форма с фигурными скобками, позволяющая записать более 2-х цифр для \x. Так что надо взять юникод-таблицы и выписать оттуда названия всех неотображаемых символов по идее. А отображаемые пусть будут как есть...

    Валерий, ваше мнение об этой функции? ```

    Reported by `oasychev` on 2012-08-09 16:40:07

  3. Former user Account Deleted

    ``` поправил.

    первые 32 символа ascii описываются:

    one of the following characters: null character(NUL), start of header character (SOH), start of text character(STX), end of text character(ETX), end of transmission character(EOT), enquiry character(ENQ), acknowledgment character(ACK), bell character(BEL), backspace character(BS), tabulation(HT), line feed(LF), vertical tabulation(VT), form feed(FF), carriage return character(CR), shift out character (SO), shift in character (SI), data link escape character (DLE), device control 1 (oft. XON) character (DC1), device control 2 character (DC2), device control 3 (oft. XOFF) character (DC3), device control 4 character (DC4), negative acknowledgement character (NAK), synchronous idle character (SYN), end of transmission block character (ETB), cancel character (CAN), end of medium character (EM), substitute character (SUB), escape(ESC), file separator character (FS), group separator character (GS), record separator character (RS), unit separator character (US), space, !, ", #, $, %, &, ', (, ), *, +, -, ., /, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, :, ;, <, =, >, ?, @, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, [, \, ], ^, _, `, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, {, |, }, , delete character (DEL), character with code 0x80, character with code 0x81, character with code 0x82, character with code 0x83, character with code 0x84, character with code 0x85, character with code 0x86, character with code 0x87, character with code 0x88, character with code 0x89, character with code 0x8A, character with code 0x8B, character with code 0x8C, character with code 0x8D, character with code 0x8E, character with code 0x8F, character with code 0x90, character with code 0x91, character with code 0x92, character with code 0x93, character with code 0x94, character with code 0x95, character with code 0x96, character with code 0x97, character with code 0x98, character with code 0x99, character with code 0x9A, character with code 0x9B, character with code 0x9C, character with code 0x9D, character with code 0x9E, character with code 0x9F, non-breaking space, ¡, ¢, £, ¤, ¥, ¦, §, ¨, ©, ª, «, ¬, soft hyphen character, ®, ¯, °, ±, ², ³, ´, µ, ¶, ·, ¸, ¹, º, », ¼, ½, ¾, ¿, À, Á, Â, Ã, Ä, Å, Æ, Ç, È, É, Ê, Ë, Ì, Í, Î, Ï, Ð, Ñ, Ò, Ó, Ô, Õ, Ö, ×, Ø, Ù, Ú, Û, Ü, Ý, Þ, ß, à, á, â, ã, ä, å, æ, ç, è, é, ê, ë, ì, í, î, ï, ð, ñ, ò, ó, ô, õ, ö, ÷, ø, ù, ú, û, ü, ý, þ, ÿ;

    результат описания [\x{ff}-\x{1ff}]:

    one of the following characters: ÿ, Ā, ā, Ă, ă, Ą, ą, Ć, ć, Ĉ, ĉ, Ċ, ċ, Č, č, Ď, ď, Đ, đ, Ē, ē, Ĕ, ĕ, Ė, ė, Ę, ę, Ě, ě, Ĝ, ĝ, Ğ, ğ, Ġ, ġ, Ģ, ģ, Ĥ, ĥ, Ħ, ħ, Ĩ, ĩ, Ī, ī, Ĭ, ĭ, Į, į, İ, ı, IJ, ij, Ĵ, ĵ, Ķ, ķ, ĸ, Ĺ, ĺ, Ļ, ļ, Ľ, ľ, Ŀ, ŀ, Ł, ł, Ń, ń, Ņ, ņ, Ň, ň, ʼn, Ŋ, ŋ, Ō, ō, Ŏ, ŏ, Ő, ő, Œ, œ, Ŕ, ŕ, Ŗ, ŗ, Ř, ř, Ś, ś, Ŝ, ŝ, Ş, ş, Š, š, Ţ, ţ, Ť, ť, Ŧ, ŧ, Ũ, ũ, Ū, ū, Ŭ, ŭ, Ů, ů, Ű, ű, Ų, ų, Ŵ, ŵ, Ŷ, ŷ, Ÿ, Ź, ź, Ż, ż, Ž, ž, ſ, ƀ, Ɓ, Ƃ, ƃ, Ƅ, ƅ, Ɔ, Ƈ, ƈ, Ɖ, Ɗ, Ƌ, ƌ, ƍ, Ǝ, Ə, Ɛ, Ƒ, ƒ, Ɠ, Ɣ, ƕ, Ɩ, Ɨ, Ƙ, ƙ, ƚ, ƛ, Ɯ, Ɲ, ƞ, Ɵ, Ơ, ơ, Ƣ, ƣ, Ƥ, ƥ, Ʀ, Ƨ, ƨ, Ʃ, ƪ, ƫ, Ƭ, ƭ, Ʈ, Ư, ư, Ʊ, Ʋ, Ƴ, ƴ, Ƶ, ƶ, Ʒ, Ƹ, ƹ, ƺ, ƻ, Ƽ, ƽ, ƾ, ƿ, ǀ, ǁ, ǂ, ǃ, DŽ, Dž, dž, LJ, Lj, lj, NJ, Nj, nj, Ǎ, ǎ, Ǐ, ǐ, Ǒ, ǒ, Ǔ, ǔ, Ǖ, ǖ, Ǘ, ǘ, Ǚ, ǚ, Ǜ, ǜ, ǝ, Ǟ, ǟ, Ǡ, ǡ, Ǣ, ǣ, Ǥ, ǥ, Ǧ, ǧ, Ǩ, ǩ, Ǫ, ǫ, Ǭ, ǭ, Ǯ, ǯ, ǰ, DZ, Dz, dz, Ǵ, ǵ, Ƕ, Ƿ, Ǹ, ǹ, Ǻ, ǻ, Ǽ, ǽ, Ǿ, ǿ; ```

    Reported by `TOPT.iiiii` on 2012-08-09 19:35:22

  4. Oleg Sychev reporter

    ``` А разве при нынешнем состоянии userinscription диапазоны сложно вывести как "any character from ÿ to ǿ"?

    Может быть так следует поступать с диапазоном, если число символов в нем больше некоторого числа (задать константой или настройкой, 5-10 символов?), а если символов мало то перечнем выводить... ```

    Reported by `oasychev` on 2012-08-11 15:47:28

  5. Former user Account Deleted

    ``` Тут вопрос в том к чему стремиться. Если стремиться объяснить что по факту содержит в себе чарсет, проблем минимум: проанализировать набор символов чарсета, найти в нем диапазоны и если число элементов диапазона больше N вывести в виде 'from ÿ to ǿ'.

    Но пользователь может ввести [ÿ-ƎƏ-ǿ], а программа выведет 'from ÿ to ǿ'. Тогда, если стремиться к объяснению конкретно того что ввел пользователь, придется анализировать userinscription. Придется заново разбирать диапазоны, какие-то конструкции мы можем пропустить, или разобрать неправильно (разберем если надо но всеже..). В данном случае помог бы не новый userinscription а массив ranges, который присуствует в чарсете но не заполняется. ```

    Reported by `TOPT.iiiii` on 2012-08-11 20:13:19 - Status changed: `InProgress`

  6. Former user Account Deleted

    ``` По моему мнению лучше реализовать первый вариант, так как он конкретней объяснит содержание чарсета и проблем доставит намного меньше. ```

    Reported by `TOPT.iiiii` on 2012-08-11 20:27:40

  7. Oleg Sychev reporter

    ``` userinscription по идее это как раз так, как ввел пользователь...

    Вообще лучший вариант - сделать настройки, так чтобы можно было и так и по-другому. ```

    Reported by `oasychev` on 2012-08-13 12:42:04

  8. Former user Account Deleted

    ``` Диапазоны описываются, при помощи обхода флагов. '[ÿ-ƎƏ-ǿ]' описывается 'any character form ÿ to ǿ'

    userinscription анализировать не стал пока по следующей причине: содержание userinscription для '[\xff\x00-\x1fA-B\t\n]':

    ["userinscription"]=> array(3) { [0]=> string(14) "\xff\x00-
    t\n" [1]=> string(3) "-" [2]=> string(3) "A-B" } ```

    Reported by `TOPT.iiiii` on 2012-08-18 15:29:28 - Status changed: `Fixed`

  9. Valeriy Streltsov

    ``` Когда было последнее обновление из моего репозитория? Вот что у меня:

    ["userinscription"]=> array(3) { [0]=> object(qtype_preg_userinscription)#11762 (2) { ["data"]=> string(8) "\xff\t\n" ["addinfo"]=> NULL } [1]=> object(qtype_preg_userinscription)#11723 (2) { ["data"]=> string(9) "\x00-\x1f" ["addinfo"]=> NULL } [2]=> object(qtype_preg_userinscription)#11749 (2) { ["data"]=> string(3) "A-B" ["addinfo"]=> NULL } } ["id"]=> int(-1)

    ```

    Reported by `vostreltsov` on 2012-08-26 08:29:01

  10. Log in to comment