• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

cmake/modules/H31-Jan-2019-851729

doc/H31-Jan-2019-3,1982,672

examples/H03-May-2022-875543

include/H31-Jan-2019-408208

src/H03-May-2022-1,312776

AUTHORSH A D31-Jan-2019801 2014

COPYINGH A D31-Jan-201924.7 KiB483400

ChangeLog.1.0.5p1H A D31-Jan-20192.6 KiB4944

ChangeLog.releaseH A D31-Jan-201933.4 KiB744583

Doxyfile.developerH A D31-Jan-2019104.3 KiB2,4431,888

Doxyfile.userH A D31-Jan-2019104.3 KiB2,4441,889

INSTALLH A D31-Jan-2019364 65

NEWSH A D31-Jan-2019672 2013

READMEH A D31-Jan-20193.5 KiB9070

README.Release_Manager_CookbookH A D31-Jan-201918.6 KiB507367

README.cumulated_releaseH A D31-Jan-201923.5 KiB511388

README.releaseH A D31-Jan-201911.9 KiB261194

config.h.cmakeH A D31-Jan-201961 32

lasi.pc.inH A D31-Jan-2019274 1310

README

1ABOUT libLASi
2=============
3
4The libLASi website is located at http://www.unifont.org/lasi/ with the project
5page located at http://sourceforge.net/projects/lasi.
6
7libLASi is a library that provides a C++ stream output interface (with
8operator<< ) to writing Postscript and Encapsulated Postscript documents
9containing any of the world's scripts supported by Unicode 4.0 and the Pango
10complex text layout engine.  You can use any TrueType or OpenType fonts that
11you want. The library accomodates both left-to-right (e.g. most European
12languages) as well as right-to-left (e.g. Hebrew, Arabic) scripts, as well
13as Complex Text Layout (CTL) scripts such as Devanagari, Bengali, Thai, and
14other Indic and Indic-derived scripts. You can include any number of
15different scripts or languages in the same document without need for any
16special configuration or layout calculation on the programmer's part.
17libLASi accepts Unicode strings encoded in the UTF-8 transformation format
18which is the de facto standard on Linux and other *nix systems.
19
20Although Postscript printing capability exists in open-source toolkits such
21as Gnome and QT, libLASi was designed for projects that are independent of
22any one Graphic User Interface (GUI) toolkit or do not even make use of a
23GUI interface but still require the ability to produce Postscript output
24containing Unicode text.
25
26For installation instructions, see http://www.unifont.org/lasi/
27
28For example programs that uses libLASi, please see the examples
29directory located in the install tree at
30$prefix/share/lasi$version/examples where $prefix is the installation
31prefix and $version is the version of lasi (1.1.3 at the time of
32writing). An example is provided which tests that libLASi is robust
33against some common font issues such as a missing glyph or pango
34deciding to use a pure bitmapped font such as the popular Noto Color
35Emoji that does not provide the outline font data that libLASi needs).
36Simple and slightly more extensive examples are provided as well that
37have more interesting output.  For more details concerning the examples,
38please consult examples/README.
39
40See the file COPYING for terms of copying and re-distribution.
41
42Copyright (C) 2003, 2004, 2006 Larry Siden
43Copyright (C) 2008 Ed Trager
44Copyright (C) 2008 Ritu Khanna
45Copyright (C) 2008-2019 Alan W. Irwin
46Copyright (C) 2008 Andrew Ross
47Copyright (C) 2008 Werner Smekal
48
49    This library is free software; you can redistribute it and/or
50    modify it under the terms of the GNU Library General Public
51    License as published by the Free Software Foundation; either
52    version 2 of the License, or (at your option) any later version.
53
54    This library is distributed in the hope that it will be useful,
55    but WITHOUT ANY WARRANTY; without even the implied warranty of
56    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
57    Library General Public License for more details.
58
59    You should have received a copy of the GNU Library General Public
60    License along with this library; if not, write to the
61    Free Software Foundation, Inc., 59 Temple Place - Suite 330,
62    Boston, MA  02111-1307  USA.
63
64Original Author:
65
66	Larry Siden
67	4047 Rolling Meadow Lane
68	Pittsfield Twp., MI  48197-6619, USA
69
70	http://umich.edu/~lsiden
71	mailto:lsiden@gmail.com
72
73Contributors:
74
75	Edward H. Trager
76	ehtrager@umich.edu
77	http://eyegene.ophthy.med.umich.edu
78
79	Ritu Khanna
80	rituk@umich.edu
81
82        Alan W. Irwin
83        irwin@beluga.phys.uvic.ca
84
85        Andrew Ross
86        andrewross@users.sourceforge.net
87
88        Werner Smekal
89	smekal@iap.tuwien.ac.at
90

README.Release_Manager_Cookbook

