Многострочный редактор описаний

Хотите предложить идею нового плагина или знаете, что улучшить в существующем? Пишите сюда.
User avatar
[e]Bu$ter
Posts: 792
Joined: Mon 30 May, 2005 23:05
Location: Беларусь, Минск
Contact:

Post by [e]Bu$ter »

Latest post of the previous page:

Вообще, это было написано для того чтоб показать что не нужно корячиться с изменением фармата Descipt.ion. И заодно для наглядности. Т.к. со слов, по ходу, тем кто ввязася в эту бессмысленную полимику сложно было понять что имелось ввиду.
Victorian
Posts: 80
Joined: Sun 11 Oct, 2009 05:55
Has thanked: 1 time

Многострочный редактор описаний

Post by Victorian »

Прошу прощение, что продолжаю эту тему через несколько лет.

Интересно было бы записывать многострочный текст в описание к файлу, чтобы он хранился в "descript.ion" в виде символов в одну строку, но при этом можно было бы затем извлечь из строки панели "Describe File" простым копи-пастом: Ctrl+A Ctrl+C и вставкой в какой-либо программе.

Тут интересное описание формата файла "Descript.ion": http://jpsoft.com/ascii/descfile.txt


Таким образом, когда в однострочное поле панели "Describe File" помещается, к примеру, стихотворение, то первая строка должна быть отделена символом с кодом 0x04, а затем по каким-то правилам окончание каждой последующей строки должно быть отделено каким-либо разделителем, который не терминирует строку в файле "Descript.ion", но позволяет восстановить символы <CR><LF> для получения того же вида описания, что был помещён при копи-пасте.

Например, мне видится такой формат:

Code: Select all

 filename.ext Description string 1<ID>multiline(PARSER)string 2 PARSERstring 3 PARSER ... PARSERlast string <CR><LF>
Программа может сгенерировать любой случайный идентификатор PARSER, который не встречался бы во вставляемой строке. Начать можно с какого-либо случайного безобидного малоупотребимого символа, например "@", и если он используется во вставляемом тексте, затем добавлять к нему любой случайный печатный символ, например "@z".
Таким образом, извлекая содержимое строки "Descript.ion" описания к файлу, все вхождения "@z" должны программой "FAR Manager" заменяться на <CR><LF>, т.е. байты 0x0A 0x0D. Что-то подобное есть в языке C в виде реализации скрытых строковых литералов.
FAR Manager вместо замены <CR><LF> на пробелы мог бы сохранить исходное содержимое буфера обмена при вставке описания в поле "Describe File" с последующей возможностью извлечения в неискажённом виде.

Было бы замечательно реализовать это в FAR Manager.

P.S. Зачем это мне нужно?
Есть программа, для которой нормальное явление записать многострочное описание. Однако, желательно пользоваться одинаковыми принципами извлечения текста описания, для совместимости.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

Многострочный редактор описаний

Post by HaRT »

Victorian wrote: Есть программа, для которой нормальное явление записать многострочное описание
Что за программа? Пишет ли она ровно в предлагаемом формате? Какими ещё программами поддерживается этот же формат?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Многострочный редактор описаний

Post by NightRoman »

В тему или нет, кому-то, может, будет полезно. В PowerShellFar есть скрипт Edit-FarDescription-.ps1, который позволяет редактировать описания в редакторе, многострочно. Сохраняет это в обычном формате, заменяя переводы строк на " _ ". При открытии в редакторе заменяет обратно, естественно. Так я довольно большие тексты помещаю в описания. Нередко бывает удобно. Все это совместимо с родным фаровским однострочным редактором описаний, только там будут вставки " _ ", само собой.
Victorian
Posts: 80
Joined: Sun 11 Oct, 2009 05:55
Has thanked: 1 time

Многострочный редактор описаний

Post by Victorian »

HaRT wrote:
Victorian wrote: Есть программа, для которой нормальное явление записать многострочное описание
Что за программа? Пишет ли она ровно в предлагаемом формате? Какими ещё программами поддерживается этот же формат?
Программа XnViewMP, сейчас разработчик затребовал формат файла "Descript.ion", созданный в "FAR Manager", и как раз и таких же соображений - если это уже сделано в FAR, то он просто будет использовать совместимый формат записи описания.

Проблема возникла в том, что многострочное описание может записываться одновременно в тег в файле картинки (например, стихотворение), и в файл "Descript.ion". При этом сейчас многострочный текст записывается в "Descript.ion" неверно - туда попадают <CR><LF>, из-за чего только первая строка относится к комментируемому файлу, а вторая и последующие оказываются просто мусором в "Descriopt.ion".
Кстати, в новой версии эта программа стала поддерживать "Descript.ion" в формате UTF-8.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

Многострочный редактор описаний

Post by HaRT »

Victorian wrote: разработчик затребовал формат файла "Descript.ion", созданный в "FAR Manager"
Почитайте, пжлст, вот эти сообщения, чтобы лучше понимать про формат, в т.ч. кодировку текста.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Victorian
Posts: 80
Joined: Sun 11 Oct, 2009 05:55
Has thanked: 1 time

Многострочный редактор описаний

Post by Victorian »

Мне говорят, что многострочные описания хранит Total Commander, он разделяет строки с помощью "\n" - просто, понятно, и удобочитаемо.
Просто в XnView появилась необходимость хранить многострочные описания, ибо они должны быть синхронизированы с тегами.

В вот NTFS потоки как хранят многострочные описания?
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Многострочный редактор описаний

Post by Smitis »

Можно договорится использовать для разделения строк какой-нибудь управляющий символ, отличный от \n \r \t \0
Разум когда-нибудь победит.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

