PageRenderTime 105ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 1ms

/htdocs/oldchangelog.html

https://bitbucket.org/sortsmill/sortsmill-tools
HTML | 9713 lines | 8104 code | 1606 blank | 3 comment | 0 complexity | c47053390f6c3ff3ae2659190a9bd4b7 MD5 | raw file
Possible License(s): GPL-3.0, LGPL-2.0
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta name="generator" content=
  6. "HTML Tidy for Linux (vers 25 March 2009), see www.w3.org" />
  7. <!-- Created with AOLpress/2.0 -->
  8. <!-- AP: Created on: 16-Sep-2001 -->
  9. <!-- AP: Last modified: 29-Apr-2010 -->
  10. <title>Older changes to FontForge</title>
  11. <link rel="icon" href="fftype16.png" />
  12. <link rel="stylesheet" type="text/css" href="FontForge.css" />
  13. <style type="text/css">
  14. /*<![CDATA[*/
  15. p.c3 {text-align: center}
  16. span.c2 {color: red}
  17. p.c1 {text-align: right}
  18. /*]]>*/
  19. </style>
  20. </head>
  21. <body>
  22. <div id="in">
  23. <table align="right">
  24. <tr>
  25. <td>
  26. <blockquote id="lit">
  27. <b><small>CHAPLAIN:</small></b><br />
  28. &nbsp;It was very interesting; I was dreaming I
  29. stood<br />
  30. &nbsp;On Jacob's ladder, waiting for the gates to
  31. open.<br />
  32. &nbsp;And the ladder was made entirely of diminished
  33. sevenths.<br />
  34. &nbsp;I was surprised, but not put out. Nothing<br />
  35. &nbsp;Is altogether what we suppose it to be.
  36. <p class="c1"><i>The Lady's not for Burning</i><br />
  37. Christopher Fry</p>
  38. </blockquote>
  39. </td>
  40. </tr>
  41. </table>
  42. <p><a href="changelog.html">Current changes</a><br />
  43. <a href="pfaeditchangelog.html">Changes to PfaEdit (predecessor
  44. to FontForge)</a><br />
  45. Changes to the <a href="sfdchangelog.html">sfd format</a>.</p>
  46. <ul>
  47. <li>24-August-2008
  48. <ul>
  49. <li>
  50. <table align="left">
  51. <tr>
  52. <td><img src="FF32.png" width="32" height=
  53. "32" /></td>
  54. <td><img src="FFsfd32.png" width="32" height=
  55. "32" /></td>
  56. </tr>
  57. </table>
  58. <p>Changes to create a stub Mac application. Add an
  59. apple event handler to fontforge so that it will notice
  60. when the finder wants it to open files. Add icons, etc.
  61. so it will look like a mac app.</p>
  62. </li>
  63. <li>Make it possible to drag and drop lookups
  64. <ul>
  65. <li>from one font info window to another<br />
  66. &nbsp; &nbsp; (copy lookups from one font to
  67. another)</li>
  68. <li>within a font info window<br />
  69. &nbsp; &nbsp; (reorder lookups)</li>
  70. </ul>
  71. </li>
  72. <li>Layers can now be marked as either background or
  73. foreground.
  74. <ul>
  75. <li>Foreground layers may be generated into
  76. fonts</li>
  77. <li>Background layers may contain images. Pasting
  78. into an empty glyph in a background layer will not
  79. set the width. Splines in background layers do not
  80. make a glyph worth outputting.</li>
  81. </ul>
  82. </li>
  83. <li>Add a color picker so users can select glyph label
  84. colors other than red, cyan, green, etc.</li>
  85. <li>Memory problems with references, introduced recently,
  86. have been fixed.</li>
  87. <li>I hope I'm now getting keysyms right for non-latin
  88. menu short cuts.</li>
  89. <li>Typo in background layer patch could cause a crash in
  90. fonts with many layers.</li>
  91. <li>Werner wants an $iscid variable to determine whether
  92. a font is a cid-keyed font or not.</li>
  93. <li>add font.iscid to python too.</li>
  94. <li>python font.cid* variables didn't work, fix
  95. them.</li>
  96. <li>Add $haspython variable to normal scripting so I can
  97. detect if python is available.</li>
  98. <li>When pasting a reference into an order2 layer, ff
  99. would sometimes miss the fact that the instructions were
  100. out of date.</li>
  101. <li>Replace with references had the same problem.</li>
  102. <li>In scripting, instructions did not get checked for
  103. up-to-dateness</li>
  104. <li>In the charview, unlink ref only worked on the
  105. foreground layer.</li>
  106. <li>Patch by Barry (fixed up by me) to fix up open
  107. charviews when a layer is added.</li>
  108. <li>Barry points out that Contour.round and Layer.round
  109. are supposed to have an optional argument, but instead
  110. have a required arg.</li>
  111. <li>Just as pasting references screws up instructions, so
  112. does replace with reference. Do the same thing that we
  113. just did to rplref.</li>
  114. <li>When scripting without a UI, the char changed routine
  115. did not check to see if it should clear the instructions
  116. on a change. It now does.</li>
  117. <li>Setting device table adjustments from the accent pane
  118. of the Math dlg didn't work.</li>
  119. <li>File-&gt;Revert File (from the UI) didn't work.</li>
  120. <li>If a contextual chaining pos/sub in a sfd file
  121. referred to a non-existant lookup we would insert a NULL
  122. lookup into a rule. This would cause almost anything that
  123. used that lookup to crash. Now, simply remove the
  124. sequence/lookup info.</li>
  125. <li>When importing lookups we might import a lookup twice
  126. if it were nested.</li>
  127. <li>When generating bitmaps automatically from a script
  128. it was possible that the freetype library got initialized
  129. too late and we'd pass a NULL pointer to FT_Memory_Face
  130. -- and things would crash.</li>
  131. <li>In a quadratic layer of a glyph, when selecting an
  132. on-curve point and trying to make it interpolated, if
  133. that point had no control points then behavior was
  134. odd.</li>
  135. <li>didn't create an input context for top level window
  136. char and font views. This meant could only use ASCII in
  137. menus if the focus were in the top level window (in the
  138. scroll bars, or the menu bar.</li>
  139. <li>Typo in the code to display side bearings in the
  140. charview.</li>
  141. <li>FontForge assumed that all anchor classes for a given
  142. subtable were in sequence, but Panov has a font where an
  143. anchor class for a different subtable appears in the
  144. middle of a list of classes for the desired subtable.
  145. Result was garbage output, and View-&gt;Show Att
  146. crashed.</li>
  147. <li>View-&gt;Next/Prev [Def] &amp; Find In Font View
  148. don't work in charviews when there are tabs active.</li>
  149. <li>R. Sander points out that if you select an ordered
  150. set of lookups in one font and import them into another
  151. they become disordered. Not good.</li>
  152. <li>When pasting into a charview we only set the width if
  153. there was nothing in foreground. When pasting into the
  154. fontview we always set the width because we were clearing
  155. the foreground before we pasted (unless we did paste into
  156. -- then we didn't set the width).
  157. <p>With layers that should all change. We should only
  158. set the width if there is nothing in any of the
  159. potential foreground layers. Don't count the background
  160. layers or the grid psuedo layer. Don't count open
  161. contours (might be a secondary guide line layer or
  162. something). If we're going to clear a layer before
  163. pasting (normal behavior in fontview) then don't count
  164. the layer cleared.</p>
  165. </li>
  166. <li>Add several different behavior patterms for the
  167. metrics view. Users complain that the current
  168. multi-functional window is confusing and would prefer a
  169. view which only does kerning, or only sets the advance
  170. widths, etc.</li>
  171. <li>Due to a typo, merging two splinesets at a curve
  172. point generally left the point marked with default
  173. adjustment enabled on its control points.</li>
  174. <li>Another layers problem. Only in the foreground layer
  175. could anchor points be moved.</li>
  176. <li>Python glyph.unlinkReference command didn't
  177. work.</li>
  178. <li>My intent was that ligature carets positioned at 0
  179. didn't count (0 isn't meaningful -- a ligature with a
  180. zero-width first component?) but that only got
  181. implemented for 'lcar' table not for 'GDEF'. So fix that.
  182. <p>Also allow the user to specify exactly how many
  183. ligature carets s/he wants rather than just setting a
  184. minimum bound.</p>
  185. <p>Also 'lcar' (Apple) output was broken.</p>
  186. <p>Also neither AAT nor OpenType supports negative lig
  187. carets, so if the user drags a lig caret line negative,
  188. have it stick at 0.</p>
  189. </li>
  190. <li>Moving ligature carets always marked for an undo in
  191. the foreground layer. Register the movement in the layer
  192. in which it happens.</li>
  193. <li>When placing an accent glyph about which we know
  194. nothing, assume it should be centered on top.</li>
  195. <li>Change sfd.c so that it will treat the sequence
  196. "backslash newline" as no characters on input (er, except
  197. in ASCII85 input). And so that it thinks it can parse
  198. version 4 or the sfd format.
  199. <p>We don't generate version 4 yet, and we won't for a
  200. while. Version 4 will include the ability to insert
  201. backslash newline into long lines. This is so we can
  202. conform to the internet requirements of fewer than 990
  203. bytes on a line. And the delay is so that people don't
  204. scream at me for making an incompatible change to the
  205. format -- if I give the parser time to perculate
  206. through the user community, with luck no one will even
  207. notice -- especially as long lines are rare.</p>
  208. </li>
  209. <li>Selections/Clipboard didn't work in textfields on
  210. 64bit intel. There seems to be a bug in the 64bit Xlib
  211. which doesn't transfer 32 bit quantities properly. I was
  212. passing unicode strings as 32bit UCS4, but UTF8 will work
  213. just fine instead.</li>
  214. <li>Add the ability to clear all device tables associated
  215. with a kerning by classes table. (Needed because of a bug
  216. which introduced garbage).</li>
  217. <li>We didn't think we could read in a kerning subtable
  218. (class or pair) with device tables, so we converted them
  219. to pst data. We can read them in in optimized form and we
  220. should do so.</li>
  221. <li>Alexej points out that if a glyph has
  222. "instructions_out_of_date" set on it, then setting the
  223. instructions via a script should clear the bit -- but
  224. didn't.</li>
  225. <li>Werner points out that if a type2 charstring
  226. contained a sequence &lt;num&gt; endchar then ff would
  227. set the width of the charater even if the the width had
  228. already been set. Width can only be set on first stack
  229. clearing operation, any extra params on subsequent calls
  230. get ignored.
  231. <p>Actually it's worse than that, the spec says that if
  232. there are too many things on the stack then start
  233. parsing the stack from the unexpected end.</p>
  234. <p>Adobe have admitted that the obvious reading of
  235. their spec is incorrect (they can't quite bring
  236. themselves to say the spec is wrong). So revert some of
  237. the way we were parsing type2 charstrings.</p>
  238. </li>
  239. <li>Barry complains that when building ff does not apply
  240. the ".cap" suffix when using inverted breve.</li>
  241. <li>Valgrind finds a bug in drawing non-BMP characters in
  242. the metrics view.</li>
  243. <li>Alexej would like to be able to manipulate
  244. non-unicode glyphs with the text field of the metrics
  245. view. The textfield used to map all non-unicode code
  246. points to 0xfffd, but if the font doesn't make use of the
  247. supplementary private use areas (planes 15&amp;16) then
  248. create a mapping from the font into these areas so that
  249. we can represent non-unicode glyphs as funky private use
  250. glyphs.
  251. <p>(Only do this if font doesn't use these areas).</p>
  252. </li>
  253. <li>Alexej points out that in non-foreground quadratic
  254. fonts the "Points-&gt;Dont Interpolate" command doesn't
  255. do anything.
  256. <p>Fix a couple of other foreground specific things
  257. too.</p>
  258. </li>
  259. <li>Barry points out that setting a glyph's anchorPoints
  260. from python does not mark a glyph as changed nor force an
  261. update.</li>
  262. <li>Autoinstructor: large patch from Alexey:
  263. <ul>
  264. <li>handlles conflicting H/V stems much better;</li>
  265. <li>tries to place HStems between blues better;</li>
  266. <li>adds optional apparatus for instructing
  267. serifs;</li>
  268. <li>relies on generic point-to-stem snapping routines
  269. from stemdb.c;</li>
  270. <li>needs FPGM changed (older FF's glyph programs
  271. should still work, but FPGMs need updating!).</li>
  272. </ul>
  273. </li>
  274. <li>If the user has opened a backup sfd file (one that
  275. ends in .sfd~) and does a save on it, then pop up a save
  276. as dlg instead of blindly saving it. Saving it back to
  277. the backup is probably wrong, yet saving it onto the
  278. non-backup version without prompting the user is
  279. questionable.</li>
  280. <li>glyph.appendAccents didn't mark the glyph as changed
  281. nor did it force an update.</li>
  282. <li>Barry wants a way to control the use_my_metrics bit
  283. of a reference from python.<br />
  284. Give him a hack<br />
  285. glyph.useRefsMetrics(name[,set])</li>
  286. <li>Add a glyph.appendAccent() command.</li>
  287. <li>Ralf from end-if.de points out that when trying to
  288. change the kerning between two glyphs which have a kern
  289. class setting of 0, then ff keeps asking the same
  290. question several times before a non-zero value is
  291. entered. (once when the field is clicked in, once when a
  292. minus sign is typed, and once more when a number is
  293. entered).</li>
  294. <li>The python stuff won't compile under cygwin because
  295. it used pointers to stuff in shared libraries as
  296. initializers of static variables. It seems windows can't
  297. handle that. This patch should provide a work
  298. around.</li>
  299. <li>Add a font.importLookups (from another font) function
  300. to python scripting.</li>
  301. <li>When joining two splinesets (during glyph editing) we
  302. didn't pay attention to any user settings for the control
  303. points, and we'd just always refigure default control
  304. points. Now use user specified directions when
  305. possible.</li>
  306. <li>Add a problem (Find Problems) which will look through
  307. all glyphs for those with both contours and references,
  308. and which will create a new glyph to contain the contours
  309. and make a reference to it in the original.
  310. <p>Do something similar for bad transformation matrices
  311. (those with members 2 or more (or less than -2)).</p>
  312. </li>
  313. <li>Importing a kerning class from one font to another
  314. (and perhaps merging fonts) could cause memory problems
  315. if the number of second classes were bigger than the
  316. number of first classes.</li>
  317. <li>Retain sizes of bitmap and metrics views. People seem
  318. to like this even if I don't.</li>
  319. <li>Still problems with the guide lines layer
  320. <ol>
  321. <li>Displaying a point read bad memory (probably
  322. harmless, might cause visual artifacts).</li>
  323. <li>Edit-&gt;Undo in guide layer trampled
  324. memory.</li>
  325. </ol>
  326. </li>
  327. <li>Find Problems would occasionally pop up a blank
  328. problem dlg.</li>
  329. <li>Only show points of inflection in the active
  330. layer.</li>
  331. <li>If a glyph window were displaying something other
  332. than the foreground layer then changes in that window
  333. would not be reflected in dependant glyph windows (a
  334. change to tilde didn't show in atilde) nor in the
  335. fontview.</li>
  336. <li>In a cubic glyph with references, turning on point
  337. numbering did not renumber the references. They seem to
  338. be numbered for TrueType. Not sure where that comes
  339. from.</li>
  340. <li>Alexey points out that after deleting the active
  341. layer, ff does not update the internal bitmap font it
  342. used to display glyphs in the font view.</li>
  343. <li>Make "-lang ff" work for "-lang=ff", it's more
  344. consistent with the rest of the arguments.</li>
  345. <li>Add a -unique argument which means that FF checks to
  346. see if another fontforge is running on the current
  347. screen. If no other fontforge exists things proceed
  348. normally, but if there is another, then we send it our
  349. arguments and ask it to open them, and then we exit.</li>
  350. <li>Make the OFLib dialog have an option to download a
  351. preview when you click on a line (rather than requiring
  352. you press the [Preview] button for each).</li>
  353. <li>The BitmapsAvail and BitmapsRegen scripting functions
  354. were broken by the layers patch (they generated bitmaps
  355. of whatever was in the background layer).</li>
  356. <li>Put in some checks to warn the user when a 'kern'
  357. table subtable uses more than 10920 pairs.</li>
  358. <li>Give the user one of those "This operation cannot be
  359. undone" warnings when deleting a layer in Font Info.
  360. (Similar warning about instructions if user changes last
  361. quadratic layer(s) to cubic without deleting any).</li>
  362. <li>When deleting the last quadratic layer, delete the tt
  363. instructions also.</li>
  364. <li>When deleting a layer from a font, ff very carefully
  365. went through all open glyph views to make sure none was
  366. looking at the layer being deleted (and fixing them up if
  367. they were) -- but it totally ignored the font views.
  368. Their layers needed to be updated too. And the metrics
  369. views.</li>
  370. <li>The Import menu item in Font Info-&gt;Lookups popup
  371. menu was always enabled. It should not have been.</li>
  372. <li>Add menu items in Font Info-&gt;Lookups (popup menu)
  373. to do a global add/remove language from a specified
  374. script in all selected lookups.</li>
  375. <li>Get Info (maybe a few other things) didn't work on a
  376. selected reference which wasn't in the foreground
  377. layer.</li>
  378. <li>Copy/Paste of references only worked well in
  379. foreground layer.</li>
  380. <li>Only in the foreground layer was it possible to
  381. select a reference by clicking on it.</li>
  382. <li>Snapping to blues was broken due to a typo in the
  383. code.</li>
  384. <li>Still were a number of places where behavior depended
  385. on the spline order in the foreground layer:
  386. <ul>
  387. <li>Could only debug a glyph if the foreground layer
  388. were quadratic</li>
  389. <li>Show gridfit used some point numbers from the
  390. foreground layer and some from the layer being
  391. shown.</li>
  392. <li>Gridfit didn't change when changing layers.</li>
  393. </ul>
  394. </li>
  395. <li>Peter Lunicks points out that a tooltip in the prefs
  396. dlg actually was for a different preference item.</li>
  397. </ul>
  398. </li>
  399. <li>20-July-2008
  400. <ul>
  401. <li>Updated Russian UI</li>
  402. <li>Updated Simplified Chinese UI</li>
  403. <li>Small Caps dialog greatly rewritten and merged into
  404. the sub/superscript dialog and a new change glyph
  405. dialog.</li>
  406. <li>Alexey Kryukov makes Small Caps and friends deal with
  407. diagonal stems.</li>
  408. <li>Update the upload mechanism to OFLib to send a
  409. preview image, license text (if specified in our
  410. database) and fontlog (again, if in our database).
  411. Currently OFLib throws away both the license info and the
  412. fontlog, but I hope they will fix that in time.</li>
  413. <li>Add a dialog to browse fonts on the OFLib.</li>
  414. <li>Fix some bugs in feature file generation of
  415. contextual chaining lookups which refer to marks. Note
  416. these are not supported in the spec. This is a FontForge
  417. only extension.</li>
  418. <li>If a script contain no default language features (but
  419. did contain some languages) then ff produced a garbage
  420. script table for GPOS/GSUB.</li>
  421. <li>A number of Dialogs still did not autosize themselves
  422. for different languages Create Hints, Kern (Anchor) Pair,
  423. Review Hints.</li>
  424. <li>Still places where ff uses the foreground layer
  425. rather than the current layer to determine if a glyph is
  426. quadratic.</li>
  427. <li>On systems using different font metrics, the debug
  428. pane looks bad with the buttons partly covered by the
  429. instruction pane. If the font is large, and the cvt dlg
  430. empty, then I'm told ff complains.</li>
  431. <li>Barry points out that Add Encoding Slots scrolls to
  432. the wrong place.</li>
  433. <li>Adding glyphs in compacted encodings caused
  434. problems.</li>
  435. <li>When the user resizes the outline glyph window,
  436. retain that size and use it for the default size of
  437. subsequent invocations of the window.</li>
  438. <li>It used to be that whenever ff opened an sfd file
  439. then all subsequent new fonts (or fonts opened from real
  440. font files) would be displayed in windows the same size
  441. as the one requested in the sfd file. Only set the window
  442. size preference when the user explicitly changes it, not
  443. upon openning something with a different setting.</li>
  444. <li>In a CID-keyed font, when opening an empty CID slot,
  445. ff could trample memory.</li>
  446. <li>BlueFuzz support for autohinter and metafont.</li>
  447. <li>Add some checks to make sure that we can survive bad
  448. font data without crashing.</li>
  449. <li>When trying to change kerning between the last two
  450. glyphs in the metrics view using the text field (rather
  451. than dragging the line) then the textfield would change,
  452. but the kerning would not.</li>
  453. <li>In the metrics view, give the user several options
  454. about the grid (which shows the advance widths of the
  455. glyphs)
  456. <ul>
  457. <li>hidden</li>
  458. <li>fully displayed</li>
  459. <li>small lines at the top and bottom of the
  460. pane</li>
  461. <li>fully displayed except when the user is adjusting
  462. kerning or the advance width, etc. When adjusting
  463. grid vanishes until user releases the mouse
  464. button.</li>
  465. </ul>
  466. <p>(setting is sticky).</p>
  467. </li>
  468. <li>Allow the user to customize the colors in the metrics
  469. view.</li>
  470. <li>In the metrics view (or in the print display dlg)
  471. when glyphs are overlapping (e asier to see when glyphs
  472. are large) then the places where one glyph ends and
  473. another begins often have a faint halo of lighter pixels.
  474. Try to improve things and make these joins be more
  475. uniform in color.</li>
  476. <li>Add minimal support for alpha channels (treat them as
  477. a bitmask for transparent).</li>
  478. <li>I find it really hard to believe that this is an
  479. error, but I have a second hand report that MicroSoft
  480. claims that it is. To me making it erroneous is pointless
  481. and annoying, but I don't write the spec.<br />
  482. Add to Find Problems and Validate a check to see that if
  483. a base glyph (or mark) contains an anchor point in one
  484. anchor class in a lookup subtable, then it must have
  485. anchor points for ALL anchor classes in that
  486. subtable.</li>
  487. <li>Fontimage would crash if asked to process a font with
  488. glyphs not in BMP. Make fontimage better about fonts
  489. which contain no standard scripts (Apostolos's Phaistos
  490. font).</li>
  491. <li>A few tweaks to make stemdb.c usable for resizing
  492. glyphs and stem control.</li>
  493. <li>When importing lookups into a font, append the
  494. fontname to the lookup name only if there is already a
  495. lookup in the new font with the original name.</li>
  496. <li>Empty glyphs containing a "." in the name could cause
  497. ff to crash when doing or checking to see if it could do
  498. a build accented.</li>
  499. <li>Gasp editing was broken (still) from the change to
  500. the cleartype stuff.</li>
  501. <li>Andrey P. would like to see a reference's bounding
  502. box in the Element-&gt;Get Info dlg for the
  503. reference.</li>
  504. <li>Revert glyph had some stray memory references.</li>
  505. <li>Add two proposed language tags for IPA use (one for
  506. IPA and one for Americanist).</li>
  507. <li>In an empty python layer layer.boundingBox should
  508. return a tuple of 4 zeros, instead it returned a tuple of
  509. 2 zeros and 2 random garbage values.</li>
  510. <li>Validate dlg's scrollbar was broken, and you couldn't
  511. drag the thumb up to the top (you could get it to the top
  512. by other ways).</li>
  513. <li>Add a revalidate all menu item to the window to force
  514. a reevaluation of the entire font.</li>
  515. <li>Add ability to import graphics from a page of a pdf
  516. file.</li>
  517. <li>Python interface does not categorize points.</li>
  518. <li>The (python) psMat.skew command skewed vertically,
  519. rather than horizontally and by the wrong amoung.</li>
  520. <li>When doing a font sample from a script which did not
  521. set the page width/height explicitly, then ff would use a
  522. size of 0 for each. All text drawn was out of the imaging
  523. area, lines were too short (as well as invisible), too
  524. many pages (all blank).</li>
  525. <li>Barry points out that "print" is a python keyword. So
  526. font.print() doesn't work. Call it printSample()
  527. instead.</li>
  528. <li>Freetype now (or in the next release, 2.3.7) supports
  529. dropout modes, which means fontforge must do a bit of
  530. work when generating rasters for the debugger.</li>
  531. <li>Move some logic out of fontimage.pe and into
  532. fontforge to make a default string for a font image more
  533. widely available.</li>
  534. <li>When saving an image fromt the print dlg, the top
  535. line was off the top of the image.</li>
  536. <li>Interpolated points need not be on integral
  537. boundaries, but ff was checking for them. Different
  538. problems in validator and find problems, but both
  539. wrong.</li>
  540. <li>In the point near hint check (find problems), ff was
  541. leaving the hint selected.</li>
  542. <li>Fix some rounding errors in spline/line
  543. intersection.</li>
  544. <li>in Font Info, after user pressed [OK] FF set the
  545. state of the subscript superscript default checkbox to
  546. the panose default checkbox by mistake. This means if the
  547. user defined panose and not sub/super garbage would
  548. appear in the OS/2 sub/super fields.</li>
  549. <li>fontimage didn't get the script right, so features
  550. weren't applied properly.</li>
  551. <li>More work on conflicting stems.</li>
  552. <li>Pressing [Done] in the print dialog would right to a
  553. random address on the stack. Depending on what was going
  554. on when this was done it could cause a crash.</li>
  555. <li>Fix an uninitialized variable introduced by the last
  556. change to order2 conversion.</li>
  557. <li>Add the ability to open an archive and peek inside it
  558. for fonts. Useful if we want to open stuff from the open
  559. font library which is often packaged in zip files.</li>
  560. <li>Add a new validation check to see if a glyph has
  561. non-integral coordinates. Only an error in TrueType (and
  562. can't happen when fontlinting a truetype file, but could
  563. happen on an sfd file). Add some logic to ask user if
  564. they intend to generate truetype in cases where we aren't
  565. sure.</li>
  566. <li>Add a preference which allows people to change the
  567. pixmap dir -- and do what we can to reload images from
  568. the new dir. Some old windows may not be updated, but new
  569. ones should reflect the new stuff.</li>
  570. <li>When ff changed the name of a glyph, it fixed up all
  571. the tabs in charviews to the new name -- but in neglected
  572. to refresh them. So they still showed on the screen with
  573. the old name (until something forced a refresh).</li>
  574. <li>The Anchor Class dialog (which lists all anchor
  575. classes of a subtable) only let you create an Anchor
  576. Control dialog for the first anchor class.</li>
  577. <li>Guard (harder) against generating pathological
  578. results when converting cubic to quadratic splines.</li>
  579. <li>If we had a spline which almost doubled back on
  580. itself, sufficiently so that the spline intersector found
  581. lots of really close points, which it called
  582. intersections, but not sufficiently so that our collinear
  583. detector caught it, then we'd generate a ton of
  584. intersections, overflow certain arrays, and trash the
  585. stack. =&gt; ff would crash. I didn't think this could
  586. happen, until someone provided a test case, so put in
  587. guards against this.</li>
  588. <li>provide python access to
  589. <blockquote>
  590. glyph.altuni
  591. </blockquote>
  592. <p>either None, or a tuple of tuples, one sub-tuple for
  593. each alternate. each sub-tuple is (alternate-unicode,
  594. variation selector (or -1), reserved for future=0
  595. now).</p>
  596. </li>
  597. <li>Trying to build dieresis with "PreferSpacingAccents"
  598. set meant that we tried to build it out of itself, and
  599. crashed.</li>
  600. <li>Also fix so that 0x22EF (ellipsis variant) is built
  601. out of centered dot in a spacing mode, while Ldot uses it
  602. in a non-spacing mode.</li>
  603. <li>Merge fonts broken again. This time references didn't
  604. work.</li>
  605. <li>Provide a mechanism for loading image files to make
  606. menu item icons (instead of expecting the images to live
  607. in memory inside of fontforge). Then provide a bunch of
  608. these icons so the menus will look more interesting.
  609. <p>Provide some icons</p>
  610. <p>Also update the install procedure to put them in the
  611. right place.</p>
  612. <p>Preference item containing a directory from which to
  613. read icon files</p>
  614. </li>
  615. <li>FF crashed when opening CID keyed fonts with
  616. compact_on_open set.</li>
  617. <li>If fontforge got an end of file in the middle of
  618. reading a (corrupt) cff font, then ff would sit there
  619. reading endlessly and ignoring the error.</li>
  620. <li>Off by one error in drawing the large "pixel"
  621. rectangles that show grid fit generated.</li>
  622. <li>Werner points out that my instruction glosses are out
  623. of date:
  624. <ol>
  625. <li>Was following Apple's docs for SCANTYPE, not MS.
  626. MS has a number of new values.</li>
  627. <li>Was using an old convention for accessing PPEM
  628. which broke after freetype 2.3.5</li>
  629. <li>Added the FreeType return for GETINFO.</li>
  630. </ol>
  631. </li>
  632. <li>Featurefile patch from Barry.</li>
  633. <li>I used to think that the max glyph instruction length
  634. field of 'maxp' refered to fpgm and prep. I thought this
  635. because there was a footnote (which I now see was for a
  636. different field) saying the field also applied to fpgm
  637. and prep.</li>
  638. </ul>
  639. </li>
  640. <li>07-June-2008
  641. <ul>
  642. <li>New Russian translation of the UI</li>
  643. <li>Sometimes FF didn't set the message locale directory
  644. properly.</li>
  645. <li>Since FF will crash if you load a feature file when
  646. the Font Info window is open for that font, close the
  647. Font Info window when loading a feature file.</li>
  648. <li>New <a href="Styles.html#Italic">dialog</a> to help
  649. users convert an upright font into an italic one.</li>
  650. <li>New <a href="Styles.html#Smallcaps">dialog</a> to
  651. help users create small caps glyphs.</li>
  652. <li>New <a href="Styles.html#SubSuper">dialog</a> to help
  653. users create subscript/superscript glyphs.</li>
  654. <li>And matching python commands: font.italicize(),
  655. font.addSmallCaps(), layer.stemControl()</li>
  656. <li>Make it clear that the transform dlg from the
  657. fontview will move the width of a glyph by default, and
  658. provide a checkbox so the user can turn this off.</li>
  659. <li>Fix various bugs in argument handling of
  660. fontforge.askChoices</li>
  661. <li>Change font.removeGlyph to accept a single string
  662. argument to remove the glyph with that name.</li>
  663. <li>FF didn't like decimal points in the metrics view l/r
  664. bearing fields -- even though it would put them there
  665. itself.</li>
  666. <li>Metrics windows weren't being remetricked after a
  667. feature file was loaded (nor an afm file for that
  668. matter). Nor were they remetricked after lookups changed
  669. in fontinfo.</li>
  670. <li>Add to python
  671. <ul>
  672. <li>font.revert()</li>
  673. <li>font.revertFromBackup()</li>
  674. <li>font.buildOrReplaceAALTFeatures()</li>
  675. </ul>
  676. </li>
  677. <li>Changing a glyph's width from a python script didn't
  678. update the metrics window.</li>
  679. <li>Adding two languages in the same script to a lookup
  680. in a feature file didn't work.</li>
  681. <li>It wasn't possible to rename an anchor class (at
  682. least not by the obvious method through the dlg).
  683. Attempting to delete an anchor class popped up an error
  684. message which didn't provide all its own arguments and so
  685. could crash on some systems.</li>
  686. <li>Better error recovery in feature file parsing.</li>
  687. <li>Werner points out that since I allow the user to see
  688. points in references transformed to their ultimate
  689. position, I should also transform the raster.</li>
  690. <li>Patch by Barry to fix kerning classes (ie. figuring
  691. out WHAT glyphs go into a class).</li>
  692. <li>When parsing a feature file which used a default
  693. languagesystem setup, ff only used the most recent
  694. script.</li>
  695. <li>If a lookup contained no data (no subtables, or empty
  696. subtables) then when generating a feature file ff would
  697. output stuff to declare a lookup, but when there was no
  698. content that frame could not be parsed as it would be
  699. impossible to figure out the lookup type. Try to avoid
  700. that.</li>
  701. <li>FF did not put contextual lookups on all the lists
  702. they needed to be on when loading them from a feature
  703. file.</li>
  704. <li>Sometimes the Open Font dlg opened with the files
  705. shifted left so the first characters of the name were
  706. outside the window.</li>
  707. <li>Patch from Barry Schwartz. "include" syntax in
  708. feature files didn't work.</li>
  709. <li>Sort button in the lookups pane of font info didn't
  710. refresh the window after it finished (so things looked
  711. unsorted even after pressing it).</li>
  712. <li>When doing a Build Accented on dotted glyphname
  713. (agrave.sc, etc.) the accent was positioned using anchors
  714. in the undotted base glyph (a rather than a.sc).</li>
  715. <li>Fix various problems with tt debugging.</li>
  716. <li>The XUID and UniqueID fields of a PostScript font are
  717. deprecated, yet FF has continued to output them by
  718. default. Make it so FF no longer does so.</li>
  719. <li>When outputing an sfd file, ff would sometimes output
  720. a truetype spline as a line if it had a collinear
  721. control-point. I thought I'd taken care of that, but
  722. here's another case which needed fixing.</li>
  723. <li>Typo when loading the underline position field from a
  724. 'post' table. I was subtracting half the underline width.
  725. I should have been adding it instead. (Why did adobe use
  726. a different definition of the same concept in two places?
  727. GRRR).</li>
  728. <li>It wasn't possible to make the foreground layer
  729. invisible.</li>
  730. <li>When the file chooser bookmark list got too long ff
  731. would crash.</li>
  732. <li>I wasn't doing the obvious checks to the sfnt header
  733. in font lint. So now:
  734. <ol>
  735. <li>Check that there are no duplicate table
  736. entries</li>
  737. <li>Check that there are no overlapping tables</li>
  738. <li>Check that no tables extend beyond the end of
  739. file</li>
  740. <li>Check that the file's checksum is correct</li>
  741. <li>Check that each table's checksum is correct</li>
  742. <li>Check that the number of tables is reasonable and
  743. that the binary search header is consistent with the
  744. number of tables.</li>
  745. <li>Check that required tables are present</li>
  746. <li>Check that certain fixed length tables have the
  747. correct length.</li>
  748. </ol>
  749. </li>
  750. <li>Werner would like to be able to debug (truetype
  751. instructions) when using non-square pixels (x_ppem !=
  752. y_ppem).</li>
  753. <li>Barry wants to be able to close a tab. Add a menu
  754. item.</li>
  755. <li>When a glyph's name changed, I did not update the
  756. names in any tabs in the charviews -- so those tabs would
  757. stop working after the change.</li>
  758. <li>Scrollbar in points debug window wasn't set
  759. right.</li>
  760. <li>A. Panov provides a patch. Prefs was losing
  761. bookmarks.</li>
  762. <li>the new release of volt reveals some new opentype
  763. tags.</li>
  764. <li>If we have a glyph named "agrave.sc" or "eacute.sc"
  765. then FF will now let you build this as an accented
  766. character. It will remove the suffix from then name, and
  767. look up the components of the bare glyph. Then for the
  768. first component it will search for a glyph named "a.sc"
  769. and insert it. For the accents it will use "grave.sc" if
  770. present, and "grave" if it is not.</li>
  771. <li>FF wasn't handling a FontMatrix in the top dict of a
  772. cid font.</li>
  773. <li>Trying to filter for fig files in the Import dlg
  774. caused a crash.</li>
  775. <li>Check for bad OS/2 versions (that is, versions
  776. windows will reject) when loading a font.<br />
  777. Connect validation's "Points too far" with Find Problem's
  778. version.<br />
  779. Make fontlint aware of the new validation states.<br />
  780. When generating a font we complained about bad os/2
  781. version only if they asked for a validation. Move it
  782. somewhere more prominant.</li>
  783. <li>Add two new problems to find
  784. <ol>
  785. <li>Points too far apart</li>
  786. <li>Bitmap advance width different from scaled
  787. outline advance widths</li>
  788. </ol>
  789. <p>(also boxify the Find Problems dlg).</p>
  790. </li>
  791. <li>Add a new validation state: Test that points aren't
  792. too far appart (must be within 32767 of each other or we
  793. can't output them).</li>
  794. <li>Try a little harder to get some of the obscure code
  795. pages right in the OS/2 table.</li>
  796. <li>Was getting the first glyph index of OS/2 wrong for
  797. OTF fonts.</li>
  798. <li>If an sfnt contains embedded bitmaps, and if those
  799. bitmaps contain a glyph whose advance width is different
  800. from that expected by scaling the horizontal advance of
  801. the vector data, then windows will only get the correct
  802. metrics if the "Instructions modify width" bit is set in
  803. the 'head'.flags field.</li>
  804. <li>If the "changedsincelasthinted" bit got set on a
  805. glyph by the unlink/remove overlap flag on a glyph during
  806. font saving, then the glyph did not get restored to its
  807. original state.</li>
  808. <li>Doing an Undo in the Guidelines layer didn't work,
  809. usually crashed.</li>
  810. <li>Validate didn't work on CID keyed fonts.</li>
  811. </ul>
  812. </li>
  813. <li>29-Apr-2008
  814. <ul>
  815. <li>Validate didn't work in CID keyed fonts.</li>
  816. <li>Pierre Hanser wants an X Resource
  817. (fontforge.CharView.Rulers.FontSize) to specify the font
  818. size of text displayed in the info line and the rulers. I
  819. have applied his patch, but have made no effort to insure
  820. that text will fit in the space allowed for it.</li>
  821. <li>Hmm. Freetype seems to dislike rasterizing some
  822. complex outlines at large pixelsizes in black and white,
  823. but seems fine with doing them in greyscale.</li>
  824. <li>When opening a ttc file (and posting a dlg which
  825. lists all the fonts in the file) try to find a fontname
  826. in the current locale. We used to look first for English
  827. and then anything. Now try: First current locale, then
  828. english, then anything.</li>
  829. <li>Make the Open Font dlg (and similar file chooser
  830. dlgs) be customizable, and store that info in prefs.
  831. Specifically control whether directories are displayed in
  832. alphabetical order among other files, before normal
  833. files, or in a separate pane.
  834. <p>Also add a bookmark (and back/forward)
  835. mechanism.</p>
  836. </li>
  837. <li>Add support for opening a font from http &amp; ftp
  838. URLs. Can browse ftp URLs, and save fonts back to
  839. ftp.<br />
  840. <code>$ fontforge
  841. http://openfontlibrary.org/people/Nasenbaer/Nasenbaer_-_Widelands.ttf</code></li>
  842. <li>The validation patch broke the save mac family
  843. dialog, and then the upload to open font library broke it
  844. further.</li>
  845. <li>When doing expand stroke, it is possible to have two
  846. points so close together that there is no data on the
  847. curve in between the two. If this happens
  848. ApproximateFromPointsSlopes can't do a good job. So be
  849. careful of this case.</li>
  850. <li>Layers change introduced a potential crash in the
  851. Embolden command.</li>
  852. <li>fontimage didn't draw the first line.<br />
  853. Add a cgi front end to <a href=
  854. "fontimage.html">fontimage</a> so now it is possible to
  855. get a font sample of any font on my website.</li>
  856. <li>In the Display dlg, if you changed the font, or the
  857. point size without selecting something, then that change
  858. would vanish instantly. Fix that.
  859. <p>Also, was a crash bug when mixing a font with a
  860. baseline table and a font without one (in the disply
  861. dlg).</p>
  862. </li>
  863. <li>Add a command to insert text into a glyph.
  864. (<code>Element-&gt;Insert Text Outlines)</code> It adds
  865. the text outlines directly (instead of a draw command
  866. using another font) because most fonts can't include text
  867. drawing in their glyphs. Also include a Bind to Path
  868. variant.</li>
  869. <li>GLyph lists in kerning classes (in show att) were
  870. displayed as ligatures.</li>
  871. <li>Upgrade to unicode 5.1</li>
  872. <li>If an sfd file were saved with spiros active, and
  873. then loaded into a version of fontforge without libspiro,
  874. then bad things would happen. Whenever we check that
  875. spiros are active also check that they can be active, and
  876. add some warnings for the user to let him/her know that
  877. spiros aren't available.</li>
  878. <li>Add a tile pattern command (if --enable-tile-path)
  879. this allows the user to replicate any given pattern in
  880. another glyph.
  881. <p>This could be used to produce a grid of guidelines,
  882. or, in conjunction with
  883. <code>Element-&gt;Overlap-&gt;Intersec</code>t it could
  884. provide a poor man's "Pattern Fill" (Since Pattern
  885. fills are only available in type3 fonts this sort of
  886. makes them work for any font type).</p>
  887. </li>
  888. </ul>
  889. </li>
  890. <li>30-Mar-2008
  891. <ul>
  892. <li>Add support for the OpenType 'BASE' table, and to a
  893. lesser extent for Apple's 'bsln' table.
  894. <p>Add python scripting (font.horizontalBaseline,
  895. font.verticalBaseline) too.</p>
  896. <p>Add support under Show ATT.</p>
  897. <p>Remove the old vertical origin field.</p>
  898. </li>
  899. <li>Add the ability to create a dummy 'DSIG' table (one
  900. containing no signatures) so that Windows will show an
  901. opentype icon for a font with extension 'ttf'</li>
  902. <li>Add support for gradient and pattern fills to type3
  903. fonts (only if <code>./configure --enable-type3</code> is
  904. specified, of course.
  905. <p>Also add support for cliping paths</p>
  906. <p>Make fonts containing images work in pdf output.</p>
  907. </li>
  908. <li>Bump the sfd version number. This should have
  909. happened in the last release, but I didn't realize it was
  910. needed then, thus there will be sfd files with an
  911. incorrect version number (2) when it should be 3. However
  912. that should not cause the current parser problems.</li>
  913. <li>New Greek translation from Apostolos</li>
  914. <li>Updated Polish translation from Michal</li>
  915. <li>Apostolos points out that compiling on systems
  916. without freetype (Solaris boxes) was broken after last
  917. months layers patch.</li>
  918. <li>Werner suggested various improvements to Show ATT:
  919. <ul>
  920. <li>Lookups should be sorted</li>
  921. <li>Glyph images should be drawn in more cases
  922. (before, just for substitutions)</li>
  923. </ul>
  924. </li>
  925. <li>Patch from Alexey, for better handling conflicts
  926. between diagonal and H/V stems.</li>
  927. <li>Do a more consistent job of handlong curved stem
  928. segments. Also collect point data for off-curve points
  929. too (may be useful in future for TTF hinting).</li>
  930. <li>Last month I put in a patch to make sure the lsb as
  931. stored in the 'hmtx' table was really the glyph's lsb if
  932. bit 1 of the head.flags field were set. Unfortunately I
  933. read in the lsb as an unsigned number which shifted
  934. negative lsbs off to around 65535. FF sometimes refused
  935. to rasterize them. Of course when the font was generated
  936. they got truncated back to negatives in the output.</li>
  937. <li>Add a preference item so that fonts will be
  938. automagically compacted when they are opened.</li>
  939. <li>Add a new preference item (SeekCharacter) to allow
  940. users to control which character will be displayed when
  941. opening a new font. Normally FontForge displays 'A', but
  942. that's a bit latin-alphabet-centric.</li>
  943. <li>If palettes were not docked, then a complicated
  944. series of events could lead to a crash after closing a
  945. TilePath (Math kerning, Gradient Fill, etc.) dialog.</li>
  946. <li>Was not outputting the %%LanguageLevel DSC
  947. comment.</li>
  948. <li>Generating a CID-keyed otf font was broken by the
  949. layers patch. (Only the background layer was
  950. output).</li>
  951. <li>Encoding-&gt;Add Encoding Slots didn't work for
  952. CID-keyed fonts.</li>
  953. <li>Autoinstructor does more consistent vertical stem
  954. placement for mono and grayscale. Advance width scales
  955. much better. One downside: letters tend to 'glue' at
  956. small ppems.</li>
  957. <li>When FF read in a pairwise positioning lookup with no
  958. change to the pos of the first glyph, and an x change to
  959. the second glyph it treated that as a r2l kern pair even
  960. if the lookup was l2r. This lead to problems.</li>
  961. <li>In the Print/Display window all vertical GPOS
  962. positioning was diametrically opposed to the direction it
  963. should have gone (there was a sign error).</li>
  964. <li>Print managed to break itself somehow. Print of a
  965. font display to ps file (or was it pdf) didn't work.
  966. Type3 pdf fonts were broken, last glyph omitted.</li>
  967. <li>In the fontview the horizontal advance and baseline
  968. metrics lines were drawn as if bitmap magnification were
  969. 1 (so if bitmap mag&gt;1 they were in the wrong
  970. place).</li>
  971. <li>In the char view, when the active tool is the scale
  972. tool, show the scale factors on the info line.</li>
  973. <li>The default set for control points of a corner point
  974. before/after an hv curve point was to have no control
  975. point. Make it be the same as a normal curve.</li>
  976. <li>layers patch broke type3 editing in that: in a type3
  977. font glyphs don't have the same number of layers so it is
  978. possible to move from one glyph to another in the char
  979. view and have the current layer become invalid.</li>
  980. </ul>
  981. </li>
  982. <li>9-Mar-2008
  983. <ul>
  984. <li>Undefined value in the martlett patch.</li>
  985. <li>A variable was placed on the stack in font info which
  986. needed a longer lifetime. This would probably mean that
  987. after several remetrickings of that window the jump to
  988. OS/2 Unicode ranges in the Unicode ranges pane would
  989. appear in a strange color and oddly shaped. I never saw
  990. it happen, but it should have. The variable is now
  991. static.</li>
  992. <li>When ff read in a contextual subs by glyphs it would
  993. reorder each glyph list (backtrack, lookahead and normal)
  994. so that the glyphs were in GID order. So "a b c" would
  995. probably come out fine in the lookahead list, but would
  996. be reversed in the backtrack, while "c b a" would be
  997. reversed in the lookahead). Ug.</li>
  998. <li>The code which decided on whether to apply a chaining
  999. lookup approached backtrack data in the wrong order (so
  1000. only lookups with either 0 or 1 backtrack entries worked.
  1001. Which was all I used to test).</li>
  1002. <li>New fonts were created with relative filenames, this
  1003. screwed up some font searches. Make 'em absolute.</li>
  1004. <li>Deleting something in the guidelines layer probably
  1005. caused a crash.</li>
  1006. </ul>
  1007. </li>
  1008. <li>2-Mar-2008
  1009. <ul>
  1010. <li>
  1011. <b><big>Layers</big></b>
  1012. <p>The big change in this release is that every font
  1013. database can now contain multiple layers. Before this
  1014. all layers in a font used the same type of splines and
  1015. there were only 2 or 3 of them.</p>
  1016. <ul>
  1017. <li>Guideline semi-layer -- where all the glyphs of
  1018. the font shared the same set of outlines, to which
  1019. points would snap if desired.</li>
  1020. <li>A background layer -- which could contain
  1021. outlines and also images which could be autotraced
  1022. into the foreground layer.</li>
  1023. <li>A foreground layer -- which was what the font
  1024. really looked like, and what went into generated
  1025. fonts</li>
  1026. </ul>
  1027. <p>Now there may be any number of layers, and each
  1028. layer can contain different types of splines -- so one
  1029. database can contain both quadratic and cubic data and
  1030. can store data for both PostScript and TrueType
  1031. fonts.</p>
  1032. <p>In a normal font all glyphs have the same number of
  1033. layers (this is not true in a type3 font, which each
  1034. glyph may have it's own set of layers). You may set the
  1035. number, names and types of layers width the
  1036. <code>Element-&gt;Font Info-&gt;Layers</code> pane.</p>
  1037. <p>In the font view you can select which layer is
  1038. active (and displayed) with the
  1039. <code>View-&gt;Layers</code> menu item. You can copy
  1040. selected glyphs of one layer to another (automagically
  1041. adjusting the spline type if needed) with
  1042. <code>Edit-&gt;Copy Layer To Layer</code>. You can
  1043. compare to layers for differences with
  1044. <code>Element-&gt;Compare Layers...</code>.</p>
  1045. <p>In the character view the Layers palette has
  1046. changed. The things which controlled the visibility of
  1047. hints have moved to the <code>View-&gt;Show</code> menu
  1048. (as have some other entries that used to be in the top
  1049. level <code>View</code> menu). The layers palette
  1050. solely displays the glyph's layers and controls which
  1051. layer is active.</p>
  1052. <p>The <code>File-&gt;Generate Fonts...</code> dialog
  1053. allows you to specify which layer is to go into the
  1054. font. Note that many things remain common: the hints
  1055. and truetype instructions apply to all layers. GPOS,
  1056. GSUB, kern, and morx information is common all layers.
  1057. The outlines may differ in detail, but outlines from
  1058. which a font will be generated should have the same
  1059. shape.</p>
  1060. <p>Add new python stuff to handle layers:</p>
  1061. <dl>
  1062. <dt>fontforge.activeLayer()</dt>
  1063. <dd>Returns the currently active layer</dd>
  1064. <dt>font.layer_cnt</dt>
  1065. <dd>Returns the number of layers in the font</dd>
  1066. <dt>font.layers</dt>
  1067. <dd>
  1068. A dictionary like object which can be indexed
  1069. either by an integer between 0 (inclusive) and
  1070. layer_cnt (exclusive) or by the name of a layer.
  1071. After indexing it returns a LayerInfo object.
  1072. LayerInfo objects have no independant existance,
  1073. and contain a layer's name and a boolean indicating
  1074. whether the layer is_quadratic.
  1075. <blockquote>
  1076. <pre>
  1077. font.layers[1].name = "Foreground"
  1078. font.layers[0].is_quadratic = TRUE
  1079. </pre>
  1080. </blockquote>
  1081. <dl>
  1082. <dt>You may delete a layer</dt>
  1083. <dd><code>del font.layers["Extra
  1084. layer"]</code></dd>
  1085. <dt>You may add a new layer</dt>
  1086. <dd>
  1087. <code>font.layers.add("name",is_quadratic)</code></dd>
  1088. </dl>
  1089. <p>(this object has an iterator which returns the
  1090. names of all layers)</p>
  1091. </dd>
  1092. <dt>glyph.layer_cnt</dt>
  1093. <dd>Returns the number of layers in the glyph (this
  1094. is the same as the number in the font, except for
  1095. type3 fonts).</dd>
  1096. <dt>glyph.layers</dt>
  1097. <dd>Returns a dictionary like object which may be
  1098. indexed by layer name or an integer [0,layer_cnt) as
  1099. above. The result is a standard layer object. (this
  1100. object has an iterator which returns the names of all
  1101. layers)</dd>
  1102. <dt>glyph.reflayers</dt>
  1103. <dd>Returns a dictionary like object which may be
  1104. indexed by layer name or an integer [0,layer_cnt) as
  1105. above. The result is a standard list of references.
  1106. (this object has an iterator which returns the names
  1107. of all layers)</dd>
  1108. <dt>layer.export</dt>
  1109. <dd>It is now possible to export the contours of a
  1110. layer (before only glyphs could be exported)</dd>
  1111. <dt>glyph.export</dt>
  1112. <dd>Slight change to the semantics. When outputting
  1113. an outline file, there is now an optional second
  1114. argument which specifies the layer to output. (again
  1115. integer or layer name).</dd>
  1116. <dt>font.generate</dt>
  1117. <dd>Has a new keyword argument "layer" to specify
  1118. which layer should be output.</dd>
  1119. </dl>
  1120. </li>
  1121. <li>M.P. Suzuki requests a way to load the entire 'glyf'
  1122. table of a ttc. Actually he would like to load all 'glyf'
  1123. tables of a ttc, but that would cause all kinds of
  1124. problems (multiple fpgm, prep, maxp, cvt tables, trying
  1125. to fix up GIDs in GPOS/GSUB/kern/* tables, dealing with
  1126. fonts with so many glyphs they could not be generated,
  1127. ...)
  1128. <p>So the command line now takes an --allglyphs
  1129. argument, and the scripting open commands now take a
  1130. value of 4 for the openflags argument to mean this.</p>
  1131. </li>
  1132. <li>Add a command Points-&gt;Make Arc, which is similar
  1133. to Points-&gt;Make Line except that it connects the two
  1134. points with an elliptical arc rather than a straight
  1135. line. The ellipse is choosen to run through the two
  1136. points (obviously) and to be tangent to the slope of
  1137. those points. This isn't enough information to determine
  1138. an ellipse uniquely (three points and two tangents being
  1139. required) so in general there will be an infinite number
  1140. of solutions (and it is possible to provide contradictory
  1141. input so that no ellipse can be found). FontForge may not
  1142. choose the ellipse you had your heart set on. FF will
  1143. first attempt to find an ellipse so that one of the
  1144. points lies on an axis of the ellipse (this will find a
  1145. circle if there is a circle which satisfies the
  1146. constraints above). If that fails it will look more
  1147. generally for ellipses.
  1148. <p>(If you hold down the &lt;Alt&gt; key when you
  1149. select the menu item, FF will leave the ellipse it
  1150. calculated in the background layer. That was a
  1151. debugging technique but I thought it was kind of
  1152. interesting and left it in.)</p>
  1153. </li>
  1154. <li>Further improvements in calculating active zones for
  1155. curved segments for autohinging: if the spline is closer
  1156. to the opposed stem edge at the given point, don't extend
  1157. the active zone any longer.
  1158. <p>If a line's unit vector is close enough to the
  1159. font's italic slant, then prefer the unit vector based
  1160. on the italic slant instead.</p>
  1161. <p>Added an experimental mode which allows to build
  1162. glyph data based on a preexisting hint layout and
  1163. extend it with additional stems.</p>
  1164. </li>
  1165. <li>The rotate tool in char view didn't show the angle of
  1166. rotation.</li>
  1167. <li>Fixed various uninitialized values</li>
  1168. <li>Make sure the first character in marlett is
  1169. 0xf020.</li>
  1170. <li>Reinstate the behavior of the symbol encoding that
  1171. the wine developers depend on.</li>
  1172. <li>Add a scripting flag so that script writers can
  1173. control whether a font has a symbol encoding without
  1174. having to use a funky extension. (Wine people don't like
  1175. having to say ".sym.ttf").</li>
  1176. <li>When building a ligature, ff would mark the first
  1177. letter with use_my_metrics. That should only happen when
  1178. building accented glyphs.</li>
  1179. <li>Put in a way for the user to leap easily from Font
  1180. Info-&gt;Unicode Ranges to Font
  1181. Info-&gt;OS/2-&gt;Charsets-&gt;Unicode Ranges.</li>
  1182. <li>python scripting font.sfnt_names would sometimes
  1183. crash.</li>
  1184. <li>When a matrixedit is initialized its last visible
  1185. column (especially if followed by hidden columns) may not
  1186. be at the edge of the matrixedit. This lead to drawing
  1187. spurious lines which annoyed Alexej.</li>
  1188. <li>When running simplify on a quadratic contour and the
  1189. contour doubles back on itself, FF would do an
  1190. optimization which only worked for cubics.</li>
  1191. <li>Werner tells me that if bit 1 of the 'head'.flags
  1192. field is clear then I should adjust so that the left side
  1193. bearing is what is specified in the 'hmtx' table.</li>
  1194. <li>Pdf filter decode didn't work if given an array of
  1195. filters (not even in the array contain only a single
  1196. filter).</li>
  1197. <li>FontForge doesn't support pdf encryption which seems
  1198. to require a license from RSA. Before we'd just announce
  1199. failure for no reason, now announce that the file is
  1200. encrypted and we can't read it.</li>
  1201. <li>Improper test for point matching in references (in
  1202. tt).</li>
  1203. <li>In an un instructed font, the [Default] button in
  1204. FontInfo-&gt;Grid Fitting produces the wrong result (and
  1205. has since I added support for the new gasp features of
  1206. ClearType.</li>
  1207. <li>Doing hint modifications caused errant pointers to be
  1208. used. Often crashing.</li>
  1209. <li>Math strings weren't getting initialized in math
  1210. kern.</li>
  1211. <li>One of the math constants had the wrong friendly
  1212. name.</li>
  1213. <li>Michal points out that tooltips in the math window
  1214. don't get translated.</li>
  1215. <li>TopLeft/TopRight etc. in math kerning weren't
  1216. translated.</li>
  1217. <li>The transform menu item seems to have lost its
  1218. shortcut. Put it back.</li>
  1219. <li>When selecting a control point in the outline view,
  1220. we would always select the next point if both next and
  1221. prev were in the same place (ie, on the base point
  1222. itself). But when the point is at the end of an open
  1223. contour, the one which should be selected is the one
  1224. which controls a spline (which need not be the next
  1225. one).</li>
  1226. <li>Oh dear. My original method for storing background
  1227. layers didn't allow for references (because I didn't put
  1228. them in the background). But I need them now.</li>
  1229. <li>Label some of the horizontal metrics lines</li>
  1230. <li>Trying to move the top accent line resulted in a
  1231. crash.</li>
  1232. <li>Drat. FF really wants to set the latin1 codepage bit,
  1233. even if the user explicitly provides the codepage
  1234. settings. The wine people don't like that.</li>
  1235. <li>If we have two fonts open, a type3 (multilayered) one
  1236. and a normal outline, and we have outline glyph windows
  1237. open from each font, and we move the focus between the
  1238. glyph windows, then the layers palette will get left
  1239. behind when focus moves to the other font. (and other
  1240. more complex senarios when switching between multilayered
  1241. and outline).</li>
  1242. <li>When loading a feature file, ff would complain if a
  1243. mark appeared in two anchor classes -- even if those
  1244. classes were in separate lookups. This meant it got
  1245. unhappy about a mark which was in both a mark 2 mark
  1246. lookup and in a mark to base lookup.</li>
  1247. <li>I had intended not to give warning messages about
  1248. names like "nine.oldstyle" (defined in Adobe's obsolete
  1249. PUA mapping) when loading a tt font, if such a glyph had
  1250. a different unicode mapping (or none) than the one Adobe
  1251. used ages ago. But I screwed up and was generating
  1252. messages anyway.</li>
  1253. <li>When converting cubics to quadratics, if we had a
  1254. curved spline where one of the endpoints of the spline
  1255. had no control point, then we'd get a slope at that point
  1256. of 0/0. This meant that we tried to put a quadratic
  1257. control point on top of that endpoint which looked
  1258. confusing and seemed unnecessary.</li>
  1259. <li>Typo in glyph compare. Caused another crash when
  1260. comparing lookups.</li>
  1261. <li>Didn't handle NULL tokens properly when reading in a
  1262. feature file.</li>
  1263. <li>Make it easier to select control points when the alt
  1264. key is down.</li>
  1265. <li>Add a mechanism for getting default values for
  1266. private dict entries in python scripts.
  1267. <p>(Also provide default values now when [Add]ing
  1268. private entries in Font Info.</p>
  1269. </li>
  1270. <li>Making class0 editable broke the ability to create a
  1271. context chaining class lookup.</li>
  1272. <li>The encapsulation for creating libfontforge broke
  1273. importing a lookup from one font to another.</li>
  1274. <li>Feature file generation omitted a semicolon after
  1275. (some) contextual lookup rules.</li>
  1276. <li>Nasty bug with references in ApplySubstitutions
  1277. scripting command.</li>
  1278. <li>Mark classes didn't work.</li>
  1279. <li>Michal N. points out that "Really Use Typo Metrics"
  1280. should be moved above the typo metrics (or below) but
  1281. should not be in the middle of them.
  1282. <p>He also tells me that the internationalized weight
  1283. classes don't get parsed properly.</p>
  1284. </li>
  1285. <li>Someone handed me a font with a SJIS encoding cmap.
  1286. The cmap mapped a glyph to SJIS 128, which isn't a valid
  1287. SJIS code point. FF got an insane result when trying to
  1288. convert to unicode and crashed. Add a check against bad
  1289. code points.</li>
  1290. <li>Add two proposed features from the pre-draft of OT
  1291. 1.6
  1292. <ul>
  1293. <li>Drop Caps</li>
  1294. <li>Character Variants 00-99</li>
  1295. </ul>
  1296. </li>
  1297. <li>Werner wants to be able to select text in the
  1298. warnings window to paste elsewhere. And he points out
  1299. some scrolling flaws as well.</li>
  1300. <li>Could not attach lookups to mac feature
  1301. settings.</li>
  1302. <li>Clean up some display problems in the type3 layers
  1303. palette and layer info dlg.</li>
  1304. </ul>
  1305. </li>
  1306. <li>3-Feb-2008
  1307. <ul>
  1308. <li>New Vietnamese translation from Clytie</li>
  1309. <li>New Russian translation from Alexandre
  1310. Prokoudne.</li>
  1311. <li>New Polish translation from Michal N. .</li>
  1312. <li>FF could crash if a cmap subtable contained invalid
  1313. encoding points.</li>
  1314. <li>Add various new features/scripts/language tags from
  1315. OpenType draft 1.5.</li>
  1316. <li>Add two proposed features from the pre-draft of OT
  1317. 1.6
  1318. <ul>
  1319. <li>Drop Caps</li>
  1320. <li>Character Variants 00-99</li>
  1321. </ul>
  1322. </li>
  1323. <li>The warnings window didn't resize properly. It didn't
  1324. let you copy text (ie. a warning) to the clipboard. It
  1325. should have scrolled with keypad keys (arrows, page
  1326. up/down, etc). There should be a way to clear the windows
  1327. so you know that all the warnings are from a given
  1328. operation. Added a popup menu.</li>
  1329. <li>Fixed a problem in the auto hinter.</li>
  1330. <li>Could not attach lookups to mac feature
  1331. settings.</li>
  1332. <li>Clean up some display problems in the type3 layers
  1333. palette and layer info dlg.</li>
  1334. <li>Autoinstructor: turned on strong point interpolation:
  1335. <ul>
  1336. <li>Various important outline points are correctly
  1337. placed between hints' edges.</li>
  1338. <li>Potential benefits for DStem positioning.</li>
  1339. <li>Drawbacks: 2x slower, code generated is now much
  1340. bigger.</li>
  1341. </ul>
  1342. </li>
  1343. <li>The merge (and simplify) command could produce odd
  1344. results if the points surrounding the merge had no
  1345. control points.</li>
  1346. <li>Extend find/replace to handle changing angles.</li>
  1347. <li>The Display/Print dlg would crash when the user
  1348. pressed the reset button if there were at least two
  1349. pointsizes of the font on display. Perhaps in other cases
  1350. too.</li>
  1351. <li>Make shift click in the lookup dialog (but not the
  1352. subtable part) select all lookups between current click
  1353. and a previously selected point.</li>
  1354. <li>glyph.addPosSub doesn't work for ligatures or
  1355. multiple substitutions. It treats both as alternate
  1356. substitutions.</li>
  1357. <li>Michal Now. points out that there are some strings
  1358. not marked for translation in cvruler.c.</li>
  1359. <li>FontForge never checked that fonts had fewer than
  1360. 65536 glyphs. I just blythely assumed I wouldn't have to
  1361. worry. Well someone handed me a font with 65731 glyphs,
  1362. and FF treated it as having 195 glyphs. Things got nasty
  1363. after the 196th.</li>
  1364. <li>Fix a crash in autohint.c and an infinite loop in
  1365. stemdb.c.</li>
  1366. <li>Font Compare would crash if one font had a lookup
  1367. subtable which was not in the other.</li>
  1368. <li>Improve the algorithm used to detect reference points
  1369. for stem edges. Enable snapping "corner extrema" to
  1370. predefined hints.</li>
  1371. <li>Remove the obsolete Private Dict to CVT table
  1372. command.</li>
  1373. <li>Michal Now. wants short cuts to change grid fit
  1374. attributes, so a new sub menu with things like increase
  1375. point size, change AA, etc. (with shortcuts, of
  1376. course).</li>
  1377. <li>Patch by Michal Nowakowski. In Show Grid fit not
  1378. setting the mono bit correctly in freetype.</li>
  1379. <li>Bug in pfm file output.</li>
  1380. <li>If we failed to open a plugin library during init, it
  1381. would call LogError before the display was initialized,
  1382. leading to a crash.</li>
  1383. <li>Autoinstructor: If a horizontal stem interpolated
  1384. between blue zones was very close to one of them, it
  1385. often jumped beyond that zone in small ppems. This was
  1386. especcially annoying for serif fonts.</li>
  1387. <li>Improvements (I hope) to the ruler tool
  1388. <ol>
  1389. <li>Make it snap to splines (in addition to
  1390. points)</li>
  1391. <li>Have it draw a line from the start point to the
  1392. mouse</li>
  1393. <li>If they start on a spline, then include info on
  1394. the offset in coordinates parallel to the spline and
  1395. normal to it.</li>
  1396. <li>Provide a "spline length" if the start and end
  1397. points are on the same spline (instead of just if
  1398. they were the end-points of the spline).</li>
  1399. </ol>
  1400. </li>
  1401. <li>In python scripting contour.reverseDirection only
  1402. worked on closed contours.</li>
  1403. <li>If you click wildly in the cvt editor it would
  1404. eventually go into infinite recursion.</li>
  1405. <li>If there were no free anchor class then attempting to
  1406. add an anchor point would pop up the Mark Classes pane of
  1407. Font Info (rather than Lookups). This is sufficiently
  1408. close to Anchor Class as to be very confusing.</li>
  1409. <li>Make label gadgets (and buttons which are also
  1410. labels) handle multiline text.</li>
  1411. <li>If the user closes the font info dlg when there are
  1412. mark class dialogs floating around then close them too
  1413. (there was code which was supposed to do this, but it
  1414. didn't work).</li>
  1415. <li>Try to make it clear in the Mark Classes pane of the
  1416. Font Info that mark classes are not anchor classes.
  1417. Someone got confused...</li>
  1418. <li>Fix some bugs in parsing mark anchors in feature
  1419. files.</li>
  1420. <li>When adding an hvcurve point into an existing spline
  1421. it behaved like a curved point and laid parallel to the
  1422. spline rather than being either horiz or vert.</li>
  1423. <li>FontForge uses floats (which have ~24 bits of
  1424. precision internally) to represent coordinates. Type2
  1425. fonts use a 16.16 fixed notation, which means that we
  1426. only represent coordinates &lt;256 accurately. This will
  1427. cause slight errors during output and input of a font.
  1428. Unfortunately, due to the rel-rel nature of postscript
  1429. these slight errors accumulate.
  1430. <p>So instead, when loading and saving a Type2 font use
  1431. double precision temporaries. This should mean there
  1432. will be no errors to accumulate. There will be slight
  1433. errors when converted to SplinePoints, but these errors
  1434. will not accumulate.</p>
  1435. </li>
  1436. <li>Check several adjacent splines when detecting active
  1437. zones for curved segments and thus make the algorithm
  1438. less dependent from the number of additional points on a
  1439. contour and their exact positions.</li>
  1440. <li>Fix a number of problems that -pedantic complains
  1441. about.</li>
  1442. <li>Some mnemonics in the Element menu are used for two
  1443. items. Clean it up a bit.</li>
  1444. <li>Add a "Find Problems" for non integral coordinates.
  1445. <p>Change the "Ref with bad ttf transformation" so that
  1446. it checks for integral coordinates too.</p>
  1447. </li>
  1448. <li>the glyph.validate function in python was marked as
  1449. taking NOARGS in the method table, but, in fact, does
  1450. take arguments.</li>
  1451. <li>Oops. Validate used to complain if the StemSnap[HV]
  1452. array were missing. But that's perfectly ok.</li>
  1453. <li>Be more lenient when closing a path (when reading in
  1454. a type1/2 font)... we can get rounding errors.</li>
  1455. <li>Add a little LogError to let the user know if there
  1456. are sfnt tables we ignore.</li>
  1457. <li>Deep in the heart of Find Problems check for bad
  1458. contour direction, was a bug where it looked at the wrong
  1459. spline.</li>
  1460. <li>Just as it is possible to have things in 'morx' that
  1461. are not in 'GSUB', it is possible that a 'GPOS' table
  1462. contains no kerning information but a 'kern' table does.
  1463. We used not to read 'kern' if we had 'GPOS', be a little
  1464. subtler and check for the presence of a 'kern' feature
  1465. inside 'GPOS' before deciding whether to read the 'kern'
  1466. table.</li>
  1467. <li>The anchor control dialog didn't work for mark to
  1468. mark anchors when looking at a base mark.</li>
  1469. <li>When a font contained glyphs with multiple encodings,
  1470. then ff would produce bdf files with a char count which
  1471. matched the # glyphs, not the number of encoding slots
  1472. used.</li>
  1473. <li>In a compacted cid font, the status line (containing
  1474. unicode, unicode block/name, etc) was junk.</li>
  1475. <li>Barry wants to be able to mark that it's ok for a
  1476. spline to have intermediate extrema.</li>
  1477. <li>The []TeX Table checkbox was always disabled in the
  1478. save font dlg.</li>
  1479. <li>The DejaVu people want to be able to associate a
  1480. comment with a cvt entry.</li>
  1481. <li>Find Problems-&gt;ATT-&gt;Missing glyph name
  1482. complains about the special string &lt;Delete&gt; which I
  1483. used in Apple lookups to represent the "Delete Glyph"
  1484. action that apple supports and OT does not. Don't
  1485. complain about this any more.
  1486. <p>Add a problem which will look at the glyphs a lookup
  1487. is active for, and then checks the script of each glyph
  1488. against the scripts attached to the features which
  1489. invoke this lookup. If the script doesn't match
  1490. anything, then complain.</p>
  1491. </li>
  1492. <li>If a font contained an empty anchor class (having
  1493. either no base glyphs or no mark glyphs) then when
  1494. dumping out the font subsequent anchor classes got the
  1495. wrong data associated with them.</li>
  1496. <li>Barry wants non-integral hints.</li>
  1497. <li>Barry points out that Scale To Em doesn't scale the
  1498. guidelines.
  1499. <p>Barry also complains that spiro points are rounded.
  1500. This is more debatable. The bezier conversion will put
  1501. bezier points where there were spiros, so if we don't
  1502. round the spiros we get non-integral points. But if we
  1503. do round the spiros we mess up the splines. Hmm.</p>
  1504. </li>
  1505. <li>When complaining about a bad class in a mark (GPOS)
  1506. sub-table, specify the name of the offending mark if we
  1507. can.</li>
  1508. </ul>
  1509. </li>
  1510. <li>10-Jan-2008
  1511. <ul>
  1512. <li>Fixed a crash bug in Auto Hint</li>
  1513. <li>Replaced the Short Cut to AutoInstr</li>
  1514. <li>In Font Info-&gt;Lookups, added to the lookup tooltip
  1515. to show what contextual lookups used the current
  1516. one.</li>
  1517. </ul>
  1518. </li>
  1519. <li>9-Jan-2008
  1520. <ul>
  1521. <li>Fix some problems with AAT. Mutually exclusive
  1522. features in the chain didn't get the right OffFlags set.
  1523. (and didn't work).</li>
  1524. <li>Add DHint support for native &amp; python scripts.
  1525. Prevent users from specifying incorrect unit vectors for
  1526. diagonal hints added via scripts. Also use stemdb.c to
  1527. calculate active zones for normal (horizontal and
  1528. vertical) hints added via scripts.</li>
  1529. <li>Remove my original (and not very good) auto
  1530. instructor. Clean up the docs to remove references to how
  1531. bad it was.</li>
  1532. <li>Add the ability to store a fontlog in the sfd file.
  1533. Available to python scripting. A way to save it to
  1534. FontLog.txt when generating a font. A way to modify it
  1535. before generating. Normal access through Font Info.</li>
  1536. <li>Change the PfEd table so that the font comment is in
  1537. utf8, and the glyph comment subtable too.
  1538. <p>Add subtables to hold:</p>
  1539. <ul>
  1540. <li>Names of lookups and lookup subtables and anchor
  1541. classes</li>
  1542. <li>Guide lines</li>
  1543. <li>Background and spiro layers</li>
  1544. <li>Font Log</li>
  1545. </ul>
  1546. </li>
  1547. <li>It used to be that when a font had both 'mor[tx]' and
  1548. 'GSUB' we would only read 'GSUB'. But Michel Boyer wanted
  1549. to read both. So... read 'morx' after 'GSUB' and if we
  1550. find a feature/setting that looks as though it
  1551. corresponds to an existing OpenType lookup (which we can
  1552. convert to a Mac format) then skip that feature/setting,
  1553. presuming it to contain redundant data.
  1554. <p>This is a finer grain approach, but similar to, the
  1555. previous one. There we skipped the whole table,
  1556. presuming it redundant. But in CharisSIL the morx table
  1557. has a lot of functionality orthogonal to GSUB. So we
  1558. must parse both.</p>
  1559. </li>
  1560. <li>The 'feat' table was being output in the wrong order.
  1561. Features were linked together in several ways and 'feat'
  1562. followed the wrong field.</li>
  1563. <li>Two related bugs that Charis SIL invokes:
  1564. <ol>
  1565. <li>This font has a contextual substitution which
  1566. uses class 0 and replaces it via a nested lookup. But
  1567. my feature file output could not handle class 0
  1568. (since it isn't really specified) and would
  1569. crash.</li>
  1570. <li>However, in this case class 0 was specified by
  1571. the coverage table (we fixed that earlier but just
  1572. for kerning classes). So now fix for
  1573. contextuals.</li>
  1574. </ol>
  1575. </li>
  1576. <li>Auto recovery was broken. Ever since I put in the
  1577. code to ask the user what to do with a recovery file (It
  1578. always recovered into a new file).</li>
  1579. <li>When FF opens a char window on my screen it has a bad
  1580. habit of opening it at 40% magnification. Which means
  1581. mouse clicks give things either at em or at half me
  1582. positions. That's bad. Don't want the default behavior to
  1583. create lots of .5 coordinate values.
  1584. <p>Make the window open at 33% instead.</p>
  1585. </li>
  1586. <li>FontForge warns the user when a glyph's name does not
  1587. match its unicode encoding. But in the past it would do
  1588. this for glyphs with multiple encodings even if the name
  1589. matched one of the encodings. Fix that.</li>
  1590. <li>When FF uses doubles internally, it still outputs
  1591. float precision into the sfd file. Fix that.</li>
  1592. <li>Still said "Tangent" rather than "Constraint" in
  1593. points menu when in Spiro mode.</li>
  1594. <li>Ben Laenen of Deja Vu says it would be nice if sfd
  1595. files stored truetype instructions as recognizable text
  1596. rather that squirrily ASCII85 encoded binary data. Sounds
  1597. reasonable. Might as well store 'cvt ' and 'maxp' as
  1598. numbers then.</li>
  1599. <li>Remove some deprecated DStem code. Also move
  1600. CVNumForePointsSelected() to charview.c and make it
  1601. static (not used anywhere else except that file).</li>
  1602. <li>Sometimes the pointers to libspiro didn't get
  1603. initialized.</li>
  1604. <li>If a font had no private dica and one tried to put
  1605. something in it from python, ff would crash.</li>
  1606. <li>Alexej points out that my use of iconv was broken on
  1607. many systems where UCS-4 is big endian on a little-endian
  1608. machine.</li>
  1609. <li>Use freetype to rasterize the fill blit in the char
  1610. view.</li>
  1611. <li>- In search_edge, an array subscript was sometimes
  1612. -1?
  1613. <p>- Previously I forgot to mention Alexey's changes in
  1614. DStems hinting code.</p>
  1615. </li>
  1616. <li>Simple optimization for blue zone hinting - cupped
  1617. serifs should benefit most.</li>
  1618. <li>Update copyright notices. (add 2008)</li>
  1619. <li>Oops, typo in python menu code.</li>
  1620. <li>There is now an incomplete fontforge which uses the
  1621. gtk toolkit.
  1622. <blockquote>
  1623. <pre>
  1624. $ ./configure
  1625. $ make
  1626. $ make install
  1627. $ make fontforgegtk
  1628. $ make install_gtk
  1629. </pre>
  1630. </blockquote>
  1631. <p>About all it can do is open a font and display it.
  1632. If a menu command does not require a dialog then it
  1633. might work. There are probably scores of bugs even in
  1634. the little bit that supposedly does work.</p>
  1635. <p>I think the open dialog is extremely ugly. That's
  1636. not my fault, that's gtk's widget. The open dialog is
  1637. far less functional than the one in the gdraw fontforge
  1638. -- I can't figure out how to enhance it.</p>
  1639. </li>
  1640. <li>Switching to a new internal representation of
  1641. diagonal stem hints.</li>
  1642. <li>Add a mechanism to check that the executable has been
  1643. configured to match the library. And include a library
  1644. date stamp as well as an executable stamp.</li>
  1645. <li>In the metrics view, if I switch from outline view to
  1646. bitmap view (by selecting a strike by pixel size from the
  1647. view menu) then ff would crash.</li>
  1648. <li>Cleanup the library executable interface a bit
  1649. more.</li>
  1650. <li>Minor tweaks to fontview.</li>
  1651. <li>- Alexey suggested improvement for
  1652. HStemGeninst().</li>
  1653. <li>- Added optional experimental code for interpolating
  1654. strong points.</li>
  1655. <li>Barry Schwartz wants to be able to set the "don't
  1656. autohint flag" from python. I'm calling it "manualHints"
  1657. though.</li>
  1658. <li>Barry Schwartz points out that the simplify flag
  1659. "setstarttoextremum" is incorrectly documented. Fix
  1660. that.</li>
  1661. <li>- In HStemGeninst(), new positioning method gives
  1662. bizarre results for overlapping stems. Added fallback to
  1663. old method.</li>
  1664. <li>Make it obvious that the Print/Display dlg HAS a
  1665. menu.</li>
  1666. <li>Crossland wants a way to insert random text into the
  1667. Print/Display dialog. So add the ability to generate a
  1668. bunch of random words that look vaguely reasonable.
  1669. (Invoked by the popup menu in the dlg).</li>
  1670. <li>Exporting spiros to a plate file produced garbage if
  1671. any spiros were selected.</li>
  1672. <li>The Print dlg tended to crash if you did much editing
  1673. in it.</li>
  1674. <li>When switching to spiro mode on an empty glyph (or
  1675. perhaps the first glyph in a new font), FF would
  1676. complain: Internal Error: Character out of bounds in
  1677. bitmap font 0&gt;=0</li>
  1678. <li>Oof. The math stuff doesn't work if device tables are
  1679. disabled. fix it.</li>
  1680. <li>Fix some problems with configuration modes I don't
  1681. use. Correct some pointer arguments which differ in
  1682. signedness.</li>
  1683. <li>If lines are attached to both sides of a diagonal
  1684. stem, then prefer the longer line's unit vector for this
  1685. stem.</li>
  1686. <li>- Fixed snap_to_blues(): it used to mess global
  1687. accuracy setting up.</li>
  1688. <li>- Fixed finish_stem(): it did not mark edges of
  1689. previous hints as done.</li>
  1690. <li>- CHanged HStemGeninst(): it now tries to interpolate
  1691. HStems within blues when possible.</li>
  1692. <li>Dave Crossland points out that ff didn't compile if
  1693. --without-native-script were set.</li>
  1694. <li>Trying to change control points with the point info
  1695. dlg on hv-curve points didn't work.</li>
  1696. <li>Add the ability to insert a list of words into the
  1697. metrics view.</li>
  1698. </ul>
  1699. </li>
  1700. <li>10-Dec-2007
  1701. <ul>
  1702. <li>Redo the internals of fontforge to separate the core
  1703. font engine from its dependance on gdraw, and stuff all
  1704. of that into libfontforge. So libfontforge no longer
  1705. needs gdraw, and can be used to build another user
  1706. interface with a different widget set.
  1707. <p>In theory.</p>
  1708. </li>
  1709. <li>Add the ability to insert a list of words into the
  1710. metrics view.</li>
  1711. <li>If a font has a variant selector 'cmap' subtable, and
  1712. has some unnamed glyphs then base names on the
  1713. information found in the vs subtable as:
  1714. (u0020.vsFE00)</li>
  1715. <li>If a font has a 'MATH' table and some unnamed glyphs
  1716. then try to guess names for glyphs refered to in
  1717. horizontal/vertical glyph construction tables.</li>
  1718. <li>When outputing horizontal glyph variants in the
  1719. 'MATH' table I used their vertical size rather than their
  1720. horizontal size.</li>
  1721. <li>Further refinements to the concept of lines: all
  1722. points assigned to the same line now should have filled
  1723. space at the same side. So what we used to call lines
  1724. would be better called edges now. Also the handling of
  1725. bounding box hints has been improved: all relevant points
  1726. are now assigned to a BBox stem hint (not just one point
  1727. from each side).</li>
  1728. <li>Add a user interface to control file recovery (used
  1729. to be only a command line argument).</li>
  1730. <li>Patch by Barry who points out an extraneous line in
  1731. the font iter by search.</li>
  1732. <li>Barry points out that there is a disconnect between
  1733. the docs and the program about the "spiros" member of a
  1734. Contour python object. So correct the docs to read
  1735. "spiros", and change the program so it will accept
  1736. "spiro" as well as "spiros".</li>
  1737. <li>Add the ability to name contours, primarily for
  1738. guidelines.
  1739. <p>Add python support for the contour_name.</p>
  1740. </li>
  1741. <li>Add support for reading Apple's old sfnt wrapped CID
  1742. format (basically the same as the sfnt wrapped 'typ1'
  1743. format.</li>
  1744. <li>FF crashed on Nastaliq Navees from SIL.
  1745. <ol>
  1746. <li>It has no unicode cmap (which ff handled
  1747. incorrectly)</li>
  1748. <li>It has cross-kerning (which ff doesn't handle,
  1749. but still died while explaining that it didn't handle
  1750. it)</li>
  1751. </ol>
  1752. </li>
  1753. <li>Use routines from stemdb.c to generate active zones
  1754. (or stem instances) for manually added hints. The old
  1755. algorithm is still used when reading Type 1/OTF font
  1756. files.</li>
  1757. <li>FontView -&gt; Hints-&gt;Clear hints did not set the
  1758. hints changed bit.</li>
  1759. <li>Erik van Blockland points out that python
  1760. glyph.addPosSub doesn't check for duplicate entries and
  1761. will blindly add something when it should be replacing
  1762. it.</li>
  1763. <li>Also added a short cut so that it is posible to
  1764. specify simple kerning by typing one number rather than
  1765. requiring an additional 7 zeroes.</li>
  1766. <li>Prevent some redundant stem chunks from being
  1767. generated.</li>
  1768. <li>Both Adobe Acrobat and Apple's Preview exhibit what I
  1769. consider to be a bug. According to the PDF reference
  1770. manual, if an Encoding dictionary is not specified for a
  1771. font object then the built in encoding will be used. But
  1772. both these programs reencode to AdobeStandard and do not
  1773. use the font's built in encoding. GhostScript agrees with
  1774. my interpretation and does not reencode.
  1775. <p>However, they ain't gwana change, so I must. Always
  1776. dump out an Encoding dictionary even when it shouldn't
  1777. be needed.</p>
  1778. </li>
  1779. <li>
  1780. <ul>
  1781. <li>Lines are more actively used: stems now have
  1782. 'leftline' and 'rightline' properties, and for
  1783. diagonal stems the stem unit vector is always set
  1784. equal to the unit vector of the line corresponding to
  1785. the left edge of the given stem;</li>
  1786. <li>I no longer attempt to calculate "active" zones
  1787. for bounding box hints (they usually don't correspond
  1788. to any actual glyph features and thus look ugly). So
  1789. now only edges of such hints (without any active
  1790. zones) are displayed in the charview;</li>
  1791. <li>diagonal stem detection improved (some checks
  1792. were too strict and actually oriented to HV
  1793. stems);</li>
  1794. <li>the 'blue' property is now used not only for
  1795. ghost hints, but also for regular horizontal stems.
  1796. This may be useful if I ever implement an
  1797. autoinstructor based directly on the stem
  1798. detector;</li>
  1799. <li>glyph data initialization has been separated from
  1800. stem detection and put into a separate routine (a
  1801. first step for unification of algorithms used to
  1802. calculate stem active zones).</li>
  1803. </ul>
  1804. </li>
  1805. <li>When doing a print sample to pdf, the second page
  1806. came out in times bold rather than the user's font.</li>
  1807. <li>I think setting a compact encoding could overflow an
  1808. allocated string array.</li>
  1809. <li>I was setting the Regular bit of OS2.fsSelection if
  1810. the weight class was 400. I probably should have used 500
  1811. instead. Or maybe both. Let's try both for now.</li>
  1812. <li>If a ufo font did not have a lib.plist file (and
  1813. python was enabled) then ff would crash on loading
  1814. it.</li>
  1815. <li>When importing an eps file, ff did not turn off the
  1816. "Bitmap-only" flag. This means that new fonts composed
  1817. entirely of eps files would be treated as bitmap fonts
  1818. (sometimes).</li>
  1819. <li>Moving quadratic control points with the pointer is
  1820. broken (again).</li>
  1821. <li>Metricsview would crash if you deleted a character
  1822. and then clicked in one of it's textfields.</li>
  1823. <li>Fix typo in stemdb.c</li>
  1824. <li>Add a Select-&gt;Open Contours command.</li>
  1825. <li>Add some serbian text (to the built in print
  1826. samples).</li>
  1827. <li>Update the location on the charview info line when
  1828. dragging out a guideline.</li>
  1829. <li>If a glyph had a unicode encoding for one code point,
  1830. and a name which mapped to another, then double clicking
  1831. on the other code point would cause fontforge to provide
  1832. a reference to the base glyphs from the new encoding
  1833. slot. But only in the current encoding map. In other
  1834. words I forgot to set the AltUni field.</li>
  1835. <li>Some people have though winDescent should be a
  1836. negative value for things below the baseline. So make the
  1837. sign of the various descent fields explicit in the
  1838. corresponding popup messages.
  1839. <ul>
  1840. <li>Typo Descent: Negative</li>
  1841. <li>Win Descent: Positive</li>
  1842. <li>Hhea Descent: Negative</li>
  1843. </ul>
  1844. </li>
  1845. <li>If a user edited a glyph in spiro mode, and then did
  1846. something in the fontview ehich caused the spiros to be
  1847. removed (Lots of things: Overlap, Expand Stroke,
  1848. Embolden, ...), and then did a Round to Int (and perhaps
  1849. other things) from the font view, then FontForge would
  1850. crash.
  1851. <p>It expected to find spiros in a glyph marked as
  1852. being edited in spiro mode, and was surprised when none
  1853. were available.</p>
  1854. </li>
  1855. <li>Dave Crossland doesn't like having "..." at the end
  1856. of window titles.</li>
  1857. <li>Back out the Add Extrema in spiro mode patch. Turn
  1858. off display of extrema in spiro mode (and of Points of
  1859. Inflection too).</li>
  1860. <li>Add an autowidth command to the python
  1861. interface.</li>
  1862. <li>contour.lineTo and friends didn't work (didn't
  1863. increment the contour's point count).</li>
  1864. <li>With SnapToInt preference on, and at high
  1865. magnifications, a mouse click would often be snapped so
  1866. that it was well outside the fudge region. This meant
  1867. that clicking on something might not select it.</li>
  1868. </ul>
  1869. </li>
  1870. <li>10-Nov-2007
  1871. <ul>
  1872. <li>Another bug when loading feature files</li>
  1873. </ul>
  1874. </li>
  1875. <li>9-Nov-2007
  1876. <ul>
  1877. <li>Introduced Raph Levien's Spiro curves. Please
  1878. <a href="http://libspiro.sf.net">download
  1879. <b>libspiro</b></a> before using fontforge.</li>
  1880. <li>Deal with things that got deprecated as the mac moved
  1881. from 10.4 to 10.5
  1882. <ul>
  1883. <li>NSAddImage and family have been replaced by
  1884. dlopen</li>
  1885. <li>the old mechanism for referencing a resource fork
  1886. from POSIX "foo/rsrc" has changed to
  1887. "foo/..namedfork/rsrc".</li>
  1888. </ul>
  1889. <p>The new stuff all worked as far back as 10.3 -- but
  1890. FontForge source is no longer compatible with 10.2.</p>
  1891. </li>
  1892. <li>In a truetype font, if a substitution lead to an
  1893. unencoded glyph and the cursor hung over the substitution
  1894. long enough to invoke the popup, then we'd generate a
  1895. tiny font containing just the unencoded glyph, we'd
  1896. complain that there were no encoded glyphs, we'd dismiss
  1897. the popup, we'd generate the glyph image, then we'd try
  1898. to free it with no free function because the popup was
  1899. dismissed.</li>
  1900. <li>Merge Feature File didn't actually merge things in,
  1901. it forgot about existing things -- which caused problems
  1902. for kerning classes which get stored in two lists.</li>
  1903. <li>Allow people to order entries in the PostScript
  1904. Private dictionary (in Font Info)</li>
  1905. <li>Give the user control over how much arrow keys
  1906. accelerate when holding down the Alt (Meta) key.</li>
  1907. <li>People want a Snap To Int preference item.</li>
  1908. <li>Simplify sometimes ignored points.</li>
  1909. <li>People expect to be able to drag guidelines from the
  1910. rulers (because everyone else does that) and don't want
  1911. to bother to learn FF's mechanism. So make that
  1912. possible.</li>
  1913. <li>Dave C wants to be able to use Cntl-Tab to switch
  1914. tabs in the charview.</li>
  1915. <li>If freetype gets a single point open contour in
  1916. postscript mode, it simply skips the contour (does not
  1917. call FT_MoveTo on it). This screwed up my attempt to
  1918. match the results of freetype with the actual splines and
  1919. caused a crash.</li>
  1920. <li>Glyphs with no contours didn't set widthset when read
  1921. from ufo and so were viewed as empty.</li>
  1922. <li>FF was expecting descent to be a positive value in a
  1923. ufo (it is in ArialBlack.ufo), but it seems to be
  1924. negative in most UFOs.</li>
  1925. <li>Erik wants the creation order of contours preserved
  1926. when reading a glif file.</li>
  1927. <li>Oops. glyph/glyphPen types got the wrong names in the
  1928. fontforge python module. (interchanged)</li>
  1929. <li>remove the Elide command. (There's no reason to use
  1930. it, Merge is always better, it just confused people.</li>
  1931. <li>Refrain from simplifying an order2 point where the
  1932. second derivative changes sign.</li>
  1933. <li>If a font has no "fullname" field (and fonts aren't
  1934. required to have one) ff would crash when generating the
  1935. font.</li>
  1936. <li>Ability to Import/Export Raph Levien's plate file
  1937. format.</li>
  1938. <li>If I moved a corner point adjacent to a tangent, the
  1939. slope on the other side of the tangent did not
  1940. change.</li>
  1941. <li>Exporting a glyph to BMP or PNG was broken, probably
  1942. since the addition of python import export filters.</li>
  1943. <li>Add a Strftime scripting command to the legacy
  1944. language.</li>
  1945. <li>Werner points out that I misspelled "persistent" as
  1946. "persistant" in many places, including python member
  1947. names. Correct that. (but leave the old, misspelled
  1948. membernames around but undocumented in case anyone has
  1949. been mislead by my previous documentation.</li>
  1950. <li>Add new python stuff to provide access to
  1951. spiros.<br />
  1952. The fontforge module has a new method -- hasSpiro() which
  1953. returns whether we've got access to libspiro or
  1954. not.<br />
  1955. The module also has a bunch of numeric constants defined
  1956. spiroG4, spiroG2, etc. for use in the<br />
  1957. The Contour type has a new member -- spiros which is a
  1958. tuple of spiro control points (which are themselves
  1959. tuples: x,y,type,flags, where type is one of the numeric
  1960. constants above.</li>
  1961. <li>People would complain that the python interface would
  1962. give them "Invalid second order spline" but no one
  1963. bothered to give me a test case. I hope I've tracked it
  1964. down now.</li>
  1965. <li>Add a "problem" to check for glyphs whose bounding
  1966. boxes are: too tall, too short, too wide, too much to the
  1967. left.</li>
  1968. <li>Used to be I had many problems checked by default.
  1969. Best to turn them all off.</li>
  1970. <li>Oops. FF was using Py_BuildValue("s") on something
  1971. that was already a python string.</li>
  1972. <li>Adam Twardoch suggests that codepoints in the PUA
  1973. have their script determined by their name (rather than
  1974. just returning DFLT). Since Adobe used to put things like
  1975. "a.sc" in this area, that seems a good idea.</li>
  1976. <li>FF marked almost all fonts with the Oblique bit in
  1977. the OS/2 table.</li>
  1978. <li>- Patch from Alexej for his diagonal hinting
  1979. routines, fixes an ugly problem reported by Max
  1980. Rabin.</li>
  1981. <li>Various fixes in stem detection. In particular added
  1982. a concept of "base start" and "base end" for curved
  1983. segments of stem edges, allowing to determine more
  1984. precisely if an active zone (which merges left and right
  1985. segments together) should actually be considered "curved"
  1986. at its</li>
  1987. <li>Make implied points to be ignored when determining a
  1988. diagonal stem validity.</li>
  1989. <li>Swith the timestamps to GMT. Prior to this all
  1990. timestamps have been PS/DT, but now that other people are
  1991. making source changes GMT seems more sensible.</li>
  1992. <li>Max Rabkin supplies a patch to let python import
  1993. plate files.</li>
  1994. <li>A couple of new name table string ids: WWS Family
  1995. &amp; WWS Subfamily.<br />
  1996. Provide reasonable defaults for the wws* ttf names.</li>
  1997. <li>Correct the list of dutch font styles.</li>
  1998. <li>Most of the items in the popup menu of the lookup
  1999. pane didn't work.</li>
  2000. <li>FF wasn't loading python init files from
  2001. ~/.FontForge/python</li>
  2002. <li>When I fixed mark to ligature positioning I broke the
  2003. other three types of anchor positioning (to base, to mark
  2004. &amp; cursive).</li>
  2005. <li>If you pressed the [*] Default check box in the Font
  2006. Info-&gt;OS/2-&gt;Panose area, the values didn't go back
  2007. to the defaults.</li>
  2008. <li>When copying glyphs from one font to another ff would
  2009. sometimes use a temporary value of -2 for the orig_pos.
  2010. This meant that reference fixups didn't work when looking
  2011. at those glyphs.</li>
  2012. <li>Drat. Typo when copying a contextual lookup from one
  2013. font to another caused a crash.</li>
  2014. <li>Add a new point tool which creates curved points
  2015. which are always either horizontally or vertically
  2016. oriented. (I call 'em hvcurves)</li>
  2017. <li>Use ~/.FontForge instead of ~/.PfaEdit</li>
  2018. <li>I'm told there was a typo in my Bulgarian text for
  2019. the Print/Display dlg, and that this should fix it.</li>
  2020. <li>Get some proper Belorussian text.</li>
  2021. <li>Several bugs in my mark attachment routines. There
  2022. was an assumption that only one mark could be attached to
  2023. a base glyph per sub-table. This is wrong for mark to
  2024. base, in that there can be several anchor classes per
  2025. subtable. It is even worse for mark to ligature where
  2026. there can be many marks per anchor class (one per
  2027. ligature position).</li>
  2028. <li>Having done this make sure we don't use the same
  2029. anchor point more than once.</li>
  2030. <li>What glyph class should be used by default if a glyph
  2031. is both a ligature and a mark? Probably mark. There are
  2032. greek accent ligatures, and its probably more important
  2033. to treat them as marks than as ligatures (I don't know
  2034. any fonts which actually "skip ligatures" but there are
  2035. lots which "skip marks").</li>
  2036. <li>Select-&gt;Next/Prev Point always selected the first
  2037. point. Select First point did the wrong thing.</li>
  2038. <li>Pressing the [Refresh] button could crash ff if a
  2039. "FontData" depended on another (same font).</li>
  2040. <li>Someone (John ?Morrison?) requested a way to access
  2041. fonts by numeric index rather than font name when opening
  2042. font collections like ttc files or dfonts.</li>
  2043. <li>* I no longer have separate l/lpotential and
  2044. r/rpotential pairs Â&nbsp; of point data objects. Instead
  2045. I use just 'l' and 'r' accompanied by Â&nbsp; boolean
  2046. flags indicating their state as "potential". This greatly
  2047. Â&nbsp; simplifies some tests and makes the code more
  2048. readable. * When I am adding a chunk based on a single
  2049. point to an existing stem, Â&nbsp; I always mark the
  2050. second point as "potential". Later this state can Â&nbsp;
  2051. be changed if check based on the second point produces
  2052. the same chunk, Â&nbsp; or at least doesn't produce
  2053. another (conflicting) stem. Again, this Â&nbsp;
  2054. simplifies some tests which accompany adding new chunks
  2055. and makes the Â&nbsp; result of the stem detection less
  2056. dependent from the order in which Â&nbsp; the points are
  2057. processed. * I allow assigning a point to a stem even
  2058. when its distance from the Â&nbsp; stem edge is larger
  2059. than standard dist_error_hv or dist_error_diag, Â&nbsp;
  2060. if only the difference between maximum possible
  2061. deviations to the Â&nbsp; both sides of the edge doesn't
  2062. exceed the double dist_error_* value. Â&nbsp; This
  2063. prevents us from adding several almost-coincident hints,
  2064. actually Â&nbsp; controlling the same stem. * I have
  2065. added a function which performs some stem normalization,
  2066. Â&nbsp; sorting chunks by point coordinates. For HV stems
  2067. it also can Â&nbsp; slightly modify the positioning of
  2068. the stem edges preferring the Â&nbsp; coordinate which is
  2069. closer to most points assigned to each edge. * There is
  2070. now a special function used to compare conflicting stems
  2071. Â&nbsp; and decide if one of these two should be
  2072. preferred, or they both are Â&nbsp; worth to be output. *
  2073. The detection of serifs and similar elements, which, not
  2074. being Â&nbsp; exactly horizontal/vertical, still have to
  2075. be marked with a HV Â&nbsp; stem, has been improved (two
  2076. points, forming a serif termination, Â&nbsp; now should
  2077. not necessarily follow each other).</li>
  2078. <li>Drat. If we had libjpeg and not libpng we'd get a
  2079. complaint about an undefined symbol.</li>
  2080. <li>Add "Mismatch Unicode &amp; Name" to the Find
  2081. Problems dlg.</li>
  2082. <li>There are ttf files in existance where glyph names do
  2083. not match unicode code points. Tons of fonts use
  2084. ".notdef" for glyphs other than "GID=0". Other fonts use
  2085. ASCII glyph names (space, exclam, numbersign,...) for
  2086. glyphs in other scripts (Kedage-n.ttf does this).</li>
  2087. <li>In the past, ff has felt that the presence of a
  2088. zero-width ".null" and "nonmarkingreturn" glyph meant
  2089. that a font was not mono-space. In the future ignore
  2090. these glyphs when determining whether a font has fixed
  2091. width.</li>
  2092. <li>in some rare cases we got an uninitialized value in
  2093. spline-&gt;line display conversion.</li>
  2094. <li>Up the size of the File-&gt;Recent menu to 10, and
  2095. include non-sfd files in the list.</li>
  2096. <li>The routine to create an apple state machine from a
  2097. set of OpenType ('init','medi','fina','isol') forms would
  2098. often crash.</li>
  2099. <li>When scaling BlueValues, or other arrays, a trailing
  2100. space after the last number and before the ']' was
  2101. considered an error. If found then ff would not scale
  2102. that entry.</li>
  2103. </ul>
  2104. </li>
  2105. <li>2-Oct-2007
  2106. <ul>
  2107. <li>Add
  2108. <code>Edit-&gt;Select-&gt;Autohintable</code></li>
  2109. <li>Typo in parsing cmap format=6 subtables could cause a
  2110. crash (or eccentric behavior)</li>
  2111. <li>Can build fontforge so that it is a python extension
  2112. (as well as embedding python in ff).
  2113. <blockquote>
  2114. <pre>
  2115. $ ./configure --enable-pyextension
  2116. </pre>
  2117. </blockquote>
  2118. </li>
  2119. <li>If a tt spline had a control point on top of an
  2120. on-curve point we would lose track of it when generating
  2121. the font.</li>
  2122. <li>Add support for the Uncode variation subtable of the
  2123. 'cmap' encoding table (format=14).</li>
  2124. <li>add xdg-open to the list of "known" browsers.</li>
  2125. <li>Patch from Torsten Bronger. Got the args wrong in
  2126. (python) font.glyphs.</li>
  2127. <li>Fabrice Popineau &amp; Taco Hoekwater point out that
  2128. in the featurefile output routines I was using a single
  2129. backslash inside a printf string. The intent was to
  2130. output a single backslash. But I actually need to quote
  2131. the backslash with another to do that.</li>
  2132. <li>If a text string were extremely long it could
  2133. overflow the 16 bits allowed for a width in a metrixedit
  2134. column. Truncate to 32767 in that case. Still can't
  2135. scroll over the whole thing, but editing it will pop up a
  2136. better view which will allow it all to be displayed.</li>
  2137. <li>If there are no slots in the current encoding, then
  2138. clicking on the encoding menu caused a crash.</li>
  2139. <li>Give the user control over the code pages/unicode
  2140. ranges fields of the OS/2 table. Add python scripting
  2141. commands to access them too.</li>
  2142. <li>When the user renames a glyph then things dependant
  2143. on it should change too.<br />
  2144. So if any substitution (or pairwise positioning) refers
  2145. to the old name, change it to refer to the new.<br />
  2146. If any contextual change refers to the old name change
  2147. to the new.<br />
  2148. If any class of glyphs (kerning class, apple state
  2149. machine, contextual by classes) refers to the old name
  2150. change to the new.
  2151. <p>More debateable: if we change "f" to "u0066" then
  2152. change "f.sc" to "u0066.sc" and "f_f_l" to
  2153. "u0066_u0066_l" (and recurse on those name
  2154. changes).</p>
  2155. </li>
  2156. <li>Guess at the meaning for GDEF glyph class component
  2157. glyph:
  2158. <ul>
  2159. <li>Something not encoded</li>
  2160. <li>Something which is refered to by at least one
  2161. other glyph (as a reference)</li>
  2162. <li>Something which is not generated by GSUB</li>
  2163. </ul>
  2164. </li>
  2165. <li>Further improvements to the auto instructor.</li>
  2166. <li>Make the [Guess] button in FontInfo-&gt;Private
  2167. active when BlueScale is selected. (and make it work
  2168. too).</li>
  2169. <li>Oops. A font member in python was mis-named.
  2170. Documented to be "loadState" was "loadStyle". Corrected
  2171. to match the documentation.</li>
  2172. <li>Some of the 'maxp' checks in the validator were off
  2173. by 1, so fontlint would report errors on the glyph with
  2174. the maximum value.</li>
  2175. <li>Validator was checking non-composite glyphs against
  2176. composite boundries.</li>
  2177. <li>Barry Schwartz points out that I should validate the
  2178. PostScript Private dictionary (Check that entries have
  2179. the right types, check that BlueValues: has an even
  2180. number of elements, is in order, that pairs are separated
  2181. by bluefuzz*2+1, not too big for bluescale etc.).</li>
  2182. <li>FF would crash when building accented glyphs from
  2183. unicode data that included a space as the base
  2184. glyph.</li>
  2185. <li>Torsten Bronger points out that "import" is a python
  2186. keyword and can't (easily) be used as a member/method
  2187. name. So change the glyph.import function to
  2188. importOutlines.</li>
  2189. <li>Patch by Mathias Kilian OpenBSD needs an include file
  2190. linux doesn't (or rather that linux imports in another
  2191. include file) declaration statement mixup.</li>
  2192. <li>Patch by Michal Nowakowski to disambiguate some
  2193. strings and to make sure some others get translated.</li>
  2194. </ul>
  2195. </li>
  2196. <li>17-Sept-2007
  2197. <ul>
  2198. <li>Patch from Daniel Johnson. FF didn't compile
  2199. --with-regular-link</li>
  2200. <li>And FF didn't compile if it had libpng but not
  2201. libjpeg</li>
  2202. <li>Added some warning messages when doing AutoInstr so
  2203. that if a font does not contain a private dictionary, or
  2204. if none of the selected glyphs contain hints, then let
  2205. the user know s/he isn't going to get very useful
  2206. instructions.</li>
  2207. </ul>
  2208. </li>
  2209. <li>15-Sept-2007
  2210. <ul>
  2211. <li>Added the ability to upload a font to the <a href=
  2212. "http://www.openfontlibrary.org/">open font library</a>.
  2213. (You need to have created an account with them
  2214. first).</li>
  2215. <li>Further improvements to the auto instructor.</li>
  2216. <li>When all glyphs are selected and the user
  2217. auto-instructs, then FontForge will clear any legacy
  2218. tables ('fpgm', 'prep' and 'cvt&nbsp;'). The old values
  2219. will be of no use, and they just get in the way.</li>
  2220. <li>Add a Edit-&gt;Select-&gt;Select by Script
  2221. command<br />
  2222. Make the Select by Name take a wildcard (so you could
  2223. select "*.sc").</li>
  2224. <li>ApplySubstitutions still had problems. Caused crashes
  2225. in a font with instructions.</li>
  2226. <li>If one used the metrics view to create a kerning
  2227. lookup then: there would be no 'kern' feature in the
  2228. feature list yet, and the display would randomly lose
  2229. track of kern pairs and then create new ones. Very
  2230. confusing.</li>
  2231. <li>Hmm. In some cases Merge Fonts didn't copy over
  2232. lookup info.<br />
  2233. Add the ability to merge cross-font kerning pairs (in
  2234. case the two fonts being merged have the same glyphs for
  2235. those which are in both fonts).</li>
  2236. <li>Provide a mass glyph rename menu item.</li>
  2237. <li>The [Merge] button in Font Info-&gt;Lookups was
  2238. disabled when two subtables in the first lookup were
  2239. selected.</li>
  2240. <li>If a glyph ended in a suffix (one.superior, etc.),
  2241. then changes to that glyph were not reflected in the
  2242. fontview.</li>
  2243. <li>Add the ability to Populate a lookup from the
  2244. selection (in the lookup sub-table dialogs)<br />
  2245. Do a better job of providing default values for single
  2246. substitutions &amp; positions.</li>
  2247. <li>In the Print/Display dlg, deleting something so that
  2248. the next line was blank caused ff to crash.</li>
  2249. <li>The Encoding-&gt;Make From Font menu item should be
  2250. disabled if the encoding is not custom.</li>
  2251. <li>Fixed a system specific crash in the BDF Info
  2252. window.</li>
  2253. <li>Major rewrite of tilepath. Now has initial, medial,
  2254. final &amp; isolated tiles which it will use depending on
  2255. the circumstances. No longer uses the clipboard, but you
  2256. can draw the tiles in the dlg.</li>
  2257. <li>In Italic/Oblique fonts (those where the font has an
  2258. italic angle specified) make the center in width command
  2259. correct for the italic angle.</li>
  2260. <li>Round to Int didn't round anchor points.</li>
  2261. <li>The Control Point Info window could wander off the
  2262. bottom of the screen. I was very carefully calculating
  2263. its position -- and then not using the result.</li>
  2264. <li>Inkscape stuffs bitmap images into svg files using
  2265. the data URI<br />
  2266. &nbsp; &nbsp;data:&lt;mimetype&gt;,&lt;data&gt;<br />
  2267. (see IETF standard RFC 2397)
  2268. <p>So, I'll support this now as my only way of handling
  2269. type3 style svg fonts with embedded bitmaps.</p>
  2270. <p>The standard points out that URIs are limited to
  2271. 1024 bytes, but I don't pay any attention to that
  2272. restriction, and will stuff arbitrary sized images into
  2273. these things.</p>
  2274. </li>
  2275. <li>The code that set up python import/export filters did
  2276. not put an end of list entry after the last one.
  2277. Sometimes it would be NULL (correct) and things would
  2278. work and sometimes it would be garbage and things would
  2279. crash.</li>
  2280. <li>Drat. In the outline glyph view, the Import command
  2281. didn't set the filter properly when you changed the
  2282. import type.</li>
  2283. <li>Extend fontforge to keep track of errors encountered
  2284. when loading 'sfnt' files, and then have fontlint
  2285. complain about them.
  2286. <p>Also extend fontlint to do validity checking in
  2287. glyphs against the 'maxp' table. (This won't matter
  2288. when editing fonts, as ff will fixup the maxp values
  2289. when it generates the font, but there might be some
  2290. existing fonts with buggy 'maxp' values).</p>
  2291. </li>
  2292. <li>Oops. When changing the weight of a glyph and
  2293. retaining the counter sizes, fontforge would push two
  2294. entries onto the undo stack rather than one. (So the user
  2295. would have to do Edit-&gt;Undo twice to get back to where
  2296. s/he started from).</li>
  2297. <li>Added several new python methods to font.
  2298. <ul>
  2299. <li>find(contour) will search the font for all glyphs
  2300. containing contour and return an interator on that
  2301. set.</li>
  2302. <li>replaceAll(srch,rpl) Will search for the "srch"
  2303. contour/layer in the font and replace it (each time
  2304. it occurs) with the "rpl" contour/layer.</li>
  2305. <li>glyphs(type) returns an iterator over all glyphs
  2306. in the font. If present type may be "GID" (default if
  2307. omitted) or "encoding" and it indicates the order in
  2308. which the glyphs will be returned.</li>
  2309. </ul>
  2310. <p>Added some new members to glyph:</p>
  2311. <ul>
  2312. <li>encoding -- returns the glyph's encoding in the
  2313. font</li>
  2314. <li>script -- returns the OpenType tag (a 4 letter
  2315. string) of the script of this glyph.</li>
  2316. </ul>
  2317. </li>
  2318. </ul>
  2319. </li>
  2320. <li>31-August-2007
  2321. <ul>
  2322. <li>New traditional Chinese translation of the UI by
  2323. Wei-Lun Chao.</li>
  2324. <li>Updated Vietnamese translation by Clytie
  2325. Siddall.</li>
  2326. <li>Removed the old MetaFont command (which didn't work)
  2327. and replaced it with a styles menu (incorporating the old
  2328. Effects menu, and a command to change weight, to
  2329. condense/extend, and to oblique. Added python scripting
  2330. commands {font,glyph}.{changeWeight,condenseExtend}</li>
  2331. <li>Lots of new work on the truetype autoinstructor by
  2332. Alexej and Michal.</li>
  2333. <li>Add a validation dialog which can be run just before
  2334. generating a font.</li>
  2335. <li>Try a different algorithm for approximating splines
  2336. by line segments (for drawing them in the outline glyph
  2337. view and elsewhere). This one should show symmetry
  2338. better.</li>
  2339. <li>Provide the ability to ask freetype to rasterize
  2340. glyphs without hints in the Print/Display dlg (even if
  2341. the glyphs have hints, rasterize them without).</li>
  2342. <li>Oh dear, rasterizing stroked fonts only worked if
  2343. multilayer was defined.</li>
  2344. <li>Try to improve display of stroked fonts.</li>
  2345. <li>When stroking splines don't let miter joins grow
  2346. excessively.</li>
  2347. <li>FF would remove instructions from glyphs that had at
  2348. least two contours the first of which started with a
  2349. control point.</li>
  2350. <li>Add a short cut for Hide Grid in the metrics
  2351. view.</li>
  2352. <li>Python 2.5 initializes itself differently from Python
  2353. 2.[34]. 2.[34] delay the init until an import happens,
  2354. while 2.5 does it at start up. I just assumed that when I
  2355. called Py_Initialize that it did so. This led to a crash
  2356. on 2.[34] when I tried to use my types before the user
  2357. had tried to import fontforge.</li>
  2358. <li>Further improvements to tile path.</li>
  2359. <li>When moving a control point in a ttf font where one
  2360. side of the cp was a real point, I would allow an
  2361. implicit point on the far side of the real point to
  2362. become real.</li>
  2363. <li>When dragging truetype points around, adjacent
  2364. implicit points would remain where they were (and not be
  2365. implicit any longer).</li>
  2366. <li>FF would randomly crash after removing a lot of
  2367. glyphs.</li>
  2368. <li>The knife tool would not cut a contour if it landed
  2369. on a point.</li>
  2370. <li>Trying to add a stylename to the size pane of
  2371. fontinfo generally caused a crash.</li>
  2372. <li>All blank lines in the display dlg had the same line
  2373. spacing as that of the first character displayed in the
  2374. dlg.</li>
  2375. <li>I don't think feature files where handling classes
  2376. defined with '-' properly.</li>
  2377. <li>Read the "lib" structures from UFO/GLIF files into
  2378. our python persistent data. (And write our persistent
  2379. data out if it's a dict).</li>
  2380. <li>Add the ability to call hooks (python functions) when
  2381. various fontforge events take place.</li>
  2382. <li>Make fontforge's basic types (Point, Contour, and
  2383. Layer) be picklable so they can now be saved in an sfd
  2384. file.</li>
  2385. <li>Oops. With the inclusion of the library check
  2386. argument, ff would not compile if NODYNAMIC were
  2387. set.</li>
  2388. <li>FontForge now stores the "userdata" python members
  2389. into the sfd file as pickled objects. (FontForge's own
  2390. types are not currently pickleable).</li>
  2391. <li>Add the ability to mark a glyph so that just before
  2392. being saved its references will be unlinked and we will
  2393. run remove overlap on it. This means the user can work
  2394. with the references (and get the automatic updating they
  2395. confer) and still not have a self-intersecting glyph in
  2396. the output (think Aring, Ccedilla, Eogonek).</li>
  2397. <li>Create a fontlint script file.</li>
  2398. <li>When dumping both apple and opentype bitmap tables if
  2399. there were a BDF table, then we'd get garbage for
  2400. 'bloc'/'bhed'.</li>
  2401. <li>Add some user interface commands to python, and more
  2402. importantly, add the ability to create menu items which
  2403. will invoke python scripts, and the ability to add
  2404. import/export conversion filters (again, python
  2405. scripts).</li>
  2406. <li>Counter hints for LCG glyphs came out wrong if
  2407. autohint had not been applied first.</li>
  2408. <li>Counter masks were not read out of sfd files
  2409. properly.</li>
  2410. <li>Selecting a counter mask in Glyph Info caused FF to
  2411. crash.</li>
  2412. <li>The Execute Script dlg would sometimes complain about
  2413. invalid scrollbar size when it got closed.</li>
  2414. <li>AddAnchorPoint (scripting command) should be prepared
  2415. to cast real args to integers.</li>
  2416. <li>Just as I needed a special "in use" pass of GSUB when
  2417. reading from a TTC, so I also need an "in use" pass of
  2418. the MATH table.</li>
  2419. <li>All this time and I've mapped "nonmarkingreturn"
  2420. (GID=2) to Unicode+000C instead of Unicode+000D. I'm a
  2421. twit.</li>
  2422. </ul>
  2423. </li>
  2424. <li>08-August-2007
  2425. <ul>
  2426. <li>Support for MicroSoft's new 'MATH' opentype table.
  2427. <a href="math.html">Element-&gt;Math Info</a>.</li>
  2428. <li>Michal Nowakowski and Alexej Kryukov have improved
  2429. truetype hinting.</li>
  2430. <li>kerning display is off in a pairwise lookup window if
  2431. a y position adjustment were requested.</li>
  2432. <li>When reverting a compacted font ff thought the font
  2433. was compacted even when it was not.</li>
  2434. <li>Make some effort to retain context in the fontview
  2435. when changing encodings.</li>
  2436. <li>ff scripting command CopyReference() was broken.</li>
  2437. <li>Werner wants little popup windows in show att. Give
  2438. him some for substitutions.</li>
  2439. <li>If you examined a kerning pair subtable (either with
  2440. glyph info or from double clicking on the subtable in the
  2441. lookup pane) and then pressed [OK], and then generated an
  2442. afm (tfm, old-style kern table, etc.) you would lose all
  2443. the kern pairs you examined.</li>
  2444. <li>Patch by Barry SCHWARTZ to feature file output on
  2445. 64bit machines.</li>
  2446. <li>In freetype 2.3.5 the binary layout of the execution
  2447. context changed.<br />
  2448. This means that if ff is compiled against a 2.3.4
  2449. library it can't debug truetype if linked with a 2.3.5
  2450. library (and vice versa).<br />
  2451. So put in checks to see that the library version
  2452. matches what we expect.
  2453. <p>Also the contents of one of the structures has
  2454. changed a bit, and a value that used to live in one
  2455. field has moved to another (the ppem value moved from
  2456. (exc)-&gt;size-&gt;metrics.x_ppem to
  2457. (exc)-&gt;size-&gt;root.metrics.x_ppem.</p>
  2458. <p>Well, David warned me that this might happen.</p>
  2459. <p>Warn the user (rather than just silently failing)
  2460. when we have a freetype version mismatch.</p>
  2461. </li>
  2462. <li>Patch from Barry SCHWARTZ. python
  2463. fontforge.font.addPosSub was expecting its args inside a
  2464. redundant tuple.</li>
  2465. <li>New Vietnamese translation from Clytie.<br />
  2466. Also some spelling corrections in the original
  2467. messages.</li>
  2468. <li>Patch by Barry SCHWARTZ to lookup/subtable
  2469. comparison.</li>
  2470. <li>If a metricsview was open, then creating a new glyph
  2471. slot would potentially screw up memory and sometimes
  2472. crashed.</li>
  2473. <li>Edit-&gt;Merge (and simplify) still have bugs.</li>
  2474. <li>Fix two memory leaks in the metrics view (one was
  2475. huge).</li>
  2476. <li>If freetype failed to rasterize a glyph, then we
  2477. would fall back on returning a bitmap image from our own
  2478. rasterizer -- even if we asked freetype for a greymap.
  2479. this caused problems when routines expected byte data
  2480. rather than bit data.</li>
  2481. <li>If we were given a cff (otf) font, with a bluevalues
  2482. array which ended in 0 (as [-20 0]) then we would omit
  2483. the final zero ([-20]).</li>
  2484. <li>Outputting extension subtables appears to have been
  2485. broken.</li>
  2486. <li>The code which was supposed to detect two glyphs with
  2487. the same set of kerning pairs and use the same data for
  2488. them didn't work (forcing us to get an extension table
  2489. which also didn't work).</li>
  2490. <li>Add some more checks against non-BMP characters when
  2491. drawing text.</li>
  2492. <li>For first characters in the kern pair dlg, when
  2493. editing class 0, the [Edit] button was enabled but did
  2494. nothing. Should work now.</li>
  2495. <li>ff could crash if it tried to create a popup image of
  2496. the &lt;New&gt; line in the substitution pane of Glyph
  2497. Info.</li>
  2498. <li>Horizontal Scrolling in the matrix edit widget
  2499. sometimes forgot to move the column labels.</li>
  2500. <li>Add glyph name completion to lookup subtable dlg and
  2501. glyph info panes.</li>
  2502. <li>addKerningClass didn't parse its arguments
  2503. correctly.</li>
  2504. <li>Drat. When printing full page glyphs to a pdf file,
  2505. the glyph was shifted up by almost the full page and we
  2506. got a second (and incorrect) title.</li>
  2507. <li>MS proposes two new feature tags with it's new 'MATH'
  2508. table.</li>
  2509. </ul>
  2510. </li>
  2511. <li>23-July-2007
  2512. <ul>
  2513. <li>I have merged (and substantially rewritten) the Print
  2514. and Display Dialogs. There is now only one menu item
  2515. (Print) which (vaguely) the old Display dlg except that
  2516. it can now be printed. The text area widget now supports
  2517. OpenType features just as the metrics view does. It also
  2518. supports ligature carets.
  2519. <p>The dialog is no longer modal, however it does not
  2520. get updated with each change to the font (that would
  2521. make moving a point around in the outline view far too
  2522. sluggish), instead there is a [Refresh] button the user
  2523. can press to force an update.</p>
  2524. </li>
  2525. <li>It occurred to me that fontforge's current mechanism
  2526. for setting ligature carets requires that there be a
  2527. ligature substitution is the exact number of components
  2528. used to make the glyph. But in indic fonts ligatures are
  2529. often made up out of other ligatures (I think) which
  2530. means that there won't be enough caret positions.
  2531. <p>So I've added a Ligature Caret count to the
  2532. Element-&gt;Glyph Info dialog to give the user control
  2533. over it when necessary.</p>
  2534. </li>
  2535. <li>Add minimal support for applying apple state machine
  2536. lookups in metrics view. Support is minimal because:
  2537. <ul>
  2538. <li>Apple seems to figure line breaks before doing
  2539. substitution process but I do it afterward so I don't
  2540. know where the line breaks are and I can't enter
  2541. either the line start or line end state.</li>
  2542. <li>When I delete a glyph I delete it. Apple inserts
  2543. a deleted glyph mark and then removes that later.
  2544. State machines can respond to deleted glyphs, but I
  2545. can't.</li>
  2546. <li>I don't try to figure out which feature,settings
  2547. should be on by default. So the user must pick them
  2548. out manually.</li>
  2549. </ul>
  2550. </li>
  2551. <li>Add popup graphics to the Glyph Info and Lookup
  2552. subtable dialogs to show substitutions (that is if there
  2553. is an entry like 'smcp' a =&gt; a.sc then create a popup
  2554. window showing the "a" glyph and the "a.sc" so the user
  2555. can see what happens.</li>
  2556. <li>Another futile attempt at an embolden command.
  2557. Element-&gt;Embolden</li>
  2558. <li>Add shortcuts to the anchor control dlg (Page Up/Page
  2559. Down) to move to the next/previous glyph.</li>
  2560. <li>Michal Nowakowski has improved the truetype
  2561. autoinstructor. He warns that it probably still has bugs
  2562. (as what does not?) so I am leaving the old code
  2563. available for now. He says it works best in "a clean
  2564. (uninstructed) font with well defined blue zones and
  2565. stems".</li>
  2566. <li>If we have a glyph with multiple encodings, and the
  2567. secondary encodings occur after the primary ones, then
  2568. the backmap will probably contain a secondary encoding,
  2569. which means that when we go to load the font in we will
  2570. probably notice the secondary encoding twice and forget
  2571. the primary.</li>
  2572. <li>I used not to distinguish between ligature anchors
  2573. and normal mark to base anchors. Unfortunately when I
  2574. moved to lookups (from features) I had to introduce that
  2575. distinction. But I didn't work through all the
  2576. implications and have fixed a number of bugs related to
  2577. that.</li>
  2578. <li>Barry SCHWARTZ complains that font info says
  2579. "fontnames must" but that the cited adobe tech note only
  2580. says "should". So change "must" to "should".</li>
  2581. <li>When processing class-based contextual lookups
  2582. fontforge could not handle class 0 (the class containing
  2583. "all glyphs not in another class") add code to do
  2584. that.</li>
  2585. <li>If the user did not select a Gasp Version (note:
  2586. active selection was needed, just seeing that it was
  2587. correct and leaving it didn't work) then [OK] would leave
  2588. the font with an invalid version and on some systems
  2589. caused a crash.</li>
  2590. <li>View-&gt;Insert Glyph After didn't work well on a
  2591. ligature glyph. It would insert the glyph after the first
  2592. component of the ligature, not after the last -- which
  2593. would make more sense.</li>
  2594. <li>Misnamed some private dict entries when loading from
  2595. otf.</li>
  2596. <li>Make entry of ghost hints better.</li>
  2597. <li>Add the ability to determine whether a point is
  2598. selected or not from python.</li>
  2599. <li>Add a mechanism so the user can ask fontforge to
  2600. check for the existance of optional libraries.</li>
  2601. <li>Add range checks to some library routines which
  2602. blindly referenced some BMP arrays with codepoints
  2603. outside bmp. Broken by UCS2-&gt;UCS4 change.</li>
  2604. <li>Werner wants GotoChar to be able to switch sub-fonts
  2605. in a cid keyed font. This may introduce bugs...</li>
  2606. <li>Revert glyph still wasn't working.</li>
  2607. <li>Someone complained that using a negative stroke took
  2608. a very long time but produced correct results. Um. Ok.
  2609. It's easy always to use the absolute value.</li>
  2610. <li>Oops. The mac uses UCS2 for filenames, so when I
  2611. moved to UCS4 I should have changed the mac resource file
  2612. interface.</li>
  2613. <li>When creating a mac resource file we only set the
  2614. type/creator fields and failed to initialize the
  2615. finderFlags.</li>
  2616. <li>Fixed crash bug in generating a cursive connection
  2617. anchor sub-table.</li>
  2618. <li>In TrueType composite glyphs with the USE_MY_METRICS
  2619. bit set the lock icon wasn't scrolled properly.</li>
  2620. <li>The change from UCS2 to UCS4 broke text
  2621. copy/paste.<br />
  2622. We failed to add a terminating NUL of the right size in
  2623. all cases<br />
  2624. We continued to use charset=UCS-2 when it should have
  2625. been UCS-4</li>
  2626. <li>FF crashed when trying to View-&gt;Show ATT on a font
  2627. that appears to me to contain an invalid 'kern'
  2628. sub-table. I have removed the proximate cause of the
  2629. crash. I have provided a warning that the kern table
  2630. appears invalid. And I have cleaned up my internals after
  2631. detecting the bad sub-table (I had a lookup with a
  2632. feature but no script and this caused problems).</li>
  2633. <li>Multiple substitutions in the metrics view did not
  2634. properly update the count of glyphs to be displayed.</li>
  2635. <li>If nothing changed in the metrics input field and the
  2636. output contained a ligature (or a mult subs I suspect).
  2637. FF would complain.</li>
  2638. <li>in python, font.generate() didn't work. The
  2639. PyArg_ParseTupleAndKeywords behaves in a way I did not
  2640. expect.</li>
  2641. <li>[Bottom] and [Down] still didn't work for lookup
  2642. subtables.</li>
  2643. <li>Try to force the text field in the metricsview to a
  2644. fixed size. In some fonts it seems to be initialized to a
  2645. huge value.</li>
  2646. <li>Add ability to display italic side bearings in the
  2647. char view.</li>
  2648. <li>The lines drawn for italic fonts to show the italic
  2649. origin and width were at slightly the wrong angle (I used
  2650. a sine when I should have used a tangent).</li>
  2651. <li>If a font did not have any horizontal metrics then ff
  2652. would not set the em-size.</li>
  2653. <li>Show Att trampled on memory when displaying apple
  2654. contextual substitution state machines.</li>
  2655. <li>Wasn't parsing apple's 'lcar' table properly.</li>
  2656. <li>if a font contained a 'post' table but didn't name
  2657. all names (or something like that), then the attempt to
  2658. name the glyph based on the encoding was broken after the
  2659. encoding change.</li>
  2660. <li>FF did not recognize that a bdf file was greymaped.
  2661. Broken by the bdf properties work a year ago or so.</li>
  2662. <li>The import lookups button in fontinfo forgot about
  2663. the subtables (sort of).</li>
  2664. <li>The metricsview used the wrong count field to
  2665. determine whether things changed. It used the glyph
  2666. count, not the char count (which meant that when we had a
  2667. ligature and the number of chars was greater than the
  2668. number of glyphs, things got confused.)</li>
  2669. <li>In the metrics view, anchored attachments only worked
  2670. if the base glyph were itself unmoved (that is the mark
  2671. was placed relative to the unmoved location, not the
  2672. actual location).</li>
  2673. <li>The search dialog should provide user with control
  2674. over the error bound.<br />
  2675. The rotate checkbox didn't work if the flip checkbox
  2676. wasn't checked.</li>
  2677. <li>If a replace contour added a control point to a point
  2678. that did not have one (went from a line to a curve) then
  2679. that control point would get lost.<br />
  2680. If a search matched across the start point of a contour
  2681. then search/replace could go into an infinite loop if the
  2682. search and replace paths were the same.</li>
  2683. <li>Find/Replace (replace) didn't work on quadratic
  2684. splines.</li>
  2685. <li>Add two python methods:
  2686. <ul>
  2687. <li>
  2688. Layer.interpolateNewLayer(other-layer,amount)</li>
  2689. <li>
  2690. Font.createInterpolatedGlyph(glyph1,glyph2,amount)</li>
  2691. </ul>
  2692. <p>The first creates a new layer by interpolating
  2693. between the current layer and the layer in the first
  2694. argument.<br />
  2695. The second creates a new glyph in the font by
  2696. interpolating between the first two arguments. The
  2697. glyph's unicodecode point and name will be copied from
  2698. the first argument (the font must not already contain
  2699. this glyph).<br />
  2700. If amount is 0 the result will look like the first
  2701. glyph, if 1 then like the second.</p>
  2702. </li>
  2703. <li>When recovering from a crash, FF would sometimes
  2704. complain about a mismatched version number. Don't.</li>
  2705. <li>Problems parsing 'mort' tables could cause a
  2706. crash.</li>
  2707. <li>When building a contextual lookup, don't list that
  2708. lookup as something that it could invoke (ie. list all
  2709. lookups in this table (GPOS/GSUB) except for ourselves).
  2710. Don't want to encourage users to create infinite lookup
  2711. loops.</li>
  2712. <li>Point matching didn't work when there were references
  2713. to references and multiple references within a
  2714. glyph.</li>
  2715. <li>FF was having problems with extension lookups with
  2716. multiple sub tables.</li>
  2717. <li>We were trying to print a trailing NUL in some
  2718. strings from the fontview.</li>
  2719. <li>Kerning by classes got broken in metricsview by the
  2720. addition of support for device tables.</li>
  2721. <li>A GPOS contextual lookup only listed GSUB lookups in
  2722. the lookup/sequence dlg<br />
  2723. Pressing [OK] in the lookup/sequence dlg caused a crash
  2724. if no lookup selected.</li>
  2725. <li>Openfontdlg was looking at the filter listbutton
  2726. rather than the rename namelist listbutton.</li>
  2727. <li>mf2pt1 now uses "glyph_dimensions" rather than
  2728. "bbox"</li>
  2729. <li>The metrics view should now handle device
  2730. tables.</li>
  2731. <li>Goto could crash when used on small encodings.</li>
  2732. <li>-lang wasn't permitted before -c.</li>
  2733. <li>Use numeric text fields for anchor positioning.</li>
  2734. <li>Graham Asher points out that the meanings of
  2735. underline position in the 'post' table and the FontInfo
  2736. dictionary are different. One refers to the top of the
  2737. underline rectangle and one to the center of it.</li>
  2738. <li>Align point would crash if the selected point were
  2739. the end point of a contour (or if the two points around
  2740. it were in the same place).</li>
  2741. <li>The baseline was not properly located when displaying
  2742. it in the fontview.</li>
  2743. <li>The scripting command BitmapsAvail would generally
  2744. cause FF to crash if done when there was a UI..</li>
  2745. <li>We seem to be misimplementing my obsolete (sfd file)
  2746. convention for having duplicate encodings point to the
  2747. same glyph. Result was that occasionally a glyph would be
  2748. removed and a pointer to something it refered to would be
  2749. put in its place.</li>
  2750. <li>Change the name of activeFontInUI to activeFont<br />
  2751. Add an activeGlyph method.<br />
  2752. Add the ability to call a python script from a outline
  2753. view.</li>
  2754. <li>Hmmm. If a textfield is shifted right, and then
  2755. resized so there's now room for all the text, the unshift
  2756. it.</li>
  2757. <li>Werner suggests that it would be useful to be able to
  2758. specify wildcards in the goto dlg.</li>
  2759. <li>Michael Zedler tells me that glyphs output by mf2pt1
  2760. contain a line:
  2761. <pre>
  2762. % MF2PT1: bbox 0 90 834 422
  2763. </pre>
  2764. <p>where the third (so called) bounding box entry is
  2765. actually the glyph's advance width. I was reluctant to
  2766. use this at first, because that clearly isn't something
  2767. that belongs in a bounding box...</p>
  2768. </li>
  2769. <li>Werner tells me that lilypond uses a slightly
  2770. different syntax for the MF2PT1 bbox comment, so make our
  2771. parsing slightly more generous.</li>
  2772. <li>When creating a new lookup subtable for an anchored
  2773. lookup, it did not get marked as having anchor classes
  2774. and feature file output failed because of that.</li>
  2775. <li>When outputing single lookups, the feature, script
  2776. and language tags all had ^A where they should have had
  2777. the second letter of the tag.</li>
  2778. <li>Remove the code to produce the old, broken, 'size'
  2779. feature.</li>
  2780. </ul>
  2781. </li>
  2782. <li>07-June-2007
  2783. <ul>
  2784. <li>Add support for Adobe's feature file syntax.<br />
  2785. Use Merge Kern (now Merge Feature) to read one<br />
  2786. Use Element-&gt;Font Info-&gt;Lookups-&gt;popup
  2787. menu-&gt;Save to generate one
  2788. <p>Sigh. Adobe documents a feature file syntax they
  2789. don't fully support, and even their documented syntax
  2790. is inadequate to represent all the complexities of
  2791. OpenType.</p>
  2792. <p>FontForge supports anchors and device tables and
  2793. will parse lookups which contain these. This is a
  2794. syntax which Adobe documents but does not implement.
  2795. Adobe also warns that this syntax may change when they
  2796. get around to implementing it.</p>
  2797. <p>FontForge makes one extension to the syntax which
  2798. allows me to specify complex contextual features.</p>
  2799. <p>Neither I nor Adobe support reverse contextual
  2800. substitutions, nor GDEF mark classes.</p>
  2801. </li>
  2802. <li>Add a popup menu to the lookups pane of font
  2803. info.</li>
  2804. <li>Change the name of <code>File-&gt;Merge Kern
  2805. Info</code> to <code>File-&gt;Merge Feature
  2806. Info</code></li>
  2807. <li>Remove the code to produce the old, broken, 'size'
  2808. feature.</li>
  2809. <li>An earlier patch, designed to make the tabset work in
  2810. the charview even if the user changed the name, didn't
  2811. work.</li>
  2812. <li>Bug in the selection iterator.<br />
  2813. Also Max Rabkin points out the docs say the iterator
  2814. returns selected glyphs rather than encoding slots. Fix
  2815. the docs, then add a member (.byGlyphs) which will make
  2816. the iterator return glyphs.</li>
  2817. <li>Accept contour += (1,2) rather than forcing people to
  2818. say contour += fontforge.point(1,2)</li>
  2819. <li>Was using an error return from two setter functions
  2820. (contour.set_closed, set_is_quadratic) when I should have
  2821. returned success.</li>
  2822. <li>Crash when mistyping a glyph name in Glyph Info
  2823. possub panes. Probably in the equivalent lookup dlgs
  2824. too.</li>
  2825. <li>If a glyph contained two copies of another glyph, and
  2826. one of those copies was off by enough that ff didn't
  2827. recognize it, the depending on how the contours were
  2828. ordered, ff might fail to recognize the first glyph too,
  2829. even though it did match.</li>
  2830. <li>Add iterators to contours and layers. Python users
  2831. seem to expect them even when they aren't documented to
  2832. exist.</li>
  2833. <li>layer += contour didn't work in python. I was
  2834. examining a bit through the wrong data type.</li>
  2835. <li>Provide a mechanism for copying lookup information
  2836. from one glyph to another. (<code>Edit-&gt;Copy Lookup
  2837. Data</code>)</li>
  2838. <li>Loading kerning info from a mac 'FOND' resource was
  2839. broken by the lookup change.</li>
  2840. <li>Python scripting command font.createChar didn't.
  2841. Partial patch from Max Rabkin.</li>
  2842. <li>Adding a kerning pair from the metrics view would
  2843. often add two or three pairs with the same character
  2844. combination and different values.</li>
  2845. <li>Another remove overlap bug. Introduced recently.</li>
  2846. <li>Reinstate Apply Substitutions scripting command.</li>
  2847. <li>Add some dutch styles.</li>
  2848. <li>Make yet another attempt to correct for rounding
  2849. errors when loading a postscript font.</li>
  2850. <li>Add a way to get a font's filename to python.</li>
  2851. <li>Werner points out that in scripting I use "break" in
  2852. an example. It isn't documented to work and I don't
  2853. implement it but I do show it. Oops. Ok, make it
  2854. work.</li>
  2855. <li>Display substitutions was broken.</li>
  2856. <li>When generating default names for subtables, it is
  2857. confusing to name them the same as the lookup.</li>
  2858. <li>Change to using USC4 from UCS2 internally.</li>
  2859. <li>Provide default names for lookups once the user sets
  2860. the feature.</li>
  2861. <li>Disambiguate some strings for the polish
  2862. translation</li>
  2863. <li>Revert glyph should not work for old sfd files.</li>
  2864. </ul>
  2865. </li>
  2866. <li>11-May-2007
  2867. <ul>
  2868. <li>Loading some afm files would go into an infinite
  2869. loop. (Introduced 9-May)</li>
  2870. <li>[Import] button on Font Info-&gt;Lookups
  2871. crashed.</li>
  2872. <li>Fix a number of problems related to anchor
  2873. classes.</li>
  2874. <li>After the user does an [Add Lookup] we should select
  2875. the new lookup, to make it easier for him/her to do an
  2876. [Add Subtable].</li>
  2877. </ul>
  2878. </li>
  2879. <li>9-May-2007
  2880. <ul>
  2881. <li>When ff parsed an afm file it only read the first
  2882. ligature on a line.</li>
  2883. <li>The [Call...] button in the scripting dialog is
  2884. meaningless for python scripts (or I don't know how to
  2885. give it meaning) so disable it.</li>
  2886. <li>Vertical scrolling in the metrics view tried to
  2887. scroll the list of features too.</li>
  2888. <li>Tab, and arrow keys didn't work in the matrixedit
  2889. widget after I added hidden columns. Make Return do the
  2890. expected thing (move to start of next line and create it
  2891. if possible).</li>
  2892. <li>Patch by Pierre to fix uninitialized value when
  2893. compacting encodings.</li>
  2894. <li>Typo in realloc of lookups meant that nothing
  2895. happened (when it should have increased array size by
  2896. 1).</li>
  2897. <li>Add the OFL icon to the fontinfo dlg.</li>
  2898. <li>Plugins were broken with regular link configure
  2899. option.</li>
  2900. <li>Inkscape can start X on the mac before it tries to
  2901. connect. Hmm. I can do that too. Inkscape manages to
  2902. start X without an xterm. I don't know how to do
  2903. that.</li>
  2904. <li>When reading PS and CharStrings, the closepath
  2905. operator didn't allow for rounding errors.</li>
  2906. <li>Metrics View would crash if more than 20 glyphs
  2907. entered.</li>
  2908. <li>Alexej Kryukov points out that it would be nice if
  2909. moving an anchor point did not set "changed since last
  2910. hinted.</li>
  2911. <li>Alexej Kryukov points out that the "changed since
  2912. last hinted" flag gets set inappropriately.</li>
  2913. <li>Alexej Kryukov points out that the Anchor control
  2914. menu item looked as though it had changed, but actually
  2915. had not.</li>
  2916. </ul>
  2917. </li>
  2918. <li>1-May-2007
  2919. <ul>
  2920. <li>I've redone the way FontForge handles lookups so that
  2921. it is more in keeping with OpenType.
  2922. <blockquote>
  2923. The major change is that fontforge now presents
  2924. lookups to the user rather than features. I think
  2925. this makes simple things more difficult (which is why
  2926. I avoided this when I started), but it makes complex
  2927. things possible.
  2928. <p>Sadly the world is not simple.</p>
  2929. <p>So when a piece of typographic information is
  2930. created (a ligature, a kern pair, a glyph
  2931. substitution, etc.) it must be tagged with a lookup
  2932. (actually a lookup sub-table) rather than a feature
  2933. tag.</p>
  2934. <p>The lookup itself will be tagged with a feature
  2935. tag (possibly several tags) and with scripts and
  2936. languages in which that lookup should be
  2937. active.<br />
  2938. <strong>NOTE:</strong> This reverses the way
  2939. GPOS/GSUB think about things, but it contains the
  2940. same information.</p>
  2941. <p>The <a href="fontinfo.html#Lookups">Font Info</a>
  2942. dialog now contains a Lookup pane which allows you to
  2943. create and edit lookups and their subtables. You can
  2944. also reorder them. The order shown in the dialog is
  2945. the order in which they will be applied.</p>
  2946. <p>A mac feature/setting subtable also gets converted
  2947. into this format.</p>
  2948. <p>The Font Info dialog no longer has Anchor Classes,
  2949. Contextual, or State Machine panes.</p>
  2950. <p>Instead you can edit a lookup subtable's data (for
  2951. any subtable type). There are new dialogs which list
  2952. all the information for each lookup type (ie. a
  2953. dialog which lists all kern pairs in a subtable), and
  2954. these provide access to the old anchor class,
  2955. contextual or state machine dialogs.</p>
  2956. <p>The Glyph Info command has also changed. It looks
  2957. simpler and more comprehensible (I think), but the
  2958. act of creating a new substitution has become more
  2959. complex because (potentially) one must create a new
  2960. lookup and lookup subtable before doing the simple
  2961. task of adding a new replacement glyph.</p>
  2962. <p>The kerning class, contextual and state machine
  2963. dialogs have all changed in that they no longer
  2964. request a feature tag, they now need a lookup
  2965. subtable.</p>
  2966. <p>The metrics view also needs a subtable.<br />
  2967. The metrics view has changed considerably.<br />
  2968. It displays all the features in the font, and allows
  2969. you to select which ones you want active in the view.
  2970. It lets you set the script &amp; language. It will
  2971. apply lookups that it couldn't handle previously like
  2972. ligatures and contextuals.</p>
  2973. <p>It does not do Indic glyph reordering. I'm not
  2974. sure how to and last I checked MS had not updated
  2975. their docs to reflect their new procedures.</p>
  2976. <p>Many other dialogs now take a lookup subtable
  2977. where appropriate.</p>
  2978. <p>Show ATT has changed, but it is still not
  2979. editable. I hope that the Lookups pane will do that
  2980. instead.</p>
  2981. <p>There used to be a scripting command which
  2982. indicated what ligature features got stored in afm
  2983. files. Now each ligature lookup has a flag set on it
  2984. which conveys this information.</p>
  2985. <p>The Element-&gt;Typographic Features menu has been
  2986. removed. It's functionality has moved into Font
  2987. Info-&gt;Lookups (I hope I've got everything).</p>
  2988. <p>Some scripting commands have been removed, others
  2989. have been changed and others have been added. I
  2990. apologize for this, as it will break existing
  2991. scripts, but some basic concepts no longer exist and
  2992. others, very different, have replaced them. (and
  2993. anyway people may switch to <a href=
  2994. "python.html">python scripting</a> now).</p>
  2995. <dl>
  2996. <dt>Removed:</dt>
  2997. <dd>
  2998. <pre>
  2999. DefaultATT
  3000. ControlAfmLigatureOutput
  3001. ApplySubstitutions
  3002. CopyGlyphFeatures
  3003. AddATT Replaced with AddPosSub
  3004. RemoveATT
  3005. GlyphInfo(Position/Pair/Substitution/AltSubs/MultSubs/Ligature)
  3006. SelectByATT Replaced with SelectByPosSub
  3007. </pre>
  3008. </dd>
  3009. <dt>Changed</dt>
  3010. <dd>
  3011. <pre>
  3012. Set(V)Kern takes an optional third argument, a lookup subtable
  3013. name (if not specified it choses one)
  3014. AddAnchorClass(name,type,lookup-subtable-name)
  3015. GetPosSub(subtable-name)
  3016. AutoKern(spacing,threshold,subtable-name[,kernfile])
  3017. </pre>
  3018. </dd>
  3019. <dt>Added</dt>
  3020. <dd>
  3021. <pre>
  3022. AddLookup(name,type,flags,feature-script-lang-array[,after-lookup-name])
  3023. n*[feature-tag,script-lang-array]
  3024. n*[script-tag,lang-array]
  3025. n*[lang]
  3026. GetLookupInfo(lookup-name) =&gt;
  3027. [type,flags,feature-script-lang-array]
  3028. AddLookupSubtable(lookup-name,subtable-name[,after-subtable-name])
  3029. GetLookupOfSubtable(subtable-name)
  3030. GetSubtableOfAnchorClass(anchor-class-name)
  3031. AddPosSub(subtable-name,variant(s))
  3032. (subtable-name,dx,dy,dadv_x,dadv_y)
  3033. (subtable-name,other-glyph-name,dx,dy...)
  3034. RemoveLookupSubtable(subtable-name)
  3035. RemoveLookup(lookup-name)
  3036. MergeLookupSubtables(subtable-name1,subtable-name2)
  3037. MergeLookups(lookup-name1,lookup-name2)
  3038. SelectByPosSub(subtable-name,search_type)
  3039. GetLookups("GPOS"/"GSUB")
  3040. GetLookupSubtables(lookup-name)
  3041. LookupStoreLigatureInAfm(lookup-name,store-it)
  3042. LookupSetFeatureList(lookup-name,feature-script-lang-array)
  3043. </pre>
  3044. </dd>
  3045. </dl>
  3046. <p>The <a href="sfdformat.html">sfd format</a> has
  3047. changed. New files are tagged as version 2. Old files
  3048. will still work, but ff will no longer produce file
  3049. in the old format.</p>
  3050. </blockquote>
  3051. </li>
  3052. <li>New translations to match the new UI: Polish, Greek,
  3053. German, French, simplified Chinese.</li>
  3054. <li>FontForge now supports <a href="python.html">python
  3055. scripting</a> if it has been configured to do so.</li>
  3056. <li>Tell users they should add their email address to the
  3057. License after pressing the [Add SIL Open Font License]
  3058. button.</li>
  3059. <li>The metrics view had numerous problems. Most
  3060. significant if a glyph changed elsewhere the metrics view
  3061. would not be updated.</li>
  3062. <li>If the width of a glyph changed in the metrics view
  3063. then that was not synchronized to dependent glyphs.</li>
  3064. <li>Enforce the "Use My Metrics" bit of a
  3065. reference.<br />
  3066. In TrueType, if this bit is set on a reference then then
  3067. width of the containing glyph will be the same as that of
  3068. the reference.<br />
  3069. So don't let the user change the width of such glyphs.
  3070. (and add a lock icon to the width line in the character
  3071. view to show that it is fixed).</li>
  3072. <li>Fix a number of Remove Overlap bugs.</li>
  3073. <li>FF would destroy memory in the metrics view if the
  3074. user attempted to display a character which was not in
  3075. the font.</li>
  3076. <li>Was setting the last char index (of OS/2) incorrectly
  3077. if the font contained non-BMP characters. Might also have
  3078. set the first char index wrong two.</li>
  3079. <li>Bugs in 'PfEd' table, glyph comment subtable.</li>
  3080. <li>Couple of places where I actually say "FontForge
  3081. 1.0". Let's bump that to 2.0 now that I've done that for
  3082. the sfd format.</li>
  3083. <li>Overlap problems with incorrect path
  3084. orientations.</li>
  3085. <li>Arrow keys didn't work in the charview if the tabset
  3086. were active.</li>
  3087. <li>I used to use "&gt;&lt;" on the font's window title
  3088. to represent a compacted font. No one understood it. Use
  3089. "Compacted" instead.</li>
  3090. <li>Philipp Poll wants to see the side bearings (I think)
  3091. in the charview.</li>
  3092. <li>Nicolas Spalinger of SIL suggests a help button next
  3093. to [Add OFL] to open a browser on the official OFL
  3094. site.</li>
  3095. <li>Patch from Nicolas Spalinger of SIL regarding the
  3096. verbiage surrounding the OFL in the fontinfo. Also his
  3097. suggestion to make the tooltip live longer.</li>
  3098. <li>Replace with Reference didn't check reference offsets
  3099. correctly.</li>
  3100. <li>Find problems didn't find references which
  3101. intersected.</li>
  3102. <li>Add some standard classes to the context chaining
  3103. dlg.</li>
  3104. <li>Make sure we only generate a postscript name in the
  3105. name table once.</li>
  3106. <li>The change length button of the cvt dlg didn't
  3107. work.</li>
  3108. <li>Input/Output of Apple's 'lcar' table was
  3109. inconsistent. I don't know if it is "right" now, but at
  3110. least ff can read back what it wrote.</li>
  3111. <li>Werner points out that the debug windows show up at
  3112. odd places if the window gets resized.</li>
  3113. </ul>
  3114. </li>
  3115. <li>12-Mar-2007
  3116. <ul>
  3117. <li>Add a button to insert the <a href=
  3118. "http://scripts.sil.org/ofl/">SIL Open Font License</a>
  3119. into the 'name' table.</li>
  3120. <li>FF failed to store TeX heights and depths properly in
  3121. a tfm file. FF failed to read or write TeX extension
  3122. lists properly.</li>
  3123. <li>Patch from Reuben Thomas to turn off the splash
  3124. screen from the preference dlg.</li>
  3125. <li>I had the dotlessj code point wrong. Again.</li>
  3126. <li>FF did not center the charview window well on an
  3127. empty glyph.</li>
  3128. <li>The scripting command to add instructions to a glyph
  3129. could immediately lose them if the glyph's points weren't
  3130. numbered properly</li>
  3131. <li>We used to allow the syntax
  3132. "&lt;number&gt;&lt;numbers&gt;* command" in ttf
  3133. instructions (which automagically inserted an implied
  3134. push). Someone noticed that
  3135. <blockquote>
  3136. <pre>
  3137. PUSHB_1
  3138. 1
  3139. 2
  3140. </pre>
  3141. </blockquote>
  3142. <p>would lose the second number and not complain. In
  3143. fixing that, I broke the first. Now both should work (I
  3144. hope).</p>
  3145. </li>
  3146. <li>Code which I hope will handle German keyboards and
  3147. make them do what the menu says they (ignoring the shift
  3148. key) should for certain hot keys (brackets, curly
  3149. brackets, brokets all get different modifier sequences on
  3150. a german keyboard than an english).</li>
  3151. <li>If a glyph had no hints then ff could add a hintmask
  3152. operator (which didn't try to control any hints). Now I
  3153. can't find anything in the docs which SAYS it's illegal
  3154. to have a hintmask in a glyph with no fonts, it does seem
  3155. bad practice, and a program called tx.exe complained
  3156. about it.</li>
  3157. <li>Patch by Michal Nowakowski to allow a nicer notation
  3158. for delta instructions in the instruction editing window:
  3159. Example:<br />
  3160. <tt>PUSHB_3 6@12 8 1 DELTAP2</tt><br />
  3161. This moves point 8 by six delta-steps (that's clear) at
  3162. 37 ppem (that's not clear at first glance - assuming
  3163. delta_base is 9, DELTAP2 works from 25 ppem to 25+15
  3164. ppem, in this example it's 25+12 ppem). So it's just a
  3165. way of constructing an argument byte for DELTAP/C.</li>
  3166. <li>Allow FontForge's menu shortcuts (hot keys, whatever)
  3167. to be user definable. We use a gettext based mechanism,
  3168. type $ make FontForge-MenuShortCuts.pot to get a pot file
  3169. for the process. It needs to be converted to an mo file
  3170. and installed in
  3171. $(prefix)/share/locale/$(LANG)/LC_MESSAGES, just like any
  3172. other getext file.</li>
  3173. <li>The Export scripting command did not work as
  3174. documented. It is documented to export all
  3175. <em>selected</em> glyphs. Instead it exported
  3176. <em>all</em> glyphs.</li>
  3177. <li>Redo the anchor control dlg.</li>
  3178. <li>Be a little more lenient about bitmap bounding boxes
  3179. for empty glyphs when loading bdf fonts</li>
  3180. <li>Make the ClearHints scripting command take arguments:
  3181. "Horizontal" or "Vertical" to allow users to choose to
  3182. clear either horizontal or vertical hints (the old form
  3183. with no args still works and clears both, of
  3184. course).</li>
  3185. <li>Typo gives us an unititialized variable when saving
  3186. ufo.</li>
  3187. <li>Various problems to various anchor dialogs.</li>
  3188. <li>If an anchor point contained an x devtab but not a y
  3189. devtab then it produced a pointer to garbage for the y
  3190. devtab instead of NUL.
  3191. <p>Pairwise positioning lookups could also get their
  3192. device table offsets screwed up.</p>
  3193. </li>
  3194. <li>Werner points out that if you have a series of the
  3195. same glyph in a row in the encoding (generally .notdef)
  3196. and you are in a char view, then pressing Next Glyph does
  3197. nothing. You are stuck at the same code point. (same
  3198. thing happens for Prev Glyph).</li>
  3199. <li>a chinese input method steals keystrokes I use for
  3200. hot keys (I think). So if users don't want glyph
  3201. navigation by typing characters in the charview
  3202. (controled by a preference item) then don't turn on the
  3203. input method when the window is created.</li>
  3204. <li>Add hot key for Select-&gt;Points on selected
  3205. contours.</li>
  3206. <li>Assign "dotlessj" to map to 0x237, the unicode code
  3207. point, rather than to 0xf6be, the old Adobe private use
  3208. area. !!!! THIS DOES NOT CONFORM TO THE AGL !!!!!</li>
  3209. <li>Oops. The gloss for the shift point/contour/zone was
  3210. slightly off and gave the wrong information.</li>
  3211. <li>Add vietnamese font styles (bold, italic, regular,
  3212. etc.)<br />
  3213. From Clytie Siddall.</li>
  3214. <li>Fixes for rounding errors in finding spline
  3215. intersections.</li>
  3216. <li>Werner points out that removing a bitmap glyph from
  3217. the bitmapview does not force a redisplay in the
  3218. fontview.</li>
  3219. <li>Gleep. Werner points out that when generating bitmap
  3220. strikes, ff would always generate a temporary postscript
  3221. font to rasterize, so any truetype instructions would be
  3222. ignored. And the generated strikes would be ugly.</li>
  3223. <li>Add a command to show anchor point attachments within
  3224. the outline character view<br />
  3225. (View-&gt;Combinations-&gt;Anchor Glyph at Point)</li>
  3226. <li>Force point numbers to be correct when changing
  3227. glyphs in the charview.</li>
  3228. <li>Add support for Apple/Adobe's obsolete 'typ1' sfnt. A
  3229. way of stuffing a type1 font into an sfnt wrapper.</li>
  3230. <li>Even though the viewbox/output width height ratios
  3231. are different, people want the image scaled the same in
  3232. svg input.</li>
  3233. <li>People would like to have only one charview and
  3234. double clicking in the fontview just changes the contents
  3235. of an existing window.<br />
  3236. Preference Item: OpenCharsInNewWindow</li>
  3237. <li>Add a tabs line to the outline char window. If users
  3238. are going to have only one charview open then they
  3239. probably want some history too.</li>
  3240. <li>Werner points out that what I call "Type42 CID"
  3241. should actually be called either "Type11" or "CID Type
  3242. 2".</li>
  3243. </ul>
  3244. </li>
  3245. <li>20-Dec-2006
  3246. <ul>
  3247. <li>Patch by Johan Winge fixing a bug in dragging out a
  3248. magnification rectangle</li>
  3249. <li>Patch from SUSE fixing a variable which can be
  3250. uninitialized.</li>
  3251. </ul>
  3252. </li>
  3253. <li>19-Dec-2006
  3254. <ul>
  3255. <li>I have received many complaints about the grey
  3256. background, so I have tried various other backgrounds --
  3257. and gotten complaints on all of them. Currently try using
  3258. a white background by default and add a <a href=
  3259. "faq.html#background">discussion in the FAQ</a> about
  3260. changing it.</li>
  3261. <li>Add support for Unified Font Objects (a directory
  3262. holding many Glyph Interchange Format files). People at
  3263. the Open Font Library seem to think this is useful. Also
  3264. support for importing/exporting glyphs in glif.</li>
  3265. <li>People asked me to implement the UFO/GLIF format in
  3266. part because each glyph is stored in a separate file
  3267. giving finer granularity to version control. I worry
  3268. about using UFO/GLIF because it is not documented to
  3269. store all the information needed to regenerate a font
  3270. (being mainly concerned with glyph outlines). So I've
  3271. implemented a directory based version of the sfd format
  3272. which I hope will provide the one glyph per file format
  3273. people say they want.</li>
  3274. <li>MS has extended the 'gasp' table to give users
  3275. control over clear type. Version number has changed too.
  3276. FF now supports the new bits.</li>
  3277. <li>MS has also added a cleartype bit to the head
  3278. table.</li>
  3279. <li>Hmm. I wasn't setting the apple specific bits of the
  3280. head table properly.</li>
  3281. <li>Allow the user to create an empty bitmap strike.</li>
  3282. <li>Add the ability to remove bitmap glyphs from a
  3283. strike.</li>
  3284. <li>Fix a couple of memory leaks.</li>
  3285. <li>The docs don't mention this, but... mangal.ttf has a
  3286. NULL offset for the lookahead class definition, so if
  3287. that happens -- no classes.</li>
  3288. <li>Werner doesn't like that I always add dummy bitmaps
  3289. for .notdef, .null &amp; nonmarkingreturn. It seemed
  3290. logical to me that if I were prepared to add those glyphs
  3291. to the outline font I should be prepared to add them to
  3292. the bitmap strike. But Werner (I think) sees bitmap
  3293. strikes as containing exceptional glyphs which need
  3294. special handling, whereas I just saw them as complete
  3295. fonts. So in this context I guess there is no need to add
  3296. these glyphs. As a compromise I have decided that I will
  3297. add the glyphs to the bitmap strike if I added the glyphs
  3298. to the outline font.</li>
  3299. <li>Add scripting functions:
  3300. <ul>
  3301. <li>SelectMoreIf</li>
  3302. <li>SelectMoreSingletonsIf</li>
  3303. <li>SelectSingletonsIf</li>
  3304. </ul>
  3305. </li>
  3306. <li>The changed flag wasn't being set in Remove ATT.</li>
  3307. <li>GetPosSub scripting command trashed memory.</li>
  3308. <li>Make default char of OS/2 be space for otf and
  3309. .notdef for ttf. This is a guess at what should be
  3310. done.</li>
  3311. <li>FF was still setting firstcharindex in OS/2
  3312. incorrectly. The problem is that glyph 1 (or 2?) has
  3313. encoding 0 in the mac cmap table while it is not
  3314. referenced at all in the windows cmap.</li>
  3315. <li>Wasn't setting os2_typelinegap field when reading an
  3316. sfnt.</li>
  3317. <li>In a font without any LCG characters, fontforge set
  3318. the OS/2 capheight and xheight fields to -1e10. It should
  3319. have been 0. Patch by Roozbeh Pournader.</li>
  3320. <li>Patch by Roozbeh Pournader. Regular bit in fsSel in
  3321. OS/2 was being set when it should not have been.</li>
  3322. <li>Werner suggests that when looking at a bitmap strike,
  3323. nextdef and prevdef look at the next glyph defined in the
  3324. strike rather than the font as a whole. Useful for sparse
  3325. bitmaps</li>
  3326. <li>Werner wants to be able to set bitmap magnification
  3327. in the font view.</li>
  3328. <li>The "Recalculate Bitmaps" button in the bitmap view
  3329. should adjust its positioning as the window is resized
  3330. (and be sensitive to other languages which might have
  3331. different button widths).</li>
  3332. <li>there was an uninitialized variable used in parsing
  3333. contextual by coverage table.</li>
  3334. <li>Werner points out that when double clicking on a
  3335. bitmap glyph in the font view, the glyph is created /
  3336. rasterized without using freetype.</li>
  3337. <li>Sigh. Ok. make the size of the label font in the
  3338. fontview configurable.
  3339. <pre>
  3340. fontforge.FontView.FontSize: 24
  3341. </pre>
  3342. </li>
  3343. <li>Werner finds "Original" confusing for an encoding and
  3344. suggests "Glyph Order" instead.</li>
  3345. <li>MS has revealed the meaning of a few new GETINFO
  3346. bits. Put them in the Gloss window.</li>
  3347. <li>Set/Select aren't very informative in class
  3348. definition windows, change to "Set from font"/"Select in
  3349. Font"</li>
  3350. <li>Improve the way glyphs are centered in the outline
  3351. char view. At least I hope it's an improvement.</li>
  3352. <li>Oh. It is perfectly legal to have a context chain
  3353. rule with no substitutions. This can be used to avoid
  3354. matches in complex cases so:
  3355. <pre>
  3356. [a-z] a b =&gt; does nothing
  3357. a b [a-z] =&gt; does nothing
  3358. a b =&gt; substitutes
  3359. </pre>
  3360. <p>will only substitute of "ab" is a word all to
  3361. itself.</p>
  3362. </li>
  3363. <li>If the metrics view were displaying text containing
  3364. non UNICODE characters then some edits in the text field
  3365. which displays glyphs would leave us with the replacement
  3366. character showing instead.</li>
  3367. <li>Werner wants to know whether storage locations are
  3368. uninitialized or not, and to get warnings when reading an
  3369. uninit value.</li>
  3370. <li>Werner wants to see IF statements indented in
  3371. truetype instruction display.</li>
  3372. <li>FF wasn't telling freetype to set the mono bit when
  3373. loading a glyph, which meant that GETINFO would return
  3374. the wrong value for mono rasterization.</li>
  3375. <li>If there are too many numbers after an NPUSH[BW]
  3376. instruction, FF silently ignores them.</li>
  3377. <li>Anti-Aliased rasters still weren't aligned properly
  3378. with the outlines in the debug window.</li>
  3379. <li>When debugging I provided popup information for
  3380. anti-aliased rasters. But I didn't for mono rasters.</li>
  3381. <li>ff would crash when asked to debug fpgm/prep (because
  3382. my rasterization routine didn't work if there were no
  3383. contours).</li>
  3384. <li>Werner wants to turn off auto goto in the charview
  3385. when debugging is going on.</li>
  3386. <li>The gloss information for delta point (and cvt) was
  3387. wrong if the magnitude selector was 7. I claimed it moved
  3388. (changed) by 0, when it should have been by -1.</li>
  3389. <li>Werner wants to be able to set memory watch points on
  3390. storage and cvt locations. Set these through the
  3391. cvt/storage windows by clicking on the appropriate
  3392. locations. Modify the points window so the user can set
  3393. watch points by clicking on it too.</li>
  3394. <li>The Points window would sometimes scroll in
  3395. unexpected ways.</li>
  3396. <li>Werner wants to see the raw value of a "WS"
  3397. instruction in the gloss.</li>
  3398. <li>merge fonts would get the script lang index of merged
  3399. kern pairs wrong.</li>
  3400. <li>Correct some of icc's warnings</li>
  3401. <li>Apostolos points out that NAME_MAX isn't defined on
  3402. solaris, but _POSIX_NAME_MAX is. But _POSIX_NAME_MAX
  3403. doesn't seem to be defined on linux.</li>
  3404. <li>Display fonts would crash if you tried to change the
  3405. font. But introduced in last release.</li>
  3406. <li>Patch from Mike FABIAN. Rasterizing by freetype only
  3407. initialized a variable if CONFIG_TYPE3 (multilayer) was
  3408. set.</li>
  3409. <li>StrSplit &amp; StrJoin scripting functions.</li>
  3410. <li>Patch by Rüdiger Oertel. Strncat could overflow a
  3411. buffer.</li>
  3412. <li>Make simplify do point categorization, and not just
  3413. of points changed.</li>
  3414. <li>Curved stems are also limited by geometry. Can't just
  3415. assume control points work.</li>
  3416. <li>Why are pdf files listed as a source of bitmap
  3417. fonts?</li>
  3418. <li>When examining a bitmap font, metrics view would
  3419. crash when asked to look at a non-existant glyph.</li>
  3420. <li>The list of verbs for indic glyph rearrangement
  3421. didn't display.</li>
  3422. <li>Converting from the mac korean encoding didn't
  3423. work.</li>
  3424. <li>Images imported into a bdf character did not set the
  3425. character used bit.</li>
  3426. <li>Add a CopyAnchors command.</li>
  3427. <li>Patch from Raph Levien. FF mishandled seac if the
  3428. accent were not translated.</li>
  3429. </ul>
  3430. </li>
  3431. <li>26-Oct-2006
  3432. <ul>
  3433. <li>If a large group of glyphs were autohinted at once,
  3434. and one of those glyphs contained a reference to a glyph
  3435. that appeared after it in the font, then that glyph would
  3436. still end up with the dirty hint mark set.</li>
  3437. <li>It was impossible to set preferences on the Accents
  3438. pane. They would either always be 0 (or false), or make
  3439. spurious complaints.</li>
  3440. <li>Add a Ucs4 scripting command (reverses Utf8).</li>
  3441. <li>when creating an array with [...] notation (in
  3442. scripting) I forgot to dereference lvalues.</li>
  3443. <li>Add scripting commands
  3444. <ul>
  3445. <li>Revert</li>
  3446. <li>RevertToBackup</li>
  3447. </ul>
  3448. <p>Make the "+" operator concatenate arrays</p>
  3449. <pre>
  3450. [1,2] + [3,4] == [1,2,3,4]
  3451. [1,2] + 3 == [1,2,3]
  3452. </pre>
  3453. </li>
  3454. <li>Add a scripting command, FontImage, which generates a
  3455. font thumbnail.</li>
  3456. <li>Make it possible to save the Font Display dlg as an
  3457. image.</li>
  3458. <li>Clean up the Display dialog a bit. The concept of
  3459. "unhinted" truetype is obsolete. Remove it.</li>
  3460. <li>At Andrey V. Panov's request I have added a scripting
  3461. command "CopyUnlinked" which behaves like Copy except
  3462. that any references will be unlinked (turned into
  3463. splines) as they are placed in the clipboard.</li>
  3464. <li>I believe OpenType would prefer if formed arabic
  3465. glyphs didn't use their unicode encodings, but used
  3466. simple substitutions instead. Accept both for svg output
  3467. (previously we only accepted unicode encodings).</li>
  3468. <li>Patch from debian (bug392688) from Wojciech Mu*a and
  3469. K*stutis Bili*nas</li>
  3470. </ul>
  3471. </li>
  3472. <li>19-Oct-2006
  3473. <ul>
  3474. <li>Patch from Mike FABIAN, array overflow in creating PS
  3475. Private dialog</li>
  3476. <li>The instructions out of date flag was only getting
  3477. reset if the user made a change in the edit instrs
  3478. dialog. If s/he just pressed [OK] it would remain
  3479. on.</li>
  3480. <li>Make libintl be another library we'll try to dlopen.
  3481. This is complicated because on linux libintl is part of
  3482. libc so there we must link directly. Further complicated
  3483. because fink install script has a bug and doesn't put
  3484. /sw/lib in DYLD_LIBRARY_PATH so we have to look there
  3485. ourselves.</li>
  3486. <li>Locale strings aren't required to contain an encoding
  3487. (which the locale docs incorrectly call a charset).
  3488. Michal Nowakowski points me to nl_langinfo which will
  3489. give me the encoding even if not specified in the
  3490. locale.</li>
  3491. <li>Add pdf files to the standard format list for
  3492. openfontdlg</li>
  3493. </ul>
  3494. </li>
  3495. <li>14-Oct-2006
  3496. <ul>
  3497. <li>New translations: Greek, Simplified Chinese, German,
  3498. Polish.</li>
  3499. <li>Using the help command would generally crash
  3500. fontforge on cygwin.</li>
  3501. <li>Adobe uses the American spelling of diaeresis (that
  3502. is dieresis), but some fonts contain glyph names with the
  3503. European spelling. So add that as an alternate.</li>
  3504. <li>If a bdf font contained an unencoded .notdef glyph,
  3505. then we crashed.</li>
  3506. <li>Adding Greek translations for font styles. (Thanks to
  3507. Apostolos)</li>
  3508. <li>If we aren't dealing with a TeX math font, then the
  3509. "Sub/super"script positioning fields of Glyph
  3510. Info-&gt;TeX aren't meaningful. So grey them out.</li>
  3511. <li>Remove internal/external did the wrong thing in
  3512. expand stroke if we also removed overlap and had
  3513. counter-clockwise splines.</li>
  3514. <li>Alexej Kryukov points out that reverting a glyph with
  3515. anchors lost the anchors.</li>
  3516. <li>Add simplified Chinese style names to our built-in
  3517. lists.</li>
  3518. <li>Problem reading autotraced input.</li>
  3519. <li>The encoding change of last summer broke tfm output
  3520. with glyph lists or extension characters.</li>
  3521. <li>If add extrema added a point too close to a start/end
  3522. point expand stroke could generate NaNs.</li>
  3523. <li>FF could crash when adding extrema to an open
  3524. contour.</li>
  3525. <li>Add Polish styles to the translation list.</li>
  3526. <li>Add a scripting function to set the gasp table.</li>
  3527. <li>Add support for the 'gasp' table.</li>
  3528. <li>Alexej Kryukov wants format 6 cmap tables.</li>
  3529. <li>After editing instructions the debugger would
  3530. incorrectly complain that instructions were out of
  3531. date.</li>
  3532. <li>Michal Nowakowski complains that "Instructions are
  3533. out of date" warning appears too many times when doing a
  3534. global transformation. Make it only pop up as a dlg once
  3535. and thereafter occur as a LogError.</li>
  3536. <li>If a font contained only space glyphs it could still
  3537. be marked onlybitmaps and not allow outline
  3538. generation.</li>
  3539. <li>Show ATT did not translate scripts &amp;
  3540. languages.</li>
  3541. <li>Parsing an empty list of ttf instructions crashed
  3542. Michael Zedler's machine.</li>
  3543. <li>Make type1 generation use (essentially) the same
  3544. subroutine mechanism as type2.</li>
  3545. <li>Local subroutines were being freed twice in cff
  3546. cid-keyed font generation.</li>
  3547. <li>Removing an alternate unicode encoding (Detach
  3548. Glyphs) was broken in some cases.</li>
  3549. <li>FF failed to perform some simplifications on the last
  3550. spline of a closed contour.</li>
  3551. <li>Various fixes for Michal N.</li>
  3552. <li>Add scripting interfaces to many of the ctype
  3553. functions.</li>
  3554. <li>Add a scripting interface to the 'size' feature, now
  3555. that Adobe has finally decided what to do about
  3556. 'size'.</li>
  3557. <li>Had the wrong title for kerning state machine
  3558. dlgs.</li>
  3559. <li>Redo the preference dlg.</li>
  3560. <li>The two preference items, AlwaysGenApple, and
  3561. AlwaysGenOpenType, were a bad choice on my part and have
  3562. lead to considerable confusion. I mentioned some time ago
  3563. that I would remove them if there were no objection.
  3564. <p>There was no objection.</p>
  3565. <p>I have now removed them.</p>
  3566. <p>I also made the SetPrefs scripting function sort of
  3567. work if the user tries to set one of these (it will set
  3568. the appropriate flags in the default option set used by
  3569. generate).</p>
  3570. <p>The defaults of these flags were different on the
  3571. Mac from everywhere else. This meant that a script
  3572. could do different things on the Mac and on linux. That
  3573. seems like a bad idea. I have changed things so that
  3574. the default options setting for generate is always
  3575. OpenType.</p>
  3576. <p><strong>THIS IS AN INCOMPATIBLE CHANGE AND SCRIPTS
  3577. ON THE MAC COULD NOW BEHAVE DIFFERENTLY.</strong></p>
  3578. </li>
  3579. <li>Patch from Michal Nowakowski to have ff number points
  3580. after conversion to quadratic.</li>
  3581. <li>Try to provide disambiguation for all strings "New"
  3582. so that in languages where "New" must agree in gender
  3583. with the thing being created translators will be
  3584. happier.</li>
  3585. <li>Remove the po/Makefile.in and redo the configure
  3586. script to build it (so that I don't have to modify it
  3587. each time I get a new language).</li>
  3588. <li>Extend the knife tool so that if Meta (Alt) is held
  3589. down it will move any spline it intersects (rather than
  3590. cutting the spline).</li>
  3591. <li>FF would crash if $HOME (the directory that is, not
  3592. the environment variable) did not exist.</li>
  3593. <li>I guess it makes sense that if ff read in a
  3594. compressed sfd file then using a simple File-&gt;Save
  3595. command (not Save As) should produce another compressed
  3596. sfd file.</li>
  3597. <li>When scaling a reference in otf output we had
  3598. problems if the reference had more than one contour.</li>
  3599. <li>If we deleted many glyphs from a font we are
  3600. sometimes left with kern pairs pointing to things not
  3601. worth outputting. Make sure we don't generate kerning
  3602. info for them.</li>
  3603. <li>Ligature carets were not being scaled by scale to
  3604. em.</li>
  3605. <li>Patch from mfabian at suse.</li>
  3606. <li>If a user has a font with a glyph that is bigger than
  3607. 16*em-size (in many dimensions) and that user generates a
  3608. tfm file, then warn him that the glyph can't be expressed
  3609. in a tfm file and truncate the size to the biggest legal
  3610. value.</li>
  3611. <li>Attempt to mitigate the effects of X claiming to have
  3612. a font when it doesn't.</li>
  3613. <li>Saving CID keyed fonts would look at garbage memory
  3614. for its encoding data if not saved from the biggest
  3615. subfont.</li>
  3616. <li>Add support for version 4 of the OS/2 table.</li>
  3617. <li>If Interpretation was set in a font then when
  3618. generating a 8/16 type cmap fontforge always went down
  3619. the traditional chinese (big5) branch.</li>
  3620. <li>MS has changed their indic shaping engine. It still
  3621. uses the same features but they are applied differently.
  3622. To disambiguate this change they have created a parallel
  3623. set of script tags for the indic writing system.
  3624. FontForge should recognize these and use them when
  3625. appropriate.</li>
  3626. <li>When Adobe first released fonts with a 'size' feature
  3627. they did not follow the opentype specification. In August
  3628. of 2006 they announced an incompatible change to bring
  3629. fonts produced after that date in line with the
  3630. specification. Unfortunately there are programs which
  3631. depend on the old, broken format.
  3632. <p>Legacy programs will not work when given a font in
  3633. the correct format. New programs should be able to
  3634. handle either correct or broken 'size' features.</p>
  3635. <p>A few of Adobe's programs make use of the 'size'
  3636. feature, and XeTeX does. I know of no others (besides
  3637. font editors). Both intend to upgrade their programs...
  3638. So this may be less of an issue than I initially
  3639. feared.</p>
  3640. <p>FontForge should now be able to read in a size
  3641. feature in either format and gives the user the option
  3642. of producing 'size' features in either format on
  3643. output.</p>
  3644. </li>
  3645. <li>For Japanese fonts we tried to use cp932 (a variant
  3646. of sjis) but then halfway through didn't know what to do
  3647. with it.</li>
  3648. <li>Another fix for saving sub-opentype fonts from a cid
  3649. font.</li>
  3650. <li>From a script, if a user asks to generate a ttf
  3651. outline font with ttf bitmaps from a database with no
  3652. outlines then technically this isn't supposed to work.
  3653. But it used to and it's easy enough to tweak so that it
  3654. works again.</li>
  3655. <li><strong>Update to Unicode 5.0</strong></li>
  3656. <li>Again when adding accents to the left of a glyph we
  3657. should shift the glyph over to give it a reasonable
  3658. lbearing.</li>
  3659. <li>When building an accented glyph, we generally want
  3660. use_my_metrics set on the reference. But if we add an
  3661. accent to right (horn) or left (psili/varia on cap
  3662. greeks) we want to turn it off. We did turn it off on the
  3663. right side, but not on the left.</li>
  3664. <li>Philipp Poll points out that ScaleToEm doesn't scale
  3665. the OS/2 metrics (and some other stuff). Actually it
  3666. does, but font info did the scaling BEFORE setting the
  3667. values. So the metrics get scaled, and then reset to the
  3668. values in fontinfo (which usually means they don't get
  3669. changed).</li>
  3670. <li>Fix some memory leaks.</li>
  3671. <li>Some fixes for pcf loading.</li>
  3672. <li>Various fixes to CID keyed fonts.</li>
  3673. <li>Even the pretty ttf approximation routines need to
  3674. worry about diametrically opposed control points.</li>
  3675. <li>When generating multiple type1 fonts, output the
  3676. bounding box of each as that of the full font. This will
  3677. make it vaguely likely that applications will get the
  3678. same line spacing.</li>
  3679. <li>Oops. The vertical metrics bit wasn't preserved when
  3680. flattening a cid font.</li>
  3681. <li>Ack! Window titles and such were being interpreted in
  3682. Latin1 and not in UTF-8.</li>
  3683. <li>Interpretation of PostScript arc operator failed if
  3684. the two angles were 360 degrees apart. Normalization made
  3685. them both the same.</li>
  3686. <li>Try to clean up bitmap only sfnt generation.</li>
  3687. <li>pcf wasn't in the Open Font dialog format list (nor
  3688. was pmf, nor pdf)<br />
  3689. Add a filter for TeX bitmap fonts.</li>
  3690. <li>Provide a mechanism (if a preference item is set) for
  3691. picking a cmap when loading a font.</li>
  3692. </ul>
  3693. </li>
  3694. <li>22-Aug-2006
  3695. <ul>
  3696. <li>Add a pane to the Preference dlg allowing user to
  3697. control some of fontforge's hint creation.</li>
  3698. <li>Someone complained that Find Problems-&gt;Path
  3699. Direction got the wrong answer. It got the wrong answer
  3700. because they had a self-intersecting path (which screws
  3701. up all concepts of in/out-side. So try to make it clear
  3702. that they should do a find intersecting paths first.</li>
  3703. <li>Update my opentype scripts list (in particular
  3704. include music).</li>
  3705. <li>Due to a typo, ff thought pretty much everything
  3706. outside unicode BMP was in the hebrew script.</li>
  3707. <li>Add a new command to the point menu which allows you
  3708. to specify a spline and one coordinate (either X or Y) on
  3709. that spline. FF will calculate the other coordinate and
  3710. add a point there.</li>
  3711. <li>CODE2000 contains an anchor class with only base
  3712. glyphs (no mark glyphs) as part of a set of anchor
  3713. classes. FF crashed.</li>
  3714. <li>Patch by Nix. svg.c did not compile when designed to
  3715. be linked directly with libxml (instead of dlopening
  3716. it).</li>
  3717. <li>Redo the font open dlg so that there's a list of
  3718. standard filters and a mechanism for changing that list.
  3719. Remember the last filter used.</li>
  3720. <li>If a popup menu is huge it used to appear under the
  3721. cursor. This meant that even if the user didn't mean to
  3722. s/he would have selected something and press/release
  3723. would not be a no-op. This was a problem with the Font
  3724. Info -&gt;TTF Names</li>
  3725. <li>Patch from SUSE. Use of uninitialized local variable.
  3726. But the result is never used, so just remove the
  3727. offending lines.</li>
  3728. <li>Emulate gtk's boxes and use that to do automatic
  3729. dialog layout. Get the font info dlg working (and then
  3730. several others too). This means that the layout is no
  3731. longer optimized for English, but will look better in
  3732. other languages (I hope).</li>
  3733. <li>Add an information to Font Info to display what
  3734. unicode character ranges are supplied by the font.</li>
  3735. <li>Philipp Poll points out that when generating
  3736. versioned fonts (ie. Ambrosia-1.0 rather than just
  3737. Ambrosia) you don't want the filename to default to the
  3738. fontname (the fontname will be Ambrosia), instead you
  3739. want some way of specifying a default filename. So add
  3740. that to the Names pane of the Font Info dlg.</li>
  3741. <li>Try to keep track of font creation and modification
  3742. times. NOTE: This is different from file times (which is
  3743. what appears to be stored in the 'head' table of an sfnt
  3744. file). Add a new table 'FFTM' to our sfnt output with
  3745. these timestamps (and the timestamp of fontforge itself,
  3746. just in case we ever care).</li>
  3747. <li>Mark classes could not be set from the
  3748. selection.</li>
  3749. <li>Ben Laenen points out that if an order2 glyph has a
  3750. dependent which refers to it using point matching and we
  3751. keep changing the point number on the glyph then we'll
  3752. keep getting warning messages. He suggests one
  3753. message.</li>
  3754. <li>Empty glyphs weren't marked with red Xs any
  3755. more.</li>
  3756. <li>In font compare, when comparing two
  3757. contextual/chaining lookups, I forgot that class[0] was
  3758. always NULL.</li>
  3759. <li>Open contours caused the ttf point renumberer to
  3760. crash.</li>
  3761. <li>A font can have many kerning pairs. More than will
  3762. fit in one GPOS subtable (which essentially has a 64k
  3763. data limit or a bit more than 10,000 kern pairs). So be
  3764. prepared to generate many sub-tables each dealing with a
  3765. subset of the (first) glyphs.</li>
  3766. <li>If an apple mutually exclusive feature had a default
  3767. setting which wasn't 0 then my previous patch didn't
  3768. work.</li>
  3769. <li>If guessing bluevalues found no OtherBlues,
  3770. fontinfo-&gt;PS Private would create an incorrect
  3771. OtherBlues value [0]</li>
  3772. <li>Support clipboards containing image/svg</li>
  3773. <li>Ralf Stubner points out that the maximum zone size of
  3774. bluezones is determined by 1/BlueScale. So adjust
  3775. BlueScale if the max zone is too big.</li>
  3776. <li>Merge fonts didn't merge anchors and got into a
  3777. terrible mess. Let's merge kern classes and state
  3778. machines too. Merging kern classes may be a bad idea. We
  3779. don't really merge them we just copy them so that if the
  3780. same glyph is mentioned in two classes unexpected things
  3781. might happen.</li>
  3782. <li>ff could crash on an sfd file containing erroneous
  3783. anchors (such as might be generated by the merge fonts
  3784. command).</li>
  3785. <li>Once upon a time, Apple was so concerned about
  3786. accuracy of floating point operations that they required
  3787. all operations be performed in IEEE extended (80bit).
  3788. This had the interesting side effect that a program which
  3789. conformed to Apple's standards could not also conform to
  3790. ANSI C (which required operations use double temporaries
  3791. for double values). I find it somewhat ironic, therefore,
  3792. that gcc on the mac doesn't even promote floats to
  3793. doubles. FF needs the extra accuracy provided by a double
  3794. (an extended type doesn't seem to provide additional
  3795. assistance unfortunately). So on the mac we got extrema
  3796. that weren't, which meant that remove overlap
  3797. didn't.</li>
  3798. <li>If we had a mac feature which had multiple subtables
  3799. (ie. a state machine for a contextual substitution, and a
  3800. non-contextual substitution too) then we produced a bad
  3801. chain in the morx table.</li>
  3802. <li>Merge &amp; Simplify would sometimes generate
  3803. solutions using control points which were diametrically
  3804. opposed to what they should be.</li>
  3805. <li>Yet another attempt to do a better job of
  3806. autohinting.</li>
  3807. <li>Add a "Revert to Backup" command.</li>
  3808. <li>Put code in to correct for single bit (sometimes
  3809. double bit) errors when search from extrema. This is at a
  3810. lower level than the previous patch.</li>
  3811. <li>Output of extension lookups wasn't working</li>
  3812. <li>Fixed a problem in the ttf names pane of Font
  3813. Info.</li>
  3814. <li>A slight improvement to magnifying by dragging a
  3815. rectangle.</li>
  3816. <li>The first time you click on a transition in a Font
  3817. Info-&gt;Mac SM-&gt;Indic state machine, ff would
  3818. crash.</li>
  3819. <li>Tihkomirov points out that it isn't clear how to
  3820. delete a ttf name from the name pane of fontinfo. So add
  3821. some popup help. The language &amp; string ID menus in
  3822. that pane were sorted on the wrong key</li>
  3823. <li>Was not preserving (unparsed) tables properly.
  3824. Several bugs.</li>
  3825. <li>When loading an apple bitmap font (with no hmtx
  3826. tables) we need to dummy up widths for the outline
  3827. glyphs.</li>
  3828. </ul>
  3829. </li>
  3830. <li>15-Jul-2006
  3831. <ul>
  3832. <li>Apple's bitmap only fonts should not have an 'hhea'
  3833. nor an 'hmtx' table<br />
  3834. Dummy up outline glyph widths when we don't have a 'hmtx'
  3835. table by looking at bitmap widths for that glyph.<br />
  3836. ftxvalidate complains if the vertical line metrics are 0.
  3837. Even in a strike with no vertical metrics information. So
  3838. dummy something up.</li>
  3839. <li>Was getting the flags wrong for turning off features
  3840. in an apple morx chain.</li>
  3841. <li>When outputing mark-to-base sub-tables with multiple
  3842. marks I neglected to output an NUL offsets for the
  3843. anchors that weren't there. So if a glyph had only one
  3844. anchor (instead of two, or however many) then the offsets
  3845. would be all wrong.</li>
  3846. <li>The SetPref() scripting function was misdocumented to
  3847. be called SetPrefs() so accept both names.</li>
  3848. <li>When building an accented letter out of glyphs with
  3849. an anchor class ff would increase the advance width of
  3850. the accented glyph by the size (xmax-xmin) of the
  3851. accent.</li>
  3852. <li>Expand the functionality of the ruler tool so that it
  3853. also shows curvature.</li>
  3854. <li>When importing a bitmap font from a mac binary or an
  3855. sfnt and the encodings of the destination and the bitmap
  3856. did not match, then things got rather screwed up and
  3857. might crash.</li>
  3858. <li>patch from KANOU. the ref check routine in glyphcomp
  3859. compared one reference to itself.</li>
  3860. </ul>
  3861. </li>
  3862. <li>03-Jul-2006
  3863. <ul>
  3864. <li>Type2 charstrings have no closepath operator. I used
  3865. to think that meant I could not omit the final vector. In
  3866. fact it means I can omit the final vector AND the
  3867. closepath operator.</li>
  3868. <li>If we had a font with no complete code pages we used
  3869. to generate a version 0 OS/2 table without codepage info.
  3870. But now windows refuses to install such a font. Instead
  3871. generate a bogus codepage field which claims to have
  3872. latin1 (even though it doesn't).
  3873. <p>Windows won't use a font where the codepages field
  3874. is 0.</p>
  3875. </li>
  3876. <li>When generating a FOND for a bitmap only sfnt, we
  3877. created dummy 'NFNT' resources with the wrong resource
  3878. ids. Which meant we got garbage when the font was
  3879. used.</li>
  3880. <li>Make the TabSets in the font &amp; glyph info dialogs
  3881. run vertically rather than hor izontally. (Add an option
  3882. to get the old display back).</li>
  3883. <li>Approximate Spline from Point Slopes sometimes set
  3884. the control point while leavi ng the nonextcp flag
  3885. on.</li>
  3886. <li>Add Extrema only looked at how close a point was to
  3887. the extrema in one dimension. While that dimension is
  3888. more important, make a less stringent check on the
  3889. other.</li>
  3890. <li>Expand Stroke removes "U-turns" from splines because
  3891. they confuse it. But the routine that did that got a bit
  3892. rambunctious and did the wrong thing on a circular
  3893. arc.</li>
  3894. <li>If a font did not contain an OS/2 table then we
  3895. didn't retain the 'hhea' ascent/ descent.</li>
  3896. <li>Various fixes from Matthias Kilian of OpenBSD.</li>
  3897. <li>When asking for default 'subs' features, every glyph
  3898. gets assigned U+2080.</li>
  3899. <li>Display the curvature information at each point. In
  3900. Point Info dlg, and in a pop up window when editing
  3901. cps.</li>
  3902. <li>Add two new menu commands/scripting commands:
  3903. <ul>
  3904. <li>Canonical Start Points (CanonicalStart())</li>
  3905. <li>Canonical Contours (CanonicalContours())</li>
  3906. </ul>
  3907. <p>The first sets the start point of each contour to
  3908. the leftmost point, while the second orders the
  3909. contours by their leftmost points. This will slightly
  3910. reduce the size of output charstrings. It will also
  3911. make more things available to be put in
  3912. subroutines.</p>
  3913. </li>
  3914. <li>Print Multi-Size &amp; Full Page printed the wrong
  3915. glyphs from the font view. Broken since the encoding
  3916. change.</li>
  3917. <li>When stroking a contour that makes a 180degree turn,
  3918. ff did not give it a semi-circle if linejoin was set to
  3919. round.</li>
  3920. <li>SPLCopyTranslatedHintMasks didn't work if there were
  3921. more than one contour being copied.</li>
  3922. <li>Nathan Summers points out that if the XUID is garbage
  3923. the ff can go into an infinite loop when generating an
  3924. otf/cff font.</li>
  3925. <li>Somehow the XUID and UniqueID fields crept off the
  3926. bottom of the fontinfo Names p ane and weren't visible or
  3927. modifyable. Give them their own pane now.</li>
  3928. <li>Apply some patches (with some changes) from Nathan
  3929. Summers to the truetype debugger.</li>
  3930. <li>The property count in BDF fonts is wrong.</li>
  3931. <li>Ralf Stubner points out that the notdef glyph in an
  3932. otf font should look like that in a ttf font, and not
  3933. like that in a type1 font. (that is there should be
  3934. something in the glyph).</li>
  3935. <li>Add support for group "encodings" which have empty
  3936. spaces for unused glyphs.</li>
  3937. <li>make another attempt to find a good default sli for
  3938. glyphs with no default script.</li>
  3939. <li>Typo in scripting function DefaultATT.</li>
  3940. <li>The View-&gt;Display Substitutions has been broken
  3941. since the encoding change last summer.</li>
  3942. <li>Mark glyphs with out of date instructions differently
  3943. from those with no instructions.</li>
  3944. <li>The last change to the cvt table generally did not
  3945. get made.</li>
  3946. <li>Make glyph compare check for point matching in anchor
  3947. points and in references.</li>
  3948. <li>Add a warning message about out of date instructions
  3949. when generating a font.</li>
  3950. <li>When generating a font with anchor points matched to
  3951. ttf points, ff failed to allocate enough space for them
  3952. and offsets got all confused.</li>
  3953. <li>Oops. Some variables which should have been static
  3954. were dynamic. Which meant we kept dlopening
  3955. libfreetype.</li>
  3956. <li>If we had an anchor point which positioned itself
  3957. with point matching, and we ge nerated an otf font then
  3958. we'd output a lookup which tried to do point matching i n
  3959. postscript. Only do point matching if we are sure we're
  3960. in a tt font.</li>
  3961. <li>Add a preference item to control clearing of tt
  3962. instructions.</li>
  3963. <li>Printing a multi-size page of a truetype font
  3964. crashed.</li>
  3965. <li>Anchor Point dlg didn't work well with matching tt
  3966. points.</li>
  3967. <li>Add a field to allow users to search for a glyph name
  3968. within a kerning class.</li>
  3969. <li>Interesting. In kerning by classes, if the coverage
  3970. table does not match the glyphs specified in all the
  3971. classes (for the first (left) glyph), then any glyphs in
  3972. the coverage table but not in any class should be treated
  3973. as being in class 0.</li>
  3974. <li>Add something to the font view's copy from menu to
  3975. control whether truetype instructions are copied or
  3976. not.</li>
  3977. <li>Add some more problems to find problems
  3978. <ul>
  3979. <li>Check for glyphs with both contours and
  3980. references.</li>
  3981. <li>Find out of date point matched references.</li>
  3982. <li>Find references with transformation matrices
  3983. which can't be expressed (as refs) in truetype</li>
  3984. <li>Find references with transformation matrices
  3985. which aren't translations (and so can't be expressed
  3986. (as refs) in type1/2 fonts.</li>
  3987. </ul>
  3988. </li>
  3989. <li>Allow the user to turn off composite info in afm
  3990. files.</li>
  3991. <li>otf kerning classes were dumped in the wrong
  3992. order.</li>
  3993. <li>In GaramondPremrPro.otf (version 001.000) Adobe has
  3994. coverage tables (for some context chaining subs) which
  3995. have the glyphs mentioned multiple times. I suppose this
  3996. is legal, but it is annoying. I want my strings to have
  3997. each glyph appear at most once. So add a little thingy to
  3998. remove duplicate glyphs when we generate a list of glyph
  3999. names.</li>
  4000. <li>Adobe has deprecated the use of PUA to represent
  4001. small caps, old style numerals, etc. Add a preference
  4002. item so that ff will no longer recognize "a.sc" as having
  4003. a PUA encoding.</li>
  4004. <li>The tool tip for the preference item
  4005. "NameListForNewFonts" was wrong.</li>
  4006. <li>Horizontal scrolling in the show att dlg was too
  4007. slow. It was by pixel. Make it be by something which
  4008. approximates the width of a character.</li>
  4009. <li>Add a new scripting command to give a font's bounding
  4010. box.</li>
  4011. <li>Sigh. Within a GPOS lookup, sub-tables are not
  4012. additive. Only one will be applied at a time. So order
  4013. the 'kern' lookup so that pair-wise kerning comes out
  4014. first (to override class kerning).</li>
  4015. <li>Was sometimes outputting mkmk base-mark attachement
  4016. points as the mark attachment point.</li>
  4017. <li>Clytie Siddall has many suggestions about how to make
  4018. the translation process easier for translators. He also
  4019. tells me how to insert contextual comments into the
  4020. program source, and provides many fixes for typoes.</li>
  4021. <li>The OS/2 version 1,2 has a different defn of
  4022. avgCharWidth than OS/2 version 3(,4) does. Display of CJK
  4023. fonts is supposed to break under windows if using the v3
  4024. defn.
  4025. <p>Use the appropriate defn for the version we happen
  4026. to be outputting.</p>
  4027. </li>
  4028. <li>Autohinting crashed on glyphs in an order2 font if
  4029. the glyph contained both an outline and a reference.</li>
  4030. <li>Pressing the help key in the main windows went to the
  4031. overview page, not to the contextual help for the
  4032. window.</li>
  4033. <li>Add a warning when 'CFF ' widths and 'hmtx' widths
  4034. differ (when loading a font).</li>
  4035. <li>Set the default and normative widths too late after
  4036. the cff subroutine change.</li>
  4037. <li>Make double clicking in the list of kern pair/anchor
  4038. combinations bring up either Kern Pair Closeup dlg or
  4039. Anchors Away.</li>
  4040. <li>The Anchor control dlg didn't work after the encoding
  4041. change.</li>
  4042. <li>Add a popup message to explain what "Cor:"
  4043. means.</li>
  4044. <li>Doing a Close() from a script didn't work if the
  4045. windowing system were open.</li>
  4046. <li>Yet another bug in type1 hinting output.</li>
  4047. <li>Some versions of realloc don't like allocating 0
  4048. bytes.</li>
  4049. <li>Users expect ff to recognize a glyph name
  4050. "Diaeresis", even though Adobe (following standard
  4051. American, but not European spelling) spells it
  4052. "Dieresis".</li>
  4053. <li>GhostScript has canniptions when it gets a version 3
  4054. OS/2 table in a ttf file.</li>
  4055. <li>Can't add a flex hint when there's a hintmask at the
  4056. mid point.</li>
  4057. <li>The hintmask part of PointInfo would not let you
  4058. clear a hintmask.</li>
  4059. <li>Add a new command to the fontview:
  4060. Edit-&gt;Select-&gt;Select by Name<br />
  4061. and a new scripting command: SelectAllInstancesOf
  4062. <p>Both will select all encoding slots containing the
  4063. named glyph (or unicode value)</p>
  4064. </li>
  4065. <li>Add scripting command: RemoveDetachedGlyphs</li>
  4066. <li>Was setting typo linegap to hhead linegap.</li>
  4067. <li>Using the X clipboard to paste into the character
  4068. view has been broken at least since I added multi-layered
  4069. editing.</li>
  4070. <li>Add a pref to control whether we prefer to use
  4071. spacing or combining accents when building accented
  4072. glyphs.</li>
  4073. <li>Spacing in the group dlg was sometimes off.</li>
  4074. <li>More hinting fixes. If the edges of a stem aren't
  4075. quite parallel we had problems</li>
  4076. <li>Add some new built in variables: $order, $em,
  4077. $ascent, $descent</li>
  4078. <li>The 'TeX ' table was output incorrectly if glyph's
  4079. order wasn't the same in the sf as in the ttf.</li>
  4080. <li>Allow the [*] Back visibility checkbox to control
  4081. whether the grid fit lines are visible or not.</li>
  4082. <li>If scripting is in verbose mode, flush the output
  4083. buffer before calling a built in procedure (so any errors
  4084. it generates will at least show the right line).</li>
  4085. <li>Ambrose LI points out that the master font in a cid
  4086. keyed font should match the ascent/descent of at least
  4087. one of its subfonts (so that the typoAscent/Descent f
  4088. ields will default correctly).</li>
  4089. <li>Spend some quality time with valgrind looking (oh,
  4090. and fixing) memory leaks.</li>
  4091. <li>Make ControlAfmLigatureOutput (scripting command)
  4092. apply to ofm/tfm files too.</li>
  4093. <li>Oops. When parsing mac state machines I was using
  4094. sizeof(long) when I should have said sizeof(int32). It
  4095. gave rather bad results on 64bit machines.</li>
  4096. <li>Add a scripting function to load a user defined
  4097. cidmap file.</li>
  4098. <li>Hmm. sizeof(point)==8 on AMD64, but structures are
  4099. aligned to 4. This means our chunk alloc routines
  4100. complain. So if we're given something that isn't in units
  4101. of sizeof(pointer) then just round it up.</li>
  4102. <li>lookup ordering within GSUB has been totally broken
  4103. at least since I added the code to coalesce lookups for
  4104. kerning.</li>
  4105. <li>Kanou suggests changing function name that includes
  4106. Char to be Glyph. Well a few do really mean Char, but the
  4107. rest should be Glyph. Leave the old names there bu t
  4108. document them as deprecated.</li>
  4109. <li>Make CID keyed fonts use the new subroutine mechanism
  4110. too. We can use global subrs now too!</li>
  4111. <li>Oops. Familyname can be NULL, and we were
  4112. indescriminately checking to make sure its length was
  4113. less than 31.</li>
  4114. <li>Make a better use of subroutines when generating otf
  4115. fonts. Doesn't work for CID fonts yet.</li>
  4116. <li>We crashed if we changed from one cid sub-font to
  4117. another when compacted.</li>
  4118. <li>Oops. I made ff work with ft22 if the debugger was
  4119. being built... but it failed to compile if people didn't
  4120. build the debugger.</li>
  4121. <li>Oops a scripting function was marked as not needing a
  4122. font when it did (HasPreservedTable &amp; friends).</li>
  4123. <li>More for font compare. If there is a difference in a
  4124. glyph in the two fonts add the option for including the
  4125. outlines of the second glyph into the first. If the first
  4126. font is missing a glyph, add an option to insert it with
  4127. the outlines in the background.</li>
  4128. <li>Good heavens, someone wants to play with acorn2sfd.
  4129. Make it compile again.</li>
  4130. </ul>
  4131. </li>
  4132. <li>08-Apr-2006
  4133. <ul>
  4134. <li>Patch by Mike Frysinger from gentoo. Use the HOME
  4135. environment variable in preference to /etc/passwd.</li>
  4136. <li>Werner wants to see raw data in the points window of
  4137. the debugger. My guess is that most people won't be
  4138. interested in this mode (and it makes the window a bit
  4139. uglier) so I've made it configurable.
  4140. --with-debug-raw-points</li>
  4141. <li>Write sfddiff as a fontforge script and put it back
  4142. into the install process.</li>
  4143. <li>Add code to font compare so it can do the old sfddiff
  4144. --merge option (if two corresponding glyphs differ, add
  4145. the outlines of the second to the background of the
  4146. first).</li>
  4147. <li>Someone wanted acorn2sfd! Make it compile again.</li>
  4148. <li>Make configure look for libgif</li>
  4149. </ul>
  4150. </li>
  4151. <li>06-Apr-2006
  4152. <ul>
  4153. <li>Patch by Ian Jackson of Ubuntu. When in an empty
  4154. glyph (one not WorthOutputting) then doing a
  4155. View-&gt;Show Grid Fit would cause a crash.</li>
  4156. <li>The PLRM says that formfeed is whitespace. The
  4157. T1_Spec says that it is not. After an eexec the T1_Spec
  4158. is right (and ff was following the PLRM
  4159. definition).<br />
  4160. Also add a check to insure that the first character we
  4161. generate in pfb encryption isn't a white space
  4162. character.</li>
  4163. <li>On some windows systems (mine at least), windows will
  4164. refuse to install a postscript font if the fontname or
  4165. familyname of that font is longer than 31 characters.
  4166. These are the names in the Font Dictionary of the
  4167. postscript font itself, not the names in the 'name' table
  4168. (for otf fonts).</li>
  4169. <li>Make ff compile with freetype 2.2.0</li>
  4170. <li>The popup menu of text fields was garbage.</li>
  4171. <li>Make a change to pfm output which might allow non
  4172. windows ANSI encoded fonts to work.</li>
  4173. <li>Allow the freehand tool to work in quadratic
  4174. fonts.</li>
  4175. <li>Didn't always refigure splines properly when using
  4176. Get Info in quadratic mode. Patch by Michal
  4177. Nowakowski.</li>
  4178. <li>Trying to invoke the KDE browser (for help) didn't
  4179. work. Patch by Dimitar Zhekov</li>
  4180. <li>Still losing instructions if contours begin with
  4181. off-curve points.</li>
  4182. <li>if a font had a defined notdef glyph, then FF would
  4183. usually enter it incorrectly in the 'hmtx' table.</li>
  4184. <li>In the Select menu, Width had an extra
  4185. underscore.</li>
  4186. <li>Wasn't looking in the right place to get the right
  4187. weight name in an otf font.</li>
  4188. <li>People have been complaining about the UI for drawing
  4189. quadratic (truetype) curves. It was consistent with the
  4190. UI for drawing cubic (postscript) curves, but it seems
  4191. hard to draw quadratics that way. Rather than
  4192. concentrating on the on-curve points (as in cubics), now
  4193. concentrate on the off-curve points. So the pen-tool
  4194. behaves quite differently now in quadratic mode. As does
  4195. Element-&gt;Get info.</li>
  4196. <li>A patch added back in 2004 to make vertical
  4197. substitutions work for Japanese (to work around a bug in
  4198. Windows to be precise) had a bug itself if more than one
  4199. language was involved.</li>
  4200. <li>When outputting an inline copy of a reference in otf
  4201. fonts with translated hintmasks we did the wrong
  4202. translation for vertical stems and got garbage
  4203. results.</li>
  4204. <li>New command to allow user to enter X,Y coordinates of
  4205. a point and have that point be selected. I want this for
  4206. debugging. It might be useful generally.</li>
  4207. <li>Fixed problems with type2 subroutines containing
  4208. glyphs with conflicts.</li>
  4209. <li>ReplaceWithReference had too large a fudge factor and
  4210. found macron when it should have found macron.sc in
  4211. minionpro-regular.</li>
  4212. <li>If an alternate/multiple subs had more than 30
  4213. components then we lost all those after 30 when
  4214. generating opentype GSUB table.</li>
  4215. <li>Hmm. Sometimes least squares does give the answer we
  4216. want for merge. So give it a try.</li>
  4217. <li>Patch by kanou to fix some translation problem.</li>
  4218. <li>In the shape tools (round rect, ellipse): Instead of
  4219. generating a quadratic shape at the start, generate a
  4220. cubic shape and convert to quadratic. The convert routine
  4221. now knows about how to find integer control points and
  4222. such.</li>
  4223. <li>Patch from Kanou to get more grid size values for
  4224. looking at bitmaps.</li>
  4225. <li>If a glyph starts with a control point then ff would
  4226. sometimes throw out the ttf instructions, thinking it
  4227. wasn't numbered properly.</li>
  4228. <li>A merge in a quadratic font produced a straight line.
  4229. Even when it shouldn't have.</li>
  4230. <li>Change namelists to support non-ASCII glyph
  4231. names.</li>
  4232. <li>Oops. Some hinting scripting commands had a "b"
  4233. prepended to their name by mistake. Sigh. From now on
  4234. support both names.</li>
  4235. <li>When pasting a glyph with hints into an empty glyph,
  4236. we shouldn't set the "in need of autohinting" flag.
  4237. (Actually, we might should if the original copy were done
  4238. in a glyph with out of date hints.... but that gets more
  4239. complicated).</li>
  4240. <li>Patch to make loading bdf fonts more efficient.</li>
  4241. <li>Add Kanou's "fontview" font to the list of fonts
  4242. searched by default for the fontview window.</li>
  4243. <li>FF did not mark ghost hints as different from normal
  4244. hints.</li>
  4245. <li>Interpolating fonts broke when I did the encoding
  4246. change last summer.</li>
  4247. <li>Patch from Kanou to prevent the hash function from
  4248. returning negative numbers. (and crashing)</li>
  4249. <li>Add a menu and a scripting command to compare two
  4250. fonts.</li>
  4251. <li>Oops. There's a stray underscore in a field in font
  4252. info.</li>
  4253. <li>Refresh font view(s) after changing glyph
  4254. name/unicode in glyph info in case those are being
  4255. displayed.</li>
  4256. <li>If a name entered in the goto dlg was a single
  4257. unicode char, then goto would treat it as such. Normally
  4258. this is fine, but a user might use the underscore
  4259. character (for example) as a glyph name and not assign it
  4260. to U+005F. So check for the name too.</li>
  4261. <li>Rewrite the cubic-&gt;quadratic conversion code. It
  4262. now looks much prettier and tries to position
  4263. intermediate points on integer (or half integer)
  4264. locations so there won't be unexpected rounding later.
  4265. It's slightly less accurate though.</li>
  4266. <li>Many changes to the postscript hinting code.</li>
  4267. <li>If a glyph contained references but no alphabetic
  4268. characters then Glyph Info would crash.</li>
  4269. <li>Scripting command AskUser doesn't work unless
  4270. FF_SCRIPT_IN_LATIN1 is set. Patch by Kanou.</li>
  4271. <li>In some error messages I ended a sentence with a
  4272. comma. Make it a full stop.</li>
  4273. <li>Patches from Kanou to make Japanese translation
  4274. better.</li>
  4275. <li>Kanou points out that the code which handles
  4276. modifications to the unicode char textfield (in glyph
  4277. info) complains about the wrong things and he provides a
  4278. patch.</li>
  4279. <li>Hand tool failed to scroll background images
  4280. (probably failed on hints too).</li>
  4281. <li>When doing a copy splines with hintmask operation we
  4282. neglected to refigure the spline after transforming the
  4283. end points. This was ok since we never used that info --
  4284. except if the splines were quadratic and we needed to
  4285. convert to cubic. So when generating a ps font from a
  4286. quadratic database, and the font contained references
  4287. with scaling/rotation/etc. then we'd get erroneous
  4288. results.</li>
  4289. <li>In Find Problems, the Flipped Reference check could
  4290. fail if the reference contained a contours which
  4291. intersected (themselves or each other).</li>
  4292. <li>Make ff aware of ExtraLight as a valid weight when
  4293. setting a default value for the PS weight string.</li>
  4294. <li>When the user clicked on a textfield with attached
  4295. pulldown list, ff would get an event saying the first
  4296. entry on the list had been chosen. This meant that the
  4297. Tag dialog (used for new ligatures/substitutions/etc.
  4298. would show the first tag in the list instead of
  4299. blank.</li>
  4300. <li>Include some glyph name synonems from Richard Kinch's
  4301. TrueTeX list.</li>
  4302. <li>Determination of whether a ghost hint is top (-20) or
  4303. bottom (-21) should depend on the current contour, not on
  4304. the glyph as a whole.</li>
  4305. <li>If a glyph consists solely of references then add
  4306. _&lt;ref-name-1&gt;_&lt;ref-name-2&gt;...&lt;ref-name-n&gt;
  4307. to the list of possible names. Sometimes also add
  4308. uniXXXXXXXX.</li>
  4309. <li>Kanou wants to translate some more strings.</li>
  4310. <li>Barry.SCHWARTZ wants to be able to reencode a font to
  4311. compact from a script.</li>
  4312. <li>Barry.SCHWARTZ points out that my "cfg" files contain
  4313. no newlines. Shows how much use they've received:-)</li>
  4314. <li>Barry.SCHWARTZ points out that when generating an afm
  4315. file for an otf font only the first 256 characters were
  4316. given encodings.</li>
  4317. <li>Simplify much improved.</li>
  4318. <li>Make simplify for quadratic splines aware of the
  4319. peculiarities of truetype. So one simplification is to
  4320. make a point interpolateable. And removing a point is not
  4321. always good if it means points that were interpolateable
  4322. become non-interpolateable.</li>
  4323. <li>After examining (and stealing with permission) Huw
  4324. Davies's code in wine/tools/fnt2fon.c I believe I can now
  4325. produce .fon files.</li>
  4326. <li>Add support for reading bitmap references (from an
  4327. sfnt bitmap)</li>
  4328. <li>Patch by Kanou. cvknife didn't compile in one
  4329. mode.</li>
  4330. <li>Typo in an error message</li>
  4331. <li>Add a command to show points of inflection (also
  4332. change View-&gt;Mark Extrema to show where extrema occur
  4333. on a spline if not at the endpoints)</li>
  4334. <li>Patch by Michal Nowakowski. Uninitialized variable in
  4335. simplify dlg.</li>
  4336. <li>glyph names for unencoded glyphs were always
  4337. "uniFFFFFFFF" should be "NameMe-&lt;n&gt; broken by last
  4338. summer's encoding changes.</li>
  4339. <li>Werner wants CC (composite character) entries in afm
  4340. for GPOS mark-to-base features.</li>
  4341. <li>The switch to utf8 last summer broke font
  4342. info-&gt;Size</li>
  4343. <li>Allow users to ask for both 'GPOS' and old-style
  4344. 'kern' tables. FontLab does this. The OpenType list is
  4345. generally disapproving of the idea.</li>
  4346. <li>If we tried to put more than about 10000 kerning
  4347. pairs into one old-style kerning sub-table then we'd
  4348. overflow various shorts. So split it up after about 10000
  4349. kp into several different sub-tables.</li>
  4350. <li>Round to Int screwed up interpolated points.</li>
  4351. <li>When generating a tfm file don't generate a width
  4352. bigger than 16*em-size (even if the font says to) because
  4353. TeX will throw it out.</li>
  4354. <li>Alexey Kryukov's patch to fix an error message.</li>
  4355. <li>Printing a CID keyed truetype font to a pdf file
  4356. produced a very odd ordering of glyphs (compacting some
  4357. and omitting others and getting errors when it ran out of
  4358. glyphs but asked for more).</li>
  4359. <li>Alexey Kryukov suggests repunctuating an error
  4360. message.</li>
  4361. <li>Johan Winge suggests an improvement to converting
  4362. cubic splines to quadratic: If we end up using a line
  4363. when looking at the spline as a whole, try breaking it at
  4364. the point(s) of inflection first. It seems like a good
  4365. idea.</li>
  4366. <li>Johan Winge also points out that I identify points as
  4367. tangents when they should not be. This is because I use
  4368. one measure of sloppiness no matter how close the cps are
  4369. to the base point when determining collinear. It's
  4370. probably best to have a variable measure depending on how
  4371. far the cp is from the base point.</li>
  4372. <li>Alexey Kryukov thinks Add Unencoded Slots should work
  4373. in the compacted view by making the thing have a custom
  4374. encoding.</li>
  4375. <li>Scripting reencode didn't get rid of the "compacted"
  4376. mark.</li>
  4377. <li>Ralf Stubner points out that I produce type1
  4378. charstrings which end in "seac endchar" when a simple
  4379. "seac" is sufficient. He's right.</li>
  4380. <li>When generating opentype tables in from a single
  4381. sub-font of a cid-keyed font (ie. user asked for a ttf
  4382. font generated from one sub-font) ff would crash.</li>
  4383. <li>We didn't hint bold fonts well (anything where stems
  4384. were bigger than em-size/10)</li>
  4385. <li>When generating a type1 font with a glyph containing
  4386. a reference that had to be unlinked, then the vertical
  4387. stems in that reference would not be hinted.</li>
  4388. <li>When guessing points at which to attach hints in
  4389. type1/2 read in we failed if the points were too widely
  4390. spaced. Be a bit more lenient.</li>
  4391. <li>SetCharName didn't check its flag value
  4392. properly.</li>
  4393. <li>Uncompacting a font caused memory problems.</li>
  4394. <li>Fix simple crash in metafont.</li>
  4395. <li>When importing unencoded glyphs into an already
  4396. existing font, we would sometimes fail to find the
  4397. matching glyph (and would create a new one).</li>
  4398. <li>If a font contain an encoded glyph called ".notdef"
  4399. and that glyph was not the first glyph, then type1 fonts
  4400. had a .notdef glyph at a random place in the font. Now
  4401. freetype seems to renumber glyphs so .notdef is always
  4402. glyph 0 which fontforge did not expect and produced some
  4403. strange results when rasterizing (tested on 2.1.10). Fix
  4404. is simple: always make notdef be first in the chars
  4405. dictionary and then all is happy.</li>
  4406. <li>Add new scripting command to compare two glyphs. I
  4407. want this for testsuites, other people might find a use
  4408. for it.</li>
  4409. <li>gniibe reports that the scripting function Export()
  4410. produces bitmap images with the wrong format and provides
  4411. a patch.</li>
  4412. </ul>
  4413. </li>
  4414. <li>9-Feb-2006
  4415. <ul>
  4416. <li>Instead of refusing to do expand stroke/remove
  4417. overlap for order2 fonts, why not convert the contours to
  4418. order3, do the function and convert back.</li>
  4419. <li>Once more we are numbering points badly.</li>
  4420. <li>If we clear a glyph which is being referred to (and
  4421. we don't unlink it first) then when we save it into an
  4422. sfd file we get a reference to a glyph at orig_pos -1
  4423. (because the cleared glyph isn't stored in the sfd) which
  4424. causes an error when reading it back in.</li>
  4425. <li>If a copyright message were an exact multiple of 100
  4426. characters long, fontforge would screw up memory (and
  4427. potentially crash) when reading it in from an sfd
  4428. file.</li>
  4429. <li>The Merge/Simplify command (which Add Extrema now
  4430. calls) had problems when the control points were very
  4431. close to the base point so that the point was (to the
  4432. human eye) a corner point.</li>
  4433. <li>Add support for the r2l script N'Ko. MS says opentype
  4434. will use script 'nko ', ISO says the tag should be
  4435. 'nkoo'. Follow opentype.</li>
  4436. <li>Kanou tells me that Syriac &amp; Thaana are also r2l
  4437. scripts and should be added to my list.</li>
  4438. <li>If FF was given multiple fonts on the command line
  4439. the sizes of the font windows would jump around in a very
  4440. peculiar fashion.</li>
  4441. <li>Add the concept of a namelist. Users can specify what
  4442. names they want for new glyphs, or can force an entire
  4443. font into a new naming scheme. Changes to
  4444. <ul>
  4445. <li>FontInfo</li>
  4446. <li>Open</li>
  4447. <li>Generate (Family)</li>
  4448. <li>Preferences</li>
  4449. <li>and the Encoding menu.</li>
  4450. <li>New scripting functions:
  4451. <ul>
  4452. <li>LoadNamelist(filename)</li>
  4453. <li>LoadNamelistDir([dir])</li>
  4454. <li>RenameGlyphs(namelist)</li>
  4455. <li>Extended Generate (scripting) to take a
  4456. namelist argument.</li>
  4457. </ul>
  4458. </li>
  4459. </ul>
  4460. </li>
  4461. <li>If users didn't have libuninameslist installed we
  4462. were still generating spurious ligatures for numero and
  4463. TM. (and others)</li>
  4464. <li>KANOU points out that if you comment out a bdf glyph
  4465. (with COMMENT) fontforge sort of reads it anyway.</li>
  4466. <li>Kanou needs to distinquish between the script latin
  4467. and the language.</li>
  4468. <li>SplineRemoveAnnoyingExtrema1 got tweaked a little too
  4469. much in attempting not to generate insane control
  4470. points.</li>
  4471. </ul>
  4472. </li>
  4473. <li>25-Jan-2006
  4474. <ul>
  4475. <li>If you try to create a bitmap only sfnt but provide
  4476. pixelsizes for no valid bitmap strikes, the fontforge
  4477. would crash.</li>
  4478. <li>Chia points out that I should use the PIXEL_SIZE
  4479. property to set a bdf font's pixelsize (instead of using
  4480. font ascent+descent).</li>
  4481. <li>Trying to rasterize a glyph with a coordinate of 1e7
  4482. caused a crash.</li>
  4483. <li>The change to make Add Extrema remove points near the
  4484. extrema failed to consider the possbility that some of
  4485. those points might be corner.</li>
  4486. <li>In Gentium Roman, when searching for bluevalues, the
  4487. baseline is further than 1 standard deviation from the
  4488. mean of glyph ymin. Change the range searched so that 0
  4489. is always included.</li>
  4490. <li>In Font Info-&gt;PS Private, if we selected
  4491. OtherBlues and pressed [Guess] it did not change the
  4492. OtherBlues value.</li>
  4493. <li>The gettext patch changed Histograms-&gt;Blue Values
  4494. menu item into a line.</li>
  4495. <li>When changing the order of a font, ff would ask if
  4496. you minded losing the undoes. There's no point in asking
  4497. the question if the font hasn't been modified (it has no
  4498. undoes).</li>
  4499. <li>The Point Info dlg should enforce that curved points
  4500. cps are collinear (so if the user changes one cp, the dlg
  4501. should change the other to be in the opposite
  4502. direction.</li>
  4503. <li>There was a path though PointInfo that called
  4504. SplineRefigure3, which meant that splines got marked as
  4505. cubics even when they should have been quadratics.</li>
  4506. <li>Using a rotated elliptical pen in expand stroke did
  4507. not work</li>
  4508. <li>Add a homedir button to the file chooser
  4509. dialogs.</li>
  4510. </ul>
  4511. </li>
  4512. <li>17-Jan-2006
  4513. <ul>
  4514. <li>Make the Import() scripting command accept
  4515. {bdf,pcf}.gz files</li>
  4516. <li>Reading utf7 (ttf name) strings from an sfd file was
  4517. broken if one of the characters had bit 15 (high bit) set
  4518. and its position in the string mod 3 was 1.</li>
  4519. <li>My horizontal line metrics in the sfnt bitmap strike
  4520. header were incorrect</li>
  4521. <li>Use the horizontal line metrics (if they work) to set
  4522. the ascent/descent of a bitmap strike.</li>
  4523. </ul>
  4524. </li>
  4525. <li>15-Jan-2006
  4526. <ul>
  4527. <li>The change to fold all COMMENTS into one bdf property
  4528. broke the sfnt 'BDF ' table routines.</li>
  4529. </ul>
  4530. </li>
  4531. <li>14-Jan-2006
  4532. <ul>
  4533. <li>Change AddExtrema so that if an extremum is very
  4534. close to an old point it will add the extremum and then
  4535. remove the old point.</li>
  4536. <li>Redid how bdf properties were handled
  4537. <ul>
  4538. <li>I had the definitions of some properties slightly
  4539. wrong</li>
  4540. <li>I was generating some obsolete properties</li>
  4541. <li>When I generated CHARSET_ENCODING for iso8859
  4542. encodings I had an extraneous "-" in the value.</li>
  4543. <li>retain the properties when loading a bdf, pcf
  4544. font</li>
  4545. <li>Add a dialog which gives user control over bdf
  4546. properties</li>
  4547. <li>design a 'BDF ' table for SFNT files which can
  4548. contain bdf properties and make FontForge read and
  4549. generate this table.</li>
  4550. </ul>
  4551. </li>
  4552. <li>Ted Packard points out that I output "big metrics" in
  4553. sfnts inconsistently. This patch should make them
  4554. consistent and right.</li>
  4555. <li>Restore "compact" views to their old glory. Ie. they
  4556. can now be uncompacted (and uncompaction happens
  4557. automagically when generating a font).</li>
  4558. <li>When reading a GenTags: line from an sfd file stored
  4559. with CRLF line terminators, the next line would be
  4560. lost.</li>
  4561. <li>ff couldn't handle xrefs which were broken in bits in
  4562. pdf files?</li>
  4563. <li>When reading a ttf font from a pdf file we found no
  4564. encoding info. This caused us to crash because various
  4565. routines expected an encoding map. Add a dummy (Original)
  4566. map if not exists.</li>
  4567. <li>Wasn't numbering points in references properly.</li>
  4568. <li>Gleep! Ever since the gettext code went in, the
  4569. Generate fonts dlg has refused to generate "No Outline
  4570. Font" and "No Bitmap Font".</li>
  4571. <li>Herbert Duerr from OpenOffice tells me that their
  4572. OpenSymbol.ttf font when produced by fontforge does not
  4573. work on Win98. This is because Win98 doesn't like the
  4574. codepages bits ff produces and refuses to use any glyphs
  4575. in the font. He submitted a patch to make ff produce a
  4576. version 0 OS/2 table (with no codepage info) for this
  4577. font. Win98 will accept it then. His patch was against an
  4578. earlier version of ff and needed to be modified for the
  4579. current version.</li>
  4580. <li>Patch by Raph Levien which finally shows me how to
  4581. use FT_Outline_Get_Bitmap properly.</li>
  4582. <li>If the user has never called PrintSetup (or if the
  4583. user has not called PrintSetup this session and has not
  4584. loaded prefs), then fontforge will invode setpagedevice
  4585. on a pagesize which will fit on either A4 or US-Letter.
  4586. The PS manual says a printer should refuse such a size
  4587. unless it has paper within 5 points of it. So on printers
  4588. which follow the spec (not mine) nothing will print as it
  4589. waits for paper.
  4590. <p>Now if the pagesize has not been set, don't specify
  4591. a PageSize to setpagedevice.</p>
  4592. </li>
  4593. <li>The PrintSetup scripting command should not require a
  4594. font.</li>
  4595. <li>Add a mechanism so that users can prevent ff from
  4596. making a point implicit. Useful in that point needs to be
  4597. instructed.</li>
  4598. <li>New copyright notices for 2006</li>
  4599. <li>Make the pen tool work better with quadratic splines
  4600. (make it default to having control points which cause the
  4601. point to be implicit).</li>
  4602. <li>Order2 elipses were not drawn accurately.</li>
  4603. <li>Point numbers sometimes didn't get properly
  4604. renumbered after changes. If we have references &amp;
  4605. splines in a (truetype) glyph then show the numbers as
  4606. "?".</li>
  4607. <li>When a charview displays numbered (truetype) points,
  4608. then it shows all the control points. But the control
  4609. points are not selectable. This is not a good thing, so
  4610. make them selectable.</li>
  4611. <li>The font display to pdf did not include a title at
  4612. the top of each page.</li>
  4613. <li>Peter Denisevich points out that when we print
  4614. something we say "%%Pages atend" instead of "%%Pages
  4615. (atend)". And the latter is correct.</li>
  4616. <li>Werner points out that my type1 (and type1 cid) fonts
  4617. contain a %%DocumentSuppliedResource line, and they
  4618. should not. The next level up should do that when it
  4619. includes the font.</li>
  4620. <li>Show .xpm files as images we support in import image
  4621. dlg. We've always supported them, might as well show
  4622. them.</li>
  4623. <li>Check the glyph class when deciding what anchor to
  4624. use.</li>
  4625. <li>Anshuman Pandey wants to be able to set the glyph's
  4626. GDEF class. I've never understood why the default
  4627. behavior wasn't good enough, but it's easy to do.</li>
  4628. <li>One of the fields in Glyph Info had some garbage
  4629. initialization.</li>
  4630. <li>Add a default anchor point type to the AddAnchorPoint
  4631. scripting command. FF will try to guess an appropriate
  4632. value.</li>
  4633. <li>Add some standard window sizes to the fontview
  4634. window. I'm tired of having the windows sized to other
  4635. people's standards whenever I review a bug.</li>
  4636. <li>There was a path through expand stroke where a
  4637. control point was marked as non-e xistant by
  4638. mistake.</li>
  4639. <li>Expand Stroke would leave contours with the reversed
  4640. orientation if it had to do a remove overlap
  4641. internally.</li>
  4642. <li>Oops. The routine to save the encoding prefs file
  4643. could not handle an encoding plug-in.</li>
  4644. <li>KANOU points out that the origin pulldown list in the
  4645. transform dlg was not being translated.</li>
  4646. <li>In the preference dlg all of the [...] file browsers
  4647. had the title "Call Script" which isn't appropriate for
  4648. most of them.</li>
  4649. <li>Typing .* and pressing [Filter] did not show hidden
  4650. files in the file chooser.</li>
  4651. <li>the code to check for intersections failed to check
  4652. if there were a crossover in the last tiny section of a
  4653. spline before its end.</li>
  4654. <li>Was generating ofm files when creating bdf fonts.
  4655. Seems unnecessary.</li>
  4656. <li>Was producing a EBLC table with bad first/last values
  4657. for first glyphs.</li>
  4658. <li>Hmm. Not all systems have tzset. Add a configuration
  4659. option for it.</li>
  4660. <li>In scripting, a return within a loop sent ff into an
  4661. infinite loop.</li>
  4662. <li>Kanou's patch for adding a new flag to scripting
  4663. Import, to clear out the layer first.</li>
  4664. <li>Patch from KANOU to add SetGlyphChanged scripting
  4665. function.</li>
  4666. <li>If an implied point became real, this fact was not
  4667. reflected on the display until the user forced a point
  4668. renumbering.</li>
  4669. <li>A mouse click in an empty metrics view references
  4670. garbage memory -- And crashed Kanou's session.</li>
  4671. <li>Loading a large bitmap font left bits of the backmap
  4672. of the encoding map uninitialized.</li>
  4673. <li>Loading a pcf font caused a crash.</li>
  4674. <li>Moving the control points of an implied point should
  4675. move the implied point. And we should indicate which
  4676. points are implied so this behavior doesn't
  4677. surprise.</li>
  4678. <li>Michal Nowakowski points out that renumbering points
  4679. in a glyph should turn off point matching in
  4680. references.</li>
  4681. <li>Add support for bitmaps with vertical metrics.</li>
  4682. <li>Wasn't storing the vendor id in the OS/2 table
  4683. properly.</li>
  4684. <li>Rounding error present on PPC which was absent on *86
  4685. machines.</li>
  4686. <li>Werner would like pixel size info to show on the
  4687. title of a charview when debugging.</li>
  4688. <li>Added a new menu command "Point-&gt;Center Between
  4689. Control Points" for truetype.</li>
  4690. <li>When manipulating menus with keys (rather than mouse)
  4691. Werner found a crash.</li>
  4692. </ul>
  4693. </li>
  4694. <li>5-Dec-2005
  4695. <ul>
  4696. <li>Creating the first bitmap view might cause a crash --
  4697. depending on how the linker organized memory.</li>
  4698. <li>Loading an sfd file now checks to see if there are
  4699. any glyphs with splines in them, and if there are not
  4700. turns on the onlybitmaps flag. Someone pointed out that
  4701. if you inadvertantly edit in the outline view -- even if
  4702. it is nothing significant, then the font is forever after
  4703. marked as outline. This isn't a perfect fix, but it will
  4704. prevent the worst from happening.</li>
  4705. </ul>
  4706. </li>
  4707. <li>1-Dec-2005
  4708. <ul>
  4709. <li>Use GNU gettext rather than my nomen routines to
  4710. handle translation of the UI..</li>
  4711. <li>Add support for plugins.</li>
  4712. <li>I added a check in parsing tfm files to make sure I
  4713. didn't read outside the bounds of the kern table. But the
  4714. table size was expressed in ints (32 bit units), and my
  4715. index was in bytes, so I frequently exceded it.</li>
  4716. <li>If we used Get Info on a reference in a ttf font, and
  4717. that reference did NOT do point matching we would
  4718. generate an inappropriate error.</li>
  4719. <li>My support for using endchar as seac in type2 fonts
  4720. only worked in bare cff fonts, it did not work if the cff
  4721. were inside an sfnt wrapper (opentype).</li>
  4722. <li>I have decided that I will now store all postscript
  4723. strings in utf8 (copyright, weight, familyname, etc.)
  4724. They SHOULD all be ascii. But the occasional copyright
  4725. mark would sneak in. We went into an infinite loop on one
  4726. such because that was an illegal utf8 string. So fix a
  4727. number of problems related to this.</li>
  4728. <li>Switch from using an internal routine to using
  4729. freetype to rasterize b&amp;w bitmaps when debugging ttf
  4730. instructions.</li>
  4731. <li>Make the gridfit/debug settings sticky across
  4732. invocations (store in prefs).</li>
  4733. <li>Add popup info showing the level of greyness in a
  4734. truetype font being debugged in anti-alias mode.</li>
  4735. <li>Werner suggests altering the dynamic range of
  4736. anti-aliased rasters in the charview so that the outlines
  4737. remain visible behind them.</li>
  4738. <li>Make the background color of the debugger raster
  4739. window configurable by the user</li>
  4740. <li>If a curved point had no control point in one
  4741. direction, then ff thought it had no direction and felt
  4742. free to change it. It should inherit the direction from
  4743. the other side of the point. This was even more confusing
  4744. if the point went through a two step process, first
  4745. simplifying one side into a line (losing the cp) then
  4746. simplifying the line away (losing the direction).</li>
  4747. <li>Use a better algorithm to indicate changed pixels.
  4748. (in debug window)</li>
  4749. <li>Screwed up View-&gt;Show Grid Fit... in Mono
  4750. mode.</li>
  4751. <li>Werner wants to be able to see grey scale rasters
  4752. while debugging truetype. He also points out that if the
  4753. instruction before the end of instructions changes
  4754. pixels, ff would leave them marked "changed" even after
  4755. finishing the instructions.</li>
  4756. <li>We were getting multiple error windows.</li>
  4757. <li>Don't allow users to add instructions to a glyph
  4758. containing both a reference and contours. Or a glyph
  4759. where a reference is scaled more than 200%. (tt doesn't
  4760. allow these combinations so the references need to be
  4761. copied inline)</li>
  4762. <li>Typo in remove overlap caused bad bug in feta26.
  4763. Error introduced 15 Sept.</li>
  4764. <li>Further work on what makes a spline linear.</li>
  4765. <li>The utf7 output routine in sfd did not convert from
  4766. utf8 properly.</li>
  4767. <li>Panov has found yet another error in simplify. Be
  4768. really exuberant about turning splines that trace out
  4769. lines into lines.</li>
  4770. <li>Panov finds another bug:
  4771. <ul>
  4772. <li>If we change the unicode value of a glyph, then
  4773. we also need to change</li>
  4774. <li>the unicode value of any references to that
  4775. glyph.</li>
  4776. </ul>
  4777. </li>
  4778. <li>Panov presents four more bugs:
  4779. <ul>
  4780. <li>If an sfd file contains an unencoded glyph, it
  4781. will crash</li>
  4782. <li>Force Encoding-&gt;Original will crash if there's
  4783. a bdf font missing some characters (ie. the piecemeal
  4784. display font)</li>
  4785. <li>Goto Dlg tried to free an uninit value</li>
  4786. <li>Goto Dlg contained a string initialized by latin1
  4787. rather than utf8.</li>
  4788. </ul>
  4789. </li>
  4790. <li>Hmm. the changedsincelasthinted flag doesn't apply to
  4791. truetype. The equivalent thing (I guess) is not having
  4792. any instructions on a glyph with splines.</li>
  4793. <li>Panov wants a way to build up arrays using easier
  4794. syntax than: create array, assign each element.</li>
  4795. <li>Sometimes we would get both an EUC-CN and a
  4796. GB2312packed entry in the Encoding menu.</li>
  4797. <li>Create a plugin for GB12345, and treat it (in sfnt
  4798. tables) as GB2312.</li>
  4799. <li>Add a new scripting funtion: NearlyLines to convert
  4800. almost linear splines to linear.</li>
  4801. <li>Tweak AddExtrema so that it doesn't create Extrema
  4802. points which are too close to the endpoints.</li>
  4803. <li>Didn't terminate an array of answer strings to a
  4804. question dialog.</li>
  4805. <li>Fixed a crash in stem database.</li>
  4806. </ul>
  4807. </li>
  4808. <li>28-Oct-2005
  4809. <ul>
  4810. <li>More work on the mac install procdure.</li>
  4811. <li>Redo the install documentation on the website &amp;
  4812. in the readmes</li>
  4813. <li>Add a hack to the directory browser so that on cygwin
  4814. getting a directory listing of "/" will include the magic
  4815. (fake) directory /cygdrive (which gives access to the
  4816. rest of the PC)</li>
  4817. <li>Add a new scripting funtion: NearlyLines to convert
  4818. almost linear splines to linear.</li>
  4819. <li>Tweak AddExtrema so that it doesn't create Extrema
  4820. points which are too close to the endpoints.</li>
  4821. <li>I was dumping all opentype ligatures into an ofm(tfm)
  4822. file. But I should probably only add 'liga' and 'rlig'
  4823. ligatures.</li>
  4824. <li>Omega has a bug where it thinks 0 width glyphs do not
  4825. exist. Which means it thinks none of the combining
  4826. accents, etc. exist. So force the width of any zero width
  4827. glyphs to be the smallest positive width.</li>
  4828. <li>When reading ttf/otf fonts, FF gave alternate
  4829. substitutions (and multiple subs?) a tag of 0.</li>
  4830. <li>Add two scripting routines to allow people to read
  4831. &amp; write strings from and to files. One string per
  4832. file.</li>
  4833. <li>The ClearTable scripting command parsed the table's
  4834. tag incorrectly.</li>
  4835. </ul>
  4836. </li>
  4837. <li>23-Oct-2005
  4838. <ul>
  4839. <li>Try to make the Mac install a bit more mac-like by
  4840. adding an entry to the X11 Applications menu rather than
  4841. expecting users to start fontforge from the command
  4842. line.</li>
  4843. <li>David Binderman points out an out of bounds array
  4844. reference in cvexport which has been there for years.
  4845. Gleep.</li>
  4846. <li>Add scripting commands for manipulating ttf
  4847. instructions.
  4848. <p>I added the following new scripting functions:</p>
  4849. <ul>
  4850. <li>
  4851. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetMaxpValue("item-name",
  4852. value)</li>
  4853. <li>
  4854. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetMaxpValue("item-name")</li>
  4855. <li>
  4856. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClearInstrs()</li>
  4857. <li>
  4858. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClearTable(tag)</li>
  4859. <li>
  4860. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddInstrs(thingamy,replace,instrs)</li>
  4861. <li>
  4862. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FindOrAddCvtIndex(value[,sign-matters])</li>
  4863. <li>
  4864. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReplaceCvtAt(index,value)</li>
  4865. <li>
  4866. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetCvtAt(index)</li>
  4867. <li>
  4868. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrivateToCvt()</li>
  4869. </ul>
  4870. </li>
  4871. <li>Daniel Gillmor points out there is no way to set the
  4872. OS/2 Width field from a script. He then provided a patch
  4873. with two new functions which does this. I realize there
  4874. is no way to set any of the OS/2 values (except panose),
  4875. and there should be (and to retrieve them too).
  4876. <p>I added the following new scripting functions:</p>
  4877. <ul>
  4878. <li>
  4879. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetOS2Value("item-name",
  4880. value)</li>
  4881. <li>
  4882. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetOS2Value("item-name")</li>
  4883. <li>
  4884. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetPrivateValue("item-key","item-value")</li>
  4885. <li>
  4886. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetPrivateValue("item-key")</li>
  4887. <li>
  4888. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HasPrivateValue("item-key")</li>
  4889. <li>
  4890. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RemovePrivateValue("item-key")</li>
  4891. </ul>
  4892. </li>
  4893. <li>A number of fixes for ofm files.</li>
  4894. <li>When outputting mark-to-base lookups with multiple
  4895. anchor classes, ff would put a base glyph in the coverage
  4896. table several times if it was used by several mark
  4897. classes. Bad.</li>
  4898. </ul>
  4899. </li>
  4900. <li>18-Oct-2005
  4901. <ul>
  4902. <li>KANOU points out that I was using too strict a rule
  4903. for parsing svg polygons.</li>
  4904. <li>OFM output was not working in fonts with lots of
  4905. kerning combinations.</li>
  4906. </ul>
  4907. </li>
  4908. <li>16-Oct-2005
  4909. <ul>
  4910. <li>A number of fixes for ofm files.</li>
  4911. <li>Add default 'nukt' "ligature" substitutions to
  4912. appropriate Devanagari characters</li>
  4913. </ul>
  4914. </li>
  4915. <li>15-Oct-2005
  4916. <ul>
  4917. <li>The patch to the routine determining what glyphs got
  4918. output broke bitmap only fonts.</li>
  4919. <li>Ofm files didn't contain ligatures.</li>
  4920. <li>The ofm patch broke tfm output.</li>
  4921. </ul>
  4922. </li>
  4923. <li>12-Oct-2005
  4924. <ul>
  4925. <li>Add support for generating &amp; parsing ofm files (I
  4926. hope)</li>
  4927. <li>If I tried to generate a font from an absolutely
  4928. empty fontdb (ie. a new one) then I'd get a stupid error
  4929. about how .notdef was at encoding -1 and this was a bad
  4930. idea.</li>
  4931. <li>Add 4 new information types to scripting GlyphInfo
  4932. <dl>
  4933. <dt>* LayerCount</dt>
  4934. <dd>Number of layers in glyph (usually 2)</dd>
  4935. <dt>* RefCount</dt>
  4936. <dd>Number of refs in glyph</dd>
  4937. <dt>* RefNames</dt>
  4938. <dd>Returns an array of all reference names (may be 0
  4939. length)</dd>
  4940. <dt>* RefTransform</dt>
  4941. <dd>Returns an array of all reference transforms</dd>
  4942. </dl>
  4943. </li>
  4944. <li>Don't mark glyphs with widths other than 1em as being
  4945. worth outputting (require widthset). Used to use both
  4946. (because in the early days, before pfaedit moved to
  4947. sourceforge even, the widthset bit didn't exist). Now
  4948. there are too many cases w here glyphs are created with a
  4949. width other than 1em (marks, glyphs in monospace fonts
  4950. (where the space is anything but 1em)).</li>
  4951. <li>When printing a type3 pdf font, give it a name. Not
  4952. required, but so what.</li>
  4953. <li>Patch from Michal Nowakowski. When editing truetype
  4954. instructions using my prefix notation for numbers, there
  4955. was a crash if a number needed a word (rather than a
  4956. byte).</li>
  4957. <li>Add some support for reading fonts out of a pdf file.
  4958. <ul>
  4959. <li>Limited support for pdf type3 (no images)</li>
  4960. <li>Only support (Hex, 85, Flate, RLE)Decode filters
  4961. (no support for lzw, fax, JBIG, DCT)</li>
  4962. </ul>
  4963. </li>
  4964. <li>The routine to build the stem database (autohint)
  4965. would set up a point database and then call a routine to
  4966. convert all splines into a set of monotonics. But that
  4967. routine could remove 0 length splines (and the points
  4968. attached), which would mean our point db would be
  4969. wrong.</li>
  4970. <li>Stefan Wanger suggests some patches to fix memory
  4971. leaks.</li>
  4972. <li>Stefan Wanger gave me a type2 font which used type1
  4973. flex conventions (calling othersubrs, etc.) There is no
  4974. othersubrs operator in type2, nor any place to store
  4975. othersubrs subroutines. But it is easy enough to support,
  4976. so why not. Warn that it's an illegal font, of
  4977. course.</li>
  4978. <li>Stefan Wanger gave me a font containing the utf8 byte
  4979. order mark in a fontname ( in a CFF Name Index).
  4980. PostScript says FontNames are printable ASCII. But it's
  4981. easy enough to skip over it.</li>
  4982. <li>Stepan Roh points out that in a monospace font,
  4983. combining glyphs should default to the mono-width while
  4984. in a proportional font they should default to 0 width (or
  4985. perhaps 1 em-unit for compatability with old idiotic
  4986. windows systems). Use the panose field to determine if a
  4987. font is monospace.
  4988. <p>Actually ALL glyphs in a monospace font should
  4989. default to the mono-space width rather than 1em.</p>
  4990. </li>
  4991. <li>New dialog: Hints-&gt;Edit 'maxp'... Gives user
  4992. access to number of functions defined, the stack depth,
  4993. storage usage, number of twilight points, which ff can't
  4994. figure out for you.</li>
  4995. <li>Figured out how to make transparent images work on
  4996. cygwin</li>
  4997. <li>Michal Nowakowski points out that negative values are
  4998. duplicated in cvt.</li>
  4999. <li>Patch from Michal Nowakowski fixing crash when
  5000. setting size of cvt table to 0.</li>
  5001. </ul>
  5002. </li>
  5003. <li>29-Sept-2005
  5004. <ul>
  5005. <li>Add utf8 entry points for many (ucs2) routines.
  5006. Minimal ability to draw non-BMP glyphs now with <a href=
  5007. "nonBMP/index.html">bdf fonts</a> with encodings:
  5008. *-UnicodePlane-1 (for plane 1), *-UnicodePlane-2 (for
  5009. plane 2), etc.</li>
  5010. <li>Add a menu command to add values from the private
  5011. dict into the cvt table (BlueValues, StemSnaps).</li>
  5012. <li>The Edit cvt window usually failed to draw anything
  5013. in itself when it popped up (subsequent refreshes were
  5014. ok).</li>
  5015. <li>Patch from Michal Nowakowski to improve memory usage
  5016. in auto instr.</li>
  5017. <li>Printing sample text was broken in fonts with no
  5018. kerning classes.</li>
  5019. <li>cygwin does very weird things with shared libaries,
  5020. and we didn't support them at all.</li>
  5021. <li>FontForge did not support the deprecated usage of
  5022. endchar to mean (almost) seac in type2 charstrings. It
  5023. should now.</li>
  5024. <li>os2 typo linegap was not read out of sfd files.</li>
  5025. <li>Display 'gai' files in the open dlg.</li>
  5026. <li>I got some mnemonics wrong. Fix 'em up.</li>
  5027. <li>bdftopcf will use the glyph encoded at 0 as the
  5028. default glyph if there is no explicit DEFAULT_CHAR. It
  5029. seems happy with a DEFAULT_CHAR of -1 to mean no default,
  5030. so use that if we don't want glyph 0 to be the
  5031. default.</li>
  5032. <li>when outputting bdf, fnt or pt3 bitmap fonts with no
  5033. outline font generated, we'd get filenames like
  5034. foo-*-13.bdf. Get rid of the "-*".</li>
  5035. <li>Support point numbering of composites even when not
  5036. debugging.</li>
  5037. <li>Michal Nowakowski points out that the cvt editor
  5038. crashed if we changed the length of the table.</li>
  5039. <li>Provide two new scripting functions:
  5040. <ul>
  5041. <li>
  5042. MoveReference(xoff,yoff,[ref-name/ref-unicode]+)</li>
  5043. <li>
  5044. PositionReference(x,y,[ref-name/ref-unicode]+)</li>
  5045. </ul>
  5046. <p>These search all selected glyphs, looking for any
  5047. references in those glyphs with the given name/unicode
  5048. value, and then translating the reference by
  5049. (xoff,yoff) or positioning the reference absolutely at
  5050. (x,y).</p>
  5051. </li>
  5052. <li>ff failed to read horizontal metrics properly from a
  5053. type2 CFF CID font. In most cases this would be masked by
  5054. the fact that ff would correct the bad width values by
  5055. reading the hmtx table. But if one had a bare CFF font,
  5056. or a 'gai' font where there is no external source of
  5057. widths, ff would get things wrong.</li>
  5058. <li>Alexej Kryukov points out that most entries in the
  5059. private dict should be scaled when we do a
  5060. ScaleToEm.</li>
  5061. <li>Fix a couple of problems with cid font display that
  5062. "gai" fonts expose.</li>
  5063. <li>Michal Nowakowski points out that I generated
  5064. truetype instructions --- and then forgot to attach them
  5065. to the glyph. Whoops.</li>
  5066. <li>Loading extensible glyph information from a tfm file
  5067. was broken by the encoding change.</li>
  5068. </ul>
  5069. </li>
  5070. <li>19-Sept-2005
  5071. <ul>
  5072. <li>ff did not read AAT classes (kerning classes, etc)
  5073. properly. It read one extra element which could cause
  5074. problems</li>
  5075. <li>Cleanup svg output for kerning classes with no
  5076. members.</li>
  5077. <li>Out of bounds array reference in OS2FigureCodePages
  5078. caused a crash on the mac.</li>
  5079. <li>When loading a type1 font we failed to set the
  5080. unicode encoding on seac references. This probably broke
  5081. lots of things, it certainly broke replace with
  5082. reference.</li>
  5083. <li>Add a DefaultRoundToGrid scripting function to set
  5084. the Round-to-Grid truetype reference bit (basically set
  5085. it whenever we have a reference which isn't point
  5086. matched).</li>
  5087. <li>Add support for truetype point matching in references
  5088. and anchor points</li>
  5089. <li>Improve the debugging heuristic that notices when
  5090. we've jumpped to a new routine to work better with
  5091. composites</li>
  5092. <li>If I attempted to debug a glyph with no instructions
  5093. there was a race condition and if the race was won one
  5094. way, ff would hang.</li>
  5095. <li>We weren't numbering points in a composite. This was
  5096. only obvious when we did a View-&gt;Show Grid Fit on a
  5097. composite glyph.</li>
  5098. <li>When debugging a composite glyph, ff forgot that some
  5099. references are translated (or scaled or rotated), and
  5100. failed to display this.</li>
  5101. <li>FF failed to keep track of the truetype "RoundToGrid"
  5102. bit which applies to references.</li>
  5103. <li>In the Points window of truetype debugging, if the
  5104. penultimate point of a contour was interpolated, then the
  5105. contour boundary was drawn in the wrong place.</li>
  5106. <li>Use to store debugging dpi/pointsize in the charview.
  5107. Werner suggests that it be global (so different glyphs
  5108. will all share the same defaults).</li>
  5109. <li>Some Unicode code blocks have moved (probably those
  5110. which only in the pipeline or some such), and some others
  5111. have been added to the pipeline.</li>
  5112. </ul>
  5113. </li>
  5114. <li>15-Sept-2005
  5115. <ul>
  5116. <li>Can't use a subroutine to refer to a translated glyph
  5117. which contains flex hints in type1 output.</li>
  5118. <li>Hide another problem with rounding errors in remove
  5119. overlap.</li>
  5120. <li>Don't produce multiple warnings about the local
  5121. encoding.</li>
  5122. <li>In quadratic fonts the Remove Overlap menu item is
  5123. disabled, but if you use the hotkey the command is
  5124. invoked (with disasterous results).</li>
  5125. <li>Typo in point info code to determine whether a hint
  5126. mask contains conflicts (matched vertical hints against
  5127. horizontal ones)</li>
  5128. </ul>
  5129. </li>
  5130. <li>12-Sept-2005
  5131. <ul>
  5132. <li>Added a scripting command DefaultUseMyMetrics() to
  5133. set the use_my_metrics bit in old fonts.</li>
  5134. </ul>
  5135. </li>
  5136. <li>11-Sept-2005
  5137. <ul>
  5138. <li>&nbsp;&nbsp; When ff pastes refs from one font to
  5139. another it tries to figure out the width of a glyph
  5140. containing references from the width of what appears to
  5141. be the base glyph. (because if you paste Aacute from one
  5142. font to another, the size of the "A" glyph may be quite
  5143. different in the new font. Using the width of the glyph
  5144. in the original font would be wrong).
  5145. <p>There are two problems with this:</p>
  5146. <ol>
  5147. <li>It didn't take forward references into account,
  5148. and would use the original width rather than the
  5149. modified width of the reference.</li>
  5150. <li>It would (probably) be confused by an Alphatonos
  5151. where the width of Alphatonos is not the same as that
  5152. of Alpha.</li>
  5153. </ol>
  5154. <p>instead figure widths out after all pastes have
  5155. completed, looking at the use_my_metrics bit to get
  5156. things right.</p>
  5157. </li>
  5158. <li>Handle forward references to glyphs which will be
  5159. pasted into by the current command (used to work, broken
  5160. by the encoding change)</li>
  5161. <li>Various fixes for pasting references from a font
  5162. which has since been closed.</li>
  5163. <li>Support the ttf "_USE_MY_METRICS" bit on composite
  5164. glyphs. This entails:
  5165. <ul>
  5166. <li>Retaining it when reading a truetype font</li>
  5167. <li>Setting properly when generating one</li>
  5168. <li>Storing it in sfd files</li>
  5169. <li>Giving the user a way to set it with the
  5170. Element-&gt;GetInfo command</li>
  5171. </ul>
  5172. </li>
  5173. </ul>
  5174. </li>
  5175. <li>9-Sept-2005
  5176. <ul>
  5177. <li>ff crashed when given a bdf font with multiple glyphs
  5178. with the same name</li>
  5179. <li>Try to avoid generating bdf fonts with multiple
  5180. glyphs with the same name. This happened when a single
  5181. glyph was mapped to several encodings, a concept bdf
  5182. doesn't support. Now when it looks like this will happen
  5183. we rename the glyph.</li>
  5184. <li>Uninitialized variable in dependant sub-menu (broken
  5185. by encoding change)</li>
  5186. <li>Pasting a reference into a font which did not contain
  5187. the referred glyph did not give you the option of copying
  5188. the original outlines any more. (broken by the encoding
  5189. change)</li>
  5190. <li>Merging fonts where glyphs had multiple encodings
  5191. caused crashes.</li>
  5192. <li>I'm very old fashioned. I like having error messages
  5193. on stderr. But far too many people don't see them there.
  5194. I guess they invoke fontforge directly from X with stderr
  5195. directed to some invisible console window. Well create a
  5196. little window to contain warning messages about font
  5197. errors (for instance when reading an otf font we might
  5198. complain about glyphs out of bounds, etc.)</li>
  5199. <li>Add support for postscript bitmap fonts. This means:
  5200. <ul>
  5201. <li>Ability to parse (simple forms of) the imagemask
  5202. ps operator</li>
  5203. <li>Code to detect that a type3 is a ps bitmap, and
  5204. convert it into a normal bitmap font that people can
  5205. edit.</li>
  5206. <li>Bitmap output as a ps type3 font (using
  5207. imagemask)</li>
  5208. <li>Fixing a bug in my output routines which worked
  5209. fine for images in eps files, but failed horribly if
  5210. that same code was stuffed into a charproc and
  5211. executed on demand.</li>
  5212. </ul>
  5213. </li>
  5214. <li>ff could not handle an encoding specified as a simple
  5215. array. (Not allowed in typ e1 spec, but obvious for a
  5216. type3)</li>
  5217. <li>And ff's handling of any type3s was broken by the
  5218. encoding patch.</li>
  5219. <li>If a font contained fewer than 256 glyphs, then ff
  5220. failed to load a format0 cmap subtable properly.</li>
  5221. </ul>
  5222. </li>
  5223. <li>4-Sept-2005
  5224. <ul>
  5225. <li>In fontinfo, changed the tab "TTF Values" to be
  5226. "OS/2", consolidated the Panose tab underneath it. Added
  5227. many more fields, almost all of OS/2.</li>
  5228. <li>Fixed a number of uninitialized variables, at the
  5229. instigation of Pavel Roskin.</li>
  5230. <li>Applied several patches from Pavel Roskin.</li>
  5231. <li>The scripting WorthOutputting command insisted on an
  5232. argument, even when it should not have.</li>
  5233. <li>Scripting SetCharCnt command has been broken since
  5234. the encoding change.</li>
  5235. </ul>
  5236. </li>
  5237. <li>31-August-2005
  5238. <ul>
  5239. <li>The mac fix for 25-Aug wasn't quite enough.</li>
  5240. <li>I used to maintain a hidden value of the os2 linegap.
  5241. This didn't change when users set linegap with font info,
  5242. leaving users annoyed.</li>
  5243. <li>It used to be that both the Hint-&gt;Add Hint and
  5244. Hint-&gt;Create Hint commands would destroy all hint
  5245. masks. Now we update those hint masks appropriately.</li>
  5246. <li>The "Original" encoding was broken, and reencoding to
  5247. it gaves us 256 blank glyphs before glyph0. Sigh.</li>
  5248. <li>The CodeRange bit for symbol doesn't mean the font
  5249. contains any standard set of "symbol" glyphs, but rather
  5250. either that it has a 3,0 cmap sub-table, or that there
  5251. are glyphs mapped to 0xf000-0xf0ff in the 3,1 (unicode)
  5252. sub-table.
  5253. <p>Setting this bit should give you a symbol encoding
  5254. as well as all the other encodings you've set bits for.
  5255. It doesn't work under windows. It doesn't work.
  5256. TrueType fonts do not provide a symbol encoding, while
  5257. 'CFF ' fonts only provide a symbol encoding. But hey,
  5258. let's support it anyway!</p>
  5259. <p>change View-&gt;Goto to know about this range as MS
  5260. Symbol.</p>
  5261. </li>
  5262. <li>Importing an eps file (or pasting the x clipboard)
  5263. made use of an uninitialized variable. (introduced
  5264. 7-Aug)</li>
  5265. <li>Cleanup pasting references from one font to another
  5266. (gave some very strange results when pasting refs with no
  5267. unicode encodings).</li>
  5268. </ul>
  5269. </li>
  5270. <li>25-August-2005
  5271. <ul>
  5272. <li>Recode the mac resource fork routines so that they no
  5273. longer use the FSSpec structure. 10.4 complains about
  5274. it.</li>
  5275. <li>Bug in mm font charstring generation.</li>
  5276. <li>If a font contained mac feature setting names, then
  5277. when ff generated it, ff would produce duplicate entries
  5278. in the 'name' table for these guys. One for the name in
  5279. the font itself, and one for the name ff thought that
  5280. feature setting should have.</li>
  5281. <li>Nobody else puts apple unicode names into the 'name'
  5282. table so I probably should not either. Adobe says one
  5283. should not. Apple's website implies one should -- but
  5284. Apple doesn't and its ttf website is not very
  5285. accurate.</li>
  5286. <li>When ff generated a ttf/otf font with applemode set
  5287. and opentype off then the font would have version 'true'.
  5288. Which means windows would reject it. That's probably not
  5289. a good idea given that this situation is default on the
  5290. mac -- even if we don't have a GSUB/GPOS table we should
  5291. at least let the glyphs show on windows.
  5292. <p>On the other hand some people might want to make
  5293. fonts that only work on macs. So add a configure
  5294. flag.</p>
  5295. </li>
  5296. <li>ff couldn't undo changing the lig carets (if it
  5297. weren't compiled for multilayer)</li>
  5298. <li>Copying a pairwise positioning left memory in a bad
  5299. state.</li>
  5300. <li>Coalesce all lookups with the same feature &amp;
  5301. script lang. This makes ATM happy about kerning on
  5302. windows.</li>
  5303. <li>When rasterizing a multilayer font we would sometimes
  5304. get warnings from the stroker about how the stroke
  5305. self-intersected. Get rid of those warnings.</li>
  5306. <li>Pasting from a multilayered font into a normal one
  5307. crashed</li>
  5308. <li>If an order2 font were turned into a PS font, then
  5309. characters with hint conflicts got no hints.</li>
  5310. <li>Makers of fonts on the mac often use out of bound
  5311. GIDs as flags in contextual su bstitutions. What I have
  5312. seen is that one sub-table will insert such a "glyph" w
  5313. hen a match is found, and then the next sub table will
  5314. remove the flag, and perf orm subsequent transformations.
  5315. This is important on the mac because there is a limited
  5316. number of substitutions that can happen once a match is
  5317. found, but if a match is found at the start (ie. the
  5318. match being some magic marker glyph) then u nlimited
  5319. substitutions are available. When ff first stumbled on
  5320. these fonts it crashed, then it treated a gid&gt;glyph_cn
  5321. t as an error (and so it ignored the substitution). I've
  5322. just put in code that c reates dummy glyphs for all these
  5323. bizarre GIDs so (I hope) the font will work af ter
  5324. passing through ff (only there will be some real blank
  5325. glyphs at the end of the font rather than vaper-ware
  5326. glyphs).</li>
  5327. <li>The Active Hints pane (of Point Info) didn't always
  5328. work if a glyph had more than one contour.</li>
  5329. <li>Be more canny in the use of subroutines for
  5330. references in type1/2 output.</li>
  5331. <li>When generating contextual lookups, ff did not set
  5332. the lookup count between gpos and gsub. So if a font had
  5333. both contextual gpos &amp; gsub elements ff got
  5334. confused.</li>
  5335. <li>The code for cff encodings (ie. in bare cff non-cid
  5336. fonts) didn't handle multiply encoded glyphs</li>
  5337. <li>Change the default color of the prev control point
  5338. (so it's easier for me to see)</li>
  5339. </ul>
  5340. </li>
  5341. <li>11-August-2005
  5342. <ul>
  5343. <li>The configure script did not find libfreetype when it
  5344. lived (solely) in /usr/X11R6/libs</li>
  5345. <li>On the Mac, menus incorrectly suggested using Cmd
  5346. rather than Ctl. (Cmd used to work on earlier versions of
  5347. the X server, but now it is snagged by the X11 menubar
  5348. itself.)</li>
  5349. <li>ff uses the Alt/Meta key to alter the behavior of
  5350. some tools (magnify, ruler, pointer, pencil, etc.) in the
  5351. editing windows. This doesn't work well on the mac. First
  5352. there is no real Alt/Meta key. If we contemplate using
  5353. Option or Command it will generally already be used to
  5354. turn the single button mouse into a three button mouse
  5355. (Option - mouse =&gt; button 2, Command - mouse =&gt;
  5356. button 3). So instead use the CapsLock key.</li>
  5357. </ul>
  5358. </li>
  5359. <li>9-August-2005
  5360. <ul>
  5361. <li>The big5 encoding stopped at 64000, which confused
  5362. routines which expected unencoded glyphs to start at
  5363. 65536.</li>
  5364. <li>We would crash when reencoding a font with enough
  5365. unencoded alternate unicode code points.</li>
  5366. <li>The code for creating an 8/16 cmap subtable didn't
  5367. work.</li>
  5368. <li>ff would crash if it had two windows open on the same
  5369. font and one got reencoded</li>
  5370. <li>Didn't set the length of the format4 'cmap'
  5371. sub-table, so the offset to the format12 (32bit unicode)
  5372. table was wrong.</li>
  5373. <li>ttfcopyfile can complain about a ttf table offset
  5374. being wrong. Give it the info so that it will now tell us
  5375. which table has the wrong offset.</li>
  5376. <li>Uninitialized variable in metricsview when creating a
  5377. popup window.</li>
  5378. <li>Redo the ttfnames pane of the font info dlg. Now show
  5379. the names as an editable list.</li>
  5380. <li>Histogram dlg still used wrong encodings for selected
  5381. glyphs when historgrams invoked from Hints menu.</li>
  5382. </ul>
  5383. </li>
  5384. <li>7-August-2005
  5385. <ul>
  5386. <li>SelectIf failed when passed an encoding which was out
  5387. of bounds</li>
  5388. <li>Added a new scripting command: ToString</li>
  5389. <li>Using the X clipboard to paste a glyph into a glyph
  5390. that contained stuff caused a crash.</li>
  5391. <li>Using the X clipboard to paste a glyph with
  5392. references or with multilayer did no t work.</li>
  5393. <li>None of ttf, otf nor svg got multiply encoded glyphs
  5394. output properly.</li>
  5395. <li>FF screwed up memory when creating ligatures from an
  5396. svg font.</li>
  5397. <li>Merge fonts was writing to bad memory.</li>
  5398. <li>FF was confused by a strange MM font</li>
  5399. <li>FindExistingSlot should understand altuni.</li>
  5400. <li>Font View didn't display current unicode of multiply
  5401. encoded glyphs. (same for popups).</li>
  5402. <li>Still having problems generating type1 code for
  5403. complicated reference glyphs.</li>
  5404. <li>Retain knowlege of multiple unicode encodings for
  5405. some glyphs. Used when a glyph has multiple encodings and
  5406. is reencoded.</li>
  5407. <li>Add back an option to compact an encoding. It's not
  5408. the same as the old compact which kept track of the
  5409. former encoding. This just compacts, user must explicitly
  5410. reencode.</li>
  5411. <li>Force encoding didn't work if the new encoding had
  5412. more slots than the old.</li>
  5413. <li>FF also failed to parse glyph based contextual
  5414. lookups properly</li>
  5415. </ul>
  5416. </li>
  5417. <li>3-August-2005
  5418. <ul>
  5419. <li>FF failed to parse class based contextual lookups
  5420. properly (contextual chaining lookups were ok)</li>
  5421. </ul>
  5422. </li>
  5423. <li>2-August-2005
  5424. <ul>
  5425. <li><span class="c2"><strong><big>The OS/2 ulCodeRanges
  5426. field has been broken for a long time, and has failed to
  5427. mark the presence of any latin code
  5428. pages.</big></strong></span></li>
  5429. <li>The ulCodeRanges field never set Vietnamese,
  5430. TradChinese, Mac nor PC OEM</li>
  5431. <li>FF did not support EUC-CN, ISO-2022-CN, ISO=2022-KR
  5432. iconv encodings properly.</li>
  5433. <li>Work around a bug in iconv's support for CP1258</li>
  5434. <li>Put some code in to warn users about unknown
  5435. language/locales in the ttf 'name' table.</li>
  5436. <li>Enter some new language/locale codes for ms.</li>
  5437. <li>Crash when moving the end of an open path in an
  5438. order2 font.</li>
  5439. <li>If one loaded an encoding specified by codepoint and
  5440. then cancelled the dlg which asked for a name for that
  5441. encoding, then ff would crash.</li>
  5442. <li>Don't use Adobe's glyphnames when they are obviously
  5443. wrong (use uni???? instead)</li>
  5444. <li>Add (better) support for the new dotlessj</li>
  5445. <li>Put a check into the context chain dlg to make sure
  5446. that people don't add sequence/lookup pairs where the
  5447. sequence number is too big.</li>
  5448. <li>Make class be the default format for
  5449. contextual/chaining substitutions rather than coverage
  5450. tables.</li>
  5451. <li><span class="c2"><strong><big>The format of the
  5452. LineBreak.txt file changed with Unicode 4.1, so all the
  5453. line break info is wrong (essentially lines never broke
  5454. in text fields).</big></strong></span></li>
  5455. <li>Reference to bad memory when creating a popup in
  5456. combinations list.</li>
  5457. <li>Still problems in the 'name' table when Mac &amp; Mac
  5458. Unicode strings don't match.</li>
  5459. <li>Use of the X clipboard for transfering glyphs
  5460. resulted in a crash</li>
  5461. <li>When generating an old-style 'kern' table (either
  5462. OpenType nor Apple modes set) decompose all kerning
  5463. classes into kern pairs as we do for AFM files.</li>
  5464. <li>Scripting didn't have a way to generate a font with
  5465. neither Apple nor OpenType tables. Add one.</li>
  5466. <li>Oops. wrong default extension for otb fonts from
  5467. scripts.</li>
  5468. <li>Fix some potential crashes where loading font types
  5469. left a new field unset.</li>
  5470. </ul>
  5471. </li>
  5472. <li>28-July-2005
  5473. <ul>
  5474. <li><span class="c2"><strong><big>Redesigned the way
  5475. encodings are handled. From the user's perspective
  5476. Encodings are no longer controlled by FontInfo, but via
  5477. an encoding menu.</big></strong></span></li>
  5478. <li>If we create a bitmap strike in an empty font then
  5479. change the fontview to look at the strike.</li>
  5480. <li>The SetWidth command of FontView produced garbage
  5481. defaults for empty fonts</li>
  5482. <li>Don't set the hinting needed bit on: bitmap only
  5483. fonts, multilayered fonts, stroked fonts nor quadratic
  5484. fonts.</li>
  5485. <li>Fix some problems with the generated names in
  5486. File-&gt;Generate multiple</li>
  5487. <li>The Save command failed to reset the font window's
  5488. title (so it still looked modified)</li>
  5489. <li>The enabled state of Encoding-&gt;Detach Glyphs was
  5490. wrong</li>
  5491. <li>FF still didn't allow two ligatures to be created for
  5492. the same glyph (ie. it complained if you tried to make
  5493. both "f + f + i =&gt; ffi" and "ff + i =&gt; ffi"</li>
  5494. <li>Added a TypeOf command to scripting</li>
  5495. <li>Added a GetPosSub command to scripting.</li>
  5496. <li>Werner says negative widths and depths be set to 0 in
  5497. tfm files.</li>
  5498. <li>FontForge was generating an incorrect warning
  5499. message. If a 'name' table contains a duplicate entry for
  5500. a given platform/specific/language/id that's an error in
  5501. the font. But ff conflated mac names with window names
  5502. and so was only checking language/id. So if the mac
  5503. windows names were different (which is probably a bad
  5504. design idea, but not an error) ff said it was wrong. It
  5505. can also be caused by using a character in the string
  5506. which is not in the Mac Encoding for that language.</li>
  5507. <li>Don't set "Hinting needed" flag in bitmap only
  5508. fonts.</li>
  5509. <li>AutoHint had a crash if there were open contours in a
  5510. glyph being hinted.</li>
  5511. <li>Add a couple of browsers to the list to check by
  5512. default.</li>
  5513. <li>Using the kerning pair closeup dlg to create a new
  5514. kerning pair caused a crash (eventually).</li>
  5515. <li>When saving a block of ttf bitmap glyphs all with
  5516. about the same metrics,</li>
  5517. <li>Kern pairs were not scaled to emsize when loading
  5518. from an afm file.</li>
  5519. <li>Add a series of new selection commands, to the font
  5520. view and to scripting:
  5521. <ul>
  5522. <li>SelectChangedGlyphs</li>
  5523. <li>SelectHintingNeeded</li>
  5524. </ul>
  5525. <p>(just to scripting)</p>
  5526. <ul>
  5527. <li>SelectSingletons</li>
  5528. <li>SelectMoreSingletons</li>
  5529. <li>SelectFewerSingletons</li>
  5530. </ul>
  5531. </li>
  5532. <li>Revert Glyph didn't work. One bug caused by
  5533. multilayer, one caused by encoding changes, and one
  5534. really old one.</li>
  5535. <li>GetFontNames returned an uninitialized value on bad
  5536. ttf files.</li>
  5537. <li>Add some new scripting commands to access the TeX
  5538. per-glyph fields.</li>
  5539. <li>Werner suggested some improvements to tfm
  5540. output.</li>
  5541. <li>Cleanup behavior of generating ttf bitmaps in a
  5542. script.</li>
  5543. <li>I was attaching script/langs to lookups when parsing
  5544. GPOS/GSUB. That wasn't good enough. Each sub-table and
  5545. have it's own set, so attach script/langs to subtables as
  5546. well. Still a flaw in that sub-tables could be referenced
  5547. through severel extension sub-tables or directly and I
  5548. don't unravel that complexity until too late.</li>
  5549. <li>ATM which handles some kerning for otf fonts for
  5550. Word, does not handle 'kern' features where the feature
  5551. contains more than one lookup. So whenever we have a
  5552. feature with multiple lookups try to compress them into
  5553. one lookup with multiple sub-tables.</li>
  5554. <li>Transform (in fontview) and Scale To Em do not scale
  5555. the vertical advance.</li>
  5556. <li>We didn't test the right thing when deciding where a
  5557. subroutine containing refs began.</li>
  5558. <li>Remove Undoes was broken by the encoding
  5559. changes.</li>
  5560. <li>When saving multiple, make sure we don't get
  5561. extraneous kerns. (to glyphs not in the current
  5562. sub-font).</li>
  5563. <li>Make sure the blue lines (marking hints needing to be
  5564. updated) get cleared properly.</li>
  5565. <li>Some display problems in the SameGlyphAs
  5566. command.</li>
  5567. <li>The Apply Substitutions code did not consider the
  5568. possibility of loops:<br />
  5569. a-&gt;b-&gt;c-&gt;d-&gt;a</li>
  5570. <li>Werner suggests indicating multi-layer in the version
  5571. string.</li>
  5572. <li>Mark to Mark anchor classes should allow each mark
  5573. glyph also to contain a base mark entry.</li>
  5574. <li>Give unicode name data (in grey) for dotted names.
  5575. (ie for A.super give unicode name data for "A", but in
  5576. grey so it stands out as modified).</li>
  5577. <li>Add scripting routines to detach glyphs from the
  5578. encoding and to remove them from the font.</li>
  5579. <li>FF produced some very strange 'gasp' tables...
  5580. depending on the bitmap fonts in the sfd and not on the
  5581. bitmaps in the output ttf for one thing.</li>
  5582. <li>Werner wants an Invert Selection command.</li>
  5583. <li>The position of Coptic and Glagolithic has been
  5584. shifted in Unicode 4.1 (shifted from some earlier
  5585. proposal).</li>
  5586. <li>Patch by KANOU, ttc files were broken.</li>
  5587. <li>Some english language strings in the ttfnames pane of
  5588. fontinfo where sort of bound to equivalent fields in the
  5589. names pane. Make this clearer, and consistent.</li>
  5590. <li>Werner thinks my error messages for scripts should be
  5591. improved.</li>
  5592. <li>Add a check in case sfd files contain unreasonable
  5593. values for pixelsize, etc.</li>
  5594. <li>Werner suggests a --dry &lt;scriptfile&gt; argument
  5595. which does syntax checking without actually executing the
  5596. script. I think it is trivial.</li>
  5597. <li>Werner points out that the DSC Version comment has a
  5598. very specific syntax:<br />
  5599. %%Version: &lt;version&gt; &lt;revision&gt;<br />
  5600. &lt;version&gt; is a real, &lt;revision&gt; is a uint. So
  5601. we can't use the font's version string here (which might
  5602. be anything). Instead we now generate a version
  5603. comment<br />
  5604. %Version: &lt;string&gt;<br />
  5605. rather than a DSC Comment.</li>
  5606. <li>We used to assign a unicode value to ".notdef"s when
  5607. reading ps encoding file, if the encoding was in the
  5608. region of control chars (so location 1 would get uni0001,
  5609. while location 65 would get -1). Seems inconsistent.</li>
  5610. <li>Oops. I failed to provide a mechanism to add other
  5611. iconv encoding names into my menu.</li>
  5612. <li>Code to support group display.</li>
  5613. <li>Was not reading ps encoding files properly.</li>
  5614. <li>Remove encoding should always be available.</li>
  5615. </ul>
  5616. </li>
  5617. <li>19-July-2005
  5618. <ul>
  5619. <li>Extend to Unicode 4.1</li>
  5620. <li>Change to configuration system to allow relative
  5621. pathspecs for --with-freetype-src didn't work.</li>
  5622. <li>Context chain dlg had problems with empty patterns
  5623. (no terminal NUL in empty string used to represent
  5624. them)</li>
  5625. <li>The [EditData] button in contextual fontinfo pane was
  5626. disabled due to reasons which are no longer valid..</li>
  5627. <li>Transforming by a negative scale factor screwed up
  5628. the hints.</li>
  5629. <li>Add move up/down buttons to the kerning class dlg
  5630. (class lists area) Use the selection from the class lists
  5631. to highlight offsets.</li>
  5632. <li>Print sample did not handle kerning by classes.</li>
  5633. <li>When we had: a glyph which contained refs where that
  5634. glyph was itself used as a reference in another glyph and
  5635. all glyphs (except the last) lived in subroutines then we
  5636. got multiple declarations of hints and the middle glyph
  5637. was translated from where it should have been.</li>
  5638. <li>When changing lists they should not scroll back to
  5639. the beginning.</li>
  5640. <li>Various fixes regarding hints: changing hints should
  5641. set the char changed flag changing a glyph should mark
  5642. all glyphs that refer to it as having out of date hints
  5643. display out of date hints in font view. hints weren't
  5644. being preserved (and should have been) in charview in
  5645. Paste and transform.</li>
  5646. <li>Apply Substitutions was badly broken when ff compiled
  5647. with multilayer.</li>
  5648. <li>Kern Pair dlg looked at garbage memory when it closed
  5649. (and crashed sometimes).</li>
  5650. <li>ff decides whether to add a 'gasp' table to a font
  5651. based on whether the font has instructions or not. ff's
  5652. own ttf fonts contain instructions in .notdef but nowhere
  5653. else, so ignore .notdef when making this check.</li>
  5654. <li>One more attempt to rule out absurd results in
  5655. simplify().</li>
  5656. <li>if the lsb/rsb dlg was given a negative value it
  5657. complained about negative widths. (whether the width
  5658. would have been negative or not).</li>
  5659. <li>$italicangle has been broken since I added reals to
  5660. scripting.</li>
  5661. <li>The kernclass dialog did not handle deleted classes
  5662. properly.</li>
  5663. <li>Add ability to undo hints.</li>
  5664. <li>Once again starting a browser on windows is
  5665. broken.</li>
  5666. <li>We didn't do a bounds check when indexing into the
  5667. names array of an encoding (when building a character
  5668. from scratch). If the index was huge the result was
  5669. garbage, generally leading to a crash sometime
  5670. thereafter.</li>
  5671. <li>An open path consisting of a single point caused
  5672. replace with reference to crash.</li>
  5673. <li>Generating a postscript resource font on the mac from
  5674. a script did not work.</li>
  5675. <li>Werner points out that afm files generated by
  5676. FontForge still claim to have been made by pfaedit.
  5677. Oops.</li>
  5678. <li>Didn't parse user defined encodings properly and
  5679. often omitted the first glyph.</li>
  5680. </ul>
  5681. </li>
  5682. <li>24-June-2005
  5683. <ul>
  5684. <li>Improvements in the way type42 fonts where handled in
  5685. printing.</li>
  5686. <li>Fix a crash when parsing mangled cff files</li>
  5687. <li>Marvelous triple bug:
  5688. <ul>
  5689. <li>Adobe's Tech Note 5176 (cff format) says that a
  5690. private dict is required. They mean it's required in
  5691. a type1 font.</li>
  5692. <li>Because of this I put a null private dict entry
  5693. into my cid cff fonts.</li>
  5694. <li>ghostview finds the null private dict entry and
  5695. tries to read data from it even though it is of 0
  5696. length.</li>
  5697. </ul>
  5698. </li>
  5699. <li>Add postscript code necessary for loading a cff font
  5700. to my cff font output.</li>
  5701. <li>Fix some uninitialized variables in the display
  5702. dlg.</li>
  5703. <li>We didn't get DSC pages properly when printing a CID
  5704. keyed font.</li>
  5705. <li>The default (notdef) glyph generated by my palm
  5706. output routines was a little wonky.</li>
  5707. <li>The rle image reader in my sfd routines had an off by
  5708. one error causing it to reject some images.</li>
  5709. <li>We used to munch memory when loading empty glyphs
  5710. from mac NFNT resources.</li>
  5711. <li>It used to be that we didn't set the default
  5712. background until the first font view window was opened.
  5713. This meant that if we loaded a grey scale bitmap before
  5714. opening a window (ie. from the command line) then that
  5715. bitmap's clut would be relative to white rather than the
  5716. appropriate background.</li>
  5717. <li>Add some code to protect against badly generated
  5718. bitmap strikes in sfnts.</li>
  5719. <li>vhea &amp; vmtx tables were generally wrong in otf
  5720. fonts (unless the last full vmetric happened to be the
  5721. last full hmetric). Also fix problems with cid hmtx
  5722. output.</li>
  5723. <li>The sfd reader looked in the wrong place for sli
  5724. information in cid keyed fonts.</li>
  5725. <li>Damn. Default output (for stdout) encoding never gets
  5726. initialized when in a script.</li>
  5727. <li>I realized a few months ago that there is a
  5728. difference between encodings based on names and encoding
  5729. based on unicode codepoints. Unfortunately I was only
  5730. saving encodings as though they were based on names
  5731. (generating default names if necessary). This patch
  5732. retains the distinction even when encodings are saved to
  5733. the preferences folder.</li>
  5734. <li>AddAccent behaved differently when passed a glyphname
  5735. and a unicode code point. In the first case it used the
  5736. glyph specified. In the second it performed an arcane
  5737. search which would not always use the specified glyph
  5738. (left over from the days when it was important to use a
  5739. glyph in Adobe Standard so you could do a seac).</li>
  5740. <li>When debugging composite glyphs ff failed to notice
  5741. when we switched from one glyph to another and so failed
  5742. to reset the instruction list to those of the new
  5743. glyph.</li>
  5744. <li>Problem with cubic to quadratic spline approximation.
  5745. Fixed by a more careful comparison between original and
  5746. resulting spline.</li>
  5747. <li>Kerning (and Anchor positioning) didn't work when
  5748. printing to pdf.</li>
  5749. <li>Won-kyu Park points out that ff's internal utf7
  5750. parser (deep in the guts of sfd.c) only parses utf7
  5751. strings as produced by ff. He took a utf7 string produced
  5752. by python and inserted it and ff could not read it. He
  5753. provides a patch to fix the problem.</li>
  5754. <li>If we got an invalid second order spline, let's fix
  5755. it up into some vaguely reasonable form, so the poor user
  5756. doesn't keep getting errors.</li>
  5757. <li>Extra "-" in type42 header removed.</li>
  5758. <li>The anchor dialog was all screwed up.</li>
  5759. <li>The test in show att that all components of a
  5760. substitution existed failed to handle a trailing
  5761. space.</li>
  5762. <li>Make page Up/Down work in Show ATT</li>
  5763. <li>Sometimes the simplify algorithem fails to
  5764. converge.</li>
  5765. <li>When generating a tfm file the width (height, depth,
  5766. ic) table was being scaled twice.</li>
  5767. <li>Remove a NaN that occurred when moving quadratic
  5768. splines.</li>
  5769. <li>Oops. The unicode code point of a glyph was
  5770. restricted to BMP by Glyph Info dlg.</li>
  5771. <li>Werner gave me a font where the glyphs were not
  5772. properly ordered. So you can't tell the length of a glyph
  5773. by loca[i+1]-loca[i]. The data appear valid in spite of
  5774. that. So put in a warning for this particular case (we
  5775. were generating a warning, but it wasn't as meaningful as
  5776. it might be.)</li>
  5777. <li>Make View-&gt;Show ATT aware of the mark attachment
  5778. class info so it can show the classes.</li>
  5779. <li>When interpolating to quadratic fonts where the two
  5780. designs didn't match then the various possible errors
  5781. gave us bad splines: Different numbers of points on the
  5782. paths meant that the control points at the end (after we
  5783. reached the end of the contour in one design but not the
  5784. other) didn't match. Different designs meant that
  5785. interpolating a line (with no control points) to a curved
  5786. spline again produced nasties.</li>
  5787. <li>Drag and drop was broken.</li>
  5788. <li>Extend lookup flags support to include mark
  5789. attachment classes (as defined in GDEF).</li>
  5790. <li>Bad argument type checking on the AddAccent scripting
  5791. command.</li>
  5792. <li>Infinite loop in a rare case involving a flex hint at
  5793. the start of a contour.</li>
  5794. <li>The merge fonts command would crash.</li>
  5795. <li>Problems parsing some bare cff fonts.</li>
  5796. </ul>
  5797. </li>
  5798. <li>2-May-2005
  5799. <ul>
  5800. <li>Add support for Mark Classes.
  5801. <ul>
  5802. <li>New pane in Font Info to create them</li>
  5803. <li>New field in the feature tag dlg to use them</li>
  5804. <li>Input/Output routines</li>
  5805. </ul>
  5806. </li>
  5807. <li>Drag and drop was broken</li>
  5808. <li>Infinite loop in some bizarre cases when generating a
  5809. hinted opentype font.</li>
  5810. <li>The Merge Fonts command was broken</li>
  5811. <li>The scripting command: AddAccent checked for the
  5812. wrong argument type</li>
  5813. <li>ff generated an error when loading some bare cff
  5814. fonts.</li>
  5815. <li>Store desired fontview sizes in prefs file</li>
  5816. <li>Add a tweak to make the mac's dynamic loader look for
  5817. fink libraries</li>
  5818. <li>Problems parsing bare cff cid-keyed fonts</li>
  5819. <li>recognize that code page 932 is a variant of
  5820. SJIS</li>
  5821. <li>The feature tag 'nutf' is an obsolete name for
  5822. 'afrc'</li>
  5823. <li>Add a couple of new scripting functions
  5824. <ul>
  5825. <li>Int() which casts its real/int/unicode argument
  5826. to int</li>
  5827. <li>UCodePoint() which casts its real/int/unicode
  5828. argument to unicode</li>
  5829. </ul>
  5830. </li>
  5831. <li>scripting CharInfo no longer creates the glyph it is
  5832. asked about</li>
  5833. <li>WorthOutputting/DrawsSomething can now be applied to
  5834. the current selection</li>
  5835. <li>When using the freetype rasterizer don't do an
  5836. automatic close of open paths.</li>
  5837. <li>For SCWorthOutputting I used to check both that
  5838. !widthset and width==em-size. Remove the em-size check,
  5839. should be redundant and somethimes (marks) is wrong.</li>
  5840. <li>The various FindBounds routines didn't pad stroked
  5841. fonts appropriately</li>
  5842. <li>Discrepency in docs and code on spelling of scripting
  5843. Auto[tT]race command. Accept both variants</li>
  5844. <li>A debug statement was left in the ps interpreter</li>
  5845. <li>Make the help command look for japanese docs in the
  5846. ja locale</li>
  5847. <li>Add a select fewer scripting command</li>
  5848. <li>Fix some problems with custom encodings</li>
  5849. <li>Support '\r' and '\r\n' as line-endings for backslash
  5850. continuation</li>
  5851. <li>New version of Japanese UI</li>
  5852. <li>The kerning pair dlg would sometimes fail to display
  5853. a pair when searching on the second char of the
  5854. pair.</li>
  5855. <li>Danish translation of some style names, courtesy of
  5856. Anders Lund</li>
  5857. <li>Fix some problems with SJIS encoding</li>
  5858. <li>The point info dlg was quite unusable if you typed in
  5859. somethng which wasn't a number</li>
  5860. <li>When in debug mode display pointer position in
  5861. pixels</li>
  5862. <li>Point Info had problems with order2 splines</li>
  5863. <li>The instruction pane of the debug window was
  5864. interpretting keystrokes it should not have</li>
  5865. <li>Peter Selinger has changed the way potrace is built
  5866. so it no longer uses cygwin (it uses MinGW instead). This
  5867. means ff can't pass it the name of a temp file as
  5868. '/tmp/foo' because (on windows) /tmp is a cygwin fiction.
  5869. So continue to put the file on cygwin's /tmp, but cd to
  5870. that directory and then pass the bare filename.</li>
  5871. <li>Add some more greek PUA small caps</li>
  5872. <li>Add scroll bars to debug windows which lacked
  5873. them</li>
  5874. <li>Add a gloss window which explains what a ttf
  5875. instruction is going to use and what it is going to
  5876. do.</li>
  5877. <li>Was using the wrong accent to build cyrillic
  5878. breves.</li>
  5879. <li>Remove the adobe private use defs from libgunicode
  5880. and put them in fontforge.</li>
  5881. <li>ff had problems reading pfm files containing kerning
  5882. pairs using non-existant chars</li>
  5883. <li>Add pixels per em in register view.</li>
  5884. <li>No contours in twilight zone</li>
  5885. <li>When generating tt fonts we did not set bit 8 in
  5886. 'head'.Flags. This gives bad results when ppem is not an
  5887. integer</li>
  5888. <li>When reencoding to adobe standard (or any encoding
  5889. where glyph names are more important than code points)
  5890. make sure we use glyph names rather than code points (so
  5891. "f_i" is not in AdobeStd while "fi" is. But they map to
  5892. the same code point).</li>
  5893. <li>When creating a debug window in a glyph with no
  5894. instructions (or in which 'gasp' has turned off hinting)
  5895. we used not to rasterize it.</li>
  5896. <li>Script/lang count was wrong in a number of
  5897. places</li>
  5898. <li>Oops, the transform dlg and menu both used the "round
  5899. to int" string. Then I changed what it looked like in the
  5900. menu, a change which is not appropriate for the transform
  5901. dlg. Add a new string just for the dlg.</li>
  5902. <li>Tavmjong Bah added something to the "ypogegrammeni"
  5903. list.</li>
  5904. <li>Fix problems with multiple text fields in the same
  5905. window all wanting input contexts (for input
  5906. methods).</li>
  5907. <li>We generated ligature code in morx for ligatures that
  5908. were not worth outputting.</li>
  5909. <li>Pierre Hanser points out that a recent change to
  5910. SetWidth broke the scritping SetWidth command.</li>
  5911. <li>Yet more effort to remove rounding errors from remove
  5912. overlap. If a control point causes a slight overshoot we
  5913. get an unexpected extremum very close to one of the
  5914. endpoints. If it's close enough this can cause problems.
  5915. Tweak cps so this does not happen</li>
  5916. <li>Solaris stores isnan &amp; friends in ieeefp.h not in
  5917. math.h</li>
  5918. <li>Add scripting access to standard math functions
  5919. (trig, exp log)</li>
  5920. <li>Unary minus didn't work on reals</li>
  5921. <li>The recalculate bitmaps button in bitmap view was
  5922. getting munched when we updated the cursor position.</li>
  5923. <li>CharInfo("BBox") returned gibberish</li>
  5924. </ul>
  5925. </li>
  5926. <li>9-Mar-2005
  5927. <ul>
  5928. <li>Deleting a glyph class within a kerning by classes
  5929. object caused a crash</li>
  5930. <li>Added some support for palm bitmap fonts</li>
  5931. <li>Replace with reference only replaced the first
  5932. instance.</li>
  5933. <li>The Options dlg behaved oddly with respect to Apple
  5934. &amp; OpenType modes</li>
  5935. <li>When given a glyph with conflicting hints for which
  5936. the first contour contained no hints, then in type2
  5937. output the glyph was drawn at a strange offset from its
  5938. correct position.</li>
  5939. <li>When generating an opentype font from a script, and
  5940. specifying flags, the round coordinates flag was
  5941. ignored</li>
  5942. <li>When generating a font from a script using the
  5943. default flag setting, we would always generate
  5944. afm/tfm/pfm files</li>
  5945. <li>KANOU pointed out that the stroked font import glyph
  5946. command only worked if multilayer set.</li>
  5947. <li>Added a preview bitmap to eps files.</li>
  5948. <li>In a bitmap only font the font metrics menu items
  5949. behaved in unexpected ways (as if they referred to a
  5950. postscript font rather than the bitmap fonts)</li>
  5951. <li>Various fixes to make importing stroked eps files
  5952. into stroked fonts work better.</li>
  5953. <li>KANOU requests a preference item to turn off use of
  5954. freetype in font view.</li>
  5955. <li>Fix more rounding errors in remove overlap.</li>
  5956. <li>Fix some problems in the routine which finds roots of
  5957. an arbitrary quartic.</li>
  5958. <li>The remove bump option of simplify could screw up
  5959. memory.</li>
  5960. <li>Remove overlap got unhappy about control points which
  5961. caused a very tiny overlap between adjacent splines</li>
  5962. <li>Redo from the fontview usually caused a crash.</li>
  5963. <li>KANOU provides a MakeLine scripting command</li>
  5964. <li>If TYPE3 (multilayer) was not enabled, there was a
  5965. flow of control through a function which did not return
  5966. anything.</li>
  5967. <li>Recovery files did not contain multilayer marks which
  5968. lead to strange behavior and crashes</li>
  5969. <li>Converting a font to multilayer caused a crash if
  5970. there were outline glyph windows open.</li>
  5971. <li>Make the encoding for scripts be utf8
  5972. consistently</li>
  5973. <li>Allow the scripting Export command to take a format
  5974. spec</li>
  5975. <li>Add support for reals to the scripting language</li>
  5976. <li>NearlyHv{Cps,Lines} scripting commands erroneously
  5977. complained about too many args</li>
  5978. <li>ff had a bug when outputting otf contextual
  5979. ligatures</li>
  5980. <li>Fix various crashes and infinite loops involved in
  5981. parsing bad font files.</li>
  5982. <li>ff had problems with user defined encodings.</li>
  5983. <li>Made ff work if the psuedo-type "real" was defined to
  5984. be a double.</li>
  5985. <li>the string += concattonation operator in scripting
  5986. screwed up memory</li>
  5987. <li>Problems with -c &lt;arg&gt; syntax</li>
  5988. <li>The font type detector could fail to notice an svg
  5989. file as such if it began with a byte order
  5990. character.</li>
  5991. <li>Ord didn't do proper type checking on its second
  5992. argument</li>
  5993. </ul>
  5994. </li>
  5995. <li>9-Feb-2005
  5996. <ul>
  5997. <li>Use freetype's FT_Outline_Get_Bitmap to make freetype
  5998. rasterize from our internal data structures. Use freetype
  5999. by default for the fontview and metricsview (except in
  6000. some cases).</li>
  6001. <li>The bitmap dlg didn't work for multilayered fonts
  6002. when told to use freetype to rasterize.</li>
  6003. <li>If we had a contour nested inside another, and did an
  6004. Overlap Exclude with the nested contour selected, then
  6005. that contour was not excluded.</li>
  6006. <li>The []Correct Direction check box when importing
  6007. PostScript, didn't do anything. (or rather it did, but
  6008. got overrulled later)</li>
  6009. <li>In bitmap only fonts, bitmaps created without moving
  6010. the width line would get lost.</li>
  6011. <li>Added a scripting command "SelectByColor"</li>
  6012. <li>Don't apply transformations to glyphs which aren't
  6013. worth outputting</li>
  6014. <li>Moving control points with the get point info command
  6015. had problems in quadratic splines.</li>
  6016. <li>When adding type42 support I broke multiple master
  6017. support.</li>
  6018. <li>Werner provided a patch to add a trailing newline to
  6019. my type1 fonts.</li>
  6020. <li>Support for PaintType==2 and stroked fonts.</li>
  6021. <li>Various problems with the clustering command</li>
  6022. <li>Oops, somehow a patch reverted and things didn't work
  6023. on systems without iconv</li>
  6024. <li>worked on a couple of other configuration problems
  6025. for the mac</li>
  6026. <li>Some people install libraries without headers. Be
  6027. prepared.</li>
  6028. <li>Uniscribe (MS unicode text layout routines) may
  6029. ignore either the GPOS or the GSUB table depending on the
  6030. script, and may even refuse to use the font at all if it
  6031. doesn't have the right stuff in GPOS/GSUB. A Hebrew font
  6032. must have both a GPOS and a GSUB. If it doesn't the font
  6033. is not used. A latin font need not have either, but if it
  6034. doesn't have GSUB then GPOS won't be used.
  6035. <p>So the script sub-table of both GPOS/GSUB should
  6036. contain all scripts used in either (rather than just
  6037. the scripts used in the current one).</p>
  6038. </li>
  6039. <li>The AddATT scripting command didn't understand
  6040. Nested.</li>
  6041. <li>Add a cli argument "-c" to introduce a scripting
  6042. command in an argument.</li>
  6043. <li>Someone ran ff on a solaris box without iconv. (Odd
  6044. because iconv is there by default). FF ran fine (Odder,
  6045. why didn't it demand the library?), but crashed when it
  6046. tried to use a conversion which didn't exist.</li>
  6047. <li>There's another ASCII map in Unicode
  6048. (0xe0000-0xe007f).</li>
  6049. <li>Allow user to supply their own OtherSubrs routines
  6050. (Some people object to Adobe's copyright).</li>
  6051. <li>Codes to handle identifying a loaded font by relative
  6052. filespec didn't work.</li>
  6053. <li>Change Add Extrema so that it only adds extrema if
  6054. <ol>
  6055. <li>The spline length is &gt;= em_size/32</li>
  6056. <li>The extremum is an extremum of the entire contour
  6057. containing the spline.</li>
  6058. </ol>
  6059. <p>(Behavior in the outline view when there is a
  6060. selection remains the same. So if the endpoints of a
  6061. spline are both selected then all local extrema will be
  6062. added to that spline, no matter how long it may
  6063. be).</p>
  6064. </li>
  6065. <li>Patch by Ralf Stubner. Fonts without UniqueID had a
  6066. bad syntax.</li>
  6067. </ul>
  6068. </li>
  6069. <li>17-Jan-2005
  6070. <ul>
  6071. <li>CapsLock now makes the arrow keys scroll in the
  6072. outline view</li>
  6073. <li>We lost count of hints when generating type2 fonts in
  6074. glyphs with references to something containing hints
  6075. which did not overlap. If we were unlucky,
  6076. &lt;new-cnt+7&gt;/8 was different than
  6077. &lt;real-cnt+7&gt;/8 and we ended up with garbage in the
  6078. charstring.</li>
  6079. <li>Add a TeX table to contain TeX metrics.</li>
  6080. <li>TFM output was wrong. the TFtoPL doc says "</li>
  6081. <li>reencoding with original encoding could create a
  6082. glyph table one too small resulting in writing/reading
  6083. garbage and an eventual crash.</li>
  6084. <li>KANOU fixed a couple of problems in reading glyph
  6085. names from bdf fonts.</li>
  6086. <li>KANOU needed to disambiguate between "Point" a unit
  6087. of measurement and "Point" a geometric object.</li>
  6088. </ul>
  6089. </li>
  6090. <li>16-Jan-2005
  6091. <ul>
  6092. <li>Added support for OpenType Device Tables (These allow
  6093. you to add small corrections to things like kerning at a
  6094. given point size. Often at small point sizes kerning and
  6095. advance widths will round in such a way as to produce
  6096. unpleasing results. Device tables allow you to correct
  6097. for that).</li>
  6098. <li>Add dialogs for kerning pairs and anchors to allow
  6099. users to set device tables. Extend dlg for kerning
  6100. classes for this.</li>
  6101. <li>Neil Parker suggested a patch for panose values that
  6102. didn't apply to latin fonts</li>
  6103. <li>Doing a Get Info on a single point caused a crash on
  6104. the mac</li>
  6105. <li>Further attempts to improve spline approximation,
  6106. underlying Merge &amp; Simplify commands</li>
  6107. <li>Relaxed simplify's definition of parallel so it will
  6108. merge a few more straight lines.</li>
  6109. <li>Make the behavior of Simplify More consistant across
  6110. font/outline view. Simplify More can now set the default
  6111. behavior for future simplify commands.</li>
  6112. <li>Provide a menu command to round to hundredths of a
  6113. em-unit</li>
  6114. <li>Add a new facility to cluster coordinates to the same
  6115. value. Useful as a prepass to Remove Overlap.</li>
  6116. <li>Bug reading ligature data from a tfm file</li>
  6117. <li>Add support for GPOS 'size' feature. Create a 'size'
  6118. pane of the fontinfo dlg</li>
  6119. <li>Replace with Reference had an interesting flaw.
  6120. Consider the open and closed bullet characters. If the
  6121. (single) contour in closed bullet matched the outer
  6122. contour in open bullet then it would replace it with a
  6123. reference. But this is incorrect as the two contours of
  6124. open bullet need to be treated as a unit.</li>
  6125. <li>Could get a bad memory reference in the font view if
  6126. the mouse were to extend the selection outside of the
  6127. window.</li>
  6128. <li>Add a scripting function to return whether a file
  6129. exists.</li>
  6130. <li>In a Type1 font, if a glyph had no conflicting hints
  6131. (and no flex hints) and got put in a subroutine, then
  6132. we'd get no hints at all.</li>
  6133. <li>Be more willing to generate format12 cmap subtables
  6134. (unicode, non-bmp tables)</li>
  6135. </ul>
  6136. </li>
  6137. <li>6-Jan-2005
  6138. <ul>
  6139. <li>New Copyright message, etc. Get rid of pfaedit
  6140. message.</li>
  6141. <li>Simplify produced strange results on quadratic
  6142. splines.</li>
  6143. <li>Simplify had problems with tangent points</li>
  6144. <li>Changing a point's type from a tangent to a curve
  6145. usually had unexpected results.</li>
  6146. <li>Add a warning message in remove overlap when user
  6147. passes us two intersecting contours which are oriented in
  6148. oposite directions. Unfortunately it also complains about
  6149. some other things.</li>
  6150. <li>The 18 Dec changes to remove overlap introduced an
  6151. infinite loop in some rare cases. (When there is a
  6152. gradient of 0 in distance function between two
  6153. splines).</li>
  6154. <li>In a conditional operator (like &amp;&amp; or ||) in
  6155. scripting where the second operand was not evaluated and
  6156. the second operand contained a procedure call, then ff
  6157. would crash</li>
  6158. <li>Tweaked the point info dialog to show small offsets
  6159. better</li>
  6160. <li>Tweaked the merge command to behave better when
  6161. merging tiny spline segments (where the length of the
  6162. spline segment is so small that it should just be treated
  6163. as a zero length spline and its slope ignored).</li>
  6164. <li>Added an "Invert selection" command to the outline
  6165. view, from Yoshiki Hayashi</li>
  6166. <li>Pasting from the font view did not clear a glyph's
  6167. instructions.</li>
  6168. <li>New version of AutoHint. I've removed Diagonal Stem
  6169. hints and mimum distance hints for now.</li>
  6170. </ul>
  6171. </li>
  6172. <li>31-Dec-2004
  6173. <ul>
  6174. <li>Ah, windows pfm files expect the metrics to be output
  6175. in win latin encoding order, not in the encoding defined
  6176. by the pfb file. (Actually there are other posibilities
  6177. for encoding, but as none is documented, I must ignore
  6178. them).</li>
  6179. <li>ReplaceWithReference broke at some point</li>
  6180. <li>Add an argument-pair to the ReplaceWithReference()
  6181. scripting command to allow the user to specify the amount
  6182. of error that will be accepted.</li>
  6183. <li>When generating a Type1 font, if a glyph had a single
  6184. reference to a glyph not in adobe encoding, and that
  6185. glyph itself had a single reference (in adobe enc) and
  6186. some splines, then ff would make a reference to the ref
  6187. in adobe enc and ignore the splines.</li>
  6188. <li>Upgrade to Adobe-Japan1-6</li>
  6189. <li>Various fixes to svg output
  6190. <ul>
  6191. <li>export glyph to svg didn't work</li>
  6192. <li>multilayered generation had problems</li>
  6193. </ul>
  6194. </li>
  6195. <li>Ghost hints could get outside a glyphs bounding box
  6196. in a type2 font.</li>
  6197. <li>The generated truetype unique id string had an off by
  6198. one error in the month</li>
  6199. <li>Add support for dashed lines in multilayered
  6200. mode</li>
  6201. <li>In Full Page Glyph printing, the glyph was offset
  6202. slightly from where it should have been.</li>
  6203. <li>Pasting a reference into a multi-layered font
  6204. produced a very odd layer</li>
  6205. <li>ff didn't update the metrics view if the user pasted
  6206. the selection with the middle mouse button.</li>
  6207. <li>if a character were not in the current encoding then
  6208. ff would not display it in the metrics view (even if it
  6209. were in the font)</li>
  6210. <li>Make the behavior of control points at the ends of
  6211. open paths more reasonable.</li>
  6212. <li>The Point-&gt;Curve command did not adust control
  6213. points correctly.</li>
  6214. <li>The View-&gt;Display Substitutions had numerous
  6215. problems.</li>
  6216. <li>Fix several problems from unicode unification of
  6217. accents. Many characters which are said to be based on
  6218. cedilla actually use a comma, other characters said to be
  6219. carons also use comma. Make the n-with-apostrophe
  6220. character be treated as an accented letter.</li>
  6221. <li>Werner points out that straight lines should
  6222. generally not be simplified (as they will no longer be
  6223. straight afterwards). Add this knowledge to the simplify
  6224. command.</li>
  6225. </ul>
  6226. </li>
  6227. <li>18-Dec-2004
  6228. <ul>
  6229. <li>Added a raster debugger wndow</li>
  6230. <li>Each time debugger starts, remember what debug
  6231. windows were open last time it was used.</li>
  6232. <li>Constraining the pen tool did not do what I
  6233. expected</li>
  6234. <li>If a glyph was encoded twice (or more) in a font, and
  6235. an opentype font (or perhaps a bitmap only sfnt) were
  6236. generated, then any glyphs after the second encoding
  6237. would have the wrong width (ie. there would be an extra
  6238. entry in the horizontal metrics table corresponding to a
  6239. (non-existant) copy of the doubly encoded glyph)</li>
  6240. <li>If a type1 font never defined .notdef but used it at
  6241. least twice it the Encoding vector, then ff would
  6242. crash.</li>
  6243. <li>Updated Japanese UI (by KANOU)</li>
  6244. <li>Werner found some crashes related to calling isalnum
  6245. (etc.) using an index outside of bmp.</li>
  6246. <li>More changes (I hope improvements) to remove
  6247. overlap</li>
  6248. </ul>
  6249. </li>
  6250. <li>13-Dec-2004
  6251. <ul>
  6252. <li>Some fixes to the raster display of the debug
  6253. window</li>
  6254. <li>Conversion of cubic to quadratic had a rounding error
  6255. introduced by -O2. Made it a bit more forgiving about
  6256. rounding errors.</li>
  6257. <li>Added two new buttons to the point info dialog to
  6258. allow the user to walk around the current contour
  6259. (Normally the Next button skips to the start of the next
  6260. contour if you are at the end of the current one, the
  6261. "Next On Contour" button returns to the first point on
  6262. the contour)</li>
  6263. <li>improve interpretation of some type3 fonts (including
  6264. those produced by fontographer 4)</li>
  6265. <li>patch by Yoshki Hayashi to fix mnemonic crash in
  6266. layers palette</li>
  6267. <li>Added a rand() scripting command</li>
  6268. <li>Support backslash newline to break up lines in a
  6269. scrpt</li>
  6270. <li>The internal adobe standard encoding thought it was
  6271. unicode causing strange effects</li>
  6272. <li>Type3 fonts that set colour/grey didn't work</li>
  6273. <li>Printing at 140pt tried printing 4 glyphs across
  6274. although there was only room for 3</li>
  6275. <li>At install tell pkg-config the verson of
  6276. fontforge</li>
  6277. </ul>
  6278. </li>
  6279. <li>3-Dec-2004
  6280. <ul>
  6281. <li>If a cff file contained unencoded glyphs then ff
  6282. would crash when loading it.</li>
  6283. <li>When converting from cubic to quadratic splines, ff
  6284. would sometimes produce a line when it should have found
  6285. a spline</li>
  6286. <li>During debugging of a ttf glyph, show what
  6287. rasterization would produce if the current splines were
  6288. used (highlight pixels which change)</li>
  6289. <li>The debugger windows didn't always say
  6290. "&lt;empty&gt;" when they should have.</li>
  6291. <li>The debugger would often crash the second time we
  6292. closed its window</li>
  6293. <li>Asking for the script (as latin, greek, cyrillic...)
  6294. of ".notdef" caused us to look at unallocated
  6295. memory.</li>
  6296. <li>We weren't labelling control points in the
  6297. debugger</li>
  6298. <li>debugger and grid fitter for tt fonts showed curved
  6299. splines as lines</li>
  6300. <li>Kerning pairs did not get scaled when changing
  6301. em-size</li>
  6302. <li>Add a preference for turning off automatic gotos as
  6303. the user types in the glyph window</li>
  6304. <li>Add a command to the glyph window to toggle between
  6305. the two most recent glyphs used in that window (a mini
  6306. history)</li>
  6307. <li>Improved the points debugger window to show
  6308. <ul>
  6309. <li>implied points</li>
  6310. <li>whether a point is on or off the curve (normal or
  6311. control)</li>
  6312. <li>added a scroll bar</li>
  6313. </ul>
  6314. </li>
  6315. <li>Provide info on debugging points as mouse moves over
  6316. them.</li>
  6317. <li>Fix (an innocuous) reference to unallocated
  6318. memory</li>
  6319. <li>Added ability to insert an uninterpreted table into
  6320. an SFNT
  6321. <ul>
  6322. <li>New preference item: PreserveTables which lists a
  6323. comma separated set of table tags which are to be
  6324. loaded from SFNT files without interpretation (Note
  6325. if ff thinks it understands a table it will parse it
  6326. rather than preserving it)</li>
  6327. <li>Scripting command LoadTableFromFile("tag
  6328. ","filename")</li>
  6329. <li>Scripting command SaveTableToFile("tag
  6330. ","filename")</li>
  6331. <li>Scripting command RemovePreservedTable("tag
  6332. ")</li>
  6333. <li>Scripting command HasPreservedTable("tag ")</li>
  6334. </ul>
  6335. </li>
  6336. </ul>
  6337. </li>
  6338. <li>22-Nov-2004
  6339. <ul>
  6340. <li>Kevin Schoedel suggests a new scripting command
  6341. DrawsSomething()</li>
  6342. <li>Kevin Schoedel requests that PrintFont be able to
  6343. print a string sample (as opposed to a sample file)</li>
  6344. <li>Kevin Schoedel points out that type1 fonts stuffed
  6345. into mac resource forks are to be read in resource order
  6346. rather than file order (often the two are the same) and
  6347. provides a patch to fix this.</li>
  6348. <li>Change the way the default language/locale is picked
  6349. in fontinfo-&gt;TTF Names</li>
  6350. <li>Remember (across invocations) whether palettes should
  6351. be hidden or not.</li>
  6352. <li>Ignore NUL chars when reading PostScript strings (PS
  6353. supports NULs in strings, I'm not going to bother, but I
  6354. don't want to parse incorrectly because of them).</li>
  6355. <li>ff lost the ability to Select("U+xxxx") or
  6356. Select("=") from a script.</li>
  6357. <li>Oops, the routine to read PostScript FontNames from a
  6358. ttf file was broken by the encoding change.</li>
  6359. <li>If a ttf file contained an erroneous composite glyph
  6360. with flags indicating more components after the glyph had
  6361. run out of data, then ff might attempt to read
  6362. instructions also and have problems.</li>
  6363. <li>If a font contains multiple ttf names for a given
  6364. string in a language then allow the user to pick which
  6365. one s/he likes best.</li>
  6366. <li>Another case where a bad otf table crashes
  6367. fontforge</li>
  6368. <li>If a ttf/otf font does not contain a postscript
  6369. FontName string in the name table, then ff's attempt to
  6370. synthesize one out of fullname/familyname did not check
  6371. for a valid name.</li>
  6372. </ul>
  6373. </li>
  6374. <li>15-Nov-2004
  6375. <ul>
  6376. <li>If ff started without a prefs file, then creating a
  6377. new font would crash</li>
  6378. <li>If a copyright string contained a newline then ff
  6379. would generate bad postscript</li>
  6380. <li>If user added a comment to an empty glyph then the
  6381. comment wasn't saved in the sfd file.</li>
  6382. <li>If ff saved a utf7 string to an sfd file (ttf names,
  6383. etc.) and that string contained a hyphen that followed
  6384. immediately after something that needed to be encoded in
  6385. base64, then the hyphen would be lost.</li>
  6386. <li>new french UI</li>
  6387. <li>ff was (usually) setting the ascent/descent fields of
  6388. the 'hhea' table to 0. When the font was drawn on the mac
  6389. it was clipped to nothing. <span class="c2"><strong><big>
  6390. Caveat: Old sfd files are still broken and there is no
  6391. UI for fixing them. Instead you must edit them
  6392. manually, and change:</big></strong></span>
  6393. <pre>
  6394. HheadAOffset: 0
  6395. HheadDOffset: 0
  6396. </pre>
  6397. <p>to be:</p>
  6398. <pre>
  6399. HheadAOffset: 1
  6400. HheadDOffset: 1
  6401. </pre>
  6402. </li>
  6403. </ul>
  6404. </li>
  6405. <li>12-Nov-2004
  6406. <ul>
  6407. <li>ff would crash on postscript fonts where the encoding
  6408. included a glyph name not defined in CharStrings
  6409. (probably broken on 12-Oct)</li>
  6410. <li>More remove overlap work</li>
  6411. <li>In the glyph window, when the scaled distance between
  6412. the top and bottom of the window is less than 1 em-unit,
  6413. then the vertical ruler was drawn with the top and bottom
  6414. labels reversed.</li>
  6415. <li>sfd files used to have a limit of 1023 characters in
  6416. ttf 'name' table strings.</li>
  6417. </ul>
  6418. </li>
  6419. <li>6-Nov-2004
  6420. <ul>
  6421. <li>Encoding change broke prefs dialog</li>
  6422. </ul>
  6423. </li>
  6424. <li>5-Nov-2004
  6425. <ul>
  6426. <li>Encoding change didn't work on libiconv systems</li>
  6427. </ul>
  6428. </li>
  6429. <li>4-Nov-2004
  6430. <ul>
  6431. <li>Added a new scripting command: AddAccent() to add an
  6432. arbitrary accent to an arbitrary glyph.</li>
  6433. </ul>
  6434. </li>
  6435. <li>3-Nov-2004
  6436. <ul>
  6437. <li>KANOU has a <a href=
  6438. "http://khdd.net/fontforge-jman/">Japanese version</a> of
  6439. this reference manual under construction.</li>
  6440. <li>In MultiLayered mode, the "New Layer" menu item left
  6441. a dangling pointer which caused a crash if anyone looked
  6442. at the background layer.</li>
  6443. <li>In MultiLayered mode, if one clicked beyond the last
  6444. layer in the Layers palette, ff would crash.</li>
  6445. <li>KANOU provided a patch to fix another crash in the
  6446. layers palette.</li>
  6447. <li>KANOU has provided a new Japanese UI.</li>
  6448. <li>Made an addition to CharInfo() scripting command so
  6449. user can determine the horizontal extrema of a glyph at a
  6450. given vertical position. Similar addition for vertical
  6451. extrema at horizontal pos.</li>
  6452. <li>Add a scripting command (PasteWithOffset) to allow
  6453. user to apply an offset when pasting. For building
  6454. accented letters by hand.</li>
  6455. <li>KANOU provides a patch to fix a problem in the new
  6456. encoding stuff.</li>
  6457. <li>Select(".notdef") usually didn't work.</li>
  6458. </ul>
  6459. </li>
  6460. <li>28-Oct-2004
  6461. <ul>
  6462. <li>Kanou noticed that ISO 15924 has been updated and
  6463. provide a patch including new scripts.</li>
  6464. <li>I have redone the way ff handles encodings
  6465. internally. We used to depend on the encodings builtin to
  6466. gdraw/gunicode. Now we use iconv() (if there is no iconv,
  6467. then ff will use a dummy iconv which understands the
  6468. encodings of gdraw/gunicode). Encodings are identified by
  6469. name rather than by number now.</li>
  6470. <li>Further fixes to the extremum detector</li>
  6471. <li>Further fixes to remove overlap</li>
  6472. <li>Added an extra argument to scripting RoundToInt, so
  6473. that you can have control over what it rounds to (ie.
  6474. round to hundredths, tenths, etc.)</li>
  6475. <li>Added two new scripting commands NearlyHvCps() and
  6476. NearlyHvLines() which look for control points or lines
  6477. that are nearly horizontal or vertical and force them to
  6478. be horizontal or vertical.</li>
  6479. <li>Kanou provided a patch so that the GRadio.Font
  6480. resource controls the font in the layers palette of the
  6481. glyph view.</li>
  6482. </ul>
  6483. </li>
  6484. <li>23-Oct-2004
  6485. <ul>
  6486. <li>Remove overlap had problems with splines which made
  6487. abrupt turns (ie. tiny splines after we found extrema
  6488. points and divided the spline into bits between
  6489. extrema)</li>
  6490. <li>Remove overlap could munch memory</li>
  6491. <li>The ruler tool showed all tiny splines as having a
  6492. length of 0</li>
  6493. <li>Autorecovery had problems with glyphs containing
  6494. features (would complain about sli)</li>
  6495. <li>KANOU wants to be able to scale greymap fonts</li>
  6496. <li>removed routines from fvcomposit.c, metricsview.c
  6497. that were duplicates of fvfonts.c</li>
  6498. <li>Oops, the default mac filesystem isn't case concious
  6499. either, extend the windows export patch to the mac.</li>
  6500. <li>Simplify didn't have a very good extremum detector
  6501. and would sometimes delete extrema.</li>
  6502. </ul>
  6503. </li>
  6504. <li>14-Oct-2004
  6505. <ul>
  6506. <li>Remove overlap had problems with tiny splines.</li>
  6507. </ul>
  6508. </li>
  6509. <li>13-Oct-2004
  6510. <ul>
  6511. <li>I notice (in Fontes &amp; Codages) that the labels in
  6512. the metrics view aren't translatable</li>
  6513. <li>Fontes &amp; Codages suggests that it would be nice
  6514. if the glyph labels in the fontview could be something
  6515. other than an image of the glyph (glyph name, unicode
  6516. code point, encoding, etc.)</li>
  6517. <li>Change the word "Character" to "Glyph" where
  6518. appropriate.</li>
  6519. <li>Move the Open Outline/Bitmap/Metrics commands to the
  6520. Window menu, and change "Open" to "New".</li>
  6521. </ul>
  6522. </li>
  6523. <li>12-Oct-2004
  6524. <ul>
  6525. <li>We have a Spanish UI now, courtesy of Walter Echarri.
  6526. Yeah!</li>
  6527. <li>Support for loading type3 fonts (that ff produced)
  6528. was broken. Note: ff is still unable to load many type3
  6529. fonts (any that are filtered, or that use images for
  6530. example), but it should be able to read its own
  6531. fonts.</li>
  6532. <li>(I hope) minor change to the way .notdef is handled
  6533. when reading postscript files.</li>
  6534. <li>Added support for printing to pdf file</li>
  6535. <li>(fixed a bug in pdf generation from the export
  6536. command)</li>
  6537. <li>Fixed various problems from turning off the
  6538. multilayer bit in fontinfo</li>
  6539. <li>KANOU needs a couple more strings disambiguated.</li>
  6540. <li>Add support for generating type42 and type 11 (type42
  6541. cid) fonts, add support for loading type42 (but I'm not
  6542. bothering with type11s) and use these guys when printing
  6543. order2 fonts.</li>
  6544. <li>Check to make sure the PostScript Fontname is valid
  6545. when reading in a truetype (or svg) font (syntax doesn't
  6546. enforce this), and if not warn the user and fix it
  6547. up.</li>
  6548. <li>Add some new scripting commands for handling MM fonts
  6549. since someone seems to want them.</li>
  6550. <li>Used to complain if there were more than one Unique
  6551. Font ID in the truetype 'name' table. (because the
  6552. OpenType list said there should only be one, else it
  6553. would not be unique). But both Apple and MS ship with
  6554. fonts containing multiple Unique Font IDs. God knows what
  6555. that means, or when you pick one over the other... Anyway
  6556. I changed my error into a warning.</li>
  6557. </ul>
  6558. </li>
  6559. <li>30-Sept-2004
  6560. <ul>
  6561. <li>I have rewritten Remove Overlap from scratch. I seems
  6562. less likely to crash, but I'm not sure that in any other
  6563. respect it is improved.</li>
  6564. <li>In the character view the Remove Overlap (and
  6565. Intersect and Find Intersections) now only work on
  6566. selected contours, or, if no contours are selected then
  6567. on all contours. This change makes these commands
  6568. consistant with most other commands in the character
  6569. view, but it is a change from past behavior.</li>
  6570. <li>The Import scripting command has been extended to
  6571. give the user control over the stroking flags (correct
  6572. direction, remove overlap, handle erasers). And the
  6573. background flag has been extended a bit to apply to other
  6574. things than bitmaps.</li>
  6575. <li>ff had a pointer dangling to a freed block after
  6576. loading a font containing multiple versions of some greek
  6577. letters.</li>
  6578. <li>U+1D400-U+1D7FF are stylized variants of the latin
  6579. and greek alphabets as used in Mathematics. The font view
  6580. will now display (in the glyph header) the proper variant
  6581. of the glyph (assuming it can find a font with that
  6582. style).</li>
  6583. <li>The AMS (American Mathematical Society) has their own
  6584. interpretation of the public use area. FF now understands
  6585. their glyph names as alternates for those glyphs, and has
  6586. an AMS interpretation (under FontInfo-&gt;Encoding) that
  6587. will make ff use those names in new fonts.</li>
  6588. <li>Many of code points in the AMS PUA are reencodings of
  6589. other glyphs. FontForge will automatically generate these
  6590. reencodings for you.</li>
  6591. <li>The AMS also describes how some TeX glyph names map
  6592. to unicode. So include those names in our alternate list
  6593. too (so we can map them correctly, not as a way of
  6594. encouraging people to use them).</li>
  6595. <li>Both the AMS defn. of the PUA and the Big5 defn. map
  6596. characters which are properly in other unicode planes
  6597. into the BMP. FF now understands this, and converting
  6598. between a BMP encoding and a full unicode encoding will
  6599. move things from the PUA to their proper unicode slot in
  6600. higher planes.</li>
  6601. <li>Find Problems thought that adjacent splines
  6602. intersected at their common end-point. I suppose they do,
  6603. but it isn't useful information</li>
  6604. <li>In the char view, I used to blank out the status line
  6605. when the mouse moved outside the window. But some of that
  6606. info is still valid. So only blank out the meaningless
  6607. bits.</li>
  6608. <li>Kanou requests a disambiguation between two strings
  6609. with the same label in English but different meanings in
  6610. Japanese. (Vertical/VerticalWriting)</li>
  6611. <li>The Point-&gt;Make Line command would crash if either
  6612. of the two points was missing a previous or next
  6613. spline.</li>
  6614. <li>Pierre HANSER provides a patch to problems.c (it
  6615. would crash when dealing with fonts with an encoding with
  6616. &lt; 32 code points.</li>
  6617. <li>Pierre HANSER provides a patch to merge fonts (it
  6618. would crash when merging bitmap fonts.</li>
  6619. <li>Closing a charview window with a docked palette could
  6620. cause a crash if the cursor was moved quickly into
  6621. another charview which needed a new cursor.</li>
  6622. <li>The perspective icon had the wrong background</li>
  6623. <li>Piska keeps complaining about the way ff handles 0
  6624. width strokes. He wants it to have zero width (disappear,
  6625. I guess), but PS says it should be stroked as the
  6626. thinnest line possible (not clear what this should mean
  6627. in ff, I interpret it as a 1em-unit stroke). But METAPOST
  6628. uses a 0 width stroke in cases where it wants no stroking
  6629. (with a fill) so in the special case of a fill with a 0
  6630. width stroke, turn off stroking.</li>
  6631. <li>Use a different approach to approximating a set of
  6632. points with fixed slopes at the end points. Used to do
  6633. least squares (fixup slopes), least squares again (fixup
  6634. slopes). Now I do least squares (fixup slopes), perturb
  6635. the lengths of the slope vectors until we find the best
  6636. fit.</li>
  6637. <li>I was generating flex hints when I should not have
  6638. done so. Add a heuristic so that ff doesn't add flexes to
  6639. small circles.</li>
  6640. <li>Failed to read long format pk bitmaps.</li>
  6641. <li>Patch by Mchael Ghrken to make the Skew scripting
  6642. command take a numerator/denominator style argument.</li>
  6643. </ul>
  6644. </li>
  6645. <li>24-Aug-2004
  6646. <ul>
  6647. <li>Oops, didn't get the expand stroke scripting patch
  6648. quite right</li>
  6649. <li>
  6650. <span class="c2"><strong><big>Changed the way
  6651. preferences are handled in
  6652. scripts</big></strong></span>
  6653. <ul>
  6654. <li>By default preferences are no longer loaded when
  6655. starting a script.</li>
  6656. <li>Preferences are not saved in a script unless
  6657. explicitly requested.</li>
  6658. <li>Added 2 new scripting functions LoadPrefs() and
  6659. SavePrefs()</li>
  6660. <li>Added an environment variable FONTFORGE_LOADPREFS
  6661. to give the user control over loading of
  6662. preferences.</li>
  6663. </ul>
  6664. </li>
  6665. <li>Used to have a preference item DumpGlyphMap. Now we
  6666. have an equivalent flag in the Generate Fonts [Options]
  6667. dialog.</li>
  6668. <li>The SetPanose scripting command didn't work. MURAOKA
  6669. Taro provides a patch</li>
  6670. <li>It was not possible to get or set NewCharset
  6671. preference item with GetPref/SetPref scripting commands.
  6672. Now GetPref returns a magic number, which may be used in
  6673. SetPref. SetPref will accept either a number or one of
  6674. the encodings accepted by Reencode().</li>
  6675. <li>If you copied a glyph feature from a glyph that
  6676. didn't have that feature, and then did a paste ff would
  6677. crash.</li>
  6678. <li>Added two new tools to the outline character view.
  6679. One allows you to rotated your glyph through 3dimensions
  6680. (and project it back on the xy plane), the other allows
  6681. you to do a perspective transformation.</li>
  6682. <li>Extended the Transformation dialog to handle 3D
  6683. rotation+projection. After all it's just:
  6684. <table border="1" cellpadding="2" align="center">
  6685. <tr>
  6686. <td>cos(y-axis-rotation)</td>
  6687. <td>
  6688. <p class="c3">0</p>
  6689. </td>
  6690. </tr>
  6691. <tr>
  6692. <td>
  6693. <p class="c3">0</p>
  6694. </td>
  6695. <td>cos(x-axis-rotation)</td>
  6696. </tr>
  6697. </table>
  6698. </li>
  6699. <li>Add a Point of View dialog to do real perspective
  6700. projections</li>
  6701. <li>Remove the FONTFORGE_CONFIG_NONLINEAR flag, and
  6702. enable the nonlinear dlg perminantly. I need some of its
  6703. routines to do the perspective projections.</li>
  6704. <li>There was a path through LoadEncodingFile (in a
  6705. script) where it would silently fail.</li>
  6706. <li>LoadEncodingFile would save default encodings even
  6707. though it hadn't loaded them. It no longer does this, but
  6708. now SavePrefs does it instead.</li>
  6709. <li>Added the ability to see (and create) simple
  6710. substitutions in the font view.</li>
  6711. <li>The embossed box around the fontinfo dlg wasn't
  6712. always in the right place</li>
  6713. </ul>
  6714. </li>
  6715. <li>8-Aug-2004
  6716. <ul>
  6717. <li>Zhang Lin-bo reports two bugs (which were really
  6718. three)
  6719. <ul>
  6720. <li>Expand Stroke failed when given a path consisting
  6721. of a single point had a zero length spline returning
  6722. to itself.</li>
  6723. <li>AddExtrema falls into an infinite loop if the
  6724. initial spline of a path needs an extremum added to
  6725. it.</li>
  6726. <li>Expand Stroke generates garbage output in some
  6727. very obscure conditions.</li>
  6728. <li>AutoHint crashes when given garbage input.</li>
  6729. </ul>
  6730. </li>
  6731. <li>Michael Gährken points out that ExpandStroke
  6732. scripting command doesn't work for caligraphic stroking,
  6733. provides a patch and an extension.</li>
  6734. <li>KANOU provides a patch for BDFMakeChar in CID keyed
  6735. fonts.</li>
  6736. <li>Change the Shades palette in the bitmap view so that
  6737. it shows what grey level is underneath the cursor.</li>
  6738. <li>When the width is huge, then moving it causes it to
  6739. wrap into negative values. It should probably stick at
  6740. SHRT_MAX instead.</li>
  6741. <li>If one moves to a negative width and releases the
  6742. mouse, an error message pops up warning of this. If you
  6743. move the cursor around the width continued to
  6744. change.</li>
  6745. <li>If one moves to a negative width, and in response to
  6746. the width warning says [No] then the width reverted to
  6747. the wrong value.</li>
  6748. <li>ff would crash on a postscript sequence containing
  6749. "{}" if that was the first function defined.</li>
  6750. <li>I got the locale wrong for Hong Kong</li>
  6751. <li>If nothing was selected in the import dlg (or any of
  6752. the file open dlgs) and the user pressed [OK], then the
  6753. directory would be returned.</li>
  6754. <li>Improved error message for Import dlg.</li>
  6755. <li>In spanish various dlgs had buttons that were too
  6756. close together (and similar problems)</li>
  6757. </ul>
  6758. </li>
  6759. <li>01-Aug-2004
  6760. <ul>
  6761. <li>ff did not generate amfm files correctly</li>
  6762. <li>Changed the Merge Kern Infor (menu item and scripting
  6763. command) to
  6764. <ul>
  6765. <li>support pfm files</li>
  6766. <li>detect file type from the file header rather than
  6767. from the extension</li>
  6768. </ul>
  6769. </li>
  6770. <li>Added InterpolateFonts as a scripting command</li>
  6771. <li>Added GetEnv as a scripting command</li>
  6772. <li>The scripting $fontversion and $copyright psuedo
  6773. variables broke when I added the fond name changes.</li>
  6774. <li>More problems with tfm files.</li>
  6775. <li>Fixed a couple of problems related to dialog sizing
  6776. for different languages.</li>
  6777. <li>In Windows 3.1 some chinese fonts were released with
  6778. a ttf version of 2 (rather than 1). Add this to the list
  6779. of supported TrueType/OpenType versions (see discussion
  6780. on freetype mailing list, july 2004 for more info)</li>
  6781. <li>Added both a menu and scripting command to copy
  6782. kerning &amp; substitution info from one glyph to
  6783. another.</li>
  6784. <li>FontForge fails to load some svg fonts properly (if
  6785. they use the "t" directive within a path =&gt; quadratic
  6786. splines, control point implied, relative to last point).
  6787. Result is a nasty scribble.</li>
  6788. <li>Windows file systems are not case conscious. The file
  6789. names generated for Export use glyph names (which are
  6790. case conscious). So on windows exporting "a" and "A" will
  6791. overwrite the same file. (Add a "$" in front of capital
  6792. letters to distinguish).</li>
  6793. <li>We were not scaling refs/images uniformly when we
  6794. dragged corners. Instead we changed the sides by the same
  6795. amount (this works for squares, but nothing else).</li>
  6796. <li>XML does not allow backspace as an input character,
  6797. even when specified by an entity. This means we can't
  6798. specify the unicode code point for backspace in a an svg
  6799. font (and many ttf fonts contain a blank backspace char,
  6800. god only knows why).</li>
  6801. <li>The Default ATT-&gt;Unicode decomposition didn't
  6802. work.</li>
  6803. <li>Added a new entry to Default ATT, Caps-&gt;Small Caps
  6804. (and cleaned up lower case-&gt;small caps too).</li>
  6805. <li>Eschew 0 width hints.</li>
  6806. <li>Add support for localized unicode glyph names
  6807. (currently only french is available)</li>
  6808. </ul>
  6809. </li>
  6810. <li>3-July-2004
  6811. <ul>
  6812. <li>Undoes in the Guide layer caused a crash (introduced
  6813. with multi-layer)</li>
  6814. <li>Fixed another problem with subroutine references in
  6815. type1 output</li>
  6816. <li>Preserve hhea.ascent/descent and some OS/2 values (no
  6817. UI for these, but they are retained)</li>
  6818. <li>KANOU provided two patches
  6819. <ul>
  6820. <li>One to set the average Char Width field of OS/2
  6821. properly</li>
  6822. <li>One to set the 'gasp' table so that Windows would
  6823. actually use embedded bitmaps</li>
  6824. </ul>
  6825. </li>
  6826. <li>Added support (in build accent) to look for upper
  6827. case and cyrillic variants of accents (use grave.cap
  6828. rather than grave, use breve.cyr rather than breve) when
  6829. building upper case or cyrillic letters.</li>
  6830. <li>Points were not being properly renumbered if they
  6831. were out of order (when editing in quadratic mode)</li>
  6832. <li>When a character had a color attached to it, it
  6833. looked very strange if the user changed it.</li>
  6834. <li>Added an "x" to check boxes when checked</li>
  6835. <li>FF did not realize that tonos should be treated as an
  6836. accent (it is spacing, which confused ff)</li>
  6837. <li>Cleaned up an ancient message in the nomen files.
  6838. Used to be three separate strings, now one with format
  6839. specs in it.</li>
  6840. </ul>
  6841. </li>
  6842. <li>18-June-2004
  6843. <ul>
  6844. <li>Point types were not set properly after conversion
  6845. from quadratic to cubic splines.</li>
  6846. <li>Several preference items were not being saved and
  6847. were not accessable from scripts.</li>
  6848. <li>Scripts could not set the resolution for bdf
  6849. fonts</li>
  6850. <li>Still having problems with references to references
  6851. in type1 subroutines.</li>
  6852. <li>AutoTrace had problems with multi-layered mode.</li>
  6853. <li>Enhance "ItalicConstrained" in the Character View to
  6854. allow vertical constrains as well as those parallel to
  6855. the italic angle.</li>
  6856. <li>Build Accented Characters had problems when there
  6857. were bitmap characters involved.</li>
  6858. <li>Can no longer blindly rotate splinesets in type2
  6859. fonts to avoid an initial flex.</li>
  6860. <li>Add three new problems to Find Problems
  6861. <ul>
  6862. <li>Check for intersecting contours</li>
  6863. <li>Check for mulitple glyphs with same unicode code
  6864. point</li>
  6865. <li>Check for multiple glyphs with same name</li>
  6866. </ul>
  6867. </li>
  6868. </ul>
  6869. </li>
  6870. <li>31-May-2004
  6871. <ul>
  6872. <li>In the 19-May build I introduced a bug which could
  6873. generate NaN values for control points.</li>
  6874. </ul>
  6875. </li>
  6876. <li>29-May-2004
  6877. <ul>
  6878. <li>The MergeKern scripting command didn't have the
  6879. capabilities of its menu counterpart.</li>
  6880. <li>Enhance the pattern matching capabilities on font
  6881. names when loading kerning information from a mac FOND
  6882. (there is no place in the FOND that names the styles, so
  6883. best we can do is make reasonable guesses).</li>
  6884. <li>When editing quadratic fonts (truetype), changing the
  6885. type of a point to be a tangent caused the previous
  6886. control point to be set the to same location as the next
  6887. control point. Bleah.</li>
  6888. <li>New versions of libpng will not automagically load
  6889. libz when they are loaded. Needed a patch to load libz
  6890. manually.</li>
  6891. <li>Fixed a couple of bugs in contextual / chaining
  6892. dialog.</li>
  6893. <li>When reading PostScript arrays FF failed to parse
  6894. negative numbers properly.</li>
  6895. <li>Make it an error (which it should be) to create a mac
  6896. postscript resource file without also generating an
  6897. NFNT.</li>
  6898. <li>Warn that NFNTs don't work under OS/X, warn that POST
  6899. resources are probably deprecated.</li>
  6900. <li>WinAscent/Descent were being saved incorrectly in sfd
  6901. files, leading to bad WinAscent/Descent in t/otf OS/2
  6902. tables.</li>
  6903. <li>Crash in ExpandStroke from a NaN when try to
  6904. intersect parallel lines</li>
  6905. <li>Improved Merge a little bit for quadratic
  6906. splines</li>
  6907. </ul>
  6908. </li>
  6909. <li>23-May-2004
  6910. <ul>
  6911. <li>Added popups in the Open Font dialog to show the
  6912. fontname(s) of any font(s) in a file.</li>
  6913. <li>FontForge failed to load background images. A bug
  6914. introduced 24-Feb (part of multi-layer)</li>
  6915. <li>Reordered the which glyph FF would pick when
  6916. searching for accents. It used to use ASCII versions of
  6917. the accents over those in the U+03xx range.</li>
  6918. </ul>
  6919. </li>
  6920. <li>20-May-2004
  6921. <ul>
  6922. <li>Bug in scripting change for mac families.</li>
  6923. <li>Added a Paste After command (which isn't visible by
  6924. default) which will allow you to build up words more
  6925. easily.</li>
  6926. </ul>
  6927. </li>
  6928. <li>19-May-2004
  6929. <ul>
  6930. <li>Give the user access to the OS/2 fields WinAscent and
  6931. WinDescent.</li>
  6932. <li>Add a new command (Points-&gt;Make Line) which will
  6933. turn a spline between two selected points into a
  6934. line.</li>
  6935. <li>Improve the behavior of defaulting control points so
  6936. we don't get self-intersecting loops</li>
  6937. <li>Add a mode to the pointer tool. Holding down the
  6938. &lt;Alt&gt; key now means we don't join two open contours
  6939. if they make contact while dragging.</li>
  6940. <li>When loading an otf file and saving it as ttf,
  6941. sometimes the space glyph would become zero width.</li>
  6942. <li>Redid the way mac families were output. Should be
  6943. more flexible under OS/X</li>
  6944. </ul>
  6945. </li>
  6946. <li>9-May-2004
  6947. <ul>
  6948. <li>Several problems with tfm files. Didn't handle tfms
  6949. with more that 128 lig/kerns.</li>
  6950. <li>Failed to set the r2l flag properly in 'morx'
  6951. tables</li>
  6952. <li>More typos in the ghost hint code</li>
  6953. <li>Allow users to express error term of the scripting
  6954. Simplify command as a fraction.</li>
  6955. <li>The strings in the context / chaining dlg's initial
  6956. pane were wrong</li>
  6957. <li>Fixed some bugs in converting OT contextual
  6958. substitutions to Mac state machines</li>
  6959. <li>If we wanted to put a glyph with references into a
  6960. subroutine (in type1 output) we failed miserably</li>
  6961. <li>Added a new command <a href=
  6962. "editmenu.html#ReplaceRef">Edit-&gt;ReplaceWithReference</a>
  6963. (and a scripting version too), which searches all glyphs
  6964. in the font for any selected glyphs, and for each
  6965. embedded occurance it replaces the outlines of the glyph
  6966. with a reference to it. This is because reading a
  6967. postscript (type2 or type1) font generally loses all
  6968. reference information.</li>
  6969. <li>The documentation for OS/2.winAscent makes no sense.
  6970. I shall ignore it and set winAscent to hhea.ascent</li>
  6971. <li>Sivan says that hebrew kerning is broken again.</li>
  6972. <li>The search dlg didn't work on quadratic (truetype)
  6973. fonts</li>
  6974. </ul>
  6975. </li>
  6976. <li>2-May-2004
  6977. <ul>
  6978. <li>I've changed the colour of check boxes because people
  6979. found black confusing</li>
  6980. <li>FontForge read Italic Correction incorrectly out of
  6981. tfm files and had minor problems generating tfm
  6982. files.</li>
  6983. <li>the kern class dlg had an uninitialized variable
  6984. (introduced with the multiple master code I think)</li>
  6985. <li>FontForge would sometimes crash when generating a
  6986. GDEF table for some types of otf font.</li>
  6987. <li>Pierre Hanser has updated the french UI, and pointed
  6988. out some problems with the english UI.</li>
  6989. <li>In a version of FontForge compiled with MultiLayer
  6990. on, Pasting something containing a reference screwed up
  6991. memory</li>
  6992. </ul>
  6993. </li>
  6994. <li>25-Apr-2004
  6995. <ul>
  6996. <li>AutoHint produced ghost hints for curved stems that
  6997. sometimes were outside of the character.</li>
  6998. <li>Fixed some uninitialized variables in MetaFont (but
  6999. the algorthim is still flawed)</li>
  7000. <li>FontForge had problems when the fontview was
  7001. maximized.</li>
  7002. <li>The 18-Apr patch for cubic-&gt;quadratic conversion
  7003. had a bug which generally resulted in a crash.</li>
  7004. <li>When flickering in and out of compacted mode, during
  7005. a Generate Fonts, the encodings in the displayed bitmap
  7006. could get out of sync with those of the font leading to a
  7007. crash.</li>
  7008. <li>Don't mess with the control points in point type
  7009. conversion (corner-&gt;curve/tangent) when the they are
  7010. already reasonable.</li>
  7011. <li>Allow rectangles and ellipses to have separate
  7012. settings of the center out flag.</li>
  7013. <li>Add a dialog which allows you to specify exactly
  7014. where rectangles/ellipses should go.</li>
  7015. <li>Double-clicking on the scale/flap/rotate/skew tool
  7016. brings up the transform dialog.</li>
  7017. <li>Add a couple of entries in the transform dlg option
  7018. menus which copy information from the last ruler
  7019. measurement.</li>
  7020. <li>Give the user control over how long the ruler window
  7021. hangs around.</li>
  7022. </ul>
  7023. </li>
  7024. <li>18-Apr-2004
  7025. <ul>
  7026. <li>Fix a couple of bugs dealing with references in
  7027. multilayered editing.</li>
  7028. <li>Uninitialized variable in creation of 'name' table
  7029. (introduced on 10-Apr)</li>
  7030. <li>Edit-&gt;Merge didn't work properly on quadratic
  7031. splines</li>
  7032. <li>LCarets should have ignored the script assigned to
  7033. them, but they didn't.</li>
  7034. <li>Put in more protection against bad GSUB/GPOS tables.
  7035. In particular mangal.ttf has a bad GSUB table (with
  7036. erroneous class specifications).</li>
  7037. <li>FontForge wasn't setting
  7038. <tt>'hhea'.caretSlopeRun</tt> appropriately in italic
  7039. fonts (should match <tt>tan(italicAngle)</tt>).</li>
  7040. <li>Oops. Can do much better converting from cubic to
  7041. quadratic splines. We were getting far too many linear
  7042. segments.</li>
  7043. <li>Our cubic-&gt;quadratic conversion could generate
  7044. splines where the endpoints were less than 1 unit apart.
  7045. Since ttf rounds all coords to ints, this meant we'd get
  7046. the two endpoints on top of one another.</li>
  7047. <li>When generating a truetype font from a cubic
  7048. database, FontForge calculated 'maxp'.maxCompositePoints
  7049. incorrectly.</li>
  7050. <li>Gave the user control over when point numbers are
  7051. visible (even for cubic fonts)</li>
  7052. </ul>
  7053. </li>
  7054. <li>10-Apr-2004
  7055. <ul>
  7056. <li>The flatten commands didn't preserve the ttf 'name'
  7057. table nor the 'OS/2' table</li>
  7058. <li>Redid the way 'name' table was generated, hopefully
  7059. we do better for the mac now.</li>
  7060. <li>the 'kern' table had a bad rangeShift value (it was
  7061. the negative of what it should be)</li>
  7062. <li>Pasting a reference from one font to another could
  7063. crash if the destination font did not have the refered
  7064. character.</li>
  7065. <li>".null" was appearing twice in the 'post' table when
  7066. saving a ttf file a second time.</li>
  7067. <li>Markus Schwarzenberg points out that the ScaleToEm()
  7068. scripting command didn't work when given a single
  7069. argument.</li>
  7070. <li>Pierre Hanser points out that the version fix on
  7071. 4-Apr had a bug that caused crashes on Macs (perhaps
  7072. elsewhere).</li>
  7073. </ul>
  7074. </li>
  7075. <li>04-Apr-2004
  7076. <ul>
  7077. <li>Several more fixes for cff output.</li>
  7078. <li>We had a bad habit of including extraneous hintmask
  7079. operators in output</li>
  7080. <li>Add a proper ff version (well, as much as my versions
  7081. be proper) to postscript/svg output</li>
  7082. <li>Patch from Kanou about reading format 2 bitmaps in a
  7083. sfnt</li>
  7084. <li>Patch from Kanou. MS requires a weird format for GSUB
  7085. in vertical writing.</li>
  7086. </ul>
  7087. </li>
  7088. <li>29-Mar-2004
  7089. <ul>
  7090. <li>When Type1 output needed to output a reference as
  7091. inline splines (as opposed to a subroutine call or using
  7092. a seac command) then it would lose any translation
  7093. applied to that reference.</li>
  7094. <li>Patch to Type3 output from R.L.Horn</li>
  7095. <li>FontForge used to crash when reading in a bdf glyph
  7096. with a bad bounding box.</li>
  7097. <li>Reading a kerning class from an sfd file when that
  7098. class had more second character classes than first
  7099. character classes would screw up memory and probably
  7100. cause a crash.</li>
  7101. <li>Attempting to edit a 'cvt ' table in a font without
  7102. one caused a crash. Attempting to edit a 'cvt ' table in
  7103. a font with one showed an empty table.</li>
  7104. <li>Make scaling from the fontview apply to kerning and
  7105. positioning data.</li>
  7106. <li>Drawing a rectangle by dragging from center out
  7107. didn't work</li>
  7108. <li>Display phantom points when debugging. Be prepared to
  7109. find either 2 (horizontal metrics) or 4 (both horizontal
  7110. or vertical) depending on what version of freetype we've
  7111. got.</li>
  7112. <li>Bug in both reading and writing encoding format 0 of
  7113. cff fonts. I forgot to ignore .notdef so everything was
  7114. off by 1.</li>
  7115. <li>If a glyph was used as a reference in another glyph,
  7116. and we put it in a subroutine (type1 output), and it had
  7117. hint conflicts, then the first group of hints never got
  7118. output.</li>
  7119. <li>In multilayered mode, the Revert Glyph command left
  7120. memory in a potentially bad state. (If you immediately
  7121. closed the charview, then nothing bad would happen, but
  7122. if you tried any editing in it, then nasty things
  7123. happened.)</li>
  7124. </ul>
  7125. </li>
  7126. <li>21-Mar-2004
  7127. <ul>
  7128. <li>When flattening a CID file fontforge lost track of
  7129. the script/lang list (and other things) which caused bugs
  7130. when dealing with substitutions</li>
  7131. <li>When saving multiply, fontforge could free a fonts
  7132. hash table several times</li>
  7133. <li>When flattening by a CMAP file from a script
  7134. fontforge could crash</li>
  7135. <li>Added a CIDFlatten command to scripting.</li>
  7136. <li>The "cleanup of OS/2" on 29-Feb actually broke
  7137. WinAscent/Descent</li>
  7138. <li>When loading a mac unicode string from the 'name'
  7139. table, fontforge failed to convert the language
  7140. correctly.</li>
  7141. <li>When loading a mac contextual substitution
  7142. statemachine, fontforge made egregious errors in guessing
  7143. to what glyphs were usable for a substitution of the
  7144. marked glyph.</li>
  7145. <li>Added the current encoding to the font's window title
  7146. (also display a flag to show whether the font has been
  7147. changed)</li>
  7148. <li>When moving points around on an order2 contour
  7149. fontforge could end up with bad control points and would
  7150. then produce annoying internal errors alerting the user
  7151. to this fact.</li>
  7152. <li>The CID Flatten commands did not work when the view
  7153. was compacted.</li>
  7154. <li>CharInfo had been deliberately disabled in CID
  7155. fonts</li>
  7156. <li>Show ATT didn't work with CID keyed fonts</li>
  7157. <li>The preference mapping between mac and opentype small
  7158. caps features was wrong.</li>
  7159. <li>Werner found a strange bug in splinefill that I can't
  7160. reproduce (and can't understand how it could happen) but
  7161. the fix appears obvious.</li>
  7162. <li>Add a command to show what glyphs use the current
  7163. glyph in a substitution (so "A.swash" would show that "A"
  7164. used it, and "i" would show that "fi" used it).</li>
  7165. <li>Changed the extension shown in the Generate Fonts dlg
  7166. for multiple saves to ".pfb". Put in a %s to make it
  7167. obvious that more will be added to the name. Support
  7168. people who want .pfa fonts too.</li>
  7169. <li>The dialog for adding/editing correspondences between
  7170. mac feature/settings and opentype features never went
  7171. away.</li>
  7172. <li>Disable the Default ATT menu if no char is selected
  7173. in the fontview.</li>
  7174. <li>FontForge sometimes had trouble drawing the correct
  7175. rotated glyph in cid fonts on the display lines of the
  7176. fontview.</li>
  7177. <li>Changed the way names used in cidmap files, so there
  7178. are new cidmap files now.</li>
  7179. <li>The ShowAtt dialog could overwrite itself if there
  7180. were enough aats in it. (and at one point the vertical
  7181. scroll bar was set to the bounds of the horizontal scroll
  7182. bar)</li>
  7183. <li>Still getting the windows ascent/descent wrong. This
  7184. time in CID keyed fonts.</li>
  7185. <li>Add some new language translations for things like
  7186. "Bold" (dutch, swedish, norwegian)</li>
  7187. <li>Dragging and dropping a char from the font view into
  7188. the char info dlg (to create a substitution) created a
  7189. crash instead.</li>
  7190. <li>Support more of postscript in the interpreter</li>
  7191. <li>Our svg fonts pointed to a not-yet-existing dtd
  7192. file</li>
  7193. <li>Support for Apple's distortable fonts (sort of like
  7194. truetype multi-master fonts)</li>
  7195. <li>Depressing the control key now makes popups live
  7196. longer (until the mouse moves).</li>
  7197. <li>new command in MM menu: Blend to new font</li>
  7198. </ul>
  7199. </li>
  7200. <li>2-Mar-2004
  7201. <ul>
  7202. <li>Changed name from pfaedit to fontforge</li>
  7203. </ul>
  7204. </li>
  7205. </ul>
  7206. <p>FontForge was first released on 2-Mar-2004. An earlier
  7207. version of the program, called PfaEdit, was begun in Sept of
  7208. 2000, released on the web 7-Nov-2000, and moved to
  7209. pfaedit.sf.net on 21-Apr-2001.</p>
  7210. </div>
  7211. </body>
  7212. </html>