image

  • フォト Amazonギフト券
    ※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません

検索

最近のトラックバック

無料ブログはココログ

« ピラミッドを作る (xslt) | トップページ | xfy/xvcd の svg でタイマーイベントを扱う »

2007-09-09

ピラミッドを作る (xvcd)

Pry

昨日の ピラミッドを作る (xslt) を xfy/xvcd 用に、変更してみた。
もっと記述は簡潔にできるとは思う。
でも xslt, xvcd いずれにしても ruby を始めとした他のスクリプト言語での回答のように短くかくことは無理だなぁ...
xvcd でループを書く場合は、ruby で書いて 結果だけ xvcd から呼び出すのが実用的とおもう。

$ cat 3.xml
<?xml version="1.0" encoding="UTF-8" ?>
<?com.xfy vocabulary-connection href="3.xvcd" ?>
<sample:item xmlns:sample="http://xmlns.xfy.com/sample/pry">10</sample:item>

$ cat 3.xvcd
<?xml version="1.0" encoding="UTF-8"?>
<xvcd:xvcd
  version="1.0"
  xmlns:xvcd="http://xmlns.xfy.com/xvcd"
  xmlns:sample="http://xmlns.xfy.com/sample/pry"
  xmlns="http://www.w3.org/1999/xhtml">

<xvcd:vocabulary name="pyr" match="sample:item" call-template="root"/>

<xvcd:template name="root">
  <html>
    <head><title>ピラミッド</title></head>
    <body>
      ピラミッドの高さは?:<xvcd:text-of select="./text()" filler="0"/>
      <pre>
    <xvcd:variable name="stars">
      <xvcd:call-template name="stars-str">
        <xvcd:with-param name="n" select="./text()"/>
      </xvcd:call-template>
    </xvcd:variable>
        <xvcd:call-template name="pyr">
          <xvcd:with-param name="n" select="./text()" />
          <xvcd:with-param name="padding" select="''" />
          <xvcd:with-param name="stars" select="$stars" />
        </xvcd:call-template>
      </pre>
    </body>
  </html>
</xvcd:template>

<!-- 再帰処理のルーチン  -->
<xvcd:template name="stars-str">
  <xvcd:param name="n" />
  <xvcd:if test="$n = 1">
    <xvcd:text>*</xvcd:text>
  </xvcd:if>
  <xvcd:if test="$n &gt; 1">
    <xvcd:call-template name="stars-str">
      <xvcd:with-param name="n" select="$n - 1"/>
    </xvcd:call-template>
    <xvcd:text>**</xvcd:text>
  </xvcd:if>
</xvcd:template>

<!-- 再帰処理のルーチン  -->
<xvcd:template name="pyr">
  <xvcd:param name="n" />
  <xvcd:param name="padding" />
  <xvcd:param name="stars" />

  <xvcd:if test="$n &gt;= 1">
    <xvcd:call-template name="pyr">
      <xvcd:with-param name="n" select="$n - 1"/>
      <xvcd:with-param name="padding" select="concat($padding,' ')" />
      <xvcd:with-param name="stars" select="substring($stars, 1, string-length($stars) -2)" />
    </xvcd:call-template>
<!-- '&#xa' -->
    <xvcd:value-of select="concat($padding, $stars, $padding)"/>
    <br/>
  </xvcd:if>
</xvcd:template>

</xvcd:xvcd>

« ピラミッドを作る (xslt) | トップページ | xfy/xvcd の svg でタイマーイベントを扱う »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: ピラミッドを作る (xvcd):

« ピラミッドを作る (xslt) | トップページ | xfy/xvcd の svg でタイマーイベントを扱う »

mokuji

2013年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

google

  • twitter
  • __
  • _
    Googleボットチェッカー

合わせて読む

  • 合わせて読む
    フィードメーター - katoy: cocolog あわせて読みたい

リンク