Особенности работы брайлевских принтеров Index Braille — различия между версиями

Материал из LUWRAIN Wiki
Перейти к: навигация, поиск
(Особенности работы брайлевских принтеров Index Braille)
Строка 76: Строка 76:
 
общая схема была задумана такая:
 
общая схема была задумана такая:
  
# Берётся текстовый файл откуда-то, пропускается через субкоманду prepair.
+
# Берётся текстовый файл откуда-то, пропускается через субкоманду prepair. в простейшем случае она убирает все символы, не указанные в той самой таблице, далее назовём её таблицей bxt. по идее там может также быть более сложная автоматика, например, убирающая пробелы после запятых, ставящая цифровые знаки, замена современных вариаций тире дефисом и некоторые другие преобразования. на выходе имеем технически валидный текстовик в кодировке bxt.
  в простейшем случае она убирает все символы, не указанные в той самой
+
# Таблица bxt подключается к скринридеру NVDA как таблица ввода и вывода, вот почему она храница в синтаксисе, подобном liblouis. потом текстовик можно редактировать в любом редакторе, пользуясь вводом и выводом брайлевского дисплея. когда всё готово, можно вызвать команду linewrap, которая, получив на вход число символов в строке брайлевского листа, расставит в тексте переводы строк так, чтобы ни одна строка файла не превышала этой длины. она может либо делать тупой перенос по словам, либо ставить в словах переносы по теховскому алгоритму, для которого к моему большому удивлению нашлась библиотека даже для Go. если корректность текста не принципиальна, там нет сложных матэлементов, и его надо отпечатать срочно, то результат вызова prepair сразу можно скормить linewrap, на выходе будет технически готовый к печати документ.
  таблице, далее назовём её таблицей bxt.
+
# Последний этап состоит в конвертации файла bxt в brf или брайлевский юникод, которые можно потом отправить на современный принтер. для этого служит субкоманда conv.
  по идее там может также быть более сложная автоматика, например,
 
  убирающая пробелы после запятых, ставящая цифровые знаки, замена
 
  современных вариаций тире дефисом и некоторые другие преобразования.
 
  на выходе имеем технически валидный текстовик в кодировке bxt.
 
# Таблица bxt подключается к скринридеру NVDA как таблица ввода и
 
  вывода, вот почему она храница в синтаксисе, подобном liblouis.
 
  потом текстовик можно редактировать в любом редакторе, пользуясь
 
  вводом и выводом брайлевского дисплея.
 
  когда всё готово, можно вызвать команду linewrap, которая, получив на
 
  вход число символов в строке брайлевского листа, расставит в тексте
 
  переводы строк так, чтобы ни одна строка файла не превышала этой
 
  длины.
 
  она может либо делать тупой перенос по словам, либо ставить в словах
 
  переносы по теховскому алгоритму, для которого к моему большому
 
  удивлению нашлась библиотека даже для Go.
 
  если корректность текста не принципиальна, там нет сложных
 
  матэлементов, и его надо отпечатать срочно, то результат вызова
 
  prepair сразу можно скормить linewrap, на выходе будет технически
 
  готовый к печати документ.
 
# Последний этап состоит в конвертации файла bxt в brf или
 
  брайлевский юникод, которые можно потом отправить на современный
 
  принтер.
 
  для этого служит субкоманда conv.
 
  
  

Версия 02:01, 4 октября 2021

Особенности работы брайлевских принтеров Index Braille

Материал любезно предоставлен Ильёй Пащуком.


насколько известно, на западе эта машинерия работала в кодировке brf, которая основана на брайлевском ascii. так как 6-точечный брайль подразумевает 64 возможные комбинации, взяли 64 символа из ASCII и с каждым сопоставили какую-то комбинацию точек (пустая клетка - это пробел)

сопоставляли по принципу того, чтобы это имело смысл для зрячего читателя. то есть, например, точка 1 - это заглавная буква A, 12 - B, 25 - цифра 3. ну и менее очевидные сопоставления для не так часто используемых комбинаций. таким образом получили кодировку, в которой одновременно можно представить любой брайлевский текст, но этот текст остаётся читаемым для зрячего специалиста.

полную таблицу можно найти на тифлокомпе. в некоторых реализациях строчные латинские буквы считаются тождественными заглавным. текст в этой кодировке поступает на принтер, в ней же работает брайлевский дисплей.

