Commits

Chris Reuter committed 3c1202e

Added beginnings of an updated manual

This changeset adds scripts and frontmatter for a user manual
for LibGD. The manual is written using naturaldoc. That is, the
actual manual (minus some front-matter taken from the manual for
version 2.0.36) is generated from specially-formatted comments in
the source code.

bootstrap.sh has been modified to also trigger generation of the
manual.

  • Participants
  • Parent commits 769fb15

Comments (0)

Files changed (9)

 # $Id$
 # Small shell script to build gd from source
 
+# Generate the manual (unless naturaldocs isn't installed).  Source
+# dists should include the docs so that end users don't need to
+# install naturaldocs.  At the same time, we tolerate it being missing
+# so that random hackers don't need it just to build the code.
+if which naturaldocs > /dev/null; then
+    echo "Generation user docs:"
+    (cd docs/naturaldocs; bash run_docs.sh)
+else
+    echo "Can't find naturaldocs; not generating user manual."
+fi
+
+
 # allow importing from the environment, e.g.
 # "AUTOCONF=autoconf259 ... ./bootstrap.sh"
 ACLOCAL=${ACLOCAL:-aclocal}
 #!/usr/bin/env perl
 
-# Simple script to extract the version number parts from src/gd.h.
-# This must be run in the project root.  It is used by configure.ac
+# Simple script to extract the version number parts from src/gd.h.  If
+# called with the middle word of the version macro, it prints the
+# value of that macro.  If called with no argument, it outputs a
+# human-readable version string.  This must be run in the project
+# root.  It is used by configure.ac and docs/naturaldocs/run_docs.sh.
 
 use strict;
 
 my $key = shift;
+my @version_parts = ();
 
 open FH, "<src/gd.h"   # old-style filehandle for max. portability
   or die "Unable to open 'version.h' for reading.\n";
     print $lv;   # no newline
     exit(0);    # success!
   }
+
+  push @version_parts, $lv if (!$key);
 }
 
 close(FH);
 
+if (scalar @version_parts == 4) {
+  my $result = join(".", @version_parts[0..2]);
+  $result .= $version_parts[3];
+  $result =~ s/"//g;
+  print $result;
+  exit(0);
+}
+
 exit(1);        # failure

docs/naturaldocs/license.txt

+Title: License
+
+Credits and license terms:
+
+> In order to resolve any possible confusion regarding the authorship of
+> gd, the following copyright statement covers all of the authors who
+> have required such a statement. If you are aware of any oversights in
+> this copyright notice, please contact Pierre-A. Joye who will be
+> pleased to correct them.
+>
+>    Portions copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+>    2002, 2003, 2004 by Cold Spring Harbor Laboratory. Funded under
+>    Grant P41-RR02188 by the National Institutes of Health.
+>
+>    Portions copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+>    2004 by Boutell.Com, Inc.
+>
+>    Portions relating to GD2 format copyright 1999, 2000, 2001, 2002,
+>    2003, 2004 Philip Warner.
+>
+>    Portions relating to PNG copyright 1999, 2000, 2001, 2002, 2003,
+>    2004 Greg Roelofs.
+>
+>    Portions relating to gdttf.c copyright 1999, 2000, 2001, 2002,
+>    2003, 2004 John Ellson (ellson@graphviz.org).
+>
+>    Portions relating to gdft.c copyright 2001, 2002, 2003, 2004 John
+>    Ellson (ellson@graphviz.org).
+>
+>    Portions copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+>    Pierre-Alain Joye (pierre@libgd.org).
+>
+>    Portions relating to JPEG and to color quantization copyright
+>    2000, 2001, 2002, 2003, 2004, Doug Becker and copyright (C) 1994,
+>    1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Thomas
+>    G. Lane. This software is based in part on the work of the
+>    Independent JPEG Group. See the file README-JPEG.TXT for more
+>    information.
+>
+>    Portions relating to GIF compression copyright 1989 by Jef
+>    Poskanzer and David Rowley, with modifications for thread safety
+>    by Thomas Boutell.
+>
+>    Portions relating to GIF decompression copyright 1990, 1991, 1993
+>    by David Koblas, with modifications for thread safety by Thomas
+>    Boutell.
+>
+>    Portions relating to WBMP copyright 2000, 2001, 2002, 2003, 2004
+>    Maurice Szmurlo and Johan Van den Brande.
+>
+>    Portions relating to GIF animations copyright 2004 Jaakko Hyvätti
+>    (jaakko.hyvatti@iki.fi)
+>
+> Permission has been granted to copy, distribute and modify gd in
+> any context without fee, including a commercial application,
+> provided that this notice is present in user-accessible supporting
+> documentation.
+>
+> This does not affect your ownership of the derived work itself,
+> and the intent is to assure proper credit for the authors of gd,
+> not to interfere with your productive use of gd. If you have
+> questions, ask. "Derived works" includes all programs that utilize
+> the library. Credit must be given in user-accessible
+> documentation.
+>
+> This software is provided "AS IS." The copyright holders disclaim
+> all warranties, either express or implied, including but not
+> limited to implied warranties of merchantability and fitness for a
+> particular purpose, with respect to this code and accompanying
+> documentation.
+>
+> Although their code does not appear in the current release, the
+> authors also wish to thank Hutchison Avenue Software Corporation
+> for their prior contributions.

