Index: third_party/WebKit/Source/platform/text/mac/HyphenationMac.cpp |
diff --git a/third_party/WebKit/Source/platform/text/mac/HyphenationMac.cpp b/third_party/WebKit/Source/platform/text/mac/HyphenationMac.cpp |
index ca2b39fe6cce5b64bfbea81e4f691d92e2a85acc..0792e3db8c1602217487d4befa2427360ae252e1 100644 |
--- a/third_party/WebKit/Source/platform/text/mac/HyphenationMac.cpp |
+++ b/third_party/WebKit/Source/platform/text/mac/HyphenationMac.cpp |
@@ -4,11 +4,38 @@ |
#include "platform/text/Hyphenation.h" |
+#include "wtf/RetainPtr.h" |
+#include "wtf/text/StringView.h" |
+ |
namespace blink { |
-PassRefPtr<Hyphenation> Hyphenation::platformGetHyphenation(const AtomicString&) |
+class HyphenationCF : public Hyphenation { |
+public: |
+ HyphenationCF(RetainPtr<CFLocaleRef>& localeCF) |
+ : m_localeCF(localeCF) |
+ { |
+ DCHECK(m_localeCF); |
+ } |
+ |
+ size_t lastHyphenLocation(const StringView& text, size_t beforeIndex) const override |
+ { |
+ CFIndex result = CFStringGetHyphenationLocationBeforeIndex( |
+ text.toString()->createCFString().get(), beforeIndex, |
+ CFRangeMake(0, text.length()), 0, m_localeCF.get(), 0); |
+ return result == kCFNotFound ? 0 : result; |
+ } |
+ |
+private: |
+ RetainPtr<CFLocaleRef> m_localeCF; |
+}; |
+ |
+PassRefPtr<Hyphenation> Hyphenation::platformGetHyphenation(const AtomicString& locale) |
{ |
- return nullptr; |
+ RetainPtr<CFStringRef> localeCFString = locale.impl()->createCFString(); |
+ RetainPtr<CFLocaleRef> localeCF = adoptCF(CFLocaleCreate(kCFAllocatorDefault, localeCFString.get())); |
+ if (!CFStringIsHyphenationAvailableForLocale(localeCF.get())) |
+ return nullptr; |
+ return adoptRef(new HyphenationCF(localeCF)); |
} |
} // namespace blink |