Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1085)

Unified Diff: third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaper.h

Issue 2601953002: Start documentation of text stack in platform/fonts (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/platform/fonts/README.md ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaper.h
diff --git a/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaper.h b/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaper.h
index 80910ae45b1b08378fca67f8dc53afa570281715..08c323534453050d56d5a14b4d3fe41fac889f52 100644
--- a/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaper.h
+++ b/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaper.h
@@ -46,88 +46,6 @@ class Font;
class SimpleFontData;
class HarfBuzzShaper;
-// Shaping text runs is split into several stages: Run segmentation, shaping the
-// initial segment, identify shaped and non-shaped sequences of the shaping
-// result, and processing sub-runs by trying to shape them with a fallback font
-// until the last resort font is reached.
-//
-// If caps formatting is requested, an additional lowercase/uppercase
-// segmentation stage is required. In this stage, OpenType features in the font
-// are matched against the requested formatting and formatting is synthesized as
-// required by the CSS Level 3 Fonts Module.
-//
-// Going through one example - for simplicity without caps formatting - to
-// illustrate the process: The following is a run of vertical text to be
-// shaped. After run segmentation in RunSegmenter it is split into 4
-// segments. The segments indicated by the segementation results showing the
-// script, orientation information and small caps handling of the individual
-// segment. The Japanese text at the beginning has script "Hiragana", does not
-// need rotation when laid out vertically and does not need uppercasing when
-// small caps is requested.
-//
-// 0 い
-// 1 ろ
-// 2 は USCRIPT_HIRAGANA,
-// OrientationIterator::OrientationKeep,
-// SmallCapsIterator::SmallCapsSameCase
-//
-// 3 a
-// 4 ̄ (Combining Macron)
-// 5 a
-// 6 A USCRIPT_LATIN,
-// OrientationIterator::OrientationRotateSideways,
-// SmallCapsIterator::SmallCapsUppercaseNeeded
-//
-// 7 い
-// 8 ろ
-// 9 は USCRIPT_HIRAGANA,
-// OrientationIterator::OrientationKeep,
-// SmallCapsIterator::SmallCapsSameCase
-//
-//
-// Let's assume the CSS for this text run is as follows:
-// font-family: "Heiti SC", Tinos, sans-serif;
-// where Tinos is a web font, defined as a composite font, with two sub ranges,
-// one for Latin U+00-U+FF and one unrestricted unicode-range.
-//
-// FontFallbackIterator provides the shaper with Heiti SC, then Tinos of the
-// restricted unicode-range, then the unrestricted full unicode-range Tinos,
-// then a system sans-serif.
-//
-// The initial segment 0-2 to the shaper, together with the segmentation
-// properties and the initial Heiti SC font. Characters 0-2 are shaped
-// successfully with Heiti SC. The next segment, 3-5 is passed to the shaper.
-// The shaper attempts to shape it with Heiti SC, which fails for the Combining
-// Macron. So the shaping result for this segment would look similar to this.
-//
-// Glyphpos: 0 1 2 3
-// Cluster: 0 0 2 3
-// Glyph: a x a A (where x is .notdef)
-//
-// Now in the extractShapeResults() step we notice that there is more work to
-// do, since Heiti SC does not have a glyph for the Combining Macron combined
-// with an a. So, this cluster together with a Todo item for switching to the
-// next font is put into HolesQueue.
-//
-// After shaping the initial segment, the remaining items in the HolesQueue are
-// processed, picking them from the head of the queue. So, first, the next font
-// is requested from the FontFallbackIterator. In this case, Tinos (for the
-// range U+00-U+FF) comes back. Shaping using this font, assuming it is
-// subsetted, fails again since there is no combining mark available. This
-// triggers requesting yet another font. This time, the Tinos font for the full
-// range. With this, shaping succeeds with the following HarfBuzz result:
-//
-// Glyphpos 0 1 2 3
-// Cluster: 0 0 2 3
-// Glyph: a ̄ a A (with glyph coordinates placing the ̄ above the first a)
-//
-// Now this sub run is successfully processed and can be appended to
-// ShapeResult. A new ShapeResult::RunInfo is created. The logic in
-// insertRunIntoShapeResult then takes care of merging the shape result into
-// the right position the vector of RunInfos in ShapeResult.
-//
-// Shaping then continues analogously for the remaining Hiragana Japanese
-// sub-run, and the result is inserted into ShapeResult as well.
class PLATFORM_EXPORT HarfBuzzShaper final {
public:
HarfBuzzShaper(const UChar*, unsigned length, TextDirection);
« no previous file with comments | « third_party/WebKit/Source/platform/fonts/README.md ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698