Статьи в словарях состоят из отдельных блоков: это могут быть как метаданные (им посвящен собственный раздел), так стилизованный текст (тут можно провести аналогию с версткой на основе html+css). В файле проекта каждому стилю соответствует отдельный тег <Style>, содержащий некоторое количество атрибутов, влияющих на отображение или поведение (Language, TextType) блока текста в статье.
Ниже описана максимально полная конфигурация одного из стилей словаря в sproj; на практике не требуется заполнять все поля – при отсутствии прописанных настроек в sproj будут использованы значения по умолчанию.
<Style>
<Tag>lemma</Tag>
<Comment>Headword</Comment>
<Language>engl</Language>
<StyleVariant default="1">
<Color Red="0" Green="0" Blue="127" Alpha="255" />
<BackgroundColor Red="235" Green="235" Blue="235" Alpha="255" />
<Visible>ON</Visible>
<Bold>ON</Bold>
<Italic>OFF</Italic>
<Underline>OFF</Underline>
<LineHeight>6</LineHeight>
<Strikethrough>OFF</Strikethrough>
<Overline>OFF</Overline>
<Size>14</Size>
<Level>Normal</Level>
<FontFamily>SansSerif</FontFamily>
<FontName>DejaVu Sans</FontName>
<Prefix></Prefix>
<Postfix></Postfix>
<BackgroundImageTop></BackgroundImageTop>
<BackgroundImageBottom></BackgroundImageBottom>
<Unclickable>ON</Unclickable>
</StyleVariant>
<StyleVariant>
<Color Red="127" Green="0" Blue="0" Alpha="255" />
<BackgroundColor Red="235" Green="235" Blue="235" Alpha="100" />
<Visible>ON</Visible>
<Bold>ON</Bold>
<Italic>OFF</Italic>
<Underline Red="127" Green="0" Blue="0" Alpha="255">OFF</Underline>
<LineHeight>6</LineHeight>
<Strikethrough>OFF</Strikethrough>
<Overline>OFF</Overline>
<Size>14</Size>
<Level>Normal</Level>
<FontFamily>SansSerif</FontFamily>
<FontName>DejaVu Sans</FontName>
<Postfix>]</Postfix>
<Prefix>[</Prefix>
<BackgroundImageTop>overlay.svg</BackgroundImageTop>
<BackgroundImageBottom>background.svg</BackgroundImageBottom>
<Unclickable>ON</Unclickable>
</StyleVariant>
<Usage>ThisHeadword</Usage>
</Style>
- Tag – название стиля, под которым он может быть использован в теле статей и записях списка. Не может совпадать с зарезервированными именами метаданных. Является обязательным полем при описании стиля
- Comment – комментарий по использованию стиля, здесь можно в свободной форме описать, зачем он добавлен и где используется. Можно оставить пустым, но в случае большого количества тегов, однообразия их названий имеет смысл добавлять такие комментарии для облегчения последующих правок файла проекта. Не участвует в реализации фич приложения.
- Language – четырехбуквенный код языка текста, который содержится в этом стиле. Все возможные языковые коды перечислены здесь. Настоятельно рекомендуется корректно заполнять это поле и при наличии в исходном контенте текста на разных языках в одном предложении разделять его на несколько стилей с разными языками. Это делается потому, что на код языка завязана часть функционала (отображение статьи, кросс-рефы итп) и некорректная разметка может повлиять на эти фичи. Является обязательным полем при описании стиля
- StyleVariant – задает один из вариантов отображения стиля, т.е. группирует ряд настроек из списка ниже.
Необходимо, например, для случаев, когда ui guidelines одной из платформ, на которых выпускается словарь, требуют определенных значений размеров шрифтов и/или ограничивают гибкость верстки, а на других платформах таких ограничений нет. В этом случае в базе можно разметить несколько вариантов стилей и каждая платформа выберет подходящий для себя. В этом случае нужно на стороне базы отследить, что у всех стилей варианты для определенной платформы идут под одним и тем же индексом – т.е. во всех стилях вариант номер M предназначен для Android, а вариант N – для iOS (т.к. в текущей реализации подобных пометок нет и варианты будут переключаться по номерам, приложение начнет глобально для всех стилей использовать вариант с определенным индексом). Другой вариант использования – реализации фичи настраиваемых ударений, когда в настройках можно выбрать стиль, которым будут отображаться все ударные буквы
Атрибут default у определенного варианта стиля указывает, что данный вариант должен отображаться по умолчанию для данного стиля.
Если нет необходимости настраивать несколько вариантов стиля, то добавлять единственный контейнер StyleVariant для остальных настроек не обязательно – вложенные в него поля (Color, Bold и прочие) могут располагаться непосредственно внутри <Style> - Color – цвет текста тега. Может иметь четыре атрибута – Red, Green, Blue и Alpha – каждый из которых изменяет свои значения в диапазоне [0…255]. “255” соответствует максимальной насыщенности компонента для RGB (т.е. 255.0.0 – это чистый красный), “0” – минимальной; для Alpha компонента “255” соответствует полной непрозрачности (т.е. описанный в RGB цвет будет использоваться как есть), “0” – полной прозрачности. Значение по умолчанию – 0.0.0.255 (черный цвет)
- BackgroundColor – цвет фона текста тега. Имеет те же атрибуты и с таким же смыслом, что и сам <Color>, но значение по умолчанию отличается – у фона это 255.255.255.0 (т.е. формально белый, но полностью прозрачный фон). При добавлении фона нужно учитывать, что он прозрачен по дефолту и явно указывать нужно значение прозрачности.
- Visible – регулирует видимость тега. Возможные значения – “ON”/”OFF” (по умолчанию “ON”)
- Bold – регулирует насыщенность шрифта (т.е. это более общий случай жирного/обычного начертания, которое тоже настраивается здесь). Возможные значения – “ON”/”OFF”/”HEAVY”/”LIGHT” (ESldBoldValue) и диапазон [100…900] с шагом в 100 (100 – наименее насыщенное начертание, 900 – наиболее насыщенное). Значение по умолчанию – “OFF”
- Italic – при включении добавляет курсив тексту тега. Возможные значения – “ON”/”OFF” (по умолчанию “OFF”)
- Underline – при включении добавляет горизонтальную черту под текстом тега (аналог css text-decoration: underline). Возможные значения – “ON”/”OFF” или диапазон числовых значений [0…16], описывающих разные типы подчеркивания текста (ESldUnderlineType). Цвет подчеркивания может кастомизироваться за счет указания цветовых составляющих RGBA (по аналогии с цветом самого текста). Значения отличные от ON/OFF в словарях ранее не использовались. Значение по умолчанию – “OFF”
- LineHeight – регулирует значение высоты строки, т.е. позволяет сделать строку большей высоты, чем она должна быть с указанным в <Size> размером текста – так можно регулировать разрядку по вертикали. Возможные значения могут быть как относительными – “Standard” (значение по умолчанию), “Small”, “Big”, так и абсолютными. В последнем случае это значения, большие 5, которые могут иметь указание единиц измерения (идут сразу после значения). Про все поддерживаемые единицы измерения можно почитать тут – EMetadataUnitType. Если единицы измерения не специфицированы, то считаем, что используются пункты. Если в базе есть верхние/нижние индексы (см. <Level>), то при указании высоты строки нужно убедиться, что строка с индексом не накладывается на соседнюю (такое может произойти, если указать слишком маленькое значение).
- Strikethrough – при включении зачеркивает текст в теге (аналог css text-decoration: line-through). Возможные значения – “ON”/”OFF” (по умолчанию “OFF”)
- Overline – при включении добавляет горизонтальную черту над текстом тега (аналог css text-decoration: overline). Возможные значения – “ON”/”OFF” (по умолчанию “OFF”)
- Size – размер текста тега. Возможные значения могут быть как относительными – “Standard” (значение по умолчанию), “Small”, “Big”, “SmallCaps” (см. ESldStyleSizeEnum), так и абсолютными. В последнем случае это значения, больше 5, которые могут иметь указание единиц измерения (идут сразу после значения). Про все поддерживаемые единицы измерения можно почитать тут – EMetadataUnitType. Если единицы измерения не специфицированы, то считаем, что используются пункты, pt (самый распространенный вариант для размеров шрифта). Обычно значения размеров шрифтов прописаны в макете словаря, но при его отсутствии можно ориентироваться на значения 6-7pt для верхних/нижних индексов (аналог Small), 11-12pt для основного текста (Standard), 14-16pt для заголовков (Big). В пределах одной базы необходимо придерживаться либо относительных, либо абсолютных значений размеров для всех стилей (т.к. разные варианты оцениваются приложением впоследствии и результат сравнения Small с 9pt там не совсем ясен, на практике он browser-dependent).
- Level – определяет положение текста по вертикали, используется для указания, что текст должен быть верхним или нижним индексом. Возможные значения – “Normal”, “Sub”, “Sup” (ESldStyleLevelEnum). По умолчанию – “Normal”
- FontFamily – позволяет задать универсальное семейство шрифтов (с засечками, моноширинный и т.п – см. ESldStyleFontFamilyEnum). Например, если указанный в FontName шрифт недоступен на оболочке, то вместо него будет выбран некий дефолтный шрифт и с помощью текущего поля можно указать, как именно надо декорировать этот дефолтный шрифт. Возможные значения – “SansSerif”, “Serif”, “Fantasy”, “Monospace”. На практике этот атрибут практически не используется – для выбора шрифта достаточно использовать значение из FontName т.к. мы в приложениях можем гарантировать, что нужный шрифт есть на целевом устройстве → нет необходимости указывать какое-то дефолтное семейство (но это потенциально актуальная настройка с расчетом на web-версии словарей). Значение по умолчанию – “SansSerif”
- FontName – указывает шрифт, который необходимо использовать при отображении контента тега. Список возможных значений и описания шрифтов даны в этой статье; значение по умолчанию – “DejaVu Sans”. Для шрифтов без засечек рекомендуется придерживаться дефолтного значения (или Helvetica) и использовать DejaVu Serif для шрифтов с засечками.
- Postfix – текст, который будет автоматически добавлен после контента каждого блока, размеченного этим стилем (т.е. есть в статье будет <hw>head</hw><hw>word</hw> и стиль будет иметь постфикс “]”, то отображаться это будет как “head]word]”). Используется обычно для декорирования текста; один из вариантов – добавление combining символов (например, ударения) и оформление отдельной буквы этим стилем (см. также StyleVariant). Ограничение на длину постфикса – 16 символов; значение по умолчанию – пустая строка
- Prefix – текст, который будет автоматически добавлен перед контентом каждого блока заданного стиля. Ограничения аналогичны полю Postfix
- BackgroundImageTop – имя файла картинки (с расширением), которая должна накладываться поверх текста тега (т.е. по смыслу это скорее foregroundImage, изображение переднего плана).
- BackgroundImageBottom – имя файла картинки (с расширением), которая должна отображаться позади текста.Unclickable – флаг неинтерактивности блока текста, при установке отключает кросс-рефы (автоматически сгенерированные ссылки) и прочий функционал, который можем вызываться при клике на контент тега. Возможные значения – “ON”/”OFF” (по умолчанию “OFF”)
- Unclickable – флаг неинтерактивности блока текста, при установке отключает кросс-рефы (автоматически сгенерированные ссылки) и прочий функционал, который можем вызываться при клике на контент тега. Возможные значения – “ON”/”OFF” (по умолчанию “OFF”)
- Usage – семантический код использования данного блока, т.е. какой по смыслу контент (заголовок, пример, перевод и т.п.) в нем содержится. Все возможные значения данного поля собраны в этой статье. Является обязательным полем при описании стиля.