docs/naturaldocs/nobgd.pl

+#!/usr/bin/env perl
+
+# Copy C source files (i.e. *.[ch]) from $src to $dest, first
+# stripping out uses of the macro BGD_DECLARE(<type>).  A line must
+# begin with 'BGD_DECLARE' for it to be considered a use.
+
+use strict;
+use warnings;
+
+use File::Basename;
+
+my ($src, $dest) = @ARGV;
+
+die "Invalid arguments: nobgd.pl <src-dir> <dest-dir>\n"
+  unless ($src && $dest && -d $src && -d $dest);
+
+for my $file (glob("$src/*.c"), glob("$src/*.h")) {
+  do {local $| = 1; print "."};
+  fixup($file, $dest);
+}
+print "\n";
+
+sub fixup {
+  my ($src, $destDir) = @_;
+  my $dest = $destDir . "/" . basename($src);
+
+  my $content = slurp($src);
+  $content =~ s{^ BGD_DECLARE \( ([^)]+) \)}{$1}gmx;
+  unslurp($dest, $content);
+}
+
+
+sub slurp {
+  my ($filename) = @_;
+  local $/; # no file separator
+  my $data;
+
+  open my $fh, "<", $filename
+    or die "Unable to read file '$filename'.\n";
+  $data = <$fh>;
+  close($fh);
+
+  return $data;
+}
+
+
+sub unslurp {
+  my ($filename, $data) = @_;
+
+  die "Refusing to overwrite file '$filename'\n" if -f $filename;
+
+  open my $fh, ">", $filename
+    or die "Unable to open '$filename' for writing.\n";
+  print {$fh} $data
+    or die "Error writing file '$filename'\n";
+  close ($fh);
+}
+

docs/naturaldocs/preamble.txt

