URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID4
Нить номер: 374
[ Назад ]

Исходное сообщение
"глубина тредов; format=flowed"

Отправлено nuclight , 25-Сен-10 18:08 
В топиках с сотнями сообщений (комменты к новостям) треды становятся часто настолько глубокие, что последние уровни все идут с одинаковым смещением от левого края, как бы линейно. Оно, конечно, сохраняет наследование, и можно переместиться к родительскому, но визуально это никак не видно. Решаема ли эта проблема?

Еще, заметил, что при редактировании ответов в цитатах строки обычно заканчиваются на пробелы. Скорее всего, это случайность, но она сразу напомнила о RFC2646/RFC3676 - параметр text/plain; format=flowed, который позволяет почтовым клиентам переформатировать абзацы цитат в духе <blockquote> (на http://joeclark.org/ffaq.html есть скриншоты). Подумалось, а что если это сделать хотя бы для присылаемыех на почту комментов? А то и на самом форуме, ведь нецитированные слова и сейчас занимают полную ширину и переформатируются в зависимости от размеров как полноценные параграфы.


Содержание

Сообщения в этом обсуждении
"глубина тредов; format=flowed"
Отправлено Maxim Chirkov , 26-Сен-10 19:32 
>В топиках с сотнями сообщений (комменты к новостям) треды становятся часто настолько
>глубокие, что последние уровни все идут с одинаковым смещением от левого
>края, как бы линейно.

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

>Оно, конечно, сохраняет наследование, и можно переместиться
>к родительскому, но визуально это никак не видно. Решаема ли эта
>проблема?

Например, можно визуально как-то отметить сообщения у которых нарушается непрерывный ход ответов.
Сейчас отследить подветки в длинных нитях можно по номерации. В начале заголовка указан номер сообщения, например, "29.580", где 29 уровень вложенности, а 580 - идентификатор. Если нарушается непрерывный порядок уровней, то значит началась новая подветвь, а родительское сообщение - ближайшее с уровнем на 1 меньше текущего.

>Еще, заметил, что при редактировании ответов в цитатах строки обычно заканчиваются на пробелы.

Вызывает ли это какие-то проблемы ? Это особенность функции обрезания строк при квотинге. Сейчас заметил, что длинные неразрывные строки квотятся без разбиения, хотя должны резаться по 80 символов. Разберусь в чем дело.

> Скорее всего, это случайность, но она сразу напомнила о RFC2646/RFC3676 - параметр text/plain; format=flowed,

Я правильно понял, что в Content-Type достаточно добавить "format="flowed" и почтовый клиент сам будет разбивать блоки начинающиеся с ">" ?


"глубина тредов; format=flowed"
Отправлено nuclight , 26-Сен-10 20:15 
>В подобном линейном виде отображаются ответы, с уровнем вложенности более 20 (это
>для страниц новостей, для страниц форума лимит чуть меньше). Это очень
>редкое явление, обычно далее такие обсуждения не ветвятся, а представляют собой
>почти линейных диалог нескольких людей. Но при уровне вложенности более 20
>начинают проявляться проблемы с некоторыми браузерами, форматирование разъезжается или колонки становятся
>слишком узкими или вообще пропадают сообщения, хотя на странице они они
>есть.

Думается, ЖЖ в том числе и поэтому по умолчанию треды сворачивает просто в заголовки. Но я не очень понял, как из страницы форума открыть просто подветку.

>>Оно, конечно, сохраняет наследование, и можно переместиться
>>к родительскому, но визуально это никак не видно. Решаема ли эта
>>проблема?
>
>Например, можно визуально как-то отметить сообщения у которых нарушается непрерывный ход ответов.

Может, цвета какие-нибудь?.. Аналогично как бывает подсветка разных уровней квотинга или четных/нечетных строк в таблице...

>Сейчас отследить подветки в длинных нитях можно по номерации. В начале заголовка
>указан номер сообщения, например, "29.580", где 29 уровень вложенности, а 580
>- идентификатор. Если нарушается непрерывный порядок уровней, то значит началась новая
>подветвь, а родительское сообщение - ближайшее с уровнем на 1 меньше
>текущего.

Хм, странно. Вот http://www.opennet.me/openforum/vsluhforumID3/70525.html есть по меньшей мере один блок, где с такой вложенностью идет переписка более чем двух человек. Но там просто 409, не 20.409.

>>Еще, заметил, что при редактировании ответов в цитатах строки обычно заканчиваются на пробелы.
>
>Вызывает ли это какие-то проблемы ?

Нет, не вызывает. На вебе на это вообще абсолютно пофиг, есть они, нет... Просто это напомнило про соответствующий стандарт - использовать эту особенность, что ниже и написал.

>Это особенность функции обрезания строк при
>квотинге. Сейчас заметил, что длинные неразрывные строки квотятся без разбиения, хотя
>должны резаться по 80 символов. Разберусь в чем дело.

Кстати, не факт. Если там урл, то ему, может, лучше и остаться неразрезанным.

>> Скорее всего, это случайность, но она сразу напомнила о RFC2646/RFC3676 - параметр text/plain; format=flowed,
>
>Я правильно понял, что в Content-Type достаточно добавить "format="flowed" и почтовый клиент сам будет разбивать блоки начинающиеся с ">" ?

Не совсем. То есть, он их начинает разбивать, но это получается не вполне корректно, если пробелы стоят не так. Вот скриншот этого сообщения в почте (уже с flowed) и его оригинала на вебе:

http://disk.tom.ru/qc6etcq/1/54df9/opennet100926-2230flowed.jpg

Там видна первая цитата - она flow'ится как blockquote, но не целиком, а до слова "настолько", после которого жесткий перевод строки. В конце видна последняя цитата: на вебе это одна непрерывная строка (где номера RFC), в письме оно принудительно разбилось, вторая часть перестала быть цитатой - и выпала из зеленой подсветки.

Алгоритм там чуть более хитрый, но в целом не настолько сложный. Можно читать 2646, там чуть проще описано, 3676 в основном всякие проблемы языков справа налево описывает да цифровых сигнатур.

Хотя мое предложение касалось не столько почты, сколько веба - когда разбиение с пробелами будет удовлетворять format=flowed, алгоритмы почтовых клиентов можно будет реализовать уже в веб-движке для blockquote, чтоб браузер сам делал "красиво", как бывает на других форумах. При этом для пользователя и почты всё прозрачно и точно так же останется с ">". В почтовых клиентах при большей вложенности выглядит типа такого: http://disk.tom.ru/ew4eygq/1/fcf20/uafug-flowed091229.jpg


"глубина тредов; format=flowed"
Отправлено Maxim Chirkov , 27-Сен-10 23:13 
Нашел несколько неприятных ошибок, надеюсь исправив их новых ошибок не добавил, так как переписал функцию квотинга с нуля. При цитировании новых сообщений теперь проблемы должны исчезнуть (квоты в уже написанных сообщениях останутся как есть).

> Думается, ЖЖ в том числе и поэтому по умолчанию треды сворачивает просто
> в заголовки. Но я не очень понял, как из страницы форума
> открыть просто подветку.

Не понял, с общей html-страницы или в режимах ajax/нитевидном  отобразить только часть обсуждения относительно определенного родительского сообщения ?

> Может, цвета какие-нибудь?.. Аналогично как бывает подсветка разных уровней квотинга или
> четных/нечетных строк в таблице...

Скорее всего, придется как-то цветом нарушение непрерывности цепочки вопрос/ответ выделять, только пока в голову не приходит как наиболее оптимально это сделать.

Например, есть нить:
1
-2
--3
---4
--5
---6
-7

Как-то нужно выделить нарушение цепочки ответов для сообщений 5 и 7, при этом показав, что они являются ответами на сообщения 2 и 1.

>> Сейчас отследить подветки в длинных нитях можно по номерации. В начале заголовка
>> указан номер сообщения, например, "29.580", где 29 уровень вложенности, а 580
>> - идентификатор. Если нарушается непрерывный порядок уровней, то значит началась новая
>> подветвь, а родительское сообщение - ближайшее с уровнем на 1 меньше
>> текущего.
> Хм, странно. Вот http://www.opennet.me/openforum/vsluhforumID3/70525.html есть по
> меньшей мере один блок, где с такой вложенностью идет переписка более
> чем двух человек. Но там просто 409, не 20.409.

Верно, это только на странице с новостью.

> Хотя мое предложение касалось не столько почты, сколько веба - когда разбиение
> с пробелами будет удовлетворять format=flowed, алгоритмы почтовых клиентов можно будет
> реализовать уже в веб-движке для blockquote, чтоб браузер сам делал "красиво",

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



"глубина тредов; format=flowed"
Отправлено nuclight , 27-Сен-10 15:54 
На текущий момент всё еще есть проблема в почте. На вебе строка цитаты непрерывная, в почте после нескольких с пробелом на конце (нормально отработал flowed) попадается строка, где 2 слова из предыдущей строки ("высказывание 2") жестко перенеслись без знака квоты, а потом снова продолжился flowed:
3E F2 C5 DE D8 20 C9 C4 │ C5 D4 20 CF 20 D4 CF CD  >Речь идет о том
2C 20 DE D4 CF 20 CF C4 │ CE C9 CD 20 C9 DA 20 CF  , что одним из о
D3 CE CF D7 CE D9 C8 20 │ F7 C1 DB C9 C8 20 C1 D2  сновных Ваших ар
C7 D5 CD C5 CE D4 CF D7 │ 20 D7 20 DC D4 C9 C8 20  гументов в этих
0D 0A 3E D3 C1 CD D9 C8 │ 20 D3 D0 CF D2 C1 C8 20  ♪◙>самых спорах
22 47 50 4C 20 76 73 20 │ 42 53 44 22 20 D1 D7 CC  "GPL vs BSD" явл
D1 C5 D4 D3 D1 20 2D 20 │ 22 DE D4 CF C2 20 D0 D2  яется - "чтоб пр
CF D0 D2 C9 C5 D4 C1 D2 │ DD C9 CB C9 20 C4 C5 CC  оприетарщики дел
C9 CC C9 D3 D8 20 D3 D7 │ CF C9 CD C9 20 0D 0A 3E  ились своими ♪◙>
C9 DA CD C5 CE C5 CE C9 │ D1 CD C9 22 2E 20 F0 CF  изменениями". По
DC D4 CF CD D5 20 CB CF │ C7 C4 C1 20 F7 D9 20 D7  этому когда Вы в
C4 D2 D5 C7 20 D0 C9 DB │ C5 D4 C5 20 D0 D2 CF D4  друг пишете прот
C9 D7 CE CF C5 20 D3 D7 │ CF C5 CA 20 D0 CF DA C9  ивное своей пози
C3 C9 C9 0D 0A D7 D9 D3 │ CB C1 DA D9 D7 C1 CE C9  ции♪◙высказывани
C5 20 22 32 29 0D 0A 3E │ F3 CB C1 D6 C9 D4 C5 2C  е "2)♪◙>Скажите,


"глубина тредов; format=flowed"
Отправлено nuclight , 04-Окт-10 22:07 
Гм, наблюдаю интересный эффект: на http://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi?quote... начиная со слов "Доставило." - вижу увеличенный шрифт, относительно предыдущего сообщения.

"глубина тредов; format=flowed"
Отправлено Maxim Chirkov , 05-Окт-10 07:39 
> Гм, наблюдаю интересный эффект: на http://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi?quote...
> начиная со слов "Доставило." - вижу увеличенный шрифт, относительно предыдущего сообщения.

В том сообщении случайно отквочен закрывающийся тег "[code ]", который в нити не виден, но в форме ответа проявляется.



"глубина тредов; format=flowed"
Отправлено nuclight , 10-Дек-10 14:31 
Кстати, проблема в посте из #3 сохраняется: только что пришел ответ из http://www.opennet.me/openforum/vsluhforumID4/378.html#2 - и там выглядит вот так:

"читаемые, попробовал масштабировать - либо не увелчииваются, либо на"
"некоторых размерах"
"тоже не отображаются."

Первая и третья строчка - форматирована как цитата, вторая - не как цитата, просто текст. То есть, в конце первой строчки отсутствует нужный по RFC пробел.

P.S. В догонку о недавних багах в цитировании - еще в конце любого сообщения добавляется пустая строка (а при цитировании и две...)


"глубина тредов; format=flowed"
Отправлено Maxim Chirkov , 10-Дек-10 14:57 
> Первая и третья строчка - форматирована как цитата, вторая - не как
> цитата, просто текст. То есть, в конце первой строчки отсутствует нужный
> по RFC пробел.

Точно, я недавно немного код квотинга переделал и пробелы убрал. Сейчас вернул и подписал комментарий, пробелы не трогать :-)
Пробелом должны оканчиваться все отквоченные строки или для последней его ставить не нужно ?


