|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
<html>
|
|
Packit Service |
5bcba8 |
<head>
|
|
Packit Service |
5bcba8 |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
Packit Service |
5bcba8 |
<title>The distinction between levels 0 and 1: HarfBuzz Manual</title>
|
|
Packit Service |
5bcba8 |
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
|
|
Packit Service |
5bcba8 |
<link rel="home" href="index.html" title="HarfBuzz Manual">
|
|
Packit Service |
5bcba8 |
<link rel="up" href="clusters.html" title="">
|
|
Packit Service |
5bcba8 |
<link rel="prev" href="reordering-in-levels-0-and-1.html" title="Reordering in levels 0 and 1">
|
|
Packit Service |
5bcba8 |
<link rel="next" href="level-2.html" title="Level 2">
|
|
Packit Service |
5bcba8 |
<meta name="generator" content="GTK-Doc V1.25.1 (XML mode)">
|
|
Packit Service |
5bcba8 |
<link rel="stylesheet" href="style.css" type="text/css">
|
|
Packit Service |
5bcba8 |
</head>
|
|
Packit Service |
5bcba8 |
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
The distinction between levels 0 and 1
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
So, the above is pretty much what cluster levels 0 and 1 do. The
|
|
Packit Service |
5bcba8 |
only difference between the two is this: in level 0, at the very
|
|
Packit Service |
5bcba8 |
beginning of the shaping process, we also merge clusters between
|
|
Packit Service |
5bcba8 |
base characters and all Unicode marks (combining or not) following
|
|
Packit Service |
5bcba8 |
them. E.g.:
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
A,acute,B
|
|
Packit Service |
5bcba8 |
0,1 ,2
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
will become:
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
A,acute,B
|
|
Packit Service |
5bcba8 |
0,0 ,2
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
This is the default behavior. We do it because Windows did it and
|
|
Packit Service |
5bcba8 |
old HarfBuzz did it, so this remained the default. But this behavior
|
|
Packit Service |
5bcba8 |
makes it impossible to color diacritic marks differently from their
|
|
Packit Service |
5bcba8 |
base characters. That's why in level 1 we do not perform this
|
|
Packit Service |
5bcba8 |
initial merging step.
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
For clients, level 0 is more convenient if they rely on HarfBuzz
|
|
Packit Service |
5bcba8 |
clusters for cursor positioning. But that's wrong anyway: cursor
|
|
Packit Service |
5bcba8 |
positions should be determined based on Unicode grapheme boundaries,
|
|
Packit Service |
5bcba8 |
NOT shaping clusters. As such, level 1 clusters are preferred.
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
One last note about levels 0 and 1. We currently don't allow a
|
|
Packit Service |
5bcba8 |
MultipleSubst lookup to replace a glyph with zero
|
|
Packit Service |
5bcba8 |
glyphs (i.e., to delete a glyph). But in some other situations,
|
|
Packit Service |
5bcba8 |
glyphs can be deleted. In those cases, if the glyph being deleted is
|
|
Packit Service |
5bcba8 |
the last glyph of its cluster, we make sure to merge the cluster
|
|
Packit Service |
5bcba8 |
with a neighboring cluster.
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
This is, primarily, to make sure that the starting cluster of the
|
|
Packit Service |
5bcba8 |
text always has the cluster index pointing to the start of the text
|
|
Packit Service |
5bcba8 |
for the run; more than one client currently relies on this
|
|
Packit Service |
5bcba8 |
guarantee.
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
Incidentally, Apple's CoreText does something else to maintain the
|
|
Packit Service |
5bcba8 |
same promise: it inserts a glyph with id 65535 at the beginning of
|
|
Packit Service |
5bcba8 |
the glyph string if the glyph corresponding to the first character
|
|
Packit Service |
5bcba8 |
in the run was deleted. HarfBuzz might do something similar in the
|
|
Packit Service |
5bcba8 |
future.
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
|
|
Packit Service |
5bcba8 |
Generated by GTK-Doc V1.25.1
|
|
Packit Service |
5bcba8 |
</body>
|
|
Packit Service |
5bcba8 |
</html>
|