+Title: About LibGD @VERSION@
+
+What is gd?:
+
+gd is a graphics library. It allows your code to quickly draw images
+complete with lines, arcs, text, multiple colors, cut and paste from
+other images, and flood fills, and write out the result as a PNG or
+JPEG file. This is particularly useful in World Wide Web applications,
+where PNG and JPEG are two of the formats accepted for inline images
+by most browsers.
+
+gd is not a paint program. If you are looking for a paint program, you
+are looking in the wrong place. If you are not a programmer, you are
+looking in the wrong place, unless you are installing a required
+library in order to run an application.
+
+gd does not provide for every possible desirable graphics
+operation. It is not necessary or desirable for gd to become a
+kitchen-sink graphics package, but version 2.0 does include most
+frequently requested features, including both truecolor and palette
+images, resampling (smooth resizing of truecolor images) and so forth.
+
+gd basics: using gd in your program:
+
+gd lets you create PNG or JPEG images on the fly. To use gd in your
+program, include the file gd.h, and link with the gd library and the
+other required libraries; the syntax for most Unix flavors is:
+
+> -lgd -lpng -lz -ljpeg -lfreetype -lm
+
+Assuming that all of these libraries are available.
+
+If you want to use the provided simple fonts, include gdfontt.h,
+gdfonts.h, gdfontmb.h, gdfontl.h and/or gdfontg.h. For more impressive
+results, install FreeType 2.x and use the gdImageStringFT function. If
+you are not using the provided Makefile and/or a library-based
+approach, be sure to include the source modules as well in your
+project.
+
+Here is a short example program. (For a more advanced example, see
+gddemo.c, included in the distribution. gddemo.c is NOT the same
+program; it demonstrates additional features!)
+
+>/* Bring in gd library functions */
+>#include "gd.h"
+>
+>/* Bring in standard I/O so we can output the PNG to a file */
+>#include <stdio.h>
+>
+>int main() {
+>  /* Declare the image */
+>  gdImagePtr im;
+>  /* Declare output files */
+>  FILE *pngout, *jpegout;
+>  /* Declare color indexes */
+>  int black;
+>  int white;
+>
+>  /* Allocate the image: 64 pixels across by 64 pixels tall */
+>  im = gdImageCreate(64, 64);
+>
+>  /* Allocate the color black (red, green and blue all minimum).
+>    Since this is the first color in a new image, it will
+>    be the background color. */
+>  black = gdImageColorAllocate(im, 0, 0, 0);  
+>
+>  /* Allocate the color white (red, green and blue all maximum). */
+>  white = gdImageColorAllocate(im, 255, 255, 255);  
+>  
+>  /* Draw a line from the upper left to the lower right,
+>    using white color index. */
+>  gdImageLine(im, 0, 0, 63, 63, white);  
+>
+>  /* Open a file for writing. "wb" means "write binary", important
+>    under MSDOS, harmless under Unix. */
+>  pngout = fopen("test.png", "wb");
+>
+>  /* Do the same for a JPEG-format file. */
+>  jpegout = fopen("test.jpg", "wb");
+>
+>  /* Output the image to the disk file in PNG format. */
+>  gdImagePng(im, pngout);
+>
+>  /* Output the same image in JPEG format, using the default
+>    JPEG quality setting. */
+>  gdImageJpeg(im, jpegout, -1);
+>
+>  /* Close the files. */
+>  fclose(pngout);
+>  fclose(jpegout);
+>
+>  /* Destroy the image in memory. */
+>  gdImageDestroy(im);
+>}
+>

docs/naturaldocs/project/Languages.txt

+Format: 1.51
+
+# This is the Natural Docs languages file for this project.  If you change
+# anything here, it will apply to THIS PROJECT ONLY.  If you'd like to change
+# something for all your projects, edit the Languages.txt in Natural Docs'
+# Config directory instead.
+
+
+# You can prevent certain file extensions from being scanned like this:
+# Ignore Extensions: [extension] [extension] ...
+
+
+#-------------------------------------------------------------------------------
+# SYNTAX:
+#
+# Unlike other Natural Docs configuration files, in this file all comments
+# MUST be alone on a line.  Some languages deal with the # character, so you
+# cannot put comments on the same line as content.
+#
+# Also, all lists are separated with spaces, not commas, again because some
+# languages may need to use them.
+#
+# Language: [name]
+# Alter Language: [name]
+#    Defines a new language or alters an existing one.  Its name can use any
+#    characters.  If any of the properties below have an add/replace form, you
+#    must use that when using Alter Language.
+#
+#    The language Shebang Script is special.  It's entry is only used for
+#    extensions, and files with those extensions have their shebang (#!) lines
+#    read to determine the real language of the file.  Extensionless files are
+#    always treated this way.
+#
+#    The language Text File is also special.  It's treated as one big comment
+#    so you can put Natural Docs content in them without special symbols.  Also,
+#    if you don't specify a package separator, ignored prefixes, or enum value
+#    behavior, it will copy those settings from the language that is used most
+#    in the source tree.
+#
+# Extensions: [extension] [extension] ...
+# [Add/Replace] Extensions: [extension] [extension] ...
+#    Defines the file extensions of the language's source files.  You can
+#    redefine extensions found in the main languages file.  You can use * to
+#    mean any undefined extension.
+#
+# Shebang Strings: [string] [string] ...
+# [Add/Replace] Shebang Strings: [string] [string] ...
+#    Defines a list of strings that can appear in the shebang (#!) line to
+#    designate that it's part of the language.  You can redefine strings found
+#    in the main languages file.
+#
+# Ignore Prefixes in Index: [prefix] [prefix] ...
+# [Add/Replace] Ignored Prefixes in Index: [prefix] [prefix] ...
+#
+# Ignore [Topic Type] Prefixes in Index: [prefix] [prefix] ...
+# [Add/Replace] Ignored [Topic Type] Prefixes in Index: [prefix] [prefix] ...
+#    Specifies prefixes that should be ignored when sorting symbols in an
+#    index.  Can be specified in general or for a specific topic type.
+#
+#------------------------------------------------------------------------------
+# For basic language support only:
+#
+# Line Comments: [symbol] [symbol] ...
+#    Defines a space-separated list of symbols that are used for line comments,
+#    if any.
+#
+# Block Comments: [opening sym] [closing sym] [opening sym] [closing sym] ...
+#    Defines a space-separated list of symbol pairs that are used for block
+#    comments, if any.
+#
+# Package Separator: [symbol]
+#    Defines the default package separator symbol.  The default is a dot.
+#
+# [Topic Type] Prototype Enders: [symbol] [symbol] ...
+#    When defined, Natural Docs will attempt to get a prototype from the code
+#    immediately following the topic type.  It stops when it reaches one of
+#    these symbols.  Use \n for line breaks.
+#
+# Line Extender: [symbol]
+#    Defines the symbol that allows a prototype to span multiple lines if
+#    normally a line break would end it.
+#
+# Enum Values: [global|under type|under parent]
+#    Defines how enum values are referenced.  The default is global.
+#    global       - Values are always global, referenced as 'value'.
+#    under type   - Values are under the enum type, referenced as
+#               'package.enum.value'.
+#    under parent - Values are under the enum's parent, referenced as
+#               'package.value'.
+#
+# Perl Package: [perl package]
+#    Specifies the Perl package used to fine-tune the language behavior in ways
+#    too complex to do in this file.
+#
+#------------------------------------------------------------------------------
+# For full language support only:
+#
+# Full Language Support: [perl package]
+#    Specifies the Perl package that has the parsing routines necessary for full
+#    language support.
+#
+#-------------------------------------------------------------------------------
+
+# The following languages are defined in the main file, if you'd like to alter
+# them:
+#
+#    Text File, Shebang Script, C/C++, C#, Java, JavaScript, Perl, Python,
+#    PHP, SQL, Visual Basic, Pascal, Assembly, Ada, Tcl, Ruby, Makefile,
+#    ActionScript, ColdFusion, R, Fortran
+
+# If you add a language that you think would be useful to other developers
+# and should be included in Natural Docs by default, please e-mail it to
+# languages [at] naturaldocs [dot] org.

