<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://karaoke.kjams.com/w/index.php?action=history&amp;feed=atom&amp;title=CFLite%2FCFTest%2Fmain.cpp</id>
	<title>CFLite/CFTest/main.cpp - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://karaoke.kjams.com/w/index.php?action=history&amp;feed=atom&amp;title=CFLite%2FCFTest%2Fmain.cpp"/>
	<link rel="alternate" type="text/html" href="https://karaoke.kjams.com/w/index.php?title=CFLite/CFTest/main.cpp&amp;action=history"/>
	<updated>2026-06-09T13:52:43Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://karaoke.kjams.com/w/index.php?title=CFLite/CFTest/main.cpp&amp;diff=4586&amp;oldid=prev</id>
		<title>Dave at 20:03, 29 June 2008</title>
		<link rel="alternate" type="text/html" href="https://karaoke.kjams.com/w/index.php?title=CFLite/CFTest/main.cpp&amp;diff=4586&amp;oldid=prev"/>
		<updated>2008-06-29T20:03:03Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://karaoke.kjams.com/w/index.php?title=CFLite/CFTest/main.cpp&amp;amp;diff=4586&amp;amp;oldid=4583&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Dave</name></author>
	</entry>
	<entry>
		<id>https://karaoke.kjams.com/w/index.php?title=CFLite/CFTest/main.cpp&amp;diff=4583&amp;oldid=prev</id>
		<title>Dave at 16:58, 29 June 2008</title>
		<link rel="alternate" type="text/html" href="https://karaoke.kjams.com/w/index.php?title=CFLite/CFTest/main.cpp&amp;diff=4583&amp;oldid=prev"/>
		<updated>2008-06-29T16:58:56Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:58, 29 June 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l35&quot;&gt;Line 35:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 35:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;void CFLog::operator()(CFTypeRef valRef) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;void CFLog::operator()(CFTypeRef valRef) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	#if &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;1&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	#if &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;0&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		SuperString			valStr;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		SuperString			valStr;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key kjams_www-mw_:diff:1.41:old-4579:rev-4583:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Dave</name></author>
	</entry>
	<entry>
		<id>https://karaoke.kjams.com/w/index.php?title=CFLite/CFTest/main.cpp&amp;diff=4579&amp;oldid=prev</id>
		<title>Dave at 07:20, 29 June 2008</title>
		<link rel="alternate" type="text/html" href="https://karaoke.kjams.com/w/index.php?title=CFLite/CFTest/main.cpp&amp;diff=4579&amp;oldid=prev"/>
		<updated>2008-06-29T07:20:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;SuperString.h&amp;quot;&lt;br /&gt;
