1X:stylesheet { 2 3X:output method="text"; 4 5X:param format="'generic'"; 6X:param pkgname="'unit'"; 7X:param configuration="'change_log_conf.xml'"; 8X:param curdate; 9X:param curtime; 10 11X:var conf = "document($configuration)/configuration"; 12 13X:var start = { 14 X:choose { 15 X:when "$format='rpm'" { 16 !{$conf/rpm/start} 17 } 18 X:when "$format='deb'" { 19 !{$conf/deb/start} 20 } 21 X:when "$format='generic'" { 22 !{$conf/generic/start} 23 } 24 } 25} 26 27X:var indent = { 28 X:choose { 29 X:when "$format='rpm'" { 30 !{$conf/rpm/indent} 31 } 32 X:when "$format='deb'" { 33 !{$conf/deb/indent} 34 } 35 X:when "$format='generic'" { 36 !{$conf/generic/indent} 37 } 38 } 39} 40 41X:var max = { 42 X:choose { 43 X:when "$format='rpm'" { 44 !{$conf/rpm/length} 45 } 46 X:when "$format='deb'" { 47 !{$conf/deb/length} 48 } 49 X:when "$format='generic'" { 50 !{$conf/generic/length} 51 } 52 } 53} 54 55X:var br = {<br>} 56 57 58X:template = "/" { !! "change_log"; } 59X:template = "change_log" { !! "changes"; } 60 61 62X:template = "changes" { 63 X:var date_ = { !getdate(date="@date", curdate="$curdate") } 64 X:var time_ = { !gettime(time="@time", curtime="$curtime") } 65 X:var pday = { !padded_day(date="$date_") } 66 X:var dow = { !day_of_week(date="$date_") } 67 X:var apply = { !string_in_list(list="@apply", string="$pkgname") } 68 X:var pkgname_ = { !beautify(pkgname="$pkgname") } 69 70 X:choose { 71 X:when "$pkgname='unit' and $format='generic' and @rev!=1" {} 72 X:otherwise { 73 X:if "$apply=$pkgname" { 74 75 X:if "$format='generic'" { 76 X:text { } 77 78 !{substring(concat($conf/changes/title, 79 $pkgname_, 80 ' ', @ver, 81 ' '), 82 1, $conf/changes/length)} 83 84 !{substring($date_, 9, 2)} 85 !{$conf/changes/month[number(substring($date_, 6, 2))]} 86 !{substring($date_, 1, 4)} 87 } 88 89 X:if "$format='rpm'" { 90 !{concat('* ', $conf/changes/day[number($dow)], 91 $conf/changes/month[number(substring($date_, 6, 2))], 92 $pday, ' ', 93 substring($date_, 1, 4), ' ', @packager, ' - ', 94 @ver, '-', @rev, '%{?dist}.ngx')} 95 } 96 97 X:if "$format='deb'" { 98 !{concat($pkgname, ' (', @ver, '-', @rev, 99 '~%%CODENAME%%) %%CODENAME%%; urgency=low')} 100 101 X:text { } 102 } 103 104 X:text { } 105 106 !! "change"; 107 108 X:text { } 109 110 X:if "$format='deb'" { 111 !{concat(' -- ', @packager, ' ', 112 $conf/changes/day[number($dow)], ', ', 113 $pday, 114 $conf/changes/month[number(substring($date_, 6, 2))], 115 substring($date_, 1, 4), ' ', $time_)} 116 117 X:text { } 118 X:text { } 119 } 120 } 121 } 122 } 123} 124 125 126X:template = "change" { 127 X:var prefix = "$conf/changes/*[local-name(.)=current()/@type]" 128 129 X:var postfix = { X:if "$prefix" { X:text {: } } } 130 131 !! "para" (prefix = "concat($start, $prefix, $postfix)"); 132} 133 134 135X:template para(prefix) = "para" { 136 X:var text = { !!; } 137 138 X:if "$format='generic'" { 139 X:text { } 140 } 141 142 !wrap(text = "normalize-space($text)", 143 prefix = { X:if "position() = 1" { !{$prefix} } else { !{$indent} } }) 144} 145 146 147X:template wrap(text, prefix) { 148 X:if "$text" { 149 X:var offset = { 150 X:choose { 151 X:when "starts-with($text, concat($br, ' '))" { 152 !{string-length($br) + 2} 153 } 154 X:when "starts-with($text, $br)" { 155 !{string-length($br) + 1} 156 } 157 X:otherwise { 158 1 159 } 160 } 161 } 162 163 X:var length = { 164 !length(text = "substring($text, $offset)", 165 prefix = "string-length($prefix)", 166 length = "$max") 167 } 168 169 !{$prefix} 170 171 !{normalize-space(translate(substring($text, $offset, $length), 172 ' ', ' '))} 173 174 X:text { } 175 176 !wrap(text = "substring($text, $length + $offset)", prefix = "$indent") 177 } 178} 179 180 181X:template length(text, prefix, length) { 182 X:var break = "substring-before(substring($text, 1, 183 $length - $prefix + string-length($br)), 184 $br)" 185 186 X:choose { 187 X:when "$break" { !{string-length($break)} } 188 189 X:when "$length = 0" { !{$max - $prefix} } 190 191 X:when "string-length($text) + $prefix <= $length" { 192 !{$length - $prefix} 193 } 194 195 X:when "substring($text, $length - $prefix + 1, 1) = ' '" { 196 !{$length - $prefix + 1} 197 } 198 199 X:otherwise { 200 !length(text = "$text", prefix = "$prefix", length = "$length - 1") 201 } 202 } 203} 204 205 206X:template day_of_week(date) { 207 X:param year = "substring-before($date, '-')"; 208 X:param month = "substring-before(substring-after($date, '-'), '-')"; 209 X:param day = "substring-after(substring-after($date, '-'), '-')"; 210 211 X:var a = "floor((14 - $month) div 12)"; 212 213 X:var y = "$year - $a"; 214 215 X:var m = "$month + 12 * $a - 2"; 216 217 !{($day + $y + floor($y div 4) - floor($y div 100) 218 + floor($y div 400) + floor((31 * $m) div 12)) mod 7 + 1} 219} 220 221 222X:template padded_day(date) { 223 !{substring(concat(' ', format-number(substring($date, 9, 2), '##')), 224 1 + string-length(format-number(substring($date, 9, 2), '##')))} 225} 226 227 228X:template string_in_list(list, string) { 229 X:choose { 230 X:when "contains($list, ' ')" { 231 X:var str = "substring-before($list, ' ')"; 232 X:choose { 233 X:when "$str=$string" { 234 !{$string} 235 } 236 X:otherwise { 237 !string_in_list(list="substring-after($list, ' ')", 238 string="$string") 239 } 240 } 241 } 242 X:otherwise { 243 X:if "$list=$string" { !{$string} } 244 X:if "$list='*'" { !{$string} } 245 } 246 } 247} 248 249 250X:template beautify(pkgname) { 251 X:choose { 252 X:when "$pkgname='unit'" {Unit} 253 X:otherwise { 254 !{$pkgname} 255 } 256 } 257} 258 259 260X:template getdate(date, curdate) { 261 X:choose { 262 X:when "$date=''" { 263 !{$curdate} 264 } 265 X:otherwise { 266 !{$date} 267 } 268 } 269} 270 271 272X:template gettime(time, curtime) { 273 X:choose { 274 X:when "$time=''" { 275 !{$curtime} 276 } 277 X:otherwise { 278 !{$time} 279 } 280 } 281} 282 283 284X:template = "at" {@} 285X:template = "br" { !{$br} } 286X:template = "nobr" { !{translate(., ' ', ' ')} } 287 288 289} 290