Использование отличного шрифта в HTML, сгенерированном Docbook
Какие шаги я должен предпринять при создании заполнителя в XML-файлах docbook, который будет использовать шрифты потрясающих шрифтов в сгенерированном выводе HTML. Ищите примеры xslt, которые используют потрясающие шрифты в выводе HTML, сгенерированном из DocBook.
1 ответ
Надеюсь, этот ответ не д-р. Если вы хотите, чтобы я разбил это на 3 отдельных ответа, пожалуйста, дайте мне знать.
Опция 1
Первый вариант - использовать HTML-разметку в объявлении сущности, как я впервые упомянул в комментариях.
Pros
- XSLT 1.0, поэтому минимальные изменения XSLT в таблицах стилей документов
Cons
i
HTML-элемент недействителен, поэтому вы будете иметь ошибки проверки в ваших документах- чувствует себя как взломать
Что вам нужно сделать:
Измените объявления вашей сущности, чтобы они выглядели так:
<!ENTITY fa-birthday-cake "<i class='fa fa-birthday-cake' xmlns=''></i>">
Это немного отличается от того, что я имел в своем первом комментарии. Я добавил пустое пространство имен, чтобы
i
Элемент не был автоматически в пространстве имен по умолчанию.Добавьте ссылку на 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"
шаблон.Добавьте шаблон, чтобы соответствовать
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
Вариант 2
Второй вариант - использовать класс шрифта awesome в объявлении сущности и использовать symbol
элемент, со специальным role
атрибут, чтобы держать ссылку.
Pros
- XSLT 1.0, поэтому минимальные изменения XSLT в таблицах стилей документов
symbol
это элемент DocBook, поэтому у вас не должно быть проблем с проверкой
Cons
symbol
может быть недоступен во всех местах, где вам нужно использовать значок шрифта- чувствует себя как хакерское использование
symbol
(вероятно, не такой хакерский, как первый вариант)
Что вам нужно сделать:
Измените объявления вашей сущности, чтобы они выглядели так:
<!ENTITY fa-birthday-cake "fa-birthday-cake">
Добавьте ссылку на 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"
шаблон.Добавьте шаблон, чтобы соответствовать
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
Вариант 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.)
Что вам нужно сделать:
Следите за тем, чтобы объявления вашей организации выглядели следующим образом (на основе вашего другого вопроса https://stackru.com/questions/30055181/how-do-i-insert-fonts-as-an-entity-in-docbook):
<!ENTITY fa-birthday-cake "">
Добавьте ссылку на 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"
шаблон.Изменить
xsl:stylesheet
версия до 2.0.Импортировать
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="<i class='fa fa-birthday-cake'></i>" character=""/> </xsl:character-map> </xsl:stylesheet>
Ссылка на карту персонажа (с
use-character-maps
) вxsl:output
,<xsl:output method="html" encoding="ISO-8859-1" indent="no" use-character-maps="fa"/>
Возможны дополнительные изменения.
Как упомянуто в разделе "минусы", вам может потребоваться внести некоторые изменения в таблицы стилей docbook в зависимости от того, какой процессор вы используете. Я использовал Saxon-HE 9.5.1.3. Я сделал это, продублировав сценарий трансформации HTML в DocBook и изменив процессор.
Пример...
Ввод Docbook
<!DOCTYPE section [
<!ENTITY fa-birthday-cake "">
]>
<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