SmallCC / src /

exception OptionError of string * string

class option argv = 

  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 =
      if (Hashtbl.find options key = "yes") then true else false
    Not_found -> false

  method get key =
      Hashtbl.find options key
    Not_found -> ""


let option =
  let a = new option Sys.argv in
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
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.