Информация об изменениях

Сообщение Re[6]: Как написать редактор текстов на C#? от 01.11.2022 19:17

Изменено 01.11.2022 19:36 Эйнсток Файр

Re[6]: Как написать редактор текстов на C#?
S> Что такое "внутренняя кодировка"?

Ответы на часть Ваших вопросов есть выше
Автор: Эйнсток Файр
Дата: 01.11.22
, я процитирую:

посчитать, сколько каких Grapheme Cluster-ов в файле в штуках
и перекодировать всё во внутреннюю кодировку с одинаковой битностью, с которой потом и работать.

А для того, чтобы не писать отдельный код для 8, 16, 32 битов на символ — использовать классы-шаблоны и типизировать их типами-структурами такого размера.


Это значит, что будет массив из пар, например, строк и байтов (или дерево с хештаблицами, чтобы в строках искать быстрее, пока неважно)
Строка будет содержать в себе встреченный Grapheme Cluster, байт будет содержать порядковый номер (т.е. внутренний код).

В тот момент, когда количество символов станет превышать 256 или 65536 (что вряд ли), будет происходить перекодирование всего текста (с копированием по памяти) во внутреннюю кодировку с удвоеннум числом битов, но по-прежнему одинаковым на все Grapheme Cluster-ы.
Поэтому неверно, что эта кодировка похожа на UTF-8. Моя будет оставаться фиксированной длины, а UTF-8 это кодировка переменной длины.

На те вопросы, на которые нет ответов, отвечаю:
1) я не собираюсь "разбирать" длинные Grapheme Cluster-ы (они же TextElement в .NET)
редактор не будет уметь их редактировать, только копипастить из буфера целиком (в буфер они будут попадать из браузера) или стирать насмерть.
2) про границы слов я пока не думал вообще, но такая информация скорее всего получается из CharUnicodeInfo
Если не получится, поищу на гитхабе библиотеку, которая реализует
"Unicode UAX #29 §4.1 default word boundary specification"
3) про размер памяти под текст тоже не думал и не буду, у меня на одной из машине 256GB RAM, буду хранить текстовый буфер в памяти на ней.
4) про шрифты я ещё ничего не знаю, буду читать позже. Мне достаточно повторить то, что делает Firefox (потому что я именно из него копирую).
Re[6]: Как написать редактор текстов на C#?
S> Что такое "внутренняя кодировка"?

Ответы на часть Ваших вопросов есть выше
Автор: Эйнсток Файр
Дата: 01.11.22
, я процитирую:

посчитать, сколько каких Grapheme Cluster-ов в файле в штуках
и перекодировать всё во внутреннюю кодировку с одинаковой битностью, с которой потом и работать.

А для того, чтобы не писать отдельный код для 8, 16, 32 битов на символ — использовать классы-шаблоны и типизировать их типами-структурами такого размера.


Это значит, что будет массив из пар, например, строк и байтов (или дерево с хештаблицами, чтобы в строках искать быстрее, пока неважно)
Строка будет содержать в себе встреченный Grapheme Cluster, байт будет содержать порядковый номер (т.е. внутренний код).

В тот момент, когда количество символов станет превышать 256 или 65536 (что вряд ли), будет происходить перекодирование всего текста (с копированием по памяти) во внутреннюю кодировку с удвоенным числом битов, но по-прежнему одинаковым на все Grapheme Cluster-ы.
Поэтому неверно, что эта кодировка похожа на UTF-8. Моя будет оставаться фиксированной длины, а UTF-8 это кодировка переменной длины.

На те вопросы, на которые нет ответов, отвечаю:
1) я не собираюсь "разбирать" длинные Grapheme Cluster-ы (они же TextElement в .NET)
редактор не будет уметь их редактировать, только копипастить из буфера целиком (в буфер они будут попадать из браузера) или стирать насмерть.
2) про границы слов я пока не думал вообще, но такая информация скорее всего получается из CharUnicodeInfo
Если не получится, поищу на гитхабе библиотеку, которая реализует
"Unicode UAX #29 §4.1 default word boundary specification"
3) про размер памяти под текст тоже не думал и не буду, у меня на одной из машине 256GB RAM, буду хранить текстовый буфер в памяти на ней.
4) про шрифты я ещё ничего не знаю, буду читать позже. Мне достаточно повторить то, что делает Firefox (потому что я именно из него копирую).