Hi,
I am please to announce the new releases of two opam packages: ez_subst and ez_cmdliner. We use both of them as dependencies of drom (and use drom to manage them).
-
ez_substis a simple library to perform string replacements in strings. It can be seen as a replacement forPrintfwhen you are lost with too many%sin one format, or a replacement forBuffer.add_substitutewhen you want a more control. Replacements are chosen by functions, and can be separately specified using optional arguments~brace(for${var}),~paren(for$(var)),~bracket(for$[var]) and~var(for$alphanum). Separator$can be changed, and notation can be symmetric (%{x}%).https://ocamlpro.github.io/ez_subst
https://ocamlpro.github.io/ez_subst/doc/ez_subst/Ez_subst/V1/EZ_SUBST/index.htmlFor example:
open Ez_subst.V1 (* versionned interface *) let s = EZ_SUBST.string ~brace:(fun ctxt n -> string_of_int (ctxt + int_of_string n)) ~ctxt:3 "${4} ${5}" let s = EZ_SUBST.string ~sep:'!' ~paren:(fun () s -> String.uppercase s) ~ctxt:() "!(abc) !(def)" let s = EZ_SUBST.string ~sym:true ~sep:'%' ~brace:(fun ctxt_ s -> ctxt ^ " " ^ s) ~ctxt:"Hello" "%{John}% %{Sandy}%" let s = EZ_SUBST.string_from_list ~default:"unknown" [ "name", "Doe"; "surname", "John" ] "${name} $(surname) is missing" -
ez_cmdlineris a simple layer overcmdlinerto provide an interface à laArgmodule. It provides support for a one-command and sub-commands modes. It also provides a ReST generator to document sub-commands and integrate the documentation in a Sphinx documentation (to use withdromfor example).https://ocamlpro.github.io/ez_cmdliner
For example:
open Ezcmd.V2
let cmd_new = EZCMD.sub "new" (* for `drom new` *)
~args: [
[ "dir" ], Arg.String (fun s -> dir := Some s),
EZCMD.info ~docv:"DIRECTORY"
"Dir where package sources are stored (src by default)";
[ "library" ], Arg.Unit (fun () -> skeleton := Some "library"),
EZCMD.info "Project contains only a library";
[ "i"; "inplace" ], Arg.Set inplace, (* for `-i` or `--inplace` *)
EZCMD.info "Create project in the the current directory";
[], Arg.Anon (0, fun name -> project_name := Some name),
EZCMD.info ~docv:"PROJECT" "Name of the project"
]
~doc:"Create a new project"
(fun () ->
action ~name:!project_name ~skeleton:!skeleton ~dir:!dir
~inplace:!inplace ~args)
~man: [
`S "DESCRIPTION";
`Blocks [
`P "This command performs the following actions:";
]
]
let () = EZCMD.main_with_subcommands ~name:"drom" ~version:"0.1.0"
~doc:"Create and manage an OCaml project" ~man:[] ~argv [ cmd_new ]
~common_args
Both packages are now available in opam repository.
–
Fabrice