#include &amp;lt;CoreFoundation/CFLocale.h&amp;gt;&lt;br /&gt;
#include &amp;lt;CoreFoundation/CFNumberFormatter.h&amp;gt;&lt;br /&gt;
#include &amp;lt;CoreFoundation/CFDateFormatter.h&amp;gt;&lt;br /&gt;
#include &amp;lt;CoreFoundation/CFCalendar.h&amp;gt;&lt;br /&gt;
#include &amp;lt;CoreFoundation/CFBundle.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static void	ShowDiacriticSensitiveCompare(bool insensitiveB)&lt;br /&gt;
{&lt;br /&gt;
	g_pref_diacritic_insensitive_searchB = insensitiveB;&lt;br /&gt;
	&lt;br /&gt;
	printf(&amp;quot;diacritic %ssensitive\n&amp;quot;, insensitiveB ? &amp;quot;in&amp;quot; : &amp;quot;&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	SuperString			str1(&amp;quot;NeUi&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	#if defined(__WIN32__)&lt;br /&gt;
		CF_ASSERT(kSourceFileEncoding == kCFStringEncodingWindowsLatin1);&lt;br /&gt;
		SuperString			str2(&amp;quot;ÒÈ¸Ó&amp;quot;);	//	kCFStringEncodingWindowsLatin1&lt;br /&gt;
	#else&lt;br /&gt;
		SuperString			str2(&amp;quot;ñéüî&amp;quot;);	//	utf8&lt;br /&gt;
	#endif&lt;br /&gt;
		&lt;br /&gt;
	bool				diacritic_insensitive_compareB = str1 == str2;&lt;br /&gt;
	&lt;br /&gt;
	printf(&amp;quot;%s %s %s\n&amp;quot;, &lt;br /&gt;
		   str1.consoleZ(), &lt;br /&gt;
		   diacritic_insensitive_compareB ? &amp;quot;==&amp;quot; : &amp;quot;!=&amp;quot;, &lt;br /&gt;
		   str2.consoleZ());&lt;br /&gt;
	&lt;br /&gt;
	if (insensitiveB) {&lt;br /&gt;
		CF_ASSERT(diacritic_insensitive_compareB);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void CFLog::operator()(CFTypeRef valRef) {&lt;br /&gt;
	#if 1&lt;br /&gt;
		SuperString			valStr;&lt;br /&gt;
		&lt;br /&gt;
		valStr.Set_CFType(valRef);&lt;br /&gt;
		printf(&amp;quot;%s\n&amp;quot;, valStr.consoleZ());&lt;br /&gt;
	#else&lt;br /&gt;
		fflush(stdout);&lt;br /&gt;
		CFShow(valRef);&lt;br /&gt;
	#endif&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void	CFTest(const char *pathZ);&lt;br /&gt;
void	CFTest(const char *pathZ)&lt;br /&gt;
{&lt;br /&gt;
	#if defined(__WIN32__)&lt;br /&gt;
		#define		kCodePage_WindowsLatin1		1252&lt;br /&gt;
		&lt;br /&gt;
		SetConsoleOutputCP(kCodePage_WindowsLatin1);&lt;br /&gt;
	#endif&lt;br /&gt;
	&lt;br /&gt;
	//	test console logging and CFSTR macro&lt;br /&gt;
	{&lt;br /&gt;
		CFLog()(CFSTR(&amp;quot;------------------Strings---------------&amp;quot;));&lt;br /&gt;
		CFLog()(CFSTR(&amp;quot;Hello, World!&amp;quot;));&lt;br /&gt;
		ScCFReleaser&amp;lt;CFDataRef&amp;gt;		dataRef(SuperString(&amp;quot;yeah baby&amp;quot;).CopyDataRef());&lt;br /&gt;
		SuperString					str;&lt;br /&gt;
		&lt;br /&gt;
		str.Set(dataRef);&lt;br /&gt;
		printf(SuperString(&amp;quot;The next line should read &amp;quot; kLeftQuote &amp;quot;yeah baby&amp;quot; kRightQuote &amp;quot;\n&amp;quot;).consoleZ());&lt;br /&gt;
		CFLog()(str.ref());&lt;br /&gt;
		&lt;br /&gt;
		SuperString		str1(&amp;quot;foscoobyar&amp;quot;);&lt;br /&gt;
		SuperString		str2(&amp;quot;scooby&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		printf(&amp;quot;\n%s %s %s\n&amp;quot;, &lt;br /&gt;
			   str1.consoleZ(), &lt;br /&gt;
			   str1.Contains(str2) ? &amp;quot;contains&amp;quot; : &amp;quot;$$$ Error: does not contain(!?)&amp;quot;, &lt;br /&gt;
			   str2.consoleZ());&lt;br /&gt;
		&lt;br /&gt;
		str1.Replace(str2, &amp;quot;o b&amp;quot;);&lt;br /&gt;
		printf(SuperString(&amp;quot;The next line should read &amp;quot; kLeftQuote &amp;quot;foo bar&amp;quot; kRightQuote &amp;quot;\n&amp;quot;).consoleZ());&lt;br /&gt;
		CFLog()(str1.ref());&lt;br /&gt;
		&lt;br /&gt;
		CFLog()(CFSTR(&amp;quot;------------------Case Insensitive Compare---------------&amp;quot;));&lt;br /&gt;
		ShowDiacriticSensitiveCompare(false);&lt;br /&gt;
		printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
		ShowDiacriticSensitiveCompare(true);&lt;br /&gt;
		&lt;br /&gt;
		{&lt;br /&gt;
			CFLog()(CFSTR(&amp;quot;------------------Conversion---------------&amp;quot;));&lt;br /&gt;
			SuperString			jStr;&lt;br /&gt;
			SuperString			escd;&lt;br /&gt;
			&lt;br /&gt;
			#if 0&lt;br /&gt;
				jStr.Set(&amp;quot;ゑをぼまあズジヅポ&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
				escd.Set(CFURLCreateStringByAddingPercentEscapes(&lt;br /&gt;
					kCFAllocatorDefault, jStr, NULL, NULL, kCFStringEncodingUTF8), false);&lt;br /&gt;
				&lt;br /&gt;
				printf(&amp;quot;%s\n&amp;quot;, escd.consoleZ());&lt;br /&gt;
			#else&lt;br /&gt;
				escd.Set(&amp;quot;%E3%82%91%E3%82%92%E3%81%BC%E3%81%BE%E3%81%82%E3%82%BA%E3%82%B8%E3%83%85%E3%83%9D&amp;quot;);&lt;br /&gt;
				jStr.Set(CFURLCreateStringByReplacingPercentEscapes(&lt;br /&gt;
					kCFAllocatorDefault, escd, CFSTR(&amp;quot;&amp;quot;)), false);&lt;br /&gt;
			#endif&lt;br /&gt;
			&lt;br /&gt;
			#if defined(__WIN32__)&lt;br /&gt;
				#define		kConvertEncode		kCFStringEncodingDOSJapanese&lt;br /&gt;
			#else&lt;br /&gt;
				#define		kConvertEncode		kCFStringEncodingMacJapanese&lt;br /&gt;
			#endif&lt;br /&gt;
			&lt;br /&gt;
			ustring				j;&lt;br /&gt;
			CopyCFStringToUString(jStr.ref(), j, kConvertEncode);&lt;br /&gt;
			&lt;br /&gt;
			SuperString			convertedJ;  convertedJ.Set(j, kConvertEncode);&lt;br /&gt;
&lt;br /&gt;
			if (kConsoleEncoding == kCFStringEncodingUTF8) {&lt;br /&gt;
				printf(SuperString(&amp;quot;The next line should read &amp;quot; kLeftQuote &amp;quot;%s&amp;quot; kRightQuote &amp;quot;\n%s\n&amp;quot;).consoleZ(), &lt;br /&gt;
					jStr.consoleZ(), convertedJ.consoleZ());&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			printf(&amp;quot;conversion: %s\n&amp;quot;, convertedJ == jStr ? &amp;quot;Success!&amp;quot; : &amp;quot;$$ FAILED!&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	{&lt;br /&gt;
		CFLog()(CFSTR(&amp;quot;------------------Encoding---------------&amp;quot;));&lt;br /&gt;
		CFStringEncoding		encoding = CFStringGetSystemEncoding();&lt;br /&gt;
		&lt;br /&gt;
		printf(&amp;quot;Encoding: %s\n&amp;quot;, SuperString(CFStringGetNameOfEncoding(encoding)).consoleZ());&lt;br /&gt;
		&lt;br /&gt;
		printf(&amp;quot;IANA charset: %s\n&amp;quot;, SuperString(CFStringConvertEncodingToIANACharSetName(encoding)).consoleZ());&lt;br /&gt;
		&lt;br /&gt;
		#if defined(__WIN32__)&lt;br /&gt;
			UInt32					codePage = CFStringConvertEncodingToWindowsCodepage(encoding);&lt;br /&gt;
			&lt;br /&gt;
			if (encoding == kCFStringEncodingWindowsLatin1) {&lt;br /&gt;
				CF_ASSERT(codePage == kCodePage_WindowsLatin1);&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			printf(&amp;quot;codepage: %ld\n&amp;quot;, codePage);&lt;br /&gt;
			CF_ASSERT(CFStringConvertWindowsCodepageToEncoding(codePage) == encoding);&lt;br /&gt;
		#endif		&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	CFLog()(CFSTR(&amp;quot;------------------Locale---------------&amp;quot;));&lt;br /&gt;
	ScCFReleaser&amp;lt;CFLocaleRef&amp;gt;				locale(CFLocaleCopyCurrent());&lt;br /&gt;
	&lt;br /&gt;
	{&lt;br /&gt;
		SuperString				localIdStr(CFLocaleGetIdentifier(locale));&lt;br /&gt;
		&lt;br /&gt;
		printf(&amp;quot;Locale ID: %s\n&amp;quot;, localIdStr.consoleZ());&lt;br /&gt;
		&lt;br /&gt;
		ScCFReleaser&amp;lt;CFDictionaryRef&amp;gt;	dictRef(CFLocaleCreateComponentsFromLocaleIdentifier(kCFAllocatorDefault, localIdStr.ref()));&lt;br /&gt;
		&lt;br /&gt;
		dict_for_each(dictRef, CFLog());&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	{&lt;br /&gt;
		CFLog()(CFSTR(&amp;quot;------------------Preferred Languages---------------&amp;quot;));&lt;br /&gt;
		ScCFReleaser&amp;lt;CFArrayRef&amp;gt;	arrayRef(CFLocaleCopyPreferredLanguages());&lt;br /&gt;
		&lt;br /&gt;
		array_for_each(arrayRef, CFLog());&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	{&lt;br /&gt;
		CFLog()(CFSTR(&amp;quot;------------------Calendar---------------&amp;quot;));&lt;br /&gt;
		ScCFReleaser&amp;lt;CFCalendarRef&amp;gt;		calendarRef(CFCalendarCopyCurrent());&lt;br /&gt;
		&lt;br /&gt;
		printf(&amp;quot;Calendar ID: %s\n&amp;quot;, SuperString(CFCalendarGetIdentifier(calendarRef)).consoleZ());&lt;br /&gt;
		&lt;br /&gt;
		ScCFReleaser&amp;lt;CFTimeZoneRef&amp;gt;		timeZoneRef(CFCalendarCopyTimeZone(calendarRef));&lt;br /&gt;
		CFLog()(timeZoneRef.Get());&lt;br /&gt;
		&lt;br /&gt;
		CFAbsoluteTime				absTime = CFAbsoluteTimeGetCurrent();&lt;br /&gt;
		&lt;br /&gt;
		ScCFReleaser&amp;lt;CFDateRef&amp;gt;		dateRef(CFDateCreate(kCFAllocatorDefault, absTime));&lt;br /&gt;
		&lt;br /&gt;
		CFLog()(dateRef.Get());&lt;br /&gt;
		&lt;br /&gt;
		CFGregorianDate				gregDate(CFAbsoluteTimeGetGregorianDate(absTime, timeZoneRef));&lt;br /&gt;
		printf(&amp;quot;year: %d\nmonth: %d\nday: %d\nhour: %d\nminute: %d\nsecond: %f\n&amp;quot;, &lt;br /&gt;
			   (int)gregDate.year, &lt;br /&gt;
			   (int)gregDate.month, &lt;br /&gt;
			   (int)gregDate.day, &lt;br /&gt;
			   (int)gregDate.hour, &lt;br /&gt;
			   (int)gregDate.minute, &lt;br /&gt;
			   (float)gregDate.second);&lt;br /&gt;
		&lt;br /&gt;
		ScCFReleaser&amp;lt;CFDateFormatterRef&amp;gt;	dateFormatterRef(CFDateFormatterCreate(&lt;br /&gt;
			kCFAllocatorDefault, locale, kCFDateFormatterFullStyle, kCFDateFormatterFullStyle));&lt;br /&gt;
		&lt;br /&gt;
		ScCFReleaser&amp;lt;CFStringRef&amp;gt;			dateStr(CFDateFormatterCreateStringWithDate(&lt;br /&gt;
			kCFAllocatorDefault, dateFormatterRef, dateRef));&lt;br /&gt;
		&lt;br /&gt;
		CFLog()(CFSTR(&amp;quot;Make sure time zone is correct in the next line:&amp;quot;));&lt;br /&gt;
		CFLog()(dateStr.Get());&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	{&lt;br /&gt;
		CFLog()(CFSTR(&amp;quot;------------------Numbers---------------&amp;quot;));&lt;br /&gt;
		ScCFReleaser&amp;lt;CFNumberFormatterRef&amp;gt;		numFormatRef;&lt;br /&gt;
		ScCFReleaser&amp;lt;CFStringRef&amp;gt;				numStr;&lt;br /&gt;
		float									numF = 123456.789;&lt;br /&gt;
		ScCFReleaser&amp;lt;CFNumberRef&amp;gt;				numberRef(CFNumberCreate(&lt;br /&gt;
			kCFAllocatorDefault, kCFNumberFloat32Type, &amp;amp;numF));&lt;br /&gt;
		&lt;br /&gt;
		numFormatRef.adopt(CFNumberFormatterCreate(&lt;br /&gt;
			kCFAllocatorDefault, locale, kCFNumberFormatterDecimalStyle));&lt;br /&gt;
		numStr.adopt(CFNumberFormatterCreateStringWithNumber(&lt;br /&gt;
			kCFAllocatorDefault, numFormatRef, numberRef));&lt;br /&gt;
		CFLog()(numStr.Get());&lt;br /&gt;
		&lt;br /&gt;
		numFormatRef.adopt(CFNumberFormatterCreate(&lt;br /&gt;
			kCFAllocatorDefault, locale, kCFNumberFormatterCurrencyStyle));&lt;br /&gt;
		numStr.adopt(CFNumberFormatterCreateStringWithNumber(&lt;br /&gt;
			kCFAllocatorDefault, numFormatRef, numberRef));&lt;br /&gt;
		CFLog()(numStr.Get());&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	{&lt;br /&gt;
		CFLog()(CFSTR(&amp;quot;------------------Bundle---------------&amp;quot;));	&lt;br /&gt;
		&lt;br /&gt;
		ScCFReleaser&amp;lt;CFBundleRef&amp;gt;		bundleRef(CFBundleGetMainBundle());&lt;br /&gt;
		ScCFReleaser&amp;lt;CFURLRef&amp;gt;			bundleUrlRef;&lt;br /&gt;
		&lt;br /&gt;
		if (bundleRef.Get() == NULL) {&lt;br /&gt;
			if (pathZ != NULL) {&lt;br /&gt;
				bundleUrlRef.adopt(CFURLCreateWithFileSystemPath(&lt;br /&gt;
					kCFAllocatorDefault, SuperString(pathZ), kCFURLWindowsPathStyle, false));&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			bundleUrlRef.adopt(CFBundleCopyBundleURL(bundleRef));&lt;br /&gt;
			&lt;br /&gt;
			//	this is a &amp;quot;get&amp;quot; not a &amp;quot;copy&amp;quot; so extra retain will cancel the extra release&lt;br /&gt;
			bundleRef.Retain();&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		CF_ASSERT(bundleUrlRef.Get());&lt;br /&gt;
		&lt;br /&gt;
		if (bundleUrlRef.Get() != NULL) {&lt;br /&gt;
			&lt;br /&gt;
			CFLog()(bundleUrlRef.Get());&lt;br /&gt;
			&lt;br /&gt;
			if (bundleRef.Get() != NULL) {&lt;br /&gt;
				ScCFReleaser&amp;lt;CFDictionaryRef&amp;gt;	dictRef(CFBundleGetInfoDictionary(bundleRef));&lt;br /&gt;
				&lt;br /&gt;
				dict_for_each(dictRef, CFLog());&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			{&lt;br /&gt;
				CFLog()(CFSTR(&amp;quot;------------------plist - xml---------------&amp;quot;));&lt;br /&gt;
				&lt;br /&gt;
				#if defined(__WIN32__)&lt;br /&gt;
					//	you may need to fix this relative URL here&lt;br /&gt;
					SuperString				relPathStr(&amp;quot;&amp;quot;);&lt;br /&gt;
				#else&lt;br /&gt;
					SuperString				relPathStr(&amp;quot;../../&amp;quot;);&lt;br /&gt;
				#endif&lt;br /&gt;
				&lt;br /&gt;
				SuperString				testRelPath(&amp;quot;test.xml&amp;quot;);	testRelPath.prepend(relPathStr);&lt;br /&gt;
				ScCFReleaser&amp;lt;CFURLRef&amp;gt;	xmlUrlRef(CFURLCreateWithFileSystemPathRelativeToBase(&lt;br /&gt;
					kCFAllocatorDefault, testRelPath.ref(), kCFURLPOSIXPathStyle, false, bundleUrlRef));&lt;br /&gt;
				&lt;br /&gt;
				if (xmlUrlRef.Get()) {&lt;br /&gt;
					ScCFReleaser&amp;lt;CFDictionaryRef&amp;gt;		dictRef;&lt;br /&gt;
					ScCFReleaser&amp;lt;CFURLRef&amp;gt;				absUrlRef(CFURLCopyAbsoluteURL(xmlUrlRef));&lt;br /&gt;
					&lt;br /&gt;
					printf(&amp;quot;URL: %s\n&amp;quot;, SuperString(CFURLGetString(absUrlRef)).consoleZ());&lt;br /&gt;
					&lt;br /&gt;
					if (Read_PList(xmlUrlRef, dictRef.AddressOf())) {&lt;br /&gt;
						dict_for_each(dictRef, CFLog());&lt;br /&gt;
						&lt;br /&gt;
						SuperString				outRelpath(&amp;quot;out.xml&amp;quot;);	outRelpath.prepend(relPathStr);&lt;br /&gt;
						ScCFReleaser&amp;lt;CFURLRef&amp;gt;	outXmlUrlRef(CFURLCreateWithFileSystemPathRelativeToBase(&lt;br /&gt;
							kCFAllocatorDefault, outRelpath.ref(), kCFURLPOSIXPathStyle, false, bundleUrlRef));&lt;br /&gt;
						&lt;br /&gt;
						Write_PList(dictRef.Get(), outXmlUrlRef);&lt;br /&gt;
					}&lt;br /&gt;
				} else {&lt;br /&gt;
					CFLog()(CFSTR(&amp;quot;error illegal file path?&amp;quot;));&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	CFLog()(CFSTR(&amp;quot;Note: not exercied here, but I want full CFXML support: input stream, node, parser, tree&amp;quot;));&lt;br /&gt;
	&lt;br /&gt;
	/*&lt;br /&gt;
	 bonus points:  CFCharacterSet&lt;br /&gt;
	 */&lt;br /&gt;
	CFLog()(CFSTR(&amp;quot;--------------------------------------&amp;quot;));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main (int argc, const char * argv[]) {&lt;br /&gt;
	CFTest(argv[0]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dave</name></author>
	</entry>
</feed>