"глубина тредов; format=flowed"
Отправлено nuclight , 10-Дек-10 21:59 
>> Первая и третья строчка - форматирована как цитата, вторая - не как
>> цитата, просто текст. То есть, в конце первой строчки отсутствует нужный
>> по RFC пробел.
> Точно, я недавно немного код квотинга переделал и пробелы убрал. Сейчас вернул
> и подписал комментарий, пробелы не трогать :-)
> Пробелом должны оканчиваться все отквоченные строки или для последней его ставить не
> нужно ?

Чуть-чуть сложнее. Пробелами оканчиваются все строки, кроме последней строки параграфа. В квоте, понятно, параграфов может быть больше одного. См. http://tools.ietf.org/html/rfc2646.html#section-4.1 и 4.2, далее 4.5, чтобы не возникало проблемы из 3.1 (еще дальше есть примеры).


"глубина тредов; format=flowed"
Отправлено Maxim Chirkov , 10-Дек-10 22:26 
>[оверквотинг удален]
>>> цитата, просто текст. То есть, в конце первой строчки отсутствует нужный
>>> по RFC пробел.
>> Точно, я недавно немного код квотинга переделал и пробелы убрал. Сейчас вернул
>> и подписал комментарий, пробелы не трогать :-)
>> Пробелом должны оканчиваться все отквоченные строки или для последней его ставить не
>> нужно ?
> Чуть-чуть сложнее. Пробелами оканчиваются все строки, кроме последней строки параграфа.
> В квоте, понятно, параграфов может быть больше одного. См. http://tools.ietf.org/html/rfc2646.html#section-4.1
> и 4.2, далее 4.5, чтобы не возникало проблемы из 3.1 (еще
> дальше есть примеры).

