Использование отличного шрифта в HTML, сгенерированном Docbook

Какие шаги я должен предпринять при создании заполнителя в XML-файлах docbook, который будет использовать шрифты потрясающих шрифтов в сгенерированном выводе HTML. Ищите примеры xslt, которые используют потрясающие шрифты в выводе HTML, сгенерированном из DocBook.

1 ответ

Решение

Надеюсь, этот ответ не д-р. Если вы хотите, чтобы я разбил это на 3 отдельных ответа, пожалуйста, дайте мне знать.

Опция 1

Первый вариант - использовать HTML-разметку в объявлении сущности, как я впервые упомянул в комментариях.

Pros

  • XSLT 1.0, поэтому минимальные изменения XSLT в таблицах стилей документов

Cons

  • i HTML-элемент недействителен, поэтому вы будете иметь ошибки проверки в ваших документах
  • чувствует себя как взломать

Что вам нужно сделать:

  1. Измените объявления вашей сущности, чтобы они выглядели так:

    <!ENTITY fa-birthday-cake "<i class='fa fa-birthday-cake' xmlns=''></i>">
    

    Это немного отличается от того, что я имел в своем первом комментарии. Я добавил пустое пространство имен, чтобы i Элемент не был автоматически в пространстве имен по умолчанию.

  2. Добавьте ссылку на font-awesome css в head, (У меня есть это, указывая на шрифт удивительный локально.)

    <link rel="stylesheet" href="font-awesome-4.3.0/css/font-awesome.min.css"/>
    

    Для тестирования я модифицировал frameworks/docbook/xsl/html/profile-docbook.xsl, Я добавил link вокруг линии 460 в match="*" mode="process.root" шаблон.

  3. Добавьте шаблон, чтобы соответствовать i элемент, так что он не будет заменен.

    <xsl:template match="i">
        <xsl:copy-of select="."/>
    </xsl:template>
    

Пример...

Ввод Docbook

<!DOCTYPE section [
<!ENTITY fa-birthday-cake "<i class='fa fa-birthday-cake' xmlns=''></i>">
]>
<section xmlns="http://docbook.org/ns/docbook" version="5.0">
    <title>Section Template Title</title>
    <para>birthday cake: &fa-birthday-cake;</para>
</section>

Вывод HTML (используя сценарий преобразования DocBook HTML)

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <link rel="stylesheet" href="font-awesome-4.3.0/css/font-awesome.min.css">
        <title>Section Template Title</title>
        <meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
    </head>
    <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
        <div class="section">
            <div class="titlepage">
                <div>
                    <div>
                        <h2 class="title" style="clear: both">
                        <a name="d56e3"></a>Section Template Title</h2>
                    </div>
                </div>
                <div></div>
                <hr>
            </div>
            <p>birthday cake: <i class='fa fa-birthday-cake'></i></p>
        </div>
    </body>
</html>

Rendererd HTML

Визуализированный HTML

Вариант 2

Второй вариант - использовать класс шрифта awesome в объявлении сущности и использовать symbol элемент, со специальным role атрибут, чтобы держать ссылку.

Pros

  • XSLT 1.0, поэтому минимальные изменения XSLT в таблицах стилей документов
  • symbol это элемент DocBook, поэтому у вас не должно быть проблем с проверкой

Cons

  • symbol может быть недоступен во всех местах, где вам нужно использовать значок шрифта
  • чувствует себя как хакерское использование symbol (вероятно, не такой хакерский, как первый вариант)