Многострочный редактор описаний

Post by HaRT »

Достаточно немного допилить DialogTools: Edit, чтобы: 1. настраивался символ, которым заменяются концы строк при переносе текста из редактора в поле ввода; 2. этот же символ заменялся на перевод строки при переносе поля ввода в редактор. И тогда со стороны самого Фара никакая новая поддержка не потребуется.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Victorian
Posts: 80
Joined: Sun 11 Oct, 2009 05:55
Has thanked: 1 time

Многострочный редактор описаний

Post by Victorian »

Думаю, не надо ничего изобретать нового, а просто следует присоединиться к существующему программному обеспечению...

Поставил программу Total Commander 8.52a http://wincmd.ru/en/releases/tcmd852ax64.exe, и создал многострочное описание.
Оно сделано очень просто: в описании используются символы \n, а если в строке использую этот символ, то он будет записан как "\\n".
Чтобы это описание воспринималось программой, надо в конце строки с описанием добавить идентификатор 0x04 0xC2.

Пример файла можно создать самому, но я уже создал его и разместил по ссылке: https://dl.dropboxusercontent.com/u/703 ... script.ion
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Многострочный редактор описаний

Post by Smitis »

Victorian wrote:Думаю, не надо ничего изобретать нового
Всё равно каждый свой формат изобретает. Использовать символ 0x04, раз он так всем нравится, как разделитель и не мучиться
Разум когда-нибудь победит.
Victorian
Posts: 80
Joined: Sun 11 Oct, 2009 05:55
Has thanked: 1 time

Многострочный редактор описаний

Post by Victorian »

Smitis wrote:Использовать символ 0x04, раз он так всем нравится, как разделитель и не мучиться
Это не разделитель символов в описании, а спецкод, по которому определяется начало поля дополнительных данных и завершается само текстовое описание. Я так понимаю, таких полей может быть несколько, относящихся к одному файлу. Правила использования таких полей записи претендуют на универсальность, и их несоблюдение приведёт к полной несовместимости Descript.ion различных программ.

В данном случае, за 0x04 следует конкретный байт 0xC2, который идентифицирует правила использования программой Total Commander данных в строке описания, и других данных за этими байтом не требуется. В самой строке описания, расположенной до этого, символ "\" заменяется на "\\", а <CR><LF> на "\n", то есть так, как это принято в языке Си для строки. Если убрать из строки в Descript.ion байты 0x04 0xC2, то Total Commander будет показывать многострочное описание в одну строку, пестрящую символами "\n", и другими, наподобие "\\".

Никто не мешает принять эти правила и другими программами, чтобы сделать описания переносимыми с одного компьютера пользователя на другой компьютер другого пользователя, без потери возможности читать информацию в том же виде. Разумеется, разные пользователи имеют разные предпочтения, и например, если я сам пользуюсь FAR, то мой друг описания делает в Total Commander. К тому же ожидаю использование существующего в Total Commander способа в программе XnView, где вполне уместно появление многострочных описаний в Descript.ion.
Victorian
Posts: 80
Joined: Sun 11 Oct, 2009 05:55
Has thanked: 1 time

Многострочный редактор описаний

Post by Victorian »

В любом случае, создатели Total Commander выбрали лучший способ, так как строка с символами "\n" понятна практически всем пользователям, знакомым с языком программирования Си. Она хорошо смотрится, даже если программа не поддерживает многострочную обработку Descript.ion. Это лучше, чем заменять многострочные разделители пробелами или знаками "_".

Совсем недопустимо коды CR и LF (0x0D и 0x0A) помещать в строку описания, так как в результате начало следующей строки будет записано в Descript.ion, и являться идентификатором какого-то файла на диске, за которым часть этой строки будет считаться относящимся к этому файлу. Таким образом, вполне случайно может быть создано фальшивое описание к реально существующему файлу. Его собственное описание при перемещении файла в этом случае может быть уничтожено.

Но сама замена непечатных символов CR и LF на пробелы уже является их обработкой, что вынуждено происходит в FAR. Надо бы просто эту замену производить недеструктивно, с возможностью восстановления исходного многострочного описания при его чтении, а также иметь возможность в том же виде получать и в других программах, хранящих описания в файле Descript.ion.
Victorian
Posts: 80
Joined: Sun 11 Oct, 2009 05:55
Has thanked: 1 time

Многострочный редактор описаний

Post by Victorian »

HaRT wrote: Достаточно немного допилить DialogTools: Edit
Этот плагин должен обрабатывать строку только в том случае, если обнаруживает байты 0x04 0xC2, завершающие описание. Все остальные байты, начиная с 0x04, должны игнорироваться (декодироваться не как строка описания, а как дополнительные данные). Если этих байт нет, то содержащиеся в описании символы \n не должны быть конвертированы в 0x0A 0x0D.

Настраивать символ замены не нужно, так как уже есть общепринятая программа, работающая именно так, и в исходной многострочной строке символы "\n" сохраняются, так как в файле Descript.ion они заменяются на "\\n", то есть удваивается символ "\" при сохранении. Неоднозначности при декодировании тут нет.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

Многострочный редактор описаний

Post by HaRT »

Victorian, я не согласен с Вашей трактовкой, но спорить не имею ни малейшего интереса.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Victorian
Posts: 80
Joined: Sun 11 Oct, 2009 05:55
Has thanked: 1 time

Многострочный редактор описаний

Post by Victorian »

HaRT wrote: Victorian, я не согласен с Вашей трактовкой, но спорить не имею ни малейшего интереса.
Спорить действительно не хочу, но мне любопытно, что тут вызывает несогласие?
Post Reply

Return to “Предложения и идеи”