Вроде что-то похожее сделал, надеюсь не напутал ничего.


"глубина тредов; format=flowed"
Отправлено nuclight , 10-Дек-10 22:50 
>> Чуть-чуть сложнее. Пробелами оканчиваются все строки, кроме последней строки параграфа.
>> В квоте, понятно, параграфов может быть больше одного. См. http://tools.ietf.org/html/rfc2646.html#section-4.1
>> и 4.2, далее 4.5, чтобы не возникало проблемы из 3.1 (еще
>> дальше есть примеры).
> Вроде что-то похожее сделал, надеюсь не напутал ничего.

Увы, нет. В почту этот комментарий пришел так: длинная строка (пробелы склеили в параграф, да):

"и подписал комментарий, пробелы не трогать :-) Пробелом должны
оканчиваться все отквоченные строки или для последней его"

потом на отдельной строке "ставить не" без всякой квоты, потом "нужно?" снова в квоте.

А еще скрипт сделал жесткий перенос (без пробела) сразу после ссылки - хотя в оригинале строка (т.е. параграф) еще продолжается.

У меня подозрение, что код обрабатывает текст не параграфами, а как-то иначе :) Возможно, там в регэкспе /sm вместо split по \n и итерации по полученным параграфам?


"глубина тредов; format=flowed"
Отправлено Maxim Chirkov , 10-Дек-10 23:09 
>[оверквотинг удален]
> в параграф, да):
> "и подписал комментарий, пробелы не трогать :-) Пробелом должны
> оканчиваться все отквоченные строки или для последней его"
> потом на отдельной строке "ставить не" без всякой квоты, потом "нужно?" снова
> в квоте.
> А еще скрипт сделал жесткий перенос (без пробела) сразу после ссылки -
> хотя в оригинале строка (т.е. параграф) еще продолжается.
> У меня подозрение, что код обрабатывает текст не параграфами, а как-то иначе
> :) Возможно, там в регэкспе /sm вместо split по \n и
> итерации по полученным параграфам?

