Blame lenses/phpvars.aug

Packit Service a2ae7a
(* Phpvars module for Augeas
Packit Service a2ae7a
 Author: Free Ekanayaka <free@64studio.com>
Packit Service a2ae7a
Packit Service a2ae7a
 Reference: PHP syntax
Packit Service a2ae7a
Packit Service a2ae7a
*)
Packit Service a2ae7a
Packit Service a2ae7a
module Phpvars =
Packit Service a2ae7a
Packit Service a2ae7a
   autoload xfm
Packit Service a2ae7a
Packit Service a2ae7a
(************************************************************************
Packit Service a2ae7a
 *                           USEFUL PRIMITIVES
Packit Service a2ae7a
 *************************************************************************)
Packit Service a2ae7a
Packit Service a2ae7a
let eol        = Util.eol
Packit Service a2ae7a
let empty      = Util.empty_c_style
Packit Service a2ae7a
Packit Service a2ae7a
let open_php   = del /<\?(php)?[ \t]*\n/i "
Packit Service a2ae7a
let close_php  = del /([ \t]*(php)?\?>\n[ \t\n]*)?/i "php?>\n"
Packit Service a2ae7a
let sep_eq     = del /[ \t\n]*=[ \t\n]*/ " = "
Packit Service a2ae7a
let sep_opt_spc = Sep.opt_space
Packit Service a2ae7a
let sep_spc    = Sep.space
Packit Service a2ae7a
let sep_dollar = del /\$/ "$"
Packit Service a2ae7a
let sep_scl    = del /[ \t]*;/ ";"
Packit Service a2ae7a
Packit Service a2ae7a
let chr_blank = /[ \t]/
Packit Service a2ae7a
let chr_nblank = /[^ \t\n]/
Packit Service a2ae7a
let chr_any    = /./
Packit Service a2ae7a
let chr_star   = /\*/
Packit Service a2ae7a
let chr_nstar  = /[^* \t\n]/
Packit Service a2ae7a
let chr_slash  = /\//
Packit Service a2ae7a
let chr_nslash = /[^\/ \t\n]/
Packit Service a2ae7a
let chr_variable = /\$[A-Za-z0-9'"_:-]+/
Packit Service a2ae7a
Packit Service a2ae7a
let sto_to_scl = store (/([^ \t\n].*[^ \t\n;]|[^ \t\n;])/ - /.*;[ \t]*(\/\/|#).*/) (* " *)
Packit Service a2ae7a
let sto_to_eol = store /([^ \t\n].*[^ \t\n]|[^ \t\n])/
Packit Service a2ae7a
Packit Service a2ae7a
(************************************************************************
Packit Service a2ae7a
 *                              COMMENTS
Packit Service a2ae7a
 *************************************************************************)
Packit Service a2ae7a
Packit Service a2ae7a
(* Both c-style and shell-style comments are valid
Packit Service a2ae7a
   Default to c-style *)
Packit Service a2ae7a
let comment_one_line = Util.comment_generic /[ \t]*(\/\/|#)[ \t]*/ "// "
Packit Service a2ae7a
Packit Service a2ae7a
let comment_eol = Util.comment_generic /[ \t]*(\/\/|#)[ \t]*/ " // "
Packit Service a2ae7a
Packit Service a2ae7a
let comment      = Util.comment_multiline | comment_one_line
Packit Service a2ae7a
Packit Service a2ae7a
let eol_or_comment = eol | comment_eol
Packit Service a2ae7a
Packit Service a2ae7a
Packit Service a2ae7a
(************************************************************************
Packit Service a2ae7a
 *                               ENTRIES
Packit Service a2ae7a
 *************************************************************************)
Packit Service a2ae7a
Packit Service a2ae7a
let simple_line (kw:regexp) (lns:lens) = [ key kw
Packit Service a2ae7a
                 . lns
Packit Service a2ae7a
                 . sep_scl
Packit Service a2ae7a
                 . eol_or_comment ]
Packit Service a2ae7a
Packit Service a2ae7a
let global     = simple_line "global" (sep_opt_spc . sep_dollar . sto_to_scl)
Packit Service a2ae7a
Packit Service a2ae7a
let assignment =
Packit Service a2ae7a
  let arraykey = [ label "@arraykey" . store /\[[][A-Za-z0-9'"_:-]+\]/ ] in (* " *)
Packit Service a2ae7a
  simple_line chr_variable (arraykey? . (sep_eq . sto_to_scl))
Packit Service a2ae7a
Packit Service a2ae7a
let variable = Util.indent . assignment
Packit Service a2ae7a
Packit Service a2ae7a
let classvariable =
Packit Service a2ae7a
  Util.indent . del /(public|var)/ "public" . Util.del_ws_spc . assignment
Packit Service a2ae7a
Packit Service a2ae7a
let include = simple_line "@include" (sep_opt_spc . sto_to_scl)
Packit Service a2ae7a
Packit Service a2ae7a
let generic_function (kw:regexp) (lns:lens) =
Packit Service a2ae7a
  let lbracket = del /[ \t]*\([ \t]*/ "(" in
Packit Service a2ae7a
  let rbracket = del /[ \t]*\)/ ")" in
Packit Service a2ae7a
    simple_line kw (lbracket . lns . rbracket)
Packit Service a2ae7a
Packit Service a2ae7a
let define     =
Packit Service a2ae7a
  let variable_re = /[A-Za-z0-9'_:-]+/ in
Packit Service a2ae7a
  let quote = del /["']/ "'" in
Packit Service a2ae7a
  let sep_comma = del /["'][ \t]*,[ \t]*/ "', " in
Packit Service a2ae7a
  let sto_to_rbracket = store (/[^ \t\n][^\n]*[^ \t\n\)]|[^ \t\n\)]/
Packit Service a2ae7a
                             - /.*;[ \t]*(\/\/|#).*/) in
Packit Service a2ae7a
    generic_function "define" (quote . store variable_re . sep_comma
Packit Service a2ae7a
                                     . [ label "value" . sto_to_rbracket ])
Packit Service a2ae7a
Packit Service a2ae7a
let simple_function (kw:regexp) =
Packit Service a2ae7a
  let sto_to_rbracket = store (/[^ \t\n][^\n]*[^ \t\n\)]|[^ \t\n\)]/
Packit Service a2ae7a
                             - /.*;[ \t]*(\/\/|#).*/) in
Packit Service a2ae7a
    generic_function kw sto_to_rbracket
Packit Service a2ae7a
Packit Service a2ae7a
let entry      = Util.indent
Packit Service a2ae7a
               . ( global
Packit Service a2ae7a
                 | include
Packit Service a2ae7a
                 | define
Packit Service a2ae7a
                 | simple_function "include"
Packit Service a2ae7a
                 | simple_function "include_once"
Packit Service a2ae7a
                 | simple_function "echo" )
Packit Service a2ae7a
Packit Service a2ae7a
Packit Service a2ae7a
let class =
Packit Service a2ae7a
  let classname = key /[A-Za-z0-9'"_:-]+/ in (* " *)
Packit Service a2ae7a
  del /class[ \t]+/ "class " .
Packit Service a2ae7a
  [ classname . Util.del_ws_spc . del "{" "{" .
Packit Service a2ae7a
    (empty|comment|entry|classvariable)*
Packit Service a2ae7a
  ] . del "}" "}"
Packit Service a2ae7a
Packit Service a2ae7a
(************************************************************************
Packit Service a2ae7a
 *                                LENS
Packit Service a2ae7a
 *************************************************************************)
Packit Service a2ae7a
Packit Service a2ae7a
let lns        = open_php . (empty|comment|entry|class|variable)* . close_php
Packit Service a2ae7a
Packit Service a2ae7a
let filter     = incl "/etc/squirrelmail/config.php"
Packit Service a2ae7a
Packit Service a2ae7a
let xfm        = transform lns filter