Re: [xsl] Grouping by letters but keep symbols together

Subject: Re: [xsl] Grouping by letters but keep symbols together
From: "Eliot Kimber ekimber@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 25 Jan 2019 16:03:29 -0000
In addition, the DITA Community i18n project on GitHub
(https://github.com/dita-community/org.dita-community.i18n) provides
general-purpose Saxon extensions and XSLT 2+ support for locale-aware
grouping, sorting, word and line breaking, and text size approximation. (The
code was originally developed to do generation of paginated EPUBs in a number
of languages, thus the need for locale-aware word and line breaking as well as
text size approximation in addition to sorting and grouping.)

While the code was developed for use with DITA docs it's not DITA-specific.
The current Java extensions are only bound to Saxon 9.1 because I didn't have
client funding to also do the Saxon 9.6+ integration. It shouldn't be that
hard but it's not something I've been able to pursue.

This project includes dictionary-based Simplified Chinese features by
integrating an open-source Simplified Chinese dictionary.

Cheers,

E.
--
Eliot Kimber
http://contrext.com


o;?On 1/25/19, 9:32 AM, "Eliot Kimber ekimber@xxxxxxxxxxxx"
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

    Beyond all these suggestions, I always create functions that return
grouping and sort  keys as the logic could be much more sophisticated,
especially if you bring in locale-aware processing.

    Cheers,

    E.
    --
    Eliot Kimber
    http://contrext.com


    o;?On 1/25/19, 9:07 AM, "Graydon graydon@xxxxxxxxx"
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

        On Fri, Jan 25, 2019 at 02:44:50PM -0000, Rick Quatro
rick@xxxxxxxxxxxxxx scripsit:
        >    I am creating a glossary and I want to group entries under each
letter of
        >    the alphabet. I am using this and it is working fine:
        [snip]
        >    However, I want to group entries that start with a symbol or
number all
        >    together under one group. I am not sure what to use for the
group-by
        >    attribute so that letters are separate from each other and all of
the
        >    non-letter characters are in the same group. Any suggestions
would be
        >    appreciated. Thank you very much.

        I'd use a Unicode character category match for this:

        <xsl:for-each-group select="glossentry"
           group-by="(substring(upper-case(glossterm),1,1)[matches(.,'\p{Lu}'
)],'NON-LETTER-GROUP')[1]">
            <topicref navtitle="{current-grouping-key()}" toc="no">
                ...
            </topicref>
        </xsl:for-each-group>

        What you put in for "NON-LETTER-GROUP" might depend on where or how
        you're sorting the glossary entries.

        -- Graydon

Current Thread