SmallCC / src / option.ml

exception OptionError of string * string

class option argv = 
object(this)

  val mutable files = []
  val mutable options = Hashtbl.create 101

  (***************** Option managment *******************)

  method getFiles = files

  method addOpt key value =
    Hashtbl.add options key value

  method addFile (filepath:string) =
    files <- filepath::files

  method next (l:string list) (f:string -> unit) = match l with
      []   -> raise (OptionError("next", "Option missing"))
    | e::r -> f e; this#rec_parce r

  method rec_parce (l:string list) = match l with
        []                  ->
          ()
      | e::r when e = "-pp"
          -> this#addOpt "prettyprint" "yes"; this#rec_parce r
      | e::r when e = "-o"
          -> this#next r (fun e -> this#addOpt "output" e; ()); ()
      | e::r
          -> this#addFile e; this#rec_parce r; ()
  
  method parse () = match (Array.to_list argv) with
      []      -> ()
    | _::args -> this#rec_parce args

  (*************** method get ******************)

  method is key =
    try
      if (Hashtbl.find options key = "yes") then true else false
    with
      Not_found -> print_endline ("Option warning: " ^ key); false

  method get key =
    try
      Hashtbl.find options key
    with
      Not_found -> print_endline ("Option warning: " ^ key); ""

end

let option =
  let a = new option Sys.argv in
    a
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.