У меня есть некоторые данные, в которых команда форматирования, созданные в форматеКонвертирования заказа форматирования в HTML форматирования с помощью XSLT
^B Makes the rest of the line bold
^I Makes the rest of the line italic
и т.д., и я стараюсь, чтобы превратить это в HTML для <b>
, <i>
и т.д.
Эти коды могут быть объединены и встречаться в любом месте линии, но применяются только к остальной части линии.
Я пометил данные в строках и использую analyze-string
на каждой строке, чтобы забрать метки для создания формы. Проблема в том, что мне нужно открыть инструкцию по форматированию, где я найду ее в строке, но затем закрою ее в конце строки, а то, что у меня не работает, по мере ее открытия и закрытия формата, в котором находится маркер , как и следовало ожидать:
<xsl:analyze-string select="." regex="\^([BIU])">
<xsl:matching-substring>
<xsl:element name="{lower-case(regex-group(1))}"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="." />
</xsl:non-matching-substring>
</xsl:analyze-string>
что я получаю от этого:
<b></b> Makes the rest of the line bold
<i></i> Makes the rest of the line italic
где то, что я хочу, очевидно
<b> Makes the rest of the line bold </b>
<i> Makes the rest of the line italic </i>
Я не могу видеть obvous способ использования analyze-string
, чтобы добиться этого, и единственный способ, которым я могу это сделать, - использовать рекурсивную функцию для обработки подстрок-подставок и т. Д., Что кажется довольно запутанным.
Кто-нибудь с лучшей идеей? Благодаря!
Screwtape.
Это большой начальная точка - работает, за исключением случаев, когда существует более одного формата, но я могу назвать это рекурсивно, что намного лучше, чем попытка рекурсивных подстрочных подстрок. (Я должен был включить пример с более чем одним кодом формата - извините!) – Screwtape
Sorted - переместил строку анализа в вызываемый шаблон и вызвал рекурсивно для управления случаем, когда у вас есть «^ B^I». Огромное спасибо! – Screwtape