pdf-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[pdf-devel] [PATCH] Tokeniser API documentation


From: Michael Gold
Subject: [pdf-devel] [PATCH] Tokeniser API documentation
Date: Mon, 18 May 2009 20:07:35 -0400
User-agent: Mutt/1.5.18 (2008-05-17)

Here's a patch for the tokeniser API documentation based on our
discussions.

If the pdf_token_get_string_data/size functions are OK I'll add similar
ones for the other token types.

-- Michael
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: address@hidden
# target_branch: file:///home/michael/src/%2Blocal/gnupdf/trunk/
# testament_sha1: ab58e9f7613c422a3bfc74ceb9abeb2f7d2406d2
# timestamp: 2009-05-18 19:43:19 -0400
# base_revision_id: address@hidden
# 
# Begin patch
=== modified file 'doc/gnupdf.texi'
--- doc/gnupdf.texi     2009-05-18 13:36:47 +0000
+++ doc/gnupdf.texi     2009-05-18 23:42:23 +0000
@@ -9866,7 +9866,8 @@
 * Creation and destruction of tokenisers::
 * Reading tokens::
 * Writing tokens::
-* Manipulating PDF tokens::
+* Creating and destroying tokens::
+* Accessing token attributes::
 @end menu
 
 @node Tokeniser data types
@@ -9882,20 +9883,31 @@
 Valid values are:
 
 @table @code
address@hidden PDF_TOKEN_BOOLEAN
-A PDF boolean value.
address@hidden PDF_TOKEN_NUMBER
-A PDF number value.
address@hidden PDF_TOKEN_NULL
-The null PDF object.
address@hidden PDF_TOKEN_INTEGER
+A PDF integer value.
address@hidden PDF_TOKEN_REAL
+A PDF real value (a floating-point number).
 @item PDF_TOKEN_STRING
-A PDF string value.
+A PDF string.
 @item PDF_TOKEN_NAME
-A PDF name value.
address@hidden PDF_TOKEN_INDIRECT
-A PDF indirect reference.
+A PDF name.
 @item PDF_TOKEN_COMMENT
 A PDF comment.
address@hidden PDF_TOKEN_KEYWORD
+A keyword, i.e., any string of regular characters such as ``null''
+or ``R'' that is not matched as another type.
address@hidden PDF_TOKEN_DICT_START
+The ``<<'' operator, which marks the beginning of a dictionary.
address@hidden PDF_TOKEN_DICT_END
+The ``>>'' operator, which marks the end of a dictionary.
address@hidden PDF_TOKEN_ARRAY_START
+The ``['' operator, which marks the beginning of an array.
address@hidden PDF_TOKEN_ARRAY_END
+The ``]'' operator, which marks the end of an array.
address@hidden PDF_TOKEN_PROC_START
+The address@hidden'' operator, which marks the beginning of a procedure.
address@hidden PDF_TOKEN_PROC_END
+The address@hidden'' operator, which marks the end of a procedure.
 @end table
 @end deftp
 
@@ -10034,7 +10046,7 @@
 @end table
 @end deftypefun
 
address@hidden pdf_status_t pdf_tokeniser_reader_destroy 
(pdf_tokeniser_reader_t @var{reader})
address@hidden pdf_status_t pdf_token_reader_destroy (pdf_tokeniser_reader_t 
@var{reader})
 
 Destroy a token reader freeing any used resources.
 
@@ -10062,9 +10074,9 @@
 @end table
 @end deftypefun
 
address@hidden pdf_status_t pdf_tokeniser_writer_destroy 
(pdf_tokeniser_writer_t @var{writer})
address@hidden pdf_status_t pdf_token_writer_destroy (pdf_tokeniser_writer_t 
@var{writer})
 
-Destroy a token writer freeing any used resources.
+Destroy a token writer, freeing any used resources.
 
 @table @strong
 @item Parameters
@@ -10093,7 +10105,7 @@
 @node Reading tokens
 @subsection Reading tokens
 
address@hidden pdf_status_t pdf_token_read (pdf_token_reader_t @var{reader}, 
pdf_token_t address@hidden)
address@hidden pdf_status_t pdf_token_read (pdf_token_reader_t @var{reader}, 
pdf_u32_t @var{flags}, pdf_token_t address@hidden)
 
 Read a token from a token reader.
 
@@ -10102,15 +10114,40 @@
 @table @var
 @item reader
 A token reader.
