在docbook xml文件中创建占位符时,我应采取哪些步骤,这些文件将在生成的HTML输出中使用字体真棒字体。 寻找在DocBook生成的HTML输出中使用字体真棒字体的xslt示例。
答案 0 :(得分:2)
希望这个答案不是tl;博士。如果您希望我将其分解为3个单独的答案,请告诉我。
第一个选项是在实体声明中使用HTML标记,就像我在评论中首次提到的那样。
<强>赞成强>
<强>缺点强>
i
html元素无效,因此您的文档中会出现验证错误您需要做什么:
将您的实体声明更改为:
<!ENTITY fa-birthday-cake "<i class='fa fa-birthday-cake' xmlns=''></i>">
这与我在第一次评论中略有不同。我添加了一个空名称空间,以便i
元素不会自动出现在默认名称空间中。
将链接添加到head
中的font-awesome css。 (我把它指向本地的字体很棒。)
<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
第二个选项是在实体声明中使用font awesome类,并使用带有特殊symbol
属性的role
元素来保存引用。
<强>赞成强>
symbol
是一个DocBook元素,因此您不应该有验证问题<强>缺点强>
symbol
可能无法在您使用字体真棒图标所需的所有地方使用symbol
的hacky使用(虽然可能不像第一个选项那样hacky)您需要做什么:
将您的实体声明更改为:
<!ENTITY fa-birthday-cake "fa-birthday-cake">
将链接添加到head
中的font-awesome css。 (我把它指向本地的字体很棒。)
<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
绑定到profile-docbook.xsl中的http://docbook.org/ns/docbook
命名空间
<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
第三个选项是切换到XSLT 2.0并使用xsl:character-map
。
<强>赞成强>
<强>缺点强>
exslt:node-set()
次使用。)您需要做什么:
让您的实体声明看起来像这样(基于您的其他问题https://stackoverflow.com/questions/30055181/how-do-i-insert-fonts-as-an-entity-in-docbook):
<!ENTITY fa-birthday-cake "">
将链接添加到head
中的font-awesome css。 (我把它指向本地的字体很棒。)
<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"/>
可能的其他更改。
如“cons”部分所述,您可能需要根据您使用的处理器对docbook样式表进行一些更改。我使用了Saxon-HE 9.5.1.3。我这样做是通过复制DocBook HTML转换场景和更改处理器来实现的。
示例...
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