|
Как сделать из русского транслит с помощью XSLT? (DocBook-XSL 1.76.1)
|
|||
---|---|---|---|
#18+
Уважаемые, подскажите пожалуйста, как можно сделать перевод русского в транслит. Я невелик знаток XSLT, а посему расскажу предысторию. Есть такой конвертер для eBook'ов: FB2DocBook. В нём производится трансформация FB2 — DocBook — XSL-FO — PDF|EPUB. http://kir666.ru/fb2docbook/ или http://www.the-ebook.org/forum/viewtopic.php?t=6794 Результат весьма хороший, но к сожалению автор ( KiR ) в последнее время пропал и энтузиасты допиливают его на форуме the-ebook.org самостоятельно. Поскольку не все электронные книги нормально понимают русский язык, в конвертере можно произвести транслитерацию метаинфы PDF. Для этого используется утилита pdftk, но есть у неё один минус - если исходный файл FB2 назван по-русски, конвертер вылетит с ошибкой. Однако docbook-xsl версий старше 1.74 может выводить метаинфу своими силами - но только на языке книги. В инете я нашёл стандартный шаблон для замены: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Как его можно прикрутить к шаблону docbook-xsl? Вот сокращённый фрагмент файла \docbook-xsl\fo\fop1.xsl (версия 1.76.1 - http://docbook.sourceforge.net/ ), ответственный за вывод метаинфы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Замена одинарных символов проблем не вызвала - сделал две переменные и вставил translate в <dc:title> и <dc:creator>: Код: plaintext 1. 2.
А вот с двойными-тройными как сделать - не представляю... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2011, 13:16 |
|
Как сделать из русского транслит с помощью XSLT? (DocBook-XSL 1.76.1)
|
|||
---|---|---|---|
#18+
kaznelson, Если проблема с вызовом шаблона, то так: (заменяет "б" на "bb") Код: plaintext 1. 2. 3. 4.
PS. Посмотри темку ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2011, 13:54 |
|
Как сделать из русского транслит с помощью XSLT? (DocBook-XSL 1.76.1)
|
|||
---|---|---|---|
#18+
refreg , Нет, проблем с вызовом шаблона нет. Вот такой call отрабатывает: Код: plaintext 1. 2. 3. 4. 5. 6.
Передавать call из <dc:title> много раз - множится область замены, т.е. вместо одной "str" со всеми заменёнными буквами молучаю восемь, в каждой из которой одна замена. Если передать только параметр "str" в какой-нибудь промежуточный шаблон, а уже в нём обрабатывать все буквы, то всё равно не получается. When напрямую не помогает, т.к. у меня все условия изначально true, и срабатывает первое. А как завернуть, чтобы в шаблон "replace" были переданы все восемь букв по очереди, не могу понять... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2011, 15:50 |
|
Как сделать из русского транслит с помощью XSLT? (DocBook-XSL 1.76.1)
|
|||
---|---|---|---|
#18+
kaznelson, Можно, конечно, повозиться сделать универсальный шаблон для преобразования для двух букв, но данную задачу быстрее в лоб, не красиво - зато работает. (две буквы есть, остальные шесть по аналогии) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2011, 18:23 |
|
Как сделать из русского транслит с помощью XSLT? (DocBook-XSL 1.76.1)
|
|||
---|---|---|---|
#18+
refreg , Громадное спасибо, всё заработало! :) Универсальный шаблон это конечно хорошо, но и Ваш вариант не хуже, имхо - некомпактно, зато наглядно. Особенно по моим знаниям XSLT; собственно, когда конвертер FB2DocBook начал ковырять, тогда и столкнулся... :) Вот под спойлером рабочий кусок fop1.xsl для работы с метаинфой в PDF, сделанный по Вашим рекомендациям: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2011, 20:51 |
|
Как сделать из русского транслит с помощью XSLT? (DocBook-XSL 1.76.1)
|
|||
---|---|---|---|
#18+
Интересный подход к решению прикладной задачи. Пробую по аналогии - не получается. имеем такой файл xml Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
и файл xsl Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
В итоге - ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2012, 15:15 |
|
|
start [/forum/topic.php?fid=14&msg=37173468&tid=1332672]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
153ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
others: | 251ms |
total: | 489ms |
0 / 0 |