xsl-list
[Top] [All Lists]

[xsl] Unexpected MSXML Javascript extension results

2017-01-19 15:22:51
Hello all,

We have an XSL transformation that runs using some form of MSXML for the actual 
transformation. Given that MSXML is XSL 1.0, I am trying to code around the 
fact that it lacks regular expression functions by writing a JavaScript 
extension function to match Greek characters and wrap them in a span to avoid 
them being wrongly transformed to capital letters by smallcap treatment on the 
text around it. The JavaScript function I wrote appears to work fine if I run 
it locally, but when run as part of the XSL, it's not recursing properly. I 
don't have much of a way to debug this, so I'm hoping perhaps someone can 
either recognize why I'm getting inconsistent recursion, or perhaps suggest an 
alternative approach. Code/sample text below:

JavaScript Function:
 <msxsl:script language="javascript" implements-prefix="uspc"><![CDATA[         
      
//Recursive function to wrap greek characters in nosmallcaps span
        function wrapGreek(str){
                var regex = /(.*)([α-ωΑ-Ω])(.*)/g;
                var m = regex.exec(str);
                var rStr = "";
                if(m != null){
                        rStr = wrapGreek(m[1]);
                } else {
                        rStr = str;
                }
                if(m != null) {
                        rStr += '<span class="nosmallcaps">' + m[2] + '</span>' 
+ m[3];
                }
                        return "" + rStr;
        }
]]></msxsl:script>

Text template:
<xsl:template match="text()" priority="20">
        <xsl:variable name="textout">
                <xsl:value-of select="."/>
        </xsl:variable>
        <xsl:value-of disable-output-escaping="yes" 
select="uspc:wrapGreek($textout)"/>
</xsl:template>

Sample Content:
This head composed correctly:
<title cid="pttFA" 
id="GUID-04193AE6-05B6-44C1-AB2A-E8A900F93CE3">DESαCRIPαTION</title>

For this one, only the second alpha symbol was wrapped, so it did not recurse. 
Copying this text to a JavaScript interpreter and running the function on it in 
isolation does appear to recurse correctly.
<title cid="1IMidE" id="GUID-D279E612-1350-4709-B662-8FFEF76CD0C0">Infrαared 
Absoαrption, <i cid="2KvZ79">Spectrophotometric Identification Tests, Appendix 
IIIC</i></title>


Thanks in advance!
-Edward
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

<Prev in Thread] Current Thread [Next in Thread>