Please review and apply.

Brad
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: [email protected]\
#   4q247ru9ky92cy9c
# target_branch: http://bzr.savannah.gnu.org/r/pdf/libgnupdf/branches\
#   /trunk/
# testament_sha1: 47d013285324777b11a0b64bc298c2522838c185
# timestamp: 2009-06-20 12:26:14 +1000
# base_revision_id: [email protected]
# 
# Begin patch
=== modified file 'AUTHORS'
--- AUTHORS	2009-06-18 11:32:47 +0000
+++ AUTHORS	2009-06-18 12:06:04 +0000
@@ -75,6 +75,7 @@
   build-aux/README
   doc/MANIFEST.wiki
   doc/figures/MANIFEST.wiki
+  doc/gnupdf-arch.texi
   doc/gnupdf-hg.texi
   doc/gnupdf.texi
   lib/README

=== modified file 'ChangeLog'
--- ChangeLog	2009-06-18 11:32:47 +0000
+++ ChangeLog	2009-06-18 12:06:04 +0000
@@ -1,5 +1,7 @@
 2009-06-18  Brad Hards  <[email protected]>
 
+	* doc/gnupdf-arch.texi: fix typos
+
 	* MANIFEST.wiki: update / fix typos.
 	* build-aux/README: likewise
 	* doc/MANIFEST.wiki: likewise

=== modified file 'doc/gnupdf-arch.texi'
--- doc/gnupdf-arch.texi	2009-05-10 15:33:02 +0000
+++ doc/gnupdf-arch.texi	2009-06-20 02:25:19 +0000
@@ -66,12 +66,12 @@
 conforming to the PDF 1.7 specification and the ISO 32000
 standard. This includes visualization (retrieving of bitmaps with
 rasterized page contents) and interactive features such as annotations
-and interactive forms. The library also support the generation of
+and interactive forms. The library also supports the generation of
 specific subsets of PDF conforming to the ISO standards PDF/A, PDF/X
 and ISO 32000.
 @end cartouche
 
-The GNU PDF Library is composed by several layers:
+The GNU PDF Library contains several layers:
 
 @float Figure,fig:library-architecture
 @image{figures/library-architecture}
@@ -80,15 +80,15 @@
 
 @table @strong
 @item Base Layer
-This layer implements basic functionality such as memory allocation,
+This layer implements basic functionals such as memory allocation,
 fixed-point arithmetic, interpolation functions, geometry routines,
-character encoding and access to the filesystem. The base layer is the
-responsible to provide common system-independent abstractions to other
+character encoding and access to the filesystem. The base layer is
+responsible for providing common system-independent abstractions to other
 parts of the library.
 @item Object Layer
 This layer implements the concepts of PDF objects and PDF documents as
 a structured hierarchy of objects. An API is provided to manipulate
-that structure and the objects that compound it. Since the object
+that structure and the objects that are part of it. Since the object
 hierarchy can be quite complex a garbage collection mechanism is
 provided to the client of the layer.
 @item Document Layer
@@ -108,9 +108,10 @@
 
 @itemize @minus
 @item Each layer is built using the API exported by the underlying layers.
+...@item A layer is made up of one or more modules.
 @item A client application has access to all layers.
 @item Each layer export an API that gives access to the functionality it implement to clients.
-...@item As for terminology we use the terms procedure and function meaning the same thing. 
+...@item We use the terms procedure and function to mean the same thing.
 @end itemize
 
 @node The base layer
@@ -118,10 +119,8 @@
 
 The base layer of the GNU PDF Library provide system-independent access to several facilities.
 
-The implemented facilities are organized into modules. Each module
-export an API to be used by the client application or other layers of
-the library. Some modules make use of the facilities implemented in
-other modules (such as allocation or error functions).
+Some modules within the base layer make use of the facilities implemented in
+other modules within the base layer (such as allocation or error functions).
 
 @float Figure,fig:base-layer-architecture
 @image{figures/base-layer-architecture}
@@ -141,9 +140,9 @@
 @item List Module
 This module provides an implementation of dynamic lists and vectors.
 @item Stream Module
