diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/rendering/RenderRubyText.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/rendering/RenderRubyText.cpp')
-rw-r--r-- | Source/WebCore/rendering/RenderRubyText.cpp | 52 |
1 files changed, 50 insertions, 2 deletions
diff --git a/Source/WebCore/rendering/RenderRubyText.cpp b/Source/WebCore/rendering/RenderRubyText.cpp index 24c722206..2fc437edd 100644 --- a/Source/WebCore/rendering/RenderRubyText.cpp +++ b/Source/WebCore/rendering/RenderRubyText.cpp @@ -32,11 +32,12 @@ #include "config.h" #include "RenderRubyText.h" +#include "RenderRubyRun.h" namespace WebCore { -RenderRubyText::RenderRubyText(Element& element, PassRef<RenderStyle> style) - : RenderBlockFlow(element, std::move(style)) +RenderRubyText::RenderRubyText(Element& element, RenderStyle&& style) + : RenderBlockFlow(element, WTFMove(style)) { } @@ -44,6 +45,12 @@ RenderRubyText::~RenderRubyText() { } +RenderRubyRun* RenderRubyText::rubyRun() const +{ + ASSERT(parent()); + return downcast<RenderRubyRun>(parent()); +} + bool RenderRubyText::isChildAllowed(const RenderObject& child, const RenderStyle&) const { return child.isInline(); @@ -86,4 +93,45 @@ bool RenderRubyText::avoidsFloats() const return true; } +bool RenderRubyText::canBreakBefore(const LazyLineBreakIterator& iterator) const +{ + // FIXME: It would be nice to improve this so that it isn't just hard-coded, but lookahead in this + // case is particularly problematic. + + if (!iterator.priorContextLength()) + return true; + UChar ch = iterator.lastCharacter(); + ULineBreak lineBreak = (ULineBreak)u_getIntPropertyValue(ch, UCHAR_LINE_BREAK); + // UNICODE LINE BREAKING ALGORITHM + // http://www.unicode.org/reports/tr14/ + // And Requirements for Japanese Text Layout, 3.1.7 Characters Not Starting a Line + // http://www.w3.org/TR/2012/NOTE-jlreq-20120403/#characters_not_starting_a_line + switch (lineBreak) { + case U_LB_NONSTARTER: + case U_LB_CLOSE_PARENTHESIS: + case U_LB_CLOSE_PUNCTUATION: + case U_LB_EXCLAMATION: + case U_LB_BREAK_SYMBOLS: + case U_LB_INFIX_NUMERIC: + case U_LB_ZWSPACE: + case U_LB_WORD_JOINER: + return false; + default: + break; + } + // Special care for Requirements for Japanese Text Layout + switch (ch) { + case 0x2019: // RIGHT SINGLE QUOTATION MARK + case 0x201D: // RIGHT DOUBLE QUOTATION MARK + case 0x00BB: // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + case 0x2010: // HYPHEN + case 0x2013: // EN DASH + case 0x300C: // LEFT CORNER BRACKET + return false; + default: + break; + } + return true; +} + } // namespace WebCore |