Как сделать текстовый процессор в Arduino (C / C ++), где текст идет символ за символом? - PullRequest
0 голосов
/ 05 апреля 2020

Я использую библиотеку Adafruit_ST7735 (с Adafruit_GFX) для отображения материала на моем TFT-дисплее 1,8. Когда я устанавливаю tft.setTextWrap (false); он переносит текст, но не заботится о словах. Например, это выглядит так:

Мне нравится играть в баскетбол
, и мне действительно нравится
e играть в вычислительные
r игры

И мне нужно сделать так, чтобы это выглядело так:

Мне нравится играть в баскетбол -
в этбол, и я действительно
люблю играть в компьютерные
матерные игры

Короткие слова, помещенные в следующую строку, но более длинные слова, разделенные на две строки, связанные с -, позволили бы мне отображать гораздо больше текста, чем помещать каждое слово в новую строку. Моя основная борьба с этим заключается в том, что символы появляются один за другим в SD-формате, например:

File myFile = SD.open(file_name);
if (myFile) {
  while (myFile.available() > myFile.size() - 300) {
    tft.write(myFile.read());
  }
  myFile.close();
} else {
  tft.print("Error opening file.");
}

Как бы я go написал о таком текстовом редакторе для входящих символов с такими короткими словами ( т. е. содержащие меньше или равные 5 символам) переносятся на следующую строку, а более длинные слова (т. е. содержащие более 5 символов) обрезаются с помощью - и одна часть находится на одной строке, а другая - на следующей строке (как и последняя) пример)

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Вы бы изменили

tft.write(myFile.read());

, чтобы прочитать в промежуточную строку, где вы делаете переносы.

Если памяти на вашем Arduino недостаточно для полного переноса слов libary

  • В зависимости от того, откуда идет текст, и если он всегда отображается в одних и тех же столбцах, вы можете сделать переносы вручную в текстовом файле (и заполнить строки пробелами) или
  • вы могли бы наполовину автоматически пометить все позиции заранее, где возможен перенос. Алгоритм просто удаляет эти маркеры в промежуточной строке или заменяет их новыми строками
  • существуют сокращенные библиотеки переносов, которые находят не все позиции переноса, но намного лучше, чем отсутствие переносов
0 голосов
/ 05 апреля 2020

Эта проблема называется переносом и она не тривиальна . Текстовые редакторы, такие как MS Word, также имеют эту функцию, см. https://practicaltypography.com/hyphenation.html

Существуют алгоритмы переноса слов (https://en.wikipedia.org/wiki/Hyphenation_algorithm), например Кнут-Лян алгоритм, Дональд Кнут написал знаменитый TeX (https://en.wikipedia.org/wiki/TeX)

Перенос слов в c#

Лучшее слово алгоритм обтекания?

В C есть библиотеки типа https://github.com/hunspell/hyphen, которые также очень сложны. Возможно, поищите в net слово для поиска «перенос», если найдете более простое решение. В общем, проблема сложная (обнаружение слогов, ...)

Я думаю, что самое простое решение - полностью пропустить переносы и использовать пробелы для разделения слов (в предложении между любыми словами есть пробелы ...)

...