Не, там оказывает перед отправкой почтой еще дополнительный обрезатель по 80 символов в строке был, который убивал квотинг. Сейчас переделал немного, посмотрим как будет.


"глубина тредов; format=flowed"
Отправлено nuclight , 10-Дек-10 23:25 
>[оверквотинг удален]
>> потом на отдельной строке "ставить не" без всякой квоты, потом "нужно?" снова
>> в квоте.
>> А еще скрипт сделал жесткий перенос (без пробела) сразу после ссылки -
>> хотя в оригинале строка (т.е. параграф) еще продолжается.
>> У меня подозрение, что код обрабатывает текст не параграфами, а как-то иначе
>> :) Возможно, там в регэкспе /sm вместо split по \n и
>> итерации по полученным параграфам?
> Не, там оказывает перед отправкой почтой еще дополнительный обрезатель по 80 символов
> в строке был, который убивал квотинг. Сейчас переделал немного, посмотрим как
> будет.

Во, замечательно - этот на почту пришел полностью под flowed. Единственно что между параграфами потерялась отбивка пустыми строками - но это может и фича, а не бага, я в http://www.opennet.me/openforum/vsluhforumID4/374.html#7 описывал...


"глубина тредов; format=flowed"
Отправлено nuclight , 10-Дек-10 22:58 
> У меня подозрение, что код обрабатывает текст не параграфами, а как-то иначе :) Возможно, там в регэкспе /sm вместо split по \n и итерации по полученным параграфам?

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

