diff options
Diffstat (limited to 'tools/regression/xsl_reports/xsl/test/test_re_match.xsl')
-rw-r--r-- | tools/regression/xsl_reports/xsl/test/test_re_match.xsl | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/tools/regression/xsl_reports/xsl/test/test_re_match.xsl b/tools/regression/xsl_reports/xsl/test/test_re_match.xsl new file mode 100644 index 0000000000..eefd313166 --- /dev/null +++ b/tools/regression/xsl_reports/xsl/test/test_re_match.xsl @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright MetaCommunications, Inc. 2003-2004. + +Distributed under the Boost Software License, Version 1.0. (See +accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) + +--> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:exsl="http://exslt.org/common" + xmlns:func="http://exslt.org/functions" + xmlns:str="http://exslt.org/strings" + xmlns:meta="http://www.meta-comm.com" + extension-element-prefixes="func" + exclude-result-prefixes="str meta exsl" + version="1.0"> + + <func:function name="meta:re_match"> + <xsl:param name="pattern"/> + <xsl:param name="text"/> + + <xsl:choose> + <xsl:when test="not( contains( $pattern, '*' ) )"> + <func:result select="$text = $pattern"/> + </xsl:when> + <xsl:when test="$pattern = '*'"> + <func:result select="1 = 1"/> + </xsl:when> + <xsl:when test="substring( $pattern, 1, 1 ) = '*' and substring( $pattern, string-length($pattern), 1 ) = '*' "> + <func:result select="contains( $text, substring( $pattern, 2, string-length($pattern) - 2 ) ) "/> + </xsl:when> + <xsl:when test="substring( $pattern, 1, 1 ) = '*'"> + <xsl:variable name="pattern_tail" select="substring( $pattern, 2, string-length($pattern) - 1 )"/> + <func:result select="substring( $text, string-length($text) - string-length($pattern_tail) + 1, string-length($pattern_tail) ) = $pattern_tail"/> + </xsl:when> + <xsl:when test="substring( $pattern, string-length($pattern), 1 ) = '*' "> + <xsl:variable name="pattern_head" select="substring( $pattern, 1, string-length($pattern) - 1 )"/> + <func:result select="starts-with( $text, $pattern_head )"/> + </xsl:when> + <xsl:when test="contains( $pattern, '*' ) "> + <xsl:variable name="pattern_head" select="substring-before( $pattern, '*' )"/> + <xsl:variable name="pattern_tail" select="substring-after( $pattern, '*' )"/> + <func:result select="starts-with( $text, $pattern_head ) and substring( $text, string-length($text) - string-length($pattern_tail) + 1, string-length($pattern_tail) ) = $pattern_tail"/> + </xsl:when> + </xsl:choose> + </func:function> + + <xsl:template match='test'> + <xsl:variable name="result" select="meta:re_match( @pattern, @text )"/> + <xsl:variable name="expected-result" select="@result = 'true'"/> + <xsl:if test="$result != $expected-result"> + <failed regex="{@pattern}" text="{@text}" result="{$result}" expected-result="{$expected-result}"/> + </xsl:if> + </xsl:template> + +</xsl:stylesheet> |