address@hidden flags
+A bitmask specifying a combination of these flags:
address@hidden @code
address@hidden PDF_TOKEN_NO_NAME_ESCAPES
+Don't treat ``#'' as a special character when reading name tokens
+(this flag should be used when reading PDF 1.1 files).
address@hidden PDF_TOKEN_RET_COMMENTS
+Return comments as tokens (rather than ignoring them).
address@hidden PDF_TOKEN_END_AT_STREAM
+Assume that a ``stream'' keyword token was just read, find the beginning
+of the corresponding stream, and return PDF_EEOF when successful
+(i.e., when the input stream is positioned after the first line feed).
address@hidden table
 @item token
-A pointer to a token that will hold the read token.
+A pointer to a pdf_token_t that will hold the read token.
 @end table
 @item Returns
 A PDF status value:
 @table @code
 @item PDF_OK
+The operation succeeded.
 @item PDF_EAGAIN
+It's not possible to read a full token now.
+Since one may have been partially read, the operation should be repeated
+with the same flags when data becomes available.
address@hidden PDF_EEOF
+Reached the end of the input stream (at a valid position).
address@hidden PDF_EBADFILE
+The stream violates the PDF specifications.
address@hidden PDF_EIMPLLIMIT
+It's not possible to read the next token without exceeding an
+implementation limit (e.g., the token is too long).
 @item PDF_ERROR
+An unspecified error occurred.
 @end table
 @item Usage example
 @example
@@ -10119,13 +10156,29 @@
 @end table
 @end deftypefun
 
address@hidden pdf_token_reader_end_at_stream
address@hidden pdf_token_reader_reset_state
address@hidden pdf_status_t pdf_token_reader_reset (pdf_token_reader_t 
@var{reader})
+
+Reset the state of the token reader.
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden reader
+A token reader.
address@hidden table
address@hidden Returns
+A PDF status value:
address@hidden @code
address@hidden PDF_OK
+The operation succeeded.
address@hidden table
address@hidden table
address@hidden deftypefun
 
 @node Writing tokens
 @subsection Writing tokens
 
address@hidden pdf_status_t pdf_token_write (pdf_token_writer_t @var{writer}, 
pdf_token_t address@hidden)
address@hidden pdf_status_t pdf_token_write (pdf_token_writer_t @var{writer}, 
pdf_u32_t @var{flags}, pdf_token_t @var{token})
 
 Write a given token using a given token writer.
 
@@ -10134,6 +10187,18 @@
 @table @var
 @item writer
 A token writer.
address@hidden flags
+A bitmask specifying a combination of these flags:
address@hidden @code
address@hidden PDF_TOKEN_NO_NAME_ESCAPES
+Don't escape special characters using ``#'' when writing name tokens
+(this flag should be used when writing PDF 1.1 files).
address@hidden PDF_TOKEN_HEX_STRINGS
+Write strings in hexadecimal encoding.
address@hidden PDF_TOKEN_READABLE_STRINGS
+Encode strings in a human-readable way
+(i.e., in hexadecimal or with special characters escaped).
address@hidden table
 @item token
 A PDF token.
 @end table
@@ -10141,8 +10206,16 @@
 A PDF status value:
 @table @code
 @item PDF_OK
+The operation succeeded.
 @item PDF_EAGAIN
+It's not possible to write a full token now.
+Since it may have been partially written, the operation must be repeated
+with the same arguments when the stream becomes writable.
address@hidden PDF_EBADDATA
+One of the arguments is invalid. This may be caused by an invalid token
+(e.g., one that contains unrepresentable characters).
 @item PDF_ERROR
+An unspecified error occurred.
 @end table
 @item Usage example
 @example
@@ -10151,10 +10224,243 @@
 @end table
 @end deftypefun
 
