nginx-0.7.8
Igor Sysoev
is at rambler-co.ru
Tue Aug 5 17:19:20 MSD 2008
On Tue, Aug 05, 2008 at 08:13:45PM +0700, Denis F. Latypoff wrote:
> Hello Igor,
>
> Tuesday, August 5, 2008, 6:52:48 PM, you wrote:
>
> > On Tue, Aug 05, 2008 at 06:00:26PM +0700, Denis F. Latypoff wrote:
>
> >> >> > По-моему, нужно брать
> >> >> 1) style->>mediaType, если он не NULL
> >> >> > 2) или последений не NULL mediaType из imports
> >> >>
> >> >> согласен, тогда патч
> >>
> >> > Патч очень сложный, я уже добавил эту функциональность + encoding.
> >>
> >> Да, про encoding забыл. Я сделал так:
> >>
> >> if (sheet[i - 1].stylesheet->encoding) {
> >>
> >> r->headers_out.charset.len =
> >> ngx_strlen(sheet[i - 1].stylesheet->encoding);
> >> r->headers_out.charset.data =
> >> (u_char *) sheet[i - 1].stylesheet->encoding;
> >> }
> >>
> >>
> >> > Мне нужно только понять порядок вложенных импорта. Что имеет приоритет,
> >> > например, в такой ситуации:
> >>
> >> > <xsl:output ... (1)
> >> > <xsl:import ... (2)
> >>
> >> > 1 или 2 ?
> >>
> >> Так по спеке не разрешается, сначала должны быть импорты а потом
> >>
> >> <xsl:output ... />
> >>
> >> Так что будет ошибка компиляции, примерно такая:
>
> > То есть, нужно искать по импортам до первого ненулевого mediaType ?
> > Ну, и естественно, сначала проверять mediaType в самом xsl.
>
> Да. И encoding тоже.
OK.
> >> "xsltParseStylesheetTop: ignoring misplaced import element"
> >>
> >> Да, еще, если в xsl файле ошибка синтаксиса, то nginx пишет об ошибке
> >> компиляции, но стартует. При запросе - segfault.
> >>
> >> Проверить не сложно...
>
> > У меня выдаётся "xsltParseStylesheetFile(...) failed" и выходит.
> > Можно пример ?
>
> Да, сегфолт был из-за кривого патча,
> было sheet[i] вместо sheet[i - 1] в одной строчке.
>
> Так что все в порядке, за исключением одной штуки:
>
> <xsl:output indent="yes" ... /> игнорится, в результирующем документе
> все теги должны были выравниваться с отступом (удобно при отладке
> бегать глазами по html-ке, в продакшене ставим indent="no" для
> оптимизации размера)
>
> Но и на indent="no" результат тоже не похож, html должен быть в одну
> строчку.
>
> Подозреваю, что SAX не умеет индетить...
Модуль не использует SAX как таковой. Просто сам libxml2 строит дерево
через дефолтный SAX. Поэтому модуль инициализирует дефолтную обработку,
а потом переопределяет SAX-обработчики. Я не вижу, как по-другому
перехватить обработку external subset.
--
Игорь Сысоев
http://sysoev.ru
More information about the nginx-ru
mailing list