Что вам нужно сделать:

  1. Измените объявления вашей сущности, чтобы они выглядели так:

    <!ENTITY fa-birthday-cake "fa-birthday-cake">
    
  2. Добавьте ссылку на font-awesome css в head, (У меня есть это, указывая на шрифт удивительный локально.)

    <link rel="stylesheet" href="font-awesome-4.3.0/css/font-awesome.min.css"/>
    

    Для тестирования я модифицировал frameworks/docbook/xsl/html/profile-docbook.xsl, Я добавил link вокруг линии 460 в match="*" mode="process.root" шаблон.

  3. Добавьте шаблон, чтобы соответствовать symbol элемент с 'fa' role и вывести i, (d связан с http://docbook.org/ns/docbook пространство имен в profile-docbook.xsl)

    <xsl:template match="d:symbol[@role='fa']">
        <i class="fa {.}"></i>
    </xsl:template>
    

Пример...

Ввод Docbook

<!DOCTYPE section [
<!ENTITY fa-birthday-cake "fa-birthday-cake">
]>
<section xmlns="http://docbook.org/ns/docbook" version="5.0">
    <title>Section Template Title</title>
    <para>birthday cake: <symbol role="fa">&fa-birthday-cake;</symbol></para>
</section>

Вывод HTML (используя сценарий преобразования DocBook HTML)

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <link rel="stylesheet" href="font-awesome-4.3.0/css/font-awesome.min.css">
        <title>Section Template Title</title>
        <meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
    </head>
    <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
        <div class="section">
            <div class="titlepage">
                <div>
                    <div>
                        <h2 class="title" style="clear: both">
                        <a name="d56e3"></a>Section Template Title</h2>
                    </div>
                </div>
                <div></div>
                <hr>
            </div>
            <p>birthday cake: <i class='fa fa-birthday-cake'></i></p>
        </div>
    </body>
</html>

Rendererd HTML

Визуализированный HTML

Вариант 3

Третий вариант - переключиться на XSLT 2.0 и использовать xsl:character-map,

Pros

  • Простая концепция
  • Никакой дополнительной разметки в экземпляре docbook или в объявлениях сущностей не требуется
  • Чувствует себя хорошо (не хаки)

Cons

  • XSLT 2.0, поэтому нужно будет использовать процессор 2.0
  • Могут быть дополнительные изменения XSLT после перехода на процессор 2.0. (Например, в моем тестировании мне пришлось удалить 3 exslt:node-set() использует в profile-docbook.xsl.)

Что вам нужно сделать:

  1. Следите за тем, чтобы объявления вашей организации выглядели следующим образом (на основе вашего другого вопроса https://stackru.com/questions/30055181/how-do-i-insert-fonts-as-an-entity-in-docbook):

    <!ENTITY fa-birthday-cake "&#xf1fd;">
    
  2. Добавьте ссылку на font-awesome css в head, (У меня есть это, указывая на шрифт удивительный локально.)

    <link rel="stylesheet" href="font-awesome-4.3.0/css/font-awesome.min.css"/>
    

    Для тестирования я модифицировал frameworks/docbook/xsl/html/profile-docbook.xsl, Я добавил link вокруг линии 460 в match="*" mode="process.root" шаблон.

  3. Изменить xsl:stylesheet версия до 2.0.

  4. Импортировать xsl:character-map,

    <xsl:include href="font-awesome.xsl"/>
    

    Я включил пример "font-awesome.xsl". У меня есть полная версия, основанная на шрифт-листе сегодня (2015-05-06). Добавление всего содержимого подталкивает мой ответ к пределу символов; дайте мне знать, если вам это нужно.

    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:character-map name="fa">
            <xsl:output-character string="&lt;i class='fa fa-birthday-cake'&gt;&lt;/i&gt;" character="&#xf1fd;"/>
        </xsl:character-map>
    </xsl:stylesheet>
    
  5. Ссылка на карту персонажа (с use-character-maps) в xsl:output,

    <xsl:output method="html" encoding="ISO-8859-1" indent="no" use-character-maps="fa"/>
    
  6. Возможны дополнительные изменения.

    Как упомянуто в разделе "минусы", вам может потребоваться внести некоторые изменения в таблицы стилей docbook в зависимости от того, какой процессор вы используете. Я использовал Saxon-HE 9.5.1.3. Я сделал это, продублировав сценарий трансформации HTML в DocBook и изменив процессор.

Пример...

Ввод Docbook

<!DOCTYPE section [
<!ENTITY fa-birthday-cake "&#xf1fd;">
]>
<section xmlns="http://docbook.org/ns/docbook" version="5.0">
    <title>Section Template Title</title>
    <para>birthday cake: &fa-birthday-cake;</para>
</section>

Вывод HTML (с использованием модифицированного сценария преобразования DocBook HTML)

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <link rel="stylesheet" href="font-awesome-4.3.0/css/font-awesome.min.css">
        <title>Section Template Title</title>
        <meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
    </head>
    <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
        <div class="section">
            <div class="titlepage">
                <div>
                    <div>
                        <h2 class="title" style="clear: both">
                        <a name="d56e3"></a>Section Template Title</h2>
                    </div>
                </div>
                <div></div>
                <hr>
            </div>
            <p>birthday cake: <i class='fa fa-birthday-cake'></i></p>
        </div>
    </body>
</html>

Rendererd HTML

Визуализированный HTML

Другие вопросы по тегам