summaryrefslogtreecommitdiff
path: root/xslt/comments.xsl
blob: 05f487854864fbb7dbd253ea0c597919c66d3969 (plain)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:mal="http://projectmallard.org/1.0/"
    xmlns:db="http://docbook.org/ns/docbook"
    exclude-result-prefixes="mal db"
    version="1.0">

<xsl:output method="text"/>

<xsl:param name="basename"/>
<xsl:param name="site.dir"/>

<xsl:template match="/*[namespace-uri(.) = ''] | /db:*">
  <xsl:for-each select="//remark | //db:remark">
    <xsl:text>Page:  </xsl:text>
    <xsl:value-of select="$basename"/>
    <xsl:if test="ancestor::*/@id | ancestor::*/@xml:id">
      <xsl:text>#</xsl:text>
      <xsl:value-of select="(ancestor::*/@id | ancestor::*/@xml:id)[last()]"/>
    </xsl:if>
    <xsl:text>&#x000A;</xsl:text>
    <xsl:if test="@revisionflag">
      <xsl:text>Flag:  </xsl:text>
      <xsl:value-of select="@revisionflag"/>
      <xsl:text>&#x000A;</xsl:text>
    </xsl:if>
    <xsl:text>&#x000A;</xsl:text>
    <xsl:call-template name="fill">
      <xsl:with-param name="text" select="normalize-space(.)"/>
      <xsl:with-param name="pad" select="'  '"/>
    </xsl:call-template>
    <xsl:text>&#x000A;</xsl:text>
  </xsl:for-each>
</xsl:template>

<xsl:template match="/mal:page">
  <xsl:for-each select="//mal:comment">
    <xsl:variable name="id">
      <xsl:value-of select="/mal:page/@id"/>
      <xsl:if test="ancestor::mal:section[1]/@id">
        <xsl:text>#</xsl:text>
        <xsl:value-of select="ancestor::mal:section[1]/@id"/>
      </xsl:if>
    </xsl:variable>
    <xsl:text>Page:  </xsl:text>
    <xsl:value-of select="$site.dir"/>
    <xsl:value-of select="$id"/>
    <xsl:text>&#x000A;</xsl:text>
    <xsl:if test="mal:cite">
      <xsl:text>From:  </xsl:text>
      <xsl:value-of select="mal:cite[1]"/>
      <xsl:if test="starts-with(mal:cite[1]/@href, 'mailto:')">
        <xsl:text> &lt;</xsl:text>
        <xsl:value-of select="substring-after(mal:cite[1]/@href, 'mailto:')"/>
        <xsl:text>&gt;</xsl:text>
      </xsl:if>
      <xsl:text>&#x000A;</xsl:text>
      <xsl:if test="mal:cite[1]/@date">
        <xsl:text>Date:  </xsl:text>
        <xsl:value-of select="mal:cite[1]/@date"/>
        <xsl:text>&#x000A;</xsl:text>
      </xsl:if>
    </xsl:if>
    <xsl:text>&#x000A;</xsl:text>
    <xsl:for-each select="*[not(self::mal:cite)]">
      <xsl:choose>
        <xsl:when test="self::mal:p">
          <xsl:call-template name="fill">
            <xsl:with-param name="text" select="normalize-space(.)"/>
            <xsl:with-param name="pad" select="'  '"/>
          </xsl:call-template>
          <xsl:text>&#x000A;</xsl:text>
        </xsl:when>
        <xsl:otherwise>
          <xsl:text>  FIXME: &lt;</xsl:text>
          <xsl:value-of select="local-name(.)"/>
          <xsl:text>&gt;...&lt;/</xsl:text>
          <xsl:value-of select="local-name(.)"/>
          <xsl:text>&gt;</xsl:text>
          <xsl:text>&#x000A;&#x000A;</xsl:text>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:for-each>
    <xsl:if test="not(*[not(self::mal:cite)])">
      <xsl:text>&#x000A;&#x000A;</xsl:text>
    </xsl:if>
  </xsl:for-each>
</xsl:template>

<xsl:template name="fill">
  <xsl:param name="text" select="''"/>
  <xsl:param name="pad" select="''"/>
  <xsl:param name="end" select="80 - string-length($pad)"/>
  <xsl:param name="col" select="$end"/>
  <xsl:choose>
    <xsl:when test="$col &gt; string-length($text)">
      <xsl:value-of select="$pad"/>
      <xsl:value-of select="$text"/>
      <xsl:text>&#x000A;</xsl:text>
    </xsl:when>
    <xsl:when test="substring($text, $col, 1) = ' '">
      <xsl:value-of select="$pad"/>
      <xsl:value-of select="substring($text, 0, $col)"/>
      <xsl:text>&#x000A;</xsl:text>
      <xsl:call-template name="fill">
        <xsl:with-param name="text" select="substring($text, $col + 1)"/>
        <xsl:with-param name="end" select="$end"/>
        <xsl:with-param name="pad" select="$pad"/>
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <xsl:call-template name="fill">
        <xsl:with-param name="text" select="$text"/>
        <xsl:with-param name="end" select="$end"/>
        <xsl:with-param name="pad" select="$pad"/>
        <xsl:with-param name="col" select="$col - 1"/>
      </xsl:call-template>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

</xsl:stylesheet>