106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen/*
206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * Copyright (C) 2010 Apple Inc. All rights reserved.
306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen *
406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * Redistribution and use in source and binary forms, with or without
506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * modification, are permitted provided that the following conditions
606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * are met:
706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * 1. Redistributions of source code must retain the above copyright
806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen *    notice, this list of conditions and the following disclaimer.
906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * 2. Redistributions in binary form must reproduce the above copyright
1006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen *    notice, this list of conditions and the following disclaimer in the
1106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen *    documentation and/or other materials provided with the distribution.
1206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen *
1306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
1406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
1506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
1706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
1806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
1906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
2306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * THE POSSIBILITY OF SUCH DAMAGE.
2406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen */
2506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
2606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#import "config.h"
2706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#import "Hyphenation.h"
2806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
2906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD) || defined(BUILDING_ON_SNOW_LEOPARD)
3006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
31dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#import "AtomicStringKeyedMRUCache.h"
3206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#import "TextBreakIteratorInternalICU.h"
3306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#import "WebCoreSystemInterface.h"
3406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#import <wtf/RetainPtr.h>
3506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
3606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsennamespace WebCore {
3706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
38dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochtemplate<>
39dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochbool AtomicStringKeyedMRUCache<bool>::createValueForNullKey()
4006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{
41dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    return !strcmp(currentSearchLocaleID(), "en");
42dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch}
43dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
44dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochtemplate<>
45dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochbool AtomicStringKeyedMRUCache<bool>::createValueForKey(const AtomicString& localeIdentifier)
46dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{
47dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    RetainPtr<CFStringRef> cfLocaleIdentifier(AdoptCF, localeIdentifier.createCFString());
48dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    RetainPtr<CFDictionaryRef> components(AdoptCF, CFLocaleCreateComponentsFromLocaleIdentifier(kCFAllocatorDefault, cfLocaleIdentifier.get()));
49dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    CFStringRef language = reinterpret_cast<CFStringRef>(CFDictionaryGetValue(components.get(), kCFLocaleLanguageCode));
50dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    static CFStringRef englishLanguage = CFSTR("en");
51dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    return language && CFEqual(language, englishLanguage);
52dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch}
53dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
54dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochbool canHyphenate(const AtomicString& localeIdentifier)
55dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{
56dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    DEFINE_STATIC_LOCAL(AtomicStringKeyedMRUCache<bool>, isEnglishCache, ());
57dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    return isEnglishCache.get(localeIdentifier);
58dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch}
59dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch
60dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochsize_t lastHyphenLocation(const UChar* characters, size_t length, size_t beforeIndex, const AtomicString& localeIdentifier)
61dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{
62dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    ASSERT_UNUSED(localeIdentifier, canHyphenate(localeIdentifier));
6306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
6406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    RetainPtr<CFStringRef> string(AdoptCF, CFStringCreateWithCharactersNoCopy(kCFAllocatorDefault, characters, length, kCFAllocatorNull));
6506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    return wkGetHyphenationLocationBeforeIndex(string.get(), beforeIndex);
6606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen}
6706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
6806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen} // namespace WebCore
6906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
7006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#endif // defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD) || defined(BUILDING_ON_SNOW_LEOPARD)
71