1This is a cookbook showing the steps required to create a libLASi release at
2SourceForge.
3
4INDEX
5(1)  Create and test a preliminary tarball from trunk
6(2)  Finish release-related trunk changes so they will be in the release
7(3)  Create and test the release tarball from trunk
8(4)  Update ChangeLog and README.Release_Manager_Cookbook
9(5)  Tag the release
10(6)  Create and test the release tarball from the tagged version
11(7)  Generate a file release at Sourceforge
12(8)  Commit the tagged version
13(9)  Publicity for the release announcement
14(10) Post release tweaking of this file (README.Release_Manager_Cookbook)
15
16(A1) GNU Privacy Guard (gpg).
17(A2) Setting the correct date and time on your computer.
18End of INDEX
19
20(1)  Create and test a preliminary tarball from trunk
21
22     Do everything in (3) below just to make sure that the trunk
23     version is in good shape before you do the following final stages
24     of the release process.
25
26(2)  Finish release-related trunk changes so they will be in the release
27
28*    set environment variable for version to make directions below
29     more generic.
30
31export LASI_VERSION=1.1.3
32# Should refer to first release in this release cycle, i.e., one after
33# last release for the last release.
34export FIRST_RELEASE_REVISION=r200
35
36*    Prepare a preliminary version of the ChangeLog file to see what
37     has been accomplished since the last release.
38
39# This makes the BASE used below correct.
40svn update
41
42svn log --revision ${FIRST_RELEASE_REVISION}:BASE --verbose  >| ChangeLog.release_preliminary
43
44     Note the "_preliminary" suffix to distinguish this from the final
45     result below which will contain (if all goes well in the steps
46     below) a record of all but the last commit (of the ChangeLog
47     itself) for this release.
48
49     Note the order of the --revision components puts this preliminary
50     version in chronological order.  But it is traditional for the
51     final version to have the result in reverse chronological order
52     (see below).
53
54*    Update and commit README and cmake/module/lasi_version.cmake to
55     reflect the current version. Also, follow the instructions in
56     that latter file for updating the SOVERSION, the minor number and
57     the patch number.
58
59*    Update and commit the release notes (stored in the README.release
60     file) containing a short overview of the most important changes
61     noted in the ChangeLog.release_preliminary file since the last
62     release.
63
64*    Once completely satisfied with README.release insert it at the
65     start of README.cumulated release to keep a historical record in
66     reverse chronological order of the notes for all releases in that
67     file.  From now on, any further tweaks to README.release should
68     be mirrored in README.cumulated release which is why this
69     insertion step should be delayed until the release manager is
70     completely satisfied with README.release.
71
72*    Check that all local changes (other than this file,
73     README.Release_Manager_Cookbook, and ChangeLog) are in the
74     repository so they will be reflected in the ChangeLog, tagged
75     version of the release, and release tarball.
76
77svn status
78
79(3)  Create and test the release tarball from trunk
80
81*    Do the usual cmake and make in the build tree to build the user
82     and developer configurations of the Doxygen documentation in the
83     source tree.  For example,
84
85cd /home/software/lasi_svn/HEAD/build_dir
86# In case this not set.
87LASI_VERSION= 1.1.3
88time (rm -rf /home/software/lasi_svn/HEAD/build_dir/* ~/lasi_svn/install; env PATH="/usr/bin:$PATH" cmake -DCMAKE_INSTALL_PREFIX=/home/software/lasi_svn/install -DBUILD_SHARED_LIBS=ON ../lasi_2019 >& cmake.out)
89make -j16 all >& all.out
90
91     Then build a preliminary version of the release tarball
92
93make package_source
94
95*    Check that generated tarball by checking its table of contents as follows:
96
97tar ztvf libLASi-$LASI_VERSION.tar.gz |sed "s?  *? ?g" |cut --delimiter=" " --fields="6-" |less
98
99*    Unpack that tarball:
100
101tar zxf libLASi-$LASI_VERSION.tar.gz
102
103*    Test that tarball with shared build, install, and shared examples build
104
105mkdir tarball_build_dir
106cd tarball_build_dir
107build_tree_dir=$(pwd)
108/usr/bin/cmake -DCMAKE_INSTALL_PREFIX=../tarball_install -DBUILD_SHARED_LIBS=ON ../libLASi-$LASI_VERSION >& cmake.out
109make -j16 >& make.out
110# Inspect EPS results.  Note a white background has to be imposed because
111# these results have no background.  So by default the background would be a checkerboard
112# imposed by pqiv if this --background-pattern option was not used.
113
114# Inspect same results converted (with opaque white background added) to PNG format
115# by inkscape.
116
117for CORE_NAME in MissingGlyphExample SimpleLASiExample ComplexTextLayoutExample ; do
118    pqiv -i --background-pattern=white examples/$CORE_NAME.eps
119    pqiv -i examples/$CORE_NAME.png
120done
121
122# ldd and valgrind tests of the examples including comparisons of the
123# results generated with the previous results.  Note, that 2>&1
124# redirects stderr to *current" stdout (which defaults to pipe),
125# test.eps afterwards means PostScript output goes directly to that
126# file rather than stdout (so nothing more is emitted to stdout), and
127# >| test.eps afterwards means PostScript output goes to stdout (but
128# not stderr) and stdout then overwrites whatever was in test.eps
129# before.
130
131for CORE_NAME in MissingGlyphExample SimpleLASiExample ComplexTextLayoutExample ; do
132    ldd -r examples/$CORE_NAME 2>&1 | less
133    valgrind examples/$CORE_NAME 2>&1 test.eps | less
134    cmp test.eps examples/$CORE_NAME.eps
135    valgrind examples/$CORE_NAME 2>&1 >| test.eps | less
136    cmp test.eps examples/$CORE_NAME.eps
137done
138
139# Run ctest
140/usr/bin/ctest -j16 --output-log >| ctest.out
141# Compare ctest results with above make results.
142for CORE_NAME in MissingGlyphExample SimpleLASiExample ComplexTextLayoutExample ; do
143    cmp examples/ctest_examples_output_dir/$CORE_NAME.eps examples/$CORE_NAME.eps
144done
145
146make -j16 install >& make_install.out
147cd ../tarball_install/share/lasi$LASI_VERSION/examples
148make -j16 >& make.out
149
150for CORE_NAME in MissingGlyphExample SimpleLASiExample ComplexTextLayoutExample ; do
151    ldd -r $CORE_NAME 2>&1 | less
152    cmp $CORE_NAME.eps $build_tree_dir/examples/$CORE_NAME.eps
153    valgrind ./$CORE_NAME 2>&1 test.eps | less
154    cmp test.eps $CORE_NAME.eps
155    valgrind ./$CORE_NAME 2>&1 >| test.eps | less
156    cmp test.eps $CORE_NAME.eps
157done
158
159*    Test that tarball with static build, install, and static examples build
160
161# Repeat all the prior test steps starting with removing prior test results with
162
163cd $build_tree_dir/..
164rm -rf tarball_*
165
166# Then follow with all the above steps starting with
167
168mkdir tarball_build_dir
169[...]
170
171# but with cmake option -DBUILD_SHARED_LIBS=ON replaced by -DBUILD_SHARED_LIBS=OFF
172
173     If these tests reveal that trunk changes are necessary, do those, commit
174them, and retest them.
175
176(4)  Update ChangeLog and README.Release_Manager_Cookbook
177
178*    Update this file (README.Release_Manager_Cookbook) as much as
179     possible concerning what has been done to complete this release
180     and commit that result.  However, if some subsequent deviations
181     occur from the instructions in this cookbook then this file
182     should also be tweaked after the release (see (10)).
183svn commit README.Release_Manager_Cookbook
184
185*    Prepare a (hopefully) final version of the ChangeLog file and commit it.
186svn update
187svn log --revision BASE:${LAST_RELEASE_REVISION} --verbose >| ChangeLog.preliminary
188mv ChangeLog.preliminary ChangeLog.release
189svn commit ChangeLog.release
190
191(5)  Tag the release
192
193     Based on suggestions in the svn manual, the libLASi svn archive
194     is configured as follows:
195
196branches/
197tags/
198trunk/
199
200     For the release, you will be creating (and eventually committing)
201     what is essentially a branch of libLASi that is a snapshot record
202     of that subproject at the time of the release. This branch will
203     be located in the /tags directory and should follow the naming
204     convention tags/$LASI_VERSION although prior releases used a
205     different naming convention based on CVS (!) requirements.
206
207#ONE TIME ONLY
208# The easiest way to get started is to check out the _entire_ lasi svn
209# repository as follows:
210
211svn checkout https://svn.code.sf.net/p/lasi/code lasi_allura_complete
212
213#ONE TIME ONLY completed
214
215     If you already have this directory, you will need to make sure
216     that all your commits (probably in a different local directory)
217     have been done (see above) and that lasi_complete is up to date
218     with those commits.
219
220cd lasi_allura_complete
221svn update
222
223# Create and commit release tag of lasi
224svn copy trunk tags/$LASI_VERSION
225
226(6)  Create and test the release tarball from the tagged version
227
228     Do exactly the same as (3), but for tagged source code in
229     tags/$LASI_VERSION
230
231     In the (unlikely event that problems are found in the tarball
232     generated from the tagged version during the release process,
233     corrections should be made to trunk/, the ChangeLog.release file
234     recreated and committed (see instructions above).  Then merge the
235     trunk version into the tags as follows:
236
237cd tags/$LASI_VERSION
238svn merge -r A:B /path/to/trunk
239
240     Where A and B specify the range of revisions in trunk to be
241     applied to tags/$LASI_VERSION in the merge process. These can be
242     determined by commit messages.
243
244(7)  Generate a file release at Sourceforge
245
246     A list of your GPG keys can be obtained using the command "gpg --list-keys <first name>"
247     where <first name> is the first name you used when creating your gpg key.  The result of
248     that command for the current release manager (AWI) is
249
250pub   rsa2048 2011-08-19 [SC] [expires: 2021-12-12]
251      A7CED6D2D4903103FCDDFC1E418B8FC4BB159E92
252uid           [ultimate] Alan W. Irwin (Time Ephemerides key) <airwin@users.sourceforge.net>
253uid           [ultimate] Alan W. Irwin (libLASi key) <airwin@users.sourceforge.net>
254uid           [ultimate] Alan W. Irwin (FreeEOS key) <airwin@users.sourceforge.net>
255uid           [ultimate] Alan W. Irwin (PLplot key) <airwin@users.sourceforge.net>
256
257     The A7CED6D2D4903103FCDDFC1E418B8FC4BB159E92 field above can be used for key signings,
258     but more conveniently its last 8 characters can be used for that purpose, e.g.,
259     BB159E92
260
261     Also, a new curveball thrown by the Debian Testing version of gpg
262     is you must identify the tty you are using with, e.g.,
263
264export GPG_TTY=$(tty)
265
266     (see remarks at
267     <https://www.elliotblackburn.com/importing-pgp-keys-from-keybase-into-gpg/>)
268
269     Otherwise, in my experience, gpg will refuse to sign the tag and
270     you will get the error:
271
272error: gpg failed to sign the data
273error: unable to sign the tag
274
275     But with the above trick, the following command just worked.
276
277gpg --default-key BB159E92 --detach-sign --armor libLASi-$LASI_VERSION.tar.gz
278
279     where BB159E92 is the last 8 characters of the full key
280     identification above and is sufficient to identify the public key
281     for Alan W. Irwin as taken from the above key list.  N.B. it
282     appears there is no gpg model for signing with a particular user
283     id.  So the signature verification below will have all UID's.
284
285     Then verify that result:
286
287gpg --verify libLASi-$LASI_VERSION.tar.gz.asc
288
289     where the output of that commmand should be similar to
290
291gpg: assuming signed data in 'libLASi-1.1.3.tar.gz'
292gpg: Signature made Wed 30 Jan 2019 10:58:19 PM PST
293gpg:                using RSA key A7CED6D2D4903103FCDDFC1E418B8FC4BB159E92
294gpg: Good signature from "Alan W. Irwin (Time Ephemerides key) <airwin@users.sourceforge.net>" [ultimate]
295gpg:                 aka "Alan W. Irwin (libLASi key) <airwin@users.sourceforge.net>" [ultimate]
296gpg:                 aka "Alan W. Irwin (FreeEOS key) <airwin@users.sourceforge.net>" [ultimate]
297gpg:                 aka "Alan W. Irwin (PLplot key) <airwin@users.sourceforge.net>" [ultimate]
298
299     Copy the results to a more permanent location:
300
301cp libLASi-$LASI_VERSION.tar.gz* /home/software/lasi_svn/HEAD/export
302
303     Prepare a temporary file called README.release that concatenates
304     README.release and ChangeLog.release.
305
306cd lasi_allura_complete/tags/$LASI_VERSION
307
308echo "
309
310DETAILED CHANGELOG FOR THIS RELEASE
311
312" | \
313cat README.release - ChangeLog.release >| /tmp/README.release
314
315     Upload the release to SourceForge using sftp
316
317cd /home/software/lasi_svn/HEAD/export
318
319sftp airwin,lasi@frs.sourceforge.net <<EOF
320cd /home/frs/project/l/la/lasi/lasi
321mkdir "$LASI_VERSION Source"
322cd "$LASI_VERSION Source"
323put libLASi-$LASI_VERSION.tar.gz.asc
324put libLASi-$LASI_VERSION.tar.gz
325lcd /tmp
326put README.release
327quit
328EOF
329
330     Demonstrate with irwin account that can download these uploaded
331     results and verify them:
332
333SITE=https://sourceforge.net/projects/lasi/files/lasi/"$LASI_VERSION Source"
334wget "$SITE/libLASi-$LASI_VERSION.tar.gz.asc"
335wget "$SITE/libLASi-$LASI_VERSION.tar.gz"
336
337gpg --verify libLASi-$LASI_VERSION.tar.gz.asc
338
339# Belt and suspenders....
340
341diff libLASi-$LASI_VERSION.tar.gz.asc /home/software/lasi_svn/HEAD/export
342diff libLASi-$LASI_VERSION.tar.gz /home/software/lasi_svn/HEAD/export
343
344     Login to sf.net
345
346     Go to the file-release area at
347     sf.net/projects/lasi/files/lasi/<LASI_VERSION> Source
348
349     (where <LASI_VERSION> stands for whatever you have set
350     LASI_VERSION to above)
351
352     Click on the "i" or "info" button to mark the tar.gz file as the
353     default file to download for all platforms.
354
355(8)  Commit the tagged version
356cd lasi_allura_complete
357svn commit tags/$LASI_VERSION
358
359(9)  Publicity for the release announcement
360
361     Create a news item for the Release:
362     Click on the news menu item and then click on
363
364     Click "Submit" for the news feature.
365
366     Experience shows you should edit a temporary file with no line
367     feeds except at paragraph breaks, and all URL's should be
368     mentioned as-is with no html formatting.  Then cat that file, and
369     cut and paste the result to the form generated above.  SF then
370     turns that result into something readable as HTML with the URL's
371     turned into clickable links.
372
373     Other publicity:
374
375     Barbara: linuxtoday.com, lwn.net, lxer.com
376
377(10) Post release tweaking of this file (README.Release_Manager_Cookbook)
378
379     This only needs to be done if the actual procedure followed for
380     the release differed in any detail from the previously updated
381     instructions in this file.
382
383DONE!  :-)
384
385--- Appendix ---
386
387(A1) GNU Privacy Guard (gpg)
388A brief summary of developer relevant gpg commands, see also:
389http://dewinter.com/gnupg_howto/english/GPGMiniHowto.html,
390man gpg, and http://www.gnupg.org/faq/GnuPG-FAQ.html.
391
392* Configure key-server (if you haven't done that already) by editing
393  $HOME/.gnupg/gpg.conf.  Also specify the auto-key-retrieve option
394  for convenience.
395
396* List keys on your keyring that have been retrieved or generated so far:
397
398gpg --list-keys irwin
399
400* Search for any previously published keys that you might want to
401  revoke.  (Note the search phrase is case insensitive but the search
402  is done on the Boolean AND of the terms so the following search would
403  miss any key generated in the past by Alan Irwin because of the
404  middle initial "W." that is specified for the search).  OTOH, I
405  always use my middle initial for publications to reduce name clashes.
406
407gpg --search-keys Alan W. Irwin
408
409* Create a new key:
410
411gpg --gen-key
412
413  With gnupg 1.4.10, I chose the following options when creating a new key:
414
415Please select what kind of key you want:
416  (1) RSA and RSA (default)
417
418What keysize do you want?
4192048 (default)
4205-year expiration date.
421
422....
423
424Real name: Alan W. Irwin
425Email address: irwin@users.sourceforge.net
426Comment: Time Ephemerides key
427You selected this USER-ID:
428    "Alan W. Irwin (Time Ephemerides key) <irwin@users.sourceforge.net>"
429
430
431N.B. nameofkey below is the name of the key, usually specified by the
432second number after the slash for the first pub line given by
433"gpg --list-keys".  For example, the above key gives the following
434result:
435
436software@raven> gpg --list-keys irwin
437pub   2048R/BB159E92 2011-08-19 [expires: 2016-08-17]
438uid                  Alan W. Irwin (Time Ephemerides key) <irwin@users.sourceforge.net>
439sub   2048R/C5ECCF77 2011-08-19 [expires: 2016-08-17]
440
441So the name could be BB159E92.  Other possibilities exist as well such
442as "irwin", but that might not be unique.
443
444* N.B. Made a mistake in the above.  My SF e-mail address is airwin@....
445not irwin@... GRRR.  So fix it.
446
447Under --edit-key command
448
449adduid  (fill in correct e-mail address this time)
450uid number (to select uid to work on for further commands
451revuid  (revoke bad e-mail one)
452primary (to make the new one the primary one, I am not sure that is necessary)
453trust  (to make the new one ultimately trusted, again, not sure that is necessary.  N.B. didn't seem to change trust value, but that was just bad output)
454
455save  (to get out again)
456
457When edited the next time showed ultimate trust value for correct id, but
458I don't know whether that was the above primary/trust subcommands or
459whether those were necessary at all.  It turned out those were not
460necessary at all as I later used the above sequence to generate
461a libLASi key and a FreeEOS uid key.
462
463* Generate a revocation certificate.  Note this requires the pass phrase
464  specified at the time of key generation so keep that pass phrase in
465  a safe place or else generate the revocation certificate right after
466  generating the key, and keep that certificate in a safe place.  I chose
467  the former course (keep the pass phrase safe).  N.B. the options should
468  appear below in the order given!
469
470gpg --armor -o nameofkey-revocation.asc --gen-revoke nameofkey
471
472* Publicly revoke old key (from FAQ):
473
474gpg --import old-revocation.asc
475gpg --send-keys nameofkey
476
477* Upload your (public) key to GPG key server so that others can obtain it to
478verify your signature on the release tarball.
479gpg --send-keys nameofkey
480
481gpg --refresh-keys  (to update from the server all keys including your own).
482
483This verified that the bad irwin address was revoked even though
484gpg --search-keys Alan W. Irwin
485
486still shows revoked uid as the #1 uid.
487
488(A2) Setting the correct date and time on your computer.
489
490(While it is useful to have the correct time on your computer, this is no
491longer strictly necessary).
492Verify that your computer has the right date and time using the command date.
493The easiest way to make sure the time and date are correct is to do the
494following:
4951. Install the debian ntpdate package.
4962. Execute the command "/usr/sbin/ntpdate pool.ntp.org", which you will
497   have to do as root.
498This will immediately change your system clock. It is not recommended if you
499have other apps running on your system that expect time to increase in a
500smooth and linear fashion.
501
502If you would like your computer to always have the correct time and date, you
503can install the debian ntp package, which must be properly configured to work.
504Some notes about how to do this can be found in the PLplot mailing list
505archive. Look for the thread titled "PLplot 5.7.2 is now available" dated
506Jan 22/23 2007.
507

README.cumulated_release

1libLASi Release 1.1.3
2~~~~~~~~~~~~~~~~~~~~~
3This is a maintenance release of libLASi that reflect the ongoing
4efforts of the libLASi developers to respond to bug reports for this
5stable and convenient library for creating PostScript documents that
6can contain characters from any of the script and symbol blocks
7supported in Unicode and by the Pango layout engine.
8
9If you encounter a problem with libLASi, then please send a bug report to
10the libLASi developers via the lasi-devel mailing list described at
11http://lists.sourceforge.net/lists/listinfo/lasi-devel.
12
13Please see the license under which this software is distributed (LGPL), and
14the disclaimer of all warranties, given in the COPYING.LIB file.
15
16INDEX
17
181. OFFICIAL NOTICES FOR USERS
19
201.1 CMake version compatibility
211.2 Backwards-incompatible libLASi API changes
221.3 Need help getting rid of deprecation build warnings
23
242. Changes relative to our previous release (version 1.1.2) in decreasing order of importance
25
262.1  Improve libLASi's response when pango/fontconfig chooses pure bitmapped fonts
272.2  Make glyph names have a one-to-one relationship with glyphs
282.3  Set target property POSITION_INDEPENDENT_CODE ON for the libLASi library
292.4  Make "MissingGlyphExample" a more stringent test of font or glyph issues for libLASi
302.5  Replace deprecated lower-case variants of Freetype macro constants with preferred upper-case form
312.6  Add bounding boxes to the "MissingGlyphExample" and "ComplexTextLayoutExample" examples
322.7  Rename example applications and results using consistent and descriptive core names
332.8  Fix low-resolution boundary box issue
342.9  Update doxygen configuration files from doxygen version 1.8.1.2 to 1.8.13
352.10 Change the minimum version of CMake from 2.8.9 to 3.13.2
36
373. Testing of this release.
38
39END of INDEX
40
411. OFFICIAL NOTICES FOR USERS
42
431.1 CMake version compatibility
44
45    Our build system is implemented using CMake.  The minimum version
46    of CMake we allow is 3.13.2 on all platforms.  That version is the
47    one we have used to test this release of libLASi (see Section 3
48    below).  However, if you try later CMake versions as they are
49    released during the life of this libLASi release, our build system
50    will likely continue to work well because CMake has an excellent
51    reputation for preserving backwards compatibility.
52
531.2 Backwards-incompatible libLASi API changes
54
55    The bug fixes in this release required backwards-incompatible
56    changes to the libLASi API (a change in the argument list of the
57    PostscriptDocument::GlyphId::GlyphId protected method that is
58    designed for internal use only and the addition of the
59    PostscriptDocument::PangoItem_do protected method that is also
60    designed for internal use only).  Therefore, the SOVERSION for
61    libLASi has been bumped from 1 to 2 to force source code that
62    depends on this library (e.g., the PLplot psttf device driver) to
63    be recompiled.  However, such source code will not require changes
64    to adjust to this backwards-incompatible change in the libLASi
65    API.
66
671.3 Need help getting rid of deprecation build warnings
68
69This release has deprecation warning build issues which are
70
71* "warning: dynamic exception specifications are deprecated in C++11 [-Wdeprecated]"
72
73* "warning: ‘PangoContext* pango_ft2_get_context(double, double)’ is deprecated: Use 'pango_font_map_create_context' instead [-Wdeprecated-declarations]"
74
75* "warning: ‘FT_FaceRec_* pango_ft2_font_get_face(PangoFont*)’ is deprecated: Use 'pango_fc_font_lock_face' instead [-Wdeprecated-declarations]"
76
77All of these are beyond my current C++ and pango skill level to fix so
78help with cleaning up any of these deprecation build warnings messages
79would be much appreciated!
80
812. Changes relative to our previous release (version 1.1.2) in decreasing order of importance
82
832.1  Improve libLASi's response when pango/fontconfig chooses pure bitmapped fonts
84
85     This change was the primary motivation for this release.
86
87     Previous to this change when pango chose the popular Noto Color
88     Emoji font to help render the Aries glyph, libLASi threw an error
89     and aborted since such pure bitmap fonts are not suitable for
90     libLASi's outline font needs.  Such a response completely stops
91     PLplot tests when PLplot standard example 7 attempts to render an
92     Aries glyph with either the psttf or psttfc devices.  So this
93     previous response was completely unacceptable, and the fix for it
94     is important.
95
96     This change fixes that previous response by replacing all glyphs
97     for a PangoItem where pango chooses a non-outline font with the
98     default glyph used to represent missing glyphs.  Of course, a
99     much better procedure would be to request pango to limit its
100     choices to outline fonts, but as far as I know there is no method
101     for doing that (outside of having one fontconfig configuration
102     for libLASi use and another for all other situations), and, in
103     any case, the present workaround is "good enough for now" because
104     pure bitmap fonts are rare (for example, it is possible that Noto
105     Color Emoji in the future may become available in the outline
106     form generally preferred for modern fonts), and Pango/fontconfig
107     chooses such pure bitmap fonts for relatively few glyphs.
108
1092.2  Make glyph names have a one-to-one relationship with glyphs
110
111     This change is an important motivation for this release.
112
113     This change is confined to the case when fonts don't follow
114     standards so that they cannot be interrogated for the glyph name,
115     i.e., FT_HAS_GLYPH_NAMES(face) is false.  Before this change,
116     libLASi computed its own unique glyph name using the template
117
118LASi_glyph_<unique number>
119
120     where <unique number> was incremented whenever the code decided a
121     new glyph had been encountered.  This scheme had the following
122     disadvantages:
123
124*    The logic for deciding when new glyphs were encountered was
125     faulty with the result that the same glyph would have multiple
126     glyph names and therefore redundant glyph information stored in
127     the PostScript header whenever, for example, both
128
129doc.osBody() << show(string)
130
131     and
132
133doc.get_dimensions(string,&lineSpacing,&xAdvance,&yMinimum,&yMaximum);
134
135     (a common combination when bounding boxes are being determined)
136     were called for the same string.
137
138*    The glyph name depended on the order with which strings were
139     processed with the result that PLplot octave results (where all
140     standard octave examples were run from one instance of octave)
141     had different glyph names than PLplot C results (where all
142     standard C examples were run using separate executables for each
143     example).
144
145*    The glyph names were completely meaningless to humans reading
146     through the PostScript code in the results.
147
148     All these issues were addressed by borrowing a static function
149     from PLplot (whose LGPL'd code allows us to do that) to calculate
150     the UCS4 (32-bit unsigned) encoding of unicode for each glyph
151     encountered in the UTF-8 encoded input string.  With the result
152     that the glyph names now have the template
153
154LASi_glyph_U+<UCS4 hexadecimal code for the glyph>
155
156     where by definition the UCS4 hexadecimal code completely
157     identifies the glyph in a unique way which is easy to look up,
158     e.g., with the gucharmap application.
159
160     The net result of this change is the PLplot test_diff_device
161     target for the case when -DPLPLOT_TEST_DEVICE=psttfc now gives a
162     clean report for the first time ever.  So this change is an
163     important one.
164
1652.3  Set target property POSITION_INDEPENDENT_CODE ON for the libLASi library
166
167     This change is an important motivation for this release.
168
169     This bug fix allows the static version of libLASi to be used with
170     shared builds of external software that depend on libLASi such as
171     the PLplot psttf device driver.
172
1732.4  Make "MissingGlyphExample" a more stringent test of font or glyph issues for libLASi
174
175     The most important change here was to add
176
177"Unicode U+2648 ARIES (twice): ♈♈"
178"Embedded newlines a\\nb\\nc: a\nb\nc"
179
180     to the strings that are rendered to PostScript by this example.
181
182     For the first of these, the Debian Buster version of pango
183     (likely due to the default fontconfig configuration) decides to
184     use the popular Noto Color Emoji font to render the Aries glyphs,
185     but the problem for that font is it is a pure bitmap font with no
186     outline information that is required by libLASi.  So this line
187     tests the response of libLASi to this situation.
188
189     For the second of these the linefeed "\n" glyph is a non-printing
190     glyph.  It appears for all such glyphs there is a "missing glyph"
191     issue so regardless of future font improvements this line seems
192     to be a reliable way to trigger missing-glyph issues to test the
193     response of libLASi to this situation.
194
1952.5  Replace deprecated lower-case variants of Freetype macro constants with preferred upper-case form
196
1972.6  Add bounding boxes to the "MissingGlyphExample" and "ComplexTextLayoutExample" examples
198
199     The resulting MissingGlyphExample.eps and
200     ComplexTextLayoutExample.eps files join SimpleLASiExample.eps as
201     being properly formatted EPS (Encapsulated PostScript) files.
202
203     Note also that for the "Complex Text Layout" case, I implemented
204     some generally useful C++ code macros (called
205     LASI_SHOW_AND_UPDATE_BB, LASI_SCALED_SHOW_AND_UPDATE_BB, and
206     LASI_ROTATED_SHOW_AND_UPDATE_BB), which made it straightforward
207     to handle even complex cases such as determining the bounding box
208     of text that has undergone anamorphic scaling or rotation.  For
209     example, the LASI_ROTATED_SHOW_AND_UPDATE_BB macro includes C++
210     code to apply the rotation matrix to determine the x,y
211     coordinates of the corners of the rotated text box and use those
212     corner coordinates to help determine the overall bounding box.
213
2142.7  Rename example applications and results using consistent and descriptive core names
215
216     Those core names are " MissingGlyphExample", "SimpleLASiExample",
217     and "ComplexTextLayoutExample".  As a result the example source
218     code name is <core name>.cpp, the example application name is
219     <core name> (or <core name>.exe on Windows platforms), the EPS
220     (Encapsulated PostScript) results are named <core name>.eps, and
221     the PNG results (generated from the EPS results using inkscape)
222     are named <core name>.png.
223
2242.8  Fix low-resolution boundary box issue
225
226     As a result of this change the low-res (int) BB (bounding box)
227     limits are calculated from the high-res (double) BB limits with
228     the appropriate combinations of floor and ceil so the low-res
229     limits always lie on or outside (by up to but not including 1
230     point) the high-res limits.  Previously this calculation was done
231     incorrectly with floor for all limits.
232
2332.9  Update doxygen configuration files from doxygen version 1.8.1.2 to 1.8.13
234
235     These changes were done in the usual way by running the following
236     commands:
237
238doxygen -u Doxyfile.developer
239doxygen -u Doxyfile.user
240
2412.10 Change the minimum version of CMake from 2.8.9 to 3.13.2
242
243     This change was motivated by the bug fixes in later CMake
244     versions and also the much better checking of the build system
245     that occurs for the policies automatically used for 3.13.2.
246
2473. Testing of this release.
248
249This release has been successfully built and run-tested (following the
250prescription in README.Release_Manager_Cookbook) for both the shared
251and static library case on Linux (Debian Buster) using CMake-3.13.2
252(the minimum allowed version of CMake for libLASi), libpango-1.42.4,
253libcairo-1.16.0, libfreetype-2.9.1, and libfontconfig-2.13.1.
254
255This release has not been tested (yet) on Mac OS X or Windows
256platforms, but we anticipate no difficulties on those platforms since
257previous versions of libLASi have worked well on those platforms.  In
258other words, the cross-platform nature of libLASi appears to have been
259well supported by CMake in the past, and we feel that happy state will
260continue with this release as well.
261
262libLASi Release 1.1.2
263~~~~~~~~~~~~~~~~~~~~~
264This is a maintenance release of libLASi that reflect the ongoing
265efforts of the libLASi developers to respond to bug reports for this
266stable and convenient library for creating PostScript documents that
267can contain characters from any of the script and symbol blocks
268supported in Unicode and by the Pango layout engine.
269
270If you encounter a problem with libLASi, then please send a bug report to
271the libLASi developers via the lasi-devel mailing list described at
272http://lists.sourceforge.net/lists/listinfo/lasi-devel.
273
274Please see the license under which this software is distributed (LGPL), and
275the disclaimer of all warranties, given in the COPYING.LIB file.
276
277INDEX
278
2791. Changes relative to our previous release (version 1.1.1).
280
2812. Testing of this release.
282
2831.1 Update of examples/MissingGlyphExample.cpp
2841.2 #include FreeType headers in recommended (by FreeType) way.
2851.3 Make all install locations configurable.
2861.4 Fix FreetypeGlyphMgr::FreetypeGlyphMgr(FT_Glyph glyph) initialization bug.
2871.5 Fix long-standing file repeatability issue.
288
2891.1 Update of examples/MissingGlyphExample.cpp
290
291The whole point of this example was to make sure that libLASi
292responded well to missing glyphs, but the example had gotten seriously
293outdated because for modern Linux systems with the normal system
294fonts, the chosen unicode characters were no longer missing!  That
295issue has now been addressed by using a larger variety of obscure
296unicode glyphs in the examples based on some glyphs that gucharmap
297says are missing for the particular Debian stable platform where this
298release is being created.  At the same time, I took the opportunity to
299improve the look of the PostScript results of this example by
300indicating its purpose and keeping results for the various test
301glyphs separate from each other.  The results are good (no build or
302run-time errors, the PostScript results are now self-explanatory, and
303the missing glyphs are indicated by empty boxes).
304
3051.2 #include FreeType headers in recommended (by FreeType) way.
306
307This fixes <https://sourceforge.net/p/lasi/bugs/2/>, does not disrupt
308the previous success with building libLASi against FreeType version
3092.4.9, and for the first time allows libLASi to build against FreeType
310version 2.5.1 and later.  So this is a high-impact fix for use of
311libLASi with the latest FreeType versions and is also the fundamental
312motivation for this maintenance release.
313
3141.3 Make all install locations configurable.
315
316This fixes <https://sourceforge.net/p/lasi/bugs/3/> and makes it more
317convenient to package libLASi.
318
3191.4 Fix FreetypeGlyphMgr::FreetypeGlyphMgr(FT_Glyph glyph) initialization bug.
320
321This fixes <https://sourceforge.net/p/lasi/bugs/4/>.  The particular
322method being fixed here is not used in any of our examples, and was
323only caught by compiler warning messages rather than a bug report
324about actual use of this method so this is likely a low-impact
325fix.
326
3271.5 Fix long-standing file repeatability issue.
328
329This bug <https://sourceforge.net/p/lasi/bugs/5/> was discovered while
330testing a pre-release version of 1.1.2, but apparently also appeared
331in all prior releases of libLASi.  The issue was glyphs without a name
332available in the font data were assigned a unique name by libLASi
333using rand, but those unique names were not repeatable from one run of
334an application linked to libLASi to the next (presumably because
335libraries that libLASi depends on were fiddling with the rand seed in
336some threaded way that was not repeatable).  An initial fix that used
337rand_r and a unique seed for libLASi solved the issue, but ultimately
338it was decided to solve the issue by using the libLASi assigned names
339LASi_glyph_1, LASi_glyph_2, etc., which should be unique until the
340integer overflow limit is encountered, and which should not name clash
341with glyph names that are included with font data.
342
3432. Testing of this release.
344
345This release has been successfully build and run tested on Linux using
346(1) libpango-1.30.0, libcairo-1.12.2, and libfreetype-2.4.9 and (2)
347libpango-1.35.0, libcairo-1.12.14, and libfreetype-2.5.3.
348
349Thanks to the kind testing help of Arjen Markus, this release has also
350been successfully build and run tested on Windows using the build
351procedure for that platform given at <http://www.unifont.org/lasi/>
352using the gtk+ all-in-one Windows bundle downloaded from
353<http://www.gtk.org/download/win32.php> which includes
354libpango-1.30.1, libcairo-1.10.2, and libfreetype-2.4.11.
355
356Although there has been no specific testing of this release on Mac OS
357X, we do not anticipate any difficulties for that platform since
358previous releases of libLASi (patched for the above freetype header
359issue) have worked fine on that platform according to reports at
360https://sourceforge.net/p/lasi/bugs/2/.
361
362libLASi Release 1.1.1
363~~~~~~~~~~~~~~~~~~~~~
364This is a stable release of libLASi. It represents the ongoing efforts
365of the libLASi developers to improve the libLASi library for creating
366PostScript documents that can contain characters from any of the
367script and symbol blocks supported in Unicode and by the Pango layout engine.
368
369If you encounter a problem with libLASi, then please send a bug report to
370the libLASI developers via the lasi-devel mailing list described at
371http://lists.sourceforge.net/lists/listinfo/lasi-devel.
372
373Please see the license under which this software is distributed (LGPL), and
374the disclaimer of all warrantees, given in the COPYING.LIB file.
375
376INDEX
377
3781. Changes relative to our previous release (version 1.1.0).
379
3801.1 Make declaration and definition of setFont arguments consistent.
3811.2 Fix alignment of diacritical marks.
3821.3 Build system improvements.
3831.4 Reduction of symbol visibility for gcc.
384
3851.1 Make declaration and definition of setFont arguments consistent.
386
387Thanks to John Ellson's bug report (link failure with Sun's CC - ID:
3882797964) we found out that the arguments of setFont had inconsistent
389const attributes between the declaration in LASi.h and the definition
390in psDoc.cpp.  We have now fixed that inconsistency by using John's
391patch to drop the const attribute from the appropriate definition
392arguments.
393
3941.2 Fix alignment of diacritical marks.
395
396Thanks to Yotam Medini for supplying a patch which we have applied to
397correct the positioning of diacritical marks.  This change means there
398must be an extra bool applyOffset = false argument to the
399PostscriptDocument::for_each_glyph_do method (see Lasi.h).  This
400method is called internally by other libLASi routines with applyOffset
401both true and false depending on circumstances/needs to obtain
402correct offsets for diacritical marks.
403
404This method is also available for external use so this added argument
405is a backwards-incompatible API change requiring rebuilding of
406apps/libraries that use this method, and the soversion of the library
407has been bumped from 0 to 1 consistent with this API change.  However,
408this external API change issue is not relevant for the libLASi
409examples that are part of this release and also to the psttf device driver
410for PLplot that depends on libLASi because those applications and device
411driver plug-ins do not call the for_each_glyph_do method.
412
4131.3 Build system improvements.
414
415Our CMake-based build system has been updated to determine pkg-config
416results in a way that is much more useful for CMake.  (We simply
417adopted PLplot's method of handling this).  The result is that modern
418CMake (tested on CMake-2.6.4 and CMake-2.8.1) warnings about
419inconsistent library handling by Policy CMP0003 are no longer present.
420The minimum version of CMake has been updated from 2.4.5 (!) to 2.6.4.
421
4221.4 Reduction of symbol visibility for gcc.
423
424The infrastructure in LASi.h for exporting symbols for the Windows
425version of this library has been generalized for the gcc-4.x case for
426Unix platforms following the well-tested implementation used for
427the PLplot libraries.
428
429The net effect of this change is that Windows visibility of symbols
430should be unchanged and similarly for Unix _except_ for the case of
431gcc on Unix where the user specifies the gcc -fvisibility=hidden
432option.  For that case, the exported symbols are reduced to those
433exported in the Windows case.  The difference in results between using
434default visibility and -fvisibility=hidden for gcc-4.x on Unix is the
435number of visible symbols in libLASi.so is reduced from 164 to the 128
436actually needed by users of the library which should give a modest but
437still significant reduction in load times.
438
439libLASi Release 1.1.0
440~~~~~~~~~~~~~~~~~~~~~
441This is a stable release of libLASi. It represents the ongoing efforts
442of the libLASi developers to improve the libLASi library for creating
443PostScript documents that can contain characters from any of the
444script and symbol blocks supported in Unicode and by the Pango layout engine.
445
446If you encounter a problem with libLASi, then please send a bug report to
447the libLASI developers via the lasi-devel mailing list described at
448http://lists.sourceforge.net/lists/listinfo/lasi-devel.
449
450Please see the license under which this software is distributed (LGPL), and
451the disclaimer of all warrantees, given in the COPYING.LIB file.
452
453INDEX
454
4551. Changes relative to our previous release (version 1.0.5p1 for FreeType
456versions less than 2.2 and version 1.0.6 for FreeType 2.2+).
457
4581.1 Replace autotools-based build system with a CMake-based build system.
4591.2 libLASi can now be built both on Unix and Windows.
4601.3 The examples have been reorganized and extended.
4611.4 libLASi is now more robust against font/glyph issues.
462
463
4641.1 Replace autotools-based build system with a CMake-based build system.
465
466The build system is now based on CMake. It has been tested on Linux,
467Mac OS-X and Windows platforms.  For directions on how to use CMake to
468build libLASi, please consult http://www.unifont.org/lasi/.  In particular,
469the new build system has the capability of detecting the FreeType version
470so the previous split release (1.0.5p1 and 1.0.6) is no longer necessary.
471
4721.2 libLASi can now be built both on Unix and Windows
473
474Our new CMake-based build system allows building libLASi on both Unix
475(Linux, Mac OS X, and proprietary Unices) and Windows (Cygwin, MinGW/MSYS,
476and Microsoft proprietary build environments) platforms.  Instructions
477for various platforms have been collected at http://www.unifont.org/lasi/.
478
4791.3 The examples have been reorganized and extended and can now be built
480in both the build tree and install tree.
481
482After running "cmake" (which configures libLASi) and "make" (which builds
483the libLASi library and examples which use that library in the build tree,
484see instructions at http://www.unifont.org/lasi/), you can run ctest in the
485build tree to run the examples. If ctest shows no errors, the PostScript
486results of that test of the libLASi library are collected in the
487examples/example[0-2].ps files in the build tree. See examples/README
488in the source tree for descriptions of these test examples.
489
490The examples can also independently be built and run in the install tree
491created by "make install" as well using
492
493cd $version/share/lasi$lasi_version/examples
494make
495
496where $version is the installation prefix specified as a command-line option
497for the cmake command, and $lasi_version is currently 1.1.0.  The make
498command uses pkg-config to specify the correct C++ flags and link flags, and
499users with independent applications that link to libLASi are advised to use
500the same method as well.
501
5021.4 libLASi is now more robust against font/glyph issues.
503
504Missing glyphs are now rendered as a blank rather than being the cause of
505showstopping errors seen in previous libLASi releases.
506
507Some font installations were occasionally returning non-outline glyphs that
508were causing segfault errors for older libLASi versions.  The libLASi code
509has now been changed to render a blank for such cases and only attempt to
510render results for the outline glyphs it was designed for.
511

README.release

1libLASi Release 1.1.3
2~~~~~~~~~~~~~~~~~~~~~
3This is a maintenance release of libLASi that reflect the ongoing
4efforts of the libLASi developers to respond to bug reports for this
5stable and convenient library for creating PostScript documents that
6can contain characters from any of the script and symbol blocks
7supported in Unicode and by the Pango layout engine.
8
9If you encounter a problem with libLASi, then please send a bug report to
10the libLASi developers via the lasi-devel mailing list described at
11http://lists.sourceforge.net/lists/listinfo/lasi-devel.
12
13Please see the license under which this software is distributed (LGPL), and
14the disclaimer of all warranties, given in the COPYING.LIB file.
15
16INDEX
17
181. OFFICIAL NOTICES FOR USERS
19
201.1 CMake version compatibility
211.2 Backwards-incompatible libLASi API changes
221.3 Need help getting rid of deprecation build warnings
23
242. Changes relative to our previous release (version 1.1.2) in decreasing order of importance
25
262.1  Improve libLASi's response when pango/fontconfig chooses pure bitmapped fonts
272.2  Make glyph names have a one-to-one relationship with glyphs
282.3  Set target property POSITION_INDEPENDENT_CODE ON for the libLASi library
292.4  Make "MissingGlyphExample" a more stringent test of font or glyph issues for libLASi
302.5  Replace deprecated lower-case variants of Freetype macro constants with preferred upper-case form
312.6  Add bounding boxes to the "MissingGlyphExample" and "ComplexTextLayoutExample" examples
322.7  Rename example applications and results using consistent and descriptive core names
332.8  Fix low-resolution boundary box issue
342.9  Update doxygen configuration files from doxygen version 1.8.1.2 to 1.8.13
352.10 Change the minimum version of CMake from 2.8.9 to 3.13.2
36
373. Testing of this release.
38
39END of INDEX
40
411. OFFICIAL NOTICES FOR USERS
42
431.1 CMake version compatibility
44
45    Our build system is implemented using CMake.  The minimum version
46    of CMake we allow is 3.13.2 on all platforms.  That version is the
47    one we have used to test this release of libLASi (see Section 3
48    below).  However, if you try later CMake versions as they are
49    released during the life of this libLASi release, our build system
50    will likely continue to work well because CMake has an excellent
51    reputation for preserving backwards compatibility.
52
531.2 Backwards-incompatible libLASi API changes
54
55    The bug fixes in this release required backwards-incompatible
56    changes to the libLASi API (a change in the argument list of the
57    PostscriptDocument::GlyphId::GlyphId protected method that is
58    designed for internal use only and the addition of the
59    PostscriptDocument::PangoItem_do protected method that is also
60    designed for internal use only).  Therefore, the SOVERSION for
61    libLASi has been bumped from 1 to 2 to force source code that
62    depends on this library (e.g., the PLplot psttf device driver) to
63    be recompiled.  However, such source code will not require changes
64    to adjust to this backwards-incompatible change in the libLASi
65    API.
66
671.3 Need help getting rid of deprecation build warnings
68
69This release has deprecation warning build issues which are
70
71* "warning: dynamic exception specifications are deprecated in C++11 [-Wdeprecated]"
72
73* "warning: ‘PangoContext* pango_ft2_get_context(double, double)’ is deprecated: Use 'pango_font_map_create_context' instead [-Wdeprecated-declarations]"
74
75* "warning: ‘FT_FaceRec_* pango_ft2_font_get_face(PangoFont*)’ is deprecated: Use 'pango_fc_font_lock_face' instead [-Wdeprecated-declarations]"
76
77All of these are beyond my current C++ and pango skill level to fix so
78help with cleaning up any of these deprecation build warnings messages
79would be much appreciated!
80
812. Changes relative to our previous release (version 1.1.2) in decreasing order of importance
82
832.1  Improve libLASi's response when pango/fontconfig chooses pure bitmapped fonts
84
85     This change was the primary motivation for this release.
86
87     Previous to this change when pango chose the popular Noto Color
88     Emoji font to help render the Aries glyph, libLASi threw an error
89     and aborted since such pure bitmap fonts are not suitable for
90     libLASi's outline font needs.  Such a response completely stops
91     PLplot tests when PLplot standard example 7 attempts to render an
92     Aries glyph with either the psttf or psttfc devices.  So this
93     previous response was completely unacceptable, and the fix for it
94     is important.
95
96     This change fixes that previous response by replacing all glyphs
97     for a PangoItem where pango chooses a non-outline font with the
98     default glyph used to represent missing glyphs.  Of course, a
99     much better procedure would be to request pango to limit its
100     choices to outline fonts, but as far as I know there is no method
101     for doing that (outside of having one fontconfig configuration
102     for libLASi use and another for all other situations), and, in
103     any case, the present workaround is "good enough for now" because
104     pure bitmap fonts are rare (for example, it is possible that Noto
105     Color Emoji in the future may become available in the outline
106     form generally preferred for modern fonts), and Pango/fontconfig
107     chooses such pure bitmap fonts for relatively few glyphs.
108
1092.2  Make glyph names have a one-to-one relationship with glyphs
110
111     This change is an important motivation for this release.
112
113     This change is confined to the case when fonts don't follow
114     standards so that they cannot be interrogated for the glyph name,
115     i.e., FT_HAS_GLYPH_NAMES(face) is false.  Before this change,
116     libLASi computed its own unique glyph name using the template
117
118LASi_glyph_<unique number>
119
120     where <unique number> was incremented whenever the code decided a
121     new glyph had been encountered.  This scheme had the following
122     disadvantages:
123
124*    The logic for deciding when new glyphs were encountered was
125     faulty with the result that the same glyph would have multiple
126     glyph names and therefore redundant glyph information stored in
127     the PostScript header whenever, for example, both
128
129doc.osBody() << show(string)
130
131     and
132
133doc.get_dimensions(string,&lineSpacing,&xAdvance,&yMinimum,&yMaximum);
134
135     (a common combination when bounding boxes are being determined)
136     were called for the same string.
137
138*    The glyph name depended on the order with which strings were
139     processed with the result that PLplot octave results (where all
140     standard octave examples were run from one instance of octave)
141     had different glyph names than PLplot C results (where all
142     standard C examples were run using separate executables for each
143     example).
144
145*    The glyph names were completely meaningless to humans reading
146     through the PostScript code in the results.
147
148     All these issues were addressed by borrowing a static function
149     from PLplot (whose LGPL'd code allows us to do that) to calculate
150     the UCS4 (32-bit unsigned) encoding of unicode for each glyph
151     encountered in the UTF-8 encoded input string.  With the result
152     that the glyph names now have the template
153
154LASi_glyph_U+<UCS4 hexadecimal code for the glyph>
155
156     where by definition the UCS4 hexadecimal code completely
157     identifies the glyph in a unique way which is easy to look up,
158     e.g., with the gucharmap application.
159
160     The net result of this change is the PLplot test_diff_device
161     target for the case when -DPLPLOT_TEST_DEVICE=psttfc now gives a
162     clean report for the first time ever.  So this change is an
163     important one.
164
1652.3  Set target property POSITION_INDEPENDENT_CODE ON for the libLASi library
166
167     This change is an important motivation for this release.
168
169     This bug fix allows the static version of libLASi to be used with
170     shared builds of external software that depend on libLASi such as
171     the PLplot psttf device driver.
172
1732.4  Make "MissingGlyphExample" a more stringent test of font or glyph issues for libLASi
174
175     The most important change here was to add
176
177"Unicode U+2648 ARIES (twice): ♈♈"
178"Embedded newlines a\\nb\\nc: a\nb\nc"
179
180     to the strings that are rendered to PostScript by this example.
181
182     For the first of these, the Debian Buster version of pango
183     (likely due to the default fontconfig configuration) decides to
184     use the popular Noto Color Emoji font to render the Aries glyphs,
185     but the problem for that font is it is a pure bitmap font with no
186     outline information that is required by libLASi.  So this line
187     tests the response of libLASi to this situation.
188
189     For the second of these the linefeed "\n" glyph is a non-printing
190     glyph.  It appears for all such glyphs there is a "missing glyph"
191     issue so regardless of future font improvements this line seems
192     to be a reliable way to trigger missing-glyph issues to test the
193     response of libLASi to this situation.
194
1952.5  Replace deprecated lower-case variants of Freetype macro constants with preferred upper-case form
196
1972.6  Add bounding boxes to the "MissingGlyphExample" and "ComplexTextLayoutExample" examples
198
199     The resulting MissingGlyphExample.eps and
200     ComplexTextLayoutExample.eps files join SimpleLASiExample.eps as
201     being properly formatted EPS (Encapsulated PostScript) files.
202
203     Note also that for the "Complex Text Layout" case, I implemented
204     some generally useful C++ code macros (called
205     LASI_SHOW_AND_UPDATE_BB, LASI_SCALED_SHOW_AND_UPDATE_BB, and
206     LASI_ROTATED_SHOW_AND_UPDATE_BB), which made it straightforward
207     to handle even complex cases such as determining the bounding box
208     of text that has undergone anamorphic scaling or rotation.  For
209     example, the LASI_ROTATED_SHOW_AND_UPDATE_BB macro includes C++
210     code to apply the rotation matrix to determine the x,y
211     coordinates of the corners of the rotated text box and use those
212     corner coordinates to help determine the overall bounding box.
213
2142.7  Rename example applications and results using consistent and descriptive core names
215
216     Those core names are " MissingGlyphExample", "SimpleLASiExample",
217     and "ComplexTextLayoutExample".  As a result the example source
218     code name is <core name>.cpp, the example application name is
219     <core name> (or <core name>.exe on Windows platforms), the EPS
220     (Encapsulated PostScript) results are named <core name>.eps, and
221     the PNG results (generated from the EPS results using inkscape)
222     are named <core name>.png.
223
2242.8  Fix low-resolution boundary box issue
225
226     As a result of this change the low-res (int) BB (bounding box)
227     limits are calculated from the high-res (double) BB limits with
228     the appropriate combinations of floor and ceil so the low-res
229     limits always lie on or outside (by up to but not including 1
230     point) the high-res limits.  Previously this calculation was done
231     incorrectly with floor for all limits.
232
2332.9  Update doxygen configuration files from doxygen version 1.8.1.2 to 1.8.13
234
235     These changes were done in the usual way by running the following
236     commands:
237
238doxygen -u Doxyfile.developer
239doxygen -u Doxyfile.user
240
2412.10 Change the minimum version of CMake from 2.8.9 to 3.13.2
242
243     This change was motivated by the bug fixes in later CMake
244     versions and also the much better checking of the build system
245     that occurs for the policies automatically used for 3.13.2.
246
2473. Testing of this release.
248
249This release has been successfully built and run-tested (following the
250prescription in README.Release_Manager_Cookbook) for both the shared
251and static library case on Linux (Debian Buster) using CMake-3.13.2
252(the minimum allowed version of CMake for libLASi), libpango-1.42.4,
253libcairo-1.16.0, libfreetype-2.9.1, and libfontconfig-2.13.1.
254
255This release has not been tested (yet) on Mac OS X or Windows
256platforms, but we anticipate no difficulties on those platforms since
257previous versions of libLASi have worked well on those platforms.  In
258other words, the cross-platform nature of libLASi appears to have been
259well supported by CMake in the past, and we feel that happy state will
260continue with this release as well.
261