Improving comment.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
diff --git a/ChangeLog b/ChangeLog
index 9aa9709..de3a765 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,7 @@
2005-03-10 David Turner <david@freetype.org>
- * src/tools/glnames.py: adding comment explaining the compression
- being used for the Adobe Glyph List.
+ * src/tools/glnames.py: Add comment to explain the compression
+ being used for the Adobe Glyph List.
2005-03-10 Werner Lemberg <wl@gnu.org>
diff --git a/src/tools/glnames.py b/src/tools/glnames.py
index 8b9b374..6131098 100644
--- a/src/tools/glnames.py
+++ b/src/tools/glnames.py
@@ -4758,76 +4758,80 @@ class StringTable:
write( line + "\n };\n\n\n" )
+# We now store the Adobe Glyph List in compressed form. The list is put
+# into a data structure called `trie' (because it has a tree-like
+# appearance). Consider, for example, that you want to store the
+# following name mapping:
#
-# here's an explanation about the way we now store the Adobe Glyph List.
-# First of all, we store the list as a tree. Consider for example that
-# you want to store the following name mapping:
+# A => 1
+# Aacute => 6
+# Abalon => 2
+# Abstract => 4
#
-# A => 1
-# Aacute => 6
-# Abalon => 2
-# Abstract => 4
+# It is possible to store the entries as follows.
#
-# it's possible to store them in a tree, as in:
+# A => 1
+# |
+# +-acute => 6
+# |
+# +-b
+# |
+# +-alon => 2
+# |
+# +-stract => 4
#
-# A => 1
-# |
-# +-acute => 6
-# |
-# +-b
-# |
-# +-alone => 2
-# |
-# +-stract => 4
+# We see that each node in the trie has:
#
-# we see that each node in the tree has:
-#
-# - one or more 'letters'
+# - one or more `letters'
# - an optional value
# - zero or more child nodes
#
-# you can build such a tree with:
+# The first step is to call
#
-# root = StringNode( "",0 )
+# root = StringNode( "", 0 )
# for word in map.values():
-# root.add(word,map[word])
+# root.add( word, map[word] )
#
-# this will create a large tree where each node has only one letter
-# then call:
+# which creates a large trie where each node has only one children.
#
-# root = root.optimize()
+# Executing
#
-# which will optimize the tree by mergin the letters of successive
-# nodes whenever possible
+# root = root.optimize()
#
-# now, each node of the tree is stored as follows in the table:
+# optimizes the trie by merging the letters of successive nodes whenever
+# possible.
#
-# - first the node's letters, according to the following scheme:
+# Each node of the trie is stored as follows.
#
+# - First the node's letter, according to the following scheme. We
+# use the fact that in the AGL no name contains character codes > 127.
#
-# name bitsize description
-# -----------------------------------------
-# notlast 1 set to 1 if this is not the last letter
-# in the word
-# ascii 7 the letter's ASCII value
+# name bitsize description
+# ----------------------------------------------------------------
+# notlast 1 Set to 1 if this is not the last letter
+# in the word.
+# ascii 7 The letter's ASCII value.
#
-# - then, the children count and optional value:
+# - The letter is followed by a children count and the value of the
+# current key (if any). Again we can do some optimization because all
+# AGL entries are from the BMP; this means that 16 bits are sufficient
+# to store its Unicode values. Additionally, no node has more than
+# 127 children.
#
-# name bitsize description
-# -----------------------------------------
-# hasvalue 1 set to 1 if a 16-bit Unicode value follows
-# num_children 7 number of childrens. can be 0 only if
-# 'hasvalue' is set to 1
-# if (hasvalue)
-# value 16 optional Unicode value
+# name bitsize description
+# -----------------------------------------
+# hasvalue 1 Set to 1 if a 16-bit Unicode value follows.
+# num_children 7 Number of childrens. Can be 0 only if
+# `hasvalue' is set to 1.
+# value 16 Optional Unicode value.
#
-# - followed by the list of 16-bit absolute offsets to the children.
-# Children must be sorted in increasing order of their first letter.
+# - A node is finished by a list of 16bit absolute offsets to the
+# children, which must be sorted in increasing order of their first
+# letter.
#
-# All 16-bit quantities are stored in big-endian. If you don't know why,
-# you've never debugged this kind of code ;-)
+# For simplicity, all 16bit quantities are stored in big-endian order.
#
-# Finally, the root node has first letter = 0, and no value.
+# The root node has first letter = 0, and no value.
#
class StringNode:
def __init__( self, letter, value ):