Bump to 1.14.1
[platform/upstream/augeas.git] / lenses / phpvars.aug
1 (* Phpvars module for Augeas
2  Author: Free Ekanayaka <free@64studio.com>
3
4  Reference: PHP syntax
5
6 *)
7
8 module Phpvars =
9
10    autoload xfm
11
12 (************************************************************************
13  *                           USEFUL PRIMITIVES
14  *************************************************************************)
15
16 let eol        = Util.eol
17 let empty      = Util.empty_c_style
18
19 let open_php   = del /<\?(php)?[ \t]*\n/i "<?php\n"
20 let close_php  = del /([ \t]*(php)?\?>\n[ \t\n]*)?/i "php?>\n"
21 let sep_eq     = del /[ \t\n]*=[ \t\n]*/ " = "
22 let sep_opt_spc = Sep.opt_space
23 let sep_spc    = Sep.space
24 let sep_dollar = del /\$/ "$"
25 let sep_scl    = del /[ \t]*;/ ";"
26
27 let chr_blank = /[ \t]/
28 let chr_nblank = /[^ \t\n]/
29 let chr_any    = /./
30 let chr_star   = /\*/
31 let chr_nstar  = /[^* \t\n]/
32 let chr_slash  = /\//
33 let chr_nslash = /[^\/ \t\n]/
34 let chr_variable = /\$[A-Za-z0-9'"_:-]+/
35
36 let sto_to_scl = store (/([^ \t\n].*[^ \t\n;]|[^ \t\n;])/ - /.*;[ \t]*(\/\/|#).*/) (* " *)
37 let sto_to_eol = store /([^ \t\n].*[^ \t\n]|[^ \t\n])/
38
39 (************************************************************************
40  *                              COMMENTS
41  *************************************************************************)
42
43 (* Both c-style and shell-style comments are valid
44    Default to c-style *)
45 let comment_one_line = Util.comment_generic /[ \t]*(\/\/|#)[ \t]*/ "// "
46
47 let comment_eol = Util.comment_generic /[ \t]*(\/\/|#)[ \t]*/ " // "
48
49 let comment      = Util.comment_multiline | comment_one_line
50
51 let eol_or_comment = eol | comment_eol
52
53
54 (************************************************************************
55  *                               ENTRIES
56  *************************************************************************)
57
58 let simple_line (kw:regexp) (lns:lens) = [ key kw
59                  . lns
60                  . sep_scl
61                  . eol_or_comment ]
62
63 let global     = simple_line "global" (sep_opt_spc . sep_dollar . sto_to_scl)
64
65 let assignment =
66   let arraykey = [ label "@arraykey" . store /\[[][A-Za-z0-9'"_:-]+\]/ ] in (* " *)
67   simple_line chr_variable (arraykey? . (sep_eq . sto_to_scl))
68
69 let variable = Util.indent . assignment
70
71 let classvariable =
72   Util.indent . del /(public|var)/ "public" . Util.del_ws_spc . assignment
73
74 let include = simple_line "@include" (sep_opt_spc . sto_to_scl)
75
76 let generic_function (kw:regexp) (lns:lens) =
77   let lbracket = del /[ \t]*\([ \t]*/ "(" in
78   let rbracket = del /[ \t]*\)/ ")" in
79     simple_line kw (lbracket . lns . rbracket)
80
81 let define     =
82   let variable_re = /[A-Za-z0-9'_:-]+/ in
83   let quote = del /["']/ "'" in
84   let sep_comma = del /["'][ \t]*,[ \t]*/ "', " in
85   let sto_to_rbracket = store (/[^ \t\n][^\n]*[^ \t\n\)]|[^ \t\n\)]/
86                              - /.*;[ \t]*(\/\/|#).*/) in
87     generic_function "define" (quote . store variable_re . sep_comma
88                                      . [ label "value" . sto_to_rbracket ])
89
90 let simple_function (kw:regexp) =
91   let sto_to_rbracket = store (/[^ \t\n][^\n]*[^ \t\n\)]|[^ \t\n\)]/
92                              - /.*;[ \t]*(\/\/|#).*/) in
93     generic_function kw sto_to_rbracket
94
95 let entry      = Util.indent
96                . ( global
97                  | include
98                  | define
99                  | simple_function "include"
100                  | simple_function "include_once"
101                  | simple_function "echo" )
102
103
104 let class =
105   let classname = key /[A-Za-z0-9'"_:-]+/ in (* " *)
106   del /class[ \t]+/ "class " .
107   [ classname . Util.del_ws_spc . del "{" "{" .
108     (empty|comment|entry|classvariable)*
109   ] . del "}" "}"
110
111 (************************************************************************
112  *                                LENS
113  *************************************************************************)
114
115 let lns        = open_php . (empty|comment|entry|class|variable)* . close_php
116
117 let filter     = incl "/etc/squirrelmail/config.php"
118
119 let xfm        = transform lns filter