COMPAT 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411
  1. These are some release notes that deal with new features and backward
  2. compatibility of the plotutils package, on both user and programmer levels.
  3. Release 2.6, dated 9/2009
  4. -------------------------
  5. This release fixes a problem lurking in ode/specfun.c for a long time:
  6. copyrighted code, dating to the days when that file was a modified version
  7. of the file specfun.c in the gnuplot distribution. The gnuplot folks have
  8. since rewritten their specfun.c to remove most of the copyright notices.
  9. (At the cost of introducing new ones, dealing with the Cephes
  10. library... but I digress.) The plotutils ode/specfun.c has been totally
  11. rewritten: it is based on published algorithms, cited in the code, and
  12. contains no non-GNU copyrights.
  13. The SVG compatibility problems mentioned below seem to be going away. In
  14. the past, outline fonts in libplot's SVG output have not been rendered
  15. correctly by many SVG viewers, mostly because they are drawn by libplot in
  16. an intricate way, involving a coordinate reflection. But firefox and
  17. svgdisplay (part of KDE) now render reflected fonts correctly. The GIMP
  18. SVG plugin may not yet, but then it has problems with fonts in general.
  19. inkscape may be improving as well (slowly). Rewriting libplot's SVG export
  20. code to work around such problems no longer seems necessary. (Horizontal
  21. and especially vertical justification of text strings are not yet widely
  22. supported, but when exporting SVG, libplot now does its own justification.)
  23. Release 2.5.1, dated 7/2008
  24. ---------------------------
  25. This release fixes a few bugs. However, there are persistent problems with
  26. text-strings in the SVG output format. Many applications that can view or
  27. edit SVG files (in particular, inkscape) do not correctly implement the SVG
  28. 1.1 specification. So, they may position text strings incorrectly, and
  29. even position incorrectly individual characters within a text string.
  30. If you encounter this problem, the fix is to specify a stroked ("Hershey")
  31. font, such as HersheySerif or HersheySerif-Bold. A list of available
  32. fonts, in SVG output, is obtained by doing `graph -Tsvg --help-fonts'.
  33. Each character in any Hershey font is made up of stroked line segments, and
  34. most SVG viewers can display line segments correctly.
  35. This problem may be worked around in future releases of the SVG output
  36. driver.
  37. Release 2.5, dated 12/2005
  38. --------------------------
  39. This is primarily a bug fix release, but the number of bug fixes is large.
  40. The biggest change is to the X11 driver.
  41. The font support in X11 (the X Window System) is in a state of overturn,
  42. and previous releases of the plotutils package do not produce good-looking
  43. output (of rotated text strings, especially) on many current X11 displays.
  44. This is for the following reason. The traditional `core' X fonts stored on
  45. any X11 display, each of which has a long name (a so-called XLFD name), are
  46. going away. The new model is for fonts to be stored on the client side,
  47. and to be rasterized by the FreeType rasterizer via the Xft library. Even
  48. in advance of this change, X servers such as XFree86 are starting to drop
  49. support for the more sophisticated features of the core X font subsystem,
  50. such as its ability to supply rotated or sheared glyphs.
  51. So the libplot library now produces its own rotated and sheared glyphs. It
  52. still uses the core X fonts, but it no longer requests rotation or shearing
  53. when retrieving rasterized characters (glyphs) from those fonts. Instead,
  54. it rotates or shears them itself. The result looks fairly good. For
  55. example, the output from the `rotating A' sample program in the plotutils
  56. manual looks as good as it always did, and takes no longer to generate.
  57. The command-line graphics utilities (e.g., `graph') support a `--rotation'
  58. option, to rotate graphics within their `viewport' or `plotting box'. (For
  59. X11 output, requested by `-T X', this viewport is simply the popped-up X
  60. window.) The argument of this option can now be an arbitrary number,
  61. interpreted as a counterclockwise rotation in degrees. (It used to be
  62. required to be 0,90,180, or 270.) You can now do this sort of thing:
  63. echo 0 0 1 1 2 0 | graph -T X -C -L 'A Postmodern Plot' -W 0.01 --rotation 45
  64. The same thing can be done in any other output format (e.g., as requested
  65. by `-T ps' or `-T svg'.) This enhancement is independent of the rewriting
  66. of the X11 driver, but was suggested by it.
  67. A bad bug in the output of the PS driver, which prevented its being
  68. displayed by some versions of ghostscript/ghostview/gv, has been fixed.
  69. The output of the SVG driver has been improved, to be more compatible with
  70. the SVG parsers in Firefox and the ImageMagick package. Unfortunately,
  71. font handling in both of them is somewhat broken. If you have trouble
  72. using the standard builtin `Postscript' fonts (meaning, Adobe's standard
  73. set of 35 fonts such as Helvetica, Times-Roman, Courier, etc.), you should
  74. use the builtin Hershey fonts instead. Each character in any Hershey font
  75. is `stroked': it is made up of line segments. The Hershey fonts look quite
  76. good in Firefox, for example, due to its anti-aliasing.
  77. To check the drawing of SVG text strings, first do
  78. echo 0 0 1 1 2 0 | graph -T svg -C -L 'A Postmodern Plot' -W 0.01 --rotation 45 > plot.svg
  79. to obtain an SVG plot. To display it using Firefox and the ImageMagick
  80. package respectively, do
  81. firefox file:${PWD}/plot.svg
  82. display plot.svg
  83. If there are problems with your copy of Firefox or the `display'
  84. application, some of the axis labels may be missing or displaced. If so,
  85. add the option `-F HersheySerif' to the `graph' command, to request the
  86. HersheySerif font rather than the default font (Helvetica).
  87. Release 2.4.1, dated 7/2000
  88. ---------------------------
  89. The `--page-size' option supported by the command-line graphics utilities
  90. has been extended, to allow precise specification of viewport size and
  91. location in the output, e.g., on a printed page. For example,
  92. `--page-size=letter,xsize=5in,ysize=3in,xorigin=1in,yorigin=2in' is now a
  93. possible command-line option. Previously, only `xoffset' and `yoffset'
  94. fields were supported.
  95. You can get some interesting visual effects by setting xsize or ysize to a
  96. negative value. For example,
  97. echo 0 0 1 1 2 0 | graph -Tps --page-size letter,xsize=-8in,ysize=8in
  98. will write to standard output a Postscript graph for a letter-size page.
  99. The graph will be drawn into a viewport that has the same size as usual
  100. (8in x 8in), but it will be reflected from left to right.
  101. The ability to specify a custom viewport size should be useful when
  102. producing SVG or WebCGM graphics for Web pages. When producing SVG or
  103. WebCGM output, only the xsize,ysize fields are meaningful; xorigin,
  104. yorigin, xoffset, and yoffset are ignored.
  105. The syntax of the libplot Plotter parameter `PAGESIZE' has been similarly
  106. extended.
  107. Libplot version number is now 4.1.
  108. Release 2.4, dated 6/2000
  109. -------------------------
  110. SVG output is now supported. SVG is a new XML-based vector graphics format
  111. being developed by the W3 Consortium.
  112. The command-line plotting utilities now support `-T svg --bg-color none'
  113. and `-T cgm --bg-color none' options, to turn off the background (which by
  114. default is white) in SVG and WebCGM output. This is useful when generating
  115. graphics files for use in Web pages. Similarly, in libplot, SVG and CGM
  116. Plotters now allow the parameter `BG_COLOR' to equal "none".
  117. PNG output is now supported. A PNG driver will be installed in libplot,
  118. and made available to the command-line plotting utilities, if libpng and
  119. libz are found at installation time. The version number of libpng must be
  120. 0.95 or larger (libpng 0.95 was released in March 1997).
  121. If the PNG driver is included, you must now include the additional options
  122. `-lpng -lz' when compiling and linking a program with libplot or
  123. libplotter. `configure' now supports a `--without-libpng' option to
  124. disable PNG support.
  125. ReGIS output is now supported, for display on older graphics terminals like
  126. the VT340 (color), the VT330 (monochrome), and emulators. The ReGIS driver
  127. contains a blemish: paths that extend beyond the boundary of a ReGIS
  128. display are never filled, even if filling is requested, because they need
  129. to be clipped against the boundary, and the required clipping code hasn't
  130. yet been written.
  131. Colors may now be specified, both on the command line and when using the
  132. libplot API, by their 24-bit RGB representation, expressed as six
  133. hexadecimal digits. For example, "#ffffff" is equivalent to "white".
  134. The command-line plotting utilities now support an `--emulate-color yes'
  135. option, and all Plotters now support a corresponding parameter,
  136. "EMULATE_COLOR". If emulation is performed, all colors in the output will
  137. be replaced by grayscale approximations. This is particularly useful when
  138. producing PCL 5 output to be printed on a monochrome PCL 5 device, such as
  139. a monochrome LaserJet. Many monochrome PCL 5 devices, on their own, do a
  140. poor job of emulating color (they print every nonwhite solid color as
  141. black).
  142. libplot now supports compound paths, i.e. paths that are made up of
  143. multiple simple paths, so long as the simple paths do not intersect each
  144. other (they are allowed to intersect themselves). You draw each simple
  145. path of a compound path in the usual way, but you end each one by calling
  146. endsubpath(). The compound path is terminated and drawn by calling
  147. endpath(). Just as when traditional non-compound paths are drawn, the call
  148. to endpath() can usually be omitted.
  149. So the libplot API has been expanded to include endsubpath(), and
  150. orientation() too. orientation() specifies the direction in which
  151. circles/ellipses/boxes are traversed. (Specifying this, for any
  152. circle/ellipse/box that is a subpath of a compound path, affects the
  153. filling of the compound path by determining which points are `inside' or
  154. `outside'.)
  155. Handling of device-resident HP vector fonts ("stick fonts"), when drawing
  156. text strings in HP-GL/2 output, has been improved. Previously, no account
  157. was taken of device-resident font kerning. That's appropriate when
  158. producing PCL 5 output for a LaserJet with an HP-GL/2 emulation module,
  159. since LaserJets don't do sophisticated kerning of stick fonts, even when
  160. they support them. But any full-featured HP-GL/2 plotter can do kerning of
  161. variable-width stick fonts. So when producing HP-GL/2 output, we now take
  162. that into account when computing the width of text strings. This affects
  163. the positioning of text strings on an output page.
  164. The StickANK and ArcANK HP vector fonts, which provide JIS ASCII and
  165. half-width Katakana, are now available when producing HP-GL/2 output.
  166. The miter limit (for line joins) which is placed in any HP-GL/2 or PCL 5
  167. output file is now always rounded to the closest integer, downward. That's
  168. because at least one HP-GL/2 pen plotter (the HP 7550B, which was HP's
  169. first) had buggy firmware that couldn't parse a non-integer miter limit.
  170. When HPGL_VERSION is set to 1 or 1.5, the filling of solid regions now uses
  171. cross-hatching, instead of the filling with a single pen color that used to
  172. be used. This occurs whenever the fill color is not one of the defined pen
  173. colors. The algorithm employed, for emulating shading by cross-hatching,
  174. is the one used by HP's HP-GL/2 pen plotters.
  175. A new function, fsetmatrix(), has been added to the libplot/libplotter API,
  176. as an alternative to space(). It sets the transformation matrix from user
  177. coordinates to NDC (normalized device coordinates). In NDC space, the
  178. graphics display, i.e. viewport, has corners (0,0), (1,0), (1,1), (0,1).
  179. space() and/or fsetmatrix() no longer need to be called at the beginning of
  180. each page of graphics.
  181. The alabel() function in the libplot/libplotter API now accepts a new
  182. vertical positioning option, `C', to request alignment of a text string's
  183. cap line with the present vertical position.
  184. Color drawing on X displays has been speeded up. If the X display uses a
  185. truecolor `visual', pixel value computations are performed in libplot
  186. itself, rather than in the X server. This removes the need to call
  187. XAllocColor() whenever a new pen color or fill color is selected (which
  188. used to require a round-trip to the server, slowing things down). Also, a
  189. Plotter parameter `XDRAWABLE_VISUAL' has been added. It should be set by
  190. the programmer if a non-default colormap is used. libplot can determine
  191. from it whether or not the visual is of the truecolor class.
  192. Libplot version number is now 4.0.
  193. Release 2.3, dated 10/1999
  194. --------------------------
  195. CGM output is now supported. By default, a CGM Plotter emits
  196. binary-encoded version-3 CGM format, conforming to the WebCGM profile.
  197. (For information on WebCGM, see http://www.cgmopen.org .) The CGM format
  198. version number may be reduced by setting the libplot parameter (or
  199. environment variable) CGM_MAX_VERSION. Irrespective of version, a
  200. human-readable CGM file, i.e., one encoded as clear text, may be produced
  201. by setting CGM_ENCODING to "clear_text". Clear text CGM files are valid
  202. CGM files, though technically they don't conform to the WebCGM profile
  203. (a WebCGM file is meant to be binary).
  204. The package is now based on libplot version 3.0, which has new thread-safe
  205. C and C++ APIs, i.e. APIs which (1) maintain no global state, and (2) are
  206. pthread-aware. The names of all new thread-safe libplot functions end in
  207. "_r", for `reentrant' or `revised'. Each of them takes a pointer to an
  208. opaque plPlotter object as its first argument.
  209. There are new functions in both libplot and libplotter for creating and
  210. manipulating PlotterParams objects, which store Plotter parameters.
  211. Parameters are copied from such an object when the Plotter class is
  212. instantiated.
  213. The old C and C++ API's are still supported, though deprecated. So you can
  214. still use pl_newpl() and pl_openpl(), etc., instead of pl_newpl_r() and
  215. pl_openpl_r(), etc.
  216. A new API function, pl_pentype_r(), has been added. If its argument is 0,
  217. stroking of paths, as opposed to filling, will be turned off. So `edgeless
  218. polygons' can now be drawn.
  219. Fig and PCL Plotters now position their viewports (i.e. "graphics displays")
  220. in the center of their pages, like PS Plotters. So the PCL_XOFFSET and
  221. PCL_YOFFSET parameters have been removed, and PCL_ROTATE too. Similarly,
  222. HPGL_XOFFSET and HPGL_YOFFSET parameters have been removed, even though tbe
  223. viewport position for HP-GL Plotters has not changed.
  224. Shifting of the viewport on the page, for PCL, HP-GL, Fig, and PS Plotters,
  225. is now accomplished through the PAGESIZE parameter. E.g., its value could
  226. be "letter,xoffset=1in,yoffset=-2cm" or "a4,yoffset=12mm".
  227. A new parameter, ROTATION, has been introduced; it applies to PCL, HP-GL,
  228. Fig, and PS Plotters. It defines rotation of the viewport on the page,
  229. which is not the same as what the HPGL_ROTATE parameter, previously
  230. introduced for HPGL Plotters, defines. Values of ROTATION can be "no",
  231. "yes", "0", "90", "180", "270".
  232. A new scan-conversion library, called libxmi, is optionally built and
  233. installed, together with documentation. It contains the scan-conversion
  234. code that is used by libplot's GIF and PNM drivers, which is based on the
  235. X11 sample server code. libxmi is also distributed independently. The
  236. libxmi version number is 1.1.
  237. Release 2.2, dated 3/1999
  238. -------------------------
  239. Massive expansion of the C API, with new drivers, and introduction of
  240. libplotter (C++ class library). Backward compatibility of the C API
  241. maintained, except that all functions now begin with "pl_". Header file
  242. "plotcompat.h", if needed, will redefine old function names as new function
  243. names. Libplot version number is now 2.0.
  244. outfile() function, always more or less deprecated, now declared
  245. obsolescent. No longer documented.
  246. Release 2.1.6
  247. -------------
  248. AI driver added, but libplot API unchanged. Libplot version number is now
  249. 1.6.
  250. Support in plot.h header file for old names for endpath() and filltype(),
  251. which began in plotutils-2.0 (see below), finally dropped.
  252. Release 2.1.5
  253. -------------
  254. PCL 5 driver added. Kerning of device-resident `HP stick fonts' accessible
  255. to the HP-GL driver, when HPGL_VERSION=1.5, also added. Libplot API
  256. unchanged, but libplot version number is now 1.5.
  257. Release 2.1.2, 2.1.3, 2.1.4
  258. ---------------------------
  259. No additions to libplot API, but the semantics of closepl() vs. deletepl()
  260. have finally changed (programmers were warned about this in the texinfo
  261. documentation). The libplot version number is now 1.2 (upped to 1.3 for
  262. release 2.1.3 and 1.4 for 2.1.4).
  263. Plotter output, for non-realtime plotting, is now guaranteed to be emitted
  264. only when deletepl() is called. I.e., graphic output is not necessarily
  265. written to the output stream after each page is closed. In practice, this
  266. affects only Postscript output. Emitting PS only after the final page of a
  267. multi-page graphics file is closed enables the PS to conform to the DSC
  268. (Postscript Document Structuring Conventions).
  269. Support for many new stick fonts added (mostly available only if using
  270. `-T hpgl', with HPGL_VERSION=1.5. `Stick fonts' are HP's device-resident
  271. vector fonts.
  272. If using `-T hpgl' with HPGL_VERSION=1, circles and rectangles aligned
  273. with the coordinate axes can now be filled.
  274. Names of many Hershey fonts changed, but old names continue to work.
  275. Release 2.1.1
  276. -------------
  277. No additions to libplot API, though libplot was improved in various ways.
  278. The libplot version number is now 1.1.
  279. Release 2.1
  280. -----------
  281. No incompatibilities with plotutils release 2.0. But many new command-line
  282. options added to user-level utilities, and the libplot API was expanded by
  283. the addition of bgcolor() and bgcolorname(). The libplot version number is
  284. now 1.0.
  285. Release 2.0
  286. -----------
  287. In release 2.0 the idea of separate variants of the `graph', `plot', and
  288. `tek2plot' programs for each display device was finally done away with.
  289. There is now only a single instance of each program. The display device is
  290. specified by the `-T' option.
  291. The merging of the device-specific variants was made possible by the
  292. merging of the device-specific variants of the libplot library on which
  293. they were based. There is now only a single library, which is structured
  294. in an object-oriented way. There are new functions, newpl(), selectpl(),
  295. openpl(), which allow the creation of an arbitrarily large number of
  296. `Plotter' objects simultaneously. Each Plotter produces output for one
  297. display device.
  298. On startup of libplot, a single default Plotter is created and selected,
  299. namely one that produces GNU metafile format. This is for backward
  300. compatibility: it allows programs written for earlier versions of GNU
  301. libplot, and even Unix libplot, to link with it and run as expected. If
  302. you prefer a different default Plotter type, you should select it at
  303. installation time. For example, including -DDEFAULT_PLOTTER_TYPE=\"ps\"
  304. in your CFLAGS option will cause the default Plotter to produce
  305. Postscript output instead.
  306. The libplot API changed in release 2.0 in a few other ways.
  307. 1. falabel() was dropped from the API, and alabel() no longer returns a
  308. value related to the width of the text string that it renders. If you need
  309. to get the width of a text string, use flabelwidth() or labelwidth().
  310. 2. The semantics of the arc() primitive have changed. It now draws an arc
  311. that may be clockwise as well as counterclockwise, but is restricted to
  312. have opening angle no more than 180 degrees. Also, it moves the graphics
  313. cursor position to the endpoint of the arc.
  314. 3. The box() primitive now moves the graphics cursor to the midpoint of the
  315. box, rather than to the second-specified vertex.
  316. 4. endpoly() has been renamed endpath(), and fill() has been renamed
  317. filltype(). These last changes are temporarily supported by the plot.h
  318. include file.
  319. As of release 2.0 of the package, libplot has its own, independent,
  320. versioning system. The version of libplot distributed with release 2.0 is
  321. numbered 0.0. Beginning with version 0.0, libplot is installed both as a
  322. static library and as a shared library (a DLL), on machines that support
  323. shared libraries.