-This module provides system-independent and device-independent
-homogeneous access to filesystem files and memory buffers.The streams
-are buffered and support filtering for both read and write operations.
+This module provides access to a range of streams (including compressed
+streams) used within PDF files. The streams are buffered and support
+filtering for both read and write operations.
 @item Floating Point Arithmetic Module
 This module provides system-independent floating point real numbers
 and several related facilities such as matrix and points
@@ -163,11 +162,11 @@
 This module provides facilities to manage error types, error
 signaling, error descriptions, etc.
 @item Crypt Module
-This module provides de/encryption facilities.
+This module provides de/encryption and cryptographic hashing facilities.
 @item Tokeniser Module
 This module implements a stream tokeniser to read in PDF tokens from a
 base-level stream and a token writer that can write PDF tokens into
-some writing streams.
+a stream.
 @end table
 
 @menu
@@ -193,7 +192,7 @@
 used to provide this service.
 
 The allocation functions should test for memory exhaustion
-conditions. If the program calling the allocation functions gets out
+conditions. If the program calling the allocation functions runs out
 of memory then NULL is returned.
 
 @node Basic types module
@@ -204,7 +203,7 @@
 
 @table @strong
 @item Boolean types
-Simple C constanst to denote @code{TRUE} and @code{FALSE} are
+Simple C constants to denote @code{TRUE} and @code{FALSE} are
 provided.
 @item Integer types
 Both signed and unsigned types are provided for 16, 32 and 64 bits
@@ -212,19 +211,19 @@
 @item 64 bits big numbers
 The pdf_i64_t type is a signed 64 bit integer designed to represent
 large numbers in 32 bit machines (e.g. embedded systems in printers,
-etc...). Negative numbers are represented in 2's-complement
+etc...). Negative numbers are represented in two's-complement
 format. The way to initialise a 64 bit number is by using a 32 bit
 signed integer and a 32 bit unsigned integer (see API for details on
-this). One has to remember that the final result is in 2's complement
-so the user has to set the bits of each input integer accordingly so,
+this). One has to remember that the final result is in two's-complement
+so the user has to set the bits of each input integer such that,
 when concatenated, they form the desired 64 bit signed integer.
 
 Several methods related to this type are defined in the API. The
-initialisation function, pdf_i64_new, fulfils the tasks mentioned in
+initialization function, pdf_i64_new, performs the construction mentioned in
 the previous paragraph. Two other funcitons, pdf_i64_assign and
 pdf_i64_assign_quick, assign a value to the selected pdf_i64_t by
 using two 32 bit integers (one unsigned and one signed) for the former
-and one signed integer for the latter. Also included, is a basic copy
+and one signed integer for the latter. Also included is a basic copy
 method to copy data between pdf_i64_t type variables.
 
 Several arithmetic operations are included in the API: addition,
@@ -235,21 +234,21 @@
 included in Knuth's Art of Computer Programming (Vol 2). In this
 algorithm a convenient base is selected to represent the numbers to be
 added and a relatively simple carry system is used. In our case, due
-to the 32 bit limit imposed by the portability requirement of the pdf
-library, the unsigned 32 bit number and the signed 32 bit numbers are
-divided in two 16 bit ones each to be able to manage the intermediate
+to the 32 bit limit imposed by the portability requirement of the GNU PDF
+library, the unsigned 32 bit number and the signed 32 bit number are
+each divided in two 16 bit numbers to manage the intermediate
 storage. In other words, the addition is made in a 16 bit base (and
 not 32 bit) to avoid unwanted overflows during the process.
 
-Regarding the subtraction, thanks to the nature of the 2's-complement
+Regarding the subtraction, thanks to the nature of the two's-complement
 system, it is simply carried out by negating the subtrahend and adding
-it up to the minuend. The negation function is used in this case. This
-function basically carries out the 2's-complement conversion of a
+it to the minuend. The negation function is used in this case. This
+function basically carries out the two's-complement conversion of a
 64-bit number type by inverting the integer's bits and adding one to
-the result. The absolute value of a pdf_64i_t number is carried out in
+the result. The absolute value of a pdf_i64_t number is calculated in
 a similar fashion.
 