docs/naturaldocs/project/Menu.txt

+Format: 1.51
+
+
+# You can add a title and sub-title to your menu like this:
+# Title: [project name]
+# SubTitle: [subtitle]
+
+# You can add a footer to your documentation like this:
+# Footer: [text]
+# If you want to add a copyright notice, this would be the place to do it.
+
+# You can add a timestamp to your documentation like one of these:
+# Timestamp: Generated on month day, year
+# Timestamp: Updated mm/dd/yyyy
+# Timestamp: Last updated mon day
+#
+#   m     - One or two digit month.  January is "1"
+#   mm    - Always two digit month.  January is "01"
+#   mon   - Short month word.  January is "Jan"
+#   month - Long month word.  January is "January"
+#   d     - One or two digit day.  1 is "1"
+#   dd    - Always two digit day.  1 is "01"
+#   day   - Day with letter extension.  1 is "1st"
+#   yy    - Two digit year.  2006 is "06"
+#   yyyy  - Four digit year.  2006 is "2006"
+#   year  - Four digit year.  2006 is "2006"
+
+
+# --------------------------------------------------------------------------
+# 
+# Cut and paste the lines below to change the order in which your files
+# appear on the menu.  Don't worry about adding or removing files, Natural
+# Docs will take care of that.
+# 
+# You can further organize the menu by grouping the entries.  Add a
+# "Group: [name] {" line to start a group, and add a "}" to end it.
+# 
+# You can add text and web links to the menu by adding "Text: [text]" and
+# "Link: [name] ([URL])" lines, respectively.
+# 
+# The formatting and comments are auto-generated, so don't worry about
+# neatness when editing the file.  Natural Docs will clean it up the next
+# time it is run.  When working with groups, just deal with the braces and
+# forget about the indentation and comments.
+# 
+# --------------------------------------------------------------------------
+
+
+File: About LibGD 2.1.1-dev  (preamble.txt)
+File: gd.h  (gd.h)
+File: gd_interpolation.c  (gd_interpolation.c)
+File: gdImageCreate  (gd.c)
+File: License  (license.txt)
+File: Matrix  (gd_matrix.c)
+
+Group: Index  {
+
+   Index: Everything
+   Constant Index: Constants
+   File Index: Files
+   Function Index: Functions
+   Type Index: Types
+   }  # Group: Index
+

