(**
  Module [LinkGrammar]: Provides an Ocaml interface to LinkGrammar --
   A parser for sentences

   The Ocaml API maps almost 1-1 with the LinkGrammar C API -
   see description of the C API at: 
   http://abisource.com/projects/link-grammar/api/index.html

  Author: Ramu Ramamurthy ramu_ramamurthy at yahoo dot com   
  (C) 2006                                                     

  This software is released under the BSD license         
*)


(**
   {b ------parse options and operations on it------}
*)

type parseOptions

val poCreate : unit -> parseOptions

val poGetVerbosity : parseOptions -> int
val poSetVerbosity : parseOptions -> int -> unit
val poGetLinkageLimit : parseOptions -> int
val poSetLinkageLimit : parseOptions -> int -> unit
val poGetDisjunctCost : parseOptions -> int
val poSetDisjunctCost : parseOptions -> int -> unit
val poGetMinNullCount : parseOptions -> int
val poSetMinNullCount : parseOptions -> int -> unit
val poGetMaxNullCount : parseOptions -> int
val poSetMaxNullCount : parseOptions -> int -> unit
val poGetNullBlock : parseOptions -> int
val poSetNullBlock : parseOptions -> int -> unit
val poGetShortLength : parseOptions -> int
val poSetShortLength : parseOptions -> int -> unit
val poGetIslandsOk : parseOptions -> int
val poSetIslandsOk : parseOptions -> int -> unit
val poGetMaxParseTime : parseOptions -> int
val poSetMaxParseTime : parseOptions -> int -> unit
val poTimerExpired : parseOptions -> int
val poResetResources : parseOptions -> unit
val poGetAllowNull : parseOptions -> int
val poSetAllowNull : parseOptions -> int -> unit
val poGetAllShortConnectors : parseOptions -> int
val poSetAllShortConnectors : parseOptions -> int -> unit

(**
   {b -------dictionary and operations on it--------}
*)

type dictionary
(**    
       See notes in the README file on specifying paths to
       dictionary files
*)
val dictCreate : string -> dictionary


(**
   {b -------sentences and operations on it--------}
*)

type sentence

val sentCreate : dictionary -> string -> sentence
val sentParse : sentence -> parseOptions -> int
val sentLength : sentence -> int
val sentNullCount : sentence -> int
val sentNumLinkagesFound : sentence -> int
val sentNumValidLinkages : sentence -> int
val sentNumLinkagesPP : sentence -> int
val sentNumViolations : sentence -> int -> int
val sentDisjunctCost : sentence -> int -> int


(**
   {b -------linkage and operations on it--------}
*)

type linkage

val linkageCreate : sentence -> int -> parseOptions -> linkage
val linkageGetNumWords : linkage -> int
val linkageGetNumLinks : linkage -> int
val linkageGetLinkLength : linkage -> int -> int
val linkageGetLinkLword : linkage -> int -> int
val linkageGetLinkRword : linkage -> int -> int
val linkagePrintDiagram : linkage -> string
val linkagePrintPostscript : linkage -> int -> string
val linkagePrintLinksAndDomains : linkage -> string
val linkageGetLinkLabel : linkage -> int -> string
val linkageGetLinkLlabel : linkage -> int -> string
val linkageGetLinkRlabel : linkage -> int -> string
val linkageGetWords : linkage -> string list
val linkageGetWord : linkage -> int -> string
val linkageGetNumDomains : linkage -> int -> int
val linkageGetLinkDomainNames : linkage -> int -> string list
val linkageGetViolationName : linkage -> string
val linkageUnusedWordCost : linkage -> int
val linkageDisjunctCost : linkage -> int
val linkageLinkCost : linkage -> int