W nazwiązaniu do poprzedniego wpisu. W dokumencie o XPath pojawia się taki oto fragment:
oś::test<optional>[predykat]*</optional>
Co ma oznaczać, że wyrażenie ścieżkowe XPath składa się z osi i testu oraz opcjonalnego predykatu, który może być powtórzony wielokrotnie (stąd *
). Teraz standardowo szablony XSL Docbook (aka XSLDB) zamieniają ww. fragment XML na coś takiego:
oś::test[[predykat]*]
Niezręczność polega na tym, że nawiasy kwadratowe raz są używane do oznaczania części opcjonalnej a raz oznaczają, że należy je wstawić literalnie. W XSLDB znaki wstawiane wokół elementu optional
są sparametryzowane -- są to mianowicie: arg.choice.opt.open.str
oraz arg.choice.opt.close.str
. Zamiast `[' i `]' zdecydowałem się na U+27E8 (Mathematical left angle bracket) oraz U+27E9 (Mathematical right angle bracket) Teraz próba uruchomienia:
xsltproc --stringparam arg.choice.opt.open.str "⟨" \
--stringparam arg.choice.opt.close.str" select="⟩" ...
Kończy się błędem basha... Ciekawe czemu? Można podać ww. znaki binarnie -- wtedy wszystko działa. Ale UTF-8 w Makefile? Miałem opory, dodałem więc do arkusza uruchamiającego transformację XML → XHTML:
<xsl:param name="arg.choice.opt.open.str" select="'⟨'" />
<xsl:param name="arg.choice.opt.close.str" select="'⟩'" />
Teraz omawiany fragment wygląda mniej dwuznacznie:
oś::test⟨[predykat]*⟩
BTW w trybie nxml wpisanie ⟨
powoduje, że automagicznie kształt znaku pojawia się za średnikiem (ale nie jest wstawiany do tekstu -- po prostu jest to podpowiedź Emacsa, jak wygląda kształt znaku.) Dodatkowo po najechaniu myszą na encję wyświetlana jest nazwa znaku (w oknie podpowiedzi zwanym tooltip). Te ułatwienia są fajne w środowisku jednobajtowym--a ja póki co używam jako domyślnego kodowania ISO-8859-2.
Przy okazji użyteczne zestawienie znaków Unicode -- odpowiedników różnych TeXowych symboli matematycznych. Wystarczy zaznaczyć myszą i wkleić do Emacsa a następnie C-x =
(what-cursor-position
) wyświetli co zacz, w tym numer znaku.
Brak komentarzy:
Prześlij komentarz