docs/naturaldocs/project/Topics.txt

+Format: 1.51
+
+# This is the Natural Docs topics file for this project.  If you change anything
+# here, it will apply to THIS PROJECT ONLY.  If you'd like to change something
+# for all your projects, edit the Topics.txt in Natural Docs' Config directory
+# instead.
+
+
+# If you'd like to prevent keywords from being recognized by Natural Docs, you
+# can do it like this:
+# Ignore Keywords: [keyword], [keyword], ...
+#
+# Or you can use the list syntax like how they are defined:
+# Ignore Keywords:
+#    [keyword]
+#    [keyword], [plural keyword]
+#    ...
+
+
+#-------------------------------------------------------------------------------
+# SYNTAX:
+#
+# Topic Type: [name]
+# Alter Topic Type: [name]
+#    Creates a new topic type or alters one from the main file.  Each type gets
+#    its own index and behavior settings.  Its name can have letters, numbers,
+#    spaces, and these charaters: - / . '
+#
+# Plural: [name]
+#    Sets the plural name of the topic type, if different.
+#
+# Keywords:
+#    [keyword]
+#    [keyword], [plural keyword]
+#    ...
+#    Defines or adds to the list of keywords for the topic type.  They may only
+#    contain letters, numbers, and spaces and are not case sensitive.  Plural
+#    keywords are used for list topics.  You can redefine keywords found in the
+#    main topics file.
+#
+# Index: [yes|no]
+#    Whether the topics get their own index.  Defaults to yes.  Everything is
+#    included in the general index regardless of this setting.
+#
+# Scope: [normal|start|end|always global]
+#    How the topics affects scope.  Defaults to normal.
+#    normal        - Topics stay within the current scope.
+#    start         - Topics start a new scope for all the topics beneath it,
+#                    like class topics.
+#    end           - Topics reset the scope back to global for all the topics
+#                    beneath it.
+#    always global - Topics are defined as global, but do not change the scope
+#                    for any other topics.
+#
+# Class Hierarchy: [yes|no]
+#    Whether the topics are part of the class hierarchy.  Defaults to no.
+#
+# Page Title If First: [yes|no]
+#    Whether the topic's title becomes the page title if it's the first one in
+#    a file.  Defaults to no.
+#
+# Break Lists: [yes|no]
+#    Whether list topics should be broken into individual topics in the output.
+#    Defaults to no.
+#
+# Can Group With: [type], [type], ...
+#    Defines a list of topic types that this one can possibly be grouped with.
+#    Defaults to none.
+#-------------------------------------------------------------------------------
+
+# The following topics are defined in the main file, if you'd like to alter
+# their behavior or add keywords:
+#
+#    Generic, Class, Interface, Section, File, Group, Function, Variable,
+#    Property, Type, Constant, Enumeration, Event, Delegate, Macro,
+#    Database, Database Table, Database View, Database Index, Database
+#    Cursor, Database Trigger, Cookie, Build Target
+
+# If you add something that you think would be useful to other developers
+# and should be included in Natural Docs by default, please e-mail it to
+# topics [at] naturaldocs [dot] org.

docs/naturaldocs/run_docs.sh

+#!/bin/bash
+
+set -e
+
+# Version number
+VERSION=`(cd ../../; perl config/getver.pl)`
+
+# Clear away old docs and ensure the doc dir. is present.
+[ -d html ] && rm -rf html
+mkdir html
+
+# Create a lightly-processed copy of the source to use as input.  This
+# file skips all non-C code in src/ and removes the BGD_DECLARE()
+# macro from definitions so they don't show up in the docs.
+[ -d tmp ] && rm -rf tmp
+mkdir tmp
+perl nobgd.pl ../../src/ tmp/
+
+# Add the external docs.
+cp license.txt tmp/
+sed -e "s/@VERSION@/$VERSION/g" preamble.txt > tmp/preamble.txt
+# ^^^ hack to get the version number in the docs.
+
+# Run naturaldocs to create the manual.
+naturaldocs --rebuild --rebuild-output --documented-only \
+    -i tmp/ \
+    -o html html  \
+    --project project/
+
+# And cleanup the temp files.
+rm -rf Data tmp
+
+