но, учитывая, что, например, знаку ! соответствуют там точки 2346, буквы доступны только латинские, понятно, что для русского языка кодировка эта не очень удобна. поэтому у нас ещё довольно давно в организации Логосвос сделали свою таблицу. мне удалось выяснить примерные сопоставления путём загрузки тестовых файлов в систему, таблица доступна по адресу https://download.luwrain.org/contrib/bxt-table.ctb, но может иметь мелкие нестыковки с исходником.

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

но если есть несколько символов, то они взаимозаменяемы. например, все символы процента можно заменить знаками градуса, и это не повлияет на отпечатку (признаки алфавитов и вспомогательные части составных символов должны быть проставлены явно). таким образом один символ текстового файла всегда соответствует одному знакоместу на брайлевском листе. таблица составлена так, что покрываются все 64 возможные комбинации. таким образом установлена связь между обычным электронным текстом, читаемым зрячим специалистом, и точным брайлевским представлением.

эту таблицу вшили в принтеры и дисплеи путём какого-то подобия перепрошивки. на досовских машинах эти файлы редактируются с применением кодировки cp866, а потом в таком виде и направляются через какой-то последовательный порт на принтер. так как на тех дисплеях нет клавиотуры, на досах стоит драйвер, который позволяет использовать кнопки sdf jkl так, как используются кнопки ввода на современных дисплеях.

Возникла идея реализовать такой же рабочий процесс на современном оборудовании, с современными дисплеем и принтером. результатом этого стало следующее полудоделанное произведение: https://github.com/ilyapashuk/brbox

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

общая схема была задумана такая:

  1. Берётся текстовый файл откуда-то, пропускается через субкоманду prepair. в простейшем случае она убирает все символы, не указанные в той самой таблице, далее назовём её таблицей bxt. по идее там может также быть более сложная автоматика, например, убирающая пробелы после запятых, ставящая цифровые знаки, замена современных вариаций тире дефисом и некоторые другие преобразования. на выходе имеем технически валидный текстовик в кодировке bxt.
  2. Таблица bxt подключается к скринридеру NVDA как таблица ввода и вывода, вот почему она храница в синтаксисе, подобном liblouis. потом текстовик можно редактировать в любом редакторе, пользуясь вводом и выводом брайлевского дисплея. когда всё готово, можно вызвать команду linewrap, которая, получив на вход число символов в строке брайлевского листа, расставит в тексте переводы строк так, чтобы ни одна строка файла не превышала этой длины. она может либо делать тупой перенос по словам, либо ставить в словах переносы по теховскому алгоритму, для которого к моему большому удивлению нашлась библиотека даже для Go. если корректность текста не принципиальна, там нет сложных матэлементов, и его надо отпечатать срочно, то результат вызова prepair сразу можно скормить linewrap, на выходе будет технически готовый к печати документ.
  3. Последний этап состоит в конвертации файла bxt в brf или брайлевский юникод, которые можно потом отправить на современный принтер. для этого служит субкоманда conv.


как мне удалось выяснить, кроме этой логосовской таблицы есть ещё как минимум две: одна - это какой-то ГОСТ, а другая разработана петербуржским издательством "Чтение", которое как раз отпечатывает для всей страны кимы ЕГЭ. в поддержке ещё летом обещали скинуть все 3 таблицы, как руки дойдут, но что-то всё никак они не доходят. надеюсь, причина действительно в этом, а не в сознательном отказе предоставлять таблицы, о котором они не хотят заявлять прямо. когда будет доступ к исходникам таблиц, к той поделке ещё прикручу команду tconv для конверта между разными таблицами, которая будет работать так, что алфавитная принадлежность символов и их регистр при конверте не будут утрачиваться, чем будет страдать команда conv, если её юзать подобным образом, потому что в процессе преобразования содержимое представляется, как последовательность брайлевских ячеек без метаданных.

на самом деле, это самописное нечто в prepair появилось потому, что тогда я ещё не знал, как louis прикрутить к Go. Сейчас уже разобрался, как это можно проделать, и, вероятно, прикручу к brbox в качестве второго варианто обработки, ну и вообще доведу эту поделку до состояния, при котором её можно будет назвать используемой, чтобы с чистой совестью взяться за более сложную систему.