docbook_xsl_wrapper 0.1.2 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (170) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/CHANGELOG +41 -0
  4. data/README.md +9 -17
  5. data/bin/docbook_xsl_wrapper +9 -14
  6. data/docbook_xsl_wrapper.gemspec +8 -7
  7. data/lib/docbook_xsl_wrapper.rb +24 -1
  8. data/lib/docbook_xsl_wrapper/epub.rb +124 -122
  9. data/lib/docbook_xsl_wrapper/options.rb +1 -1
  10. data/lib/docbook_xsl_wrapper/validate.rb +22 -0
  11. data/lib/docbook_xsl_wrapper/version.rb +1 -1
  12. data/schema/docbookxi.rng +18654 -0
  13. data/spec/docbook_xsl_wrapper/validate_spec.rb +64 -0
  14. data/xsl/AUTHORS +4 -0
  15. data/xsl/COPYING +48 -0
  16. data/xsl/REVISION +1 -0
  17. data/xsl/VERSION.xsl +115 -0
  18. data/xsl/common/addns.xsl +124 -0
  19. data/xsl/common/af.xml +1272 -0
  20. data/xsl/common/am.xml +1272 -0
  21. data/xsl/common/ar.xml +1272 -0
  22. data/xsl/common/as.xml +703 -0
  23. data/xsl/common/ast.xml +703 -0
  24. data/xsl/common/autoidx-kimber.xsl +45 -0
  25. data/xsl/common/autoidx-kosek.xsl +155 -0
  26. data/xsl/common/az.xml +715 -0
  27. data/xsl/common/bg.xml +767 -0
  28. data/xsl/common/bn.xml +1272 -0
  29. data/xsl/common/bn_in.xml +703 -0
  30. data/xsl/common/bs.xml +705 -0
  31. data/xsl/common/ca.xml +703 -0
  32. data/xsl/common/charmap.xsl +222 -0
  33. data/xsl/common/common.xsl +2129 -0
  34. data/xsl/common/cs.xml +743 -0
  35. data/xsl/common/cy.xml +1288 -0
  36. data/xsl/common/da.xml +707 -0
  37. data/xsl/common/de.xml +709 -0
  38. data/xsl/common/el.xml +772 -0
  39. data/xsl/common/en.xml +1272 -0
  40. data/xsl/common/entities.ent +67 -0
  41. data/xsl/common/eo.xml +1272 -0
  42. data/xsl/common/es.xml +719 -0
  43. data/xsl/common/et.xml +1272 -0
  44. data/xsl/common/eu.xml +1272 -0
  45. data/xsl/common/fa.xml +703 -0
  46. data/xsl/common/fi.xml +713 -0
  47. data/xsl/common/fr.xml +733 -0
  48. data/xsl/common/ga.xml +1272 -0
  49. data/xsl/common/gentext.xsl +855 -0
  50. data/xsl/common/gl.xml +1272 -0
  51. data/xsl/common/gu.xml +703 -0
  52. data/xsl/common/he.xml +1272 -0
  53. data/xsl/common/hi.xml +703 -0
  54. data/xsl/common/hr.xml +705 -0
  55. data/xsl/common/hu.xml +721 -0
  56. data/xsl/common/id.xml +1272 -0
  57. data/xsl/common/insertfile.xsl +113 -0
  58. data/xsl/common/is.xml +715 -0
  59. data/xsl/common/it.xml +1272 -0
  60. data/xsl/common/ja.xml +703 -0
  61. data/xsl/common/ka.xml +743 -0
  62. data/xsl/common/kn.xml +1272 -0
  63. data/xsl/common/ko.xml +1272 -0
  64. data/xsl/common/ky.xml +775 -0
  65. data/xsl/common/l10n.dtd +64 -0
  66. data/xsl/common/l10n.xml +78 -0
  67. data/xsl/common/l10n.xsl +598 -0
  68. data/xsl/common/la.xml +1272 -0
  69. data/xsl/common/labels.xsl +933 -0
  70. data/xsl/common/lt.xml +721 -0
  71. data/xsl/common/lv.xml +1272 -0
  72. data/xsl/common/ml.xml +703 -0
  73. data/xsl/common/mn.xml +773 -0
  74. data/xsl/common/mr.xml +703 -0
  75. data/xsl/common/nb.xml +1272 -0
  76. data/xsl/common/nds.xml +709 -0
  77. data/xsl/common/nl.xml +703 -0
  78. data/xsl/common/nn.xml +1272 -0
  79. data/xsl/common/olink.xsl +1284 -0
  80. data/xsl/common/or.xml +1272 -0
  81. data/xsl/common/pa.xml +703 -0
  82. data/xsl/common/pi.xml +168 -0
  83. data/xsl/common/pi.xsl +347 -0
  84. data/xsl/common/pl.xml +721 -0
  85. data/xsl/common/pt.xml +1272 -0
  86. data/xsl/common/pt_br.xml +1272 -0
  87. data/xsl/common/refentry.xsl +1353 -0
  88. data/xsl/common/ro.xml +1272 -0
  89. data/xsl/common/ru.xml +769 -0
  90. data/xsl/common/sk.xml +1272 -0
  91. data/xsl/common/sl.xml +1272 -0
  92. data/xsl/common/sq.xml +1272 -0
  93. data/xsl/common/sr.xml +763 -0
  94. data/xsl/common/sr_Latn.xml +722 -0
  95. data/xsl/common/subtitles.xsl +181 -0
  96. data/xsl/common/sv.xml +707 -0
  97. data/xsl/common/ta.xml +703 -0
  98. data/xsl/common/table.xsl +515 -0
  99. data/xsl/common/targetdatabase.dtd +49 -0
  100. data/xsl/common/targets.xsl +338 -0
  101. data/xsl/common/te.xml +703 -0
  102. data/xsl/common/th.xml +1272 -0
  103. data/xsl/common/titles.xsl +850 -0
  104. data/xsl/common/tl.xml +1272 -0
  105. data/xsl/common/tr.xml +709 -0
  106. data/xsl/common/uk.xml +769 -0
  107. data/xsl/common/ur.xml +705 -0
  108. data/xsl/common/utility.xsl +291 -0
  109. data/xsl/common/vi.xml +1272 -0
  110. data/xsl/common/xh.xml +1272 -0
  111. data/xsl/common/zh.xml +703 -0
  112. data/xsl/common/zh_cn.xml +703 -0
  113. data/xsl/common/zh_tw.xml +703 -0
  114. data/xsl/epub/docbook.xsl +1769 -0
  115. data/xsl/epub3/chunk.xsl +30 -0
  116. data/xsl/epub3/docbook-epub.css.xml +142 -0
  117. data/xsl/epub3/docbook.xsl +20 -0
  118. data/xsl/epub3/epub3-chunk-mods.xsl +52 -0
  119. data/xsl/epub3/epub3-element-mods.xsl +2533 -0
  120. data/xsl/epub3/titlepage.templates.xml +712 -0
  121. data/xsl/epub3/titlepage.templates.xsl +3842 -0
  122. data/xsl/lib/lib.xsl +533 -0
  123. data/xsl/xhtml/admon.xsl +142 -0
  124. data/xsl/xhtml/annotations.xsl +160 -0
  125. data/xsl/xhtml/autoidx.xsl +831 -0
  126. data/xsl/xhtml/autotoc.xsl +706 -0
  127. data/xsl/xhtml/biblio-iso690.xsl +1302 -0
  128. data/xsl/xhtml/biblio.xsl +1371 -0
  129. data/xsl/xhtml/block.xsl +584 -0
  130. data/xsl/xhtml/callout.xsl +210 -0
  131. data/xsl/xhtml/chunk-code.xsl +675 -0
  132. data/xsl/xhtml/chunk-common.xsl +1627 -0
  133. data/xsl/xhtml/chunker.xsl +317 -0
  134. data/xsl/xhtml/component.xsl +440 -0
  135. data/xsl/xhtml/division.xsl +214 -0
  136. data/xsl/xhtml/ebnf.xsl +331 -0
  137. data/xsl/xhtml/footnote.xsl +346 -0
  138. data/xsl/xhtml/formal.xsl +496 -0
  139. data/xsl/xhtml/glossary.xsl +602 -0
  140. data/xsl/xhtml/graphics.xsl +1537 -0
  141. data/xsl/xhtml/html-rtf.xsl +321 -0
  142. data/xsl/xhtml/html.xsl +690 -0
  143. data/xsl/xhtml/htmltbl.xsl +102 -0
  144. data/xsl/xhtml/index.xsl +264 -0
  145. data/xsl/xhtml/info.xsl +48 -0
  146. data/xsl/xhtml/inline.xsl +1508 -0
  147. data/xsl/xhtml/its.xsl +109 -0
  148. data/xsl/xhtml/keywords.xsl +38 -0
  149. data/xsl/xhtml/lists.xsl +1227 -0
  150. data/xsl/xhtml/math.xsl +286 -0
  151. data/xsl/xhtml/param.xsl +449 -0
  152. data/xsl/xhtml/pi.xsl +1237 -0
  153. data/xsl/xhtml/qandaset.xsl +440 -0
  154. data/xsl/xhtml/refentry.xsl +307 -0
  155. data/xsl/xhtml/sections.xsl +564 -0
  156. data/xsl/xhtml/synop.xsl +1623 -0
  157. data/xsl/xhtml/table.xsl +1179 -0
  158. data/xsl/xhtml/task.xsl +76 -0
  159. data/xsl/xhtml/titlepage.templates.xsl +4005 -0
  160. data/xsl/xhtml/titlepage.xsl +1108 -0
  161. data/xsl/xhtml/toc.xsl +334 -0
  162. data/xsl/xhtml/verbatim.xsl +389 -0
  163. data/xsl/xhtml/xref.xsl +1268 -0
  164. data/xsl/xhtml5/docbook.xsl +22 -0
  165. data/xsl/xhtml5/html5-chunk-mods.xsl +112 -0
  166. data/xsl/xhtml5/html5-element-mods.xsl +791 -0
  167. data/xsl/xhtml5/xhtml-docbook.xsl +531 -0
  168. metadata +207 -27
  169. data/.rvmrc +0 -48
  170. data/xslt/obfuscate.xsl +0 -12
