Hi Graydon,

> $menuMatch gets stripped out of the Word because it's added by processing, 
> rather than being present in the source file which generates the other half 
> of the compare.  (It's currently U+1405, ᐅ, though I devoutly hope this 
> doesn't matter!)

You’ll need to remove the single quotes from $menuMatch (it yields
'ᐅ'). Apart from that, $stringTidy can possibly be simplified:

let $menuMatch := doc($varDevsDocSource)
  /descendant::xsl:variable[@name eq 'menucascadeSeparator']
  /@select
  => replace(''', '')

let $stringTidy := function($in) {
  $in
  => string-join(' ')
  => replace($menuMatch, '')
  => normalize-space()
  => replace(' ([,\.;:])', '$1')
}

Cheers,
Christian


On 2/6/21, Graydon Saunders <graydon...@gmail.com> wrote:
> Hello --
>
> So as part of building tests, I'm regularizing the text contents of some
> Word documents into single strings.  (Which makes it relatively easy to
> make sure no words have gotten lost or changed order when compared to other
> stages of the process.)
>
> Regularization is a tactful way to put this particular atrocity:
>
> let $stringTidy as function(xs:string+) as xs:string := function($in as
> xs:string+) as xs:string {$in  => string-join('&#x0020;') =>
> replace(xquery:eval($menuMatch),'') => replace('&#x000A;','&#x0020;') =>
> replace('&#x0009;','&#x0020;') => replace('&#x000D;','&#x0020;') =>
> replace('\p{Zs}','&#x0020;') => replace('&#x0020;+','&#x0020;') =>
> replace('&#x0020;([,\.;:])','$1') => replace('^&#x0020;','') =>
> replace('&#x0020;$','')}
>
> $menuMatch gets stripped out of the Word because it's added by processing,
> rather than being present in the source file which generates the other half
> of the compare.  (It's currently U+1405, ᐅ, though I devoutly hope this
> doesn't matter!)  It gets read from an XSL source document, which I've
> included in minimal form, along with some sample data and a minimal-ish
> query.
>
> If I use $menuMatch in the replace, it doesn't work, in the sense that the
> ᐅ character is NOT removed from the string.  If I xquery:eval() it, as
> here, the replace does work to remove the ᐅ from the string.  I don't
> expect to need xquery:eval to use a variable as the second argument of
> replace().  Am I wrong?  Has the pile of arrow operators exceeded the
> bounds of reason?
>
> Thanks!
> Graydon
>

Reply via email to