Re: [xsl] Implementation Advice: Grouping Strings by Character Range in XSLT 2

Subject: Re: [xsl] Implementation Advice: Grouping Strings by Character Range in XSLT 2
From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 29 Apr 2016 16:37:58 -0000
I am at work and don't have the time for a complete/tested
implementation, but one can use the function string-to-codepoints()
and then perform on the result:

<xsl:for-each-group select="$theCodepoints"
group-adjacent=f:codepointToRange(.)>

 . . . . . . . .
</xsl:for-each-group>

Cheers,
Dimitre

On Fri, Apr 29, 2016 at 8:04 AM, Eliot Kimber ekimber@xxxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> Using XSLT 2, I have a requirement to take text and group contiguous
> sequences of characters in markup according to a given character range the
> characters are in. This is to support the application of range-specific
> fonts to text in HTML.
>
> I have a static definition of the character ranges for a given national
> language and there shouldn't be any overlap between ranges. Given this
> static definition, I'm generating XSLT code to operate on text nodes in
> order to apply the range markup. The
>
> For example, given the text string "abcdefg" where range "R1" is "cde" and
> R2 is "g", the marked up result should be: abc<span
> class="R1">cde</span>f<span class="R2">g</span>
>
> My initial approach is to generate a template that takes the current
> language and the text node and then applies templates in a
> language-specific mode.
>
> For each language I'm then generating a template to do the range matching.
>
> My question, once I'm in a language-specific template for a text node,
> what is the most efficient and/or easiest to code way to map the string to
> ranges? Since I'm generating the code it doesn't have to be concise.
>
> I'm thinking along the lines of using analyze-string to match on any of
> the groups and then within the matching-substring clause have a choice
> group to determine which range actually matched. But it feels like I'm
> missing a more elegant way to determine the actual range.
>
> Or maybe there's a clearer/simpler/more efficient way using tail recursion?
>
> Thanks,
>
> Eliot
> ----
> Eliot Kimber, Owner
> Contrext, LLC
> http://contrext.com
>
> 



-- 
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
To avoid situations in which you might make mistakes may be the
biggest mistake of all
------------------------------------
Quality means doing it right when no one is looking.
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play
-------------------------------------
To achieve the impossible dream, try going to sleep.
-------------------------------------
Facts do not cease to exist because they are ignored.
-------------------------------------
Typing monkeys will write all Shakespeare's works in 200yrs.Will they
write all patents, too? :)
-------------------------------------
Sanity is madness put to good use.
-------------------------------------
I finally figured out the only reason to be alive is to enjoy it.

Current Thread