ピラミッドを作る (xslt)
- http://ja.doukaku.org/8/
> > ピラミッドを作る どう書く?org
を xfy/xvcd でかいてみようと思った。
その前に xslt で書いてみた。
動作させるには 2.xml を firefox や safari で open すればよい。
$ cat 2.xml
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="2.xsl" ?>
<ex1:input xmlns:ex1="http://www.example.com/ex1">10</ex1:input>
$ cat 2.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ex1="http://www.example.com/ex1"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:template match="/">
<html>
<head><title>ピラミッド</title></head>
<xsl:variable name="stars">
<xsl:call-template name="stars-str">
<xsl:with-param name="n" select="ex1:input"/>
</xsl:call-template>
</xsl:variable>
<body>
<pre>
<xsl:call-template name="pyr">
<xsl:with-param name="n" select="ex1:input" />
<xsl:with-param name="padding" select="''" />
<xsl:with-param name="stars" select="$stars" />
</xsl:call-template>
</pre>
</body>
</html>
</xsl:template>
<!-- 再帰処理のルーチン -->
<xsl:template name="stars-str">
<xsl:param name="n" />
<xsl:if test="$n = 1">
<xsl:text>*</xsl:text>
</xsl:if>
<xsl:if test="$n > 1">
<xsl:call-template name="stars-str">
<xsl:with-param name="n" select="$n - 1"/>
</xsl:call-template>
<xsl:text>**</xsl:text>
</xsl:if>
</xsl:template>
<!-- 再帰処理のルーチン -->
<xsl:template name="pyr">
<xsl:param name="n" />
<xsl:param name="padding" />
<xsl:param name="stars" />
<xsl:if test="$n >= 1">
<xsl:call-template name="pyr">
<xsl:with-param name="n" select="$n - 1"/>
<xsl:with-param name="padding" select="concat($padding,' ')" />
<xsl:with-param name="stars" select="substring($stars, 3, string-length($stars))" />
</xsl:call-template>
<xsl:value-of select="$padding"/>
<xsl:value-of select="$stars"/>
<xsl:value-of select="$padding"/>
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
ここまで作って疲れてしまった。
xfy/xvcd に変換するのは明日にしよう。
最近のコメント