address@hidden pdf_token_write
-
address@hidden Manipulating PDF tokens
address@hidden Manipulating PDF tokens
address@hidden Creating and destroying tokens
address@hidden Creating and destroying tokens
+
address@hidden pdf_status_t pdf_token_integer_new (pdf_i32_t @var{value}, 
pdf_token_t address@hidden)
+
+Create an integer token.
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden value
+The numeric value for the token.
address@hidden token
+A pointer to the newly created token.
address@hidden table
address@hidden Returns
+A PDF status value:
address@hidden @code
address@hidden PDF_OK
+The operation succeeded.
address@hidden PDF_ENOMEM
+Not enough memory.
address@hidden table
address@hidden table
+
address@hidden deftypefun
+
address@hidden pdf_status_t pdf_token_real_new (pdf_real_t @var{value}, 
pdf_token_t address@hidden)
+
+Create a real (floating-point number) token.
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden value
+The numeric value for the token.
address@hidden token
+A pointer to the newly created token.
address@hidden table
address@hidden Returns
+A PDF status value:
address@hidden @code
address@hidden PDF_OK
+The operation succeeded.
address@hidden PDF_EBADDATA
+The given value is invalid.
address@hidden PDF_ENOMEM
+Not enough memory.
address@hidden table
address@hidden table
+
address@hidden deftypefun
+
address@hidden pdf_status_t pdf_token_string_new (const pdf_char_t 
address@hidden, pdf_size_t @var{size}, pdf_token_t address@hidden)
+
+Create a string token containing a copy of the given data.
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden value
+A pointer to the binary data that will make up the string.
address@hidden size
+The amount of data to copy, in octets.
address@hidden token
+A pointer to the newly created token.
address@hidden table
address@hidden Returns
+A PDF status value:
address@hidden @code
address@hidden PDF_OK
+The operation succeeded.
address@hidden PDF_ENOMEM
+Not enough memory.
address@hidden table
address@hidden table
+
address@hidden deftypefun
+
address@hidden pdf_status_t pdf_token_name_new (const pdf_char_t 
address@hidden, pdf_size_t @var{size}, pdf_token_t address@hidden)
+
+Create a name token containing a copy of the given data.
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden value
+A pointer to the binary data that will make up the name.
address@hidden size
+The amount of data to copy, in octets.
address@hidden token
+A pointer to the newly created token.
address@hidden table
address@hidden Returns
+A PDF status value:
address@hidden @code
address@hidden PDF_OK
+The operation succeeded.
address@hidden PDF_ENOMEM
+Not enough memory.
address@hidden table
address@hidden table
+
address@hidden deftypefun
+
address@hidden pdf_status_t pdf_token_keyword_new (const pdf_char_t 
address@hidden, pdf_size_t @var{size}, pdf_token_t address@hidden)
+
+Create a keyword token containing a copy of the given data.
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden value
+A pointer to the binary data that will make up the keyword.
address@hidden size
+The amount of data to copy, in octets.
address@hidden token
+A pointer to the newly created token.
address@hidden table
address@hidden Returns
+A PDF status value:
address@hidden @code
address@hidden PDF_OK
+The operation succeeded.
address@hidden PDF_ENOMEM
+Not enough memory.
address@hidden table
address@hidden table
+
address@hidden deftypefun
+
address@hidden pdf_status_t pdf_token_comment_new (const pdf_char_t 
address@hidden, pdf_size_t @var{size}, pdf_bool_t continuation, pdf_token_t 
address@hidden)
+
+Create a comment token containing a copy of the given data.
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden value
+A pointer to the binary data that will make up the keyword.
address@hidden size
+The amount of data to copy, in octets.
address@hidden continuation
+A boolean value indicating whether this is a continuation of a previous 
comment token (if false, it's a new comment).
address@hidden token
+A pointer to the newly created token.
address@hidden table
address@hidden Returns
+A PDF status value:
address@hidden @code
address@hidden PDF_OK
+The operation succeeded.
address@hidden PDF_ENOMEM
+Not enough memory.
address@hidden table
address@hidden table
+
address@hidden deftypefun
+
address@hidden pdf_status_t pdf_token_valueless_new (enum pdf_token_type_e 
@var{type}, pdf_token_t address@hidden)
+
+Create a token of one of the valueless types (PDF_TOKEN_DICT_START,
+PDF_TOKEN_DICT_END, PDF_TOKEN_ARRAY_START, PDF_TOKEN_ARRAY_END,
+PDF_TOKEN_PROC_START, or PDF_TOKEN_PROC_END).
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden type
+The type of token to create.
address@hidden token
+A pointer to the newly created token.
address@hidden table
address@hidden Returns
+A PDF status value:
address@hidden @code
address@hidden PDF_OK
+The operation succeeded.
address@hidden PDF_ENOMEM
+Not enough memory.
address@hidden PDF_EBADDATA
+The given type is not valid for this constructor.
address@hidden table
address@hidden table
+
address@hidden deftypefun
+
address@hidden pdf_status_t pdf_token_dup (const pdf_token_t @var{old}, 
pdf_token_t address@hidden)
+
+Create a copy of the given token.
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden old
+The token to copy.
address@hidden new
+A pointer to the newly created token.
address@hidden table
address@hidden Returns
+A PDF status value:
address@hidden @code
address@hidden PDF_OK
+The operation succeeded.
address@hidden PDF_ENOMEM
+Not enough memory.
address@hidden table
address@hidden table
+
address@hidden deftypefun
+
address@hidden pdf_status_t pdf_token_destroy (pdf_token_t @var{token})
+
+Destroy the given token, freeing any memory it used.
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden old
+The token to copy.
address@hidden new
+A pointer to the newly created token.
address@hidden table
address@hidden Returns
+A PDF status value:
address@hidden @code
address@hidden PDF_OK
+The operation succeeded.
address@hidden PDF_ENOMEM
+Not enough memory.
address@hidden table
address@hidden table
+
address@hidden deftypefun
+
address@hidden Accessing token attributes
address@hidden Accessing token attributes
 
 @deftypefun {enum pdf_token_type_e} pdf_token_get_type (pdf_token_t 
@var{token})
 
@@ -10176,7 +10482,10 @@
 /* ... */
 
 /* Read a name */
-pdf_token_read (reader, &token);
+if (pdf_token_read (reader, &token) != PDF_OK)
address@hidden
+   /* Error */
address@hidden
 if (pdf_token_get_type (token) != PDF_TOKEN_NAME)
 @{
    /* We were expecting a name */
@@ -10185,38 +10494,94 @@
 @end table
 @end deftypefun
 
address@hidden pdf_status_t pdf_token_set_attr (pdf_token_t @var{token}, 
pdf_token_attr_t @var{attr})
-
-Set a given attribute @var{attr} in a given token.
-
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden token
-A token.
address@hidden attr
-A token attribute.
address@hidden table
address@hidden Returns
-A PDF status value:
address@hidden @code
address@hidden PDF_OK
address@hidden PDF_ERROR
address@hidden table
address@hidden Usage example
address@hidden
-XXX
address@hidden example
address@hidden table
address@hidden deftypefun
-
address@hidden pdf_token_get_string
address@hidden pdf_token_get_integer
address@hidden pdf_token_get_real
-
address@hidden pdf_token_set_string
address@hidden pdf_token_set_integer
address@hidden pdf_token_set_real
address@hidden TODO: pdf_bool_t pdf_token_equal_p (pdf_token_t token1, 
pdf_token_t token2);
address@hidden          -- if needed
+
address@hidden pdf_i32_t pdf_token_get_integer_value (const pdf_token_t 
@var{token})
+
+Returns the value associated with a given integer token.
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden token
+A token of type PDF_TOKEN_INTEGER.
address@hidden table
address@hidden Returns
+The token's value.
address@hidden table
+
address@hidden deftypefun
+
address@hidden pdf_real_t pdf_token_get_real_value (const pdf_token_t 
@var{token})
+
+Returns the value associated with a given real token.
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden token
+A token of type PDF_TOKEN_REAL.
address@hidden table
address@hidden Returns
+The token's value.
address@hidden table
+
address@hidden deftypefun
+
address@hidden const pdf_char_t *pdf_token_get_string_data (const pdf_token_t 
@var{token})
+
+Returns a pointer to the data associated with a given string token.
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden token
+A token of type PDF_TOKEN_STRING.
address@hidden table
address@hidden Returns
+A pointer to the string data, which will be valid until the token is destroyed.
+The data is @strong{not} null-terminated.
address@hidden table
+
address@hidden deftypefun
+
address@hidden pdf_size_t pdf_token_get_string_size (const pdf_token_t 
@var{token})
+
+Returns the amount of data associated with a given string token.
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden token
+A token of type PDF_TOKEN_STRING.
address@hidden table
address@hidden Returns
+The string size, in octets.
address@hidden table
+
address@hidden deftypefun
+
address@hidden TODO: pdf_token_get_{name,keyword,comment}_{data,size}
address@hidden          -- these are basically the same as the string functions,
address@hidden             except the name and keyword data is null-terminated
+
address@hidden pdf_bool_t pdf_token_get_comment_continued (const pdf_token_t 
@var{token})
+
+Returns the continuation flag associated with a given comment token.
+
address@hidden @strong
address@hidden Parameters
address@hidden @var
address@hidden token
+A token of type PDF_TOKEN_COMMENT.
address@hidden table
address@hidden Returns
+True if the comment is continued from the comment token
+that precedes it in the stream; False if it's a new comment.
address@hidden table
+
address@hidden deftypefun
 
 @node Encryption
 @section Encryption
@@ -13289,17 +13654,23 @@
 @tab 10^10 bytes
 @tab Largest supported PDF file using a cross-reference table.
 @item integer
address@hidden ???
address@hidden 2^32 - 1
 @tab Largest integer value.
address@hidden integer
address@hidden -2^32
address@hidden Smallest integer value.
 @item real
address@hidden ???
address@hidden FLT_MAX
 @tab Largest real value.
address@hidden real
address@hidden -FLT_MAX
address@hidden Smallest real value.
 @item string in content stream
 @tab 32767
 @tab Maximum length of a string contained in a content stream, in
 bytes.
 @item name
address@hidden ???
address@hidden 32767
 @tab Maximum length of a name, in bytes.
 @item indirect object
 @tab ??

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

Attachment: signature.asc
Description: Digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]