-The comparison of two pdf_i64_bit types starts with the 32 bit signed
+The comparison of two pdf_i64_t types starts with the 32 bit signed
 part of the structure and if they are the same, a comparison of the 32
 bit unsigned part of the structure representing the least significant
 bits is carried out.
@@ -259,7 +258,7 @@
 Programming (Vol 2). Overflows are more common in this case so an 8
 bit base is chosen to avoid them during the calculations. Internally
 the method can handle results of 128 bits, but if the result needs
-more than 64 bits (in 2's complement format) to be represented then an
+more than 64 bits (in two's complement format) to be represented then an
 error is flagged as an output of the function.
 
 The long division is also based on an intuitive algorithm included and
@@ -271,10 +270,10 @@
 
 The Hash module provides procedures to work with Hash tables. Thus,
 for a given table T, an element entry E, an associated key K and a
-determined function F, we have that T(F(K)) = E (in case no hash
-collision is detected). This gives constant access time. In case of a
-hash collision the module knows how to deal with it but constant
-access time is not guaranteed.
+determined function F, we have that T(F(K)) = E (where no hash
+collision is detected). This gives constant access time. Where there
+is a hash collision the module manages it, but constant access time
+is not guaranteed.
 
 A hash table can store elements of any type.
 
@@ -338,7 +337,7 @@
 @end float
 
 Several streams can be created to operate on the same open file. This
-provides a convenient access to files with several parts requiring
+provides a convenient way to access files with several parts requiring
 different filters to read or write its contents.
 
 @float Figure,fig:streams-operating-file
@@ -374,13 +373,13 @@
 @end float
 
 The streams maintain a buffer for both reading and writing. The size
-of the buffer is specified by the client in creation time. This is
+of the buffer is specified by the client at creation time. This is
 used, for example, to provide efficient character-based I/O.
 
 @node Stream operation modes
 @subsection Stream operation modes
 
-A stream can be opened in one of the following operation modes:
+A stream can be opened in one of the following modes:
 
 @table @strong
 @item Read mode
@@ -400,7 +399,7 @@
 memory buffer or open file:
 
 @itemize @minus
-...@item Read a chunk of a specified number of consecutive octects and store it in a given buffer.
+...@item Read a chunk of a specified number of consecutive octets and store it in a given buffer.
 @item Read a single character (octet) in an efficient way and return its numeric code.
 @item Peek a single character (octet) in an efficient way and return its numeric code. 
 @end itemize
@@ -408,8 +407,8 @@
 The stream manages the end-of-data condition in the following way:
 
 @itemize @minus
-...@item When reading a specified number of consecutive octects, it will return the number of octects currently readed and stored in the specified buffer. If that number if less than the requested number of octects then the stream is in a end-of-data condition.
-...@item When reading or peeking a single character, return an integer able to store a special value PDF_EOF. The caller then can check that condition before casting the returned value to a character one.
+...@item When reading a specified number of consecutive octets, it will return the number of octets currently read and stored in the specified buffer. If that number if less than the requested number of octets then the stream is in a end-of-data condition.
+...@item When reading or peeking a single character, return an integer able to store a special value PDF_EOF. The caller then can check that condition before casting the returned value to a character type.
 @end itemize
 
 @node Writing to a stream
@@ -419,20 +418,20 @@
 buffer or open file:
 
 @itemize @minus
-...@item Write a chunk of a specified number of consecutive octects.
+...@item Write a chunk of a specified number of consecutive octets.
 @end itemize
 
 The stream manages the end-of-data condition returning the number of
-octects actually written in the stream. If that number is less than
-the requested number of octects then the stream is in a end-of-data
+octets actually written in the stream. If that number is less than
+the requested number of octets then the stream is in a end-of-data
 condition.
 
 @node Positioning into a stream
 @subsection Positioning into a stream
 
-The streams supports the notion of read and write pointers. A pointer
+The streams supports the concept of read and write pointers. A pointer
 value is measured in positions, where a position is a offset relative
-to the beginning of the stream storage in octects.
+to the beginning of the stream storage in octets.
 
 @float Figure,fig:stream-read-write-pointer
 @image{figures/stream-read-write-pointer}
@@ -443,7 +442,7 @@
 set to 0.
 
 The read chunk of bytes, read a character and write a chunk of bytes
-modify the current value of the pointer.
+operations modify the current value of the pointer.
 
 In contrast, the peek a character operation does not change the value
 of the pointer.
@@ -452,17 +451,17 @@
 @subsection Supported filters
 
 The stream abstraction provides support for filters. A filter is a
-transformation @code{F( )} that can be applied to the contents of a
-input buffer and return an output buffer with the modified content.
+transformation function that can be applied to the contents of a
+input buffer and returns an output buffer with the modified content.
 
 Filters can be concatenated to form what is called a filter chain. The
 client program is then able to build the chain, specifying the number
-of filters, its types and its position. The stream abstraction support
+of filters, their types and their positions. The stream abstraction supports
 a predefined set of filter types. A stream is created with an empty
 filter chain.
 
-The Stream module provide support for all the PDF standard filters as
-defined in the PDF 1.7 Reference, Chapter 3, Section 3. Namely:
+The Stream module provides support for all the PDF standard filters as
+defined in the PDF 1.7 Reference, Chapter 3, Section 3. These are:
 
 @itemize @minus
 @item ASCII Hex
@@ -481,7 +480,7 @@
 @node Stream buffers
 @subsection Stream buffers
 
-A pdf_stm_buffer_t is a e data type implementing a buffer in memory.
+A pdf_stm_buffer_t is a data type implementing a buffer in memory.
 
 @float Figure,fig:stream-memory-buffer
 @image{figures/stream-memory-buffer}
@@ -507,7 +506,7 @@
 condition. Return @code{PDF_FALSE} otherwise.
 @end table
 
-The following funtion can be used to resize a buffer:
+The following function can be used to resize a buffer:
 
 @table @code
 @item pdf_status_t pdf_stm_buffer_resize (@var{buffer}, @var{new_size})
@@ -548,8 +547,7 @@
 @subsection Stream backends
 
 A @code{pdf_stm_be_t} is an opaque data type implementing the backend
-used by the stream to read or write information.  A stream backend
-Enlarge A stream backend
+used by the stream to read or write information.
 
 There are two types of stream backends:
 
@@ -599,8 +597,8 @@
 A filter abstraction is composed by:
 
 @table @strong
-...@item An application function @code{F()}
-This internal function implement the logic of the filter. Reading from
+...@item An application function
+This internal function implements the logic of the filter. Reading from
 an input buffer it generates output. The specific transformation
 depends on the nature of the filter. Note that the size of the output
 of an application function can be larger than the input size (a
@@ -616,15 +614,15 @@
 filter writes its output.
 @end table
 
-A filter support the following operations:
+Each filter support the following operations:
 
 @table @strong
 @item init
 This operation initializes the filter providing its configuration
 parameters.
 @item apply
-This operation ask the filter to generate bytes by calling its
-internal application function until the output buffer gets full. It
+This operation requests the filter to generate bytes by calling its
+internal application function until the output buffer is full. It
 returns a status code.
 @item dealloc_state
 This operation deallocates any private state and does clean up work,
@@ -645,14 +643,14 @@
 
 @itemize @minus
 @item The compression filter.
-...@item The uncompression filter.
+...@item The decompression filter.
 @end itemize
 
-Of course, in the case of filters with only one-way operation (such as
+For filters with only one-way operation (such as
 the null filter) the implementation files only contain one filter
 implementation.
 
-A filter implementation consist of the definition of several
+A filter implementation consists of the definition of several
 functions:
 
 @itemize @minus
@@ -666,7 +664,7 @@
 @table @code
 @item pdf_status_t pdf_stm_filter_XXX_init (@var{filter_params}, @var{filter_state})
 
-The arguments of that call are:
+The arguments to that call are:
 
 @table @var
 @item filter_params
@@ -683,7 +681,7 @@
 @table @code
 @item pdf_status_t pdf_stm_filter_XXX_apply (@var{filter_params}, @var{filter_state}, @var{input_buffer}, @var{output_buffer}, @var{finish_p})
 
-The arguments of that call are:
+The arguments to that call are:
 
 @table @var
 @item @var{filter_params}
@@ -703,12 +701,12 @@
 filtered data (such as "~>" in the case of the ascii hex filter). If
 this parameter is true then the apply operation should append the
 trailer to the filtered data. If the filter does not need to write
-down trailer information then this argument can be ignored.
+trailer information then this argument can be ignored.
 @end table
 @end table
 
 The return values of the apply function of a filter implementation
-are:
+is one of:
 
 @table @code
 @item PDF_ENINPUT
@@ -723,12 +721,12 @@
 the apply function returns this value.
 @item PDF_ERROR
 Error in the data processed by the filter. If the filter
-implementation returns this value then the 'apply' function wont be
-called again without a previous call to 'init'.
+implementation returns this value then the 'apply' function will not be
+called again without another call to 'init'.
 @item PDF_EEOF
 This value should be returned in the following situations: 
 @itemize @minus
-...@item There has been an EOF condition produced by some characteristics in the input data. Only the filters interpreting EOD markers or working in fixed-size blocks of data will return PDF_EEOF due to this reason. 
+...@item There has been an EOF condition produced by some characteristics in the input data. Only the filters interpreting EOF markers or working in fixed-size blocks of data will return PDF_EEOF due to this reason.
 @item The filter implementation has emitted data due to a finalization request (via the finish_p) parameter. Only the filters supporting finalization data will return PDF_EEOF due to this reason. 
 @end itemize
 @end table
@@ -750,7 +748,7 @@
 @node Structure of a reading stream
 @subsection Structure of a reading stream
 
-A client can ask a read stream to provide a specific number of bytes
+A client can request that a read stream provide a specific number of bytes
 and to store it in a specified buffer. This interface is like the read
 operation we can find in C libraries:
 
@@ -758,9 +756,9 @@
    pdf_size_t pdf_stm_read (*BUFFER, BYTES);
 @end example
 
-The stream then tries to provide the asked number of bytes and return
-the number of actually readed bytes: if the returned number is less
-than the asked one then a backend-exhausted condition happened.
+The stream then tries to provide the requested number of bytes and return
+the number of actually read bytes: if the return value is less
+than the requested number of bytes, then a backend-exhausted condition occured.
 
 @float Figure,fig:stream-read
 @image{figures/stream-read}
@@ -773,17 +771,17 @@
 @node Structure of a writing stream
 @subsection Structure of a writing stream
 
-A client can ask a write stream to consume a specific number of bytes
+A client can request a write stream to consume a specific number of bytes
 from a specified buffer. This interface is like the write operation we
-can fin in C libraries:
+can find in C libraries:
 
 @example
    pdf_size_t pdf_stm_write (*BUFFER, BYTES);
 @end example
 
-The stream then tries to consume the asked number of bytes and return
-the number of actually written bytes: if the returned number is less
-than the asked one then a backend-full condition happened.
+The stream then tries to consume the requested number of bytes and return
+the number of actually written bytes: if the return value is less
+than the requested number of bytes, then a backend-full condition occured.
 
 @float Figure,fig:stream-write
 @image{figures/stream-write}
@@ -1270,8 +1268,8 @@
 
 The @code{pdf_time_t} opaque data type represents a specific UTC date
 and time. It is a discrete point in the continuous timeline. The
-resolution is in seconds. Time values are attributed with an offset
-with GMT (positive or negative) to allow to represent local times. The
+resolution is in seconds. Time values are associated with an offset
+from GMT (positive or negative) to allow them to represent local times. The
 implementation may impose a minimum and/or a maximum time value,
 defining an interval of valid time values.
 
@@ -1283,7 +1281,7 @@
 @node Calendar structures
 @subsection Calendar structures
 
-The time and time span abstractions are implemented in opaque
+The time and time span abstractions are implemented as opaque
 types. The client does not know about the internal implementation of
 those data types: functions are provided to both get and manipulate
 the values of both time and time spans.
@@ -1502,7 +1500,7 @@
 @node Filesystem items
 @subsection Filesystem items
 
-Conceptually speaking a filesystem contain a tree (or several trees in
+Conceptually speaking a filesystem contains a tree (or several trees in
 some filesystem implementations supporting several volumes) of
 filesystem items.
 
@@ -1533,10 +1531,10 @@
 The last modification date of the item.
 @item file_size
 If the item is a file then this field contain the lower 32-bits of the
-size (in octects) of the item.
+size (in octets) of the item.
 @item file_size_high
 If the item is a file then this field contain the upper 32-bits of the
-size (in octects) of the item.
+size (in octets) of the item.
 @item folder_size
 If the item is a folder then this field contain the number of items
 contained in the folder. 
@@ -1557,7 +1555,7 @@
 call to the appropriate functionality of the filesystem managing the
 file.
 
-The client should close any opened file calling the appropriate
+The client should close any opened file by calling the appropriate
 function on the underlying filesystem.
 
 @node Folders
@@ -1739,24 +1737,24 @@
 @section Crypt module
 
 The Encryption module provides procedures both for encryption and
-decryption of buffers. Indeed it also provides functions for
-message-digest. This module is required to be initialized once at
-startup, when libgnupdf is loaded.
+decryption of buffers. It also provides functions for message-digest
+operations (cryptographic hashing). This module is required to be
+initialized once at startup, when the GNU PDF library is loaded.
 
-The crypt module provides a new data type `cipher' which hold the
-context of an operation, and procedures in order to encrypt and decrypt
-data. The following encryption algorithms are provided:
+The crypt module provides a new data type `pdf_crypt_cipher_t' which
+holds the context of a encryption or decryption operation, and procedures to encrypt and decrypt data. The following encryption
+algorithms are provided:
 
 @table @strong
 @item AESV2
 It is a block cipher which uses the AES128 algorithm in
-Cipher Block chaining operation mode.
+Cipher Block Chaining operation mode.
 @item V2
 It is a stream-based cipher which uses the RC4-compatible ARCFOUR
 algorithm.
 @end table
 
-The operations on a cipher are the following: 
+The operations on a pdf_crypt_cipher_t are:
 
 @table @strong
 @item Create a cipher
@@ -1764,20 +1762,46 @@
 @item Destroy a cipher
 Destroy a previously created cipher.
 @item Set a key
-Set a key to both encryption and decryption.
+Set a key for both encryption and decryption.
 @item Encrypt a chunk
-Encrypt a chunk of the buffer. Consecutive encrypted chunks are supposed
-to be adjoin data.
+Encrypt a chunk of the buffer. Consecutive encrypted chunks are expected
+to be consecutive data.
 @item Decrypt a chunk
-Decrypt a chunk of the buffer. Consecutive decrypted chunks are supposed
-to be adjoin data.
+Decrypt a chunk of the buffer. Consecutive decrypted chunks are expected
+to be consecutive data.
 @end table
 
 Different kind of ciphers could impose different restrictions to the
 operations.
 
-This module provides message-digest and other utilities functions too,
-since it is usually used in order to get a encryption key.
+This module also provides message-digest and other utilities functions,
+since they are often used in order to get a encryption key.
+
+The message digest element of the crypt module provides a new data
+type ('pdf_crypt_md_t') which holds the context information for
+the digest operation.
+
+Only one message digest algorithm is currently provided:
+
+...@table @strong
+...@item MD5
+It is a cryptographic hash described in RFC1321, which produces
+a 128 bit hash for an arbitrary length input.
+...@end table
+
+The operations on a pdf_crypt_hash_t are:
+
+...@table @strong
+...@item Create a cryptographic hash context.
+It creates a new cryptographic hash.
+...@item Destroy a cryptographic hash context
+Destroy a previously created cryptographic hash.
+...@item Write a chunk of data
+Add a chunk of data to the hash.
+...@item Read the hash result
+Finalise the hash and return the result. No more data
+can be hashed without creating a new hash context.
+...@end table
 
 @node Tokeniser module
 @section Tokeniser module

# Begin bundle
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

Reply via email to