Blame docs/html/the-distinction-between-levels-0-and-1.html

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
Home
Packit Service 5bcba8
Up
Packit Service 5bcba8
Prev
Packit Service 5bcba8
Next
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>