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.
master
Chris Reuter 2013-11-15 23:40:32 -05:00
parent 769fb1534c
commit 3c1202e5bb
9 changed files with 546 additions and 2 deletions

View File

@ -2,6 +2,18 @@
# $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}

View File

@ -1,11 +1,15 @@
#!/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";
@ -21,8 +25,18 @@ while(<FH>) {
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

View File

@ -0,0 +1,74 @@
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.

58
docs/naturaldocs/nobgd.pl Normal file
View File

@ -0,0 +1,58 @@
#!/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);
}

View File

@ -0,0 +1,95 @@
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);
>}
>

View File

@ -0,0 +1,113 @@
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.

View File

@ -0,0 +1,64 @@
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

View File

@ -0,0 +1,81 @@
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.

33
docs/naturaldocs/run_docs.sh Executable file
View File

@ -0,0 +1,33 @@
#!/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