Subversion Repositories LCARS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
54 PointedEar 1
<?xml version="1.0" encoding="UTF-8"?>
2
<xsl:stylesheet version="1.0"
3
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/xhtml1/strict">
4
  <xsl:output method="text" indent="no" media-type="text/plain" encoding="UTF-8" />
5
  <xsl:strip-space elements="*" />
6
 
7
  <xsl:template match="/">
8
    <xsl:text># vim:set fileencoding=utf-8 tabstop=2 shiftwidth=2 softtabstop=2 expandtab:
9
</xsl:text>
10
    <xsl:apply-templates />
11
  </xsl:template>
12
 
13
  <xsl:template match="Rule">
14
    <xsl:variable
15
      name="supported_rule"
16
       select="@linkmode = 'OR' or (@linkmode = 'AND' and not(Expression[2]))" />
17
    <xsl:variable
18
      name="killfiled"
19
       select="Action[@type='SETSCORE']/@value &lt;= -100" />
20
 
21
    <xsl:if test="$supported_rule and $killfiled">
22
<!--       <xsl:text># </xsl:text>
23
      <xsl:value-of select="@name" />
24
      <xsl:text>
25
</xsl:text> -->
26
      <xsl:apply-templates />
27
    </xsl:if>
28
  </xsl:template>
29
 
30
  <xsl:template match="Expression">
31
    <xsl:variable name="ignored_headers">
32
      <header name="Newsgroups"/>
33
      <header name="Followup-To"/>
34
    </xsl:variable>  
35
    <xsl:variable name="allowed_header">
36
      <xsl:value-of
37
       select="not(document('')//xsl:variable[@name = 'ignored_headers']/@name[text() = @header])"/>
38
    </xsl:variable>
39
 
40
    <xsl:if test="@neg != '1' and $allowed_header">
41
      <xsl:variable name="expr">
42
        <xsl:choose>
43
          <xsl:when test="@type = 'MATCH'">
44
            <xsl:value-of select="@expr" />
45
          </xsl:when>
46
          <xsl:otherwise>
47
            <xsl:call-template name="string-pcre-escape">
48
              <xsl:with-param name="text" select="@expr" />
49
            </xsl:call-template>
50
          </xsl:otherwise>
51
        </xsl:choose>
52
      </xsl:variable>
53
 
54
      <xsl:text>^</xsl:text>
55
      <xsl:value-of select="@header" />
56
      <xsl:text>:.*</xsl:text>
57
      <xsl:call-template name="string-char-escape">
58
        <xsl:with-param name="text" select="$expr" />
59
      </xsl:call-template>
60
      <xsl:text>
61
</xsl:text>
62
    </xsl:if>
63
  </xsl:template>
64
 
65
  <xsl:template name="string-pcre-escape">
66
    <xsl:param name="text" />
67
    <xsl:call-template name="string-translate-all">
68
      <xsl:with-param name="text" select="$text" />
69
      <xsl:with-param name="replace" select="'.|+'" />
70
      <xsl:with-param name="by" select="'\.|\+'" />
71
      <xsl:with-param name="separator" select="'|'" />
72
    </xsl:call-template>
73
  </xsl:template>
74
 
75
  <xsl:template name="string-char-escape">
76
    <xsl:param name="text" />
77
    <xsl:call-template name="string-translate-all">
78
      <xsl:with-param name="text" select="$text" />
79
      <xsl:with-param name="replace" select="'ä|ë|é|é |ö|ü| '" />
80
      <xsl:with-param name="by" select="'.+|.+|.+|.+|.+|.+|.+'" />
81
      <xsl:with-param name="separator" select="'|'" />
82
    </xsl:call-template>
83
  </xsl:template>
84
 
85
  <xsl:template name="string-translate-all">
86
    <xsl:param name="text" />
87
    <xsl:param name="replace" />
88
    <xsl:param name="by" />
89
    <xsl:param name="separator" />
90
    <xsl:choose>
91
      <xsl:when test="$separator and contains($replace, $separator)">
92
        <xsl:variable name="text2">
93
          <xsl:call-template name="string-translate-all">
94
            <xsl:with-param name="text" select="$text" />
95
            <xsl:with-param name="replace"
96
              select="substring-before($replace, $separator)" />
97
            <xsl:with-param name="by"
98
              select="substring-before($by, $separator)" />
99
            <xsl:with-param name="separator" select="$separator" />
100
          </xsl:call-template>
101
        </xsl:variable>
102
        <xsl:call-template name="string-translate-all">
103
          <xsl:with-param name="text" select="$text2" />
104
          <xsl:with-param name="replace"
105
            select="substring-after($replace, $separator)" />
106
          <xsl:with-param name="by"
107
            select="substring-after($by, $separator)" />
108
          <xsl:with-param name="separator" select="$separator" />
109
        </xsl:call-template>
110
      </xsl:when>
111
      <xsl:otherwise>
112
        <xsl:choose>
113
          <xsl:when test="contains($text, $replace)">
114
            <xsl:value-of select="substring-before($text,$replace)" />
115
            <xsl:value-of select="$by" />
116
            <xsl:call-template name="string-replace-all">
117
              <xsl:with-param name="text"
118
                select="substring-after($text,$replace)" />
119
              <xsl:with-param name="replace" select="$replace" />
120
              <xsl:with-param name="by" select="$by" />
121
            </xsl:call-template>
122
          </xsl:when>
123
          <xsl:otherwise>
124
            <xsl:value-of select="$text" />
125
          </xsl:otherwise>
126
        </xsl:choose>
127
      </xsl:otherwise>
128
    </xsl:choose>
129
  </xsl:template>
130
 
131
  <xsl:template name="string-replace-all">
132
    <xsl:param name="text" />
133
    <xsl:param name="replace" />
134
    <xsl:param name="by" />
135
    <xsl:choose>
136
      <xsl:when test="contains($text, $replace)">
137
        <xsl:value-of select="substring-before($text, $replace)" />
138
        <xsl:value-of select="$by" />
139
        <xsl:call-template name="string-replace-all">
140
          <xsl:with-param name="text"
141
            select="substring-after($text, $replace)" />
142
          <xsl:with-param name="replace" select="$replace" />
143
          <xsl:with-param name="by" select="$by" />
144
        </xsl:call-template>
145
      </xsl:when>
146
      <xsl:otherwise>
147
        <xsl:value-of select="$text" />
148
      </xsl:otherwise>
149
    </xsl:choose>
150
  </xsl:template>
151
</xsl:stylesheet>