@@ -0,0 +1,64 @@
1
+ <!ENTITY % prefix "l">
2
+
3
+ <!ENTITY % xmlns "xmlns:%prefix;">
4
+ <!ENTITY % uri "'http://docbook.sourceforge.net/xmlns/l10n/1.0'">
5
+
6
+ <!ENTITY % i18n "%prefix;:i18n">
7
+ <!ENTITY % l10n "%prefix;:l10n">
8
+ <!ENTITY % gentext "%prefix;:gentext">
9
+ <!ENTITY % dingbat "%prefix;:dingbat">
10
+ <!ENTITY % context "%prefix;:context">
11
+ <!ENTITY % template "%prefix;:template">
12
+ <!ENTITY % letters "%prefix;:letters">
13
+ <!ENTITY % l "%prefix;:l">
14
+ <!ENTITY % lang "lang NMTOKEN #IMPLIED">
15
+
16
+ <!ELEMENT %i18n; ((%l10n;)+)>
17
+ <!ATTLIST %i18n;
18
+ %xmlns; CDATA #FIXED %uri;
19
+ >
20
+
21
+ <!ELEMENT %l10n; (%gentext;|%dingbat;|%context;|%letters;)*>
22
+ <!ATTLIST %l10n;
23
+ %xmlns; CDATA #FIXED %uri;
24
+ language CDATA #REQUIRED
25
+ english-language-name CDATA #IMPLIED
26
+ href CDATA #IMPLIED
27
+ >
28
+
29
+ <!ELEMENT %gentext; EMPTY>
30
+ <!ATTLIST %gentext;
31
+ %lang;
32
+ key CDATA #REQUIRED
33
+ text CDATA #REQUIRED
34
+ >
35
+
36
+ <!ELEMENT %dingbat; EMPTY>
37
+ <!ATTLIST %dingbat;
38
+ %lang;
39
+ key CDATA #REQUIRED
40
+ text CDATA #REQUIRED
41
+ >
42
+
43
+ <!ELEMENT %context; ((%template;)+)>
44
+ <!ATTLIST %context;
45
+ name CDATA #REQUIRED
46
+ >
47
+
48
+ <!ELEMENT %template; EMPTY>
49
+ <!ATTLIST %template;
50
+ %lang;
51
+ name CDATA #REQUIRED
52
+ text CDATA #REQUIRED
53
+ style CDATA #IMPLIED
54
+ >
55
+
56
+ <!ELEMENT %letters; ((%l;)+)>
57
+ <!ATTLIST %letters;
58
+ %lang;
59
+ >
60
+
61
+ <!ELEMENT %l; (#PCDATA)>
62
+ <!ATTLIST %l;
63
+ i CDATA #REQUIRED
64
+ >
@@ -0,0 +1,78 @@
1
+ <?xml version='1.0'?>
2
+ <!DOCTYPE l:i18n SYSTEM "l10n.dtd">
3
+ <l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
4
+ <l:l10n language="af" href="af.xml"/>
5
+ <l:l10n language="am" href="am.xml"/>
6
+ <l:l10n language="ar" href="ar.xml"/>
7
+ <l:l10n language="as" href="as.xml"/>
8
+ <l:l10n language="ast" href="ast.xml"/>
9
+ <l:l10n language="az" href="az.xml"/>
10
+ <l:l10n language="bg" href="bg.xml"/>
11
+ <l:l10n language="bn" href="bn.xml"/>
12
+ <l:l10n language="bn_in" href="bn_in.xml"/>
13
+ <l:l10n language="bs" href="bs.xml"/>
14
+ <l:l10n language="ca" href="ca.xml"/>
15
+ <l:l10n language="cs" href="cs.xml"/>
16
+ <l:l10n language="cy" href="cy.xml"/>
17
+ <l:l10n language="da" href="da.xml"/>
18
+ <l:l10n language="de" href="de.xml"/>
19
+ <l:l10n language="el" href="el.xml"/>
20
+ <l:l10n language="en" href="en.xml"/>
21
+ <l:l10n language="eo" href="eo.xml"/>
22
+ <l:l10n language="es" href="es.xml"/>
23
+ <l:l10n language="et" href="et.xml"/>
24
+ <l:l10n language="eu" href="eu.xml"/>
25
+ <l:l10n language="fa" href="fa.xml"/>
26
+ <l:l10n language="fi" href="fi.xml"/>
27
+ <l:l10n language="fr" href="fr.xml"/>
28
+ <l:l10n language="ga" href="ga.xml"/>
29
+ <l:l10n language="gl" href="gl.xml"/>
30
+ <l:l10n language="gu" href="gu.xml"/>
31
+ <l:l10n language="he" href="he.xml"/>
32
+ <l:l10n language="hi" href="hi.xml"/>
33
+ <l:l10n language="hr" href="hr.xml"/>
34
+ <l:l10n language="hu" href="hu.xml"/>
35
+ <l:l10n language="id" href="id.xml"/>
36
+ <l:l10n language="is" href="is.xml"/>
37
+ <l:l10n language="it" href="it.xml"/>
38
+ <l:l10n language="ja" href="ja.xml"/>
39
+ <l:l10n language="ka" href="ka.xml"/>
40
+ <l:l10n language="kn" href="kn.xml"/>
41
+ <l:l10n language="ko" href="ko.xml"/>
42
+ <l:l10n language="ky" href="ky.xml"/>
43
+ <l:l10n language="la" href="la.xml"/>
44
+ <l:l10n language="lt" href="lt.xml"/>
45
+ <l:l10n language="lv" href="lv.xml"/>
46
+ <l:l10n language="ml" href="ml.xml"/>
47
+ <l:l10n language="mn" href="mn.xml"/>
48
+ <l:l10n language="mr" href="mr.xml"/>
49
+ <l:l10n language="nb" href="nb.xml"/>
50
+ <l:l10n language="nds" href="nds.xml"/>
51
+ <l:l10n language="nl" href="nl.xml"/>
52
+ <l:l10n language="nn" href="nn.xml"/>
53
+ <l:l10n language="or" href="or.xml"/>
54
+ <l:l10n language="pa" href="pa.xml"/>
55
+ <l:l10n language="pl" href="pl.xml"/>
56
+ <l:l10n language="pt" href="pt.xml"/>
57
+ <l:l10n language="pt_br" href="pt_br.xml"/>
58
+ <l:l10n language="ro" href="ro.xml"/>
59
+ <l:l10n language="ru" href="ru.xml"/>
60
+ <l:l10n language="sk" href="sk.xml"/>
61
+ <l:l10n language="sl" href="sl.xml"/>
62
+ <l:l10n language="sq" href="sq.xml"/>
63
+ <l:l10n language="sr" href="sr.xml"/>
64
+ <l:l10n language="sr_latn" href="sr_Latn.xml"/>
65
+ <l:l10n language="sv" href="sv.xml"/>
66
+ <l:l10n language="ta" href="ta.xml"/>
67
+ <l:l10n language="te" href="te.xml"/>
68
+ <l:l10n language="th" href="th.xml"/>
69
+ <l:l10n language="tl" href="tl.xml"/>
70
+ <l:l10n language="tr" href="tr.xml"/>
71
+ <l:l10n language="uk" href="uk.xml"/>
72
+ <l:l10n language="ur" href="ur.xml"/>
73
+ <l:l10n language="vi" href="vi.xml"/>
74
+ <l:l10n language="xh" href="xh.xml"/>
75
+ <l:l10n language="zh" href="zh.xml"/>
76
+ <l:l10n language="zh_cn" href="zh_cn.xml"/>
77
+ <l:l10n language="zh_tw" href="zh_tw.xml"/>
78
+ </l:i18n>
@@ -0,0 +1,598 @@
1
+ <?xml version='1.0'?>
2
+ <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3
+ xmlns:d="http://docbook.org/ns/docbook"
4
+ xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0"
5
+ exclude-result-prefixes="l d"
6
+ version='1.0'>
7
+
8
+ <!-- ********************************************************************
9
+ $Id: l10n.xsl 9708 2013-01-22 13:41:24Z kosek $
10
+ ********************************************************************
11
+
12
+ This file is part of the XSL DocBook Stylesheet distribution.
13
+ See ../README or http://docbook.sf.net/release/xsl/current/ for
14
+ copyright and other information.
15
+
16
+ This file contains localization templates (for internationalization)
17
+ ******************************************************************** -->
18
+
19
+ <xsl:param name="l10n.xml" select="document('../common/l10n.xml')"/>
20
+ <xsl:param name="local.l10n.xml" select="document('')"/>
21
+ <xsl:param name="empty.local.l10n.xml" select="not($local.l10n.xml//l:l10n)"/>
22
+
23
+ <xsl:key name="l10n-lang" match="l:l10n" use="@language"/>
24
+ <xsl:key name="l10n-gentext" match="l:l10n/l:gentext" use="@key"/>
25
+ <xsl:key name="l10n-dingbat" match="l:l10n/l:dingbat" use="@key"/>
26
+ <xsl:key name="l10n-context" match="l:l10n/l:context" use="@name"/>
27
+ <xsl:key name="l10n-template" match="l:l10n/l:context/l:template[not(@style)]" use="concat(../@name, '#', @name)"/>
28
+ <xsl:key name="l10n-template-style" match="l:l10n/l:context/l:template[@style]" use="concat(../@name, '#', @name, '#', @style)"/>
29
+
30
+ <xsl:template name="l10n.language">
31
+ <xsl:param name="target" select="."/>
32
+ <xsl:param name="xref-context" select="false()"/>
33
+
34
+ <xsl:variable name="mc-language">
35
+ <xsl:choose>
36
+ <xsl:when test="$l10n.gentext.language != ''">
37
+ <xsl:value-of select="$l10n.gentext.language"/>
38
+ </xsl:when>
39
+
40
+ <xsl:when test="$xref-context or $l10n.gentext.use.xref.language != 0">
41
+ <!-- can't do this one step: attributes are unordered! -->
42
+ <xsl:variable name="lang-scope"
43
+ select="$target/ancestor-or-self::*
44
+ [@lang or @xml:lang][1]"/>
45
+ <xsl:variable name="lang-attr"
46
+ select="($lang-scope/@lang | $lang-scope/@xml:lang)[1]"/>
47
+ <xsl:choose>
48
+ <xsl:when test="string($lang-attr) = ''">
49
+ <xsl:value-of select="$l10n.gentext.default.language"/>
50
+ </xsl:when>
51
+ <xsl:otherwise>
52
+ <xsl:value-of select="$lang-attr"/>
53
+ </xsl:otherwise>
54
+ </xsl:choose>
55
+ </xsl:when>
56
+
57
+ <xsl:otherwise>
58
+ <!-- can't do this one step: attributes are unordered! -->
59
+ <xsl:variable name="lang-scope"
60
+ select="$target/ancestor-or-self::*
61
+ [@lang or @xml:lang][1]"/>
62
+ <xsl:variable name="lang-attr"
63
+ select="($lang-scope/@lang | $lang-scope/@xml:lang)[1]"/>
64
+
65
+ <xsl:choose>
66
+ <xsl:when test="string($lang-attr) = ''">
67
+ <xsl:value-of select="$l10n.gentext.default.language"/>
68
+ </xsl:when>
69
+ <xsl:otherwise>
70
+ <xsl:value-of select="$lang-attr"/>
71
+ </xsl:otherwise>
72
+ </xsl:choose>
73
+ </xsl:otherwise>
74
+ </xsl:choose>
75
+ </xsl:variable>
76
+
77
+ <xsl:variable name="language" select="translate($mc-language,
78
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZ-',
79
+ 'abcdefghijklmnopqrstuvwxyz_')"/>
80
+
81
+ <xsl:for-each select="$l10n.xml"> <!-- We need to change context in order to get key work -->
82
+ <xsl:choose>
83
+ <xsl:when test="key('l10n-lang', $language)">
84
+ <xsl:value-of select="$language"/>
85
+ </xsl:when>
86
+ <!-- try just the lang code without country -->
87
+ <xsl:when test="key('l10n-lang', substring-before($language,'_'))">
88
+ <xsl:value-of select="substring-before($language,'_')"/>
89
+ </xsl:when>
90
+ <!-- or use the default -->
91
+ <xsl:otherwise>
92
+ <xsl:message>
93
+ <xsl:text>No localization exists for "</xsl:text>
94
+ <xsl:value-of select="$language"/>
95
+ <xsl:text>" or "</xsl:text>
96
+ <xsl:value-of select="substring-before($language,'_')"/>
97
+ <xsl:text>". Using default "</xsl:text>
98
+ <xsl:value-of select="$l10n.gentext.default.language"/>
99
+ <xsl:text>".</xsl:text>
100
+ </xsl:message>
101
+ <xsl:value-of select="$l10n.gentext.default.language"/>
102
+ </xsl:otherwise>
103
+ </xsl:choose>
104
+ </xsl:for-each>
105
+ </xsl:template>
106
+
107
+ <xsl:template name="l10n.language.name">
108
+ <xsl:param name="lang">
109
+ <xsl:call-template name="l10n.language"/>
110
+ </xsl:param>
111
+
112
+ <xsl:for-each select="$l10n.xml">
113
+ <xsl:value-of
114
+ select="document(key('l10n-lang', $lang)/@href)/l:l10n/@english-language-name"/>
115
+ </xsl:for-each>
116
+ </xsl:template>
117
+
118
+ <xsl:template name="language.attribute">
119
+ <xsl:param name="node" select="."/>
120
+
121
+ <xsl:variable name="language">
122
+ <xsl:choose>
123
+ <xsl:when test="$l10n.gentext.language != ''">
124
+ <xsl:value-of select="$l10n.gentext.language"/>
125
+ </xsl:when>
126
+
127
+ <xsl:otherwise>
128
+ <!-- can't do this one step: attributes are unordered! -->
129
+ <xsl:variable name="lang-scope"
130
+ select="$node/ancestor-or-self::*
131
+ [@lang or @xml:lang][1]"/>
132
+ <xsl:variable name="lang-attr"
133
+ select="($lang-scope/@lang | $lang-scope/@xml:lang)[1]"/>
134
+
135
+ <xsl:choose>
136
+ <xsl:when test="string($lang-attr) = ''">
137
+ <xsl:value-of select="$l10n.gentext.default.language"/>
138
+ </xsl:when>
139
+ <xsl:otherwise>
140
+ <xsl:value-of select="$lang-attr"/>
141
+ </xsl:otherwise>
142
+ </xsl:choose>
143
+ </xsl:otherwise>
144
+ </xsl:choose>
145
+ </xsl:variable>
146
+
147
+ <xsl:if test="$language != ''">
148
+ <xsl:attribute name="lang">
149
+ <xsl:choose>
150
+ <xsl:when test="$l10n.lang.value.rfc.compliant != 0">
151
+ <xsl:value-of select="translate($language, '_', '-')"/>
152
+ </xsl:when>
153
+ <xsl:otherwise>
154
+ <xsl:value-of select="$language"/>
155
+ </xsl:otherwise>
156
+ </xsl:choose>
157
+ </xsl:attribute>
158
+ </xsl:if>
159
+
160
+ <!-- FIXME: This is sort of hack, but it was the easiest way to add at least partial support for dir attribute -->
161
+ <xsl:copy-of select="ancestor-or-self::*[@dir][1]/@dir"/>
162
+ </xsl:template>
163
+
164
+ <!-- Duplication of language.attribute template to allow for xml:lang attribute
165
+ creation for XHTML 1.1 and epub target -->
166
+ <xsl:template name="xml.language.attribute">
167
+ <xsl:param name="node" select="."/>
168
+
169
+ <xsl:variable name="language">
170
+ <xsl:choose>
171
+ <xsl:when test="$l10n.gentext.language != ''">
172
+ <xsl:value-of select="$l10n.gentext.language"/>
173
+ </xsl:when>
174
+
175
+ <xsl:otherwise>
176
+ <!-- can't do this one step: attributes are unordered! -->
177
+ <xsl:variable name="lang-scope"
178
+ select="$node/ancestor-or-self::*
179
+ [@lang or @xml:lang][1]"/>
180
+ <xsl:variable name="lang-attr"
181
+ select="($lang-scope/@lang | $lang-scope/@xml:lang)[1]"/>
182
+
183
+ <xsl:choose>
184
+ <xsl:when test="string($lang-attr) = ''">
185
+ <xsl:value-of select="$l10n.gentext.default.language"/>
186
+ </xsl:when>
187
+ <xsl:otherwise>
188
+ <xsl:value-of select="$lang-attr"/>
189
+ </xsl:otherwise>
190
+ </xsl:choose>
191
+ </xsl:otherwise>
192
+ </xsl:choose>
193
+ </xsl:variable>
194
+
195
+ <xsl:if test="$language != ''">
196
+ <xsl:attribute name="xml:lang">
197
+ <xsl:choose>
198
+ <xsl:when test="$l10n.lang.value.rfc.compliant != 0">
199
+ <xsl:value-of select="translate($language, '_', '-')"/>
200
+ </xsl:when>
201
+ <xsl:otherwise>
202
+ <xsl:value-of select="$language"/>
203
+ </xsl:otherwise>
204
+ </xsl:choose>
205
+ </xsl:attribute>
206
+ </xsl:if>
207
+
208
+ <!-- FIXME: This is sort of hack, but it was the easiest way to add at least partial support for dir attribute -->
209
+ <xsl:copy-of select="ancestor-or-self::*[@dir][1]/@dir"/>
210
+ </xsl:template>
211
+
212
+ <xsl:template name="gentext">
213
+ <xsl:param name="key" select="local-name(.)"/>
214
+ <xsl:param name="lang">
215
+ <xsl:call-template name="l10n.language"/>
216
+ </xsl:param>
217
+
218
+ <xsl:for-each select="$l10n.xml"> <!-- We need to switch context in order to make key() work -->
219
+ <xsl:for-each select="document(key('l10n-lang', $lang)/@href)">
220
+ <xsl:variable name="local.l10n.gentext"
221
+ select="($local.l10n.xml//l:i18n/l:l10n[@language=$lang]/l:gentext[@key=$key])[1]"/>
222
+
223
+ <xsl:variable name="l10n.gentext"
224
+ select="key('l10n-gentext', $key)[1]"/>
225
+
226
+ <xsl:choose>
227
+ <xsl:when test="$local.l10n.gentext">
228
+ <xsl:value-of select="$local.l10n.gentext/@text"/>
229
+ </xsl:when>
230
+ <xsl:when test="$l10n.gentext">
231
+ <xsl:value-of select="$l10n.gentext/@text"/>
232
+ </xsl:when>
233
+ <xsl:otherwise>
234
+ <xsl:message>
235
+ <xsl:text>No "</xsl:text>
236
+ <xsl:value-of select="$lang"/>
237
+ <xsl:text>" localization of "</xsl:text>
238
+ <xsl:value-of select="$key"/>
239
+ <xsl:text>" exists</xsl:text>
240
+ <xsl:choose>
241
+ <xsl:when test="$lang = 'en'">
242
+ <xsl:text>.</xsl:text>
243
+ </xsl:when>
244
+ <xsl:otherwise>
245
+ <xsl:text>; using "en".</xsl:text>
246
+ </xsl:otherwise>
247
+ </xsl:choose>
248
+ </xsl:message>
249
+
250
+ <xsl:for-each select="$l10n.xml"> <!-- We need to switch context in order to make key() work -->
251
+ <xsl:for-each select="document(key('l10n-lang', 'en')/@href)">
252
+ <xsl:value-of select="key('l10n-gentext', $key)[1]/@text"/>
253
+ </xsl:for-each>
254
+ </xsl:for-each>
255
+ </xsl:otherwise>
256
+ </xsl:choose>
257
+ </xsl:for-each>
258
+ </xsl:for-each>
259
+ </xsl:template>
260
+
261
+ <xsl:template name="gentext.element.name">
262
+ <xsl:param name="element.name" select="local-name(.)"/>
263
+ <xsl:param name="lang">
264
+ <xsl:call-template name="l10n.language"/>
265
+ </xsl:param>
266
+
267
+ <xsl:call-template name="gentext">
268
+ <xsl:with-param name="key" select="$element.name"/>
269
+ <xsl:with-param name="lang" select="$lang"/>
270
+ </xsl:call-template>
271
+ </xsl:template>
272
+
273
+ <xsl:template name="gentext.space">
274
+ <xsl:text> </xsl:text>
275
+ </xsl:template>
276
+
277
+ <xsl:template name="gentext.edited.by">
278
+ <xsl:call-template name="gentext">
279
+ <xsl:with-param name="key" select="'Editedby'"/>
280
+ </xsl:call-template>
281
+ </xsl:template>
282
+
283
+ <xsl:template name="gentext.by">
284
+ <xsl:call-template name="gentext">
285
+ <xsl:with-param name="key" select="'by'"/>
286
+ </xsl:call-template>
287
+ </xsl:template>
288
+
289
+ <xsl:template name="gentext.dingbat">
290
+ <xsl:param name="dingbat">bullet</xsl:param>
291
+ <xsl:param name="lang">
292
+ <xsl:call-template name="l10n.language"/>
293
+ </xsl:param>
294
+
295
+ <xsl:for-each select="$l10n.xml"> <!-- We need to switch context in order to make key() work -->
296
+ <xsl:for-each select="document(key('l10n-lang', $lang)/@href)">
297
+ <xsl:variable name="local.l10n.dingbat"
298
+ select="($local.l10n.xml//l:i18n/l:l10n[@language=$lang]/l:dingbat[@key=$dingbat])[1]"/>
299
+
300
+ <xsl:variable name="l10n.dingbat"
301
+ select="key('l10n-dingbat', $dingbat)[1]"/>
302
+
303
+ <xsl:choose>
304
+ <xsl:when test="$local.l10n.dingbat">
305
+ <xsl:value-of select="$local.l10n.dingbat/@text"/>
306
+ </xsl:when>
307
+ <xsl:when test="$l10n.dingbat">
308
+ <xsl:value-of select="$l10n.dingbat/@text"/>
309
+ </xsl:when>
310
+ <xsl:otherwise>
311
+ <xsl:message>
312
+ <xsl:text>No "</xsl:text>
313
+ <xsl:value-of select="$lang"/>
314
+ <xsl:text>" localization of dingbat </xsl:text>
315
+ <xsl:value-of select="$dingbat"/>
316
+ <xsl:text> exists; using "en".</xsl:text>
317
+ </xsl:message>
318
+
319
+ <xsl:for-each select="$l10n.xml"> <!-- We need to switch context in order to make key() work -->
320
+ <xsl:for-each select="document(key('l10n-lang', 'en')/@href)">
321
+ <xsl:value-of select="key('l10n-dingbat', $dingbat)[1]/@text"/>
322
+ </xsl:for-each>
323
+ </xsl:for-each>
324
+ </xsl:otherwise>
325
+ </xsl:choose>
326
+ </xsl:for-each>
327
+ </xsl:for-each>
328
+ </xsl:template>
329
+
330
+ <xsl:template name="gentext.startquote">
331
+ <xsl:call-template name="gentext.dingbat">
332
+ <xsl:with-param name="dingbat">startquote</xsl:with-param>
333
+ </xsl:call-template>
334
+ </xsl:template>
335
+
336
+ <xsl:template name="gentext.endquote">
337
+ <xsl:call-template name="gentext.dingbat">
338
+ <xsl:with-param name="dingbat">endquote</xsl:with-param>
339
+ </xsl:call-template>
340
+ </xsl:template>
341
+
342
+ <xsl:template name="gentext.nestedstartquote">
343
+ <xsl:call-template name="gentext.dingbat">
344
+ <xsl:with-param name="dingbat">nestedstartquote</xsl:with-param>
345
+ </xsl:call-template>
346
+ </xsl:template>
347
+
348
+ <xsl:template name="gentext.nestedendquote">
349
+ <xsl:call-template name="gentext.dingbat">
350
+ <xsl:with-param name="dingbat">nestedendquote</xsl:with-param>
351
+ </xsl:call-template>
352
+ </xsl:template>
353
+
354
+ <xsl:template name="gentext.nav.prev">
355
+ <xsl:call-template name="gentext">
356
+ <xsl:with-param name="key" select="'nav-prev'"/>
357
+ </xsl:call-template>
358
+ </xsl:template>
359
+
360
+ <xsl:template name="gentext.nav.next">
361
+ <xsl:call-template name="gentext">
362
+ <xsl:with-param name="key" select="'nav-next'"/>
363
+ </xsl:call-template>
364
+ </xsl:template>
365
+
366
+ <xsl:template name="gentext.nav.home">
367
+ <xsl:call-template name="gentext">
368
+ <xsl:with-param name="key" select="'nav-home'"/>
369
+ </xsl:call-template>
370
+ </xsl:template>
371
+
372
+ <xsl:template name="gentext.nav.up">
373
+ <xsl:call-template name="gentext">
374
+ <xsl:with-param name="key" select="'nav-up'"/>
375
+ </xsl:call-template>
376
+ </xsl:template>
377
+
378
+ <!-- ============================================================ -->
379
+
380
+ <xsl:template name="gentext.template">
381
+ <xsl:param name="context" select="'default'"/>
382
+ <xsl:param name="name" select="'default'"/>
383
+ <xsl:param name="origname" select="$name"/>
384
+ <xsl:param name="purpose"/>
385
+ <xsl:param name="xrefstyle"/>
386
+ <xsl:param name="referrer"/>
387
+ <xsl:param name="lang">
388
+ <xsl:call-template name="l10n.language"/>
389
+ </xsl:param>
390
+ <xsl:param name="verbose" select="1"/>
391
+
392
+ <xsl:choose>
393
+ <xsl:when test="$empty.local.l10n.xml">
394
+ <xsl:for-each select="$l10n.xml"> <!-- We need to switch context in order to make key() work -->
395
+ <xsl:for-each select="document(key('l10n-lang', $lang)/@href)">
396
+
397
+ <xsl:variable name="localization.node"
398
+ select="key('l10n-lang', $lang)[1]"/>
399
+
400
+ <xsl:if test="count($localization.node) = 0
401
+ and $verbose != 0">
402
+ <xsl:message>
403
+ <xsl:text>No "</xsl:text>
404
+ <xsl:value-of select="$lang"/>
405
+ <xsl:text>" localization exists.</xsl:text>
406
+ </xsl:message>
407
+ </xsl:if>
408
+
409
+ <xsl:variable name="context.node"
410
+ select="key('l10n-context', $context)[1]"/>
411
+
412
+ <xsl:if test="count($context.node) = 0
413
+ and $verbose != 0">
414
+ <xsl:message>
415
+ <xsl:text>No context named "</xsl:text>
416
+ <xsl:value-of select="$context"/>
417
+ <xsl:text>" exists in the "</xsl:text>
418
+ <xsl:value-of select="$lang"/>
419
+ <xsl:text>" localization.</xsl:text>
420
+ </xsl:message>
421
+ </xsl:if>
422
+
423
+ <xsl:for-each select="$context.node">
424
+ <xsl:variable name="template.node"
425
+ select="(key('l10n-template-style', concat($context, '#', $name, '#', $xrefstyle))
426
+ |key('l10n-template', concat($context, '#', $name)))[1]"/>
427
+
428
+ <xsl:choose>
429
+ <xsl:when test="$template.node/@text">
430
+ <xsl:value-of select="$template.node/@text"/>
431
+ </xsl:when>
432
+ <xsl:otherwise>
433
+ <xsl:choose>
434
+ <xsl:when test="contains($name, '/')">
435
+ <xsl:call-template name="gentext.template">
436
+ <xsl:with-param name="context" select="$context"/>
437
+ <xsl:with-param name="name" select="substring-after($name, '/')"/>
438
+ <xsl:with-param name="origname" select="$origname"/>
439
+ <xsl:with-param name="purpose" select="$purpose"/>
440
+ <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
441
+ <xsl:with-param name="referrer" select="$referrer"/>
442
+ <xsl:with-param name="lang" select="$lang"/>
443
+ <xsl:with-param name="verbose" select="$verbose"/>
444
+ </xsl:call-template>
445
+ </xsl:when>
446
+ <xsl:when test="$verbose = 0">
447
+ <!-- silence -->
448
+ </xsl:when>
449
+ <xsl:otherwise>
450
+ <xsl:message>
451
+ <xsl:text>No template for "</xsl:text>
452
+ <xsl:value-of select="$origname"/>
453
+ <xsl:text>" (or any of its leaves) exists in the context named "</xsl:text>
454
+ <xsl:value-of select="$context"/>
455
+ <xsl:text>" in the "</xsl:text>
456
+ <xsl:value-of select="$lang"/>
457
+ <xsl:text>" localization.</xsl:text>
458
+ </xsl:message>
459
+ </xsl:otherwise>
460
+ </xsl:choose>
461
+ </xsl:otherwise>
462
+ </xsl:choose>
463
+ </xsl:for-each>
464
+ </xsl:for-each>
465
+ </xsl:for-each>
466
+ </xsl:when>
467
+ <xsl:otherwise>
468
+ <xsl:for-each select="$l10n.xml"> <!-- We need to switch context in order to make key() work -->
469
+ <xsl:for-each select="document(key('l10n-lang', $lang)/@href)">
470
+
471
+ <xsl:variable name="local.localization.node"
472
+ select="($local.l10n.xml//l:i18n/l:l10n[@language=$lang])[1]"/>
473
+
474
+ <xsl:variable name="localization.node"
475
+ select="key('l10n-lang', $lang)[1]"/>
476
+
477
+ <xsl:if test="count($localization.node) = 0
478
+ and count($local.localization.node) = 0
479
+ and $verbose != 0">
480
+ <xsl:message>
481
+ <xsl:text>No "</xsl:text>
482
+ <xsl:value-of select="$lang"/>
483
+ <xsl:text>" localization exists.</xsl:text>
484
+ </xsl:message>
485
+ </xsl:if>
486
+
487
+ <xsl:variable name="local.context.node"
488
+ select="$local.localization.node/l:context[@name=$context]"/>
489
+
490
+ <xsl:variable name="context.node"
491
+ select="key('l10n-context', $context)[1]"/>
492
+
493
+ <xsl:if test="count($context.node) = 0
494
+ and count($local.context.node) = 0
495
+ and $verbose != 0">
496
+ <xsl:message>
497
+ <xsl:text>No context named "</xsl:text>
498
+ <xsl:value-of select="$context"/>
499
+ <xsl:text>" exists in the "</xsl:text>
500
+ <xsl:value-of select="$lang"/>
501
+ <xsl:text>" localization.</xsl:text>
502
+ </xsl:message>
503
+ </xsl:if>
504
+
505
+ <xsl:variable name="local.template.node"
506
+ select="($local.context.node/l:template[@name=$name
507
+ and @style
508
+ and @style=$xrefstyle]
509
+ |$local.context.node/l:template[@name=$name
510
+ and not(@style)])[1]"/>
511
+
512
+ <xsl:choose>
513
+ <xsl:when test="$local.template.node/@text">
514
+ <xsl:value-of select="$local.template.node/@text"/>
515
+ </xsl:when>
516
+ <xsl:otherwise>
517
+ <xsl:for-each select="$context.node">
518
+ <xsl:variable name="template.node"
519
+ select="(key('l10n-template-style', concat($context, '#', $name, '#', $xrefstyle))
520
+ |key('l10n-template', concat($context, '#', $name)))[1]"/>
521
+
522
+ <xsl:choose>
523
+ <xsl:when test="$template.node/@text">
524
+ <xsl:value-of select="$template.node/@text"/>
525
+ </xsl:when>
526
+ <xsl:otherwise>
527
+ <xsl:choose>
528
+ <xsl:when test="contains($name, '/')">
529
+ <xsl:call-template name="gentext.template">
530
+ <xsl:with-param name="context" select="$context"/>
531
+ <xsl:with-param name="name" select="substring-after($name, '/')"/>
532
+ <xsl:with-param name="origname" select="$origname"/>
533
+ <xsl:with-param name="purpose" select="$purpose"/>
534
+ <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
535
+ <xsl:with-param name="referrer" select="$referrer"/>
536
+ <xsl:with-param name="lang" select="$lang"/>
537
+ <xsl:with-param name="verbose" select="$verbose"/>
538
+ </xsl:call-template>
539
+ </xsl:when>
540
+ <xsl:when test="$verbose = 0">
541
+ <!-- silence -->
542
+ </xsl:when>
543
+ <xsl:otherwise>
544
+ <xsl:message>
545
+ <xsl:text>No template for "</xsl:text>
546
+ <xsl:value-of select="$origname"/>
547
+ <xsl:text>" (or any of its leaves) exists in the context named "</xsl:text>
548
+ <xsl:value-of select="$context"/>
549
+ <xsl:text>" in the "</xsl:text>
550
+ <xsl:value-of select="$lang"/>
551
+ <xsl:text>" localization.</xsl:text>
552
+ </xsl:message>
553
+ </xsl:otherwise>
554
+ </xsl:choose>
555
+ </xsl:otherwise>
556
+ </xsl:choose>
557
+ </xsl:for-each>
558
+ </xsl:otherwise>
559
+ </xsl:choose>
560
+ </xsl:for-each>
561
+ </xsl:for-each>
562
+ </xsl:otherwise>
563
+ </xsl:choose>
564
+ </xsl:template>
565
+
566
+ <!-- silently test if a gentext template exists -->
567
+
568
+ <xsl:template name="gentext.template.exists">
569
+ <xsl:param name="context" select="'default'"/>
570
+ <xsl:param name="name" select="'default'"/>
571
+ <xsl:param name="origname" select="$name"/>
572
+ <xsl:param name="purpose"/>
573
+ <xsl:param name="xrefstyle"/>
574
+ <xsl:param name="referrer"/>
575
+ <xsl:param name="lang">
576
+ <xsl:call-template name="l10n.language"/>
577
+ </xsl:param>
578
+
579
+ <xsl:variable name="template">
580
+ <xsl:call-template name="gentext.template">
581
+ <xsl:with-param name="context" select="$context"/>
582
+ <xsl:with-param name="name" select="$name"/>
583
+ <xsl:with-param name="origname" select="$origname"/>
584
+ <xsl:with-param name="purpose" select="$purpose"/>
585
+ <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
586
+ <xsl:with-param name="referrer" select="$referrer"/>
587
+ <xsl:with-param name="lang" select="$lang"/>
588
+ <xsl:with-param name="verbose" select="0"/>
589
+ </xsl:call-template>
590
+ </xsl:variable>
591
+
592
+ <xsl:choose>
593
+ <xsl:when test="string-length($template) != 0">1</xsl:when>
594
+ <xsl:otherwise>0</xsl:otherwise>
595
+ </xsl:choose>
596
+ </xsl:template>
597
+
598
+ </xsl:stylesheet>