package pacomb

  1. Overview
  2. Docs

A module providing efficient input buffers with preprocessing.

Type

type buffer

The abstract type for an input buffer.

type pos

The abstract type position in the buffer

val init_pos : pos

position at the beginning of a buffer

Reading from a buffer

val read : buffer -> pos -> char * buffer * pos

read buf pos returns the character at position pos in the buffer buf, together with the new buffer and position.

val sub : buffer -> pos -> int -> string

sub b i len returns len characters from position pos. If the end of buffer is reached, the string is filed with eof '\255'

val get : buffer -> pos -> char

get buf pos returns the character at position pos in the buffer buf.

Creating a buffer

type context = Utf8.context
val from_file : ?utf8:context -> string -> buffer

from_file fn returns a buffer constructed using the file fn. if utf8 is Utf8.UTF8 (Utf8.ASCII is the default), positions are reported according to utf8. read is still reading bytes.

val from_channel : ?utf8:context -> ?filename:string -> Stdlib.in_channel -> buffer

from_channel ~filename ch returns a buffer constructed using the channel ch. The optional filename is only used as a reference to the channel in error messages.

val from_string : ?utf8:context -> ?filename:string -> string -> buffer

from_string ~filename str returns a buffer constructed using the string str. The optional filename is only used as a reference to the channel in error messages.

val from_fun : ('a -> unit) -> context -> string -> ('a -> string * bool) -> 'a -> buffer

from_fun finalise utf8 name get data returns a buffer constructed from the object data using the get function. The get function is used to obtain one line of input from data. The finalise function is applied to data when the end of file is reached. The name string is used to reference the origin of the data in error messages. Position are reported according to utf8.

exception Preprocessor_error of string * string

Exception that can be raised by a preprocessor in case of error. The first string references the name of the buffer (e.g. the name of the corresponding file) and the second string contains the message.

val pp_error : string -> string -> 'a

pp_error name msg raises Preprocessor_error(name,msg).

module type Preprocessor = sig ... end

Specification of a preprocessor.

module WithPP (PP : Preprocessor) : sig ... end

Functor for building buffers with a preprocessor.

Buffer manipulation functions

val is_empty : buffer -> int -> bool

is_empty buf test whether the buffer buf is empty.

val line_num : buffer -> int

line_num buf returns the current line number of buf.

val col_num : buffer -> pos -> int
val line_offset : buffer -> int

line_beginning buf returns the offset of the current line in the buffer buf.

val char_pos : buffer -> pos -> int

position in the file

val byte_pos : buffer -> pos -> int

position in bytes, regardless to utf8

val normalize : buffer -> pos -> buffer * pos

normalize buf pos ensures that pos is less than the length of the current line in str.

val filename : buffer -> string

filename buf returns the file name associated to the buf.

val buffer_uid : buffer -> int

buffer_uid buf returns a unique identifier for buf.

val buffer_equal : buffer -> buffer -> bool

buffer_eq b1 b2 tests the equality of b1 and b2.

val buffer_compare : buffer -> buffer -> int

buffer_compare b1 b2 compares b1 and b2.

val buffer_before : buffer -> int -> buffer -> int -> bool

buffer_before b1 i1 b2 i2 returns true if the position b1, i1 is before b2, i2. Gives meaningless result if b1 and b2 do not refer to the same file.

module Tbl : sig ... end

Table to associate value to positions in input buffers. The complexity of access in the table is O(ln(N)) where N is the number of tables.

OCaml

Innovation. Community. Security.