Предложение по оформлению пьес средствами FB2 и CSS
Goto page 1, 2  Next
 
Libroom Forum IndexПрограммное обеспечение
AuthorMessage

Дотошный Рыжик
Член клуба The eBook

Член клуба The eBook



Joined: 04 Feb 2009
Posts: 2985


Location: Юго-Запад СССР

Posted: 03.01.2011 21:50    

(зеркала: http://lib.rus.ec/node/267875 и http://www.flibusta.net/node/93482)
(Извиняюсь, если обсуждаемая тема где-то уже существует, сам не нашёл, если кто знает, где обсуждалось, прошу кинуть в меня ссылкой.)

Делаю пьесу. Большую, навороченную - с ремарками в разрывах реплик, с одновременными репликами, а также со сносками, комментариями, со здоровенным авторским предисловием и переводчицким послесловием. Для пущего "пьесоподобия" использую CSS (правда, пока я знаю только один CSS-capable вьюер - CoolReader 3), но даже его возможностей не хватает. Приходится придумывать на ходу. Ну и вот... родился CSS-стиль оформления, хочу им поделиться.
Чуть-чуть предисловия об использовании CSS в FB2:
Хорошо, если требующих CSS-вмешательства мест мало; но с пьесой не так - она вся требует вмешательства:
  • список действующих лиц - не помешает каждую строку отделить от соседних интервалом хотя бы в полстроки;
  • реплики хорошо бы сделать "висячим" абзацным отступом - первая строка абзаца-реплики вплотную к левому краю, последующие - чуть отступя;
  • ремарки 2-го рода (http://www31.ru/book/special-registration/303-remarki.html) не помешает целиком отодвинуть от левого края и дать шрифтом чуть поменьше;
  • ремарка 2-го рода может разорвать реплику - тогда "хвост" реплики надо дать тем же шрифтом и с тем же сдвигом, что и обычную реплику, но без висячего отступа;
  • ремарка 1-го рода (как, впрочем, и 2-го) может выделяться уменьшенным кеглем;
  • ремарку 2-го рода неплохо бы отделить от реплик (но не от других абзацев той же ремарки!) пустым пространством высотой где-то в 60-80% пустой строки;
  • и т.д. - я тут не специалист, просто пару часов порылся в инете. Sad

FB2 позволяет задавать CSS-стиль для абзаца либо индивидуально (атрибут "style" тэга "p"), либо (не очень большими) группами - нужные абзацы помечаем уникальными идентификаторами (атрибут "id") и перечисляем их в stylesheet'е - например, для ремарок 2-го рода это может выглядеть так:
Code:
p[id="rem_001"], p[id="rem_002"], p[id="rem_003"],
p[id="rem_004"], p[id="rem_005"], p[id="rem_006"],
p[id="rem_007"] {
  text-indent: 0px; margin-left: 2.3em; font-size: 87%;
  margin-top: 0.4em; margin-bottom: 0.4em;
}
Недостаток первого способа - громоздкость (в каждом абзаце надо полностью расписать его особенности внешнего вида) и трахоёмкость согласованного изменения; второго - тоже громоздкость (в stylesheet'е надо полностью перечислить id'ы всех оформляемых одним стилем абзацев - а если это, как в уважающей себя пьесе, несколько тысяч реплик?), обоих - нельзя перегнать настройки в конфигурацию вьюера, а нужно тащить непосредственно в документе.
Кроме того, для присобачивания стиля к взаимодействию подряд идущих тэгов - что обычно выражается как
Code:
тэг1 + тэг2 {
  отдельные-настройки-для-второго-тэга-если-он-идёт-за-первым;
}
- придётся уже перечислять все возможные пары меток первого и второго абзацев, т.е. объём перечисления пар абзацев с метками растёт, ясен перец, в геометрической прогрессии. Sad
(Правда, CSS позволяет ещё пару трюков: "тэг[атрибут] { ... }" позволяет задать настройки для тэга с любым непустым значением атрибута; "тэг[атрибут=""] { ... }" - для тэга с пустым значением атрибута.
Но в нашем случае это мало что даёт; вот если бы можно было задать для атрибута маску или регулярное выражение...)

В спецификации формата FictionBook версии 2.0 у абзаца был ещё один атрибут - "class"; его использовать было бы удобнее всего, но увы - начиная с FB 2.1 он уже не поддерживается, а fb2-файлы с class'ом считаются невалидными. Sad
Так вот, я придумал забавный выход из положения - честно говоря, это хак и я не уверен, что эта фишка будет срабатывать везде и всегда. Идея (впервые её высказал viktorz) простая как дрова: в атрибуте "style" прописывать не CSS-значение стиля, а просто имя, которое не совпадает ни с одним ключевым словом языка CSS (а заодно - и ни с одним именем тэга FB2 и HTML). Соответственно, использование атрибута "style" начинает ничем не отличаться от атрибута "class": можно писать почти что угодно и не заботиться об уникальности. Кстати, известные мне валидаторы ни слова поперёк не говорят. Smile
Собственно предложение по оформлению:
Во-первых, оформление элементов силами FB2 - чтобы пьеса хоть как-то выглядела на ридерах, не поддерживающих CSS:
  1. Действующие лица: каждое отдельной строкой, имя strong'ом, комментарий к нему - обычным шрифтом:
    Quote:
    <p><strong>Брамик</strong> - начальник тюрьмы, лейтенант.</p>
  2. Реплика: персонаж выделяется тэгом "strong" (точка после имени в strong не входит):
    Quote:
    <p><strong>Незнакомец</strong>. Он согласен встретиться с вами.</p>
  3. Ремарка первого рода: выделяется тэгом "emphasis" вместе с окружающими её круглыми скобками (точка после круглой скобки в случае, если ремарка следует сразу за персонажем, в emphasis не входит):
    Quote:
    <p><strong>Стелла</strong> <emphasis>(слышен только голос)</emphasis>. Майкл, здесь какой-то тип, говорит, будто он... Филипп Стоун. <emphasis>(Хихикает.)</emphasis></p>
  4. Ремарка второго рода: весь текст внутри ремарки берётся в emphasis, персонажи дополнительно выделяются strong'ом:
    Quote:
    <p><emphasis>Луч прожектора высвечивает <strong>Филиппа Стоуна</strong>. Ему за шестьдесят. Он грузный, седой, элегантный, властный.</emphasis></p>

Во-вторых - имена стилей. Предлагаю метить абзацы в тексте пьесы - реплики и ремарки - следующими стилями:
  1. Действующее лицо: character.
  2. Продолжение списка "родственных" действующих лиц: character2.
  3. Реплика: cue.
  4. Ремарка первого рода: поскольку отдельным абзацем не является - никак не метить, хватит с неё того, что она в empasis'е.
  5. Ремарка второго рода: remark.
  6. Продолжение реплики после ремарки 2-го рода: cue2.
Пример 1:
Quote:
<p style="character"><strong>Андрей Кудрявцев</strong> — командир красноармейского отряда.</p>
<p style="character"><strong>Запалка</strong> — его помощник.</p>
<p style="character"><strong>Микола</strong>,</p>
<p style="character2"><strong>Казимир</strong>,</p>
<p style="character2"><strong>Федор</strong> — красноармейцы.</p>
<p style="character"><strong>Лейбка</strong>,</p>
<p style="character2"><strong>3ямка</strong> — подростки — воспитанники Красной армии.</p>
<p style="character"><strong>Марианна</strong> — мать Андрея Кудрявцева.</p>
<p style="character"><strong>Самуил</strong> — старый рабочий, сапожник.</p>
Пример 2:
Quote:
<p style="cue"><strong>Ева</strong> <emphasis>(вбегая)</emphasis>. Что? Где?</p>
<p style="remark"><emphasis>Адам указывает на лань.</emphasis></p>
<p style="cue2">Ой! <emphasis>(Приближается к трупу.)</emphasis></p>
<p style="remark"><emphasis>Адам, осмелев, следует за ней.</emphasis></p>
<p style="cue2">Что у нее с глазами?</p>
<p style="cue"><strong>Адам</strong>. Не с одними глазами. Вот, посмотри. <emphasis>(Толкает труп ногой.)</emphasis></p>

И в-третьих - собственно CSS-описание стилей. Его можно включать в stylesheet, но ИМХО более удобное место для него - в настройках вьюера. Простейший пример - персонажи в репликах и ремарках выделены разрядкой, ремарки первого и второго рода - прямым шрифтом и уменьшенным кеглем, реплики снабжены висячими отступами, ремарки второго рода сдвинуты вправо:
Code:
 <stylesheet type="text/css">
  p[style="character"], p[style="character2"] {
   text-indent: 4em hanging; margin-top: 0em; margin-bottom: 0em;
   text-align: left; hyphenate: none;
  }
  p[style="character"] + p[style="character"],
  p[style="character2"] + p[style="character"] {
   margin-top: 0.6em;
  }
  p[style="cue"] {
   text-indent: 2em hanging;
  }
  p[style="cue2"] {
   text-indent: 0px; margin-left: 2em;
  }
  p[style="remark"] {
   text-indent: 0px; margin-left: 2.3em; font-size: 87%;
  }
  p[style="character"] strong, p[style="cue"] strong, p[style="cue2"] strong, p[style="remark"] strong {
   font-weight: inherit; letter-spacing: 0.2em;
  }
  p[style="cue"] emphasis, p[style="cue2"] emphasis {
   font-style: inherit; font-size: 87%;
  }
  p[style="remark"] emphasis {
   font-style: inherit;
  }
  p[style="remark"] + p[style="cue"], p[style="remark"] + p[style="cue2"] {
   margin-top: 0.8em
  }
  p[style="cue"] + p[style="remark"], p[style="cue2"] + p[style="remark"] {
   margin-top: 0.92em
  }
 </stylesheet>

Ну вот... Где-то так.

Прошу обсуждать, хаять и предлагать. Smile

11/01/2011 Список style'ей дополнен style'ом character2; поправлены примеры.


Last edited by Дотошный Рыжик on 07.02.2011 18:20; edited 5 times in total
 
View user's profile ^

Mike Sinkovsky
Член клуба The eBook

Член клуба The eBook



Joined: 09 Mar 2007
Posts: 1066


Location: Пермь

Posted: 03.01.2011 22:13    

Мне непонятно одно - для чего весь гимор, если кроме как в cr3 это нигде не работает?
При конвертации в epub/mobi/rtf и т.д. стили отвалятся, скорее всего.
Ну не заточен формат под пьесы. Может просто сверстать в html, толку больше будет.

Хотя, если процесс доставляет удовольствие, то почему нет Very Happy
 
View user's profile ^

AndyN
Член клуба The eBook

Член клуба The eBook



Joined: 01 Mar 2008
Posts: 33351


Location: Киев

Posted: 04.01.2011 02:41    

Mike Sinkovsky wrote:
Мне непонятно одно - для чего весь гимор, если кроме как в cr3 это нигде не работает?

Наслаждаться в совместимых устройствах Cool
Лбук, Азбука... Все? А - Покетбук-701 Rolling Eyes

Добавлено спустя 1 минуту 9 секунд:

Дотошный Рыжик
Да... Красиво... А хоть в PDF оно потом сохранится? Rolling Eyes
_________________
История читалок: в профиле
pb602
 
View user's profile ^

viktorz
Член клуба The eBook

Член клуба The eBook



Joined: 22 Sep 2007
Posts: 3209


Location: San Jose, CA

Posted: 04.01.2011 03:05    

Дотошный Рыжик wrote:
Так вот, я придумал забавный выход из положения - честно говоря, это хак и я не уверен, что эта фишка будет срабатывать везде и всегда. Идея простая как дрова: в атрибуте "style" прописывать не CSS-значение стиля, а просто имя, которое не совпадает ни с одним ключевым словом языка CSS (а заодно - и ни с одним именем тэга FB2 и HTML). Соответственно, использование атрибута "style" начинает ничем не отличаться от атрибута "class": можно писать почти что угодно и не заботиться об уникальности. Кстати, известные мне валидаторы ни слова поперёк не говорят. Smile


БУ-ГА-ГА!!!

Дотошный Рыжик wrote:
viktorz wrote:
если у элемента присутствует атрибут style с непустым значением и в настройках присутствует стиль параграфа с таким именем, то использовать этот стиль для вывода этого элемента.
Бред, пардон на грубом слове. Атрибут "style" там, где он уже есть, прочно занят именно содержимым, а не именем. Кроме того, как такое поведение (конкретный атрибут любого тэга) описать на CSS? Перечислять в настройках CoolReader'а (и/или в stylesheet'е) все-все FB2'шные тэги со всеми задействованными именами стилей? EmbarassedRolling EyesQuestion
viktorz wrote:
раньше атрибут вовсе игнорировался конвертером, ну а теперь используется замысловато нестандартным образом
В годы моей институтский молодости такой бихэвиор назывался "ректальной стоматологией". Sad Не делай этого, пожалуйста.


"И эти люди запрещают мне ковыряться в носу!"
_________________
Nothing Is Ever Easy fb2pdf
 
View user's profile ^

1_абрам
Член клуба The eBook

Член клуба The eBook



Joined: 15 Jul 2007
Posts: 1341



Posted: 04.01.2011 12:48    

AndyN wrote:
Mike Sinkovsky wrote:
Мне непонятно одно - для чего весь гимор, если кроме как в cr3 это нигде не работает?

Наслаждаться в совместимых устройствах Cool
Лбук, Азбука... Все? А - Покетбук-701 Rolling Eyes




А я надеюсь, что ОИ с КР на борту со временем будет на всех линуксовых ридерах.
 
View user's profile ^

Дотошный Рыжик
Член клуба The eBook

Член клуба The eBook



Joined: 04 Feb 2009
Posts: 2985


Location: Юго-Запад СССР

Posted: 04.01.2011 15:45    

viktorz wrote:
Дотошный Рыжик wrote:
я придумал забавный выход из положения - честно говоря, это хак [...] в атрибуте "style" прописывать не CSS-значение стиля, а просто имя

БУ-ГА-ГА!!!

Дотошный Рыжик wrote:
Атрибут "style" там, где он уже есть, прочно занят именно содержимым, а не именем.

Нууу... предположим, я был неправ. И ведь я ж именно твою идею развил, нет?
Кстати, сенькс за напоминание, стартовый пост подправил - написал о твоём приоритете на идею. Smile

Posted after 2 minutes 52 seconds:

Диалог с rr3 подсказал ещё одну идею. Излагаю.
Пьесовая style'изация не обязательно требует от FB2-вьюера, чтобы он поддерживал CSS! Вполне хватит при анализе FB2-дерева, кроме тэгов, учитывать атрибут "style" тэга "p", добавить в набор обрабатываемых сущностей, к заголовкам/цитатам/эпиграфам и т.д., реплики, ремарки и персонажей, а в настройки отображения - установку для них шрифта, выделения, выравнивания, отступа и прочего необходимого.
Т.е. поддержку драматургии можно добавить в любой FB2-вьюер ценой сравнительно небольших трудозатрат на доработку. Кто возьмётся доработать любимый вьюер самостоятельно или предложить идею доработки его автору?

Posted after 1 minute 50 seconds:

AndyN wrote:
А хоть в PDF оно потом сохранится?
М-мм... viktorz что-то такое уже реализовал, осталось только согласовать подробности - точные имена стилей, добавить для них настройки и всё такое.

Posted after 1 minute 20 seconds:

Mike Sinkovsky wrote:
Мне непонятно одно - для чего весь гимор, если кроме как в cr3 это нигде не работает?
При конвертации в epub/mobi/rtf и т.д. стили отвалятся, скорее всего.
Значит, конвертеры тоже придётся слегка дорабатывать, только и всего.

Last edited by Дотошный Рыжик on 04.01.2011 18:51; edited 1 time in total
 
View user's profile ^

kaznelson
Член клуба The eBook

Член клуба The eBook



Joined: 08 Jun 2007
Posts: 4642


Location: Москва

Posted: 04.01.2011 17:24    

Quote:
Нууу... предположим, я был неправ. И ведь я ж именно твою идею развил, нет?
Я понял! Дотошный Рыжик специально тогда раздул скандал - с прицелом на пьесы, дабы прибрать бесхозную идею... Very Happy
_________________
Kobo Glo HD, Kobo Aura H2O, Kindle Paperwhite 2
 
View user's profile ^

Дотошный Рыжик
Член клуба The eBook

Член клуба The eBook



Joined: 04 Feb 2009
Posts: 2985


Location: Юго-Запад СССР

Posted: 04.01.2011 19:00    

kaznelson
LaughingLaughingLaughing
 
View user's profile ^

viktorz
Член клуба The eBook

Член клуба The eBook



Joined: 22 Sep 2007
Posts: 3209


Location: San Jose, CA

Posted: 04.01.2011 23:00    

Дотошный Рыжик wrote:

AndyN wrote:
А хоть в PDF оно потом сохранится?
М-мм... viktorz что-то такое уже реализовал, осталось только согласовать подробности - точные имена стилей, добавить для них настройки и всё такое.


Поскольку Дотошный Рыжик сильно-сильно настаивал, что так использовать style нельзя, то я реализацию поменял, и вместо style там теперь внутри используется fb2pdf-style, а style, как и прежде, игнорируется. Впрочем, это пофиг, можно использовать встроенную функцию трансформации для предварительного копирования значения игнорируемого style в неигнорируемый fb2pdf-style. Ну а точные имена стилей, настройки для них и всё такое - это уже в пользовательских настройках кому надо могут прописать. И если уж Вы, Дотошный Рыжик, так одержимы созданием новых стандартов, заведите какие-то namespaces, что ли, что бы Ваши новопридуманные имена стилей не пересеклись ненароком с чем-то уже существующим. Например, вместо remark пусть будет какое-нибудь fb25.plays.remark, что ли...
_________________
Nothing Is Ever Easy fb2pdf
 
View user's profile ^

Дотошный Рыжик
Член клуба The eBook

Член клуба The eBook



Joined: 04 Feb 2009
Posts: 2985


Location: Юго-Запад СССР

Posted: 04.01.2011 23:45    

viktorz wrote:
Например, вместо remark пусть будет какое-нибудь fb25.plays.remark, что ли...
Хммм... не, получается сильно коряво. Да и при чём тут fb25 - юзать style'изованное можно на текущем FB2.1, да и кроме пьес есть где что выделять - всякие "вместо эпиграфа", формулы, шапки в заявлениях, продолжение фразы после стиха...

Last edited by Дотошный Рыжик on 04.01.2011 23:58; edited 1 time in total
 
View user's profile ^

AlexeyB
Guest









Posted: 04.01.2011 23:45    

viktorz wrote:
И если уж Вы, Дотошный Рыжик, так одержимы созданием новых стандартов, заведите какие-то namespaces, что ли, что бы Ваши новопридуманные имена стилей не пересеклись ненароком с чем-то уже существующим. Например, вместо remark пусть будет какое-нибудь fb25.plays.remark, что ли...

Тогда уж что-нибудь вот такое:

Code:
<FictionBook ... xmlns:plays="http://www.whatever.com/something-else">
...
<p plays:style="remark"><emphasis>Адам указывает на лань.</emphasis></p>
...
 
^

Дотошный Рыжик
Член клуба The eBook

Член клуба The eBook



Joined: 04 Feb 2009
Posts: 2985


Location: Юго-Запад СССР

Posted: 04.01.2011 23:48    

AlexeyB wrote:
Тогда уж что-нибудь вот такое:
[...]
&lt;p plays:style="remark">[...]
О! А оно валидно с точки зрения существующего валидатора? И потом - я namespace не понимаю, есть это где-то изложено по-русски?

Posted after 1 minute 57 seconds:

viktorz wrote:
И если уж Вы [...] так одержимы созданием новых стандартов
Нет, я даже наоборот - мне интереснее раскапывать новые возможности в уже давно известном... Smile Хакер я, собственно. Хакером был, хакером, наверно, пожизненно останусь. Smile
 
View user's profile ^

AlexeyB
Guest









Posted: 04.01.2011 23:52    

Дотошный Рыжик wrote:
А оно валидно с точки зрения существующего валидатора?
Увы. Наверное, нет. Значит, так нельзя... Sad
 
^

viktorz
Член клуба The eBook

Член клуба The eBook



Joined: 22 Sep 2007
Posts: 3209


Location: San Jose, CA

Posted: 05.01.2011 01:31    

Дотошный Рыжик wrote:
viktorz wrote:
Например, вместо remark пусть будет какое-нибудь fb25.plays.remark, что ли...
Хммм... не, получается сильно коряво. Да и при чём тут fb25 - юзать style'изованное можно на текущем FB2.1, да и кроме пьес есть где что выделять - всякие "вместо эпиграфа", формулы, шапки в заявлениях, продолжение фразы после стиха...


Да ни причем тут fb25. И пьесы ни при чем. Это же был ПРИМЕР. Ну напишите fb21.plays.remark. Или private-styles-of-slowredcat.remark. Или smartypants.fancystyles.vmestoepigrafa. Что угодно, уникальность обеспечьте только. Тупо remark может совпасть ненароком у кого-то с чем-то.
_________________
Nothing Is Ever Easy fb2pdf
 
View user's profile ^

Дотошный Рыжик
Член клуба The eBook

Член клуба The eBook



Joined: 04 Feb 2009
Posts: 2985


Location: Юго-Запад СССР

Posted: 05.01.2011 03:39    

viktorz wrote:
уникальность обеспечьте только.
Ага, уловил. Но... хотца застолбить имена покороче. Smile Да и руками набирать придётся... Sad
viktorz wrote:
private-styles-of-slowredcat
Smile))))))))))))
 