P.S. Кстати, если логика склеивания заново будет, то и blockquote прикрутить проще станет.


"глубина тредов; format=flowed"
Отправлено nuclight , 10-Дек-10 14:24 
Это, видимо, из недавних изменений на форуме - работа квотинга на вебе изменилась: он теперь цитированный текст от нецитированного принудительно отделяет пустой строкой, а все цитированные слепляет друг с другом. В результате получается вот такая картина:

> Но позвольте - в оригинальной своей цитате Вы утверждали
> совсем другое:
>>> выделенный кусок изначального утверждения
> а теперь говорите нечто, скорее, противоположное.

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

Кроме того, еще теперь делается вот такое:

> идет очень длинная цитата, много текста, из которой цитируются только

[...]
> релевантные

[...]
> части

Так вот, скрипт перед  "[...]" принудительно вставляет пустую строку (причем после почему-то не вставляет), тогда как это одна цитата, получается не очень красиво. Я здесь вставляю "[...]" не в  цитате, чтоб показать, что это я фигурно отцитировал, а не у собеседника так (или оно само). Если их под квотой вставлять, то всё нормально.

В принципе, эти изменения - скорее положительные, теперь о форматировании можно не заботиться, и чужое кривое форматирование тоже поправит. Но вот в таких случаях - всё портится.

В принципе, первую проблему можно решить введением разных цветов для квотинга разного уровня. Достаточно добавить  только три цвета, вот как в slrn сделано, к примеру:

color quotes            "yellow"        "black"
color quotes1           "cyan"          "black"
color quotes2           "brown"         "black"
color quotes3           "blue"          "black"
color quotes4           "brown"         "black"
color quotes5           "brown"         "black"
color quotes6           "brown"         "black"
color quotes7           "brown"         "black"

Или всё же даже подумать о цитатах как blockquote?..

По второй проблеме - наверное, не делать отбивку пустой строкой, если первая строка нормального текста не содержит букв. Или начинается и кончается не с них (может быть, кто-то напишет "[...skip...]").