CFLib.org – Common Function Library Project

SmallCaps(inputText[, largerClassName])

Last updated July 18, 2013

author

Joshua Siok

Version: 1 | Requires: CF9 | Library: StrLib

Description:
This UDF takes the first character of each word and wraps it in a class name so you can easily simulate the "font-variant:small-caps" functionality. I found this necessary to get this type of styling inside the CFDOCUMENT tag which does not support font-variant. Some simple CSS is needed with this as well.

Return Values:
A string wrapped with CSS to emulate font-variant:small-caps

Example:

<cfset TextToConvert = "Title of a Book">
<cfdocument format="PDF" filename="#expandPath('./smallCaps.pdf')#" overwrite="true">
<cfoutput>
<html>
	<head>
		<style type="text/css" media="screen">
			.SmallCaps{font-size:24pt;}
			.SmallCaps .SCLarger{font-size:36pt;}
		</style>
	</head>
	<body>
		<div class="SmallCaps">#SmallCaps(TextToConvert)#</div>
		
		<div style="font-variant:small-caps">#TextToConvert#</div>
	</body>
</html>
</cfoutput>
</cfdocument>

Parameters:

Name Description Required
inputText String to format Yes
largerClassName CSS class to use for larger caps No

Full UDF Source:

<!---
 Formats a string to simulate the small-caps style without using the css font-variant attribute.
 v1.0 by Joshua Siok
 
 @param inputText 	 String to format (Required)
 @param largerClassName 	 CSS class to use for larger caps (Optional)
 @return A string wrapped with CSS to emulate font-variant:small-caps 
 @author Joshua Siok (Joshua.Siok@gmail.com) 
 @version 1, July 18, 2013 
--->
<cffunction name="smallCaps" returntype="string" access="public" output="false" description="Styles and returns text.">
	<cfargument name="inputText" type="string" required="true">
	<cfargument name="largerClassName" type="string" required="false" default="SCLarger">
	<cfset inputText = ucase(trim(inputText))>
	<cfset var prefixText = '<span class="#largerClassName#">'>
	<cfset var suffixtext = '</span>'>
	<cfset var outputText = prefixText><!--- ALWAYS START WITH A LARGE LETTER--->
	<cfset var insertSuffixAfterNextChar = true><!--- THIS WILL TELLS OUR LOOP WHEN TO INSERT THE SUFFIXTEXT--->
	<cfset var i = 0>
		
	<!--- WE'RE GOING LOOP THROUGH AND WRAP THE FIRST LETTER OF EACH WORD IN A SPAN CLASS BLOCK---->
	<cfloop from="1" to="#len(inputText)#" index="i">
		<cfset var currentChar = Mid(inputText,i,1)>
		<cfset outputText = outputText & currentChar>
		<cfif insertSuffixAfterNextChar>
        	<cfset outputText = outputText & SuffixText>
        	<cfset insertSuffixAfterNextChar = false><!---NOT TO INSERT THE SUFFIXTEXT NEXT TIME--->
        </cfif>	
		<cfif currentChar EQ " ">
			<cfset outputText = outputText & prefixText><!--- ALWAYS ADD THE PREFIXTEXT AFTER A SPACE--->
			<cfset insertSuffixAfterNextChar = true><!--- THIS WILL TELLS OUR LOOP TO INSERT THE SUFFIXTEXT--->
		</cfif>
    </cfloop>	
	<cfreturn outputText>
</cffunction>
blog comments powered by Disqus

Search CFLib.org


Latest Additions

Kevin Cotton added
date2ExcelDate
May 5, 2016

Raymond Camden added
CapFirst
April 25, 2016

Chris Wigginton added
loremIpsum
January 18, 2016

Gary Stanton added
calculateArrival...
November 19, 2015

Sebastiaan Naafs - van Dijk added
getDaysInQuarter
November 13, 2015

Created by Raymond Camden / Design by Justin Johnson