View user's profile ^

Дотошный Рыжик
Член клуба The eBook

Член клуба The eBook



Joined: 04 Feb 2009
Posts: 2985


Location: Юго-Запад СССР

Posted: 05.01.2011 20:31    

Оказывается, идея высказывалась ещё раньше - в феврале 2007: http://www.fictionbook.org/forum/viewtopic.php?p=25544#p25544
Я не первый, кто задумался, - это радует. Smile
 
View user's profile ^

AlexeyB
Guest









Posted: 05.01.2011 22:56    

Дотошный Рыжик
Кстати, вы написали: "В спецификации формата FictionBook версии 2.0 у абзаца был ещё один атрибут - "class"; его использовать было бы удобнее всего, но увы - начиная с FB 2.1 он уже не поддерживается". А вы, случайно, не знаете, по какой причине это было сделано?
 
^

Дотошный Рыжик
Член клуба The eBook

Член клуба The eBook



Joined: 04 Feb 2009
Posts: 2985


Location: Юго-Запад СССР

Posted: 06.01.2011 14:48    

AlexeyB
Не в курсе. По идее, GribUser должен знать, но его уже два месяца на форуме не видно. Sad
 
View user's profile ^

Дотошный Рыжик
Член клуба The eBook

Член клуба The eBook



Joined: 04 Feb 2009
Posts: 2985


Location: Юго-Запад СССР

Posted: 12.01.2011 17:56    

Есть первая пьеса, оформленная по предложенной методике, - Бернард Шоу "Назад к Мафусаилу" (http://lib.rus.ec/b/255697 и http://www.flibusta.net/b/219284). На CR2.0.66 и CR3.0.40 пошла на ура. (Ну, почти: почему-то не видна разрядка на фоне курсива - спросил у Buggins'а, жду ответа.)
 
View user's profile ^

Dekson
Бывалый участник форума

Бывалый участник форума



Joined: 01 Jul 2010
Posts: 132



Posted: 13.01.2011 20:49    

Mike Sinkovsky wrote:
Мне непонятно одно - для чего весь гимор, если кроме как в cr3 это нигде не работает?

Так только CR3 и развивается, а все остальные «чтецы» — застряли на уровне поддержки, да и то — не полной, FB2.0. Или я не прав?
 
View user's profile ^
Libroom Forum IndexПрограммное обеспечениеAll times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

© Libroom, 2021