pango 0.90.2-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1441) hide show
  1. data/ChangeLog +678 -0
  2. data/README +33 -0
  3. data/Rakefile +83 -0
  4. data/ext/pango/Makefile +172 -0
  5. data/ext/pango/depend +7 -0
  6. data/ext/pango/extconf.rb +75 -0
  7. data/ext/pango/pango.def +18 -0
  8. data/ext/pango/rbpango.c +27 -0
  9. data/ext/pango/rbpango.h +93 -0
  10. data/ext/pango/rbpangoanalysis.c +197 -0
  11. data/ext/pango/rbpangoattribute.c +557 -0
  12. data/ext/pango/rbpangoattriterator.c +137 -0
  13. data/ext/pango/rbpangoattrlist.c +104 -0
  14. data/ext/pango/rbpangocairo.c +229 -0
  15. data/ext/pango/rbpangocolor.c +121 -0
  16. data/ext/pango/rbpangocontext.c +341 -0
  17. data/ext/pango/rbpangocoverage.c +104 -0
  18. data/ext/pango/rbpangoengine.c +65 -0
  19. data/ext/pango/rbpangofont.c +123 -0
  20. data/ext/pango/rbpangofontdescription.c +300 -0
  21. data/ext/pango/rbpangofontface.c +71 -0
  22. data/ext/pango/rbpangofontfamily.c +74 -0
  23. data/ext/pango/rbpangofontmap.c +104 -0
  24. data/ext/pango/rbpangofontmetrics.c +85 -0
  25. data/ext/pango/rbpangofontset.c +68 -0
  26. data/ext/pango/rbpangofontsetsimple.c +53 -0
  27. data/ext/pango/rbpangoglyphinfo.c +119 -0
  28. data/ext/pango/rbpangoglyphitem.c +129 -0
  29. data/ext/pango/rbpangoglyphstring.c +162 -0
  30. data/ext/pango/rbpangogravity.c +43 -0
  31. data/ext/pango/rbpangoinits.c +71 -0
  32. data/ext/pango/rbpangoitem.c +110 -0
  33. data/ext/pango/rbpangolanguage.c +88 -0
  34. data/ext/pango/rbpangolayout.c +593 -0
  35. data/ext/pango/rbpangolayoutiter.c +202 -0
  36. data/ext/pango/rbpangolayoutline.c +256 -0
  37. data/ext/pango/rbpangologattr.c +107 -0
  38. data/ext/pango/rbpangomain.c +213 -0
  39. data/ext/pango/rbpangomatrix.c +155 -0
  40. data/ext/pango/rbpangorectangle.c +178 -0
  41. data/ext/pango/rbpangorenderer.c +204 -0
  42. data/ext/pango/rbpangoscript.c +80 -0
  43. data/ext/pango/rbpangoscriptiter.c +91 -0
  44. data/ext/pango/rbpangotabarray.c +128 -0
  45. data/ext/pango/rbpangoversion.h +24 -0
  46. data/extconf.rb +49 -0
  47. data/lib/1.8/pango.so +0 -0
  48. data/lib/1.9/pango.so +0 -0
  49. data/lib/pango.rb +70 -0
  50. data/sample/attribute.rb +82 -0
  51. data/sample/break.rb +26 -0
  52. data/sample/gdk_layout.rb +27 -0
  53. data/sample/glyphstring.rb +61 -0
  54. data/sample/item.rb +35 -0
  55. data/sample/label.rb +23 -0
  56. data/sample/layout.rb +102 -0
  57. data/sample/pango_cairo.rb +66 -0
  58. data/sample/parse.rb +33 -0
  59. data/sample/sample.txt +10 -0
  60. data/sample/script.rb +21 -0
  61. data/test/pango-test-utils.rb +9 -0
  62. data/test/run-test.rb +28 -0
  63. data/test/test-attribute.rb +19 -0
  64. data/test/test-language.rb +7 -0
  65. data/test/test_layout.rb +20 -0
  66. data/vendor/local/bin/envsubst.exe +0 -0
  67. data/vendor/local/bin/fc-cache.exe +0 -0
  68. data/vendor/local/bin/fc-cat.exe +0 -0
  69. data/vendor/local/bin/fc-list.exe +0 -0
  70. data/vendor/local/bin/freetype-config +160 -0
  71. data/vendor/local/bin/freetype6.dll +0 -0
  72. data/vendor/local/bin/gettext.exe +0 -0
  73. data/vendor/local/bin/gettext.sh +123 -0
  74. data/vendor/local/bin/glib-genmarshal.exe +0 -0
  75. data/vendor/local/bin/glib-gettextize +188 -0
  76. data/vendor/local/bin/glib-mkenums +511 -0
  77. data/vendor/local/bin/gobject-query.exe +0 -0
  78. data/vendor/local/bin/gspawn-win32-helper-console.exe +0 -0
  79. data/vendor/local/bin/gspawn-win32-helper.exe +0 -0
  80. data/vendor/local/bin/intl.dll +0 -0
  81. data/vendor/local/bin/libasprintf-0.dll +0 -0
  82. data/vendor/local/bin/libcairo-2.dll +0 -0
  83. data/vendor/local/bin/libexpat-1.dll +0 -0
  84. data/vendor/local/bin/libfontconfig-1.dll +0 -0
  85. data/vendor/local/bin/libgcc_s_dw2-1.dll +0 -0
  86. data/vendor/local/bin/libgio-2.0-0.dll +0 -0
  87. data/vendor/local/bin/libglib-2.0-0.dll +0 -0
  88. data/vendor/local/bin/libgmodule-2.0-0.dll +0 -0
  89. data/vendor/local/bin/libgobject-2.0-0.dll +0 -0
  90. data/vendor/local/bin/libgthread-2.0-0.dll +0 -0
  91. data/vendor/local/bin/libpango-1.0-0.dll +0 -0
  92. data/vendor/local/bin/libpangocairo-1.0-0.dll +0 -0
  93. data/vendor/local/bin/libpangoft2-1.0-0.dll +0 -0
  94. data/vendor/local/bin/libpangowin32-1.0-0.dll +0 -0
  95. data/vendor/local/bin/libpng14-14.dll +0 -0
  96. data/vendor/local/bin/ngettext.exe +0 -0
  97. data/vendor/local/bin/pango-querymodules.exe +0 -0
  98. data/vendor/local/bin/pango-view.exe +0 -0
  99. data/vendor/local/bin/xmlwf.exe +0 -0
  100. data/vendor/local/bin/zlib1.dll +0 -0
  101. data/vendor/local/etc/fonts/fonts.conf +151 -0
  102. data/vendor/local/etc/fonts/fonts.dtd +224 -0
  103. data/vendor/local/etc/pango/pango.modules +5 -0
  104. data/vendor/local/include/autosprintf.h +66 -0
  105. data/vendor/local/include/cairo/cairo-deprecated.h +123 -0
  106. data/vendor/local/include/cairo/cairo-features.h +27 -0
  107. data/vendor/local/include/cairo/cairo-ft.h +82 -0
  108. data/vendor/local/include/cairo/cairo-gobject.h +186 -0
  109. data/vendor/local/include/cairo/cairo-pdf.h +94 -0
  110. data/vendor/local/include/cairo/cairo-ps.h +114 -0
  111. data/vendor/local/include/cairo/cairo-script-interpreter.h +117 -0
  112. data/vendor/local/include/cairo/cairo-svg.h +82 -0
  113. data/vendor/local/include/cairo/cairo-version.h +8 -0
  114. data/vendor/local/include/cairo/cairo-win32.h +112 -0
  115. data/vendor/local/include/cairo/cairo.h +2684 -0
  116. data/vendor/local/include/expat.h +1014 -0
  117. data/vendor/local/include/expat_external.h +115 -0
  118. data/vendor/local/include/fontconfig/fcfreetype.h +59 -0
  119. data/vendor/local/include/fontconfig/fcprivate.h +123 -0
  120. data/vendor/local/include/fontconfig/fontconfig.h +963 -0
  121. data/vendor/local/include/freetype2/freetype/config/ftconfig.h +477 -0
  122. data/vendor/local/include/freetype2/freetype/config/ftheader.h +780 -0
  123. data/vendor/local/include/freetype2/freetype/config/ftmodule.h +20 -0
  124. data/vendor/local/include/freetype2/freetype/config/ftoption.h +733 -0
  125. data/vendor/local/include/freetype2/freetype/config/ftstdlib.h +173 -0
  126. data/vendor/local/include/freetype2/freetype/freetype.h +3919 -0
  127. data/vendor/local/include/freetype2/freetype/ftadvanc.h +179 -0
  128. data/vendor/local/include/freetype2/freetype/ftbbox.h +94 -0
  129. data/vendor/local/include/freetype2/freetype/ftbdf.h +209 -0
  130. data/vendor/local/include/freetype2/freetype/ftbitmap.h +227 -0
  131. data/vendor/local/include/freetype2/freetype/ftcache.h +1125 -0
  132. data/vendor/local/include/freetype2/freetype/ftchapters.h +103 -0
  133. data/vendor/local/include/freetype2/freetype/ftcid.h +166 -0
  134. data/vendor/local/include/freetype2/freetype/fterrdef.h +244 -0
  135. data/vendor/local/include/freetype2/freetype/fterrors.h +206 -0
  136. data/vendor/local/include/freetype2/freetype/ftgasp.h +120 -0
  137. data/vendor/local/include/freetype2/freetype/ftglyph.h +613 -0
  138. data/vendor/local/include/freetype2/freetype/ftgxval.h +358 -0
  139. data/vendor/local/include/freetype2/freetype/ftgzip.h +102 -0
  140. data/vendor/local/include/freetype2/freetype/ftimage.h +1301 -0
  141. data/vendor/local/include/freetype2/freetype/ftincrem.h +353 -0
  142. data/vendor/local/include/freetype2/freetype/ftlcdfil.h +213 -0
  143. data/vendor/local/include/freetype2/freetype/ftlist.h +277 -0
  144. data/vendor/local/include/freetype2/freetype/ftlzw.h +99 -0
  145. data/vendor/local/include/freetype2/freetype/ftmac.h +274 -0
  146. data/vendor/local/include/freetype2/freetype/ftmm.h +378 -0
  147. data/vendor/local/include/freetype2/freetype/ftmodapi.h +483 -0
  148. data/vendor/local/include/freetype2/freetype/ftmoderr.h +155 -0
  149. data/vendor/local/include/freetype2/freetype/ftotval.h +203 -0
  150. data/vendor/local/include/freetype2/freetype/ftoutln.h +537 -0
  151. data/vendor/local/include/freetype2/freetype/ftpfr.h +172 -0
  152. data/vendor/local/include/freetype2/freetype/ftrender.h +230 -0
  153. data/vendor/local/include/freetype2/freetype/ftsizes.h +159 -0
  154. data/vendor/local/include/freetype2/freetype/ftsnames.h +200 -0
  155. data/vendor/local/include/freetype2/freetype/ftstroke.h +716 -0
  156. data/vendor/local/include/freetype2/freetype/ftsynth.h +80 -0
  157. data/vendor/local/include/freetype2/freetype/ftsystem.h +347 -0
  158. data/vendor/local/include/freetype2/freetype/fttrigon.h +350 -0
  159. data/vendor/local/include/freetype2/freetype/fttypes.h +588 -0
  160. data/vendor/local/include/freetype2/freetype/ftwinfnt.h +274 -0
  161. data/vendor/local/include/freetype2/freetype/ftxf86.h +83 -0
  162. data/vendor/local/include/freetype2/freetype/t1tables.h +504 -0
  163. data/vendor/local/include/freetype2/freetype/ttnameid.h +1247 -0
  164. data/vendor/local/include/freetype2/freetype/tttables.h +759 -0
  165. data/vendor/local/include/freetype2/freetype/tttags.h +107 -0
  166. data/vendor/local/include/freetype2/freetype/ttunpat.h +59 -0
  167. data/vendor/local/include/ft2build.h +61 -0
  168. data/vendor/local/include/glib-2.0/gio/gappinfo.h +237 -0
  169. data/vendor/local/include/glib-2.0/gio/gasyncinitable.h +119 -0
  170. data/vendor/local/include/glib-2.0/gio/gasyncresult.h +73 -0
  171. data/vendor/local/include/glib-2.0/gio/gbufferedinputstream.h +123 -0
  172. data/vendor/local/include/glib-2.0/gio/gbufferedoutputstream.h +82 -0
  173. data/vendor/local/include/glib-2.0/gio/gcancellable.h +103 -0
  174. data/vendor/local/include/glib-2.0/gio/gcharsetconverter.h +60 -0
  175. data/vendor/local/include/glib-2.0/gio/gcontenttype.h +57 -0
  176. data/vendor/local/include/glib-2.0/gio/gconverter.h +95 -0
  177. data/vendor/local/include/glib-2.0/gio/gconverterinputstream.h +80 -0
  178. data/vendor/local/include/glib-2.0/gio/gconverteroutputstream.h +80 -0
  179. data/vendor/local/include/glib-2.0/gio/gdatainputstream.h +133 -0
  180. data/vendor/local/include/glib-2.0/gio/gdataoutputstream.h +116 -0
  181. data/vendor/local/include/glib-2.0/gio/gdrive.h +225 -0
  182. data/vendor/local/include/glib-2.0/gio/gemblem.h +58 -0
  183. data/vendor/local/include/glib-2.0/gio/gemblemedicon.h +62 -0
  184. data/vendor/local/include/glib-2.0/gio/gfile.h +1017 -0
  185. data/vendor/local/include/glib-2.0/gio/gfileattribute.h +77 -0
  186. data/vendor/local/include/glib-2.0/gio/gfileenumerator.h +133 -0
  187. data/vendor/local/include/glib-2.0/gio/gfileicon.h +56 -0
  188. data/vendor/local/include/glib-2.0/gio/gfileinfo.h +951 -0
  189. data/vendor/local/include/glib-2.0/gio/gfileinputstream.h +112 -0
  190. data/vendor/local/include/glib-2.0/gio/gfileiostream.h +118 -0
  191. data/vendor/local/include/glib-2.0/gio/gfilemonitor.h +95 -0
  192. data/vendor/local/include/glib-2.0/gio/gfilenamecompleter.h +76 -0
  193. data/vendor/local/include/glib-2.0/gio/gfileoutputstream.h +119 -0
  194. data/vendor/local/include/glib-2.0/gio/gfilterinputstream.h +76 -0
  195. data/vendor/local/include/glib-2.0/gio/gfilteroutputstream.h +76 -0
  196. data/vendor/local/include/glib-2.0/gio/gicon.h +91 -0
  197. data/vendor/local/include/glib-2.0/gio/ginetaddress.h +103 -0
  198. data/vendor/local/include/glib-2.0/gio/ginetsocketaddress.h +69 -0
  199. data/vendor/local/include/glib-2.0/gio/ginitable.h +96 -0
  200. data/vendor/local/include/glib-2.0/gio/ginputstream.h +172 -0
  201. data/vendor/local/include/glib-2.0/gio/gio.h +101 -0
  202. data/vendor/local/include/glib-2.0/gio/gioenums.h +703 -0
  203. data/vendor/local/include/glib-2.0/gio/gioenumtypes.h +79 -0
  204. data/vendor/local/include/glib-2.0/gio/gioerror.h +48 -0
  205. data/vendor/local/include/glib-2.0/gio/giomodule.h +132 -0
  206. data/vendor/local/include/glib-2.0/gio/gioscheduler.h +52 -0
  207. data/vendor/local/include/glib-2.0/gio/giostream.h +112 -0
  208. data/vendor/local/include/glib-2.0/gio/giotypes.h +339 -0
  209. data/vendor/local/include/glib-2.0/gio/gloadableicon.h +97 -0
  210. data/vendor/local/include/glib-2.0/gio/gmemoryinputstream.h +82 -0
  211. data/vendor/local/include/glib-2.0/gio/gmemoryoutputstream.h +97 -0
  212. data/vendor/local/include/glib-2.0/gio/gmount.h +242 -0
  213. data/vendor/local/include/glib-2.0/gio/gmountoperation.h +123 -0
  214. data/vendor/local/include/glib-2.0/gio/gnativevolumemonitor.h +62 -0
  215. data/vendor/local/include/glib-2.0/gio/gnetworkaddress.h +69 -0
  216. data/vendor/local/include/glib-2.0/gio/gnetworkservice.h +69 -0
  217. data/vendor/local/include/glib-2.0/gio/goutputstream.h +207 -0
  218. data/vendor/local/include/glib-2.0/gio/gresolver.h +167 -0
  219. data/vendor/local/include/glib-2.0/gio/gseekable.h +99 -0
  220. data/vendor/local/include/glib-2.0/gio/gsimpleasyncresult.h +125 -0
  221. data/vendor/local/include/glib-2.0/gio/gsocket.h +176 -0
  222. data/vendor/local/include/glib-2.0/gio/gsocketaddress.h +79 -0
  223. data/vendor/local/include/glib-2.0/gio/gsocketaddressenumerator.h +89 -0
  224. data/vendor/local/include/glib-2.0/gio/gsocketclient.h +130 -0
  225. data/vendor/local/include/glib-2.0/gio/gsocketconnectable.h +68 -0
  226. data/vendor/local/include/glib-2.0/gio/gsocketconnection.h +91 -0
  227. data/vendor/local/include/glib-2.0/gio/gsocketcontrolmessage.h +105 -0
  228. data/vendor/local/include/glib-2.0/gio/gsocketlistener.h +138 -0
  229. data/vendor/local/include/glib-2.0/gio/gsocketservice.h +88 -0
  230. data/vendor/local/include/glib-2.0/gio/gsrvtarget.h +52 -0
  231. data/vendor/local/include/glib-2.0/gio/gtcpconnection.h +68 -0
  232. data/vendor/local/include/glib-2.0/gio/gthemedicon.h +63 -0
  233. data/vendor/local/include/glib-2.0/gio/gthreadedsocketservice.h +81 -0
  234. data/vendor/local/include/glib-2.0/gio/gvfs.h +125 -0
  235. data/vendor/local/include/glib-2.0/gio/gvolume.h +211 -0
  236. data/vendor/local/include/glib-2.0/gio/gvolumemonitor.h +151 -0
  237. data/vendor/local/include/glib-2.0/gio/gzlibcompressor.h +55 -0
  238. data/vendor/local/include/glib-2.0/gio/gzlibdecompressor.h +54 -0
  239. data/vendor/local/include/glib-2.0/glib-object.h +41 -0
  240. data/vendor/local/include/glib-2.0/glib.h +97 -0
  241. data/vendor/local/include/glib-2.0/glib/galloca.h +63 -0
  242. data/vendor/local/include/glib-2.0/glib/garray.h +179 -0
  243. data/vendor/local/include/glib-2.0/glib/gasyncqueue.h +120 -0
  244. data/vendor/local/include/glib-2.0/glib/gatomic.h +85 -0
  245. data/vendor/local/include/glib-2.0/glib/gbacktrace.h +68 -0
  246. data/vendor/local/include/glib-2.0/glib/gbase64.h +57 -0
  247. data/vendor/local/include/glib-2.0/glib/gbitlock.h +43 -0
  248. data/vendor/local/include/glib-2.0/glib/gbookmarkfile.h +191 -0
  249. data/vendor/local/include/glib-2.0/glib/gcache.h +69 -0
  250. data/vendor/local/include/glib-2.0/glib/gchecksum.h +86 -0
  251. data/vendor/local/include/glib-2.0/glib/gcompletion.h +77 -0
  252. data/vendor/local/include/glib-2.0/glib/gconvert.h +138 -0
  253. data/vendor/local/include/glib-2.0/glib/gdataset.h +122 -0
  254. data/vendor/local/include/glib-2.0/glib/gdate.h +263 -0
  255. data/vendor/local/include/glib-2.0/glib/gdir.h +52 -0
  256. data/vendor/local/include/glib-2.0/glib/gerror.h +98 -0
  257. data/vendor/local/include/glib-2.0/glib/gfileutils.h +128 -0
  258. data/vendor/local/include/glib-2.0/glib/ghash.h +166 -0
  259. data/vendor/local/include/glib-2.0/glib/ghook.h +181 -0
  260. data/vendor/local/include/glib-2.0/glib/ghostutils.h +40 -0
  261. data/vendor/local/include/glib-2.0/glib/gi18n-lib.h +38 -0
  262. data/vendor/local/include/glib-2.0/glib/gi18n.h +34 -0
  263. data/vendor/local/include/glib-2.0/glib/giochannel.h +366 -0
  264. data/vendor/local/include/glib-2.0/glib/gkeyfile.h +250 -0
  265. data/vendor/local/include/glib-2.0/glib/glist.h +120 -0
  266. data/vendor/local/include/glib-2.0/glib/gmacros.h +277 -0
  267. data/vendor/local/include/glib-2.0/glib/gmain.h +304 -0
  268. data/vendor/local/include/glib-2.0/glib/gmappedfile.h +49 -0
  269. data/vendor/local/include/glib-2.0/glib/gmarkup.h +163 -0
  270. data/vendor/local/include/glib-2.0/glib/gmem.h +203 -0
  271. data/vendor/local/include/glib-2.0/glib/gmessages.h +343 -0
  272. data/vendor/local/include/glib-2.0/glib/gnode.h +288 -0
  273. data/vendor/local/include/glib-2.0/glib/goption.h +370 -0
  274. data/vendor/local/include/glib-2.0/glib/gpattern.h +49 -0
  275. data/vendor/local/include/glib-2.0/glib/gpoll.h +93 -0
  276. data/vendor/local/include/glib-2.0/glib/gprimes.h +51 -0
  277. data/vendor/local/include/glib-2.0/glib/gprintf.h +52 -0
  278. data/vendor/local/include/glib-2.0/glib/gqsort.h +46 -0
  279. data/vendor/local/include/glib-2.0/glib/gquark.h +52 -0
  280. data/vendor/local/include/glib-2.0/glib/gqueue.h +127 -0
  281. data/vendor/local/include/glib-2.0/glib/grand.h +85 -0
  282. data/vendor/local/include/glib-2.0/glib/gregex.h +243 -0
  283. data/vendor/local/include/glib-2.0/glib/grel.h +97 -0
  284. data/vendor/local/include/glib-2.0/glib/gscanner.h +278 -0
  285. data/vendor/local/include/glib-2.0/glib/gsequence.h +128 -0
  286. data/vendor/local/include/glib-2.0/glib/gshell.h +55 -0
  287. data/vendor/local/include/glib-2.0/glib/gslice.h +86 -0
  288. data/vendor/local/include/glib-2.0/glib/gslist.h +114 -0
  289. data/vendor/local/include/glib-2.0/glib/gspawn.h +139 -0
  290. data/vendor/local/include/glib-2.0/glib/gstdio.h +159 -0
  291. data/vendor/local/include/glib-2.0/glib/gstrfuncs.h +267 -0
  292. data/vendor/local/include/glib-2.0/glib/gstring.h +178 -0
  293. data/vendor/local/include/glib-2.0/glib/gtestutils.h +292 -0
  294. data/vendor/local/include/glib-2.0/glib/gthread.h +408 -0
  295. data/vendor/local/include/glib-2.0/glib/gthreadpool.h +114 -0
  296. data/vendor/local/include/glib-2.0/glib/gtimer.h +65 -0
  297. data/vendor/local/include/glib-2.0/glib/gtree.h +91 -0
  298. data/vendor/local/include/glib-2.0/glib/gtypes.h +451 -0
  299. data/vendor/local/include/glib-2.0/glib/gunicode.h +404 -0
  300. data/vendor/local/include/glib-2.0/glib/gurifuncs.h +81 -0
  301. data/vendor/local/include/glib-2.0/glib/gutils.h +490 -0
  302. data/vendor/local/include/glib-2.0/glib/gvariant.h +224 -0
  303. data/vendor/local/include/glib-2.0/glib/gvarianttype.h +305 -0
  304. data/vendor/local/include/glib-2.0/glib/gwin32.h +114 -0
  305. data/vendor/local/include/glib-2.0/gmodule.h +101 -0
  306. data/vendor/local/include/glib-2.0/gobject/gboxed.h +236 -0
  307. data/vendor/local/include/glib-2.0/gobject/gclosure.h +251 -0
  308. data/vendor/local/include/glib-2.0/gobject/genums.h +261 -0
  309. data/vendor/local/include/glib-2.0/gobject/gmarshal.h +169 -0
  310. data/vendor/local/include/glib-2.0/gobject/gobject.h +562 -0
  311. data/vendor/local/include/glib-2.0/gobject/gobjectnotifyqueue.c +166 -0
  312. data/vendor/local/include/glib-2.0/gobject/gparam.h +410 -0
  313. data/vendor/local/include/glib-2.0/gobject/gparamspecs.h +1083 -0
  314. data/vendor/local/include/glib-2.0/gobject/gsignal.h +509 -0
  315. data/vendor/local/include/glib-2.0/gobject/gsourceclosure.h +51 -0
  316. data/vendor/local/include/glib-2.0/gobject/gtype.h +1608 -0
  317. data/vendor/local/include/glib-2.0/gobject/gtypemodule.h +263 -0
  318. data/vendor/local/include/glib-2.0/gobject/gtypeplugin.h +134 -0
  319. data/vendor/local/include/glib-2.0/gobject/gvalue.h +159 -0
  320. data/vendor/local/include/glib-2.0/gobject/gvaluearray.h +77 -0
  321. data/vendor/local/include/glib-2.0/gobject/gvaluecollector.h +222 -0
  322. data/vendor/local/include/glib-2.0/gobject/gvaluetypes.h +243 -0
  323. data/vendor/local/include/libintl.h +464 -0
  324. data/vendor/local/include/libpng14/png.h +2701 -0
  325. data/vendor/local/include/libpng14/pngconf.h +1525 -0
  326. data/vendor/local/include/pango-1.0/pango/pango-attributes.h +280 -0
  327. data/vendor/local/include/pango-1.0/pango/pango-bidi-type.h +135 -0
  328. data/vendor/local/include/pango-1.0/pango/pango-break.h +120 -0
  329. data/vendor/local/include/pango-1.0/pango/pango-context.h +111 -0
  330. data/vendor/local/include/pango-1.0/pango/pango-coverage.h +58 -0
  331. data/vendor/local/include/pango-1.0/pango/pango-engine.h +381 -0
  332. data/vendor/local/include/pango-1.0/pango/pango-enum-types.h +60 -0
  333. data/vendor/local/include/pango-1.0/pango/pango-features.h +12 -0
  334. data/vendor/local/include/pango-1.0/pango/pango-font.h +386 -0
  335. data/vendor/local/include/pango-1.0/pango/pango-fontmap.h +96 -0
  336. data/vendor/local/include/pango-1.0/pango/pango-fontset.h +127 -0
  337. data/vendor/local/include/pango-1.0/pango/pango-glyph-item.h +94 -0
  338. data/vendor/local/include/pango-1.0/pango/pango-glyph.h +135 -0
  339. data/vendor/local/include/pango-1.0/pango/pango-gravity.h +114 -0
  340. data/vendor/local/include/pango-1.0/pango/pango-item.h +72 -0
  341. data/vendor/local/include/pango-1.0/pango/pango-language.h +56 -0
  342. data/vendor/local/include/pango-1.0/pango/pango-layout.h +291 -0
  343. data/vendor/local/include/pango-1.0/pango/pango-matrix.h +117 -0
  344. data/vendor/local/include/pango-1.0/pango/pango-modules.h +60 -0
  345. data/vendor/local/include/pango-1.0/pango/pango-ot.h +197 -0
  346. data/vendor/local/include/pango-1.0/pango/pango-renderer.h +260 -0
  347. data/vendor/local/include/pango-1.0/pango/pango-script.h +144 -0
  348. data/vendor/local/include/pango-1.0/pango/pango-tabs.h +76 -0
  349. data/vendor/local/include/pango-1.0/pango/pango-types.h +100 -0
  350. data/vendor/local/include/pango-1.0/pango/pango-utils.h +143 -0
  351. data/vendor/local/include/pango-1.0/pango/pango.h +48 -0
  352. data/vendor/local/include/pango-1.0/pango/pangocairo.h +154 -0
  353. data/vendor/local/include/pango-1.0/pango/pangofc-decoder.h +110 -0
  354. data/vendor/local/include/pango-1.0/pango/pangofc-font.h +151 -0
  355. data/vendor/local/include/pango-1.0/pango/pangofc-fontmap.h +270 -0
  356. data/vendor/local/include/pango-1.0/pango/pangoft2.h +112 -0
  357. data/vendor/local/include/pango-1.0/pango/pangowin32.h +120 -0
  358. data/vendor/local/include/png.h +2701 -0
  359. data/vendor/local/include/pngconf.h +1525 -0
  360. data/vendor/local/include/zconf.h +461 -0
  361. data/vendor/local/include/zlib.h +1589 -0
  362. data/vendor/local/lib/GNU.Gettext.dll +0 -0
  363. data/vendor/local/lib/cairo.def +322 -0
  364. data/vendor/local/lib/cairo.lib +0 -0
  365. data/vendor/local/lib/expat.lib +0 -0
  366. data/vendor/local/lib/fontconfig.def +195 -0
  367. data/vendor/local/lib/fontconfig.lib +0 -0
  368. data/vendor/local/lib/freetype.def +186 -0
  369. data/vendor/local/lib/freetype.lib +0 -0
  370. data/vendor/local/lib/gio-2.0.def +800 -0
  371. data/vendor/local/lib/gio-2.0.lib +0 -0
  372. data/vendor/local/lib/glib-2.0.def +1381 -0
  373. data/vendor/local/lib/glib-2.0.lib +0 -0
  374. data/vendor/local/lib/glib-2.0/include/glibconfig.h +284 -0
  375. data/vendor/local/lib/gmodule-2.0.def +11 -0
  376. data/vendor/local/lib/gmodule-2.0.lib +0 -0
  377. data/vendor/local/lib/gobject-2.0.def +349 -0
  378. data/vendor/local/lib/gobject-2.0.lib +0 -0
  379. data/vendor/local/lib/gthread-2.0.def +3 -0
  380. data/vendor/local/lib/gthread-2.0.lib +0 -0
  381. data/vendor/local/lib/intl.lib +0 -0
  382. data/vendor/local/lib/libasprintf.dll.a +0 -0
  383. data/vendor/local/lib/libcairo.dll.a +0 -0
  384. data/vendor/local/lib/libexpat.def +73 -0
  385. data/vendor/local/lib/libexpat.dll.a +0 -0
  386. data/vendor/local/lib/libfontconfig.dll.a +0 -0
  387. data/vendor/local/lib/libfreetype.dll.a +0 -0
  388. data/vendor/local/lib/libgio-2.0.dll.a +0 -0
  389. data/vendor/local/lib/libglib-2.0.dll.a +0 -0
  390. data/vendor/local/lib/libgmodule-2.0.dll.a +0 -0
  391. data/vendor/local/lib/libgobject-2.0.dll.a +0 -0
  392. data/vendor/local/lib/libgthread-2.0.dll.a +0 -0
  393. data/vendor/local/lib/libintl.def +31 -0
  394. data/vendor/local/lib/libintl.dll.a +0 -0
  395. data/vendor/local/lib/libpango-1.0.dll.a +0 -0
  396. data/vendor/local/lib/libpangocairo-1.0.dll.a +0 -0
  397. data/vendor/local/lib/libpangoft2-1.0.dll.a +0 -0
  398. data/vendor/local/lib/libpangowin32-1.0.dll.a +0 -0
  399. data/vendor/local/lib/libpng.def +192 -0
  400. data/vendor/local/lib/libpng.lib +0 -0
  401. data/vendor/local/lib/libpng14.dll.a +0 -0
  402. data/vendor/local/lib/libz.dll.a +0 -0
  403. data/vendor/local/lib/pango-1.0.def +395 -0
  404. data/vendor/local/lib/pango-1.0.lib +0 -0
  405. data/vendor/local/lib/pangocairo-1.0.def +34 -0
  406. data/vendor/local/lib/pangocairo-1.0.lib +0 -0
  407. data/vendor/local/lib/pangoft2-1.0.def +85 -0
  408. data/vendor/local/lib/pangoft2-1.0.lib +0 -0
  409. data/vendor/local/lib/pangowin32-1.0.def +30 -0
  410. data/vendor/local/lib/pangowin32-1.0.lib +0 -0
  411. data/vendor/local/lib/pkgconfig/cairo-fc.pc +12 -0
  412. data/vendor/local/lib/pkgconfig/cairo-ft.pc +12 -0
  413. data/vendor/local/lib/pkgconfig/cairo-gobject.pc +12 -0
  414. data/vendor/local/lib/pkgconfig/cairo-pdf.pc +12 -0
  415. data/vendor/local/lib/pkgconfig/cairo-png.pc +12 -0
  416. data/vendor/local/lib/pkgconfig/cairo-ps.pc +12 -0
  417. data/vendor/local/lib/pkgconfig/cairo-svg.pc +12 -0
  418. data/vendor/local/lib/pkgconfig/cairo-win32-font.pc +12 -0
  419. data/vendor/local/lib/pkgconfig/cairo-win32.pc +12 -0
  420. data/vendor/local/lib/pkgconfig/cairo.pc +13 -0
  421. data/vendor/local/lib/pkgconfig/fontconfig.pc +11 -0
  422. data/vendor/local/lib/pkgconfig/freetype2.pc +12 -0
  423. data/vendor/local/lib/pkgconfig/gio-2.0.pc +14 -0
  424. data/vendor/local/lib/pkgconfig/glib-2.0.pc +15 -0
  425. data/vendor/local/lib/pkgconfig/gmodule-2.0.pc +14 -0
  426. data/vendor/local/lib/pkgconfig/gmodule-no-export-2.0.pc +14 -0
  427. data/vendor/local/lib/pkgconfig/gobject-2.0.pc +11 -0
  428. data/vendor/local/lib/pkgconfig/gthread-2.0.pc +11 -0
  429. data/vendor/local/lib/pkgconfig/libpng.pc +11 -0
  430. data/vendor/local/lib/pkgconfig/libpng14.pc +11 -0
  431. data/vendor/local/lib/pkgconfig/pango.pc +13 -0
  432. data/vendor/local/lib/pkgconfig/pangocairo.pc +11 -0
  433. data/vendor/local/lib/pkgconfig/pangoft2.pc +11 -0
  434. data/vendor/local/lib/pkgconfig/pangowin32.pc +11 -0
  435. data/vendor/local/lib/zdll.lib +0 -0
  436. data/vendor/local/lib/zlib.def +67 -0
  437. data/vendor/local/man/man1/xmlwf.1 +251 -0
  438. data/vendor/local/manifest/cairo-dev_1.10.0-1_win32.mft +83 -0
  439. data/vendor/local/manifest/cairo_1.10.0-1_win32.mft +5 -0
  440. data/vendor/local/manifest/expat-dev_2.0.1-1_win32.mft +10 -0
  441. data/vendor/local/manifest/expat_2.0.1-1_win32.mft +2 -0
  442. data/vendor/local/manifest/fontconfig-dev_2.8.0-2_win32.mft +387 -0
  443. data/vendor/local/manifest/fontconfig_2.8.0-2_win32.mft +3 -0
  444. data/vendor/local/manifest/freetype-dev_2.4.2-1_win32.mft +56 -0
  445. data/vendor/local/manifest/freetype_2.4.2-1_win32.mft +2 -0
  446. data/vendor/local/manifest/gettext-runtime-dev_0.18.1.1-2_win32.mft +81 -0
  447. data/vendor/local/manifest/gettext-runtime_0.18.1.1-2_win32.mft +3 -0
  448. data/vendor/local/manifest/glib-dev_2.24.2-2_win32.mft +491 -0
  449. data/vendor/local/manifest/glib_2.24.2-2_win32.mft +101 -0
  450. data/vendor/local/manifest/libpng-dev_1.4.3-1_win32.mft +15 -0
  451. data/vendor/local/manifest/libpng_1.4.3-1_win32.mft +2 -0
  452. data/vendor/local/manifest/pango-dev_1.28.1-2_win32.mft +116 -0
  453. data/vendor/local/manifest/pango_1.28.1-2_win32.mft +8 -0
  454. data/vendor/local/manifest/zlib-dev_1.2.5-2_win32.mft +8 -0
  455. data/vendor/local/manifest/zlib_1.2.5-2_win32.mft +2 -0
  456. data/vendor/local/share/aclocal/freetype2.m4 +194 -0
  457. data/vendor/local/share/aclocal/glib-2.0.m4 +211 -0
  458. data/vendor/local/share/aclocal/glib-gettext.m4 +432 -0
  459. data/vendor/local/share/doc/cairo_1.10.0-1_win32/COPYING +33 -0
  460. data/vendor/local/share/doc/cairo_1.10.0-1_win32/COPYING-LGPL-2.1 +510 -0
  461. data/vendor/local/share/doc/cairo_1.10.0-1_win32/COPYING-MPL-1.1 +470 -0
  462. data/vendor/local/share/doc/fontconfig/fontconfig-devel.pdf +42484 -4
  463. data/vendor/local/share/doc/fontconfig/fontconfig-devel.txt +5046 -0
  464. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcatomiccreate.html +224 -0
  465. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcatomicdeletenew.html +216 -0
  466. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcatomicdestroy.html +210 -0
  467. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcatomiclock.html +223 -0
  468. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcatomicnewfile.html +222 -0
  469. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcatomicorigfile.html +221 -0
  470. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcatomicreplaceorig.html +223 -0
  471. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcatomicunlock.html +216 -0
  472. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcblanksadd.html +222 -0
  473. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcblankscreate.html +216 -0
  474. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcblanksdestroy.html +216 -0
  475. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcblanksismember.html +211 -0
  476. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccachecopyset.html +228 -0
  477. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccachedir.html +221 -0
  478. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccachenumfont.html +211 -0
  479. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccachenumsubdir.html +221 -0
  480. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccachesubdir.html +244 -0
  481. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetaddchar.html +226 -0
  482. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetcopy.html +227 -0
  483. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetcount.html +221 -0
  484. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetcoverage.html +249 -0
  485. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetcreate.html +220 -0
  486. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetdestroy.html +226 -0
  487. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetequal.html +232 -0
  488. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetfirstpage.html +238 -0
  489. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsethaschar.html +231 -0
  490. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetintersect.html +232 -0
  491. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetintersectcount.html +231 -0
  492. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetissubset.html +231 -0
  493. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetmerge.html +261 -0
  494. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetnew.html +208 -0
  495. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetnextpage.html +243 -0
  496. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetsubtract.html +231 -0
  497. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetsubtractcount.html +231 -0
  498. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fccharsetunion.html +231 -0
  499. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigappfontadddir.html +229 -0
  500. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigappfontaddfile.html +228 -0
  501. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigappfontclear.html +222 -0
  502. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigbuildfonts.html +224 -0
  503. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigcreate.html +216 -0
  504. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigdestroy.html +219 -0
  505. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigenablehome.html +230 -0
  506. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigfilename.html +237 -0
  507. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfiggetblanks.html +225 -0
  508. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfiggetcache.html +217 -0
  509. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfiggetcachedirs.html +227 -0
  510. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfiggetconfigdirs.html +228 -0
  511. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfiggetconfigfiles.html +227 -0
  512. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfiggetcurrent.html +216 -0
  513. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfiggetfontdirs.html +229 -0
  514. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfiggetfonts.html +234 -0
  515. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfiggetrescaninterval.html +230 -0
  516. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfighome.html +221 -0
  517. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigparseandload.html +220 -0
  518. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigreference.html +231 -0
  519. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigsetcurrent.html +222 -0
  520. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigsetrescaninterval.html +229 -0
  521. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigsubstitute.html +233 -0
  522. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfigsubstitutewithpat.html +251 -0
  523. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcconfiguptodate.html +228 -0
  524. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcdefaultsubstitute.html +234 -0
  525. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcdircacheload.html +239 -0
  526. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcdircacheloadfile.html +233 -0
  527. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcdircacheread.html +239 -0
  528. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcdircacheunlink.html +239 -0
  529. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcdircacheunload.html +211 -0
  530. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcdircachevalid.html +222 -0
  531. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcdirsave.html +245 -0
  532. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcdirscan.html +266 -0
  533. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfileisdir.html +222 -0
  534. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfilescan.html +276 -0
  535. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfini.html +219 -0
  536. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontlist.html +244 -0
  537. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontmatch.html +262 -0
  538. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontrenderprepare.html +259 -0
  539. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontsetadd.html +223 -0
  540. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontsetcreate.html +216 -0
  541. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontsetdestroy.html +217 -0
  542. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontsetlist.html +261 -0
  543. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontsetmatch.html +273 -0
  544. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontsetprint.html +224 -0
  545. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontsetsort.html +303 -0
  546. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontsetsortdestroy.html +222 -0
  547. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfontsort.html +289 -0
  548. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfreetypecharindex.html +226 -0
  549. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfreetypecharset.html +225 -0
  550. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfreetypecharsetandspacing.html +241 -0
  551. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfreetypequery.html +233 -0
  552. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcfreetypequeryface.html +222 -0
  553. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcgetlangs.html +216 -0
  554. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcgetversion.html +216 -0
  555. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcinit.html +219 -0
  556. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcinitbringuptodate.html +208 -0
  557. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcinitloadconfig.html +217 -0
  558. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcinitloadconfigandfonts.html +217 -0
  559. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcinitreinitialize.html +219 -0
  560. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcislower.html +222 -0
  561. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcisupper.html +222 -0
  562. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclanggetcharset.html +205 -0
  563. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclangsetadd.html +239 -0
  564. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclangsetcompare.html +239 -0
  565. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclangsetcontains.html +259 -0
  566. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclangsetcopy.html +225 -0
  567. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclangsetcreate.html +219 -0
  568. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclangsetdestroy.html +220 -0
  569. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclangsetequal.html +232 -0
  570. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclangsetgetlangs.html +221 -0
  571. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclangsethash.html +233 -0
  572. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fclangsethaslang.html +255 -0
  573. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcmatrixcopy.html +225 -0
  574. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcmatrixequal.html +236 -0
  575. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcmatrixinit.html +225 -0
  576. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcmatrixmultiply.html +246 -0
  577. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcmatrixrotate.html +261 -0
  578. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcmatrixscale.html +261 -0
  579. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcmatrixshear.html +250 -0
  580. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcnameconstant.html +221 -0
  581. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcnamegetconstant.html +221 -0
  582. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcnamegetobjecttype.html +210 -0
  583. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcnameparse.html +221 -0
  584. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcnameregisterconstants.html +228 -0
  585. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcnameregisterobjecttypes.html +228 -0
  586. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcnameunparse.html +218 -0
  587. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcnameunregisterconstants.html +228 -0
  588. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcnameunregisterobjecttypes.html +226 -0
  589. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcobjectsetadd.html +222 -0
  590. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcobjectsetbuild.html +262 -0
  591. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcobjectsetcreate.html +216 -0
  592. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcobjectsetdestroy.html +216 -0
  593. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternadd-type.html +404 -0
  594. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternadd.html +240 -0
  595. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternaddweak.html +242 -0
  596. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternbuild.html +313 -0
  597. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatterncreate.html +216 -0
  598. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatterndel.html +222 -0
  599. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatterndestroy.html +217 -0
  600. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternduplicate.html +223 -0
  601. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternequal.html +231 -0
  602. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternequalsubset.html +242 -0
  603. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternfilter.html +244 -0
  604. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternformat.html +602 -0
  605. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternget-type.html +435 -0
  606. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternget.html +249 -0
  607. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternhash.html +217 -0
  608. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternprint.html +218 -0
  609. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternreference.html +222 -0
  610. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcpatternremove.html +227 -0
  611. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrbasename.html +212 -0
  612. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrcmp.html +232 -0
  613. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrcmpignorecase.html +233 -0
  614. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrcopy.html +226 -0
  615. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrcopyfilename.html +234 -0
  616. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrdirname.html +223 -0
  617. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrdowncase.html +222 -0
  618. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrfree.html +217 -0
  619. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrlistcreate.html +221 -0
  620. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrlistdone.html +210 -0
  621. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrlistnext.html +221 -0
  622. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrplus.html +233 -0
  623. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrsetadd.html +231 -0
  624. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrsetaddfilename.html +233 -0
  625. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrsetcreate.html +216 -0
  626. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrsetdel.html +237 -0
  627. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrsetdestroy.html +221 -0
  628. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrsetequal.html +233 -0
  629. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrsetmember.html +232 -0
  630. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrstr.html +244 -0
  631. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcstrstrignorecase.html +244 -0
  632. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fctolower.html +222 -0
  633. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcucs4toutf8.html +233 -0
  634. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcutf16len.html +278 -0
  635. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcutf16toucs4.html +265 -0
  636. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcutf8len.html +261 -0
  637. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcutf8toucs4.html +249 -0
  638. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcvaluedestroy.html +222 -0
  639. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcvalueequal.html +212 -0
  640. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcvalueprint.html +223 -0
  641. data/vendor/local/share/doc/fontconfig/fontconfig-devel/fcvaluesave.html +227 -0
  642. data/vendor/local/share/doc/fontconfig/fontconfig-devel/ln12.html +128 -0
  643. data/vendor/local/share/doc/fontconfig/fontconfig-devel/t1.html +133 -0
  644. data/vendor/local/share/doc/fontconfig/fontconfig-devel/x102.html +1463 -0
  645. data/vendor/local/share/doc/fontconfig/fontconfig-devel/x19.html +264 -0
  646. data/vendor/local/share/doc/fontconfig/fontconfig-devel/x31.html +590 -0
  647. data/vendor/local/share/doc/fontconfig/fontconfig-user.html +1352 -0
  648. data/vendor/local/share/doc/fontconfig/fontconfig-user.pdf +0 -0
  649. data/vendor/local/share/doc/fontconfig/fontconfig-user.txt +644 -0
  650. data/vendor/local/share/doc/gettext/bind_textdomain_codeset.3.html +165 -0
  651. data/vendor/local/share/doc/gettext/bindtextdomain.3.html +160 -0
  652. data/vendor/local/share/doc/gettext/csharpdoc/GNU_Gettext.html +8 -0
  653. data/vendor/local/share/doc/gettext/csharpdoc/GNU_Gettext_GettextResourceManager.html +305 -0
  654. data/vendor/local/share/doc/gettext/csharpdoc/GNU_Gettext_GettextResourceSet.html +356 -0
  655. data/vendor/local/share/doc/gettext/csharpdoc/begin.html +11 -0
  656. data/vendor/local/share/doc/gettext/csharpdoc/index.html +10 -0
  657. data/vendor/local/share/doc/gettext/csharpdoc/namespaces.html +6 -0
  658. data/vendor/local/share/doc/gettext/envsubst.1.html +213 -0
  659. data/vendor/local/share/doc/gettext/gettext.1.html +266 -0
  660. data/vendor/local/share/doc/gettext/gettext.3.html +186 -0
  661. data/vendor/local/share/doc/gettext/ngettext.1.html +280 -0
  662. data/vendor/local/share/doc/gettext/ngettext.3.html +143 -0
  663. data/vendor/local/share/doc/gettext/textdomain.3.html +150 -0
  664. data/vendor/local/share/doc/glib-2.24.2/COPYING +482 -0
  665. data/vendor/local/share/doc/glib-dev-2.24.2/COPYING +482 -0
  666. data/vendor/local/share/doc/libasprintf/autosprintf_all.html +174 -0
  667. data/vendor/local/share/doc/pango-1.28.1/COPYING +482 -0
  668. data/vendor/local/share/doc/pango-dev-1.28.1/COPYING +482 -0
  669. data/vendor/local/share/glib-2.0/gdb/glib.py +252 -0
  670. data/vendor/local/share/glib-2.0/gdb/gobject.py +305 -0
  671. data/vendor/local/share/glib-2.0/gettext/mkinstalldirs +111 -0
  672. data/vendor/local/share/glib-2.0/gettext/po/Makefile.in.in +277 -0
  673. data/vendor/local/share/gtk-doc/html/cairo/bindings-errors.html +122 -0
  674. data/vendor/local/share/gtk-doc/html/cairo/bindings-fonts.html +53 -0
  675. data/vendor/local/share/gtk-doc/html/cairo/bindings-memory.html +123 -0
  676. data/vendor/local/share/gtk-doc/html/cairo/bindings-overloading.html +121 -0
  677. data/vendor/local/share/gtk-doc/html/cairo/bindings-path.html +117 -0
  678. data/vendor/local/share/gtk-doc/html/cairo/bindings-patterns.html +62 -0
  679. data/vendor/local/share/gtk-doc/html/cairo/bindings-return-values.html +120 -0
  680. data/vendor/local/share/gtk-doc/html/cairo/bindings-streams.html +92 -0
  681. data/vendor/local/share/gtk-doc/html/cairo/bindings-surfaces.html +93 -0
  682. data/vendor/local/share/gtk-doc/html/cairo/cairo-Error-handling.html +373 -0
  683. data/vendor/local/share/gtk-doc/html/cairo/cairo-FreeType-Fonts.html +330 -0
  684. data/vendor/local/share/gtk-doc/html/cairo/cairo-Image-Surfaces.html +478 -0
  685. data/vendor/local/share/gtk-doc/html/cairo/cairo-PDF-Surfaces.html +344 -0
  686. data/vendor/local/share/gtk-doc/html/cairo/cairo-PNG-Support.html +320 -0
  687. data/vendor/local/share/gtk-doc/html/cairo/cairo-Paths.html +1291 -0
  688. data/vendor/local/share/gtk-doc/html/cairo/cairo-PostScript-Surfaces.html +622 -0
  689. data/vendor/local/share/gtk-doc/html/cairo/cairo-Quartz-(CGFont)-Fonts.html +134 -0
  690. data/vendor/local/share/gtk-doc/html/cairo/cairo-Quartz-Surfaces.html +210 -0
  691. data/vendor/local/share/gtk-doc/html/cairo/cairo-Regions.html +834 -0
  692. data/vendor/local/share/gtk-doc/html/cairo/cairo-SVG-Surfaces.html +318 -0
  693. data/vendor/local/share/gtk-doc/html/cairo/cairo-Transformations.html +410 -0
  694. data/vendor/local/share/gtk-doc/html/cairo/cairo-Types.html +169 -0
  695. data/vendor/local/share/gtk-doc/html/cairo/cairo-User-Fonts.html +715 -0
  696. data/vendor/local/share/gtk-doc/html/cairo/cairo-Version-Information.html +410 -0
  697. data/vendor/local/share/gtk-doc/html/cairo/cairo-Win32-Fonts.html +335 -0
  698. data/vendor/local/share/gtk-doc/html/cairo/cairo-Win32-Surfaces.html +291 -0
  699. data/vendor/local/share/gtk-doc/html/cairo/cairo-XLib-Surfaces.html +470 -0
  700. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-device-t.html +595 -0
  701. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-font-face-t.html +384 -0
  702. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-font-options-t.html +644 -0
  703. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-matrix-t.html +574 -0
  704. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-pattern-t.html +1457 -0
  705. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-scaled-font-t.html +1076 -0
  706. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-surface-t.html +1396 -0
  707. data/vendor/local/share/gtk-doc/html/cairo/cairo-cairo-t.html +2743 -0
  708. data/vendor/local/share/gtk-doc/html/cairo/cairo-drawing.html +50 -0
  709. data/vendor/local/share/gtk-doc/html/cairo/cairo-fonts.html +53 -0
  710. data/vendor/local/share/gtk-doc/html/cairo/cairo-support.html +44 -0
  711. data/vendor/local/share/gtk-doc/html/cairo/cairo-surfaces.html +62 -0
  712. data/vendor/local/share/gtk-doc/html/cairo/cairo-text.html +1175 -0
  713. data/vendor/local/share/gtk-doc/html/cairo/cairo.devhelp +473 -0
  714. data/vendor/local/share/gtk-doc/html/cairo/cairo.devhelp2 +641 -0
  715. data/vendor/local/share/gtk-doc/html/cairo/home.png +0 -0
  716. data/vendor/local/share/gtk-doc/html/cairo/index-1.10.html +147 -0
  717. data/vendor/local/share/gtk-doc/html/cairo/index-1.2.html +164 -0
  718. data/vendor/local/share/gtk-doc/html/cairo/index-1.4.html +134 -0
  719. data/vendor/local/share/gtk-doc/html/cairo/index-1.6.html +82 -0
  720. data/vendor/local/share/gtk-doc/html/cairo/index-1.8.html +108 -0
  721. data/vendor/local/share/gtk-doc/html/cairo/index-all.html +956 -0
  722. data/vendor/local/share/gtk-doc/html/cairo/index.html +141 -0
  723. data/vendor/local/share/gtk-doc/html/cairo/index.sgml +708 -0
  724. data/vendor/local/share/gtk-doc/html/cairo/language-bindings.html +73 -0
  725. data/vendor/local/share/gtk-doc/html/cairo/left.png +0 -0
  726. data/vendor/local/share/gtk-doc/html/cairo/right.png +0 -0
  727. data/vendor/local/share/gtk-doc/html/cairo/style.css +265 -0
  728. data/vendor/local/share/gtk-doc/html/cairo/up.png +0 -0
  729. data/vendor/local/share/gtk-doc/html/gio/GAppInfo.html +1390 -0
  730. data/vendor/local/share/gtk-doc/html/gio/GAsyncInitable.html +531 -0
  731. data/vendor/local/share/gtk-doc/html/gio/GAsyncResult.html +343 -0
  732. data/vendor/local/share/gtk-doc/html/gio/GBufferedInputStream.html +568 -0
  733. data/vendor/local/share/gtk-doc/html/gio/GBufferedOutputStream.html +295 -0
  734. data/vendor/local/share/gtk-doc/html/gio/GCancellable.html +620 -0
  735. data/vendor/local/share/gtk-doc/html/gio/GCharsetConverter.html +245 -0
  736. data/vendor/local/share/gtk-doc/html/gio/GConverter.html +388 -0
  737. data/vendor/local/share/gtk-doc/html/gio/GDataInputStream.html +993 -0
  738. data/vendor/local/share/gtk-doc/html/gio/GDataOutputStream.html +544 -0
  739. data/vendor/local/share/gtk-doc/html/gio/GDrive.html +1416 -0
  740. data/vendor/local/share/gtk-doc/html/gio/GEmblem.html +272 -0
  741. data/vendor/local/share/gtk-doc/html/gio/GEmblemedIcon.html +206 -0
  742. data/vendor/local/share/gtk-doc/html/gio/GFile.html +7450 -0
  743. data/vendor/local/share/gtk-doc/html/gio/GFileDescriptorBased.html +115 -0
  744. data/vendor/local/share/gtk-doc/html/gio/GFileEnumerator.html +520 -0
  745. data/vendor/local/share/gtk-doc/html/gio/GFileIOStream.html +312 -0
  746. data/vendor/local/share/gtk-doc/html/gio/GFileIcon.html +155 -0
  747. data/vendor/local/share/gtk-doc/html/gio/GFileInfo.html +3116 -0
  748. data/vendor/local/share/gtk-doc/html/gio/GFileInputStream.html +262 -0
  749. data/vendor/local/share/gtk-doc/html/gio/GFileMonitor.html +353 -0
  750. data/vendor/local/share/gtk-doc/html/gio/GFileOutputStream.html +301 -0
  751. data/vendor/local/share/gtk-doc/html/gio/GFilenameCompleter.html +217 -0
  752. data/vendor/local/share/gtk-doc/html/gio/GFilterInputStream.html +182 -0
  753. data/vendor/local/share/gtk-doc/html/gio/GFilterOutputStream.html +183 -0
  754. data/vendor/local/share/gtk-doc/html/gio/GIOModule.html +261 -0
  755. data/vendor/local/share/gtk-doc/html/gio/GIOStream.html +479 -0
  756. data/vendor/local/share/gtk-doc/html/gio/GIcon.html +331 -0
  757. data/vendor/local/share/gtk-doc/html/gio/GInetAddress.html +717 -0
  758. data/vendor/local/share/gtk-doc/html/gio/GInetSocketAddress.html +195 -0
  759. data/vendor/local/share/gtk-doc/html/gio/GInitable.html +388 -0
  760. data/vendor/local/share/gtk-doc/html/gio/GInputStream.html +808 -0
  761. data/vendor/local/share/gtk-doc/html/gio/GLoadableIcon.html +301 -0
  762. data/vendor/local/share/gtk-doc/html/gio/GMemoryInputStream.html +185 -0
  763. data/vendor/local/share/gtk-doc/html/gio/GMemoryOutputStream.html +362 -0
  764. data/vendor/local/share/gtk-doc/html/gio/GMount.html +1465 -0
  765. data/vendor/local/share/gtk-doc/html/gio/GMountOperation.html +848 -0
  766. data/vendor/local/share/gtk-doc/html/gio/GNetworkAddress.html +263 -0
  767. data/vendor/local/share/gtk-doc/html/gio/GNetworkService.html +248 -0
  768. data/vendor/local/share/gtk-doc/html/gio/GOutputStream.html +1006 -0
  769. data/vendor/local/share/gtk-doc/html/gio/GResolver.html +787 -0
  770. data/vendor/local/share/gtk-doc/html/gio/GSeekable.html +350 -0
  771. data/vendor/local/share/gtk-doc/html/gio/GSimpleAsyncResult.html +979 -0
  772. data/vendor/local/share/gtk-doc/html/gio/GSocket.html +2152 -0
  773. data/vendor/local/share/gtk-doc/html/gio/GSocketAddress.html +297 -0
  774. data/vendor/local/share/gtk-doc/html/gio/GSocketClient.html +930 -0
  775. data/vendor/local/share/gtk-doc/html/gio/GSocketConnectable.html +428 -0
  776. data/vendor/local/share/gtk-doc/html/gio/GSocketConnection.html +548 -0
  777. data/vendor/local/share/gtk-doc/html/gio/GSocketControlMessage.html +274 -0
  778. data/vendor/local/share/gtk-doc/html/gio/GSocketListener.html +741 -0
  779. data/vendor/local/share/gtk-doc/html/gio/GSocketService.html +258 -0
  780. data/vendor/local/share/gtk-doc/html/gio/GThemedIcon.html +377 -0
  781. data/vendor/local/share/gtk-doc/html/gio/GThreadedSocketService.html +197 -0
  782. data/vendor/local/share/gtk-doc/html/gio/GUnixFDList.html +381 -0
  783. data/vendor/local/share/gtk-doc/html/gio/GUnixFDMessage.html +280 -0
  784. data/vendor/local/share/gtk-doc/html/gio/GUnixInputStream.html +237 -0
  785. data/vendor/local/share/gtk-doc/html/gio/GUnixOutputStream.html +237 -0
  786. data/vendor/local/share/gtk-doc/html/gio/GUnixSocketAddress.html +306 -0
  787. data/vendor/local/share/gtk-doc/html/gio/GVfs.html +274 -0
  788. data/vendor/local/share/gtk-doc/html/gio/GVolume.html +1028 -0
  789. data/vendor/local/share/gtk-doc/html/gio/GVolumeMonitor.html +709 -0
  790. data/vendor/local/share/gtk-doc/html/gio/GZlibCompressor.html +180 -0
  791. data/vendor/local/share/gtk-doc/html/gio/GZlibDecompressor.html +128 -0
  792. data/vendor/local/share/gtk-doc/html/gio/api-index-2-18.html +153 -0
  793. data/vendor/local/share/gtk-doc/html/gio/api-index-2-20.html +155 -0
  794. data/vendor/local/share/gtk-doc/html/gio/api-index-2-22.html +1088 -0
  795. data/vendor/local/share/gtk-doc/html/gio/api-index-2-24.html +206 -0
  796. data/vendor/local/share/gtk-doc/html/gio/api-index-deprecated.html +97 -0
  797. data/vendor/local/share/gtk-doc/html/gio/api-index-full.html +4499 -0
  798. data/vendor/local/share/gtk-doc/html/gio/async.html +44 -0
  799. data/vendor/local/share/gtk-doc/html/gio/ch01.html +171 -0
  800. data/vendor/local/share/gtk-doc/html/gio/ch02.html +45 -0
  801. data/vendor/local/share/gtk-doc/html/gio/ch03.html +80 -0
  802. data/vendor/local/share/gtk-doc/html/gio/ch19.html +75 -0
  803. data/vendor/local/share/gtk-doc/html/gio/ch20.html +217 -0
  804. data/vendor/local/share/gtk-doc/html/gio/ch20s02.html +41 -0
  805. data/vendor/local/share/gtk-doc/html/gio/ch20s03.html +39 -0
  806. data/vendor/local/share/gtk-doc/html/gio/conversion.html +44 -0
  807. data/vendor/local/share/gtk-doc/html/gio/extending-gio.html +96 -0
  808. data/vendor/local/share/gtk-doc/html/gio/extending.html +41 -0
  809. data/vendor/local/share/gtk-doc/html/gio/failable_initialization.html +38 -0
  810. data/vendor/local/share/gtk-doc/html/gio/file_mon.html +33 -0
  811. data/vendor/local/share/gtk-doc/html/gio/file_ops.html +50 -0
  812. data/vendor/local/share/gtk-doc/html/gio/gio-Desktop-file-based-GAppInfo.html +339 -0
  813. data/vendor/local/share/gtk-doc/html/gio/gio-Extension-Points.html +465 -0
  814. data/vendor/local/share/gtk-doc/html/gio/gio-GContentType.html +381 -0
  815. data/vendor/local/share/gtk-doc/html/gio/gio-GConverterInputstream.html +163 -0
  816. data/vendor/local/share/gtk-doc/html/gio/gio-GConverterOutputstream.html +163 -0
  817. data/vendor/local/share/gtk-doc/html/gio/gio-GFileAttribute.html +927 -0
  818. data/vendor/local/share/gtk-doc/html/gio/gio-GIOError.html +328 -0
  819. data/vendor/local/share/gtk-doc/html/gio/gio-GIOScheduler.html +297 -0
  820. data/vendor/local/share/gtk-doc/html/gio/gio-GSrvTarget.html +313 -0
  821. data/vendor/local/share/gtk-doc/html/gio/gio-Unix-Mounts.html +918 -0
  822. data/vendor/local/share/gtk-doc/html/gio/gio-hierarchy.html +107 -0
  823. data/vendor/local/share/gtk-doc/html/gio/gio.devhelp +1235 -0
  824. data/vendor/local/share/gtk-doc/html/gio/gio.devhelp2 +1384 -0
  825. data/vendor/local/share/gtk-doc/html/gio/gvfs-overview.png +0 -0
  826. data/vendor/local/share/gtk-doc/html/gio/highlevel-socket.html +47 -0
  827. data/vendor/local/share/gtk-doc/html/gio/home.png +0 -0
  828. data/vendor/local/share/gtk-doc/html/gio/icons.html +50 -0
  829. data/vendor/local/share/gtk-doc/html/gio/index.html +318 -0
  830. data/vendor/local/share/gtk-doc/html/gio/index.sgml +1795 -0
  831. data/vendor/local/share/gtk-doc/html/gio/left.png +0 -0
  832. data/vendor/local/share/gtk-doc/html/gio/migrating.html +42 -0
  833. data/vendor/local/share/gtk-doc/html/gio/networking.html +57 -0
  834. data/vendor/local/share/gtk-doc/html/gio/pt01.html +39 -0
  835. data/vendor/local/share/gtk-doc/html/gio/pt02.html +293 -0
  836. data/vendor/local/share/gtk-doc/html/gio/resolver.html +47 -0
  837. data/vendor/local/share/gtk-doc/html/gio/right.png +0 -0
  838. data/vendor/local/share/gtk-doc/html/gio/streaming.html +92 -0
  839. data/vendor/local/share/gtk-doc/html/gio/style.css +257 -0
  840. data/vendor/local/share/gtk-doc/html/gio/types.html +41 -0
  841. data/vendor/local/share/gtk-doc/html/gio/up.png +0 -0
  842. data/vendor/local/share/gtk-doc/html/gio/utils.html +33 -0
  843. data/vendor/local/share/gtk-doc/html/gio/volume_mon.html +47 -0
  844. data/vendor/local/share/gtk-doc/html/glib/api-index-2-10.html +180 -0
  845. data/vendor/local/share/gtk-doc/html/glib/api-index-2-12.html +312 -0
  846. data/vendor/local/share/gtk-doc/html/glib/api-index-2-14.html +563 -0
  847. data/vendor/local/share/gtk-doc/html/glib/api-index-2-16.html +362 -0
  848. data/vendor/local/share/gtk-doc/html/glib/api-index-2-18.html +102 -0
  849. data/vendor/local/share/gtk-doc/html/glib/api-index-2-2.html +124 -0
  850. data/vendor/local/share/gtk-doc/html/glib/api-index-2-20.html +83 -0
  851. data/vendor/local/share/gtk-doc/html/glib/api-index-2-22.html +194 -0
  852. data/vendor/local/share/gtk-doc/html/glib/api-index-2-24.html +419 -0
  853. data/vendor/local/share/gtk-doc/html/glib/api-index-2-4.html +389 -0
  854. data/vendor/local/share/gtk-doc/html/glib/api-index-2-6.html +413 -0
  855. data/vendor/local/share/gtk-doc/html/glib/api-index-2-8.html +158 -0
  856. data/vendor/local/share/gtk-doc/html/glib/api-index-deprecated.html +340 -0
  857. data/vendor/local/share/gtk-doc/html/glib/api-index-full.html +7835 -0
  858. data/vendor/local/share/gtk-doc/html/glib/file-name-encodings.png +0 -0
  859. data/vendor/local/share/gtk-doc/html/glib/glib-Arrays.html +893 -0
  860. data/vendor/local/share/gtk-doc/html/glib/glib-Asynchronous-Queues.html +818 -0
  861. data/vendor/local/share/gtk-doc/html/glib/glib-Atomic-Operations.html +413 -0
  862. data/vendor/local/share/gtk-doc/html/glib/glib-Automatic-String-Completion.html +430 -0
  863. data/vendor/local/share/gtk-doc/html/glib/glib-Balanced-Binary-Trees.html +802 -0
  864. data/vendor/local/share/gtk-doc/html/glib/glib-Base64-Encoding.html +372 -0
  865. data/vendor/local/share/gtk-doc/html/glib/glib-Basic-Types.html +500 -0
  866. data/vendor/local/share/gtk-doc/html/glib/glib-Bookmark-file-parser.html +2054 -0
  867. data/vendor/local/share/gtk-doc/html/glib/glib-Byte-Arrays.html +560 -0
  868. data/vendor/local/share/gtk-doc/html/glib/glib-Byte-Order-Macros.html +1686 -0
  869. data/vendor/local/share/gtk-doc/html/glib/glib-Caches.html +398 -0
  870. data/vendor/local/share/gtk-doc/html/glib/glib-Character-Set-Conversion.html +1187 -0
  871. data/vendor/local/share/gtk-doc/html/glib/glib-Commandline-option-parser.html +1665 -0
  872. data/vendor/local/share/gtk-doc/html/glib/glib-Data-Checksums.html +460 -0
  873. data/vendor/local/share/gtk-doc/html/glib/glib-Datasets.html +528 -0
  874. data/vendor/local/share/gtk-doc/html/glib/glib-Date-and-Time-Functions.html +2042 -0
  875. data/vendor/local/share/gtk-doc/html/glib/glib-Double-ended-Queues.html +1278 -0
  876. data/vendor/local/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html +1406 -0
  877. data/vendor/local/share/gtk-doc/html/glib/glib-Dynamic-Loading-of-Modules.html +548 -0
  878. data/vendor/local/share/gtk-doc/html/glib/glib-Error-Reporting.html +1023 -0
  879. data/vendor/local/share/gtk-doc/html/glib/glib-File-Utilities.html +1810 -0
  880. data/vendor/local/share/gtk-doc/html/glib/glib-GVariant.html +3798 -0
  881. data/vendor/local/share/gtk-doc/html/glib/glib-GVariantType.html +1815 -0
  882. data/vendor/local/share/gtk-doc/html/glib/glib-Glob-style-pattern-matching.html +295 -0
  883. data/vendor/local/share/gtk-doc/html/glib/glib-Hash-Tables.html +1512 -0
  884. data/vendor/local/share/gtk-doc/html/glib/glib-Hook-Functions.html +1367 -0
  885. data/vendor/local/share/gtk-doc/html/glib/glib-Hostname-Utilities.html +229 -0
  886. data/vendor/local/share/gtk-doc/html/glib/glib-I18N.html +629 -0
  887. data/vendor/local/share/gtk-doc/html/glib/glib-IO-Channels.html +2196 -0
  888. data/vendor/local/share/gtk-doc/html/glib/glib-Key-value-file-parser.html +2556 -0
  889. data/vendor/local/share/gtk-doc/html/glib/glib-Keyed-Data-Lists.html +612 -0
  890. data/vendor/local/share/gtk-doc/html/glib/glib-Lexical-Scanner.html +1451 -0
  891. data/vendor/local/share/gtk-doc/html/glib/glib-Limits-of-Basic-Types.html +389 -0
  892. data/vendor/local/share/gtk-doc/html/glib/glib-Memory-Allocation.html +1029 -0
  893. data/vendor/local/share/gtk-doc/html/glib/glib-Memory-Allocators.html +141 -0
  894. data/vendor/local/share/gtk-doc/html/glib/glib-Memory-Chunks.html +706 -0
  895. data/vendor/local/share/gtk-doc/html/glib/glib-Memory-Slices.html +510 -0
  896. data/vendor/local/share/gtk-doc/html/glib/glib-Message-Logging.html +703 -0
  897. data/vendor/local/share/gtk-doc/html/glib/glib-Miscellaneous-Macros.html +1045 -0
  898. data/vendor/local/share/gtk-doc/html/glib/glib-Miscellaneous-Utility-Functions.html +1523 -0
  899. data/vendor/local/share/gtk-doc/html/glib/glib-N-ary-Trees.html +1466 -0
  900. data/vendor/local/share/gtk-doc/html/glib/glib-Numerical-Definitions.html +204 -0
  901. data/vendor/local/share/gtk-doc/html/glib/glib-Perl-compatible-regular-expressions.html +2648 -0
  902. data/vendor/local/share/gtk-doc/html/glib/glib-Pointer-Arrays.html +752 -0
  903. data/vendor/local/share/gtk-doc/html/glib/glib-Quarks.html +269 -0
  904. data/vendor/local/share/gtk-doc/html/glib/glib-Random-Numbers.html +578 -0
  905. data/vendor/local/share/gtk-doc/html/glib/glib-Relations-and-Tuples.html +483 -0
  906. data/vendor/local/share/gtk-doc/html/glib/glib-Sequences.html +1353 -0
  907. data/vendor/local/share/gtk-doc/html/glib/glib-Shell-related-Utilities.html +238 -0
  908. data/vendor/local/share/gtk-doc/html/glib/glib-Simple-XML-Subset-Parser.html +1283 -0
  909. data/vendor/local/share/gtk-doc/html/glib/glib-Singly-Linked-Lists.html +1212 -0
  910. data/vendor/local/share/gtk-doc/html/glib/glib-Spawning-Processes.html +924 -0
  911. data/vendor/local/share/gtk-doc/html/glib/glib-Standard-Macros.html +466 -0
  912. data/vendor/local/share/gtk-doc/html/glib/glib-String-Chunks.html +301 -0
  913. data/vendor/local/share/gtk-doc/html/glib/glib-String-Utility-Functions.html +2947 -0
  914. data/vendor/local/share/gtk-doc/html/glib/glib-Strings.html +1290 -0
  915. data/vendor/local/share/gtk-doc/html/glib/glib-Testing.html +1719 -0
  916. data/vendor/local/share/gtk-doc/html/glib/glib-The-Main-Event-Loop.html +3379 -0
  917. data/vendor/local/share/gtk-doc/html/glib/glib-Thread-Pools.html +606 -0
  918. data/vendor/local/share/gtk-doc/html/glib/glib-Threads.html +3411 -0
  919. data/vendor/local/share/gtk-doc/html/glib/glib-Timers.html +245 -0
  920. data/vendor/local/share/gtk-doc/html/glib/glib-Trash-Stacks.html +188 -0
  921. data/vendor/local/share/gtk-doc/html/glib/glib-Type-Conversion-Macros.html +263 -0
  922. data/vendor/local/share/gtk-doc/html/glib/glib-URI-Functions.html +314 -0
  923. data/vendor/local/share/gtk-doc/html/glib/glib-Unicode-Manipulation.html +3356 -0
  924. data/vendor/local/share/gtk-doc/html/glib/glib-Version-Information.html +150 -0
  925. data/vendor/local/share/gtk-doc/html/glib/glib-Warnings-and-Assertions.html +438 -0
  926. data/vendor/local/share/gtk-doc/html/glib/glib-Windows-Compatibility-Functions.html +476 -0
  927. data/vendor/local/share/gtk-doc/html/glib/glib-building.html +438 -0
  928. data/vendor/local/share/gtk-doc/html/glib/glib-changes.html +159 -0
  929. data/vendor/local/share/gtk-doc/html/glib/glib-compiling.html +118 -0
  930. data/vendor/local/share/gtk-doc/html/glib/glib-core.html +64 -0
  931. data/vendor/local/share/gtk-doc/html/glib/glib-cross-compiling.html +160 -0
  932. data/vendor/local/share/gtk-doc/html/glib/glib-data-types.html +120 -0
  933. data/vendor/local/share/gtk-doc/html/glib/glib-fundamentals.html +59 -0
  934. data/vendor/local/share/gtk-doc/html/glib/glib-gettextize.html +93 -0
  935. data/vendor/local/share/gtk-doc/html/glib/glib-regex-syntax.html +2395 -0
  936. data/vendor/local/share/gtk-doc/html/glib/glib-resources.html +121 -0
  937. data/vendor/local/share/gtk-doc/html/glib/glib-running.html +302 -0
  938. data/vendor/local/share/gtk-doc/html/glib/glib-utilities.html +112 -0
  939. data/vendor/local/share/gtk-doc/html/glib/glib.devhelp +2084 -0
  940. data/vendor/local/share/gtk-doc/html/glib/glib.devhelp2 +2556 -0
  941. data/vendor/local/share/gtk-doc/html/glib/glib.html +80 -0
  942. data/vendor/local/share/gtk-doc/html/glib/gtester-report.html +72 -0
  943. data/vendor/local/share/gtk-doc/html/glib/gtester.html +131 -0
  944. data/vendor/local/share/gtk-doc/html/glib/gvariant-format-strings.html +1171 -0
  945. data/vendor/local/share/gtk-doc/html/glib/home.png +0 -0
  946. data/vendor/local/share/gtk-doc/html/glib/index.html +336 -0
  947. data/vendor/local/share/gtk-doc/html/glib/index.sgml +2717 -0
  948. data/vendor/local/share/gtk-doc/html/glib/left.png +0 -0
  949. data/vendor/local/share/gtk-doc/html/glib/mainloop-states.gif +0 -0
  950. data/vendor/local/share/gtk-doc/html/glib/right.png +0 -0
  951. data/vendor/local/share/gtk-doc/html/glib/style.css +257 -0
  952. data/vendor/local/share/gtk-doc/html/glib/tools.html +41 -0
  953. data/vendor/local/share/gtk-doc/html/glib/up.png +0 -0
  954. data/vendor/local/share/gtk-doc/html/gobject/GTypeModule.html +710 -0
  955. data/vendor/local/share/gtk-doc/html/gobject/GTypePlugin.html +453 -0
  956. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-10.html +85 -0
  957. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-12.html +55 -0
  958. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-14.html +51 -0
  959. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-18.html +46 -0
  960. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-2.html +38 -0
  961. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-22.html +46 -0
  962. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-24.html +72 -0
  963. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-4.html +178 -0
  964. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-6.html +42 -0
  965. data/vendor/local/share/gtk-doc/html/gobject/api-index-2-8.html +42 -0
  966. data/vendor/local/share/gtk-doc/html/gobject/api-index-deprecated.html +50 -0
  967. data/vendor/local/share/gtk-doc/html/gobject/api-index-full.html +2577 -0
  968. data/vendor/local/share/gtk-doc/html/gobject/ch01s02.html +136 -0
  969. data/vendor/local/share/gtk-doc/html/gobject/ch06s03.html +113 -0
  970. data/vendor/local/share/gtk-doc/html/gobject/chapter-gobject.html +293 -0
  971. data/vendor/local/share/gtk-doc/html/gobject/chapter-gtype.html +263 -0
  972. data/vendor/local/share/gtk-doc/html/gobject/chapter-intro.html +92 -0
  973. data/vendor/local/share/gtk-doc/html/gobject/chapter-signal.html +214 -0
  974. data/vendor/local/share/gtk-doc/html/gobject/glib-genmarshal.html +355 -0
  975. data/vendor/local/share/gtk-doc/html/gobject/glib-mkenums.html +295 -0
  976. data/vendor/local/share/gtk-doc/html/gobject/glue.png +0 -0
  977. data/vendor/local/share/gtk-doc/html/gobject/gobject-Boxed-Types.html +406 -0
  978. data/vendor/local/share/gtk-doc/html/gobject/gobject-Closures.html +2355 -0
  979. data/vendor/local/share/gtk-doc/html/gobject/gobject-Enumeration-and-Flag-Types.html +847 -0
  980. data/vendor/local/share/gtk-doc/html/gobject/gobject-GParamSpec.html +1423 -0
  981. data/vendor/local/share/gtk-doc/html/gobject/gobject-Generic-values.html +776 -0
  982. data/vendor/local/share/gtk-doc/html/gobject/gobject-Signals.html +2741 -0
  983. data/vendor/local/share/gtk-doc/html/gobject/gobject-Standard-Parameter-and-Value-Types.html +5242 -0
  984. data/vendor/local/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html +2609 -0
  985. data/vendor/local/share/gtk-doc/html/gobject/gobject-Type-Information.html +4227 -0
  986. data/vendor/local/share/gtk-doc/html/gobject/gobject-Value-arrays.html +413 -0
  987. data/vendor/local/share/gtk-doc/html/gobject/gobject-Varargs-Value-Collection.html +230 -0
  988. data/vendor/local/share/gtk-doc/html/gobject/gobject-memory.html +234 -0
  989. data/vendor/local/share/gtk-doc/html/gobject/gobject-properties.html +270 -0
  990. data/vendor/local/share/gtk-doc/html/gobject/gobject-query.html +117 -0
  991. data/vendor/local/share/gtk-doc/html/gobject/gobject.devhelp +723 -0
  992. data/vendor/local/share/gtk-doc/html/gobject/gobject.devhelp2 +757 -0
  993. data/vendor/local/share/gtk-doc/html/gobject/gtype-conventions.html +143 -0
  994. data/vendor/local/share/gtk-doc/html/gobject/gtype-instantiable-classed.html +287 -0
  995. data/vendor/local/share/gtk-doc/html/gobject/gtype-non-instantiable-classed.html +316 -0
  996. data/vendor/local/share/gtk-doc/html/gobject/gtype-non-instantiable.html +76 -0
  997. data/vendor/local/share/gtk-doc/html/gobject/home.png +0 -0
  998. data/vendor/local/share/gtk-doc/html/gobject/howto-gobject-chainup.html +100 -0
  999. data/vendor/local/share/gtk-doc/html/gobject/howto-gobject-code.html +86 -0
  1000. data/vendor/local/share/gtk-doc/html/gobject/howto-gobject-construction.html +113 -0
  1001. data/vendor/local/share/gtk-doc/html/gobject/howto-gobject-destruction.html +122 -0
  1002. data/vendor/local/share/gtk-doc/html/gobject/howto-gobject-methods.html +257 -0
  1003. data/vendor/local/share/gtk-doc/html/gobject/howto-gobject.html +283 -0
  1004. data/vendor/local/share/gtk-doc/html/gobject/howto-interface-implement.html +125 -0
  1005. data/vendor/local/share/gtk-doc/html/gobject/howto-interface-properties.html +167 -0
  1006. data/vendor/local/share/gtk-doc/html/gobject/howto-interface.html +160 -0
  1007. data/vendor/local/share/gtk-doc/html/gobject/howto-signals.html +121 -0
  1008. data/vendor/local/share/gtk-doc/html/gobject/index.html +187 -0
  1009. data/vendor/local/share/gtk-doc/html/gobject/index.sgml +734 -0
  1010. data/vendor/local/share/gtk-doc/html/gobject/left.png +0 -0
  1011. data/vendor/local/share/gtk-doc/html/gobject/pr01.html +72 -0
  1012. data/vendor/local/share/gtk-doc/html/gobject/pt01.html +80 -0
  1013. data/vendor/local/share/gtk-doc/html/gobject/pt02.html +66 -0
  1014. data/vendor/local/share/gtk-doc/html/gobject/pt03.html +55 -0
  1015. data/vendor/local/share/gtk-doc/html/gobject/right.png +0 -0
  1016. data/vendor/local/share/gtk-doc/html/gobject/rn01.html +82 -0
  1017. data/vendor/local/share/gtk-doc/html/gobject/rn02.html +47 -0
  1018. data/vendor/local/share/gtk-doc/html/gobject/signal.html +377 -0
  1019. data/vendor/local/share/gtk-doc/html/gobject/style.css +257 -0
  1020. data/vendor/local/share/gtk-doc/html/gobject/tools-ginspector.html +35 -0
  1021. data/vendor/local/share/gtk-doc/html/gobject/tools-gob.html +40 -0
  1022. data/vendor/local/share/gtk-doc/html/gobject/tools-gtkdoc.html +63 -0
  1023. data/vendor/local/share/gtk-doc/html/gobject/tools-refdb.html +55 -0
  1024. data/vendor/local/share/gtk-doc/html/gobject/tools-vala.html +43 -0
  1025. data/vendor/local/share/gtk-doc/html/gobject/up.png +0 -0
  1026. data/vendor/local/share/gtk-doc/html/pango/PangoEngineLang.html +201 -0
  1027. data/vendor/local/share/gtk-doc/html/pango/PangoEngineShape.html +227 -0
  1028. data/vendor/local/share/gtk-doc/html/pango/PangoFcDecoder.html +220 -0
  1029. data/vendor/local/share/gtk-doc/html/pango/PangoFcFont.html +402 -0
  1030. data/vendor/local/share/gtk-doc/html/pango/PangoFcFontMap.html +779 -0
  1031. data/vendor/local/share/gtk-doc/html/pango/PangoMarkupFormat.html +310 -0
  1032. data/vendor/local/share/gtk-doc/html/pango/PangoRenderer.html +1002 -0
  1033. data/vendor/local/share/gtk-doc/html/pango/home.png +0 -0
  1034. data/vendor/local/share/gtk-doc/html/pango/index-1.10.html +102 -0
  1035. data/vendor/local/share/gtk-doc/html/pango/index-1.12.html +62 -0
  1036. data/vendor/local/share/gtk-doc/html/pango/index-1.14.html +68 -0
  1037. data/vendor/local/share/gtk-doc/html/pango/index-1.16.html +136 -0
  1038. data/vendor/local/share/gtk-doc/html/pango/index-1.18.html +114 -0
  1039. data/vendor/local/share/gtk-doc/html/pango/index-1.2.html +94 -0
  1040. data/vendor/local/share/gtk-doc/html/pango/index-1.20.html +80 -0
  1041. data/vendor/local/share/gtk-doc/html/pango/index-1.22.html +92 -0
  1042. data/vendor/local/share/gtk-doc/html/pango/index-1.24.html +80 -0
  1043. data/vendor/local/share/gtk-doc/html/pango/index-1.26.html +60 -0
  1044. data/vendor/local/share/gtk-doc/html/pango/index-1.28.html +55 -0
  1045. data/vendor/local/share/gtk-doc/html/pango/index-1.4.html +132 -0
  1046. data/vendor/local/share/gtk-doc/html/pango/index-1.6.html +112 -0
  1047. data/vendor/local/share/gtk-doc/html/pango/index-1.8.html +120 -0
  1048. data/vendor/local/share/gtk-doc/html/pango/index-all.html +1537 -0
  1049. data/vendor/local/share/gtk-doc/html/pango/index-deprecated.html +158 -0
  1050. data/vendor/local/share/gtk-doc/html/pango/index.html +165 -0
  1051. data/vendor/local/share/gtk-doc/html/pango/index.sgml +1089 -0
  1052. data/vendor/local/share/gtk-doc/html/pango/layout.gif +0 -0
  1053. data/vendor/local/share/gtk-doc/html/pango/left.png +0 -0
  1054. data/vendor/local/share/gtk-doc/html/pango/lowlevel.html +89 -0
  1055. data/vendor/local/share/gtk-doc/html/pango/pango-ATSUI-Fonts.html +138 -0
  1056. data/vendor/local/share/gtk-doc/html/pango/pango-Bidirectional-Text.html +441 -0
  1057. data/vendor/local/share/gtk-doc/html/pango/pango-Cairo-Rendering.html +1198 -0
  1058. data/vendor/local/share/gtk-doc/html/pango/pango-Coverage-Maps.html +385 -0
  1059. data/vendor/local/share/gtk-doc/html/pango/pango-Engines.html +305 -0
  1060. data/vendor/local/share/gtk-doc/html/pango/pango-Fonts.html +3075 -0
  1061. data/vendor/local/share/gtk-doc/html/pango/pango-FreeType-Fonts-and-Rendering.html +788 -0
  1062. data/vendor/local/share/gtk-doc/html/pango/pango-Glyph-Storage.html +2100 -0
  1063. data/vendor/local/share/gtk-doc/html/pango/pango-Layout-Objects.html +2977 -0
  1064. data/vendor/local/share/gtk-doc/html/pango/pango-Miscellaneous-Utilities.html +715 -0
  1065. data/vendor/local/share/gtk-doc/html/pango/pango-Modules.html +278 -0
  1066. data/vendor/local/share/gtk-doc/html/pango/pango-OpenType-Font-Handling.html +1729 -0
  1067. data/vendor/local/share/gtk-doc/html/pango/pango-Scripts-and-Languages.html +1135 -0
  1068. data/vendor/local/share/gtk-doc/html/pango/pango-Tab-Stops.html +453 -0
  1069. data/vendor/local/share/gtk-doc/html/pango/pango-Text-Attributes.html +2440 -0
  1070. data/vendor/local/share/gtk-doc/html/pango/pango-Text-Processing.html +1534 -0
  1071. data/vendor/local/share/gtk-doc/html/pango/pango-Version-Checking.html +297 -0
  1072. data/vendor/local/share/gtk-doc/html/pango/pango-Vertical-Text.html +431 -0
  1073. data/vendor/local/share/gtk-doc/html/pango/pango-Win32-Fonts-and-Rendering.html +800 -0
  1074. data/vendor/local/share/gtk-doc/html/pango/pango-X-Fonts-and-Rendering.html +1096 -0
  1075. data/vendor/local/share/gtk-doc/html/pango/pango-Xft-Fonts-and-Rendering.html +1031 -0
  1076. data/vendor/local/share/gtk-doc/html/pango/pango-hierarchy.html +78 -0
  1077. data/vendor/local/share/gtk-doc/html/pango/pango-querymodules.html +92 -0
  1078. data/vendor/local/share/gtk-doc/html/pango/pango.devhelp +799 -0
  1079. data/vendor/local/share/gtk-doc/html/pango/pango.devhelp2 +993 -0
  1080. data/vendor/local/share/gtk-doc/html/pango/pango.html +84 -0
  1081. data/vendor/local/share/gtk-doc/html/pango/rendering.html +71 -0
  1082. data/vendor/local/share/gtk-doc/html/pango/right.png +0 -0
  1083. data/vendor/local/share/gtk-doc/html/pango/rotated-text.png +0 -0
  1084. data/vendor/local/share/gtk-doc/html/pango/style.css +257 -0
  1085. data/vendor/local/share/gtk-doc/html/pango/tools.html +54 -0
  1086. data/vendor/local/share/gtk-doc/html/pango/up.png +0 -0
  1087. data/vendor/local/share/locale/af/LC_MESSAGES/glib20.mo +0 -0
  1088. data/vendor/local/share/locale/am/LC_MESSAGES/glib20.mo +0 -0
  1089. data/vendor/local/share/locale/ar/LC_MESSAGES/glib20.mo +0 -0
  1090. data/vendor/local/share/locale/as/LC_MESSAGES/glib20.mo +0 -0
  1091. data/vendor/local/share/locale/ast/LC_MESSAGES/glib20.mo +0 -0
  1092. data/vendor/local/share/locale/az/LC_MESSAGES/glib20.mo +0 -0
  1093. data/vendor/local/share/locale/be/LC_MESSAGES/gettext-runtime.mo +0 -0
  1094. data/vendor/local/share/locale/be/LC_MESSAGES/glib20.mo +0 -0
  1095. data/vendor/local/share/locale/be@latin/LC_MESSAGES/glib20.mo +0 -0
  1096. data/vendor/local/share/locale/bg/LC_MESSAGES/gettext-runtime.mo +0 -0
  1097. data/vendor/local/share/locale/bg/LC_MESSAGES/glib20.mo +0 -0
  1098. data/vendor/local/share/locale/bn/LC_MESSAGES/glib20.mo +0 -0
  1099. data/vendor/local/share/locale/bn_IN/LC_MESSAGES/glib20.mo +0 -0
  1100. data/vendor/local/share/locale/bs/LC_MESSAGES/glib20.mo +0 -0
  1101. data/vendor/local/share/locale/ca/LC_MESSAGES/gettext-runtime.mo +0 -0
  1102. data/vendor/local/share/locale/ca/LC_MESSAGES/glib20.mo +0 -0
  1103. data/vendor/local/share/locale/ca@valencia/LC_MESSAGES/glib20.mo +0 -0
  1104. data/vendor/local/share/locale/cs/LC_MESSAGES/gettext-runtime.mo +0 -0
  1105. data/vendor/local/share/locale/cs/LC_MESSAGES/glib20.mo +0 -0
  1106. data/vendor/local/share/locale/cy/LC_MESSAGES/glib20.mo +0 -0
  1107. data/vendor/local/share/locale/da/LC_MESSAGES/gettext-runtime.mo +0 -0
  1108. data/vendor/local/share/locale/da/LC_MESSAGES/glib20.mo +0 -0
  1109. data/vendor/local/share/locale/de/LC_MESSAGES/gettext-runtime.mo +0 -0
  1110. data/vendor/local/share/locale/de/LC_MESSAGES/glib20.mo +0 -0
  1111. data/vendor/local/share/locale/dz/LC_MESSAGES/glib20.mo +0 -0
  1112. data/vendor/local/share/locale/el/LC_MESSAGES/gettext-runtime.mo +0 -0
  1113. data/vendor/local/share/locale/el/LC_MESSAGES/glib20.mo +0 -0
  1114. data/vendor/local/share/locale/en@boldquot/LC_MESSAGES/gettext-runtime.mo +0 -0
  1115. data/vendor/local/share/locale/en@quot/LC_MESSAGES/gettext-runtime.mo +0 -0
  1116. data/vendor/local/share/locale/en@shaw/LC_MESSAGES/glib20.mo +0 -0
  1117. data/vendor/local/share/locale/en_CA/LC_MESSAGES/glib20.mo +0 -0
  1118. data/vendor/local/share/locale/en_GB/LC_MESSAGES/glib20.mo +0 -0
  1119. data/vendor/local/share/locale/eo/LC_MESSAGES/gettext-runtime.mo +0 -0
  1120. data/vendor/local/share/locale/eo/LC_MESSAGES/glib20.mo +0 -0
  1121. data/vendor/local/share/locale/es/LC_MESSAGES/gettext-runtime.mo +0 -0
  1122. data/vendor/local/share/locale/es/LC_MESSAGES/glib20.mo +0 -0
  1123. data/vendor/local/share/locale/et/LC_MESSAGES/gettext-runtime.mo +0 -0
  1124. data/vendor/local/share/locale/et/LC_MESSAGES/glib20.mo +0 -0
  1125. data/vendor/local/share/locale/eu/LC_MESSAGES/glib20.mo +0 -0
  1126. data/vendor/local/share/locale/fa/LC_MESSAGES/glib20.mo +0 -0
  1127. data/vendor/local/share/locale/fi/LC_MESSAGES/gettext-runtime.mo +0 -0
  1128. data/vendor/local/share/locale/fi/LC_MESSAGES/glib20.mo +0 -0
  1129. data/vendor/local/share/locale/fr/LC_MESSAGES/gettext-runtime.mo +0 -0
  1130. data/vendor/local/share/locale/fr/LC_MESSAGES/glib20.mo +0 -0
  1131. data/vendor/local/share/locale/ga/LC_MESSAGES/gettext-runtime.mo +0 -0
  1132. data/vendor/local/share/locale/ga/LC_MESSAGES/glib20.mo +0 -0
  1133. data/vendor/local/share/locale/gl/LC_MESSAGES/gettext-runtime.mo +0 -0
  1134. data/vendor/local/share/locale/gl/LC_MESSAGES/glib20.mo +0 -0
  1135. data/vendor/local/share/locale/gu/LC_MESSAGES/glib20.mo +0 -0
  1136. data/vendor/local/share/locale/he/LC_MESSAGES/glib20.mo +0 -0
  1137. data/vendor/local/share/locale/hi/LC_MESSAGES/glib20.mo +0 -0
  1138. data/vendor/local/share/locale/hr/LC_MESSAGES/glib20.mo +0 -0
  1139. data/vendor/local/share/locale/hu/LC_MESSAGES/glib20.mo +0 -0
  1140. data/vendor/local/share/locale/hy/LC_MESSAGES/glib20.mo +0 -0
  1141. data/vendor/local/share/locale/id/LC_MESSAGES/gettext-runtime.mo +0 -0
  1142. data/vendor/local/share/locale/id/LC_MESSAGES/glib20.mo +0 -0
  1143. data/vendor/local/share/locale/is/LC_MESSAGES/glib20.mo +0 -0
  1144. data/vendor/local/share/locale/it/LC_MESSAGES/gettext-runtime.mo +0 -0
  1145. data/vendor/local/share/locale/it/LC_MESSAGES/glib20.mo +0 -0
  1146. data/vendor/local/share/locale/ja/LC_MESSAGES/gettext-runtime.mo +0 -0
  1147. data/vendor/local/share/locale/ja/LC_MESSAGES/glib20.mo +0 -0
  1148. data/vendor/local/share/locale/ka/LC_MESSAGES/glib20.mo +0 -0
  1149. data/vendor/local/share/locale/kn/LC_MESSAGES/glib20.mo +0 -0
  1150. data/vendor/local/share/locale/ko/LC_MESSAGES/gettext-runtime.mo +0 -0
  1151. data/vendor/local/share/locale/ko/LC_MESSAGES/glib20.mo +0 -0
  1152. data/vendor/local/share/locale/ku/LC_MESSAGES/glib20.mo +0 -0
  1153. data/vendor/local/share/locale/locale.alias +77 -0
  1154. data/vendor/local/share/locale/lt/LC_MESSAGES/glib20.mo +0 -0
  1155. data/vendor/local/share/locale/lv/LC_MESSAGES/glib20.mo +0 -0
  1156. data/vendor/local/share/locale/mai/LC_MESSAGES/glib20.mo +0 -0
  1157. data/vendor/local/share/locale/mg/LC_MESSAGES/glib20.mo +0 -0
  1158. data/vendor/local/share/locale/mk/LC_MESSAGES/glib20.mo +0 -0
  1159. data/vendor/local/share/locale/ml/LC_MESSAGES/glib20.mo +0 -0
  1160. data/vendor/local/share/locale/mn/LC_MESSAGES/glib20.mo +0 -0
  1161. data/vendor/local/share/locale/mr/LC_MESSAGES/glib20.mo +0 -0
  1162. data/vendor/local/share/locale/ms/LC_MESSAGES/glib20.mo +0 -0
  1163. data/vendor/local/share/locale/nb/LC_MESSAGES/gettext-runtime.mo +0 -0
  1164. data/vendor/local/share/locale/nb/LC_MESSAGES/glib20.mo +0 -0
  1165. data/vendor/local/share/locale/nds/LC_MESSAGES/glib20.mo +0 -0
  1166. data/vendor/local/share/locale/ne/LC_MESSAGES/glib20.mo +0 -0
  1167. data/vendor/local/share/locale/nl/LC_MESSAGES/gettext-runtime.mo +0 -0
  1168. data/vendor/local/share/locale/nl/LC_MESSAGES/glib20.mo +0 -0
  1169. data/vendor/local/share/locale/nn/LC_MESSAGES/gettext-runtime.mo +0 -0
  1170. data/vendor/local/share/locale/nn/LC_MESSAGES/glib20.mo +0 -0
  1171. data/vendor/local/share/locale/oc/LC_MESSAGES/glib20.mo +0 -0
  1172. data/vendor/local/share/locale/or/LC_MESSAGES/glib20.mo +0 -0
  1173. data/vendor/local/share/locale/pa/LC_MESSAGES/glib20.mo +0 -0
  1174. data/vendor/local/share/locale/pl/LC_MESSAGES/gettext-runtime.mo +0 -0
  1175. data/vendor/local/share/locale/pl/LC_MESSAGES/glib20.mo +0 -0
  1176. data/vendor/local/share/locale/ps/LC_MESSAGES/glib20.mo +0 -0
  1177. data/vendor/local/share/locale/pt/LC_MESSAGES/gettext-runtime.mo +0 -0
  1178. data/vendor/local/share/locale/pt/LC_MESSAGES/glib20.mo +0 -0
  1179. data/vendor/local/share/locale/pt_BR/LC_MESSAGES/gettext-runtime.mo +0 -0
  1180. data/vendor/local/share/locale/pt_BR/LC_MESSAGES/glib20.mo +0 -0
  1181. data/vendor/local/share/locale/ro/LC_MESSAGES/gettext-runtime.mo +0 -0
  1182. data/vendor/local/share/locale/ro/LC_MESSAGES/glib20.mo +0 -0
  1183. data/vendor/local/share/locale/ru/LC_MESSAGES/gettext-runtime.mo +0 -0
  1184. data/vendor/local/share/locale/ru/LC_MESSAGES/glib20.mo +0 -0
  1185. data/vendor/local/share/locale/rw/LC_MESSAGES/glib20.mo +0 -0
  1186. data/vendor/local/share/locale/si/LC_MESSAGES/glib20.mo +0 -0
  1187. data/vendor/local/share/locale/sk/LC_MESSAGES/gettext-runtime.mo +0 -0
  1188. data/vendor/local/share/locale/sk/LC_MESSAGES/glib20.mo +0 -0
  1189. data/vendor/local/share/locale/sl/LC_MESSAGES/gettext-runtime.mo +0 -0
  1190. data/vendor/local/share/locale/sl/LC_MESSAGES/glib20.mo +0 -0
  1191. data/vendor/local/share/locale/sq/LC_MESSAGES/glib20.mo +0 -0
  1192. data/vendor/local/share/locale/sr/LC_MESSAGES/gettext-runtime.mo +0 -0
  1193. data/vendor/local/share/locale/sr/LC_MESSAGES/glib20.mo +0 -0
  1194. data/vendor/local/share/locale/sr@ije/LC_MESSAGES/glib20.mo +0 -0
  1195. data/vendor/local/share/locale/sr@latin/LC_MESSAGES/glib20.mo +0 -0
  1196. data/vendor/local/share/locale/sv/LC_MESSAGES/gettext-runtime.mo +0 -0
  1197. data/vendor/local/share/locale/sv/LC_MESSAGES/glib20.mo +0 -0
  1198. data/vendor/local/share/locale/ta/LC_MESSAGES/glib20.mo +0 -0
  1199. data/vendor/local/share/locale/te/LC_MESSAGES/glib20.mo +0 -0
  1200. data/vendor/local/share/locale/th/LC_MESSAGES/glib20.mo +0 -0
  1201. data/vendor/local/share/locale/tl/LC_MESSAGES/glib20.mo +0 -0
  1202. data/vendor/local/share/locale/tr/LC_MESSAGES/gettext-runtime.mo +0 -0
  1203. data/vendor/local/share/locale/tr/LC_MESSAGES/glib20.mo +0 -0
  1204. data/vendor/local/share/locale/tt/LC_MESSAGES/glib20.mo +0 -0
  1205. data/vendor/local/share/locale/uk/LC_MESSAGES/gettext-runtime.mo +0 -0
  1206. data/vendor/local/share/locale/uk/LC_MESSAGES/glib20.mo +0 -0
  1207. data/vendor/local/share/locale/vi/LC_MESSAGES/gettext-runtime.mo +0 -0
  1208. data/vendor/local/share/locale/vi/LC_MESSAGES/glib20.mo +0 -0
  1209. data/vendor/local/share/locale/wa/LC_MESSAGES/glib20.mo +0 -0
  1210. data/vendor/local/share/locale/xh/LC_MESSAGES/glib20.mo +0 -0
  1211. data/vendor/local/share/locale/yi/LC_MESSAGES/glib20.mo +0 -0
  1212. data/vendor/local/share/locale/zh_CN/LC_MESSAGES/gettext-runtime.mo +0 -0
  1213. data/vendor/local/share/locale/zh_CN/LC_MESSAGES/glib20.mo +0 -0
  1214. data/vendor/local/share/locale/zh_HK/LC_MESSAGES/gettext-runtime.mo +0 -0
  1215. data/vendor/local/share/locale/zh_HK/LC_MESSAGES/glib20.mo +0 -0
  1216. data/vendor/local/share/locale/zh_TW/LC_MESSAGES/gettext-runtime.mo +0 -0
  1217. data/vendor/local/share/locale/zh_TW/LC_MESSAGES/glib20.mo +0 -0
  1218. data/vendor/local/share/man/man1/envsubst.1 +54 -0
  1219. data/vendor/local/share/man/man1/fc-cache.1 +70 -0
  1220. data/vendor/local/share/man/man1/fc-cat.1 +44 -0
  1221. data/vendor/local/share/man/man1/fc-list.1 +72 -0
  1222. data/vendor/local/share/man/man1/fc-match.1 +73 -0
  1223. data/vendor/local/share/man/man1/fc-query.1 +57 -0
  1224. data/vendor/local/share/man/man1/fc-scan.1 +52 -0
  1225. data/vendor/local/share/man/man1/gettext.1 +69 -0
  1226. data/vendor/local/share/man/man1/glib-genmarshal.1 +307 -0
  1227. data/vendor/local/share/man/man1/glib-mkenums.1 +234 -0
  1228. data/vendor/local/share/man/man1/gobject-query.1 +83 -0
  1229. data/vendor/local/share/man/man1/ngettext.1 +68 -0
  1230. data/vendor/local/share/man/man1/pango-querymodules.1 +47 -0
  1231. data/vendor/local/share/man/man1/pango-view.1 +118 -0
  1232. data/vendor/local/share/man/man3/FcAtomicCreate.3 +19 -0
  1233. data/vendor/local/share/man/man3/FcAtomicDeleteNew.3 +16 -0
  1234. data/vendor/local/share/man/man3/FcAtomicDestroy.3 +16 -0
  1235. data/vendor/local/share/man/man3/FcAtomicLock.3 +18 -0
  1236. data/vendor/local/share/man/man3/FcAtomicNewFile.3 +17 -0
  1237. data/vendor/local/share/man/man3/FcAtomicOrigFile.3 +16 -0
  1238. data/vendor/local/share/man/man3/FcAtomicReplaceOrig.3 +18 -0
  1239. data/vendor/local/share/man/man3/FcAtomicUnlock.3 +16 -0
  1240. data/vendor/local/share/man/man3/FcBlanksAdd.3 +18 -0
  1241. data/vendor/local/share/man/man3/FcBlanksCreate.3 +16 -0
  1242. data/vendor/local/share/man/man3/FcBlanksDestroy.3 +16 -0
  1243. data/vendor/local/share/man/man3/FcBlanksIsMember.3 +18 -0
  1244. data/vendor/local/share/man/man3/FcCacheCopySet.3 +18 -0
  1245. data/vendor/local/share/man/man3/FcCacheDir.3 +16 -0
  1246. data/vendor/local/share/man/man3/FcCacheNumFont.3 +17 -0
  1247. data/vendor/local/share/man/man3/FcCacheNumSubdir.3 +16 -0
  1248. data/vendor/local/share/man/man3/FcCacheSubdir.3 +20 -0
  1249. data/vendor/local/share/man/man3/FcCharSetAddChar.3 +19 -0
  1250. data/vendor/local/share/man/man3/FcCharSetCopy.3 +17 -0
  1251. data/vendor/local/share/man/man3/FcCharSetCount.3 +16 -0
  1252. data/vendor/local/share/man/man3/FcCharSetCoverage.3 +23 -0
  1253. data/vendor/local/share/man/man3/FcCharSetCreate.3 +17 -0
  1254. data/vendor/local/share/man/man3/FcCharSetDestroy.3 +18 -0
  1255. data/vendor/local/share/man/man3/FcCharSetEqual.3 +18 -0
  1256. data/vendor/local/share/man/man3/FcCharSetFirstPage.3 +20 -0
  1257. data/vendor/local/share/man/man3/FcCharSetHasChar.3 +17 -0
  1258. data/vendor/local/share/man/man3/FcCharSetIntersect.3 +18 -0
  1259. data/vendor/local/share/man/man3/FcCharSetIntersectCount.3 +17 -0
  1260. data/vendor/local/share/man/man3/FcCharSetIsSubset.3 +17 -0
  1261. data/vendor/local/share/man/man3/FcCharSetMerge.3 +23 -0
  1262. data/vendor/local/share/man/man3/FcCharSetNew.3 +16 -0
  1263. data/vendor/local/share/man/man3/FcCharSetNextPage.3 +20 -0
  1264. data/vendor/local/share/man/man3/FcCharSetSubtract.3 +17 -0
  1265. data/vendor/local/share/man/man3/FcCharSetSubtractCount.3 +17 -0
  1266. data/vendor/local/share/man/man3/FcCharSetUnion.3 +17 -0
  1267. data/vendor/local/share/man/man3/FcConfigAppFontAddDir.3 +20 -0
  1268. data/vendor/local/share/man/man3/FcConfigAppFontAddFile.3 +19 -0
  1269. data/vendor/local/share/man/man3/FcConfigAppFontClear.3 +17 -0
  1270. data/vendor/local/share/man/man3/FcConfigBuildFonts.3 +19 -0
  1271. data/vendor/local/share/man/man3/FcConfigCreate.3 +16 -0
  1272. data/vendor/local/share/man/man3/FcConfigDestroy.3 +19 -0
  1273. data/vendor/local/share/man/man3/FcConfigEnableHome.3 +20 -0
  1274. data/vendor/local/share/man/man3/FcConfigFilename.3 +26 -0
  1275. data/vendor/local/share/man/man3/FcConfigGetBlanks.3 +20 -0
  1276. data/vendor/local/share/man/man3/FcConfigGetCache.3 +17 -0
  1277. data/vendor/local/share/man/man3/FcConfigGetCacheDirs.3 +19 -0
  1278. data/vendor/local/share/man/man3/FcConfigGetConfigDirs.3 +18 -0
  1279. data/vendor/local/share/man/man3/FcConfigGetConfigFiles.3 +17 -0
  1280. data/vendor/local/share/man/man3/FcConfigGetCurrent.3 +16 -0
  1281. data/vendor/local/share/man/man3/FcConfigGetFontDirs.3 +19 -0
  1282. data/vendor/local/share/man/man3/FcConfigGetFonts.3 +20 -0
  1283. data/vendor/local/share/man/man3/FcConfigGetRescanInterval.3 +20 -0
  1284. data/vendor/local/share/man/man3/FcConfigHome.3 +18 -0
  1285. data/vendor/local/share/man/man3/FcConfigParseAndLoad.3 +23 -0
  1286. data/vendor/local/share/man/man3/FcConfigReference.3 +21 -0
  1287. data/vendor/local/share/man/man3/FcConfigSetCurrent.3 +17 -0
  1288. data/vendor/local/share/man/man3/FcConfigSetRescanInterval.3 +20 -0
  1289. data/vendor/local/share/man/man3/FcConfigSubstitute.3 +20 -0
  1290. data/vendor/local/share/man/man3/FcConfigSubstituteWithPat.3 +24 -0
  1291. data/vendor/local/share/man/man3/FcConfigUptoDate.3 +18 -0
  1292. data/vendor/local/share/man/man3/FcDefaultSubstitute.3 +27 -0
  1293. data/vendor/local/share/man/man3/FcDirCacheLoad.3 +21 -0
  1294. data/vendor/local/share/man/man3/FcDirCacheLoadFile.3 +19 -0
  1295. data/vendor/local/share/man/man3/FcDirCacheRead.3 +21 -0
  1296. data/vendor/local/share/man/man3/FcDirCacheUnlink.3 +20 -0
  1297. data/vendor/local/share/man/man3/FcDirCacheUnload.3 +17 -0
  1298. data/vendor/local/share/man/man3/FcDirCacheValid.3 +17 -0
  1299. data/vendor/local/share/man/man3/FcDirSave.3 +22 -0
  1300. data/vendor/local/share/man/man3/FcDirScan.3 +26 -0
  1301. data/vendor/local/share/man/man3/FcFileIsDir.3 +17 -0
  1302. data/vendor/local/share/man/man3/FcFileScan.3 +31 -0
  1303. data/vendor/local/share/man/man3/FcFini.3 +19 -0
  1304. data/vendor/local/share/man/man3/FcFontList.3 +21 -0
  1305. data/vendor/local/share/man/man3/FcFontMatch.3 +25 -0
  1306. data/vendor/local/share/man/man3/FcFontRenderPrepare.3 +21 -0
  1307. data/vendor/local/share/man/man3/FcFontSetAdd.3 +19 -0
  1308. data/vendor/local/share/man/man3/FcFontSetCreate.3 +16 -0
  1309. data/vendor/local/share/man/man3/FcFontSetDestroy.3 +17 -0
  1310. data/vendor/local/share/man/man3/FcFontSetList.3 +25 -0
  1311. data/vendor/local/share/man/man3/FcFontSetMatch.3 +28 -0
  1312. data/vendor/local/share/man/man3/FcFontSetPrint.3 +19 -0
  1313. data/vendor/local/share/man/man3/FcFontSetSort.3 +39 -0
  1314. data/vendor/local/share/man/man3/FcFontSetSortDestroy.3 +19 -0
  1315. data/vendor/local/share/man/man3/FcFontSort.3 +33 -0
  1316. data/vendor/local/share/man/man3/FcFreeTypeCharIndex.3 +22 -0
  1317. data/vendor/local/share/man/man3/FcFreeTypeCharSet.3 +21 -0
  1318. data/vendor/local/share/man/man3/FcFreeTypeCharSetAndSpacing.3 +28 -0
  1319. data/vendor/local/share/man/man3/FcFreeTypeQuery.3 +21 -0
  1320. data/vendor/local/share/man/man3/FcFreeTypeQueryFace.3 +21 -0
  1321. data/vendor/local/share/man/man3/FcGetLangs.3 +16 -0
  1322. data/vendor/local/share/man/man3/FcGetVersion.3 +16 -0
  1323. data/vendor/local/share/man/man3/FcInit.3 +19 -0
  1324. data/vendor/local/share/man/man3/FcInitBringUptoDate.3 +19 -0
  1325. data/vendor/local/share/man/man3/FcInitLoadConfig.3 +17 -0
  1326. data/vendor/local/share/man/man3/FcInitLoadConfigAndFonts.3 +17 -0
  1327. data/vendor/local/share/man/man3/FcInitReinitialize.3 +19 -0
  1328. data/vendor/local/share/man/man3/FcIsLower.3 +17 -0
  1329. data/vendor/local/share/man/man3/FcIsUpper.3 +17 -0
  1330. data/vendor/local/share/man/man3/FcLangGetCharSet.3 +16 -0
  1331. data/vendor/local/share/man/man3/FcLangSetAdd.3 +20 -0
  1332. data/vendor/local/share/man/man3/FcLangSetCompare.3 +22 -0
  1333. data/vendor/local/share/man/man3/FcLangSetContains.3 +22 -0
  1334. data/vendor/local/share/man/man3/FcLangSetCopy.3 +17 -0
  1335. data/vendor/local/share/man/man3/FcLangSetCreate.3 +16 -0
  1336. data/vendor/local/share/man/man3/FcLangSetDestroy.3 +17 -0
  1337. data/vendor/local/share/man/man3/FcLangSetEqual.3 +18 -0
  1338. data/vendor/local/share/man/man3/FcLangSetGetLangs.3 +16 -0
  1339. data/vendor/local/share/man/man3/FcLangSetHasLang.3 +23 -0
  1340. data/vendor/local/share/man/man3/FcLangSetHash.3 +20 -0
  1341. data/vendor/local/share/man/man3/FcMatrixCopy.3 +17 -0
  1342. data/vendor/local/share/man/man3/FcMatrixEqual.3 +19 -0
  1343. data/vendor/local/share/man/man3/FcMatrixInit.3 +17 -0
  1344. data/vendor/local/share/man/man3/FcMatrixMultiply.3 +20 -0
  1345. data/vendor/local/share/man/man3/FcMatrixRotate.3 +27 -0
  1346. data/vendor/local/share/man/man3/FcMatrixScale.3 +27 -0
  1347. data/vendor/local/share/man/man3/FcMatrixShear.3 +27 -0
  1348. data/vendor/local/share/man/man3/FcNameConstant.3 +18 -0
  1349. data/vendor/local/share/man/man3/FcNameGetConstant.3 +16 -0
  1350. data/vendor/local/share/man/man3/FcNameGetObjectType.3 +16 -0
  1351. data/vendor/local/share/man/man3/FcNameParse.3 +16 -0
  1352. data/vendor/local/share/man/man3/FcNameRegisterConstants.3 +19 -0
  1353. data/vendor/local/share/man/man3/FcNameRegisterObjectTypes.3 +19 -0
  1354. data/vendor/local/share/man/man3/FcNameUnparse.3 +18 -0
  1355. data/vendor/local/share/man/man3/FcNameUnregisterConstants.3 +19 -0
  1356. data/vendor/local/share/man/man3/FcNameUnregisterObjectTypes.3 +17 -0
  1357. data/vendor/local/share/man/man3/FcObjectSetAdd.3 +18 -0
  1358. data/vendor/local/share/man/man3/FcObjectSetBuild.3 +26 -0
  1359. data/vendor/local/share/man/man3/FcObjectSetCreate.3 +16 -0
  1360. data/vendor/local/share/man/man3/FcObjectSetDestroy.3 +16 -0
  1361. data/vendor/local/share/man/man3/FcPatternAdd-Type.3 +49 -0
  1362. data/vendor/local/share/man/man3/FcPatternAdd.3 +23 -0
  1363. data/vendor/local/share/man/man3/FcPatternAddWeak.3 +20 -0
  1364. data/vendor/local/share/man/man3/FcPatternBuild.3 +50 -0
  1365. data/vendor/local/share/man/man3/FcPatternCreate.3 +16 -0
  1366. data/vendor/local/share/man/man3/FcPatternDel.3 +18 -0
  1367. data/vendor/local/share/man/man3/FcPatternDestroy.3 +17 -0
  1368. data/vendor/local/share/man/man3/FcPatternDuplicate.3 +18 -0
  1369. data/vendor/local/share/man/man3/FcPatternEqual.3 +17 -0
  1370. data/vendor/local/share/man/man3/FcPatternEqualSubset.3 +19 -0
  1371. data/vendor/local/share/man/man3/FcPatternFilter.3 +20 -0
  1372. data/vendor/local/share/man/man3/FcPatternFormat.3 +205 -0
  1373. data/vendor/local/share/man/man3/FcPatternGet-Type.3 +56 -0
  1374. data/vendor/local/share/man/man3/FcPatternGet.3 +22 -0
  1375. data/vendor/local/share/man/man3/FcPatternHash.3 +17 -0
  1376. data/vendor/local/share/man/man3/FcPatternPrint.3 +18 -0
  1377. data/vendor/local/share/man/man3/FcPatternReference.3 +17 -0
  1378. data/vendor/local/share/man/man3/FcPatternRemove.3 +19 -0
  1379. data/vendor/local/share/man/man3/FcStrBasename.3 +18 -0
  1380. data/vendor/local/share/man/man3/FcStrCmp.3 +18 -0
  1381. data/vendor/local/share/man/man3/FcStrCmpIgnoreCase.3 +19 -0
  1382. data/vendor/local/share/man/man3/FcStrCopy.3 +18 -0
  1383. data/vendor/local/share/man/man3/FcStrCopyFilename.3 +23 -0
  1384. data/vendor/local/share/man/man3/FcStrDirname.3 +18 -0
  1385. data/vendor/local/share/man/man3/FcStrDowncase.3 +17 -0
  1386. data/vendor/local/share/man/man3/FcStrFree.3 +17 -0
  1387. data/vendor/local/share/man/man3/FcStrListCreate.3 +16 -0
  1388. data/vendor/local/share/man/man3/FcStrListDone.3 +16 -0
  1389. data/vendor/local/share/man/man3/FcStrListNext.3 +16 -0
  1390. data/vendor/local/share/man/man3/FcStrPlus.3 +19 -0
  1391. data/vendor/local/share/man/man3/FcStrSetAdd.3 +17 -0
  1392. data/vendor/local/share/man/man3/FcStrSetAddFilename.3 +19 -0
  1393. data/vendor/local/share/man/man3/FcStrSetCreate.3 +16 -0
  1394. data/vendor/local/share/man/man3/FcStrSetDel.3 +18 -0
  1395. data/vendor/local/share/man/man3/FcStrSetDestroy.3 +16 -0
  1396. data/vendor/local/share/man/man3/FcStrSetEqual.3 +19 -0
  1397. data/vendor/local/share/man/man3/FcStrSetMember.3 +18 -0
  1398. data/vendor/local/share/man/man3/FcStrStr.3 +20 -0
  1399. data/vendor/local/share/man/man3/FcStrStrIgnoreCase.3 +20 -0
  1400. data/vendor/local/share/man/man3/FcToLower.3 +17 -0
  1401. data/vendor/local/share/man/man3/FcUcs4ToUtf8.3 +19 -0
  1402. data/vendor/local/share/man/man3/FcUtf16Len.3 +27 -0
  1403. data/vendor/local/share/man/man3/FcUtf16ToUcs4.3 +23 -0
  1404. data/vendor/local/share/man/man3/FcUtf8Len.3 +24 -0
  1405. data/vendor/local/share/man/man3/FcUtf8ToUcs4.3 +21 -0
  1406. data/vendor/local/share/man/man3/FcValueDestroy.3 +17 -0
  1407. data/vendor/local/share/man/man3/FcValueEqual.3 +19 -0
  1408. data/vendor/local/share/man/man3/FcValuePrint.3 +18 -0
  1409. data/vendor/local/share/man/man3/FcValueSave.3 +17 -0
  1410. data/vendor/local/share/man/man3/bind_textdomain_codeset.3 +72 -0
  1411. data/vendor/local/share/man/man3/bindtextdomain.3 +69 -0
  1412. data/vendor/local/share/man/man3/dcgettext.3 +1 -0
  1413. data/vendor/local/share/man/man3/dcngettext.3 +1 -0
  1414. data/vendor/local/share/man/man3/dgettext.3 +1 -0
  1415. data/vendor/local/share/man/man3/dngettext.3 +1 -0
  1416. data/vendor/local/share/man/man3/gettext.3 +99 -0
  1417. data/vendor/local/share/man/man3/libpng.3 +4455 -0
  1418. data/vendor/local/share/man/man3/libpngpf.3 +808 -0
  1419. data/vendor/local/share/man/man3/ngettext.3 +60 -0
  1420. data/vendor/local/share/man/man3/textdomain.3 +57 -0
  1421. data/vendor/local/share/man/man5/fonts-conf.5 +644 -0
  1422. data/vendor/local/share/man/man5/png.5 +74 -0
  1423. data/vendor/local/src/tml/packaging/cairo_1.10.0-1_win32.log +1262 -0
  1424. data/vendor/local/src/tml/packaging/cairo_1.10.0-1_win32.sh +76 -0
  1425. data/vendor/local/src/tml/packaging/expat_2.0.1-1_win32.log +188 -0
  1426. data/vendor/local/src/tml/packaging/expat_2.0.1-1_win32.sh +68 -0
  1427. data/vendor/local/src/tml/packaging/fontconfig_2.8.0-2_win32.log +999 -0
  1428. data/vendor/local/src/tml/packaging/fontconfig_2.8.0-2_win32.sh +79 -0
  1429. data/vendor/local/src/tml/packaging/freetype_2.4.2-1_win32.log +364 -0
  1430. data/vendor/local/src/tml/packaging/freetype_2.4.2-1_win32.sh +93 -0
  1431. data/vendor/local/src/tml/packaging/gettext_0.18.1.1-2_win32.log +10423 -0
  1432. data/vendor/local/src/tml/packaging/gettext_0.18.1.1-2_win32.sh +457 -0
  1433. data/vendor/local/src/tml/packaging/glib_2.24.2-2_win32.log +2602 -0
  1434. data/vendor/local/src/tml/packaging/glib_2.24.2-2_win32.sh +290 -0
  1435. data/vendor/local/src/tml/packaging/libpng_1.4.3-1_win32.log +272 -0
  1436. data/vendor/local/src/tml/packaging/libpng_1.4.3-1_win32.sh +71 -0
  1437. data/vendor/local/src/tml/packaging/pango_1.28.1-2_win32.log +1070 -0
  1438. data/vendor/local/src/tml/packaging/pango_1.28.1-2_win32.sh +579 -0
  1439. data/vendor/local/src/tml/packaging/zlib_1.2.5-2_win32.log +42 -0
  1440. data/vendor/local/src/tml/packaging/zlib_1.2.5-2_win32.sh +189 -0
  1441. metadata +1537 -0
@@ -0,0 +1 @@
1
+ .so man3/gettext.3
@@ -0,0 +1 @@
1
+ .so man3/ngettext.3
@@ -0,0 +1 @@
1
+ .so man3/gettext.3
@@ -0,0 +1 @@
1
+ .so man3/ngettext.3
@@ -0,0 +1,99 @@
1
+ .\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
2
+ .\"
3
+ .\" This is free documentation; you can redistribute it and/or
4
+ .\" modify it under the terms of the GNU General Public License as
5
+ .\" published by the Free Software Foundation; either version 2 of
6
+ .\" the License, or (at your option) any later version.
7
+ .\"
8
+ .\" References consulted:
9
+ .\" GNU glibc-2 source code and manual
10
+ .\" GNU gettext source code and manual
11
+ .\" LI18NUX 2000 Globalization Specification
12
+ .\"
13
+ .TH GETTEXT 3 "May 2001" "GNU gettext 0.18.1"
14
+ .SH NAME
15
+ gettext, dgettext, dcgettext \- translate message
16
+ .SH SYNOPSIS
17
+ .nf
18
+ .B #include <libintl.h>
19
+ .sp
20
+ .BI "char * gettext (const char * " msgid );
21
+ .BI "char * dgettext (const char * " domainname ", const char * " msgid );
22
+ .BI "char * dcgettext (const char * " domainname ", const char * " msgid ,
23
+ .BI " int " category );
24
+ .fi
25
+ .SH DESCRIPTION
26
+ The \fBgettext\fP, \fBdgettext\fP and \fBdcgettext\fP functions attempt to
27
+ translate a text string into the user's native language, by looking up the
28
+ translation in a message catalog.
29
+ .PP
30
+ The \fImsgid\fP argument identifies the message to be translated. By
31
+ convention, it is the English version of the message, with non-ASCII
32
+ characters replaced by ASCII approximations. This choice allows the
33
+ translators to work with message catalogs, called PO files, that contain
34
+ both the English and the translated versions of each message, and can be
35
+ installed using the \fBmsgfmt\fP utility.
36
+ .PP
37
+ A message domain is a set of translatable \fImsgid\fP messages. Usually,
38
+ every software package has its own message domain. The domain name is used
39
+ to determine the message catalog where the translation is looked up; it must
40
+ be a non-empty string. For the \fBgettext\fP function, it is specified through
41
+ a preceding \fBtextdomain\fP call. For the \fBdgettext\fP and \fBdcgettext\fP
42
+ functions, it is passed as the \fIdomainname\fP argument; if this argument is
43
+ NULL, the domain name specified through a preceding \fBtextdomain\fP call is
44
+ used instead.
45
+ .PP
46
+ Translation lookup operates in the context of the current locale. For the
47
+ \fBgettext\fP and \fBdgettext\fP functions, the \fBLC_MESSAGES\fP locale
48
+ facet is used. It is determined by a preceding call to the \fBsetlocale\fP
49
+ function. \fBsetlocale(LC_ALL,"")\fP initializes the \fBLC_MESSAGES\fP locale
50
+ based on the first nonempty value of the three environment variables
51
+ \fBLC_ALL\fP, \fBLC_MESSAGES\fP, \fBLANG\fP; see \fBsetlocale\fP(3). For the
52
+ \fBdcgettext\fP function, the locale facet is determined by the \fIcategory\fP
53
+ argument, which should be one of the \fBLC_xxx\fP constants defined in the
54
+ <locale.h> header, excluding \fBLC_ALL\fP. In both cases, the functions also
55
+ use the \fBLC_CTYPE\fP locale facet in order to convert the translated message
56
+ from the translator's codeset to the current locale's codeset, unless
57
+ overridden by a prior call to the \fBbind_textdomain_codeset\fP function.
58
+ .PP
59
+ The message catalog used by the functions is at the pathname
60
+ \fIdirname\fP/\fIlocale\fP/\fIcategory\fP/\fIdomainname\fP.mo. Here
61
+ \fIdirname\fP is the directory specified through \fBbindtextdomain\fP. Its
62
+ default is system and configuration dependent; typically it is
63
+ \fIprefix\fP/share/locale, where \fIprefix\fP is the installation prefix of the
64
+ package. \fIlocale\fP is the name of the current locale facet; the GNU
65
+ implementation also tries generalizations, such as the language name without
66
+ the territory name. \fIcategory\fP is \fBLC_MESSAGES\fP for the \fBgettext\fP
67
+ and \fBdgettext\fP functions, or the argument passed to the \fBdcgettext\fP
68
+ function.
69
+ .PP
70
+ If the \fBLANGUAGE\fP environment variable is set to a nonempty value, and the
71
+ locale is not the "C" locale, the value of \fBLANGUAGE\fP is assumed to contain
72
+ a colon separated list of locale names. The functions will attempt to look up
73
+ a translation of \fImsgid\fP in each of the locales in turn. This is a GNU
74
+ extension.
75
+ .PP
76
+ In the "C" locale, or if none of the used catalogs contain a translation for
77
+ \fImsgid\fP, the \fBgettext\fP, \fBdgettext\fP and \fBdcgettext\fP functions
78
+ return \fImsgid\fP.
79
+ .SH "RETURN VALUE"
80
+ If a translation was found in one of the specified catalogs, it is converted
81
+ to the locale's codeset and returned. The resulting string is statically
82
+ allocated and must not be modified or freed. Otherwise \fImsgid\fP is returned.
83
+ .SH ERRORS
84
+ \fBerrno\fP is not modified.
85
+ .SH BUGS
86
+ The return type ought to be \fBconst char *\fP, but is \fBchar *\fP to avoid
87
+ warnings in C code predating ANSI C.
88
+ .PP
89
+ When an empty string is used for \fImsgid\fP, the functions may return a
90
+ nonempty string.
91
+ .SH "SEE ALSO"
92
+ .BR ngettext (3),
93
+ .BR dngettext (3),
94
+ .BR dcngettext (3),
95
+ .BR setlocale (3),
96
+ .BR textdomain (3),
97
+ .BR bindtextdomain (3),
98
+ .BR bind_textdomain_codeset (3),
99
+ .BR msgfmt (1)
@@ -0,0 +1,4455 @@
1
+ .TH LIBPNG 3 "June 26, 2010"
2
+ .SH NAME
3
+ libpng \- Portable Network Graphics (PNG) Reference Library 1.4.3
4
+ .SH SYNOPSIS
5
+ \fI\fB
6
+
7
+ \fB#include <png.h>\fP
8
+
9
+ \fI\fB
10
+
11
+ \fBpng_uint_32 png_access_version_number \fI(void\fP\fB);\fP
12
+
13
+ \fI\fB
14
+
15
+ \fBvoid png_benign_error (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fIerror\fP\fB);\fP
16
+
17
+ \fI\fB
18
+
19
+ \fBvoid png_chunk_benign_error (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fIerror\fP\fB);\fP
20
+
21
+ \fI\fB
22
+
23
+ \fBvoid png_chunk_error (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fIerror\fP\fB);\fP
24
+
25
+ \fI\fB
26
+
27
+ \fBvoid png_chunk_warning (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fImessage\fP\fB);\fP
28
+
29
+ \fI\fB
30
+
31
+ \fBvoid png_convert_from_struct_tm (png_timep \fP\fIptime\fP\fB, struct tm FAR * \fIttime\fP\fB);\fP
32
+
33
+ \fI\fB
34
+
35
+ \fBvoid png_convert_from_time_t (png_timep \fP\fIptime\fP\fB, time_t \fIttime\fP\fB);\fP
36
+
37
+ \fI\fB
38
+
39
+ \fBpng_charp png_convert_to_rfc1123 (png_structp \fP\fIpng_ptr\fP\fB, png_timep \fIptime\fP\fB);\fP
40
+
41
+ \fI\fB
42
+
43
+ \fBpng_infop png_create_info_struct (png_structp \fIpng_ptr\fP\fB);\fP
44
+
45
+ \fI\fB
46
+
47
+ \fBpng_structp png_create_read_struct (png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fIwarn_fn\fP\fB);\fP
48
+
49
+ \fI\fB
50
+
51
+ \fBpng_structp png_create_read_struct_2(png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fP\fIwarn_fn\fP\fB, png_voidp \fP\fImem_ptr\fP\fB, png_malloc_ptr \fP\fImalloc_fn\fP\fB, png_free_ptr \fIfree_fn\fP\fB);\fP
52
+
53
+ \fI\fB
54
+
55
+ \fBpng_structp png_create_write_struct (png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fIwarn_fn\fP\fB);\fP
56
+
57
+ \fI\fB
58
+
59
+ \fBpng_structp png_create_write_struct_2(png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fP\fIwarn_fn\fP\fB, png_voidp \fP\fImem_ptr\fP\fB, png_malloc_ptr \fP\fImalloc_fn\fP\fB, png_free_ptr \fIfree_fn\fP\fB);\fP
60
+
61
+ \fI\fB
62
+
63
+ \fBvoid png_destroy_info_struct (png_structp \fP\fIpng_ptr\fP\fB, png_infopp \fIinfo_ptr_ptr\fP\fB);\fP
64
+
65
+ \fI\fB
66
+
67
+ \fBvoid png_destroy_read_struct (png_structpp \fP\fIpng_ptr_ptr\fP\fB, png_infopp \fP\fIinfo_ptr_ptr\fP\fB, png_infopp \fIend_info_ptr_ptr\fP\fB);\fP
68
+
69
+ \fI\fB
70
+
71
+ \fBvoid png_destroy_write_struct (png_structpp \fP\fIpng_ptr_ptr\fP\fB, png_infopp \fIinfo_ptr_ptr\fP\fB);\fP
72
+
73
+ \fI\fB
74
+
75
+ \fBvoid png_error (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fIerror\fP\fB);\fP
76
+
77
+ \fI\fB
78
+
79
+ \fBvoid png_free (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fIptr\fP\fB);\fP
80
+
81
+ \fI\fB
82
+
83
+ \fBvoid png_free_chunk_list (png_structp \fIpng_ptr\fP\fB);\fP
84
+
85
+ \fI\fB
86
+
87
+ \fBvoid png_free_default(png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fIptr\fP\fB);\fP
88
+
89
+ \fI\fB
90
+
91
+ \fBvoid png_free_data (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fInum\fP\fB);\fP
92
+
93
+ \fI\fB
94
+
95
+ \fBpng_byte png_get_bit_depth (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
96
+
97
+ \fI\fB
98
+
99
+ \fBpng_uint_32 png_get_bKGD (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_16p \fI*background\fP\fB);\fP
100
+
101
+ \fI\fB
102
+
103
+ \fBpng_byte png_get_channels (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
104
+
105
+ \fI\fB
106
+
107
+ \fBpng_uint_32 png_get_cHRM (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, double \fP\fI*white_x\fP\fB, double \fP\fI*white_y\fP\fB, double \fP\fI*red_x\fP\fB, double \fP\fI*red_y\fP\fB, double \fP\fI*green_x\fP\fB, double \fP\fI*green_y\fP\fB, double \fP\fI*blue_x\fP\fB, double \fI*blue_y\fP\fB);\fP
108
+
109
+ \fI\fB
110
+
111
+ \fBpng_uint_32 png_get_cHRM_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*white_x\fP\fB, png_uint_32 \fP\fI*white_y\fP\fB, png_uint_32 \fP\fI*red_x\fP\fB, png_uint_32 \fP\fI*red_y\fP\fB, png_uint_32 \fP\fI*green_x\fP\fB, png_uint_32 \fP\fI*green_y\fP\fB, png_uint_32 \fP\fI*blue_x\fP\fB, png_uint_32 \fI*blue_y\fP\fB);\fP
112
+
113
+ \fI\fB
114
+
115
+ \fBpng_uint_32 png_get_chunk_cache_max (png_structp \fIpng_ptr\fP\fB);\fP
116
+
117
+ \fI\fB
118
+
119
+ \fBpng_byte png_get_color_type (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
120
+
121
+ \fI\fB
122
+
123
+ \fBpng_uint_32 png_get_compression_buffer_size (png_structp \fIpng_ptr\fP\fB);\fP
124
+
125
+ \fI\fB
126
+
127
+ \fBpng_byte png_get_compression_type (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
128
+
129
+ \fI\fB
130
+
131
+ \fBpng_byte png_get_copyright (png_structp \fIpng_ptr\fP\fB);\fP
132
+
133
+ \fI\fB
134
+
135
+ \fBpng_voidp png_get_error_ptr (png_structp \fIpng_ptr\fP\fB);\fP
136
+
137
+ \fI\fB
138
+
139
+ \fBpng_byte png_get_filter_type (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
140
+
141
+ \fI\fB
142
+
143
+ \fBpng_uint_32 png_get_gAMA (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, double \fI*file_gamma\fP\fB);\fP
144
+
145
+ \fI\fB
146
+
147
+ \fBpng_uint_32 png_get_gAMA_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fI*int_file_gamma\fP\fB);\fP
148
+
149
+ \fI\fB
150
+
151
+ \fBpng_byte png_get_header_ver (png_structp \fIpng_ptr\fP\fB);\fP
152
+
153
+ \fI\fB
154
+
155
+ \fBpng_byte png_get_header_version (png_structp \fIpng_ptr\fP\fB);\fP
156
+
157
+ \fI\fB
158
+
159
+ \fBpng_uint_32 png_get_hIST (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_16p \fI*hist\fP\fB);\fP
160
+
161
+ \fI\fB
162
+
163
+ \fBpng_uint_32 png_get_iCCP (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charpp \fP\fIname\fP\fB, int \fP\fI*compression_type\fP\fB, png_charpp \fP\fIprofile\fP\fB, png_uint_32 \fI*proflen\fP\fB);\fP
164
+
165
+ \fI\fB
166
+
167
+ \fBpng_uint_32 png_get_IHDR (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*width\fP\fB, png_uint_32 \fP\fI*height\fP\fB, int \fP\fI*bit_depth\fP\fB, int \fP\fI*color_type\fP\fB, int \fP\fI*interlace_type\fP\fB, int \fP\fI*compression_type\fP\fB, int \fI*filter_type\fP\fB);\fP
168
+
169
+ \fI\fB
170
+
171
+ \fBpng_uint_32 png_get_image_height (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
172
+
173
+ \fI\fB
174
+
175
+ \fBpng_uint_32 png_get_image_width (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
176
+
177
+ \fI\fB
178
+
179
+ \fBpng_int_32 png_get_int_32 (png_bytep \fIbuf\fP\fB);\fP
180
+
181
+ \fI\fB
182
+
183
+ \fBpng_byte png_get_interlace_type (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
184
+
185
+ \fI\fB
186
+
187
+ \fBpng_voidp png_get_io_ptr (png_structp \fIpng_ptr\fP\fB);\fP
188
+
189
+ \fI\fB
190
+
191
+ \fBpng_byte png_get_libpng_ver (png_structp \fIpng_ptr\fP\fB);\fP
192
+
193
+ \fI\fB
194
+
195
+ \fBpng_alloc_size_t png_get_chunk_malloc_max (png_structp \fIpng_ptr\fP\fB);\fP
196
+
197
+ \fI\fB
198
+
199
+ \fBpng_voidp png_get_mem_ptr(png_structp \fIpng_ptr\fP\fB);\fP
200
+
201
+ \fI\fB
202
+
203
+ \fBpng_uint_32 png_get_oFFs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*offset_x\fP\fB, png_uint_32 \fP\fI*offset_y\fP\fB, int \fI*unit_type\fP\fB);\fP
204
+
205
+ \fI\fB
206
+
207
+ \fBpng_uint_32 png_get_pCAL (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charp \fP\fI*purpose\fP\fB, png_int_32 \fP\fI*X0\fP\fB, png_int_32 \fP\fI*X1\fP\fB, int \fP\fI*type\fP\fB, int \fP\fI*nparams\fP\fB, png_charp \fP\fI*units\fP\fB, png_charpp \fI*params\fP\fB);\fP
208
+
209
+ \fI\fB
210
+
211
+ \fBpng_uint_32 png_get_pHYs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*res_x\fP\fB, png_uint_32 \fP\fI*res_y\fP\fB, int \fI*unit_type\fP\fB);\fP
212
+
213
+ \fI\fB
214
+
215
+ \fBfloat png_get_pixel_aspect_ratio (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
216
+
217
+ \fI\fB
218
+
219
+ \fBpng_uint_32 png_get_pixels_per_meter (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
220
+
221
+ \fI\fB
222
+
223
+ \fBpng_voidp png_get_progressive_ptr (png_structp \fIpng_ptr\fP\fB);\fP
224
+
225
+ \fI\fB
226
+
227
+ \fBpng_uint_32 png_get_PLTE (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_colorp \fP\fI*palette\fP\fB, int \fI*num_palette\fP\fB);\fP
228
+
229
+ \fI\fB
230
+
231
+ \fBpng_byte png_get_rgb_to_gray_status (png_structp \fIpng_ptr)
232
+
233
+ \fBpng_uint_32 png_get_rowbytes (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
234
+
235
+ \fI\fB
236
+
237
+ \fBpng_bytepp png_get_rows (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
238
+
239
+ \fI\fB
240
+
241
+ \fBpng_uint_32 png_get_sBIT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_8p \fI*sig_bit\fP\fB);\fP
242
+
243
+ \fI\fB
244
+
245
+ \fBpng_bytep png_get_signature (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
246
+
247
+ \fI\fB
248
+
249
+ \fBpng_uint_32 png_get_sPLT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_spalette_p \fI*splt_ptr\fP\fB);\fP
250
+
251
+ \fI\fB
252
+
253
+ \fBpng_uint_32 png_get_sRGB (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fI*intent\fP\fB);\fP
254
+
255
+ \fI\fB
256
+
257
+ \fBpng_uint_32 png_get_text (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_textp \fP\fI*text_ptr\fP\fB, int \fI*num_text\fP\fB);\fP
258
+
259
+ \fI\fB
260
+
261
+ \fBpng_uint_32 png_get_tIME (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_timep \fI*mod_time\fP\fB);\fP
262
+
263
+ \fI\fB
264
+
265
+ \fBpng_uint_32 png_get_tRNS (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytep \fP\fI*trans\fP\fB, int \fP\fI*num_trans\fP\fB, png_color_16p \fI*trans_color\fP\fB);\fP
266
+
267
+ \fI\fB
268
+
269
+ \fB/* This function is really an inline macro. \fI*/
270
+
271
+ \fBpng_uint_16 png_get_uint_16 (png_bytep \fIbuf\fP\fB);\fP
272
+
273
+ \fI\fB
274
+
275
+ \fBpng_uint_32 png_get_uint_31 (png_bytep \fIbuf\fP\fB);\fP
276
+
277
+ \fI\fB
278
+
279
+ \fB/* This function is really an inline macro. \fI*/
280
+
281
+ \fBpng_uint_32 png_get_uint_32 (png_bytep \fIbuf\fP\fB);\fP
282
+
283
+ \fI\fB
284
+
285
+ \fBpng_uint_32 png_get_unknown_chunks (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_unknown_chunkpp \fIunknowns\fP\fB);\fP
286
+
287
+ \fI\fB
288
+
289
+ \fBpng_voidp png_get_user_chunk_ptr (png_structp \fIpng_ptr\fP\fB);\fP
290
+
291
+ \fI\fB
292
+
293
+ \fBpng_uint_32 png_get_user_height_max( png_structp \fIpng_ptr\fP\fB);\fP
294
+
295
+ \fI\fB
296
+
297
+ \fBpng_voidp png_get_user_transform_ptr (png_structp \fIpng_ptr\fP\fB);\fP
298
+
299
+ \fI\fB
300
+
301
+ \fBpng_uint_32 png_get_user_width_max (png_structp \fIpng_ptr\fP\fB);\fP
302
+
303
+ \fI\fB
304
+
305
+ \fBpng_uint_32 png_get_valid (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIflag\fP\fB);\fP
306
+
307
+ \fI\fB
308
+
309
+ \fBpng_int_32 png_get_x_offset_microns (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
310
+
311
+ \fI\fB
312
+
313
+ \fBpng_int_32 png_get_x_offset_pixels (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
314
+
315
+ \fI\fB
316
+
317
+ \fBpng_uint_32 png_get_x_pixels_per_meter (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
318
+
319
+ \fI\fB
320
+
321
+ \fBpng_int_32 png_get_y_offset_microns (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
322
+
323
+ \fI\fB
324
+
325
+ \fBpng_int_32 png_get_y_offset_pixels (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
326
+
327
+ \fI\fB
328
+
329
+ \fBpng_uint_32 png_get_y_pixels_per_meter (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
330
+
331
+ \fI\fB
332
+
333
+ \fBint png_handle_as_unknown (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fIchunk_name\fP\fB);\fP
334
+
335
+ \fI\fB
336
+
337
+ \fBvoid png_init_io (png_structp \fP\fIpng_ptr\fP\fB, FILE \fI*fp\fP\fB);\fP
338
+
339
+ \fI\fB
340
+
341
+ \fBpng_voidp png_malloc (png_structp \fP\fIpng_ptr\fP\fB, png_alloc_size_t \fIsize\fP\fB);\fP
342
+
343
+ \fI\fB
344
+
345
+ \fBpng_voidp png_malloc_default(png_structp \fP\fIpng_ptr\fP\fB, png_alloc_size_t \fIsize\fP\fB);\fP
346
+
347
+ \fI\fB
348
+
349
+ \fBvoidp png_memcpy (png_voidp \fP\fIs1\fP\fB, png_voidp \fP\fIs2\fP\fB, png_size_t \fIsize\fP\fB);\fP
350
+
351
+ \fI\fB
352
+
353
+ \fBvoidp png_memset (png_voidp \fP\fIs1\fP\fB, int \fP\fIvalue\fP\fB, png_size_t \fIsize\fP\fB);\fP
354
+
355
+ \fI\fB
356
+
357
+ \fBvoid png_process_data (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytep \fP\fIbuffer\fP\fB, png_size_t \fIbuffer_size\fP\fB);\fP
358
+
359
+ \fI\fB
360
+
361
+ \fBvoid png_progressive_combine_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIold_row\fP\fB, png_bytep \fInew_row\fP\fB);\fP
362
+
363
+ \fI\fB
364
+
365
+ \fBvoid png_read_end (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
366
+
367
+ \fI\fB
368
+
369
+ \fBvoid png_read_image (png_structp \fP\fIpng_ptr\fP\fB, png_bytepp \fIimage\fP\fB);\fP
370
+
371
+ \fI\fB
372
+
373
+ \fBvoid png_read_info (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
374
+
375
+ \fI\fB
376
+
377
+ \fBvoid png_read_png (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fItransforms\fP\fB, png_voidp \fIparams\fP\fB);\fP
378
+
379
+ \fI\fB
380
+
381
+ \fBvoid png_read_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIrow\fP\fB, png_bytep \fIdisplay_row\fP\fB);\fP
382
+
383
+ \fI\fB
384
+
385
+ \fBvoid png_read_rows (png_structp \fP\fIpng_ptr\fP\fB, png_bytepp \fP\fIrow\fP\fB, png_bytepp \fP\fIdisplay_row\fP\fB, png_uint_32 \fInum_rows\fP\fB);\fP
386
+
387
+ \fI\fB
388
+
389
+ \fBvoid png_read_update_info (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
390
+
391
+ \fI\fB
392
+
393
+ \fBpng_save_int_32 (png_bytep \fP\fIbuf\fP\fB, png_int_32 \fIi\fP\fB);\fP
394
+
395
+ \fI\fB
396
+
397
+ \fBvoid png_save_uint_16 (png_bytep \fP\fIbuf\fP\fB, unsigned int \fIi\fP\fB);\fP
398
+
399
+ \fI\fB
400
+
401
+ \fBvoid png_save_uint_32 (png_bytep \fP\fIbuf\fP\fB, png_uint_32 \fIi\fP\fB);\fP
402
+
403
+ \fI\fB
404
+
405
+ \fBvoid png_set_add_alpha (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIfiller\fP\fB, int \fIflags\fP\fB);\fP
406
+
407
+ \fI\fB
408
+
409
+ \fBvoid png_set_background (png_structp \fP\fIpng_ptr\fP\fB, png_color_16p \fP\fIbackground_color\fP\fB, int \fP\fIbackground_gamma_code\fP\fB, int \fP\fIneed_expand\fP\fB, double \fIbackground_gamma\fP\fB);\fP
410
+
411
+ \fI\fB
412
+
413
+ \fBvoid png_set_bgr (png_structp \fIpng_ptr\fP\fB);\fP
414
+
415
+ \fI\fB
416
+
417
+ \fBvoid png_set_bKGD (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_16p \fIbackground\fP\fB);\fP
418
+
419
+ \fI\fB
420
+
421
+ \fBvoid png_set_cHRM (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, double \fP\fIwhite_x\fP\fB, double \fP\fIwhite_y\fP\fB, double \fP\fIred_x\fP\fB, double \fP\fIred_y\fP\fB, double \fP\fIgreen_x\fP\fB, double \fP\fIgreen_y\fP\fB, double \fP\fIblue_x\fP\fB, double \fIblue_y\fP\fB);\fP
422
+
423
+ \fI\fB
424
+
425
+ \fBvoid png_set_cHRM_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fIwhite_x\fP\fB, png_uint_32 \fP\fIwhite_y\fP\fB, png_uint_32 \fP\fIred_x\fP\fB, png_uint_32 \fP\fIred_y\fP\fB, png_uint_32 \fP\fIgreen_x\fP\fB, png_uint_32 \fP\fIgreen_y\fP\fB, png_uint_32 \fP\fIblue_x\fP\fB, png_uint_32 \fIblue_y\fP\fB);\fP
426
+
427
+ \fI\fB
428
+
429
+ \fBvoid png_set_chunk_cache_max (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fIuser_chunk_cache_max\fP\fB);\fP
430
+
431
+ \fI\fB
432
+
433
+ \fBvoid png_set_compression_level (png_structp \fP\fIpng_ptr\fP\fB, int \fIlevel\fP\fB);\fP
434
+
435
+ \fI\fB
436
+
437
+ \fBvoid png_set_compression_mem_level (png_structp \fP\fIpng_ptr\fP\fB, int \fImem_level\fP\fB);\fP
438
+
439
+ \fI\fB
440
+
441
+ \fBvoid png_set_compression_method (png_structp \fP\fIpng_ptr\fP\fB, int \fImethod\fP\fB);\fP
442
+
443
+ \fI\fB
444
+
445
+ \fBvoid png_set_compression_strategy (png_structp \fP\fIpng_ptr\fP\fB, int \fIstrategy\fP\fB);\fP
446
+
447
+ \fI\fB
448
+
449
+ \fBvoid png_set_compression_window_bits (png_structp \fP\fIpng_ptr\fP\fB, int \fIwindow_bits\fP\fB);\fP
450
+
451
+ \fI\fB
452
+
453
+ \fBvoid png_set_crc_action (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIcrit_action\fP\fB, int \fIancil_action\fP\fB);\fP
454
+
455
+ \fI\fB
456
+
457
+ \fBvoid png_set_error_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fIwarning_fn\fP\fB);\fP
458
+
459
+ \fI\fB
460
+
461
+ \fBvoid png_set_expand (png_structp \fIpng_ptr\fP\fB);\fP
462
+
463
+ \fI\fB
464
+
465
+ \fBvoid png_set_expand_gray_1_2_4_to_8(png_structp \fIpng_ptr\fP\fB);\fP
466
+
467
+ \fI\fB
468
+
469
+ \fBvoid png_set_filler (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIfiller\fP\fB, int \fIflags\fP\fB);\fP
470
+
471
+ \fI\fB
472
+
473
+ \fBvoid png_set_filter (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fImethod\fP\fB, int \fIfilters\fP\fB);\fP
474
+
475
+ \fI\fB
476
+
477
+ \fBvoid png_set_filter_heuristics (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIheuristic_method\fP\fB, int \fP\fInum_weights\fP\fB, png_doublep \fP\fIfilter_weights\fP\fB, png_doublep \fIfilter_costs\fP\fB);\fP
478
+
479
+ \fI\fB
480
+
481
+ \fBvoid png_set_flush (png_structp \fP\fIpng_ptr\fP\fB, int \fInrows\fP\fB);\fP
482
+
483
+ \fI\fB
484
+
485
+ \fBvoid png_set_gamma (png_structp \fP\fIpng_ptr\fP\fB, double \fP\fIscreen_gamma\fP\fB, double \fIdefault_file_gamma\fP\fB);\fP
486
+
487
+ \fI\fB
488
+
489
+ \fBvoid png_set_gAMA (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, double \fIfile_gamma\fP\fB);\fP
490
+
491
+ \fI\fB
492
+
493
+ \fBvoid png_set_gAMA_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIfile_gamma\fP\fB);\fP
494
+
495
+ \fI\fB
496
+
497
+ \fBvoid png_set_gray_1_2_4_to_8(png_structp \fIpng_ptr\fP\fB);\fP
498
+
499
+ \fI\fB
500
+
501
+ \fBvoid png_set_gray_to_rgb (png_structp \fIpng_ptr\fP\fB);\fP
502
+
503
+ \fI\fB
504
+
505
+ \fBvoid png_set_hIST (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_16p \fIhist\fP\fB);\fP
506
+
507
+ \fI\fB
508
+
509
+ \fBvoid png_set_iCCP (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charp \fP\fIname\fP\fB, int \fP\fIcompression_type\fP\fB, png_charp \fP\fIprofile\fP\fB, png_uint_32 \fIproflen\fP\fB);\fP
510
+
511
+ \fI\fB
512
+
513
+ \fBint png_set_interlace_handling (png_structp \fIpng_ptr\fP\fB);\fP
514
+
515
+ \fI\fB
516
+
517
+ \fBvoid png_set_invalid (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fImask\fP\fB);\fP
518
+
519
+ \fI\fB
520
+
521
+ \fBvoid png_set_invert_alpha (png_structp \fIpng_ptr\fP\fB);\fP
522
+
523
+ \fI\fB
524
+
525
+ \fBvoid png_set_invert_mono (png_structp \fIpng_ptr\fP\fB);\fP
526
+
527
+ \fI\fB
528
+
529
+ \fBvoid png_set_IHDR (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fIwidth\fP\fB, png_uint_32 \fP\fIheight\fP\fB, int \fP\fIbit_depth\fP\fB, int \fP\fIcolor_type\fP\fB, int \fP\fIinterlace_type\fP\fB, int \fP\fIcompression_type\fP\fB, int \fIfilter_type\fP\fB);\fP
530
+
531
+ \fI\fB
532
+
533
+ \fBvoid png_set_keep_unknown_chunks (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIkeep\fP\fB, png_bytep \fP\fIchunk_list\fP\fB, int \fInum_chunks\fP\fB);\fP
534
+
535
+ \fI\fB
536
+
537
+ \fBjmp_buf* png_set_longjmp_fn (png_structp \fP\fIpng_ptr\fP\fB, png_longjmp_ptr \fP\fIlongjmp_fn\fP\fB, size_t \fIjmp_buf_size\fP\fB);\fP
538
+
539
+ \fI\fB
540
+
541
+ \fBvoid png_set_chunk_malloc_max (png_structp \fP\fIpng_ptr\fP\fB, png_alloc_size_t \fIuser_chunk_cache_max\fP\fB);\fP
542
+
543
+ \fI\fB
544
+
545
+ \fBvoid png_set_mem_fn(png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fImem_ptr\fP\fB, png_malloc_ptr \fP\fImalloc_fn\fP\fB, png_free_ptr \fIfree_fn\fP\fB);\fP
546
+
547
+ \fI\fB
548
+
549
+ \fBvoid png_set_oFFs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fIoffset_x\fP\fB, png_uint_32 \fP\fIoffset_y\fP\fB, int \fIunit_type\fP\fB);\fP
550
+
551
+ \fI\fB
552
+
553
+ \fBvoid png_set_packing (png_structp \fIpng_ptr\fP\fB);\fP
554
+
555
+ \fI\fB
556
+
557
+ \fBvoid png_set_packswap (png_structp \fIpng_ptr\fP\fB);\fP
558
+
559
+ \fI\fB
560
+
561
+ \fBvoid png_set_palette_to_rgb(png_structp \fIpng_ptr\fP\fB);\fP
562
+
563
+ \fI\fB
564
+
565
+ \fBvoid png_set_pCAL (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charp \fP\fIpurpose\fP\fB, png_int_32 \fP\fIX0\fP\fB, png_int_32 \fP\fIX1\fP\fB, int \fP\fItype\fP\fB, int \fP\fInparams\fP\fB, png_charp \fP\fIunits\fP\fB, png_charpp \fIparams\fP\fB);\fP
566
+
567
+ \fI\fB
568
+
569
+ \fBvoid png_set_pHYs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fIres_x\fP\fB, png_uint_32 \fP\fIres_y\fP\fB, int \fIunit_type\fP\fB);\fP
570
+
571
+ \fI\fB
572
+
573
+ \fBvoid png_set_progressive_read_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIprogressive_ptr\fP\fB, png_progressive_info_ptr \fP\fIinfo_fn\fP\fB, png_progressive_row_ptr \fP\fIrow_fn\fP\fB, png_progressive_end_ptr \fIend_fn\fP\fB);\fP
574
+
575
+ \fI\fB
576
+
577
+ \fBvoid png_set_PLTE (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_colorp \fP\fIpalette\fP\fB, int \fInum_palette\fP\fB);\fP
578
+
579
+ \fI\fB
580
+
581
+ \fBvoid png_set_quantize (png_structp \fP\fIpng_ptr\fP\fB, png_colorp \fP\fIpalette\fP\fB, int \fP\fInum_palette\fP\fB, int \fP\fImaximum_colors\fP\fB, png_uint_16p \fP\fIhistogram\fP\fB, int \fIfull_quantize\fP\fB);\fP
582
+
583
+ \fI\fB
584
+
585
+ \fBvoid png_set_read_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIio_ptr\fP\fB, png_rw_ptr \fIread_data_fn\fP\fB);\fP
586
+
587
+ \fI\fB
588
+
589
+ \fBvoid png_set_read_status_fn (png_structp \fP\fIpng_ptr\fP\fB, png_read_status_ptr \fIread_row_fn\fP\fB);\fP
590
+
591
+ \fI\fB
592
+
593
+ \fBvoid png_set_read_user_transform_fn (png_structp \fP\fIpng_ptr\fP\fB, png_user_transform_ptr \fIread_user_transform_fn\fP\fB);\fP
594
+
595
+ \fI\fB
596
+
597
+ \fBvoid png_set_rgb_to_gray (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIerror_action\fP\fB, double \fP\fIred\fP\fB, double \fIgreen\fP\fB);\fP
598
+
599
+ \fI\fB
600
+
601
+ \fBvoid png_set_rgb_to_gray_fixed (png_structp \fP\fIpng_ptr\fP\fB, int error_action png_fixed_point \fP\fIred\fP\fB, png_fixed_point \fIgreen\fP\fB);\fP
602
+
603
+ \fI\fB
604
+
605
+ \fBvoid png_set_rows (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytepp \fIrow_pointers\fP\fB);\fP
606
+
607
+ \fI\fB
608
+
609
+ \fBvoid png_set_sBIT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_8p \fIsig_bit\fP\fB);\fP
610
+
611
+ \fI\fB
612
+
613
+ \fBvoid png_set_sCAL (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charp \fP\fIunit\fP\fB, double \fP\fIwidth\fP\fB, double \fIheight\fP\fB);\fP
614
+
615
+ \fI\fB
616
+
617
+ \fBvoid png_set_shift (png_structp \fP\fIpng_ptr\fP\fB, png_color_8p \fItrue_bits\fP\fB);\fP
618
+
619
+ \fI\fB
620
+
621
+ \fBvoid png_set_sig_bytes (png_structp \fP\fIpng_ptr\fP\fB, int \fInum_bytes\fP\fB);\fP
622
+
623
+ \fI\fB
624
+
625
+ \fBvoid png_set_sPLT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_spalette_p \fP\fIsplt_ptr\fP\fB, int \fInum_spalettes\fP\fB);\fP
626
+
627
+ \fI\fB
628
+
629
+ \fBvoid png_set_sRGB (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fIintent\fP\fB);\fP
630
+
631
+ \fI\fB
632
+
633
+ \fBvoid png_set_sRGB_gAMA_and_cHRM (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fIintent\fP\fB);\fP
634
+
635
+ \fI\fB
636
+
637
+ \fBvoid png_set_strip_16 (png_structp \fIpng_ptr\fP\fB);\fP
638
+
639
+ \fI\fB
640
+
641
+ \fBvoid png_set_strip_alpha (png_structp \fIpng_ptr\fP\fB);\fP
642
+
643
+ \fI\fB
644
+
645
+ \fBvoid png_set_swap (png_structp \fIpng_ptr\fP\fB);\fP
646
+
647
+ \fI\fB
648
+
649
+ \fBvoid png_set_swap_alpha (png_structp \fIpng_ptr\fP\fB);\fP
650
+
651
+ \fI\fB
652
+
653
+ \fBvoid png_set_text (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_textp \fP\fItext_ptr\fP\fB, int \fInum_text\fP\fB);\fP
654
+
655
+ \fI\fB
656
+
657
+ \fBvoid png_set_tIME (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_timep \fImod_time\fP\fB);\fP
658
+
659
+ \fI\fB
660
+
661
+ \fBvoid png_set_tRNS (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytep \fP\fItrans\fP\fB, int \fP\fInum_trans\fP\fB, png_color_16p \fItrans_color\fP\fB);\fP
662
+
663
+ \fI\fB
664
+
665
+ \fBvoid png_set_tRNS_to_alpha(png_structp \fIpng_ptr\fP\fB);\fP
666
+
667
+ \fI\fB
668
+
669
+ \fBpng_uint_32 png_set_unknown_chunks (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_unknown_chunkp \fP\fIunknowns\fP\fB, int \fP\fInum\fP\fB, int \fIlocation\fP\fB);\fP
670
+
671
+ \fI\fB
672
+
673
+ \fBvoid png_set_unknown_chunk_location(png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fIchunk\fP\fB, int \fIlocation\fP\fB);\fP
674
+
675
+ \fI\fB
676
+
677
+ \fBvoid png_set_read_user_chunk_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIuser_chunk_ptr\fP\fB, png_user_chunk_ptr \fIread_user_chunk_fn\fP\fB);\fP
678
+
679
+ \fI\fB
680
+
681
+ \fBvoid png_set_user_limits (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIuser_width_max\fP\fB, png_uint_32 \fIuser_height_max\fP\fB);\fP
682
+
683
+ \fI\fB
684
+
685
+ \fBvoid png_set_user_transform_info (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIuser_transform_ptr\fP\fB, int \fP\fIuser_transform_depth\fP\fB, int \fIuser_transform_channels\fP\fB);\fP
686
+
687
+ \fI\fB
688
+
689
+ \fBvoid png_set_write_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIio_ptr\fP\fB, png_rw_ptr \fP\fIwrite_data_fn\fP\fB, png_flush_ptr \fIoutput_flush_fn\fP\fB);\fP
690
+
691
+ \fI\fB
692
+
693
+ \fBvoid png_set_write_status_fn (png_structp \fP\fIpng_ptr\fP\fB, png_write_status_ptr \fIwrite_row_fn\fP\fB);\fP
694
+
695
+ \fI\fB
696
+
697
+ \fBvoid png_set_write_user_transform_fn (png_structp \fP\fIpng_ptr\fP\fB, png_user_transform_ptr \fIwrite_user_transform_fn\fP\fB);\fP
698
+
699
+ \fI\fB
700
+
701
+ \fBvoid png_set_compression_buffer_size(png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fIsize\fP\fB);\fP
702
+
703
+ \fI\fB
704
+
705
+ \fBint png_sig_cmp (png_bytep \fP\fIsig\fP\fB, png_size_t \fP\fIstart\fP\fB, png_size_t \fInum_to_check\fP\fB);\fP
706
+
707
+ \fI\fB
708
+
709
+ \fBvoid png_start_read_image (png_structp \fIpng_ptr\fP\fB);\fP
710
+
711
+ \fI\fB
712
+
713
+ \fBvoid png_warning (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fImessage\fP\fB);\fP
714
+
715
+ \fI\fB
716
+
717
+ \fBvoid png_write_chunk (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIchunk_name\fP\fB, png_bytep \fP\fIdata\fP\fB, png_size_t \fIlength\fP\fB);\fP
718
+
719
+ \fI\fB
720
+
721
+ \fBvoid png_write_chunk_data (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIdata\fP\fB, png_size_t \fIlength\fP\fB);\fP
722
+
723
+ \fI\fB
724
+
725
+ \fBvoid png_write_chunk_end (png_structp \fIpng_ptr\fP\fB);\fP
726
+
727
+ \fI\fB
728
+
729
+ \fBvoid png_write_chunk_start (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIchunk_name\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
730
+
731
+ \fI\fB
732
+
733
+ \fBvoid png_write_end (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
734
+
735
+ \fI\fB
736
+
737
+ \fBvoid png_write_flush (png_structp \fIpng_ptr\fP\fB);\fP
738
+
739
+ \fI\fB
740
+
741
+ \fBvoid png_write_image (png_structp \fP\fIpng_ptr\fP\fB, png_bytepp \fIimage\fP\fB);\fP
742
+
743
+ \fI\fB
744
+
745
+ \fBvoid png_write_info (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
746
+
747
+ \fI\fB
748
+
749
+ \fBvoid png_write_info_before_PLTE (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
750
+
751
+ \fI\fB
752
+
753
+ \fBvoid png_write_png (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fItransforms\fP\fB, png_voidp \fIparams\fP\fB);\fP
754
+
755
+ \fI\fB
756
+
757
+ \fBvoid png_write_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fIrow\fP\fB);\fP
758
+
759
+ \fI\fB
760
+
761
+ \fBvoid png_write_rows (png_structp \fP\fIpng_ptr\fP\fB, png_bytepp \fP\fIrow\fP\fB, png_uint_32 \fInum_rows\fP\fB);\fP
762
+
763
+ \fI\fB
764
+
765
+ \fBvoid png_write_sig (png_structp \fIpng_ptr\fP\fB);\fP
766
+
767
+ \fI\fB
768
+
769
+ \fBvoidpf png_zalloc (voidpf \fP\fIpng_ptr\fP\fB, uInt \fP\fIitems\fP\fB, uInt \fIsize\fP\fB);\fP
770
+
771
+ \fI\fB
772
+
773
+ \fBvoid png_zfree (voidpf \fP\fIpng_ptr\fP\fB, voidpf \fIptr\fP\fB);\fP
774
+
775
+ \fI\fB
776
+
777
+ .SH DESCRIPTION
778
+ The
779
+ .I libpng
780
+ library supports encoding, decoding, and various manipulations of
781
+ the Portable Network Graphics (PNG) format image files. It uses the
782
+ .IR zlib(3)
783
+ compression library.
784
+ Following is a copy of the libpng.txt file that accompanies libpng.
785
+ .SH LIBPNG.TXT
786
+ libpng.txt - A description on how to use and modify libpng
787
+
788
+ libpng version 1.4.3 - June 26, 2010
789
+ Updated and distributed by Glenn Randers-Pehrson
790
+ <glennrp at users.sourceforge.net>
791
+ Copyright (c) 1998-2009 Glenn Randers-Pehrson
792
+
793
+ This document is released under the libpng license.
794
+ For conditions of distribution and use, see the disclaimer
795
+ and license in png.h
796
+
797
+ Based on:
798
+
799
+ libpng versions 0.97, January 1998, through 1.4.3 - June 26, 2010
800
+ Updated and distributed by Glenn Randers-Pehrson
801
+ Copyright (c) 1998-2009 Glenn Randers-Pehrson
802
+
803
+ libpng 1.0 beta 6 version 0.96 May 28, 1997
804
+ Updated and distributed by Andreas Dilger
805
+ Copyright (c) 1996, 1997 Andreas Dilger
806
+
807
+ libpng 1.0 beta 2 - version 0.88 January 26, 1996
808
+ For conditions of distribution and use, see copyright
809
+ notice in png.h. Copyright (c) 1995, 1996 Guy Eric
810
+ Schalnat, Group 42, Inc.
811
+
812
+ Updated/rewritten per request in the libpng FAQ
813
+ Copyright (c) 1995, 1996 Frank J. T. Wojcik
814
+ December 18, 1995 & January 20, 1996
815
+
816
+ .SH I. Introduction
817
+
818
+ This file describes how to use and modify the PNG reference library
819
+ (known as libpng) for your own use. There are five sections to this
820
+ file: introduction, structures, reading, writing, and modification and
821
+ configuration notes for various special platforms. In addition to this
822
+ file, example.c is a good starting point for using the library, as
823
+ it is heavily commented and should include everything most people
824
+ will need. We assume that libpng is already installed; see the
825
+ INSTALL file for instructions on how to install libpng.
826
+
827
+ For examples of libpng usage, see the files "example.c", "pngtest.c",
828
+ and the files in the "contrib" directory, all of which are included in
829
+ the libpng distribution.
830
+
831
+ Libpng was written as a companion to the PNG specification, as a way
832
+ of reducing the amount of time and effort it takes to support the PNG
833
+ file format in application programs.
834
+
835
+ The PNG specification (second edition), November 2003, is available as
836
+ a W3C Recommendation and as an ISO Standard (ISO/IEC 15948:2003 (E)) at
837
+ <http://www.w3.org/TR/2003/REC-PNG-20031110/
838
+ The W3C and ISO documents have identical technical content.
839
+
840
+ The PNG-1.2 specification is available at
841
+ <http://www.libpng.org/pub/png/documents/>. It is technically equivalent
842
+ to the PNG specification (second edition) but has some additional material.
843
+
844
+ The PNG-1.0 specification is available
845
+ as RFC 2083 <http://www.libpng.org/pub/png/documents/> and as a
846
+ W3C Recommendation <http://www.w3.org/TR/REC.png.html>.
847
+
848
+ Some additional chunks are described in the special-purpose public chunks
849
+ documents at <http://www.libpng.org/pub/png/documents/>.
850
+
851
+ Other information
852
+ about PNG, and the latest version of libpng, can be found at the PNG home
853
+ page, <http://www.libpng.org/pub/png/>.
854
+
855
+ Most users will not have to modify the library significantly; advanced
856
+ users may want to modify it more. All attempts were made to make it as
857
+ complete as possible, while keeping the code easy to understand.
858
+ Currently, this library only supports C. Support for other languages
859
+ is being considered.
860
+
861
+ Libpng has been designed to handle multiple sessions at one time,
862
+ to be easily modifiable, to be portable to the vast majority of
863
+ machines (ANSI, K&R, 16-, 32-, and 64-bit) available, and to be easy
864
+ to use. The ultimate goal of libpng is to promote the acceptance of
865
+ the PNG file format in whatever way possible. While there is still
866
+ work to be done (see the TODO file), libpng should cover the
867
+ majority of the needs of its users.
868
+
869
+ Libpng uses zlib for its compression and decompression of PNG files.
870
+ Further information about zlib, and the latest version of zlib, can
871
+ be found at the zlib home page, <http://www.info-zip.org/pub/infozip/zlib/>.
872
+ The zlib compression utility is a general purpose utility that is
873
+ useful for more than PNG files, and can be used without libpng.
874
+ See the documentation delivered with zlib for more details.
875
+ You can usually find the source files for the zlib utility wherever you
876
+ find the libpng source files.
877
+
878
+ Libpng is thread safe, provided the threads are using different
879
+ instances of the structures. Each thread should have its own
880
+ png_struct and png_info instances, and thus its own image.
881
+ Libpng does not protect itself against two threads using the
882
+ same instance of a structure.
883
+
884
+ .SH II. Structures
885
+
886
+ There are two main structures that are important to libpng, png_struct
887
+ and png_info. The first, png_struct, is an internal structure that
888
+ will not, for the most part, be used by a user except as the first
889
+ variable passed to every libpng function call.
890
+
891
+ The png_info structure is designed to provide information about the
892
+ PNG file. At one time, the fields of png_info were intended to be
893
+ directly accessible to the user. However, this tended to cause problems
894
+ with applications using dynamically loaded libraries, and as a result
895
+ a set of interface functions for png_info (the png_get_*() and png_set_*()
896
+ functions) was developed. The fields of png_info are still available for
897
+ older applications, but it is suggested that applications use the new
898
+ interfaces if at all possible.
899
+
900
+ Applications that do make direct access to the members of png_struct (except
901
+ for png_ptr->jmpbuf) must be recompiled whenever the library is updated,
902
+ and applications that make direct access to the members of png_info must
903
+ be recompiled if they were compiled or loaded with libpng version 1.0.6,
904
+ in which the members were in a different order. In version 1.0.7, the
905
+ members of the png_info structure reverted to the old order, as they were
906
+ in versions 0.97c through 1.0.5. Starting with version 2.0.0, both
907
+ structures are going to be hidden, and the contents of the structures will
908
+ only be accessible through the png_get/png_set functions.
909
+
910
+ The png.h header file is an invaluable reference for programming with libpng.
911
+ And while I'm on the topic, make sure you include the libpng header file:
912
+
913
+ #include <png.h>
914
+
915
+ .SH III. Reading
916
+
917
+ We'll now walk you through the possible functions to call when reading
918
+ in a PNG file sequentially, briefly explaining the syntax and purpose
919
+ of each one. See example.c and png.h for more detail. While
920
+ progressive reading is covered in the next section, you will still
921
+ need some of the functions discussed in this section to read a PNG
922
+ file.
923
+
924
+ .SS Setup
925
+
926
+ You will want to do the I/O initialization(*) before you get into libpng,
927
+ so if it doesn't work, you don't have much to undo. Of course, you
928
+ will also want to insure that you are, in fact, dealing with a PNG
929
+ file. Libpng provides a simple check to see if a file is a PNG file.
930
+ To use it, pass in the first 1 to 8 bytes of the file to the function
931
+ png_sig_cmp(), and it will return 0 (false) if the bytes match the
932
+ corresponding bytes of the PNG signature, or nonzero (true) otherwise.
933
+ Of course, the more bytes you pass in, the greater the accuracy of the
934
+ prediction.
935
+
936
+ If you are intending to keep the file pointer open for use in libpng,
937
+ you must ensure you don't read more than 8 bytes from the beginning
938
+ of the file, and you also have to make a call to png_set_sig_bytes_read()
939
+ with the number of bytes you read from the beginning. Libpng will
940
+ then only check the bytes (if any) that your program didn't read.
941
+
942
+ (*): If you are not using the standard I/O functions, you will need
943
+ to replace them with custom functions. See the discussion under
944
+ Customizing libpng.
945
+
946
+
947
+ FILE *fp = fopen(file_name, "rb");
948
+ if (!fp)
949
+ {
950
+ return (ERROR);
951
+ }
952
+ fread(header, 1, number, fp);
953
+ is_png = !png_sig_cmp(header, 0, number);
954
+ if (!is_png)
955
+ {
956
+ return (NOT_PNG);
957
+ }
958
+
959
+
960
+ Next, png_struct and png_info need to be allocated and initialized. In
961
+ order to ensure that the size of these structures is correct even with a
962
+ dynamically linked libpng, there are functions to initialize and
963
+ allocate the structures. We also pass the library version, optional
964
+ pointers to error handling functions, and a pointer to a data struct for
965
+ use by the error functions, if necessary (the pointer and functions can
966
+ be NULL if the default error handlers are to be used). See the section
967
+ on Changes to Libpng below regarding the old initialization functions.
968
+ The structure allocation functions quietly return NULL if they fail to
969
+ create the structure, so your application should check for that.
970
+
971
+ png_structp png_ptr = png_create_read_struct
972
+ (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
973
+ user_error_fn, user_warning_fn);
974
+ if (!png_ptr)
975
+ return (ERROR);
976
+
977
+ png_infop info_ptr = png_create_info_struct(png_ptr);
978
+ if (!info_ptr)
979
+ {
980
+ png_destroy_read_struct(&png_ptr,
981
+ (png_infopp)NULL, (png_infopp)NULL);
982
+ return (ERROR);
983
+ }
984
+
985
+ png_infop end_info = png_create_info_struct(png_ptr);
986
+ if (!end_info)
987
+ {
988
+ png_destroy_read_struct(&png_ptr, &info_ptr,
989
+ (png_infopp)NULL);
990
+ return (ERROR);
991
+ }
992
+
993
+ If you want to use your own memory allocation routines,
994
+ define PNG_USER_MEM_SUPPORTED and use
995
+ png_create_read_struct_2() instead of png_create_read_struct():
996
+
997
+ png_structp png_ptr = png_create_read_struct_2
998
+ (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
999
+ user_error_fn, user_warning_fn, (png_voidp)
1000
+ user_mem_ptr, user_malloc_fn, user_free_fn);
1001
+
1002
+ The error handling routines passed to png_create_read_struct()
1003
+ and the memory alloc/free routines passed to png_create_struct_2()
1004
+ are only necessary if you are not using the libpng supplied error
1005
+ handling and memory alloc/free functions.
1006
+
1007
+ When libpng encounters an error, it expects to longjmp back
1008
+ to your routine. Therefore, you will need to call setjmp and pass
1009
+ your png_jmpbuf(png_ptr). If you read the file from different
1010
+ routines, you will need to update the jmpbuf field every time you enter
1011
+ a new routine that will call a png_*() function.
1012
+
1013
+ See your documentation of setjmp/longjmp for your compiler for more
1014
+ information on setjmp/longjmp. See the discussion on libpng error
1015
+ handling in the Customizing Libpng section below for more information
1016
+ on the libpng error handling. If an error occurs, and libpng longjmp's
1017
+ back to your setjmp, you will want to call png_destroy_read_struct() to
1018
+ free any memory.
1019
+
1020
+ if (setjmp(png_jmpbuf(png_ptr)))
1021
+ {
1022
+ png_destroy_read_struct(&png_ptr, &info_ptr,
1023
+ &end_info);
1024
+ fclose(fp);
1025
+ return (ERROR);
1026
+ }
1027
+
1028
+ If you would rather avoid the complexity of setjmp/longjmp issues,
1029
+ you can compile libpng with PNG_NO_SETJMP, in which case
1030
+ errors will result in a call to PNG_ABORT() which defaults to abort().
1031
+
1032
+ You can #define PNG_ABORT() to a function that does something
1033
+ more useful than abort(), as long as your function does not
1034
+ return.
1035
+
1036
+ Now you need to set up the input code. The default for libpng is to
1037
+ use the C function fread(). If you use this, you will need to pass a
1038
+ valid FILE * in the function png_init_io(). Be sure that the file is
1039
+ opened in binary mode. If you wish to handle reading data in another
1040
+ way, you need not call the png_init_io() function, but you must then
1041
+ implement the libpng I/O methods discussed in the Customizing Libpng
1042
+ section below.
1043
+
1044
+ png_init_io(png_ptr, fp);
1045
+
1046
+ If you had previously opened the file and read any of the signature from
1047
+ the beginning in order to see if this was a PNG file, you need to let
1048
+ libpng know that there are some bytes missing from the start of the file.
1049
+
1050
+ png_set_sig_bytes(png_ptr, number);
1051
+
1052
+ You can change the zlib compression buffer size to be used while
1053
+ reading compressed data with
1054
+
1055
+ png_set_compression_buffer_size(png_ptr, buffer_size);
1056
+
1057
+ where the default size is 8192 bytes. Note that the buffer size
1058
+ is changed immediately and the buffer is reallocated immediately,
1059
+ instead of setting a flag to be acted upon later.
1060
+
1061
+ .SS Setting up callback code
1062
+
1063
+ You can set up a callback function to handle any unknown chunks in the
1064
+ input stream. You must supply the function
1065
+
1066
+ read_chunk_callback(png_ptr ptr,
1067
+ png_unknown_chunkp chunk);
1068
+ {
1069
+ /* The unknown chunk structure contains your
1070
+ chunk data, along with similar data for any other
1071
+ unknown chunks: */
1072
+
1073
+ png_byte name[5];
1074
+ png_byte *data;
1075
+ png_size_t size;
1076
+
1077
+ /* Note that libpng has already taken care of
1078
+ the CRC handling */
1079
+
1080
+ /* put your code here. Search for your chunk in the
1081
+ unknown chunk structure, process it, and return one
1082
+ of the following: */
1083
+
1084
+ return (-n); /* chunk had an error */
1085
+ return (0); /* did not recognize */
1086
+ return (n); /* success */
1087
+ }
1088
+
1089
+ (You can give your function another name that you like instead of
1090
+ "read_chunk_callback")
1091
+
1092
+ To inform libpng about your function, use
1093
+
1094
+ png_set_read_user_chunk_fn(png_ptr, user_chunk_ptr,
1095
+ read_chunk_callback);
1096
+
1097
+ This names not only the callback function, but also a user pointer that
1098
+ you can retrieve with
1099
+
1100
+ png_get_user_chunk_ptr(png_ptr);
1101
+
1102
+ If you call the png_set_read_user_chunk_fn() function, then all unknown
1103
+ chunks will be saved when read, in case your callback function will need
1104
+ one or more of them. This behavior can be changed with the
1105
+ png_set_keep_unknown_chunks() function, described below.
1106
+
1107
+ At this point, you can set up a callback function that will be
1108
+ called after each row has been read, which you can use to control
1109
+ a progress meter or the like. It's demonstrated in pngtest.c.
1110
+ You must supply a function
1111
+
1112
+ void read_row_callback(png_ptr ptr, png_uint_32 row,
1113
+ int pass);
1114
+ {
1115
+ /* put your code here */
1116
+ }
1117
+
1118
+ (You can give it another name that you like instead of "read_row_callback")
1119
+
1120
+ To inform libpng about your function, use
1121
+
1122
+ png_set_read_status_fn(png_ptr, read_row_callback);
1123
+
1124
+ .SS Unknown-chunk handling
1125
+
1126
+ Now you get to set the way the library processes unknown chunks in the
1127
+ input PNG stream. Both known and unknown chunks will be read. Normal
1128
+ behavior is that known chunks will be parsed into information in
1129
+ various info_ptr members while unknown chunks will be discarded. This
1130
+ behavior can be wasteful if your application will never use some known
1131
+ chunk types. To change this, you can call:
1132
+
1133
+ png_set_keep_unknown_chunks(png_ptr, keep,
1134
+ chunk_list, num_chunks);
1135
+ keep - 0: default unknown chunk handling
1136
+ 1: ignore; do not keep
1137
+ 2: keep only if safe-to-copy
1138
+ 3: keep even if unsafe-to-copy
1139
+ You can use these definitions:
1140
+ PNG_HANDLE_CHUNK_AS_DEFAULT 0
1141
+ PNG_HANDLE_CHUNK_NEVER 1
1142
+ PNG_HANDLE_CHUNK_IF_SAFE 2
1143
+ PNG_HANDLE_CHUNK_ALWAYS 3
1144
+ chunk_list - list of chunks affected (a byte string,
1145
+ five bytes per chunk, NULL or '\0' if
1146
+ num_chunks is 0)
1147
+ num_chunks - number of chunks affected; if 0, all
1148
+ unknown chunks are affected. If nonzero,
1149
+ only the chunks in the list are affected
1150
+
1151
+ Unknown chunks declared in this way will be saved as raw data onto a
1152
+ list of png_unknown_chunk structures. If a chunk that is normally
1153
+ known to libpng is named in the list, it will be handled as unknown,
1154
+ according to the "keep" directive. If a chunk is named in successive
1155
+ instances of png_set_keep_unknown_chunks(), the final instance will
1156
+ take precedence. The IHDR and IEND chunks should not be named in
1157
+ chunk_list; if they are, libpng will process them normally anyway.
1158
+
1159
+ Here is an example of the usage of png_set_keep_unknown_chunks(),
1160
+ where the private "vpAg" chunk will later be processed by a user chunk
1161
+ callback function:
1162
+
1163
+ png_byte vpAg[5]={118, 112, 65, 103, (png_byte) '\0'};
1164
+
1165
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
1166
+ png_byte unused_chunks[]=
1167
+ {
1168
+ 104, 73, 83, 84, (png_byte) '\0', /* hIST */
1169
+ 105, 84, 88, 116, (png_byte) '\0', /* iTXt */
1170
+ 112, 67, 65, 76, (png_byte) '\0', /* pCAL */
1171
+ 115, 67, 65, 76, (png_byte) '\0', /* sCAL */
1172
+ 115, 80, 76, 84, (png_byte) '\0', /* sPLT */
1173
+ 116, 73, 77, 69, (png_byte) '\0', /* tIME */
1174
+ };
1175
+ #endif
1176
+
1177
+ ...
1178
+
1179
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
1180
+ /* ignore all unknown chunks: */
1181
+ png_set_keep_unknown_chunks(read_ptr, 1, NULL, 0);
1182
+ /* except for vpAg: */
1183
+ png_set_keep_unknown_chunks(read_ptr, 2, vpAg, 1);
1184
+ /* also ignore unused known chunks: */
1185
+ png_set_keep_unknown_chunks(read_ptr, 1, unused_chunks,
1186
+ (int)sizeof(unused_chunks)/5);
1187
+ #endif
1188
+
1189
+ .SS User limits
1190
+
1191
+ The PNG specification allows the width and height of an image to be as
1192
+ large as 2^31-1 (0x7fffffff), or about 2.147 billion rows and columns.
1193
+ Since very few applications really need to process such large images,
1194
+ we have imposed an arbitrary 1-million limit on rows and columns.
1195
+ Larger images will be rejected immediately with a png_error() call. If
1196
+ you wish to override this limit, you can use
1197
+
1198
+ png_set_user_limits(png_ptr, width_max, height_max);
1199
+
1200
+ to set your own limits, or use width_max = height_max = 0x7fffffffL
1201
+ to allow all valid dimensions (libpng may reject some very large images
1202
+ anyway because of potential buffer overflow conditions).
1203
+
1204
+ You should put this statement after you create the PNG structure and
1205
+ before calling png_read_info(), png_read_png(), or png_process_data().
1206
+ If you need to retrieve the limits that are being applied, use
1207
+
1208
+ width_max = png_get_user_width_max(png_ptr);
1209
+ height_max = png_get_user_height_max(png_ptr);
1210
+
1211
+ The PNG specification sets no limit on the number of ancillary chunks
1212
+ allowed in a PNG datastream. You can impose a limit on the total number
1213
+ of sPLT, tEXt, iTXt, zTXt, and unknown chunks that will be stored, with
1214
+
1215
+ png_set_chunk_cache_max(png_ptr, user_chunk_cache_max);
1216
+
1217
+ where 0x7fffffffL means unlimited. You can retrieve this limit with
1218
+
1219
+ chunk_cache_max = png_get_chunk_cache_max(png_ptr);
1220
+
1221
+ This limit also applies to the number of buffers that can be allocated
1222
+ by png_decompress_chunk() while decompressing iTXt, zTXt, and iCCP chunks.
1223
+
1224
+ You can also set a limit on the amount of memory that a compressed chunk
1225
+ other than IDAT can occupy, with
1226
+
1227
+ png_set_chunk_malloc_max(png_ptr, user_chunk_malloc_max);
1228
+
1229
+ and you can retrieve the limit with
1230
+
1231
+ chunk_malloc_max = png_get_chunk_malloc_max(png_ptr);
1232
+
1233
+ Any chunks that would cause either of these limits to be exceeded will
1234
+ be ignored.
1235
+
1236
+ .SS The high-level read interface
1237
+
1238
+ At this point there are two ways to proceed; through the high-level
1239
+ read interface, or through a sequence of low-level read operations.
1240
+ You can use the high-level interface if (a) you are willing to read
1241
+ the entire image into memory, and (b) the input transformations
1242
+ you want to do are limited to the following set:
1243
+
1244
+ PNG_TRANSFORM_IDENTITY No transformation
1245
+ PNG_TRANSFORM_STRIP_16 Strip 16-bit samples to
1246
+ 8 bits
1247
+ PNG_TRANSFORM_STRIP_ALPHA Discard the alpha channel
1248
+ PNG_TRANSFORM_PACKING Expand 1, 2 and 4-bit
1249
+ samples to bytes
1250
+ PNG_TRANSFORM_PACKSWAP Change order of packed
1251
+ pixels to LSB first
1252
+ PNG_TRANSFORM_EXPAND Perform set_expand()
1253
+ PNG_TRANSFORM_INVERT_MONO Invert monochrome images
1254
+ PNG_TRANSFORM_SHIFT Normalize pixels to the
1255
+ sBIT depth
1256
+ PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA
1257
+ to BGRA
1258
+ PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA
1259
+ to AG
1260
+ PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity
1261
+ to transparency
1262
+ PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples
1263
+ PNG_TRANSFORM_GRAY_TO_RGB Expand grayscale samples
1264
+ to RGB (or GA to RGBA)
1265
+
1266
+ (This excludes setting a background color, doing gamma transformation,
1267
+ quantizing, and setting filler.) If this is the case, simply do this:
1268
+
1269
+ png_read_png(png_ptr, info_ptr, png_transforms, NULL)
1270
+
1271
+ where png_transforms is an integer containing the bitwise OR of some
1272
+ set of transformation flags. This call is equivalent to png_read_info(),
1273
+ followed the set of transformations indicated by the transform mask,
1274
+ then png_read_image(), and finally png_read_end().
1275
+
1276
+ (The final parameter of this call is not yet used. Someday it might point
1277
+ to transformation parameters required by some future input transform.)
1278
+
1279
+ You must use png_transforms and not call any png_set_transform() functions
1280
+ when you use png_read_png().
1281
+
1282
+ After you have called png_read_png(), you can retrieve the image data
1283
+ with
1284
+
1285
+ row_pointers = png_get_rows(png_ptr, info_ptr);
1286
+
1287
+ where row_pointers is an array of pointers to the pixel data for each row:
1288
+
1289
+ png_bytep row_pointers[height];
1290
+
1291
+ If you know your image size and pixel size ahead of time, you can allocate
1292
+ row_pointers prior to calling png_read_png() with
1293
+
1294
+ if (height > PNG_UINT_32_MAX/png_sizeof(png_byte))
1295
+ png_error (png_ptr,
1296
+ "Image is too tall to process in memory");
1297
+ if (width > PNG_UINT_32_MAX/pixel_size)
1298
+ png_error (png_ptr,
1299
+ "Image is too wide to process in memory");
1300
+ row_pointers = png_malloc(png_ptr,
1301
+ height*png_sizeof(png_bytep));
1302
+ for (int i=0; i<height, i++)
1303
+ row_pointers[i]=NULL; /* security precaution */
1304
+ for (int i=0; i<height, i++)
1305
+ row_pointers[i]=png_malloc(png_ptr,
1306
+ width*pixel_size);
1307
+ png_set_rows(png_ptr, info_ptr, &row_pointers);
1308
+
1309
+ Alternatively you could allocate your image in one big block and define
1310
+ row_pointers[i] to point into the proper places in your block.
1311
+
1312
+ If you use png_set_rows(), the application is responsible for freeing
1313
+ row_pointers (and row_pointers[i], if they were separately allocated).
1314
+
1315
+ If you don't allocate row_pointers ahead of time, png_read_png() will
1316
+ do it, and it'll be free'ed when you call png_destroy_*().
1317
+
1318
+ .SS The low-level read interface
1319
+
1320
+ If you are going the low-level route, you are now ready to read all
1321
+ the file information up to the actual image data. You do this with a
1322
+ call to png_read_info().
1323
+
1324
+ png_read_info(png_ptr, info_ptr);
1325
+
1326
+ This will process all chunks up to but not including the image data.
1327
+
1328
+ .SS Querying the info structure
1329
+
1330
+ Functions are used to get the information from the info_ptr once it
1331
+ has been read. Note that these fields may not be completely filled
1332
+ in until png_read_end() has read the chunk data following the image.
1333
+
1334
+ png_get_IHDR(png_ptr, info_ptr, &width, &height,
1335
+ &bit_depth, &color_type, &interlace_type,
1336
+ &compression_type, &filter_method);
1337
+
1338
+ width - holds the width of the image
1339
+ in pixels (up to 2^31).
1340
+ height - holds the height of the image
1341
+ in pixels (up to 2^31).
1342
+ bit_depth - holds the bit depth of one of the
1343
+ image channels. (valid values are
1344
+ 1, 2, 4, 8, 16 and depend also on
1345
+ the color_type. See also
1346
+ significant bits (sBIT) below).
1347
+ color_type - describes which color/alpha channels
1348
+ are present.
1349
+ PNG_COLOR_TYPE_GRAY
1350
+ (bit depths 1, 2, 4, 8, 16)
1351
+ PNG_COLOR_TYPE_GRAY_ALPHA
1352
+ (bit depths 8, 16)
1353
+ PNG_COLOR_TYPE_PALETTE
1354
+ (bit depths 1, 2, 4, 8)
1355
+ PNG_COLOR_TYPE_RGB
1356
+ (bit_depths 8, 16)
1357
+ PNG_COLOR_TYPE_RGB_ALPHA
1358
+ (bit_depths 8, 16)
1359
+
1360
+ PNG_COLOR_MASK_PALETTE
1361
+ PNG_COLOR_MASK_COLOR
1362
+ PNG_COLOR_MASK_ALPHA
1363
+
1364
+ filter_method - (must be PNG_FILTER_TYPE_BASE
1365
+ for PNG 1.0, and can also be
1366
+ PNG_INTRAPIXEL_DIFFERENCING if
1367
+ the PNG datastream is embedded in
1368
+ a MNG-1.0 datastream)
1369
+ compression_type - (must be PNG_COMPRESSION_TYPE_BASE
1370
+ for PNG 1.0)
1371
+ interlace_type - (PNG_INTERLACE_NONE or
1372
+ PNG_INTERLACE_ADAM7)
1373
+
1374
+ Any or all of interlace_type, compression_type, or
1375
+ filter_method can be NULL if you are
1376
+ not interested in their values.
1377
+
1378
+ Note that png_get_IHDR() returns 32-bit data into
1379
+ the application's width and height variables.
1380
+ This is an unsafe situation if these are 16-bit
1381
+ variables. In such situations, the
1382
+ png_get_image_width() and png_get_image_height()
1383
+ functions described below are safer.
1384
+
1385
+ width = png_get_image_width(png_ptr,
1386
+ info_ptr);
1387
+ height = png_get_image_height(png_ptr,
1388
+ info_ptr);
1389
+ bit_depth = png_get_bit_depth(png_ptr,
1390
+ info_ptr);
1391
+ color_type = png_get_color_type(png_ptr,
1392
+ info_ptr);
1393
+ filter_method = png_get_filter_type(png_ptr,
1394
+ info_ptr);
1395
+ compression_type = png_get_compression_type(png_ptr,
1396
+ info_ptr);
1397
+ interlace_type = png_get_interlace_type(png_ptr,
1398
+ info_ptr);
1399
+
1400
+ channels = png_get_channels(png_ptr, info_ptr);
1401
+ channels - number of channels of info for the
1402
+ color type (valid values are 1 (GRAY,
1403
+ PALETTE), 2 (GRAY_ALPHA), 3 (RGB),
1404
+ 4 (RGB_ALPHA or RGB + filler byte))
1405
+ rowbytes = png_get_rowbytes(png_ptr, info_ptr);
1406
+ rowbytes - number of bytes needed to hold a row
1407
+
1408
+ signature = png_get_signature(png_ptr, info_ptr);
1409
+ signature - holds the signature read from the
1410
+ file (if any). The data is kept in
1411
+ the same offset it would be if the
1412
+ whole signature were read (i.e. if an
1413
+ application had already read in 4
1414
+ bytes of signature before starting
1415
+ libpng, the remaining 4 bytes would
1416
+ be in signature[4] through signature[7]
1417
+ (see png_set_sig_bytes())).
1418
+
1419
+ These are also important, but their validity depends on whether the chunk
1420
+ has been read. The png_get_valid(png_ptr, info_ptr, PNG_INFO_<chunk>) and
1421
+ png_get_<chunk>(png_ptr, info_ptr, ...) functions return non-zero if the
1422
+ data has been read, or zero if it is missing. The parameters to the
1423
+ png_get_<chunk> are set directly if they are simple data types, or a
1424
+ pointer into the info_ptr is returned for any complex types.
1425
+
1426
+ png_get_PLTE(png_ptr, info_ptr, &palette,
1427
+ &num_palette);
1428
+ palette - the palette for the file
1429
+ (array of png_color)
1430
+ num_palette - number of entries in the palette
1431
+
1432
+ png_get_gAMA(png_ptr, info_ptr, &gamma);
1433
+ gamma - the gamma the file is written
1434
+ at (PNG_INFO_gAMA)
1435
+
1436
+ png_get_sRGB(png_ptr, info_ptr, &srgb_intent);
1437
+ srgb_intent - the rendering intent (PNG_INFO_sRGB)
1438
+ The presence of the sRGB chunk
1439
+ means that the pixel data is in the
1440
+ sRGB color space. This chunk also
1441
+ implies specific values of gAMA and
1442
+ cHRM.
1443
+
1444
+ png_get_iCCP(png_ptr, info_ptr, &name,
1445
+ &compression_type, &profile, &proflen);
1446
+ name - The profile name.
1447
+ compression - The compression type; always
1448
+ PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
1449
+ You may give NULL to this argument to
1450
+ ignore it.
1451
+ profile - International Color Consortium color
1452
+ profile data. May contain NULs.
1453
+ proflen - length of profile data in bytes.
1454
+
1455
+ png_get_sBIT(png_ptr, info_ptr, &sig_bit);
1456
+ sig_bit - the number of significant bits for
1457
+ (PNG_INFO_sBIT) each of the gray,
1458
+ red, green, and blue channels,
1459
+ whichever are appropriate for the
1460
+ given color type (png_color_16)
1461
+
1462
+ png_get_tRNS(png_ptr, info_ptr, &trans_alpha,
1463
+ &num_trans, &trans_color);
1464
+ trans_alpha - array of alpha (transparency)
1465
+ entries for palette (PNG_INFO_tRNS)
1466
+ trans_color - graylevel or color sample values of
1467
+ the single transparent color for
1468
+ non-paletted images (PNG_INFO_tRNS)
1469
+ num_trans - number of transparent entries
1470
+ (PNG_INFO_tRNS)
1471
+
1472
+ png_get_hIST(png_ptr, info_ptr, &hist);
1473
+ (PNG_INFO_hIST)
1474
+ hist - histogram of palette (array of
1475
+ png_uint_16)
1476
+
1477
+ png_get_tIME(png_ptr, info_ptr, &mod_time);
1478
+ mod_time - time image was last modified
1479
+ (PNG_VALID_tIME)
1480
+
1481
+ png_get_bKGD(png_ptr, info_ptr, &background);
1482
+ background - background color (PNG_VALID_bKGD)
1483
+ valid 16-bit red, green and blue
1484
+ values, regardless of color_type
1485
+
1486
+ num_comments = png_get_text(png_ptr, info_ptr,
1487
+ &text_ptr, &num_text);
1488
+ num_comments - number of comments
1489
+ text_ptr - array of png_text holding image
1490
+ comments
1491
+ text_ptr[i].compression - type of compression used
1492
+ on "text" PNG_TEXT_COMPRESSION_NONE
1493
+ PNG_TEXT_COMPRESSION_zTXt
1494
+ PNG_ITXT_COMPRESSION_NONE
1495
+ PNG_ITXT_COMPRESSION_zTXt
1496
+ text_ptr[i].key - keyword for comment. Must contain
1497
+ 1-79 characters.
1498
+ text_ptr[i].text - text comments for current
1499
+ keyword. Can be empty.
1500
+ text_ptr[i].text_length - length of text string,
1501
+ after decompression, 0 for iTXt
1502
+ text_ptr[i].itxt_length - length of itxt string,
1503
+ after decompression, 0 for tEXt/zTXt
1504
+ text_ptr[i].lang - language of comment (empty
1505
+ string for unknown).
1506
+ text_ptr[i].lang_key - keyword in UTF-8
1507
+ (empty string for unknown).
1508
+ Note that the itxt_length, lang, and lang_key
1509
+ members of the text_ptr structure only exist
1510
+ when the library is built with iTXt chunk support.
1511
+
1512
+ num_text - number of comments (same as
1513
+ num_comments; you can put NULL here
1514
+ to avoid the duplication)
1515
+ Note while png_set_text() will accept text, language,
1516
+ and translated keywords that can be NULL pointers, the
1517
+ structure returned by png_get_text will always contain
1518
+ regular zero-terminated C strings. They might be
1519
+ empty strings but they will never be NULL pointers.
1520
+
1521
+ num_spalettes = png_get_sPLT(png_ptr, info_ptr,
1522
+ &palette_ptr);
1523
+ palette_ptr - array of palette structures holding
1524
+ contents of one or more sPLT chunks
1525
+ read.
1526
+ num_spalettes - number of sPLT chunks read.
1527
+
1528
+ png_get_oFFs(png_ptr, info_ptr, &offset_x, &offset_y,
1529
+ &unit_type);
1530
+ offset_x - positive offset from the left edge
1531
+ of the screen
1532
+ offset_y - positive offset from the top edge
1533
+ of the screen
1534
+ unit_type - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER
1535
+
1536
+ png_get_pHYs(png_ptr, info_ptr, &res_x, &res_y,
1537
+ &unit_type);
1538
+ res_x - pixels/unit physical resolution in
1539
+ x direction
1540
+ res_y - pixels/unit physical resolution in
1541
+ x direction
1542
+ unit_type - PNG_RESOLUTION_UNKNOWN,
1543
+ PNG_RESOLUTION_METER
1544
+
1545
+ png_get_sCAL(png_ptr, info_ptr, &unit, &width,
1546
+ &height)
1547
+ unit - physical scale units (an integer)
1548
+ width - width of a pixel in physical scale units
1549
+ height - height of a pixel in physical scale units
1550
+ (width and height are doubles)
1551
+
1552
+ png_get_sCAL_s(png_ptr, info_ptr, &unit, &width,
1553
+ &height)
1554
+ unit - physical scale units (an integer)
1555
+ width - width of a pixel in physical scale units
1556
+ height - height of a pixel in physical scale units
1557
+ (width and height are strings like "2.54")
1558
+
1559
+ num_unknown_chunks = png_get_unknown_chunks(png_ptr,
1560
+ info_ptr, &unknowns)
1561
+ unknowns - array of png_unknown_chunk
1562
+ structures holding unknown chunks
1563
+ unknowns[i].name - name of unknown chunk
1564
+ unknowns[i].data - data of unknown chunk
1565
+ unknowns[i].size - size of unknown chunk's data
1566
+ unknowns[i].location - position of chunk in file
1567
+
1568
+ The value of "i" corresponds to the order in which the
1569
+ chunks were read from the PNG file or inserted with the
1570
+ png_set_unknown_chunks() function.
1571
+
1572
+ The data from the pHYs chunk can be retrieved in several convenient
1573
+ forms:
1574
+
1575
+ res_x = png_get_x_pixels_per_meter(png_ptr,
1576
+ info_ptr)
1577
+ res_y = png_get_y_pixels_per_meter(png_ptr,
1578
+ info_ptr)
1579
+ res_x_and_y = png_get_pixels_per_meter(png_ptr,
1580
+ info_ptr)
1581
+ res_x = png_get_x_pixels_per_inch(png_ptr,
1582
+ info_ptr)
1583
+ res_y = png_get_y_pixels_per_inch(png_ptr,
1584
+ info_ptr)
1585
+ res_x_and_y = png_get_pixels_per_inch(png_ptr,
1586
+ info_ptr)
1587
+ aspect_ratio = png_get_pixel_aspect_ratio(png_ptr,
1588
+ info_ptr)
1589
+
1590
+ (Each of these returns 0 [signifying "unknown"] if
1591
+ the data is not present or if res_x is 0;
1592
+ res_x_and_y is 0 if res_x != res_y)
1593
+
1594
+ The data from the oFFs chunk can be retrieved in several convenient
1595
+ forms:
1596
+
1597
+ x_offset = png_get_x_offset_microns(png_ptr, info_ptr);
1598
+ y_offset = png_get_y_offset_microns(png_ptr, info_ptr);
1599
+ x_offset = png_get_x_offset_inches(png_ptr, info_ptr);
1600
+ y_offset = png_get_y_offset_inches(png_ptr, info_ptr);
1601
+
1602
+ (Each of these returns 0 [signifying "unknown" if both
1603
+ x and y are 0] if the data is not present or if the
1604
+ chunk is present but the unit is the pixel)
1605
+
1606
+ For more information, see the png_info definition in png.h and the
1607
+ PNG specification for chunk contents. Be careful with trusting
1608
+ rowbytes, as some of the transformations could increase the space
1609
+ needed to hold a row (expand, filler, gray_to_rgb, etc.).
1610
+ See png_read_update_info(), below.
1611
+
1612
+ A quick word about text_ptr and num_text. PNG stores comments in
1613
+ keyword/text pairs, one pair per chunk, with no limit on the number
1614
+ of text chunks, and a 2^31 byte limit on their size. While there are
1615
+ suggested keywords, there is no requirement to restrict the use to these
1616
+ strings. It is strongly suggested that keywords and text be sensible
1617
+ to humans (that's the point), so don't use abbreviations. Non-printing
1618
+ symbols are not allowed. See the PNG specification for more details.
1619
+ There is also no requirement to have text after the keyword.
1620
+
1621
+ Keywords should be limited to 79 Latin-1 characters without leading or
1622
+ trailing spaces, but non-consecutive spaces are allowed within the
1623
+ keyword. It is possible to have the same keyword any number of times.
1624
+ The text_ptr is an array of png_text structures, each holding a
1625
+ pointer to a language string, a pointer to a keyword and a pointer to
1626
+ a text string. The text string, language code, and translated
1627
+ keyword may be empty or NULL pointers. The keyword/text
1628
+ pairs are put into the array in the order that they are received.
1629
+ However, some or all of the text chunks may be after the image, so, to
1630
+ make sure you have read all the text chunks, don't mess with these
1631
+ until after you read the stuff after the image. This will be
1632
+ mentioned again below in the discussion that goes with png_read_end().
1633
+
1634
+ .SS Input transformations
1635
+
1636
+ After you've read the header information, you can set up the library
1637
+ to handle any special transformations of the image data. The various
1638
+ ways to transform the data will be described in the order that they
1639
+ should occur. This is important, as some of these change the color
1640
+ type and/or bit depth of the data, and some others only work on
1641
+ certain color types and bit depths. Even though each transformation
1642
+ checks to see if it has data that it can do something with, you should
1643
+ make sure to only enable a transformation if it will be valid for the
1644
+ data. For example, don't swap red and blue on grayscale data.
1645
+
1646
+ The colors used for the background and transparency values should be
1647
+ supplied in the same format/depth as the current image data. They
1648
+ are stored in the same format/depth as the image data in a bKGD or tRNS
1649
+ chunk, so this is what libpng expects for this data. The colors are
1650
+ transformed to keep in sync with the image data when an application
1651
+ calls the png_read_update_info() routine (see below).
1652
+
1653
+ Data will be decoded into the supplied row buffers packed into bytes
1654
+ unless the library has been told to transform it into another format.
1655
+ For example, 4 bit/pixel paletted or grayscale data will be returned
1656
+ 2 pixels/byte with the leftmost pixel in the high-order bits of the
1657
+ byte, unless png_set_packing() is called. 8-bit RGB data will be stored
1658
+ in RGB RGB RGB format unless png_set_filler() or png_set_add_alpha()
1659
+ is called to insert filler bytes, either before or after each RGB triplet.
1660
+ 16-bit RGB data will be returned RRGGBB RRGGBB, with the most significant
1661
+ byte of the color value first, unless png_set_strip_16() is called to
1662
+ transform it to regular RGB RGB triplets, or png_set_filler() or
1663
+ png_set_add alpha() is called to insert filler bytes, either before or
1664
+ after each RRGGBB triplet. Similarly, 8-bit or 16-bit grayscale data can
1665
+ be modified with
1666
+ png_set_filler(), png_set_add_alpha(), or png_set_strip_16().
1667
+
1668
+ The following code transforms grayscale images of less than 8 to 8 bits,
1669
+ changes paletted images to RGB, and adds a full alpha channel if there is
1670
+ transparency information in a tRNS chunk. This is most useful on
1671
+ grayscale images with bit depths of 2 or 4 or if there is a multiple-image
1672
+ viewing application that wishes to treat all images in the same way.
1673
+
1674
+ if (color_type == PNG_COLOR_TYPE_PALETTE)
1675
+ png_set_palette_to_rgb(png_ptr);
1676
+
1677
+ if (color_type == PNG_COLOR_TYPE_GRAY &&
1678
+ bit_depth < 8) png_set_expand_gray_1_2_4_to_8(png_ptr);
1679
+
1680
+ if (png_get_valid(png_ptr, info_ptr,
1681
+ PNG_INFO_tRNS)) png_set_tRNS_to_alpha(png_ptr);
1682
+
1683
+ These three functions are actually aliases for png_set_expand(), added
1684
+ in libpng version 1.0.4, with the function names expanded to improve code
1685
+ readability. In some future version they may actually do different
1686
+ things.
1687
+
1688
+ As of libpng version 1.2.9, png_set_expand_gray_1_2_4_to_8() was
1689
+ added. It expands the sample depth without changing tRNS to alpha.
1690
+
1691
+ As of libpng version 1.4.3, not all possible expansions are supported.
1692
+
1693
+ In the following table, the 01 means grayscale with depth<8, 31 means
1694
+ indexed with depth<8, other numerals represent the color type, "T" means
1695
+ the tRNS chunk is present, A means an alpha channel is present, and O
1696
+ means tRNS or alpha is present but all pixels in the image are opaque.
1697
+
1698
+ FROM 01 31 0 0T 0O 2 2T 2O 3 3T 3O 4A 4O 6A 6O
1699
+ TO
1700
+ 01 -
1701
+ 31 -
1702
+ 0 1 -
1703
+ 0T -
1704
+ 0O -
1705
+ 2 GX -
1706
+ 2T -
1707
+ 2O -
1708
+ 3 1 -
1709
+ 3T -
1710
+ 3O -
1711
+ 4A T -
1712
+ 4O -
1713
+ 6A GX TX TX -
1714
+ 6O GX TX -
1715
+
1716
+ Within the matrix,
1717
+ "-" means the transformation is not supported.
1718
+ "X" means the transformation is obtained by png_set_expand().
1719
+ "1" means the transformation is obtained by
1720
+ png_set_expand_gray_1_2_4_to_8
1721
+ "G" means the transformation is obtained by
1722
+ png_set_gray_to_rgb().
1723
+ "P" means the transformation is obtained by
1724
+ png_set_expand_palette_to_rgb().
1725
+ "T" means the transformation is obtained by
1726
+ png_set_tRNS_to_alpha().
1727
+
1728
+ PNG can have files with 16 bits per channel. If you only can handle
1729
+ 8 bits per channel, this will strip the pixels down to 8 bit.
1730
+
1731
+ if (bit_depth == 16)
1732
+ png_set_strip_16(png_ptr);
1733
+
1734
+ If, for some reason, you don't need the alpha channel on an image,
1735
+ and you want to remove it rather than combining it with the background
1736
+ (but the image author certainly had in mind that you *would* combine
1737
+ it with the background, so that's what you should probably do):
1738
+
1739
+ if (color_type & PNG_COLOR_MASK_ALPHA)
1740
+ png_set_strip_alpha(png_ptr);
1741
+
1742
+ In PNG files, the alpha channel in an image
1743
+ is the level of opacity. If you need the alpha channel in an image to
1744
+ be the level of transparency instead of opacity, you can invert the
1745
+ alpha channel (or the tRNS chunk data) after it's read, so that 0 is
1746
+ fully opaque and 255 (in 8-bit or paletted images) or 65535 (in 16-bit
1747
+ images) is fully transparent, with
1748
+
1749
+ png_set_invert_alpha(png_ptr);
1750
+
1751
+ PNG files pack pixels of bit depths 1, 2, and 4 into bytes as small as
1752
+ they can, resulting in, for example, 8 pixels per byte for 1 bit
1753
+ files. This code expands to 1 pixel per byte without changing the
1754
+ values of the pixels:
1755
+
1756
+ if (bit_depth < 8)
1757
+ png_set_packing(png_ptr);
1758
+
1759
+ PNG files have possible bit depths of 1, 2, 4, 8, and 16. All pixels
1760
+ stored in a PNG image have been "scaled" or "shifted" up to the next
1761
+ higher possible bit depth (e.g. from 5 bits/sample in the range [0,31]
1762
+ to 8 bits/sample in the range [0, 255]). However, it is also possible
1763
+ to convert the PNG pixel data back to the original bit depth of the
1764
+ image. This call reduces the pixels back down to the original bit depth:
1765
+
1766
+ png_color_8p sig_bit;
1767
+
1768
+ if (png_get_sBIT(png_ptr, info_ptr, &sig_bit))
1769
+ png_set_shift(png_ptr, sig_bit);
1770
+
1771
+ PNG files store 3-color pixels in red, green, blue order. This code
1772
+ changes the storage of the pixels to blue, green, red:
1773
+
1774
+ if (color_type == PNG_COLOR_TYPE_RGB ||
1775
+ color_type == PNG_COLOR_TYPE_RGB_ALPHA)
1776
+ png_set_bgr(png_ptr);
1777
+
1778
+ PNG files store RGB pixels packed into 3 or 6 bytes. This code expands them
1779
+ into 4 or 8 bytes for windowing systems that need them in this format:
1780
+
1781
+ if (color_type == PNG_COLOR_TYPE_RGB)
1782
+ png_set_filler(png_ptr, filler, PNG_FILLER_BEFORE);
1783
+
1784
+ where "filler" is the 8 or 16-bit number to fill with, and the location is
1785
+ either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether
1786
+ you want the filler before the RGB or after. This transformation
1787
+ does not affect images that already have full alpha channels. To add an
1788
+ opaque alpha channel, use filler=0xff or 0xffff and PNG_FILLER_AFTER which
1789
+ will generate RGBA pixels.
1790
+
1791
+ Note that png_set_filler() does not change the color type. If you want
1792
+ to do that, you can add a true alpha channel with
1793
+
1794
+ if (color_type == PNG_COLOR_TYPE_RGB ||
1795
+ color_type == PNG_COLOR_TYPE_GRAY)
1796
+ png_set_add_alpha(png_ptr, filler, PNG_FILLER_AFTER);
1797
+
1798
+ where "filler" contains the alpha value to assign to each pixel.
1799
+ This function was added in libpng-1.2.7.
1800
+
1801
+ If you are reading an image with an alpha channel, and you need the
1802
+ data as ARGB instead of the normal PNG format RGBA:
1803
+
1804
+ if (color_type == PNG_COLOR_TYPE_RGB_ALPHA)
1805
+ png_set_swap_alpha(png_ptr);
1806
+
1807
+ For some uses, you may want a grayscale image to be represented as
1808
+ RGB. This code will do that conversion:
1809
+
1810
+ if (color_type == PNG_COLOR_TYPE_GRAY ||
1811
+ color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
1812
+ png_set_gray_to_rgb(png_ptr);
1813
+
1814
+ Conversely, you can convert an RGB or RGBA image to grayscale or grayscale
1815
+ with alpha.
1816
+
1817
+ if (color_type == PNG_COLOR_TYPE_RGB ||
1818
+ color_type == PNG_COLOR_TYPE_RGB_ALPHA)
1819
+ png_set_rgb_to_gray_fixed(png_ptr, error_action,
1820
+ int red_weight, int green_weight);
1821
+
1822
+ error_action = 1: silently do the conversion
1823
+ error_action = 2: issue a warning if the original
1824
+ image has any pixel where
1825
+ red != green or red != blue
1826
+ error_action = 3: issue an error and abort the
1827
+ conversion if the original
1828
+ image has any pixel where
1829
+ red != green or red != blue
1830
+
1831
+ red_weight: weight of red component times 100000
1832
+ green_weight: weight of green component times 100000
1833
+ If either weight is negative, default
1834
+ weights (21268, 71514) are used.
1835
+
1836
+ If you have set error_action = 1 or 2, you can
1837
+ later check whether the image really was gray, after processing
1838
+ the image rows, with the png_get_rgb_to_gray_status(png_ptr) function.
1839
+ It will return a png_byte that is zero if the image was gray or
1840
+ 1 if there were any non-gray pixels. bKGD and sBIT data
1841
+ will be silently converted to grayscale, using the green channel
1842
+ data, regardless of the error_action setting.
1843
+
1844
+ With red_weight+green_weight<=100000,
1845
+ the normalized graylevel is computed:
1846
+
1847
+ int rw = red_weight * 65536;
1848
+ int gw = green_weight * 65536;
1849
+ int bw = 65536 - (rw + gw);
1850
+ gray = (rw*red + gw*green + bw*blue)/65536;
1851
+
1852
+ The default values approximate those recommended in the Charles
1853
+ Poynton's Color FAQ, <http://www.inforamp.net/~poynton/>
1854
+ Copyright (c) 1998-01-04 Charles Poynton <poynton at inforamp.net>
1855
+
1856
+ Y = 0.212671 * R + 0.715160 * G + 0.072169 * B
1857
+
1858
+ Libpng approximates this with
1859
+
1860
+ Y = 0.21268 * R + 0.7151 * G + 0.07217 * B
1861
+
1862
+ which can be expressed with integers as
1863
+
1864
+ Y = (6969 * R + 23434 * G + 2365 * B)/32768
1865
+
1866
+ The calculation is done in a linear colorspace, if the image gamma
1867
+ is known.
1868
+
1869
+ If you have a grayscale and you are using png_set_expand_depth(),
1870
+ png_set_expand(), or png_set_gray_to_rgb to change to truecolor or to
1871
+ a higher bit-depth, you must either supply the background color as a gray
1872
+ value at the original file bit-depth (need_expand = 1) or else supply the
1873
+ background color as an RGB triplet at the final, expanded bit depth
1874
+ (need_expand = 0). Similarly, if you are reading a paletted image, you
1875
+ must either supply the background color as a palette index (need_expand = 1)
1876
+ or as an RGB triplet that may or may not be in the palette (need_expand = 0).
1877
+
1878
+ png_color_16 my_background;
1879
+ png_color_16p image_background;
1880
+
1881
+ if (png_get_bKGD(png_ptr, info_ptr, &image_background))
1882
+ png_set_background(png_ptr, image_background,
1883
+ PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
1884
+ else
1885
+ png_set_background(png_ptr, &my_background,
1886
+ PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0);
1887
+
1888
+ The png_set_background() function tells libpng to composite images
1889
+ with alpha or simple transparency against the supplied background
1890
+ color. If the PNG file contains a bKGD chunk (PNG_INFO_bKGD valid),
1891
+ you may use this color, or supply another color more suitable for
1892
+ the current display (e.g., the background color from a web page). You
1893
+ need to tell libpng whether the color is in the gamma space of the
1894
+ display (PNG_BACKGROUND_GAMMA_SCREEN for colors you supply), the file
1895
+ (PNG_BACKGROUND_GAMMA_FILE for colors from the bKGD chunk), or one
1896
+ that is neither of these gammas (PNG_BACKGROUND_GAMMA_UNIQUE - I don't
1897
+ know why anyone would use this, but it's here).
1898
+
1899
+ To properly display PNG images on any kind of system, the application needs
1900
+ to know what the display gamma is. Ideally, the user will know this, and
1901
+ the application will allow them to set it. One method of allowing the user
1902
+ to set the display gamma separately for each system is to check for a
1903
+ SCREEN_GAMMA or DISPLAY_GAMMA environment variable, which will hopefully be
1904
+ correctly set.
1905
+
1906
+ Note that display_gamma is the overall gamma correction required to produce
1907
+ pleasing results, which depends on the lighting conditions in the surrounding
1908
+ environment. In a dim or brightly lit room, no compensation other than
1909
+ the physical gamma exponent of the monitor is needed, while in a dark room
1910
+ a slightly smaller exponent is better.
1911
+
1912
+ double gamma, screen_gamma;
1913
+
1914
+ if (/* We have a user-defined screen
1915
+ gamma value */)
1916
+ {
1917
+ screen_gamma = user_defined_screen_gamma;
1918
+ }
1919
+ /* One way that applications can share the same
1920
+ screen gamma value */
1921
+ else if ((gamma_str = getenv("SCREEN_GAMMA"))
1922
+ != NULL)
1923
+ {
1924
+ screen_gamma = (double)atof(gamma_str);
1925
+ }
1926
+ /* If we don't have another value */
1927
+ else
1928
+ {
1929
+ screen_gamma = 2.2; /* A good guess for a
1930
+ PC monitor in a bright office or a dim room */
1931
+ screen_gamma = 2.0; /* A good guess for a
1932
+ PC monitor in a dark room */
1933
+ screen_gamma = 1.7 or 1.0; /* A good
1934
+ guess for Mac systems */
1935
+ }
1936
+
1937
+ The png_set_gamma() function handles gamma transformations of the data.
1938
+ Pass both the file gamma and the current screen_gamma. If the file does
1939
+ not have a gamma value, you can pass one anyway if you have an idea what
1940
+ it is (usually 0.45455 is a good guess for GIF images on PCs). Note
1941
+ that file gammas are inverted from screen gammas. See the discussions
1942
+ on gamma in the PNG specification for an excellent description of what
1943
+ gamma is, and why all applications should support it. It is strongly
1944
+ recommended that PNG viewers support gamma correction.
1945
+
1946
+ if (png_get_gAMA(png_ptr, info_ptr, &gamma))
1947
+ png_set_gamma(png_ptr, screen_gamma, gamma);
1948
+ else
1949
+ png_set_gamma(png_ptr, screen_gamma, 0.45455);
1950
+
1951
+ If you need to reduce an RGB file to a paletted file, or if a paletted
1952
+ file has more entries then will fit on your screen, png_set_quantize()
1953
+ will do that. Note that this is a simple match dither that merely
1954
+ finds the closest color available. This should work fairly well with
1955
+ optimized palettes, and fairly badly with linear color cubes. If you
1956
+ pass a palette that is larger then maximum_colors, the file will
1957
+ reduce the number of colors in the palette so it will fit into
1958
+ maximum_colors. If there is a histogram, it will use it to make
1959
+ more intelligent choices when reducing the palette. If there is no
1960
+ histogram, it may not do as good a job.
1961
+
1962
+ if (color_type & PNG_COLOR_MASK_COLOR)
1963
+ {
1964
+ if (png_get_valid(png_ptr, info_ptr,
1965
+ PNG_INFO_PLTE))
1966
+ {
1967
+ png_uint_16p histogram = NULL;
1968
+
1969
+ png_get_hIST(png_ptr, info_ptr,
1970
+ &histogram);
1971
+ png_set_quantize(png_ptr, palette, num_palette,
1972
+ max_screen_colors, histogram, 1);
1973
+ }
1974
+ else
1975
+ {
1976
+ png_color std_color_cube[MAX_SCREEN_COLORS] =
1977
+ { ... colors ... };
1978
+
1979
+ png_set_quantize(png_ptr, std_color_cube,
1980
+ MAX_SCREEN_COLORS, MAX_SCREEN_COLORS,
1981
+ NULL,0);
1982
+ }
1983
+ }
1984
+
1985
+ PNG files describe monochrome as black being zero and white being one.
1986
+ The following code will reverse this (make black be one and white be
1987
+ zero):
1988
+
1989
+ if (bit_depth == 1 && color_type == PNG_COLOR_TYPE_GRAY)
1990
+ png_set_invert_mono(png_ptr);
1991
+
1992
+ This function can also be used to invert grayscale and gray-alpha images:
1993
+
1994
+ if (color_type == PNG_COLOR_TYPE_GRAY ||
1995
+ color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
1996
+ png_set_invert_mono(png_ptr);
1997
+
1998
+ PNG files store 16 bit pixels in network byte order (big-endian,
1999
+ ie. most significant bits first). This code changes the storage to the
2000
+ other way (little-endian, i.e. least significant bits first, the
2001
+ way PCs store them):
2002
+
2003
+ if (bit_depth == 16)
2004
+ png_set_swap(png_ptr);
2005
+
2006
+ If you are using packed-pixel images (1, 2, or 4 bits/pixel), and you
2007
+ need to change the order the pixels are packed into bytes, you can use:
2008
+
2009
+ if (bit_depth < 8)
2010
+ png_set_packswap(png_ptr);
2011
+
2012
+ Finally, you can write your own transformation function if none of
2013
+ the existing ones meets your needs. This is done by setting a callback
2014
+ with
2015
+
2016
+ png_set_read_user_transform_fn(png_ptr,
2017
+ read_transform_fn);
2018
+
2019
+ You must supply the function
2020
+
2021
+ void read_transform_fn(png_ptr ptr, row_info_ptr
2022
+ row_info, png_bytep data)
2023
+
2024
+ See pngtest.c for a working example. Your function will be called
2025
+ after all of the other transformations have been processed.
2026
+
2027
+ You can also set up a pointer to a user structure for use by your
2028
+ callback function, and you can inform libpng that your transform
2029
+ function will change the number of channels or bit depth with the
2030
+ function
2031
+
2032
+ png_set_user_transform_info(png_ptr, user_ptr,
2033
+ user_depth, user_channels);
2034
+
2035
+ The user's application, not libpng, is responsible for allocating and
2036
+ freeing any memory required for the user structure.
2037
+
2038
+ You can retrieve the pointer via the function
2039
+ png_get_user_transform_ptr(). For example:
2040
+
2041
+ voidp read_user_transform_ptr =
2042
+ png_get_user_transform_ptr(png_ptr);
2043
+
2044
+ The last thing to handle is interlacing; this is covered in detail below,
2045
+ but you must call the function here if you want libpng to handle expansion
2046
+ of the interlaced image.
2047
+
2048
+ number_of_passes = png_set_interlace_handling(png_ptr);
2049
+
2050
+ After setting the transformations, libpng can update your png_info
2051
+ structure to reflect any transformations you've requested with this
2052
+ call. This is most useful to update the info structure's rowbytes
2053
+ field so you can use it to allocate your image memory. This function
2054
+ will also update your palette with the correct screen_gamma and
2055
+ background if these have been given with the calls above.
2056
+
2057
+ png_read_update_info(png_ptr, info_ptr);
2058
+
2059
+ After you call png_read_update_info(), you can allocate any
2060
+ memory you need to hold the image. The row data is simply
2061
+ raw byte data for all forms of images. As the actual allocation
2062
+ varies among applications, no example will be given. If you
2063
+ are allocating one large chunk, you will need to build an
2064
+ array of pointers to each row, as it will be needed for some
2065
+ of the functions below.
2066
+
2067
+ .SS Reading image data
2068
+
2069
+ After you've allocated memory, you can read the image data.
2070
+ The simplest way to do this is in one function call. If you are
2071
+ allocating enough memory to hold the whole image, you can just
2072
+ call png_read_image() and libpng will read in all the image data
2073
+ and put it in the memory area supplied. You will need to pass in
2074
+ an array of pointers to each row.
2075
+
2076
+ This function automatically handles interlacing, so you don't need
2077
+ to call png_set_interlace_handling() or call this function multiple
2078
+ times, or any of that other stuff necessary with png_read_rows().
2079
+
2080
+ png_read_image(png_ptr, row_pointers);
2081
+
2082
+ where row_pointers is:
2083
+
2084
+ png_bytep row_pointers[height];
2085
+
2086
+ You can point to void or char or whatever you use for pixels.
2087
+
2088
+ If you don't want to read in the whole image at once, you can
2089
+ use png_read_rows() instead. If there is no interlacing (check
2090
+ interlace_type == PNG_INTERLACE_NONE), this is simple:
2091
+
2092
+ png_read_rows(png_ptr, row_pointers, NULL,
2093
+ number_of_rows);
2094
+
2095
+ where row_pointers is the same as in the png_read_image() call.
2096
+
2097
+ If you are doing this just one row at a time, you can do this with
2098
+ a single row_pointer instead of an array of row_pointers:
2099
+
2100
+ png_bytep row_pointer = row;
2101
+ png_read_row(png_ptr, row_pointer, NULL);
2102
+
2103
+ If the file is interlaced (interlace_type != 0 in the IHDR chunk), things
2104
+ get somewhat harder. The only current (PNG Specification version 1.2)
2105
+ interlacing type for PNG is (interlace_type == PNG_INTERLACE_ADAM7)
2106
+ is a somewhat complicated 2D interlace scheme, known as Adam7, that
2107
+ breaks down an image into seven smaller images of varying size, based
2108
+ on an 8x8 grid.
2109
+
2110
+ libpng can fill out those images or it can give them to you "as is".
2111
+ If you want them filled out, there are two ways to do that. The one
2112
+ mentioned in the PNG specification is to expand each pixel to cover
2113
+ those pixels that have not been read yet (the "rectangle" method).
2114
+ This results in a blocky image for the first pass, which gradually
2115
+ smooths out as more pixels are read. The other method is the "sparkle"
2116
+ method, where pixels are drawn only in their final locations, with the
2117
+ rest of the image remaining whatever colors they were initialized to
2118
+ before the start of the read. The first method usually looks better,
2119
+ but tends to be slower, as there are more pixels to put in the rows.
2120
+
2121
+ If you don't want libpng to handle the interlacing details, just call
2122
+ png_read_rows() seven times to read in all seven images. Each of the
2123
+ images is a valid image by itself, or they can all be combined on an
2124
+ 8x8 grid to form a single image (although if you intend to combine them
2125
+ you would be far better off using the libpng interlace handling).
2126
+
2127
+ The first pass will return an image 1/8 as wide as the entire image
2128
+ (every 8th column starting in column 0) and 1/8 as high as the original
2129
+ (every 8th row starting in row 0), the second will be 1/8 as wide
2130
+ (starting in column 4) and 1/8 as high (also starting in row 0). The
2131
+ third pass will be 1/4 as wide (every 4th pixel starting in column 0) and
2132
+ 1/8 as high (every 8th row starting in row 4), and the fourth pass will
2133
+ be 1/4 as wide and 1/4 as high (every 4th column starting in column 2,
2134
+ and every 4th row starting in row 0). The fifth pass will return an
2135
+ image 1/2 as wide, and 1/4 as high (starting at column 0 and row 2),
2136
+ while the sixth pass will be 1/2 as wide and 1/2 as high as the original
2137
+ (starting in column 1 and row 0). The seventh and final pass will be as
2138
+ wide as the original, and 1/2 as high, containing all of the odd
2139
+ numbered scanlines. Phew!
2140
+
2141
+ If you want libpng to expand the images, call this before calling
2142
+ png_start_read_image() or png_read_update_info():
2143
+
2144
+ if (interlace_type == PNG_INTERLACE_ADAM7)
2145
+ number_of_passes
2146
+ = png_set_interlace_handling(png_ptr);
2147
+
2148
+ This will return the number of passes needed. Currently, this
2149
+ is seven, but may change if another interlace type is added.
2150
+ This function can be called even if the file is not interlaced,
2151
+ where it will return one pass.
2152
+
2153
+ If you are not going to display the image after each pass, but are
2154
+ going to wait until the entire image is read in, use the sparkle
2155
+ effect. This effect is faster and the end result of either method
2156
+ is exactly the same. If you are planning on displaying the image
2157
+ after each pass, the "rectangle" effect is generally considered the
2158
+ better looking one.
2159
+
2160
+ If you only want the "sparkle" effect, just call png_read_rows() as
2161
+ normal, with the third parameter NULL. Make sure you make pass over
2162
+ the image number_of_passes times, and you don't change the data in the
2163
+ rows between calls. You can change the locations of the data, just
2164
+ not the data. Each pass only writes the pixels appropriate for that
2165
+ pass, and assumes the data from previous passes is still valid.
2166
+
2167
+ png_read_rows(png_ptr, row_pointers, NULL,
2168
+ number_of_rows);
2169
+
2170
+ If you only want the first effect (the rectangles), do the same as
2171
+ before except pass the row buffer in the third parameter, and leave
2172
+ the second parameter NULL.
2173
+
2174
+ png_read_rows(png_ptr, NULL, row_pointers,
2175
+ number_of_rows);
2176
+
2177
+ .SS Finishing a sequential read
2178
+
2179
+ After you are finished reading the image through the
2180
+ low-level interface, you can finish reading the file. If you are
2181
+ interested in comments or time, which may be stored either before or
2182
+ after the image data, you should pass the separate png_info struct if
2183
+ you want to keep the comments from before and after the image
2184
+ separate. If you are not interested, you can pass NULL.
2185
+
2186
+ png_read_end(png_ptr, end_info);
2187
+
2188
+ When you are done, you can free all memory allocated by libpng like this:
2189
+
2190
+ png_destroy_read_struct(&png_ptr, &info_ptr,
2191
+ &end_info);
2192
+
2193
+ It is also possible to individually free the info_ptr members that
2194
+ point to libpng-allocated storage with the following function:
2195
+
2196
+ png_free_data(png_ptr, info_ptr, mask, seq)
2197
+ mask - identifies data to be freed, a mask
2198
+ containing the bitwise OR of one or
2199
+ more of
2200
+ PNG_FREE_PLTE, PNG_FREE_TRNS,
2201
+ PNG_FREE_HIST, PNG_FREE_ICCP,
2202
+ PNG_FREE_PCAL, PNG_FREE_ROWS,
2203
+ PNG_FREE_SCAL, PNG_FREE_SPLT,
2204
+ PNG_FREE_TEXT, PNG_FREE_UNKN,
2205
+ or simply PNG_FREE_ALL
2206
+ seq - sequence number of item to be freed
2207
+ (-1 for all items)
2208
+
2209
+ This function may be safely called when the relevant storage has
2210
+ already been freed, or has not yet been allocated, or was allocated
2211
+ by the user and not by libpng, and will in those cases do nothing.
2212
+ The "seq" parameter is ignored if only one item of the selected data
2213
+ type, such as PLTE, is allowed. If "seq" is not -1, and multiple items
2214
+ are allowed for the data type identified in the mask, such as text or
2215
+ sPLT, only the n'th item in the structure is freed, where n is "seq".
2216
+
2217
+ The default behavior is only to free data that was allocated internally
2218
+ by libpng. This can be changed, so that libpng will not free the data,
2219
+ or so that it will free data that was allocated by the user with png_malloc()
2220
+ or png_zalloc() and passed in via a png_set_*() function, with
2221
+
2222
+ png_data_freer(png_ptr, info_ptr, freer, mask)
2223
+ mask - which data elements are affected
2224
+ same choices as in png_free_data()
2225
+ freer - one of
2226
+ PNG_DESTROY_WILL_FREE_DATA
2227
+ PNG_SET_WILL_FREE_DATA
2228
+ PNG_USER_WILL_FREE_DATA
2229
+
2230
+ This function only affects data that has already been allocated.
2231
+ You can call this function after reading the PNG data but before calling
2232
+ any png_set_*() functions, to control whether the user or the png_set_*()
2233
+ function is responsible for freeing any existing data that might be present,
2234
+ and again after the png_set_*() functions to control whether the user
2235
+ or png_destroy_*() is supposed to free the data. When the user assumes
2236
+ responsibility for libpng-allocated data, the application must use
2237
+ png_free() to free it, and when the user transfers responsibility to libpng
2238
+ for data that the user has allocated, the user must have used png_malloc()
2239
+ or png_zalloc() to allocate it.
2240
+
2241
+ If you allocated your row_pointers in a single block, as suggested above in
2242
+ the description of the high level read interface, you must not transfer
2243
+ responsibility for freeing it to the png_set_rows or png_read_destroy function,
2244
+ because they would also try to free the individual row_pointers[i].
2245
+
2246
+ If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword
2247
+ separately, do not transfer responsibility for freeing text_ptr to libpng,
2248
+ because when libpng fills a png_text structure it combines these members with
2249
+ the key member, and png_free_data() will free only text_ptr.key. Similarly,
2250
+ if you transfer responsibility for free'ing text_ptr from libpng to your
2251
+ application, your application must not separately free those members.
2252
+
2253
+ The png_free_data() function will turn off the "valid" flag for anything
2254
+ it frees. If you need to turn the flag off for a chunk that was freed by
2255
+ your application instead of by libpng, you can use
2256
+
2257
+ png_set_invalid(png_ptr, info_ptr, mask);
2258
+ mask - identifies the chunks to be made invalid,
2259
+ containing the bitwise OR of one or
2260
+ more of
2261
+ PNG_INFO_gAMA, PNG_INFO_sBIT,
2262
+ PNG_INFO_cHRM, PNG_INFO_PLTE,
2263
+ PNG_INFO_tRNS, PNG_INFO_bKGD,
2264
+ PNG_INFO_hIST, PNG_INFO_pHYs,
2265
+ PNG_INFO_oFFs, PNG_INFO_tIME,
2266
+ PNG_INFO_pCAL, PNG_INFO_sRGB,
2267
+ PNG_INFO_iCCP, PNG_INFO_sPLT,
2268
+ PNG_INFO_sCAL, PNG_INFO_IDAT
2269
+
2270
+ For a more compact example of reading a PNG image, see the file example.c.
2271
+
2272
+ .SS Reading PNG files progressively
2273
+
2274
+ The progressive reader is slightly different then the non-progressive
2275
+ reader. Instead of calling png_read_info(), png_read_rows(), and
2276
+ png_read_end(), you make one call to png_process_data(), which calls
2277
+ callbacks when it has the info, a row, or the end of the image. You
2278
+ set up these callbacks with png_set_progressive_read_fn(). You don't
2279
+ have to worry about the input/output functions of libpng, as you are
2280
+ giving the library the data directly in png_process_data(). I will
2281
+ assume that you have read the section on reading PNG files above,
2282
+ so I will only highlight the differences (although I will show
2283
+ all of the code).
2284
+
2285
+ png_structp png_ptr;
2286
+ png_infop info_ptr;
2287
+
2288
+ /* An example code fragment of how you would
2289
+ initialize the progressive reader in your
2290
+ application. */
2291
+ int
2292
+ initialize_png_reader()
2293
+ {
2294
+ png_ptr = png_create_read_struct
2295
+ (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
2296
+ user_error_fn, user_warning_fn);
2297
+ if (!png_ptr)
2298
+ return (ERROR);
2299
+ info_ptr = png_create_info_struct(png_ptr);
2300
+ if (!info_ptr)
2301
+ {
2302
+ png_destroy_read_struct(&png_ptr, (png_infopp)NULL,
2303
+ (png_infopp)NULL);
2304
+ return (ERROR);
2305
+ }
2306
+
2307
+ if (setjmp(png_jmpbuf(png_ptr)))
2308
+ {
2309
+ png_destroy_read_struct(&png_ptr, &info_ptr,
2310
+ (png_infopp)NULL);
2311
+ return (ERROR);
2312
+ }
2313
+
2314
+ /* This one's new. You can provide functions
2315
+ to be called when the header info is valid,
2316
+ when each row is completed, and when the image
2317
+ is finished. If you aren't using all functions,
2318
+ you can specify NULL parameters. Even when all
2319
+ three functions are NULL, you need to call
2320
+ png_set_progressive_read_fn(). You can use
2321
+ any struct as the user_ptr (cast to a void pointer
2322
+ for the function call), and retrieve the pointer
2323
+ from inside the callbacks using the function
2324
+
2325
+ png_get_progressive_ptr(png_ptr);
2326
+
2327
+ which will return a void pointer, which you have
2328
+ to cast appropriately.
2329
+ */
2330
+ png_set_progressive_read_fn(png_ptr, (void *)user_ptr,
2331
+ info_callback, row_callback, end_callback);
2332
+
2333
+ return 0;
2334
+ }
2335
+
2336
+ /* A code fragment that you call as you receive blocks
2337
+ of data */
2338
+ int
2339
+ process_data(png_bytep buffer, png_uint_32 length)
2340
+ {
2341
+ if (setjmp(png_jmpbuf(png_ptr)))
2342
+ {
2343
+ png_destroy_read_struct(&png_ptr, &info_ptr,
2344
+ (png_infopp)NULL);
2345
+ return (ERROR);
2346
+ }
2347
+
2348
+ /* This one's new also. Simply give it a chunk
2349
+ of data from the file stream (in order, of
2350
+ course). On machines with segmented memory
2351
+ models machines, don't give it any more than
2352
+ 64K. The library seems to run fine with sizes
2353
+ of 4K. Although you can give it much less if
2354
+ necessary (I assume you can give it chunks of
2355
+ 1 byte, I haven't tried less then 256 bytes
2356
+ yet). When this function returns, you may
2357
+ want to display any rows that were generated
2358
+ in the row callback if you don't already do
2359
+ so there.
2360
+ */
2361
+ png_process_data(png_ptr, info_ptr, buffer, length);
2362
+ return 0;
2363
+ }
2364
+
2365
+ /* This function is called (as set by
2366
+ png_set_progressive_read_fn() above) when enough data
2367
+ has been supplied so all of the header has been
2368
+ read.
2369
+ */
2370
+ void
2371
+ info_callback(png_structp png_ptr, png_infop info)
2372
+ {
2373
+ /* Do any setup here, including setting any of
2374
+ the transformations mentioned in the Reading
2375
+ PNG files section. For now, you _must_ call
2376
+ either png_start_read_image() or
2377
+ png_read_update_info() after all the
2378
+ transformations are set (even if you don't set
2379
+ any). You may start getting rows before
2380
+ png_process_data() returns, so this is your
2381
+ last chance to prepare for that.
2382
+ */
2383
+ }
2384
+
2385
+ /* This function is called when each row of image
2386
+ data is complete */
2387
+ void
2388
+ row_callback(png_structp png_ptr, png_bytep new_row,
2389
+ png_uint_32 row_num, int pass)
2390
+ {
2391
+ /* If the image is interlaced, and you turned
2392
+ on the interlace handler, this function will
2393
+ be called for every row in every pass. Some
2394
+ of these rows will not be changed from the
2395
+ previous pass. When the row is not changed,
2396
+ the new_row variable will be NULL. The rows
2397
+ and passes are called in order, so you don't
2398
+ really need the row_num and pass, but I'm
2399
+ supplying them because it may make your life
2400
+ easier.
2401
+
2402
+ For the non-NULL rows of interlaced images,
2403
+ you must call png_progressive_combine_row()
2404
+ passing in the row and the old row. You can
2405
+ call this function for NULL rows (it will just
2406
+ return) and for non-interlaced images (it just
2407
+ does the memcpy for you) if it will make the
2408
+ code easier. Thus, you can just do this for
2409
+ all cases:
2410
+ */
2411
+
2412
+ png_progressive_combine_row(png_ptr, old_row,
2413
+ new_row);
2414
+
2415
+ /* where old_row is what was displayed for
2416
+ previously for the row. Note that the first
2417
+ pass (pass == 0, really) will completely cover
2418
+ the old row, so the rows do not have to be
2419
+ initialized. After the first pass (and only
2420
+ for interlaced images), you will have to pass
2421
+ the current row, and the function will combine
2422
+ the old row and the new row.
2423
+ */
2424
+ }
2425
+
2426
+ void
2427
+ end_callback(png_structp png_ptr, png_infop info)
2428
+ {
2429
+ /* This function is called after the whole image
2430
+ has been read, including any chunks after the
2431
+ image (up to and including the IEND). You
2432
+ will usually have the same info chunk as you
2433
+ had in the header, although some data may have
2434
+ been added to the comments and time fields.
2435
+
2436
+ Most people won't do much here, perhaps setting
2437
+ a flag that marks the image as finished.
2438
+ */
2439
+ }
2440
+
2441
+
2442
+
2443
+ .SH IV. Writing
2444
+
2445
+ Much of this is very similar to reading. However, everything of
2446
+ importance is repeated here, so you won't have to constantly look
2447
+ back up in the reading section to understand writing.
2448
+
2449
+ .SS Setup
2450
+
2451
+ You will want to do the I/O initialization before you get into libpng,
2452
+ so if it doesn't work, you don't have anything to undo. If you are not
2453
+ using the standard I/O functions, you will need to replace them with
2454
+ custom writing functions. See the discussion under Customizing libpng.
2455
+
2456
+ FILE *fp = fopen(file_name, "wb");
2457
+ if (!fp)
2458
+ {
2459
+ return (ERROR);
2460
+ }
2461
+
2462
+ Next, png_struct and png_info need to be allocated and initialized.
2463
+ As these can be both relatively large, you may not want to store these
2464
+ on the stack, unless you have stack space to spare. Of course, you
2465
+ will want to check if they return NULL. If you are also reading,
2466
+ you won't want to name your read structure and your write structure
2467
+ both "png_ptr"; you can call them anything you like, such as
2468
+ "read_ptr" and "write_ptr". Look at pngtest.c, for example.
2469
+
2470
+ png_structp png_ptr = png_create_write_struct
2471
+ (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
2472
+ user_error_fn, user_warning_fn);
2473
+ if (!png_ptr)
2474
+ return (ERROR);
2475
+
2476
+ png_infop info_ptr = png_create_info_struct(png_ptr);
2477
+ if (!info_ptr)
2478
+ {
2479
+ png_destroy_write_struct(&png_ptr,
2480
+ (png_infopp)NULL);
2481
+ return (ERROR);
2482
+ }
2483
+
2484
+ If you want to use your own memory allocation routines,
2485
+ define PNG_USER_MEM_SUPPORTED and use
2486
+ png_create_write_struct_2() instead of png_create_write_struct():
2487
+
2488
+ png_structp png_ptr = png_create_write_struct_2
2489
+ (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
2490
+ user_error_fn, user_warning_fn, (png_voidp)
2491
+ user_mem_ptr, user_malloc_fn, user_free_fn);
2492
+
2493
+ After you have these structures, you will need to set up the
2494
+ error handling. When libpng encounters an error, it expects to
2495
+ longjmp() back to your routine. Therefore, you will need to call
2496
+ setjmp() and pass the png_jmpbuf(png_ptr). If you
2497
+ write the file from different routines, you will need to update
2498
+ the png_jmpbuf(png_ptr) every time you enter a new routine that will
2499
+ call a png_*() function. See your documentation of setjmp/longjmp
2500
+ for your compiler for more information on setjmp/longjmp. See
2501
+ the discussion on libpng error handling in the Customizing Libpng
2502
+ section below for more information on the libpng error handling.
2503
+
2504
+ if (setjmp(png_jmpbuf(png_ptr)))
2505
+ {
2506
+ png_destroy_write_struct(&png_ptr, &info_ptr);
2507
+ fclose(fp);
2508
+ return (ERROR);
2509
+ }
2510
+ ...
2511
+ return;
2512
+
2513
+ If you would rather avoid the complexity of setjmp/longjmp issues,
2514
+ you can compile libpng with PNG_NO_SETJMP, in which case
2515
+ errors will result in a call to PNG_ABORT() which defaults to abort().
2516
+
2517
+ You can #define PNG_ABORT() to a function that does something
2518
+ more useful than abort(), as long as your function does not
2519
+ return.
2520
+
2521
+ Now you need to set up the output code. The default for libpng is to
2522
+ use the C function fwrite(). If you use this, you will need to pass a
2523
+ valid FILE * in the function png_init_io(). Be sure that the file is
2524
+ opened in binary mode. Again, if you wish to handle writing data in
2525
+ another way, see the discussion on libpng I/O handling in the Customizing
2526
+ Libpng section below.
2527
+
2528
+ png_init_io(png_ptr, fp);
2529
+
2530
+ If you are embedding your PNG into a datastream such as MNG, and don't
2531
+ want libpng to write the 8-byte signature, or if you have already
2532
+ written the signature in your application, use
2533
+
2534
+ png_set_sig_bytes(png_ptr, 8);
2535
+
2536
+ to inform libpng that it should not write a signature.
2537
+
2538
+ .SS Write callbacks
2539
+
2540
+ At this point, you can set up a callback function that will be
2541
+ called after each row has been written, which you can use to control
2542
+ a progress meter or the like. It's demonstrated in pngtest.c.
2543
+ You must supply a function
2544
+
2545
+ void write_row_callback(png_ptr, png_uint_32 row,
2546
+ int pass);
2547
+ {
2548
+ /* put your code here */
2549
+ }
2550
+
2551
+ (You can give it another name that you like instead of "write_row_callback")
2552
+
2553
+ To inform libpng about your function, use
2554
+
2555
+ png_set_write_status_fn(png_ptr, write_row_callback);
2556
+
2557
+ You now have the option of modifying how the compression library will
2558
+ run. The following functions are mainly for testing, but may be useful
2559
+ in some cases, like if you need to write PNG files extremely fast and
2560
+ are willing to give up some compression, or if you want to get the
2561
+ maximum possible compression at the expense of slower writing. If you
2562
+ have no special needs in this area, let the library do what it wants by
2563
+ not calling this function at all, as it has been tuned to deliver a good
2564
+ speed/compression ratio. The second parameter to png_set_filter() is
2565
+ the filter method, for which the only valid values are 0 (as of the
2566
+ July 1999 PNG specification, version 1.2) or 64 (if you are writing
2567
+ a PNG datastream that is to be embedded in a MNG datastream). The third
2568
+ parameter is a flag that indicates which filter type(s) are to be tested
2569
+ for each scanline. See the PNG specification for details on the specific
2570
+ filter types.
2571
+
2572
+
2573
+ /* turn on or off filtering, and/or choose
2574
+ specific filters. You can use either a single
2575
+ PNG_FILTER_VALUE_NAME or the bitwise OR of one
2576
+ or more PNG_FILTER_NAME masks. */
2577
+ png_set_filter(png_ptr, 0,
2578
+ PNG_FILTER_NONE | PNG_FILTER_VALUE_NONE |
2579
+ PNG_FILTER_SUB | PNG_FILTER_VALUE_SUB |
2580
+ PNG_FILTER_UP | PNG_FILTER_VALUE_UP |
2581
+ PNG_FILTER_AVG | PNG_FILTER_VALUE_AVG |
2582
+ PNG_FILTER_PAETH | PNG_FILTER_VALUE_PAETH|
2583
+ PNG_ALL_FILTERS);
2584
+
2585
+ If an application
2586
+ wants to start and stop using particular filters during compression,
2587
+ it should start out with all of the filters (to ensure that the previous
2588
+ row of pixels will be stored in case it's needed later), and then add
2589
+ and remove them after the start of compression.
2590
+
2591
+ If you are writing a PNG datastream that is to be embedded in a MNG
2592
+ datastream, the second parameter can be either 0 or 64.
2593
+
2594
+ The png_set_compression_*() functions interface to the zlib compression
2595
+ library, and should mostly be ignored unless you really know what you are
2596
+ doing. The only generally useful call is png_set_compression_level()
2597
+ which changes how much time zlib spends on trying to compress the image
2598
+ data. See the Compression Library (zlib.h and algorithm.txt, distributed
2599
+ with zlib) for details on the compression levels.
2600
+
2601
+ /* set the zlib compression level */
2602
+ png_set_compression_level(png_ptr,
2603
+ Z_BEST_COMPRESSION);
2604
+
2605
+ /* set other zlib parameters */
2606
+ png_set_compression_mem_level(png_ptr, 8);
2607
+ png_set_compression_strategy(png_ptr,
2608
+ Z_DEFAULT_STRATEGY);
2609
+ png_set_compression_window_bits(png_ptr, 15);
2610
+ png_set_compression_method(png_ptr, 8);
2611
+ png_set_compression_buffer_size(png_ptr, 8192)
2612
+
2613
+ extern PNG_EXPORT(void,png_set_zbuf_size)
2614
+
2615
+ .SS Setting the contents of info for output
2616
+
2617
+ You now need to fill in the png_info structure with all the data you
2618
+ wish to write before the actual image. Note that the only thing you
2619
+ are allowed to write after the image is the text chunks and the time
2620
+ chunk (as of PNG Specification 1.2, anyway). See png_write_end() and
2621
+ the latest PNG specification for more information on that. If you
2622
+ wish to write them before the image, fill them in now, and flag that
2623
+ data as being valid. If you want to wait until after the data, don't
2624
+ fill them until png_write_end(). For all the fields in png_info and
2625
+ their data types, see png.h. For explanations of what the fields
2626
+ contain, see the PNG specification.
2627
+
2628
+ Some of the more important parts of the png_info are:
2629
+
2630
+ png_set_IHDR(png_ptr, info_ptr, width, height,
2631
+ bit_depth, color_type, interlace_type,
2632
+ compression_type, filter_method)
2633
+ width - holds the width of the image
2634
+ in pixels (up to 2^31).
2635
+ height - holds the height of the image
2636
+ in pixels (up to 2^31).
2637
+ bit_depth - holds the bit depth of one of the
2638
+ image channels.
2639
+ (valid values are 1, 2, 4, 8, 16
2640
+ and depend also on the
2641
+ color_type. See also significant
2642
+ bits (sBIT) below).
2643
+ color_type - describes which color/alpha
2644
+ channels are present.
2645
+ PNG_COLOR_TYPE_GRAY
2646
+ (bit depths 1, 2, 4, 8, 16)
2647
+ PNG_COLOR_TYPE_GRAY_ALPHA
2648
+ (bit depths 8, 16)
2649
+ PNG_COLOR_TYPE_PALETTE
2650
+ (bit depths 1, 2, 4, 8)
2651
+ PNG_COLOR_TYPE_RGB
2652
+ (bit_depths 8, 16)
2653
+ PNG_COLOR_TYPE_RGB_ALPHA
2654
+ (bit_depths 8, 16)
2655
+
2656
+ PNG_COLOR_MASK_PALETTE
2657
+ PNG_COLOR_MASK_COLOR
2658
+ PNG_COLOR_MASK_ALPHA
2659
+
2660
+ interlace_type - PNG_INTERLACE_NONE or
2661
+ PNG_INTERLACE_ADAM7
2662
+ compression_type - (must be
2663
+ PNG_COMPRESSION_TYPE_DEFAULT)
2664
+ filter_method - (must be PNG_FILTER_TYPE_DEFAULT
2665
+ or, if you are writing a PNG to
2666
+ be embedded in a MNG datastream,
2667
+ can also be
2668
+ PNG_INTRAPIXEL_DIFFERENCING)
2669
+
2670
+ If you call png_set_IHDR(), the call must appear before any of the
2671
+ other png_set_*() functions, because they might require access to some of
2672
+ the IHDR settings. The remaining png_set_*() functions can be called
2673
+ in any order.
2674
+
2675
+ If you wish, you can reset the compression_type, interlace_type, or
2676
+ filter_method later by calling png_set_IHDR() again; if you do this, the
2677
+ width, height, bit_depth, and color_type must be the same in each call.
2678
+
2679
+ png_set_PLTE(png_ptr, info_ptr, palette,
2680
+ num_palette);
2681
+ palette - the palette for the file
2682
+ (array of png_color)
2683
+ num_palette - number of entries in the palette
2684
+
2685
+ png_set_gAMA(png_ptr, info_ptr, gamma);
2686
+ gamma - the gamma the image was created
2687
+ at (PNG_INFO_gAMA)
2688
+
2689
+ png_set_sRGB(png_ptr, info_ptr, srgb_intent);
2690
+ srgb_intent - the rendering intent
2691
+ (PNG_INFO_sRGB) The presence of
2692
+ the sRGB chunk means that the pixel
2693
+ data is in the sRGB color space.
2694
+ This chunk also implies specific
2695
+ values of gAMA and cHRM. Rendering
2696
+ intent is the CSS-1 property that
2697
+ has been defined by the International
2698
+ Color Consortium
2699
+ (http://www.color.org).
2700
+ It can be one of
2701
+ PNG_sRGB_INTENT_SATURATION,
2702
+ PNG_sRGB_INTENT_PERCEPTUAL,
2703
+ PNG_sRGB_INTENT_ABSOLUTE, or
2704
+ PNG_sRGB_INTENT_RELATIVE.
2705
+
2706
+
2707
+ png_set_sRGB_gAMA_and_cHRM(png_ptr, info_ptr,
2708
+ srgb_intent);
2709
+ srgb_intent - the rendering intent
2710
+ (PNG_INFO_sRGB) The presence of the
2711
+ sRGB chunk means that the pixel
2712
+ data is in the sRGB color space.
2713
+ This function also causes gAMA and
2714
+ cHRM chunks with the specific values
2715
+ that are consistent with sRGB to be
2716
+ written.
2717
+
2718
+ png_set_iCCP(png_ptr, info_ptr, name, compression_type,
2719
+ profile, proflen);
2720
+ name - The profile name.
2721
+ compression - The compression type; always
2722
+ PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
2723
+ You may give NULL to this argument to
2724
+ ignore it.
2725
+ profile - International Color Consortium color
2726
+ profile data. May contain NULs.
2727
+ proflen - length of profile data in bytes.
2728
+
2729
+ png_set_sBIT(png_ptr, info_ptr, sig_bit);
2730
+ sig_bit - the number of significant bits for
2731
+ (PNG_INFO_sBIT) each of the gray, red,
2732
+ green, and blue channels, whichever are
2733
+ appropriate for the given color type
2734
+ (png_color_16)
2735
+
2736
+ png_set_tRNS(png_ptr, info_ptr, trans_alpha,
2737
+ num_trans, trans_color);
2738
+ trans_alpha - array of alpha (transparency)
2739
+ entries for palette (PNG_INFO_tRNS)
2740
+ trans_color - graylevel or color sample values
2741
+ (in order red, green, blue) of the
2742
+ single transparent color for
2743
+ non-paletted images (PNG_INFO_tRNS)
2744
+ num_trans - number of transparent entries
2745
+ (PNG_INFO_tRNS)
2746
+
2747
+ png_set_hIST(png_ptr, info_ptr, hist);
2748
+ (PNG_INFO_hIST)
2749
+ hist - histogram of palette (array of
2750
+ png_uint_16)
2751
+
2752
+ png_set_tIME(png_ptr, info_ptr, mod_time);
2753
+ mod_time - time image was last modified
2754
+ (PNG_VALID_tIME)
2755
+
2756
+ png_set_bKGD(png_ptr, info_ptr, background);
2757
+ background - background color (PNG_VALID_bKGD)
2758
+
2759
+ png_set_text(png_ptr, info_ptr, text_ptr, num_text);
2760
+ text_ptr - array of png_text holding image
2761
+ comments
2762
+ text_ptr[i].compression - type of compression used
2763
+ on "text" PNG_TEXT_COMPRESSION_NONE
2764
+ PNG_TEXT_COMPRESSION_zTXt
2765
+ PNG_ITXT_COMPRESSION_NONE
2766
+ PNG_ITXT_COMPRESSION_zTXt
2767
+ text_ptr[i].key - keyword for comment. Must contain
2768
+ 1-79 characters.
2769
+ text_ptr[i].text - text comments for current
2770
+ keyword. Can be NULL or empty.
2771
+ text_ptr[i].text_length - length of text string,
2772
+ after decompression, 0 for iTXt
2773
+ text_ptr[i].itxt_length - length of itxt string,
2774
+ after decompression, 0 for tEXt/zTXt
2775
+ text_ptr[i].lang - language of comment (NULL or
2776
+ empty for unknown).
2777
+ text_ptr[i].translated_keyword - keyword in UTF-8 (NULL
2778
+ or empty for unknown).
2779
+ Note that the itxt_length, lang, and lang_key
2780
+ members of the text_ptr structure only exist
2781
+ when the library is built with iTXt chunk support.
2782
+
2783
+ num_text - number of comments
2784
+
2785
+ png_set_sPLT(png_ptr, info_ptr, &palette_ptr,
2786
+ num_spalettes);
2787
+ palette_ptr - array of png_sPLT_struct structures
2788
+ to be added to the list of palettes
2789
+ in the info structure.
2790
+ num_spalettes - number of palette structures to be
2791
+ added.
2792
+
2793
+ png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y,
2794
+ unit_type);
2795
+ offset_x - positive offset from the left
2796
+ edge of the screen
2797
+ offset_y - positive offset from the top
2798
+ edge of the screen
2799
+ unit_type - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER
2800
+
2801
+ png_set_pHYs(png_ptr, info_ptr, res_x, res_y,
2802
+ unit_type);
2803
+ res_x - pixels/unit physical resolution
2804
+ in x direction
2805
+ res_y - pixels/unit physical resolution
2806
+ in y direction
2807
+ unit_type - PNG_RESOLUTION_UNKNOWN,
2808
+ PNG_RESOLUTION_METER
2809
+
2810
+ png_set_sCAL(png_ptr, info_ptr, unit, width, height)
2811
+ unit - physical scale units (an integer)
2812
+ width - width of a pixel in physical scale units
2813
+ height - height of a pixel in physical scale units
2814
+ (width and height are doubles)
2815
+
2816
+ png_set_sCAL_s(png_ptr, info_ptr, unit, width, height)
2817
+ unit - physical scale units (an integer)
2818
+ width - width of a pixel in physical scale units
2819
+ height - height of a pixel in physical scale units
2820
+ (width and height are strings like "2.54")
2821
+
2822
+ png_set_unknown_chunks(png_ptr, info_ptr, &unknowns,
2823
+ num_unknowns)
2824
+ unknowns - array of png_unknown_chunk
2825
+ structures holding unknown chunks
2826
+ unknowns[i].name - name of unknown chunk
2827
+ unknowns[i].data - data of unknown chunk
2828
+ unknowns[i].size - size of unknown chunk's data
2829
+ unknowns[i].location - position to write chunk in file
2830
+ 0: do not write chunk
2831
+ PNG_HAVE_IHDR: before PLTE
2832
+ PNG_HAVE_PLTE: before IDAT
2833
+ PNG_AFTER_IDAT: after IDAT
2834
+
2835
+ The "location" member is set automatically according to
2836
+ what part of the output file has already been written.
2837
+ You can change its value after calling png_set_unknown_chunks()
2838
+ as demonstrated in pngtest.c. Within each of the "locations",
2839
+ the chunks are sequenced according to their position in the
2840
+ structure (that is, the value of "i", which is the order in which
2841
+ the chunk was either read from the input file or defined with
2842
+ png_set_unknown_chunks).
2843
+
2844
+ A quick word about text and num_text. text is an array of png_text
2845
+ structures. num_text is the number of valid structures in the array.
2846
+ Each png_text structure holds a language code, a keyword, a text value,
2847
+ and a compression type.
2848
+
2849
+ The compression types have the same valid numbers as the compression
2850
+ types of the image data. Currently, the only valid number is zero.
2851
+ However, you can store text either compressed or uncompressed, unlike
2852
+ images, which always have to be compressed. So if you don't want the
2853
+ text compressed, set the compression type to PNG_TEXT_COMPRESSION_NONE.
2854
+ Because tEXt and zTXt chunks don't have a language field, if you
2855
+ specify PNG_TEXT_COMPRESSION_NONE or PNG_TEXT_COMPRESSION_zTXt
2856
+ any language code or translated keyword will not be written out.
2857
+
2858
+ Until text gets around 1000 bytes, it is not worth compressing it.
2859
+ After the text has been written out to the file, the compression type
2860
+ is set to PNG_TEXT_COMPRESSION_NONE_WR or PNG_TEXT_COMPRESSION_zTXt_WR,
2861
+ so that it isn't written out again at the end (in case you are calling
2862
+ png_write_end() with the same struct.
2863
+
2864
+ The keywords that are given in the PNG Specification are:
2865
+
2866
+ Title Short (one line) title or
2867
+ caption for image
2868
+ Author Name of image's creator
2869
+ Description Description of image (possibly long)
2870
+ Copyright Copyright notice
2871
+ Creation Time Time of original image creation
2872
+ (usually RFC 1123 format, see below)
2873
+ Software Software used to create the image
2874
+ Disclaimer Legal disclaimer
2875
+ Warning Warning of nature of content
2876
+ Source Device used to create the image
2877
+ Comment Miscellaneous comment; conversion
2878
+ from other image format
2879
+
2880
+ The keyword-text pairs work like this. Keywords should be short
2881
+ simple descriptions of what the comment is about. Some typical
2882
+ keywords are found in the PNG specification, as is some recommendations
2883
+ on keywords. You can repeat keywords in a file. You can even write
2884
+ some text before the image and some after. For example, you may want
2885
+ to put a description of the image before the image, but leave the
2886
+ disclaimer until after, so viewers working over modem connections
2887
+ don't have to wait for the disclaimer to go over the modem before
2888
+ they start seeing the image. Finally, keywords should be full
2889
+ words, not abbreviations. Keywords and text are in the ISO 8859-1
2890
+ (Latin-1) character set (a superset of regular ASCII) and can not
2891
+ contain NUL characters, and should not contain control or other
2892
+ unprintable characters. To make the comments widely readable, stick
2893
+ with basic ASCII, and avoid machine specific character set extensions
2894
+ like the IBM-PC character set. The keyword must be present, but
2895
+ you can leave off the text string on non-compressed pairs.
2896
+ Compressed pairs must have a text string, as only the text string
2897
+ is compressed anyway, so the compression would be meaningless.
2898
+
2899
+ PNG supports modification time via the png_time structure. Two
2900
+ conversion routines are provided, png_convert_from_time_t() for
2901
+ time_t and png_convert_from_struct_tm() for struct tm. The
2902
+ time_t routine uses gmtime(). You don't have to use either of
2903
+ these, but if you wish to fill in the png_time structure directly,
2904
+ you should provide the time in universal time (GMT) if possible
2905
+ instead of your local time. Note that the year number is the full
2906
+ year (e.g. 1998, rather than 98 - PNG is year 2000 compliant!), and
2907
+ that months start with 1.
2908
+
2909
+ If you want to store the time of the original image creation, you should
2910
+ use a plain tEXt chunk with the "Creation Time" keyword. This is
2911
+ necessary because the "creation time" of a PNG image is somewhat vague,
2912
+ depending on whether you mean the PNG file, the time the image was
2913
+ created in a non-PNG format, a still photo from which the image was
2914
+ scanned, or possibly the subject matter itself. In order to facilitate
2915
+ machine-readable dates, it is recommended that the "Creation Time"
2916
+ tEXt chunk use RFC 1123 format dates (e.g. "22 May 1997 18:07:10 GMT"),
2917
+ although this isn't a requirement. Unlike the tIME chunk, the
2918
+ "Creation Time" tEXt chunk is not expected to be automatically changed
2919
+ by the software. To facilitate the use of RFC 1123 dates, a function
2920
+ png_convert_to_rfc1123(png_timep) is provided to convert from PNG
2921
+ time to an RFC 1123 format string.
2922
+
2923
+ .SS Writing unknown chunks
2924
+
2925
+ You can use the png_set_unknown_chunks function to queue up chunks
2926
+ for writing. You give it a chunk name, raw data, and a size; that's
2927
+ all there is to it. The chunks will be written by the next following
2928
+ png_write_info_before_PLTE, png_write_info, or png_write_end function.
2929
+ Any chunks previously read into the info structure's unknown-chunk
2930
+ list will also be written out in a sequence that satisfies the PNG
2931
+ specification's ordering rules.
2932
+
2933
+ .SS The high-level write interface
2934
+
2935
+ At this point there are two ways to proceed; through the high-level
2936
+ write interface, or through a sequence of low-level write operations.
2937
+ You can use the high-level interface if your image data is present
2938
+ in the info structure. All defined output
2939
+ transformations are permitted, enabled by the following masks.
2940
+
2941
+ PNG_TRANSFORM_IDENTITY No transformation
2942
+ PNG_TRANSFORM_PACKING Pack 1, 2 and 4-bit samples
2943
+ PNG_TRANSFORM_PACKSWAP Change order of packed
2944
+ pixels to LSB first
2945
+ PNG_TRANSFORM_INVERT_MONO Invert monochrome images
2946
+ PNG_TRANSFORM_SHIFT Normalize pixels to the
2947
+ sBIT depth
2948
+ PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA
2949
+ to BGRA
2950
+ PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA
2951
+ to AG
2952
+ PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity
2953
+ to transparency
2954
+ PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples
2955
+ PNG_TRANSFORM_STRIP_FILLER Strip out filler
2956
+ bytes (deprecated).
2957
+ PNG_TRANSFORM_STRIP_FILLER_BEFORE Strip out leading
2958
+ filler bytes
2959
+ PNG_TRANSFORM_STRIP_FILLER_AFTER Strip out trailing
2960
+ filler bytes
2961
+
2962
+ If you have valid image data in the info structure (you can use
2963
+ png_set_rows() to put image data in the info structure), simply do this:
2964
+
2965
+ png_write_png(png_ptr, info_ptr, png_transforms, NULL)
2966
+
2967
+ where png_transforms is an integer containing the bitwise OR of some set of
2968
+ transformation flags. This call is equivalent to png_write_info(),
2969
+ followed the set of transformations indicated by the transform mask,
2970
+ then png_write_image(), and finally png_write_end().
2971
+
2972
+ (The final parameter of this call is not yet used. Someday it might point
2973
+ to transformation parameters required by some future output transform.)
2974
+
2975
+ You must use png_transforms and not call any png_set_transform() functions
2976
+ when you use png_write_png().
2977
+
2978
+ .SS The low-level write interface
2979
+
2980
+ If you are going the low-level route instead, you are now ready to
2981
+ write all the file information up to the actual image data. You do
2982
+ this with a call to png_write_info().
2983
+
2984
+ png_write_info(png_ptr, info_ptr);
2985
+
2986
+ Note that there is one transformation you may need to do before
2987
+ png_write_info(). In PNG files, the alpha channel in an image is the
2988
+ level of opacity. If your data is supplied as a level of transparency,
2989
+ you can invert the alpha channel before you write it, so that 0 is
2990
+ fully transparent and 255 (in 8-bit or paletted images) or 65535
2991
+ (in 16-bit images) is fully opaque, with
2992
+
2993
+ png_set_invert_alpha(png_ptr);
2994
+
2995
+ This must appear before png_write_info() instead of later with the
2996
+ other transformations because in the case of paletted images the tRNS
2997
+ chunk data has to be inverted before the tRNS chunk is written. If
2998
+ your image is not a paletted image, the tRNS data (which in such cases
2999
+ represents a single color to be rendered as transparent) won't need to
3000
+ be changed, and you can safely do this transformation after your
3001
+ png_write_info() call.
3002
+
3003
+ If you need to write a private chunk that you want to appear before
3004
+ the PLTE chunk when PLTE is present, you can write the PNG info in
3005
+ two steps, and insert code to write your own chunk between them:
3006
+
3007
+ png_write_info_before_PLTE(png_ptr, info_ptr);
3008
+ png_set_unknown_chunks(png_ptr, info_ptr, ...);
3009
+ png_write_info(png_ptr, info_ptr);
3010
+
3011
+ After you've written the file information, you can set up the library
3012
+ to handle any special transformations of the image data. The various
3013
+ ways to transform the data will be described in the order that they
3014
+ should occur. This is important, as some of these change the color
3015
+ type and/or bit depth of the data, and some others only work on
3016
+ certain color types and bit depths. Even though each transformation
3017
+ checks to see if it has data that it can do something with, you should
3018
+ make sure to only enable a transformation if it will be valid for the
3019
+ data. For example, don't swap red and blue on grayscale data.
3020
+
3021
+ PNG files store RGB pixels packed into 3 or 6 bytes. This code tells
3022
+ the library to strip input data that has 4 or 8 bytes per pixel down
3023
+ to 3 or 6 bytes (or strip 2 or 4-byte grayscale+filler data to 1 or 2
3024
+ bytes per pixel).
3025
+
3026
+ png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
3027
+
3028
+ where the 0 is unused, and the location is either PNG_FILLER_BEFORE or
3029
+ PNG_FILLER_AFTER, depending upon whether the filler byte in the pixel
3030
+ is stored XRGB or RGBX.
3031
+
3032
+ PNG files pack pixels of bit depths 1, 2, and 4 into bytes as small as
3033
+ they can, resulting in, for example, 8 pixels per byte for 1 bit files.
3034
+ If the data is supplied at 1 pixel per byte, use this code, which will
3035
+ correctly pack the pixels into a single byte:
3036
+
3037
+ png_set_packing(png_ptr);
3038
+
3039
+ PNG files reduce possible bit depths to 1, 2, 4, 8, and 16. If your
3040
+ data is of another bit depth, you can write an sBIT chunk into the
3041
+ file so that decoders can recover the original data if desired.
3042
+
3043
+ /* Set the true bit depth of the image data */
3044
+ if (color_type & PNG_COLOR_MASK_COLOR)
3045
+ {
3046
+ sig_bit.red = true_bit_depth;
3047
+ sig_bit.green = true_bit_depth;
3048
+ sig_bit.blue = true_bit_depth;
3049
+ }
3050
+ else
3051
+ {
3052
+ sig_bit.gray = true_bit_depth;
3053
+ }
3054
+ if (color_type & PNG_COLOR_MASK_ALPHA)
3055
+ {
3056
+ sig_bit.alpha = true_bit_depth;
3057
+ }
3058
+
3059
+ png_set_sBIT(png_ptr, info_ptr, &sig_bit);
3060
+
3061
+ If the data is stored in the row buffer in a bit depth other than
3062
+ one supported by PNG (e.g. 3 bit data in the range 0-7 for a 4-bit PNG),
3063
+ this will scale the values to appear to be the correct bit depth as
3064
+ is required by PNG.
3065
+
3066
+ png_set_shift(png_ptr, &sig_bit);
3067
+
3068
+ PNG files store 16 bit pixels in network byte order (big-endian,
3069
+ ie. most significant bits first). This code would be used if they are
3070
+ supplied the other way (little-endian, i.e. least significant bits
3071
+ first, the way PCs store them):
3072
+
3073
+ if (bit_depth > 8)
3074
+ png_set_swap(png_ptr);
3075
+
3076
+ If you are using packed-pixel images (1, 2, or 4 bits/pixel), and you
3077
+ need to change the order the pixels are packed into bytes, you can use:
3078
+
3079
+ if (bit_depth < 8)
3080
+ png_set_packswap(png_ptr);
3081
+
3082
+ PNG files store 3 color pixels in red, green, blue order. This code
3083
+ would be used if they are supplied as blue, green, red:
3084
+
3085
+ png_set_bgr(png_ptr);
3086
+
3087
+ PNG files describe monochrome as black being zero and white being
3088
+ one. This code would be used if the pixels are supplied with this reversed
3089
+ (black being one and white being zero):
3090
+
3091
+ png_set_invert_mono(png_ptr);
3092
+
3093
+ Finally, you can write your own transformation function if none of
3094
+ the existing ones meets your needs. This is done by setting a callback
3095
+ with
3096
+
3097
+ png_set_write_user_transform_fn(png_ptr,
3098
+ write_transform_fn);
3099
+
3100
+ You must supply the function
3101
+
3102
+ void write_transform_fn(png_ptr ptr, row_info_ptr
3103
+ row_info, png_bytep data)
3104
+
3105
+ See pngtest.c for a working example. Your function will be called
3106
+ before any of the other transformations are processed.
3107
+
3108
+ You can also set up a pointer to a user structure for use by your
3109
+ callback function.
3110
+
3111
+ png_set_user_transform_info(png_ptr, user_ptr, 0, 0);
3112
+
3113
+ The user_channels and user_depth parameters of this function are ignored
3114
+ when writing; you can set them to zero as shown.
3115
+
3116
+ You can retrieve the pointer via the function png_get_user_transform_ptr().
3117
+ For example:
3118
+
3119
+ voidp write_user_transform_ptr =
3120
+ png_get_user_transform_ptr(png_ptr);
3121
+
3122
+ It is possible to have libpng flush any pending output, either manually,
3123
+ or automatically after a certain number of lines have been written. To
3124
+ flush the output stream a single time call:
3125
+
3126
+ png_write_flush(png_ptr);
3127
+
3128
+ and to have libpng flush the output stream periodically after a certain
3129
+ number of scanlines have been written, call:
3130
+
3131
+ png_set_flush(png_ptr, nrows);
3132
+
3133
+ Note that the distance between rows is from the last time png_write_flush()
3134
+ was called, or the first row of the image if it has never been called.
3135
+ So if you write 50 lines, and then png_set_flush 25, it will flush the
3136
+ output on the next scanline, and every 25 lines thereafter, unless
3137
+ png_write_flush() is called before 25 more lines have been written.
3138
+ If nrows is too small (less than about 10 lines for a 640 pixel wide
3139
+ RGB image) the image compression may decrease noticeably (although this
3140
+ may be acceptable for real-time applications). Infrequent flushing will
3141
+ only degrade the compression performance by a few percent over images
3142
+ that do not use flushing.
3143
+
3144
+ .SS Writing the image data
3145
+
3146
+ That's it for the transformations. Now you can write the image data.
3147
+ The simplest way to do this is in one function call. If you have the
3148
+ whole image in memory, you can just call png_write_image() and libpng
3149
+ will write the image. You will need to pass in an array of pointers to
3150
+ each row. This function automatically handles interlacing, so you don't
3151
+ need to call png_set_interlace_handling() or call this function multiple
3152
+ times, or any of that other stuff necessary with png_write_rows().
3153
+
3154
+ png_write_image(png_ptr, row_pointers);
3155
+
3156
+ where row_pointers is:
3157
+
3158
+ png_byte *row_pointers[height];
3159
+
3160
+ You can point to void or char or whatever you use for pixels.
3161
+
3162
+ If you don't want to write the whole image at once, you can
3163
+ use png_write_rows() instead. If the file is not interlaced,
3164
+ this is simple:
3165
+
3166
+ png_write_rows(png_ptr, row_pointers,
3167
+ number_of_rows);
3168
+
3169
+ row_pointers is the same as in the png_write_image() call.
3170
+
3171
+ If you are just writing one row at a time, you can do this with
3172
+ a single row_pointer instead of an array of row_pointers:
3173
+
3174
+ png_bytep row_pointer = row;
3175
+
3176
+ png_write_row(png_ptr, row_pointer);
3177
+
3178
+ When the file is interlaced, things can get a good deal more complicated.
3179
+ The only currently (as of the PNG Specification version 1.2, dated July
3180
+ 1999) defined interlacing scheme for PNG files is the "Adam7" interlace
3181
+ scheme, that breaks down an image into seven smaller images of varying
3182
+ size. libpng will build these images for you, or you can do them
3183
+ yourself. If you want to build them yourself, see the PNG specification
3184
+ for details of which pixels to write when.
3185
+
3186
+ If you don't want libpng to handle the interlacing details, just
3187
+ use png_set_interlace_handling() and call png_write_rows() the
3188
+ correct number of times to write all seven sub-images.
3189
+
3190
+ If you want libpng to build the sub-images, call this before you start
3191
+ writing any rows:
3192
+
3193
+ number_of_passes =
3194
+ png_set_interlace_handling(png_ptr);
3195
+
3196
+ This will return the number of passes needed. Currently, this is seven,
3197
+ but may change if another interlace type is added.
3198
+
3199
+ Then write the complete image number_of_passes times.
3200
+
3201
+ png_write_rows(png_ptr, row_pointers,
3202
+ number_of_rows);
3203
+
3204
+ As some of these rows are not used, and thus return immediately, you may
3205
+ want to read about interlacing in the PNG specification, and only update
3206
+ the rows that are actually used.
3207
+
3208
+ .SS Finishing a sequential write
3209
+
3210
+ After you are finished writing the image, you should finish writing
3211
+ the file. If you are interested in writing comments or time, you should
3212
+ pass an appropriately filled png_info pointer. If you are not interested,
3213
+ you can pass NULL.
3214
+
3215
+ png_write_end(png_ptr, info_ptr);
3216
+
3217
+ When you are done, you can free all memory used by libpng like this:
3218
+
3219
+ png_destroy_write_struct(&png_ptr, &info_ptr);
3220
+
3221
+ It is also possible to individually free the info_ptr members that
3222
+ point to libpng-allocated storage with the following function:
3223
+
3224
+ png_free_data(png_ptr, info_ptr, mask, seq)
3225
+ mask - identifies data to be freed, a mask
3226
+ containing the bitwise OR of one or
3227
+ more of
3228
+ PNG_FREE_PLTE, PNG_FREE_TRNS,
3229
+ PNG_FREE_HIST, PNG_FREE_ICCP,
3230
+ PNG_FREE_PCAL, PNG_FREE_ROWS,
3231
+ PNG_FREE_SCAL, PNG_FREE_SPLT,
3232
+ PNG_FREE_TEXT, PNG_FREE_UNKN,
3233
+ or simply PNG_FREE_ALL
3234
+ seq - sequence number of item to be freed
3235
+ (-1 for all items)
3236
+
3237
+ This function may be safely called when the relevant storage has
3238
+ already been freed, or has not yet been allocated, or was allocated
3239
+ by the user and not by libpng, and will in those cases do nothing.
3240
+ The "seq" parameter is ignored if only one item of the selected data
3241
+ type, such as PLTE, is allowed. If "seq" is not -1, and multiple items
3242
+ are allowed for the data type identified in the mask, such as text or
3243
+ sPLT, only the n'th item in the structure is freed, where n is "seq".
3244
+
3245
+ If you allocated data such as a palette that you passed in to libpng
3246
+ with png_set_*, you must not free it until just before the call to
3247
+ png_destroy_write_struct().
3248
+
3249
+ The default behavior is only to free data that was allocated internally
3250
+ by libpng. This can be changed, so that libpng will not free the data,
3251
+ or so that it will free data that was allocated by the user with png_malloc()
3252
+ or png_zalloc() and passed in via a png_set_*() function, with
3253
+
3254
+ png_data_freer(png_ptr, info_ptr, freer, mask)
3255
+ mask - which data elements are affected
3256
+ same choices as in png_free_data()
3257
+ freer - one of
3258
+ PNG_DESTROY_WILL_FREE_DATA
3259
+ PNG_SET_WILL_FREE_DATA
3260
+ PNG_USER_WILL_FREE_DATA
3261
+
3262
+ For example, to transfer responsibility for some data from a read structure
3263
+ to a write structure, you could use
3264
+
3265
+ png_data_freer(read_ptr, read_info_ptr,
3266
+ PNG_USER_WILL_FREE_DATA,
3267
+ PNG_FREE_PLTE|PNG_FREE_tRNS|PNG_FREE_hIST)
3268
+ png_data_freer(write_ptr, write_info_ptr,
3269
+ PNG_DESTROY_WILL_FREE_DATA,
3270
+ PNG_FREE_PLTE|PNG_FREE_tRNS|PNG_FREE_hIST)
3271
+
3272
+ thereby briefly reassigning responsibility for freeing to the user but
3273
+ immediately afterwards reassigning it once more to the write_destroy
3274
+ function. Having done this, it would then be safe to destroy the read
3275
+ structure and continue to use the PLTE, tRNS, and hIST data in the write
3276
+ structure.
3277
+
3278
+ This function only affects data that has already been allocated.
3279
+ You can call this function before calling after the png_set_*() functions
3280
+ to control whether the user or png_destroy_*() is supposed to free the data.
3281
+ When the user assumes responsibility for libpng-allocated data, the
3282
+ application must use
3283
+ png_free() to free it, and when the user transfers responsibility to libpng
3284
+ for data that the user has allocated, the user must have used png_malloc()
3285
+ or png_zalloc() to allocate it.
3286
+
3287
+ If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword
3288
+ separately, do not transfer responsibility for freeing text_ptr to libpng,
3289
+ because when libpng fills a png_text structure it combines these members with
3290
+ the key member, and png_free_data() will free only text_ptr.key. Similarly,
3291
+ if you transfer responsibility for free'ing text_ptr from libpng to your
3292
+ application, your application must not separately free those members.
3293
+ For a more compact example of writing a PNG image, see the file example.c.
3294
+
3295
+ .SH V. Modifying/Customizing libpng:
3296
+
3297
+ There are two issues here. The first is changing how libpng does
3298
+ standard things like memory allocation, input/output, and error handling.
3299
+ The second deals with more complicated things like adding new chunks,
3300
+ adding new transformations, and generally changing how libpng works.
3301
+ Both of those are compile-time issues; that is, they are generally
3302
+ determined at the time the code is written, and there is rarely a need
3303
+ to provide the user with a means of changing them.
3304
+
3305
+ Memory allocation, input/output, and error handling
3306
+
3307
+ All of the memory allocation, input/output, and error handling in libpng
3308
+ goes through callbacks that are user-settable. The default routines are
3309
+ in pngmem.c, pngrio.c, pngwio.c, and pngerror.c, respectively. To change
3310
+ these functions, call the appropriate png_set_*_fn() function.
3311
+
3312
+ Memory allocation is done through the functions png_malloc(), png_calloc(),
3313
+ and png_free(). These currently just call the standard C functions.
3314
+ png_calloc() calls png_malloc() and then png_memset() to clear the newly
3315
+ allocated memory to zero. If your pointers can't access more then 64K
3316
+ at a time, you will want to set MAXSEG_64K in zlib.h. Since it is
3317
+ unlikely that the method of handling memory allocation on a platform
3318
+ will change between applications, these functions must be modified in
3319
+ the library at compile time. If you prefer to use a different method
3320
+ of allocating and freeing data, you can use png_create_read_struct_2() or
3321
+ png_create_write_struct_2() to register your own functions as described
3322
+ above. These functions also provide a void pointer that can be retrieved
3323
+ via
3324
+
3325
+ mem_ptr=png_get_mem_ptr(png_ptr);
3326
+
3327
+ Your replacement memory functions must have prototypes as follows:
3328
+
3329
+ png_voidp malloc_fn(png_structp png_ptr,
3330
+ png_alloc_size_t size);
3331
+ void free_fn(png_structp png_ptr, png_voidp ptr);
3332
+
3333
+ Your malloc_fn() must return NULL in case of failure. The png_malloc()
3334
+ function will normally call png_error() if it receives a NULL from the
3335
+ system memory allocator or from your replacement malloc_fn().
3336
+
3337
+ Your free_fn() will never be called with a NULL ptr, since libpng's
3338
+ png_free() checks for NULL before calling free_fn().
3339
+
3340
+ Input/Output in libpng is done through png_read() and png_write(),
3341
+ which currently just call fread() and fwrite(). The FILE * is stored in
3342
+ png_struct and is initialized via png_init_io(). If you wish to change
3343
+ the method of I/O, the library supplies callbacks that you can set
3344
+ through the function png_set_read_fn() and png_set_write_fn() at run
3345
+ time, instead of calling the png_init_io() function. These functions
3346
+ also provide a void pointer that can be retrieved via the function
3347
+ png_get_io_ptr(). For example:
3348
+
3349
+ png_set_read_fn(png_structp read_ptr,
3350
+ voidp read_io_ptr, png_rw_ptr read_data_fn)
3351
+
3352
+ png_set_write_fn(png_structp write_ptr,
3353
+ voidp write_io_ptr, png_rw_ptr write_data_fn,
3354
+ png_flush_ptr output_flush_fn);
3355
+
3356
+ voidp read_io_ptr = png_get_io_ptr(read_ptr);
3357
+ voidp write_io_ptr = png_get_io_ptr(write_ptr);
3358
+
3359
+ The replacement I/O functions must have prototypes as follows:
3360
+
3361
+ void user_read_data(png_structp png_ptr,
3362
+ png_bytep data, png_size_t length);
3363
+ void user_write_data(png_structp png_ptr,
3364
+ png_bytep data, png_size_t length);
3365
+ void user_flush_data(png_structp png_ptr);
3366
+
3367
+ The user_read_data() function is responsible for detecting and
3368
+ handling end-of-data errors.
3369
+
3370
+ Supplying NULL for the read, write, or flush functions sets them back
3371
+ to using the default C stream functions, which expect the io_ptr to
3372
+ point to a standard *FILE structure. It is probably a mistake
3373
+ to use NULL for one of write_data_fn and output_flush_fn but not both
3374
+ of them, unless you have built libpng with PNG_NO_WRITE_FLUSH defined.
3375
+ It is an error to read from a write stream, and vice versa.
3376
+
3377
+ Error handling in libpng is done through png_error() and png_warning().
3378
+ Errors handled through png_error() are fatal, meaning that png_error()
3379
+ should never return to its caller. Currently, this is handled via
3380
+ setjmp() and longjmp() (unless you have compiled libpng with
3381
+ PNG_NO_SETJMP, in which case it is handled via PNG_ABORT()),
3382
+ but you could change this to do things like exit() if you should wish,
3383
+ as long as your function does not return.
3384
+
3385
+ On non-fatal errors, png_warning() is called
3386
+ to print a warning message, and then control returns to the calling code.
3387
+ By default png_error() and png_warning() print a message on stderr via
3388
+ fprintf() unless the library is compiled with PNG_NO_CONSOLE_IO defined
3389
+ (because you don't want the messages) or PNG_NO_STDIO defined (because
3390
+ fprintf() isn't available). If you wish to change the behavior of the error
3391
+ functions, you will need to set up your own message callbacks. These
3392
+ functions are normally supplied at the time that the png_struct is created.
3393
+ It is also possible to redirect errors and warnings to your own replacement
3394
+ functions after png_create_*_struct() has been called by calling:
3395
+
3396
+ png_set_error_fn(png_structp png_ptr,
3397
+ png_voidp error_ptr, png_error_ptr error_fn,
3398
+ png_error_ptr warning_fn);
3399
+
3400
+ png_voidp error_ptr = png_get_error_ptr(png_ptr);
3401
+
3402
+ If NULL is supplied for either error_fn or warning_fn, then the libpng
3403
+ default function will be used, calling fprintf() and/or longjmp() if a
3404
+ problem is encountered. The replacement error functions should have
3405
+ parameters as follows:
3406
+
3407
+ void user_error_fn(png_structp png_ptr,
3408
+ png_const_charp error_msg);
3409
+ void user_warning_fn(png_structp png_ptr,
3410
+ png_const_charp warning_msg);
3411
+
3412
+ The motivation behind using setjmp() and longjmp() is the C++ throw and
3413
+ catch exception handling methods. This makes the code much easier to write,
3414
+ as there is no need to check every return code of every function call.
3415
+ However, there are some uncertainties about the status of local variables
3416
+ after a longjmp, so the user may want to be careful about doing anything
3417
+ after setjmp returns non-zero besides returning itself. Consult your
3418
+ compiler documentation for more details. For an alternative approach, you
3419
+ may wish to use the "cexcept" facility (see http://cexcept.sourceforge.net).
3420
+
3421
+ .SS Custom chunks
3422
+
3423
+ If you need to read or write custom chunks, you may need to get deeper
3424
+ into the libpng code. The library now has mechanisms for storing
3425
+ and writing chunks of unknown type; you can even declare callbacks
3426
+ for custom chunks. However, this may not be good enough if the
3427
+ library code itself needs to know about interactions between your
3428
+ chunk and existing `intrinsic' chunks.
3429
+
3430
+ If you need to write a new intrinsic chunk, first read the PNG
3431
+ specification. Acquire a first level of understanding of how it works.
3432
+ Pay particular attention to the sections that describe chunk names,
3433
+ and look at how other chunks were designed, so you can do things
3434
+ similarly. Second, check out the sections of libpng that read and
3435
+ write chunks. Try to find a chunk that is similar to yours and use
3436
+ it as a template. More details can be found in the comments inside
3437
+ the code. It is best to handle unknown chunks in a generic method,
3438
+ via callback functions, instead of by modifying libpng functions.
3439
+
3440
+ If you wish to write your own transformation for the data, look through
3441
+ the part of the code that does the transformations, and check out some of
3442
+ the simpler ones to get an idea of how they work. Try to find a similar
3443
+ transformation to the one you want to add and copy off of it. More details
3444
+ can be found in the comments inside the code itself.
3445
+
3446
+ .SS Configuring for 16 bit platforms
3447
+
3448
+ You will want to look into zconf.h to tell zlib (and thus libpng) that
3449
+ it cannot allocate more then 64K at a time. Even if you can, the memory
3450
+ won't be accessible. So limit zlib and libpng to 64K by defining MAXSEG_64K.
3451
+
3452
+ .SS Configuring for DOS
3453
+
3454
+ For DOS users who only have access to the lower 640K, you will
3455
+ have to limit zlib's memory usage via a png_set_compression_mem_level()
3456
+ call. See zlib.h or zconf.h in the zlib library for more information.
3457
+
3458
+ .SS Configuring for Medium Model
3459
+
3460
+ Libpng's support for medium model has been tested on most of the popular
3461
+ compilers. Make sure MAXSEG_64K gets defined, USE_FAR_KEYWORD gets
3462
+ defined, and FAR gets defined to far in pngconf.h, and you should be
3463
+ all set. Everything in the library (except for zlib's structure) is
3464
+ expecting far data. You must use the typedefs with the p or pp on
3465
+ the end for pointers (or at least look at them and be careful). Make
3466
+ note that the rows of data are defined as png_bytepp, which is an
3467
+ unsigned char far * far *.
3468
+
3469
+ .SS Configuring for gui/windowing platforms:
3470
+
3471
+ You will need to write new error and warning functions that use the GUI
3472
+ interface, as described previously, and set them to be the error and
3473
+ warning functions at the time that png_create_*_struct() is called,
3474
+ in order to have them available during the structure initialization.
3475
+ They can be changed later via png_set_error_fn(). On some compilers,
3476
+ you may also have to change the memory allocators (png_malloc, etc.).
3477
+
3478
+ .SS Configuring for compiler xxx:
3479
+
3480
+ All includes for libpng are in pngconf.h. If you need to add, change
3481
+ or delete an include, this is the place to do it.
3482
+ The includes that are not needed outside libpng are placed in pngpriv.h,
3483
+ which is only used by the routines inside libpng itself.
3484
+ The files in libpng proper only include pngpriv.h and png.h, which
3485
+ in turn includes pngconf.h.
3486
+
3487
+ .SS Configuring zlib:
3488
+
3489
+ There are special functions to configure the compression. Perhaps the
3490
+ most useful one changes the compression level, which currently uses
3491
+ input compression values in the range 0 - 9. The library normally
3492
+ uses the default compression level (Z_DEFAULT_COMPRESSION = 6). Tests
3493
+ have shown that for a large majority of images, compression values in
3494
+ the range 3-6 compress nearly as well as higher levels, and do so much
3495
+ faster. For online applications it may be desirable to have maximum speed
3496
+ (Z_BEST_SPEED = 1). With versions of zlib after v0.99, you can also
3497
+ specify no compression (Z_NO_COMPRESSION = 0), but this would create
3498
+ files larger than just storing the raw bitmap. You can specify the
3499
+ compression level by calling:
3500
+
3501
+ png_set_compression_level(png_ptr, level);
3502
+
3503
+ Another useful one is to reduce the memory level used by the library.
3504
+ The memory level defaults to 8, but it can be lowered if you are
3505
+ short on memory (running DOS, for example, where you only have 640K).
3506
+ Note that the memory level does have an effect on compression; among
3507
+ other things, lower levels will result in sections of incompressible
3508
+ data being emitted in smaller stored blocks, with a correspondingly
3509
+ larger relative overhead of up to 15% in the worst case.
3510
+
3511
+ png_set_compression_mem_level(png_ptr, level);
3512
+
3513
+ The other functions are for configuring zlib. They are not recommended
3514
+ for normal use and may result in writing an invalid PNG file. See
3515
+ zlib.h for more information on what these mean.
3516
+
3517
+ png_set_compression_strategy(png_ptr,
3518
+ strategy);
3519
+ png_set_compression_window_bits(png_ptr,
3520
+ window_bits);
3521
+ png_set_compression_method(png_ptr, method);
3522
+ png_set_compression_buffer_size(png_ptr, size);
3523
+
3524
+ .SS Controlling row filtering
3525
+
3526
+ If you want to control whether libpng uses filtering or not, which
3527
+ filters are used, and how it goes about picking row filters, you
3528
+ can call one of these functions. The selection and configuration
3529
+ of row filters can have a significant impact on the size and
3530
+ encoding speed and a somewhat lesser impact on the decoding speed
3531
+ of an image. Filtering is enabled by default for RGB and grayscale
3532
+ images (with and without alpha), but not for paletted images nor
3533
+ for any images with bit depths less than 8 bits/pixel.
3534
+
3535
+ The 'method' parameter sets the main filtering method, which is
3536
+ currently only '0' in the PNG 1.2 specification. The 'filters'
3537
+ parameter sets which filter(s), if any, should be used for each
3538
+ scanline. Possible values are PNG_ALL_FILTERS and PNG_NO_FILTERS
3539
+ to turn filtering on and off, respectively.
3540
+
3541
+ Individual filter types are PNG_FILTER_NONE, PNG_FILTER_SUB,
3542
+ PNG_FILTER_UP, PNG_FILTER_AVG, PNG_FILTER_PAETH, which can be bitwise
3543
+ ORed together with '|' to specify one or more filters to use.
3544
+ These filters are described in more detail in the PNG specification.
3545
+ If you intend to change the filter type during the course of writing
3546
+ the image, you should start with flags set for all of the filters
3547
+ you intend to use so that libpng can initialize its internal
3548
+ structures appropriately for all of the filter types. (Note that this
3549
+ means the first row must always be adaptively filtered, because libpng
3550
+ currently does not allocate the filter buffers until png_write_row()
3551
+ is called for the first time.)
3552
+
3553
+ filters = PNG_FILTER_NONE | PNG_FILTER_SUB
3554
+ PNG_FILTER_UP | PNG_FILTER_AVG |
3555
+ PNG_FILTER_PAETH | PNG_ALL_FILTERS;
3556
+
3557
+ png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE,
3558
+ filters);
3559
+ The second parameter can also be
3560
+ PNG_INTRAPIXEL_DIFFERENCING if you are
3561
+ writing a PNG to be embedded in a MNG
3562
+ datastream. This parameter must be the
3563
+ same as the value of filter_method used
3564
+ in png_set_IHDR().
3565
+
3566
+ It is also possible to influence how libpng chooses from among the
3567
+ available filters. This is done in one or both of two ways - by
3568
+ telling it how important it is to keep the same filter for successive
3569
+ rows, and by telling it the relative computational costs of the filters.
3570
+
3571
+ double weights[3] = {1.5, 1.3, 1.1},
3572
+ costs[PNG_FILTER_VALUE_LAST] =
3573
+ {1.0, 1.3, 1.3, 1.5, 1.7};
3574
+
3575
+ png_set_filter_heuristics(png_ptr,
3576
+ PNG_FILTER_HEURISTIC_WEIGHTED, 3,
3577
+ weights, costs);
3578
+
3579
+ The weights are multiplying factors that indicate to libpng that the
3580
+ row filter should be the same for successive rows unless another row filter
3581
+ is that many times better than the previous filter. In the above example,
3582
+ if the previous 3 filters were SUB, SUB, NONE, the SUB filter could have a
3583
+ "sum of absolute differences" 1.5 x 1.3 times higher than other filters
3584
+ and still be chosen, while the NONE filter could have a sum 1.1 times
3585
+ higher than other filters and still be chosen. Unspecified weights are
3586
+ taken to be 1.0, and the specified weights should probably be declining
3587
+ like those above in order to emphasize recent filters over older filters.
3588
+
3589
+ The filter costs specify for each filter type a relative decoding cost
3590
+ to be considered when selecting row filters. This means that filters
3591
+ with higher costs are less likely to be chosen over filters with lower
3592
+ costs, unless their "sum of absolute differences" is that much smaller.
3593
+ The costs do not necessarily reflect the exact computational speeds of
3594
+ the various filters, since this would unduly influence the final image
3595
+ size.
3596
+
3597
+ Note that the numbers above were invented purely for this example and
3598
+ are given only to help explain the function usage. Little testing has
3599
+ been done to find optimum values for either the costs or the weights.
3600
+
3601
+ .SS Removing unwanted object code
3602
+
3603
+ There are a bunch of #define's in pngconf.h that control what parts of
3604
+ libpng are compiled. All the defines end in _SUPPORTED. If you are
3605
+ never going to use a capability, you can change the #define to #undef
3606
+ before recompiling libpng and save yourself code and data space, or
3607
+ you can turn off individual capabilities with defines that begin with
3608
+ PNG_NO_.
3609
+
3610
+ You can also turn all of the transforms and ancillary chunk capabilities
3611
+ off en masse with compiler directives that define
3612
+ PNG_NO_READ[or WRITE]_TRANSFORMS, or PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS,
3613
+ or all four,
3614
+ along with directives to turn on any of the capabilities that you do
3615
+ want. The PNG_NO_READ[or WRITE]_TRANSFORMS directives disable the extra
3616
+ transformations but still leave the library fully capable of reading
3617
+ and writing PNG files with all known public chunks. Use of the
3618
+ PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS directive produces a library
3619
+ that is incapable of reading or writing ancillary chunks. If you are
3620
+ not using the progressive reading capability, you can turn that off
3621
+ with PNG_NO_PROGRESSIVE_READ (don't confuse this with the INTERLACING
3622
+ capability, which you'll still have).
3623
+
3624
+ All the reading and writing specific code are in separate files, so the
3625
+ linker should only grab the files it needs. However, if you want to
3626
+ make sure, or if you are building a stand alone library, all the
3627
+ reading files start with pngr and all the writing files start with
3628
+ pngw. The files that don't match either (like png.c, pngtrans.c, etc.)
3629
+ are used for both reading and writing, and always need to be included.
3630
+ The progressive reader is in pngpread.c
3631
+
3632
+ If you are creating or distributing a dynamically linked library (a .so
3633
+ or DLL file), you should not remove or disable any parts of the library,
3634
+ as this will cause applications linked with different versions of the
3635
+ library to fail if they call functions not available in your library.
3636
+ The size of the library itself should not be an issue, because only
3637
+ those sections that are actually used will be loaded into memory.
3638
+
3639
+ .SS Requesting debug printout
3640
+
3641
+ The macro definition PNG_DEBUG can be used to request debugging
3642
+ printout. Set it to an integer value in the range 0 to 3. Higher
3643
+ numbers result in increasing amounts of debugging information. The
3644
+ information is printed to the "stderr" file, unless another file
3645
+ name is specified in the PNG_DEBUG_FILE macro definition.
3646
+
3647
+ When PNG_DEBUG > 0, the following functions (macros) become available:
3648
+
3649
+ png_debug(level, message)
3650
+ png_debug1(level, message, p1)
3651
+ png_debug2(level, message, p1, p2)
3652
+
3653
+ in which "level" is compared to PNG_DEBUG to decide whether to print
3654
+ the message, "message" is the formatted string to be printed,
3655
+ and p1 and p2 are parameters that are to be embedded in the string
3656
+ according to printf-style formatting directives. For example,
3657
+
3658
+ png_debug1(2, "foo=%d\n", foo);
3659
+
3660
+ is expanded to
3661
+
3662
+ if(PNG_DEBUG > 2)
3663
+ fprintf(PNG_DEBUG_FILE, "foo=%d\n", foo);
3664
+
3665
+ When PNG_DEBUG is defined but is zero, the macros aren't defined, but you
3666
+ can still use PNG_DEBUG to control your own debugging:
3667
+
3668
+ #ifdef PNG_DEBUG
3669
+ fprintf(stderr, ...
3670
+ #endif
3671
+
3672
+ When PNG_DEBUG = 1, the macros are defined, but only png_debug statements
3673
+ having level = 0 will be printed. There aren't any such statements in
3674
+ this version of libpng, but if you insert some they will be printed.
3675
+
3676
+ .SH VI. MNG support
3677
+
3678
+ The MNG specification (available at http://www.libpng.org/pub/mng) allows
3679
+ certain extensions to PNG for PNG images that are embedded in MNG datastreams.
3680
+ Libpng can support some of these extensions. To enable them, use the
3681
+ png_permit_mng_features() function:
3682
+
3683
+ feature_set = png_permit_mng_features(png_ptr, mask)
3684
+ mask is a png_uint_32 containing the bitwise OR of the
3685
+ features you want to enable. These include
3686
+ PNG_FLAG_MNG_EMPTY_PLTE
3687
+ PNG_FLAG_MNG_FILTER_64
3688
+ PNG_ALL_MNG_FEATURES
3689
+ feature_set is a png_uint_32 that is the bitwise AND of
3690
+ your mask with the set of MNG features that is
3691
+ supported by the version of libpng that you are using.
3692
+
3693
+ It is an error to use this function when reading or writing a standalone
3694
+ PNG file with the PNG 8-byte signature. The PNG datastream must be wrapped
3695
+ in a MNG datastream. As a minimum, it must have the MNG 8-byte signature
3696
+ and the MHDR and MEND chunks. Libpng does not provide support for these
3697
+ or any other MNG chunks; your application must provide its own support for
3698
+ them. You may wish to consider using libmng (available at
3699
+ http://www.libmng.com) instead.
3700
+
3701
+ .SH VII. Changes to Libpng from version 0.88
3702
+
3703
+ It should be noted that versions of libpng later than 0.96 are not
3704
+ distributed by the original libpng author, Guy Schalnat, nor by
3705
+ Andreas Dilger, who had taken over from Guy during 1996 and 1997, and
3706
+ distributed versions 0.89 through 0.96, but rather by another member
3707
+ of the original PNG Group, Glenn Randers-Pehrson. Guy and Andreas are
3708
+ still alive and well, but they have moved on to other things.
3709
+
3710
+ The old libpng functions png_read_init(), png_write_init(),
3711
+ png_info_init(), png_read_destroy(), and png_write_destroy() have been
3712
+ moved to PNG_INTERNAL in version 0.95 to discourage their use. These
3713
+ functions will be removed from libpng version 2.0.0.
3714
+
3715
+ The preferred method of creating and initializing the libpng structures is
3716
+ via the png_create_read_struct(), png_create_write_struct(), and
3717
+ png_create_info_struct() because they isolate the size of the structures
3718
+ from the application, allow version error checking, and also allow the
3719
+ use of custom error handling routines during the initialization, which
3720
+ the old functions do not. The functions png_read_destroy() and
3721
+ png_write_destroy() do not actually free the memory that libpng
3722
+ allocated for these structs, but just reset the data structures, so they
3723
+ can be used instead of png_destroy_read_struct() and
3724
+ png_destroy_write_struct() if you feel there is too much system overhead
3725
+ allocating and freeing the png_struct for each image read.
3726
+
3727
+ Setting the error callbacks via png_set_message_fn() before
3728
+ png_read_init() as was suggested in libpng-0.88 is no longer supported
3729
+ because this caused applications that do not use custom error functions
3730
+ to fail if the png_ptr was not initialized to zero. It is still possible
3731
+ to set the error callbacks AFTER png_read_init(), or to change them with
3732
+ png_set_error_fn(), which is essentially the same function, but with a new
3733
+ name to force compilation errors with applications that try to use the old
3734
+ method.
3735
+
3736
+ Starting with version 1.0.7, you can find out which version of the library
3737
+ you are using at run-time:
3738
+
3739
+ png_uint_32 libpng_vn = png_access_version_number();
3740
+
3741
+ The number libpng_vn is constructed from the major version, minor
3742
+ version with leading zero, and release number with leading zero,
3743
+ (e.g., libpng_vn for version 1.0.7 is 10007).
3744
+
3745
+ You can also check which version of png.h you used when compiling your
3746
+ application:
3747
+
3748
+ png_uint_32 application_vn = PNG_LIBPNG_VER;
3749
+
3750
+ .SH VIII. Changes to Libpng from version 1.0.x to 1.2.x
3751
+
3752
+ Support for user memory management was enabled by default. To
3753
+ accomplish this, the functions png_create_read_struct_2(),
3754
+ png_create_write_struct_2(), png_set_mem_fn(), png_get_mem_ptr(),
3755
+ png_malloc_default(), and png_free_default() were added.
3756
+
3757
+ Support for the iTXt chunk has been enabled by default as of
3758
+ version 1.2.41.
3759
+
3760
+ Support for certain MNG features was enabled.
3761
+
3762
+ Support for numbered error messages was added. However, we never got
3763
+ around to actually numbering the error messages. The function
3764
+ png_set_strip_error_numbers() was added (Note: the prototype for this
3765
+ function was inadvertently removed from png.h in PNG_NO_ASSEMBLER_CODE
3766
+ builds of libpng-1.2.15. It was restored in libpng-1.2.36).
3767
+
3768
+ The png_malloc_warn() function was added at libpng-1.2.3. This issues
3769
+ a png_warning and returns NULL instead of aborting when it fails to
3770
+ acquire the requested memory allocation.
3771
+
3772
+ Support for setting user limits on image width and height was enabled
3773
+ by default. The functions png_set_user_limits(), png_get_user_width_max(),
3774
+ and png_get_user_height_max() were added at libpng-1.2.6.
3775
+
3776
+ The png_set_add_alpha() function was added at libpng-1.2.7.
3777
+
3778
+ The function png_set_expand_gray_1_2_4_to_8() was added at libpng-1.2.9.
3779
+ Unlike png_set_gray_1_2_4_to_8(), the new function does not expand the
3780
+ tRNS chunk to alpha. The png_set_gray_1_2_4_to_8() function is
3781
+ deprecated.
3782
+
3783
+ A number of macro definitions in support of runtime selection of
3784
+ assembler code features (especially Intel MMX code support) were
3785
+ added at libpng-1.2.0:
3786
+
3787
+ PNG_ASM_FLAG_MMX_SUPPORT_COMPILED
3788
+ PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU
3789
+ PNG_ASM_FLAG_MMX_READ_COMBINE_ROW
3790
+ PNG_ASM_FLAG_MMX_READ_INTERLACE
3791
+ PNG_ASM_FLAG_MMX_READ_FILTER_SUB
3792
+ PNG_ASM_FLAG_MMX_READ_FILTER_UP
3793
+ PNG_ASM_FLAG_MMX_READ_FILTER_AVG
3794
+ PNG_ASM_FLAG_MMX_READ_FILTER_PAETH
3795
+ PNG_ASM_FLAGS_INITIALIZED
3796
+ PNG_MMX_READ_FLAGS
3797
+ PNG_MMX_FLAGS
3798
+ PNG_MMX_WRITE_FLAGS
3799
+ PNG_MMX_FLAGS
3800
+
3801
+ We added the following functions in support of runtime
3802
+ selection of assembler code features:
3803
+
3804
+ png_get_mmx_flagmask()
3805
+ png_set_mmx_thresholds()
3806
+ png_get_asm_flags()
3807
+ png_get_mmx_bitdepth_threshold()
3808
+ png_get_mmx_rowbytes_threshold()
3809
+ png_set_asm_flags()
3810
+
3811
+ We replaced all of these functions with simple stubs in libpng-1.2.20,
3812
+ when the Intel assembler code was removed due to a licensing issue.
3813
+
3814
+ These macros are deprecated:
3815
+
3816
+ PNG_READ_TRANSFORMS_NOT_SUPPORTED
3817
+ PNG_PROGRESSIVE_READ_NOT_SUPPORTED
3818
+ PNG_NO_SEQUENTIAL_READ_SUPPORTED
3819
+ PNG_WRITE_TRANSFORMS_NOT_SUPPORTED
3820
+ PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED
3821
+ PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED
3822
+
3823
+ They have been replaced, respectively, by:
3824
+
3825
+ PNG_NO_READ_TRANSFORMS
3826
+ PNG_NO_PROGRESSIVE_READ
3827
+ PNG_NO_SEQUENTIAL_READ
3828
+ PNG_NO_WRITE_TRANSFORMS
3829
+ PNG_NO_READ_ANCILLARY_CHUNKS
3830
+ PNG_NO_WRITE_ANCILLARY_CHUNKS
3831
+
3832
+ PNG_MAX_UINT was replaced with PNG_UINT_31_MAX. It has been
3833
+ deprecated since libpng-1.0.16 and libpng-1.2.6.
3834
+
3835
+ The function
3836
+ png_check_sig(sig, num)
3837
+ was replaced with
3838
+ !png_sig_cmp(sig, 0, num)
3839
+ It has been deprecated since libpng-0.90.
3840
+
3841
+ The function
3842
+ png_set_gray_1_2_4_to_8()
3843
+ which also expands tRNS to alpha was replaced with
3844
+ png_set_expand_gray_1_2_4_to_8()
3845
+ which does not. It has been deprecated since libpng-1.0.18 and 1.2.9.
3846
+
3847
+ .SH IX. Changes to Libpng from version 1.0.x/1.2.x to 1.4.x
3848
+
3849
+ Private libpng prototypes and macro definitions were moved from
3850
+ png.h and pngconf.h into a new pngpriv.h header file.
3851
+
3852
+ Functions png_set_benign_errors(), png_benign_error(), and
3853
+ png_chunk_benign_error() were added.
3854
+
3855
+ Support for setting the maximum amount of memory that the application
3856
+ will allocate for reading chunks was added, as a security measure.
3857
+ The functions png_set_chunk_cache_max() and png_get_chunk_cache_max()
3858
+ were added to the library.
3859
+
3860
+ We implemented support for I/O states by adding png_ptr member io_state
3861
+ and functions png_get_io_chunk_name() and png_get_io_state() in pngget.c
3862
+
3863
+ We added PNG_TRANSFORM_GRAY_TO_RGB to the available high-level
3864
+ input transforms.
3865
+
3866
+ Checking for and reporting of errors in the IHDR chunk is more thorough.
3867
+
3868
+ Support for global arrays was removed, to improve thread safety.
3869
+
3870
+ Some obsolete/deprecated macros and functions have been removed.
3871
+
3872
+ Typecasted NULL definitions such as
3873
+ #define png_voidp_NULL (png_voidp)NULL
3874
+ were eliminated. If you used these in your application, just use
3875
+ NULL instead.
3876
+
3877
+ The png_struct and info_struct members "trans" and "trans_values" were
3878
+ changed to "trans_alpha" and "trans_color", respectively.
3879
+
3880
+ The obsolete, unused pnggccrd.c and pngvcrd.c files and related makefiles
3881
+ were removed.
3882
+
3883
+ The PNG_1_0_X and PNG_1_2_X macros were eliminated.
3884
+
3885
+ The PNG_LEGACY_SUPPORTED macro was eliminated.
3886
+
3887
+ Many WIN32_WCE #ifdefs were removed.
3888
+
3889
+ The functions png_read_init(info_ptr), png_write_init(info_ptr),
3890
+ png_info_init(info_ptr), png_read_destroy(), and png_write_destroy()
3891
+ have been removed. They have been deprecated since libpng-0.95.
3892
+
3893
+ The png_permit_empty_plte() was removed. It has been deprecated
3894
+ since libpng-1.0.9. Use png_permit_mng_features() instead.
3895
+
3896
+ We removed the obsolete stub functions png_get_mmx_flagmask(),
3897
+ png_set_mmx_thresholds(), png_get_asm_flags(),
3898
+ png_get_mmx_bitdepth_threshold(), png_get_mmx_rowbytes_threshold(),
3899
+ png_set_asm_flags(), and png_mmx_supported()
3900
+
3901
+ We removed the obsolete png_check_sig(), png_memcpy_check(), and
3902
+ png_memset_check() functions. Instead use !png_sig_cmp(), png_memcpy(),
3903
+ and png_memset(), respectively.
3904
+
3905
+ The function png_set_gray_1_2_4_to_8() was removed. It has been
3906
+ deprecated since libpng-1.0.18 and 1.2.9, when it was replaced with
3907
+ png_set_expand_gray_1_2_4_to_8() because the former function also
3908
+ expanded palette images.
3909
+
3910
+ We changed the prototype for png_malloc() from
3911
+ png_malloc(png_structp png_ptr, png_uint_32 size)
3912
+ to
3913
+ png_malloc(png_structp png_ptr, png_alloc_size_t size)
3914
+
3915
+ This also applies to the prototype for the user replacement malloc_fn().
3916
+
3917
+ The png_calloc() function was added and is used in place of
3918
+ of "png_malloc(); png_memset();" except in the case in png_read_png()
3919
+ where the array consists of pointers; in this case a "for" loop is used
3920
+ after the png_malloc() to set the pointers to NULL, to give robust.
3921
+ behavior in case the application runs out of memory part-way through
3922
+ the process.
3923
+
3924
+ We changed the prototypes of png_get_compression_buffer_size() and
3925
+ png_set_compression_buffer_size() to work with png_size_t instead of
3926
+ png_uint_32.
3927
+
3928
+ Support for numbered error messages was removed by default, since we
3929
+ never got around to actually numbering the error messages. The function
3930
+ png_set_strip_error_numbers() was removed from the library by default.
3931
+
3932
+ The png_zalloc() and png_zfree() functions are no longer exported.
3933
+ The png_zalloc() function no longer zeroes out the memory that it
3934
+ allocates.
3935
+
3936
+ Support for dithering was disabled by default in libpng-1.4.0, because
3937
+ been well tested and doesn't actually "dither". The code was not
3938
+ removed, however, and could be enabled by building libpng with
3939
+ PNG_READ_DITHER_SUPPORTED defined. In libpng-1.4.2, this support
3940
+ was reenabled, but the function was renamed png_set_quantize() to
3941
+ reflect more accurately what it actually does. At the same time,
3942
+ the PNG_DITHER_[RED,GREEN_BLUE]_BITS macros were also renamed to
3943
+ PNG_QUANTIZE_[RED,GREEN,BLUE]_BITS.
3944
+
3945
+ We removed the trailing '.' from the warning and error messages.
3946
+
3947
+ .SH X. Detecting libpng
3948
+
3949
+ The png_get_io_ptr() function has been present since libpng-0.88, has never
3950
+ changed, and is unaffected by conditional compilation macros. It is the
3951
+ best choice for use in configure scripts for detecting the presence of any
3952
+ libpng version since 0.88. In an autoconf "configure.in" you could use
3953
+
3954
+ AC_CHECK_LIB(png, png_get_io_ptr, ...
3955
+
3956
+ .SH XI. Source code repository
3957
+
3958
+ Since about February 2009, version 1.2.34, libpng has been under "git" source
3959
+ control. The git repository was built from old libpng-x.y.z.tar.gz files
3960
+ going back to version 0.70. You can access the git repository (read only)
3961
+ at
3962
+
3963
+ git://libpng.git.sourceforge.net/gitroot/libpng
3964
+
3965
+ or you can browse it via "gitweb" at
3966
+
3967
+ http://libpng.git.sourceforge.net/git/gitweb.cgi?p=libpng
3968
+
3969
+ Patches can be sent to glennrp at users.sourceforge.net or to
3970
+ png-mng-implement at lists.sourceforge.net or you can upload them to
3971
+ the libpng bug tracker at
3972
+
3973
+ http://libpng.sourceforge.net
3974
+
3975
+ .SH XII. Coding style
3976
+
3977
+ Our coding style is similar to the "Allman" style, with curly
3978
+ braces on separate lines:
3979
+
3980
+ if (condition)
3981
+ {
3982
+ action;
3983
+ }
3984
+
3985
+ else if (another condition)
3986
+ {
3987
+ another action;
3988
+ }
3989
+
3990
+ The braces can be omitted from simple one-line actions:
3991
+
3992
+ if (condition)
3993
+ return (0);
3994
+
3995
+ We use 3-space indentation, except for continued statements which
3996
+ are usually indented the same as the first line of the statement
3997
+ plus four more spaces.
3998
+
3999
+ For macro definitions we use 2-space indentation, always leaving the "#"
4000
+ in the first column.
4001
+
4002
+ #ifndef PNG_NO_FEATURE
4003
+ # ifndef PNG_FEATURE_SUPPORTED
4004
+ # define PNG_FEATURE_SUPPORTED
4005
+ # endif
4006
+ #endif
4007
+
4008
+ Comments appear with the leading "/*" at the same indentation as
4009
+ the statement that follows the comment:
4010
+
4011
+ /* Single-line comment */
4012
+ statement;
4013
+
4014
+ /* This is a multiple-line
4015
+ * comment.
4016
+ */
4017
+ statement;
4018
+
4019
+ Very short comments can be placed after the end of the statement
4020
+ to which they pertain:
4021
+
4022
+ statement; /* comment */
4023
+
4024
+ We don't use C++ style ("//") comments. We have, however,
4025
+ used them in the past in some now-abandoned MMX assembler
4026
+ code.
4027
+
4028
+ Functions and their curly braces are not indented, and
4029
+ exported functions are marked with PNGAPI:
4030
+
4031
+ /* This is a public function that is visible to
4032
+ * application programers. It does thus-and-so.
4033
+ */
4034
+ void PNGAPI
4035
+ png_exported_function(png_ptr, png_info, foo)
4036
+ {
4037
+ body;
4038
+ }
4039
+
4040
+ The prototypes for all exported functions appear in png.h,
4041
+ above the comment that says
4042
+
4043
+ /* Maintainer: Put new public prototypes here ... */
4044
+
4045
+ We mark all non-exported functions with "/* PRIVATE */"":
4046
+
4047
+ void /* PRIVATE */
4048
+ png_non_exported_function(png_ptr, png_info, foo)
4049
+ {
4050
+ body;
4051
+ }
4052
+
4053
+ The prototypes for non-exported functions (except for those in
4054
+ pngtest) appear in
4055
+ pngpriv.h
4056
+ above the comment that says
4057
+
4058
+ /* Maintainer: Put new private prototypes here ^ and in libpngpf.3 */
4059
+
4060
+ The names of all exported functions and variables begin
4061
+ with "png_", and all publicly visible C preprocessor
4062
+ macros begin with "PNG_".
4063
+
4064
+ We put a space after each comma and after each semicolon
4065
+ in "for" statments, and we put spaces before and after each
4066
+ C binary operator and after "for" or "while", and before
4067
+ "?". We don't put a space between a typecast and the expression
4068
+ being cast, nor do we put one between a function name and the
4069
+ left parenthesis that follows it:
4070
+
4071
+ for (i = 2; i > 0; --i)
4072
+ y[i] = a(x) + (int)b;
4073
+
4074
+ We prefer #ifdef and #ifndef to #if defined() and if !defined()
4075
+ when there is only one macro being tested.
4076
+
4077
+ We do not use the TAB character for indentation in the C sources.
4078
+
4079
+ Lines do not exceed 80 characters.
4080
+
4081
+ Other rules can be inferred by inspecting the libpng source.
4082
+
4083
+ .SH XIII. Y2K Compliance in libpng
4084
+
4085
+ June 26, 2010
4086
+
4087
+ Since the PNG Development group is an ad-hoc body, we can't make
4088
+ an official declaration.
4089
+
4090
+ This is your unofficial assurance that libpng from version 0.71 and
4091
+ upward through 1.4.3 are Y2K compliant. It is my belief that earlier
4092
+ versions were also Y2K compliant.
4093
+
4094
+ Libpng only has three year fields. One is a 2-byte unsigned integer that
4095
+ will hold years up to 65535. The other two hold the date in text
4096
+ format, and will hold years up to 9999.
4097
+
4098
+ The integer is
4099
+ "png_uint_16 year" in png_time_struct.
4100
+
4101
+ The strings are
4102
+ "png_charp time_buffer" in png_struct and
4103
+ "near_time_buffer", which is a local character string in png.c.
4104
+
4105
+ There are seven time-related functions:
4106
+
4107
+ png_convert_to_rfc_1123() in png.c
4108
+ (formerly png_convert_to_rfc_1152() in error)
4109
+ png_convert_from_struct_tm() in pngwrite.c, called
4110
+ in pngwrite.c
4111
+ png_convert_from_time_t() in pngwrite.c
4112
+ png_get_tIME() in pngget.c
4113
+ png_handle_tIME() in pngrutil.c, called in pngread.c
4114
+ png_set_tIME() in pngset.c
4115
+ png_write_tIME() in pngwutil.c, called in pngwrite.c
4116
+
4117
+ All appear to handle dates properly in a Y2K environment. The
4118
+ png_convert_from_time_t() function calls gmtime() to convert from system
4119
+ clock time, which returns (year - 1900), which we properly convert to
4120
+ the full 4-digit year. There is a possibility that applications using
4121
+ libpng are not passing 4-digit years into the png_convert_to_rfc_1123()
4122
+ function, or that they are incorrectly passing only a 2-digit year
4123
+ instead of "year - 1900" into the png_convert_from_struct_tm() function,
4124
+ but this is not under our control. The libpng documentation has always
4125
+ stated that it works with 4-digit years, and the APIs have been
4126
+ documented as such.
4127
+
4128
+ The tIME chunk itself is also Y2K compliant. It uses a 2-byte unsigned
4129
+ integer to hold the year, and can hold years as large as 65535.
4130
+
4131
+ zlib, upon which libpng depends, is also Y2K compliant. It contains
4132
+ no date-related code.
4133
+
4134
+
4135
+ Glenn Randers-Pehrson
4136
+ libpng maintainer
4137
+ PNG Development Group
4138
+
4139
+ .SH NOTE
4140
+
4141
+ Note about libpng version numbers:
4142
+
4143
+ Due to various miscommunications, unforeseen code incompatibilities
4144
+ and occasional factors outside the authors' control, version numbering
4145
+ on the library has not always been consistent and straightforward.
4146
+ The following table summarizes matters since version 0.89c, which was
4147
+ the first widely used release:
4148
+
4149
+ source png.h png.h shared-lib
4150
+ version string int version
4151
+ ------- ------ ----- ----------
4152
+ 0.89c ("beta 3") 0.89 89 1.0.89
4153
+ 0.90 ("beta 4") 0.90 90 0.90
4154
+ 0.95 ("beta 5") 0.95 95 0.95
4155
+ 0.96 ("beta 6") 0.96 96 0.96
4156
+ 0.97b ("beta 7") 1.00.97 97 1.0.1
4157
+ 0.97c 0.97 97 2.0.97
4158
+ 0.98 0.98 98 2.0.98
4159
+ 0.99 0.99 98 2.0.99
4160
+ 0.99a-m 0.99 99 2.0.99
4161
+ 1.00 1.00 100 2.1.0
4162
+ 1.0.0 1.0.0 100 2.1.0
4163
+ 1.0.0 (from here on, the 100 2.1.0
4164
+ 1.0.1 png.h string is 10001 2.1.0
4165
+ 1.0.1a-e identical to the 10002 from here on, the
4166
+ 1.0.2 source version) 10002 shared library is 2.V
4167
+ 1.0.2a-b 10003 where V is the source
4168
+ 1.0.1 10001 code version except as
4169
+ 1.0.1a-e 10002 2.1.0.1a-e noted.
4170
+ 1.0.2 10002 2.1.0.2
4171
+ 1.0.2a-b 10003 2.1.0.2a-b
4172
+ 1.0.3 10003 2.1.0.3
4173
+ 1.0.3a-d 10004 2.1.0.3a-d
4174
+ 1.0.4 10004 2.1.0.4
4175
+ 1.0.4a-f 10005 2.1.0.4a-f
4176
+ 1.0.5 (+ 2 patches) 10005 2.1.0.5
4177
+ 1.0.5a-d 10006 2.1.0.5a-d
4178
+ 1.0.5e-r 10100 2.1.0.5e-r
4179
+ 1.0.5s-v 10006 2.1.0.5s-v
4180
+ 1.0.6 (+ 3 patches) 10006 2.1.0.6
4181
+ 1.0.6d-g 10007 2.1.0.6d-g
4182
+ 1.0.6h 10007 10.6h
4183
+ 1.0.6i 10007 10.6i
4184
+ 1.0.6j 10007 2.1.0.6j
4185
+ 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14
4186
+ 1.0.7beta15-18 1 10007 2.1.0.7beta15-18
4187
+ 1.0.7rc1-2 1 10007 2.1.0.7rc1-2
4188
+ 1.0.7 1 10007 2.1.0.7
4189
+ 1.0.8beta1-4 1 10008 2.1.0.8beta1-4
4190
+ 1.0.8rc1 1 10008 2.1.0.8rc1
4191
+ 1.0.8 1 10008 2.1.0.8
4192
+ 1.0.9beta1-6 1 10009 2.1.0.9beta1-6
4193
+ 1.0.9rc1 1 10009 2.1.0.9rc1
4194
+ 1.0.9beta7-10 1 10009 2.1.0.9beta7-10
4195
+ 1.0.9rc2 1 10009 2.1.0.9rc2
4196
+ 1.0.9 1 10009 2.1.0.9
4197
+ 1.0.10beta1 1 10010 2.1.0.10beta1
4198
+ 1.0.10rc1 1 10010 2.1.0.10rc1
4199
+ 1.0.10 1 10010 2.1.0.10
4200
+ 1.0.11beta1-3 1 10011 2.1.0.11beta1-3
4201
+ 1.0.11rc1 1 10011 2.1.0.11rc1
4202
+ 1.0.11 1 10011 2.1.0.11
4203
+ 1.0.12beta1-2 2 10012 2.1.0.12beta1-2
4204
+ 1.0.12rc1 2 10012 2.1.0.12rc1
4205
+ 1.0.12 2 10012 2.1.0.12
4206
+ 1.1.0a-f - 10100 2.1.1.0a-f abandoned
4207
+ 1.2.0beta1-2 2 10200 2.1.2.0beta1-2
4208
+ 1.2.0beta3-5 3 10200 3.1.2.0beta3-5
4209
+ 1.2.0rc1 3 10200 3.1.2.0rc1
4210
+ 1.2.0 3 10200 3.1.2.0
4211
+ 1.2.1beta-4 3 10201 3.1.2.1beta1-4
4212
+ 1.2.1rc1-2 3 10201 3.1.2.1rc1-2
4213
+ 1.2.1 3 10201 3.1.2.1
4214
+ 1.2.2beta1-6 12 10202 12.so.0.1.2.2beta1-6
4215
+ 1.0.13beta1 10 10013 10.so.0.1.0.13beta1
4216
+ 1.0.13rc1 10 10013 10.so.0.1.0.13rc1
4217
+ 1.2.2rc1 12 10202 12.so.0.1.2.2rc1
4218
+ 1.0.13 10 10013 10.so.0.1.0.13
4219
+ 1.2.2 12 10202 12.so.0.1.2.2
4220
+ 1.2.3rc1-6 12 10203 12.so.0.1.2.3rc1-6
4221
+ 1.2.3 12 10203 12.so.0.1.2.3
4222
+ 1.2.4beta1-3 13 10204 12.so.0.1.2.4beta1-3
4223
+ 1.2.4rc1 13 10204 12.so.0.1.2.4rc1
4224
+ 1.0.14 10 10014 10.so.0.1.0.14
4225
+ 1.2.4 13 10204 12.so.0.1.2.4
4226
+ 1.2.5beta1-2 13 10205 12.so.0.1.2.5beta1-2
4227
+ 1.0.15rc1 10 10015 10.so.0.1.0.15rc1
4228
+ 1.0.15 10 10015 10.so.0.1.0.15
4229
+ 1.2.5 13 10205 12.so.0.1.2.5
4230
+ 1.2.6beta1-4 13 10206 12.so.0.1.2.6beta1-4
4231
+ 1.2.6rc1-5 13 10206 12.so.0.1.2.6rc1-5
4232
+ 1.0.16 10 10016 10.so.0.1.0.16
4233
+ 1.2.6 13 10206 12.so.0.1.2.6
4234
+ 1.2.7beta1-2 13 10207 12.so.0.1.2.7beta1-2
4235
+ 1.0.17rc1 10 10017 12.so.0.1.0.17rc1
4236
+ 1.2.7rc1 13 10207 12.so.0.1.2.7rc1
4237
+ 1.0.17 10 10017 12.so.0.1.0.17
4238
+ 1.2.7 13 10207 12.so.0.1.2.7
4239
+ 1.2.8beta1-5 13 10208 12.so.0.1.2.8beta1-5
4240
+ 1.0.18rc1-5 10 10018 12.so.0.1.0.18rc1-5
4241
+ 1.2.8rc1-5 13 10208 12.so.0.1.2.8rc1-5
4242
+ 1.0.18 10 10018 12.so.0.1.0.18
4243
+ 1.2.8 13 10208 12.so.0.1.2.8
4244
+ 1.2.9beta1-3 13 10209 12.so.0.1.2.9beta1-3
4245
+ 1.2.9beta4-11 13 10209 12.so.0.9[.0]
4246
+ 1.2.9rc1 13 10209 12.so.0.9[.0]
4247
+ 1.2.9 13 10209 12.so.0.9[.0]
4248
+ 1.2.10beta1-7 13 10210 12.so.0.10[.0]
4249
+ 1.2.10rc1-2 13 10210 12.so.0.10[.0]
4250
+ 1.2.10 13 10210 12.so.0.10[.0]
4251
+ 1.4.0beta1-6 14 10400 14.so.0.0[.0]
4252
+ 1.2.11beta1-4 13 10210 12.so.0.11[.0]
4253
+ 1.4.0beta7-8 14 10400 14.so.0.0[.0]
4254
+ 1.2.11 13 10211 12.so.0.11[.0]
4255
+ 1.2.12 13 10212 12.so.0.12[.0]
4256
+ 1.4.0beta9-14 14 10400 14.so.0.0[.0]
4257
+ 1.2.13 13 10213 12.so.0.13[.0]
4258
+ 1.4.0beta15-36 14 10400 14.so.0.0[.0]
4259
+ 1.4.0beta37-87 14 10400 14.so.14.0[.0]
4260
+ 1.4.0rc01 14 10400 14.so.14.0[.0]
4261
+ 1.4.0beta88-109 14 10400 14.so.14.0[.0]
4262
+ 1.4.0rc02-08 14 10400 14.so.14.0[.0]
4263
+ 1.4.0 14 10400 14.so.14.0[.0]
4264
+ 1.4.1beta01-03 14 10401 14.so.14.1[.0]
4265
+ 1.4.1rc01 14 10401 14.so.14.1[.0]
4266
+ 1.4.1beta04-12 14 10401 14.so.14.1[.0]
4267
+ 1.4.1rc02-04 14 10401 14.so.14.1[.0]
4268
+ 1.4.1 14 10401 14.so.14.1[.0]
4269
+ 1.4.2beta01 14 10402 14.so.14.2[.0]
4270
+ 1.4.2rc02-06 14 10402 14.so.14.2[.0]
4271
+ 1.4.2 14 10402 14.so.14.2[.0]
4272
+ 1.4.3beta01-05 14 10403 14.so.14.3[.0]
4273
+ 1.4.3rc01-03 14 10403 14.so.14.3[.0]
4274
+ 1.4.3 14 10403 14.so.14.3[.0]
4275
+
4276
+ Henceforth the source version will match the shared-library minor
4277
+ and patch numbers; the shared-library major version number will be
4278
+ used for changes in backward compatibility, as it is intended. The
4279
+ PNG_PNGLIB_VER macro, which is not used within libpng but is available
4280
+ for applications, is an unsigned integer of the form xyyzz corresponding
4281
+ to the source version x.y.z (leading zeros in y and z). Beta versions
4282
+ were given the previous public release number plus a letter, until
4283
+ version 1.0.6j; from then on they were given the upcoming public
4284
+ release number plus "betaNN" or "rcN".
4285
+
4286
+ .SH "SEE ALSO"
4287
+ libpngpf(3), png(5)
4288
+ .LP
4289
+ .IR libpng :
4290
+ .IP
4291
+ http://libpng.sourceforge.net (follow the [DOWNLOAD] link)
4292
+ http://www.libpng.org/pub/png
4293
+
4294
+ .LP
4295
+ .IR zlib :
4296
+ .IP
4297
+ (generally) at the same location as
4298
+ .I libpng
4299
+ or at
4300
+ .br
4301
+ ftp://ftp.info-zip.org/pub/infozip/zlib
4302
+
4303
+ .LP
4304
+ .IR PNG specification: RFC 2083
4305
+ .IP
4306
+ (generally) at the same location as
4307
+ .I libpng
4308
+ or at
4309
+ .br
4310
+ ftp://ds.internic.net/rfc/rfc2083.txt
4311
+ .br
4312
+ or (as a W3C Recommendation) at
4313
+ .br
4314
+ http://www.w3.org/TR/REC-png.html
4315
+
4316
+ .LP
4317
+ In the case of any inconsistency between the PNG specification
4318
+ and this library, the specification takes precedence.
4319
+
4320
+ .SH AUTHORS
4321
+ This man page: Glenn Randers-Pehrson
4322
+ <glennrp at users.sourceforge.net>
4323
+
4324
+ The contributing authors would like to thank all those who helped
4325
+ with testing, bug fixes, and patience. This wouldn't have been
4326
+ possible without all of you.
4327
+
4328
+ Thanks to Frank J. T. Wojcik for helping with the documentation.
4329
+
4330
+ Libpng version 1.4.3 - June 26, 2010:
4331
+ Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc.
4332
+ Currently maintained by Glenn Randers-Pehrson (glennrp at users.sourceforge.net).
4333
+
4334
+ Supported by the PNG development group
4335
+ .br
4336
+ png-mng-implement at lists.sf.net
4337
+ (subscription required; visit
4338
+ png-mng-implement at lists.sourceforge.net (subscription required; visit
4339
+ https://lists.sourceforge.net/lists/listinfo/png-mng-implement
4340
+ to subscribe).
4341
+
4342
+ .SH COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
4343
+
4344
+ (This copy of the libpng notices is provided for your convenience. In case of
4345
+ any discrepancy between this copy and the notices in the file png.h that is
4346
+ included in the libpng distribution, the latter shall prevail.)
4347
+
4348
+ If you modify libpng you may insert additional notices immediately following
4349
+ this sentence.
4350
+
4351
+ This code is released under the libpng license.
4352
+
4353
+ libpng versions 1.2.6, August 15, 2004, through 1.4.3, June 26, 2010, are
4354
+ Copyright (c) 2004,2006-2007 Glenn Randers-Pehrson, and are
4355
+ distributed according to the same disclaimer and license as libpng-1.2.5
4356
+ with the following individual added to the list of Contributing Authors
4357
+
4358
+ Cosmin Truta
4359
+
4360
+ libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are
4361
+ Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
4362
+ distributed according to the same disclaimer and license as libpng-1.0.6
4363
+ with the following individuals added to the list of Contributing Authors
4364
+
4365
+ Simon-Pierre Cadieux
4366
+ Eric S. Raymond
4367
+ Gilles Vollant
4368
+
4369
+ and with the following additions to the disclaimer:
4370
+
4371
+ There is no warranty against interference with your
4372
+ enjoyment of the library or against infringement.
4373
+ There is no warranty that our efforts or the library
4374
+ will fulfill any of your particular purposes or needs.
4375
+ This library is provided with all faults, and the entire
4376
+ risk of satisfactory quality, performance, accuracy, and
4377
+ effort is with the user.
4378
+
4379
+ libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
4380
+ Copyright (c) 1998, 1999 Glenn Randers-Pehrson
4381
+ Distributed according to the same disclaimer and license as libpng-0.96,
4382
+ with the following individuals added to the list of Contributing Authors:
4383
+
4384
+ Tom Lane
4385
+ Glenn Randers-Pehrson
4386
+ Willem van Schaik
4387
+
4388
+ libpng versions 0.89, June 1996, through 0.96, May 1997, are
4389
+ Copyright (c) 1996, 1997 Andreas Dilger
4390
+ Distributed according to the same disclaimer and license as libpng-0.88,
4391
+ with the following individuals added to the list of Contributing Authors:
4392
+
4393
+ John Bowler
4394
+ Kevin Bracey
4395
+ Sam Bushell
4396
+ Magnus Holmgren
4397
+ Greg Roelofs
4398
+ Tom Tanner
4399
+
4400
+ libpng versions 0.5, May 1995, through 0.88, January 1996, are
4401
+ Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
4402
+
4403
+ For the purposes of this copyright and license, "Contributing Authors"
4404
+ is defined as the following set of individuals:
4405
+
4406
+ Andreas Dilger
4407
+ Dave Martindale
4408
+ Guy Eric Schalnat
4409
+ Paul Schmidt
4410
+ Tim Wegner
4411
+
4412
+ The PNG Reference Library is supplied "AS IS". The Contributing Authors
4413
+ and Group 42, Inc. disclaim all warranties, expressed or implied,
4414
+ including, without limitation, the warranties of merchantability and of
4415
+ fitness for any purpose. The Contributing Authors and Group 42, Inc.
4416
+ assume no liability for direct, indirect, incidental, special, exemplary,
4417
+ or consequential damages, which may result from the use of the PNG
4418
+ Reference Library, even if advised of the possibility of such damage.
4419
+
4420
+ Permission is hereby granted to use, copy, modify, and distribute this
4421
+ source code, or portions hereof, for any purpose, without fee, subject
4422
+ to the following restrictions:
4423
+
4424
+ 1. The origin of this source code must not be misrepresented.
4425
+
4426
+ 2. Altered versions must be plainly marked as such and
4427
+ must not be misrepresented as being the original source.
4428
+
4429
+ 3. This Copyright notice may not be removed or altered from
4430
+ any source or altered source distribution.
4431
+
4432
+ The Contributing Authors and Group 42, Inc. specifically permit, without
4433
+ fee, and encourage the use of this source code as a component to
4434
+ supporting the PNG file format in commercial products. If you use this
4435
+ source code in a product, acknowledgment is not required but would be
4436
+ appreciated.
4437
+
4438
+
4439
+ A "png_get_copyright" function is available, for convenient use in "about"
4440
+ boxes and the like:
4441
+
4442
+ printf("%s",png_get_copyright(NULL));
4443
+
4444
+ Also, the PNG logo (in PNG format, of course) is supplied in the
4445
+ files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
4446
+
4447
+ Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a
4448
+ certification mark of the Open Source Initiative.
4449
+
4450
+ Glenn Randers-Pehrson
4451
+ glennrp at users.sourceforge.net
4452
+ June 26, 2010
4453
+
4454
+ .\" end of man page
4455
+