Re: [xsl] XSLT function for title capitalization?

Subject: Re: [xsl] XSLT function for title capitalization?
From: "Flanders, Charles E (US) charles.flanders@xxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 10 Apr 2018 15:06:21 -0000
Here is a function that will accomplish what you need.

    <xsl:function name="c:title-case" as="xs:string">
        <xsl:param name="expr"/>
        <xsl:variable name="tokens" select="tokenize($expr,' ')"/>
        <xsl:variable name="titledTokens" select="for $token in $tokens
return
            concat(upper-case(substring($token,1,1)),
            lower-case(substring($token,2)))"/>
        <xsl:value-of select="string-join($titledTokens,' ')"/>
    </xsl:function>



-----Original Message-----
From: David Sewell dsewell@xxxxxxxxxxxx
[mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx]
Sent: Monday, April 09, 2018 4:53 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: [xsl] XSLT function for title capitalization?

*** WARNING ***
EXTERNAL EMAIL -- This message originates from outside our organization.


Wondering if anyone has a serviceable function (preferably in XSLT 2/3 but v1
is fine if it works) that takes a string as input and returns it with title
capitalization according to English-language editorial practice (for example,
Chicago Manual of Style).  So for example

A MEMORANDUM OF UNDERSTANDING ==> A Memorandum of Understanding

WHERE DID THE DRUIDS COME FROM? ==> Where Did the Druids Come From?

BEING FOR THE BENEFIT OF [MR.] KITE ==> Being for the Benefit of [Mr.] Kite

Use case is, as you might guess, processing a lot of titles transcribed as all
caps, wanting to convert them to standard title case format.

It doesn't have to be perfect, just anything that will minimize the need for
hand-editing.

David S.

--
David Sewell
Manager of Digital Initiatives
The University of Virginia Press
Email: dsewell@xxxxxxxxxxxx   Tel: +1 434 924 9973
Web: http://www.upress.virginia.edu/rotunda

Current Thread