Что это
Это шаблон XSLT для преобразования из XML, полученного в результате создания статьи средствами Шаблона для верстки статей RSDNАвтор(ы): Брусенцев Виталий, Чистяков Владислав Юрьевич Дата: 22.06.2011 Статья описывает шаблон для Microsoft Word предназначенный для верстки статей и преобразования их в формат RSDN ML. В статье рассматриваются вопросы использования шаблона. .
Зачем это
Допустим, что:
Вы хотите написать очень длинный топик, но делать это в браузере или Янусе вам неудобно.
Или вы хотите процитировать в форум часть своей статьи.
Или вам просто нравится RSDN Authoring Pack.
В любом случае, вы теперь можете писать что-либо в Ворде, а затем получить форматированный результат для помещения в форум.
Как это
Берете статью, использующую RSDN Article.dot. Выполняете команду Make XML. Выполняете преобразование полученного XML с помощью forum.xsl. Для этого, в частности, можно использовать консольную утилиту nxslt:
C:\Util\nxslt.exe MyArticle.xml forum.xsl -o MyArticle.txt
Содержимое полученного текстового файла копируете в окно написания топика.
Да, кстати, данный топик получен именно таким образом (единственное изменение — в последнем пункте заменил тэг code на xsl).
Что еще
Определенно, есть место для развития — это просто первая прикидка, хотя и рабочая. Хотелось бы, чтобы нечто подобное было включено в следующую версию RSDN Authoring Pack.
forum.xsl
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" encoding="windows-1251" standalone="yes" />
<xsl:preserve-space elements="PRE CODE COMMENT KEYWORD STRING NUMBER CHARACTER PREPOCESSOR EPIGRAPH" />
<xsl:template match="*|@*">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match='text()'><xsl:value-of select='.' /></xsl:template>
<xsl:template match="/">
<xsl:apply-templates select="ARTICLE" />
</xsl:template>
<xsl:template match="HTML"><xsl:copy-of select="./node()"/></xsl:template>
<!-- Заголовки -->
<xsl:template match="ARTICLE">
<xsl:apply-templates select="EPIGRAPH"/>
<xsl:apply-templates select="PART"/>
</xsl:template>
<xsl:template match="PART">
[hr]<xsl:value-of select="HEADER"/>
<xsl:apply-templates/></xsl:template>
<xsl:template match="PART/SECTION">
<xsl:value-of select="HEADER"/>
<xsl:apply-templates/></xsl:template>
<xsl:template match="SUBSECTION"><xsl:value-of select="HEADER"/>
<xsl:apply-templates/></xsl:template>
<xsl:template match="HEADER"></xsl:template>
<!-- Абзацы -->
<xsl:template match="P|p"><xsl:apply-templates/>
</xsl:template>
<xsl:template match="NOTE|note">[q]<xsl:apply-templates/>[/q]
</xsl:template>
<xsl:template match="WARNING|warning">[q]<xsl:apply-templates/>[/q]
</xsl:template>
<xsl:template match="TIP|tip">[q]<xsl:apply-templates/>[/q]
</xsl:template>
<!-- Списки -->
<xsl:template match="UL|ul">[list]
<xsl:apply-templates/>[/list]
</xsl:template>
<xsl:template match="OL|ol">[list]
<xsl:apply-templates/>[/list]
</xsl:template>
<xsl:template match="LI|li">[*]<xsl:apply-templates/></xsl:template>
<!-- Таблицы -->
<xsl:template match="TH|th"><xsl:apply-templates/> | </xsl:template>
<xsl:template match="TD|td"><xsl:apply-templates/> | </xsl:template>
<!-- Код -->
<xsl:template match="CODE|code">[code]<xsl:apply-templates/>[/code]</xsl:template>
<!-- Прочее -->
<xsl:template match="HR|hr">[hr]</xsl:template>
<xsl:template match="B|b"><xsl:apply-templates select="node()|@*"/></xsl:template>
<xsl:template match="U|u"><xsl:apply-templates select="node()|@*"/></xsl:template>
<xsl:template match="I|i"><xsl:apply-templates select="node()|@*"/></xsl:template>
<xsl:template match="EM|em"><xsl:apply-templates select="node()|@*"/></xsl:template>
<xsl:template match="A">[url=<xsl:value-of select="@href"/>]<xsl:apply-templates/>[/url]</xsl:template>
<xsl:template match="IMG">[img]<xsl:value-of select="@src"/>[/img]
</xsl:template>
<xsl:template match="IMGLINK">[url=<xsl:value-of select="@href"/>][img]<xsl:value-of select="@src"/>[/img][/url]
</xsl:template>
</xsl:stylesheet>
|