summaryrefslogtreecommitdiff
path: root/Source/WebCore/rendering/RenderRubyText.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/rendering/RenderRubyText.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/rendering/RenderRubyText.cpp')
-rw-r--r--Source/WebCore/rendering/RenderRubyText.cpp52
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