File Coverage

blib/lib/App/Dochazka/CLI/TokenMap.pm
Criterion Covered Total %
statement 11 11 100.0
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 15 15 100.0


line stmt bran cond sub pod time code
1             # *************************************************************************
2             # Copyright (c) 2014-2017, SUSE LLC
3             #
4             # All rights reserved.
5             #
6             # Redistribution and use in source and binary forms, with or without
7             # modification, are permitted provided that the following conditions are met:
8             #
9             # 1. Redistributions of source code must retain the above copyright notice,
10             # this list of conditions and the following disclaimer.
11             #
12             # 2. Redistributions in binary form must reproduce the above copyright
13             # notice, this list of conditions and the following disclaimer in the
14             # documentation and/or other materials provided with the distribution.
15             #
16             # 3. Neither the name of SUSE LLC nor the names of its contributors may be
17             # used to endorse or promote products derived from this software without
18             # specific prior written permission.
19             #
20             # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21             # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22             # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23             # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
24             # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25             # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26             # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27             # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28             # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29             # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30             # POSSIBILITY OF SUCH DAMAGE.
31             # *************************************************************************
32             #
33             # Token map
34             #
35             package App::Dochazka::CLI::TokenMap;
36              
37 20     20   398 use 5.012;
  20         66  
38 20     20   95 use strict;
  20         40  
  20         452  
39 20     20   96 use warnings;
  20         48  
  20         578  
40              
41 20     20   91 use Exporter qw( import );
  20         57  
  20         7389  
42              
43             our @EXPORT_OK = qw( $completion_map $token_map );
44              
45              
46              
47             =head1 NAME
48              
49             App::Dochazka::CLI::TokenMap - Token map
50              
51              
52              
53             =head1 PACKAGE VARIABLES
54              
55             =over
56              
57             =item C<< $token_map >>
58              
59             Maps tokens to regular expression "strings". These strings are just the
60             "business end" - the final regular expression is generated from each string in
61             L.
62              
63             Whatever information you need to get out of the token needs to be in
64             parentheses. If the token is just a reserved word from which no information
65             need be extracted, just put the entire thing in parentheses.
66              
67             Note that the regex comparison that takes place in
68             L uses the 'i' modifier for a case-insensitive
69             comparison.
70              
71             =back
72              
73             =cut
74              
75             our $token_map = {
76             # ACTIVE => '(active)',
77             ACTIVITY => '(activi\S*)',
78             ADD => '(add\S*)',
79             # ADMIN => '(adm\S*)',
80             AID => '(aid\S*)',
81             ALL => '(all\S*)',
82             # APRIL => '(apr\S*)',
83             # AUGUST => '(aug\S*)',
84             BUGREPORT => '(bug\S*)',
85             CLEAR => '(cle\S*)',
86             CODE => '(cod\S*)',
87             COMMIT => '(comm\S*)',
88             COMPONENT => '(comp\S*)',
89             CONFIGINFO => '(conf\S*)',
90             COOKIEJAR => '(coo\S*)',
91             CORE => '(cor\S*)',
92             COUNT => '(cou\S*)',
93             CURRENT => '(cur\S*)',
94             DATE => '(date)',
95             DATELIST => '(datel\S*)',
96             DBSTATUS => '(dbs\S*)',
97             # DECEMBER => '(dec\S*)',
98             DELETE => '(del\S*)',
99             DISABLED => '(dis\S*)',
100             DOCU => '(doc\S*)',
101             DRY_RUN => '(dry\S*)',
102             DUMP => '(dum\S*)',
103             ECHO => '(ech\S*)',
104             EFFECTIVE => '(eff\S*)',
105             EID => '(eid[^\s=]*)',
106             EMPLOYEE => '(emp[^\s=]*)',
107             EMPLOYEE_SPEC => '((emp|sec_id|nick|eid)\S*=([%[:alnum:]_][%[:alnum:]_-]*)*)',
108             EXIT => '(((exi)|(qui)|(\\\\q))\S*)',
109             # FEBRUARY => '(feb\S*)',
110             FETCH => '(fet\S*)',
111             FILLUP => '(fil\S*)',
112             FORBIDDEN => '(for\S*)',
113             # FRIDAY => '(fri\S*)', RESERVED BY _DOW
114             FULL => '(ful\S*)',
115             FULLNAME => '(fulln\S*)',
116             GENERATE => '(gen\S*)',
117             GET => '(get\S*)',
118             HISTORY => '(his\S*)',
119             HOLIDAY => '(hol\S*)',
120             HTML => '(htm\S*)',
121             IID => '(iid\S*)',
122             IMPORT => '(imp\S*)',
123             # INACTIVE => '(ina\S*)',
124             INSERT => '(ins\S*)',
125             INTERVAL => '(int\S*)',
126             # JANUARY => '(jan\S*)',
127             # JULY => '(jul\S*)',
128             # JUNE => '(jun\S*)',
129             LDAP => '(lda\S*)',
130             LID => '(lid\S*)',
131             LIST => '(lis\S*)',
132             LOCK => '(loc\S*)',
133             # MARCH => '(mar\S*)',
134             # MAY => '(may\S*)',
135             MEMORY => '(mem\S*)',
136             META => '(met\S*)',
137             # MONDAY => '(mon\S*)', RESERVED BY _DOW
138             NEW => '(new\S*)',
139             NICK => '(nic[^\s=]*)',
140             NOOP => '(noo\S*)',
141             # NOVEMBER => '(nov\S*)',
142             # OCTOBER => '(oct\S*)',
143             PARAM => '(par\S*)',
144             # PASSERBY => '(passe\S*)',
145             PASSWORD => '(passw\S*)',
146             PATH => '(pat\S*)',
147             PHID => '(phi[^\s=]*)',
148             PHISTORY_SPEC => 'phi[^\s=]*=(\d+)',
149             POD => '(pod\S*)',
150             POST => '(pos\S*)',
151             PRIV => '(pri\S*)',
152             PRIV_SPEC => '((active)|(adm\S*)|(ina\S*)|(passe\S*))',
153             PROFILE => '(prof\S*)',
154             PROMPT => '(prom\S*)',
155             PUT => '(put\S*)',
156             REMARK => '(rem\S*)',
157             REPORT => '(rep\S*)',
158             # SATURDAY => '(sat\S*)', RESERVED BY _DOW
159             SCHEDULE => '(sch\S*)',
160             SCHEDULE_SPEC => '((sco|sid)[^\s=]*=([%[:alnum:]_][%[:alnum:]_-]*)*)',
161             SCODE => '(sco[^\s=]*)',
162             SEARCH => '(sea\S*)',
163             SEC_ID => '(sec[^\s=]*)',
164             SELF => '(sel\S*)',
165             # SEPTEMBER => '(sep\S*)',
166             SESSION => '(ses\S*)',
167             SET => '(set\S*)',
168             SHID => '(shi[^\s=]*)',
169             SHISTORY_SPEC => 'shi[^\s=]*=(\d+)',
170             SHOW => '(sho\S*)',
171             SID => '(sid[^\s=]*)',
172             SITE => '(sit\S*)',
173             # SUNDAY => '(sun\S*)', RESERVED BY _DOW
174             SUMMARY => '(sum\S*)',
175             SUPERVISOR => '(sup\S*)',
176             TEAM => '(tea\S*)',
177             TEXT => '(tex\S*)',
178             # THURSDAY => '(thu\S*)', RESERVED BY _DOW
179             # TODAY => '(tod\S*)', RESERVED BY _TIMESTAMP
180             # TOMORROW => '(tom\S*)', RESERVED BY _TIMESTAMP
181             # TUESDAY => '(tue\S*)', RESERVED BY _DOW
182             VERSION => '(ver\S*)',
183             # WEDNESDAY => '(wed\S*)', RESERVED BY _DOW
184             WHOAMI => '(who\S*)',
185             # YESTERDAY => '(yes\S*)', RESERVED BY _TIMESTAMP
186             _DATE => '(((\d{2,4}-)?\d{1,2}-\d{1,2})|(tod\S*)|(tom\S*)|(yes\S*)|([\+\-]\d{1,3}))',
187             _DOCU => '(([^\{\s]+)|(\"[^\"]*\"))',
188             _DOW => '((mon\S*)|(tue\S*)|(wed\S*)|(thu\S*)|(fri\S*)|(sat\S*)|(sun\S*))',
189             _HYPHEN => '(-)',
190             _JSON => '(\{[^\{]*\})',
191             _MONTH => '((jan\S*)|(feb\S*)|(mar\S*)|(apr\S*)|(may\S*)|(jun\S*)|(jul\S*)|(aug\S*)|(sep\S*)|(oct\S*)|(nov\S*)|(dec\S*))',
192             _NUM => '([123456789][0123456789]*)',
193             _PATH => '([[:alnum:]_.][[:alnum:]_/.-]+)',
194             _TERM => '([%[:alnum:]_][%[:alnum:]_-]*)',
195             _TIME => '(\d{1,2}:\d{1,2}(:\d{1,2})?)',
196             _TIMERANGE => '(\d{1,2}:\d{1,2}-\d{1,2}:\d{1,2})',
197             _TIMESTAMP => '(\"?(\d{2,4}-)?[[:alnum:]]{1,3}-\d{1,2}(\s+\d{1,2}:\d{1,2}(:\d{1,2})?)?\"?)',
198             _TIMESTAMPDEPR => '(\"?((?((\d{2,4}-)?\d{1,2}-\d{1,2})|(tod\S*)|(tom\S*)|(yes\S*))\s+)?(?\d{1,2}:\d{1,2}(:\d{1,2})?)\"?)',
199             _TSRANGE => '([\[\(][^\[\(\]\)]*,[^\[\(]*[\]\)])',
200             };
201              
202             our $completion_map = {
203             active => 'PRIV_SPEC',
204             activity => 'ACTIVITY',
205             add => 'ADD',
206             admin => 'PRIV_SPEC',
207             aid => 'AID',
208             all => 'ALL',
209             april => '_MONTH',
210             august => '_MONTH',
211             bugreport => 'BUGREPORT',
212             clear => 'CLEAR',
213             code => 'CODE',
214             commit => 'COMMIT',
215             component => 'COMPONENT',
216             configinfo => 'CONFIGINFO',
217             cookiejar => 'COOKIEJAR',
218             core => 'CORE',
219             count => 'COUNT',
220             current => 'CURRENT',
221             date => 'DATE',
222             datelist => 'DATELIST',
223             dbstatus => 'DBSTATUS',
224             december => '_MONTH',
225             delete => 'DELETE',
226             disabled => 'DISABLED',
227             docu => 'DOCU',
228             dry_run => 'DRY_RUN',
229             dump => 'DUMP',
230             echo => 'ECHO',
231             effective => 'EFFECTIVE',
232             eid => 'EID',
233             'eid=' => 'EMPLOYEE_SPEC',
234             employee => 'EMPLOYEE',
235             'employee=' => 'EMPLOYEE_SPEC',
236             exit => 'EXIT',
237             february => '_MONTH',
238             fetch => 'FETCH',
239             fillup => 'FILLUP',
240             forbidden => 'FORBIDDEN',
241             friday => '_DOW',
242             fullname => 'FULLNAME',
243             generate => 'GENERATE',
244             get => 'GET',
245             history => 'HISTORY',
246             holiday => 'HOLIDAY',
247             html => 'HTML',
248             iid => 'IID',
249             import => 'IMPORT',
250             inactive => 'PRIV_SPEC',
251             insert => 'INSERT',
252             interval => 'INTERVAL',
253             january => '_MONTH',
254             july => '_MONTH',
255             june => '_MONTH',
256             ldap => 'LDAP',
257             lid => 'LID',
258             list => 'LIST',
259             lock => 'LOCK',
260             march => '_MONTH',
261             may => '_MONTH',
262             memory => 'MEMORY',
263             meta => 'META',
264             monday => '_DOW',
265             new => 'NEW',
266             nick => 'NICK',
267             'nick=' => 'EMPLOYEE_SPEC',
268             noop => 'NOOP',
269             november => '_MONTH',
270             october => '_MONTH',
271             param => 'PARAM',
272             passerby => 'PRIV_SPEC',
273             password => 'PASSWORD',
274             path => 'PATH',
275             phid => 'PHID',
276             'phid=' => 'PHISTORY_SPEC',
277             pod => 'POD',
278             post => 'POST',
279             priv => 'PRIV',
280             profile => 'PROFILE',
281             prompt => 'PROMPT',
282             put => 'PUT',
283             quit => 'QUIT',
284             remark => 'REMARK',
285             report => 'REPORT',
286             saturday => '_DOW',
287             schedule => 'SCHEDULE',
288             scode => 'SCODE',
289             'scode=' => 'SCHEDULE_SPEC',
290             search => 'SEARCH',
291             sec_id => 'SEC_ID',
292             'sec_id=' => 'EMPLOYEE_SPEC',
293             self => 'SELF',
294             september => '_MONTH',
295             session => 'SESSION',
296             set => 'SET',
297             shid => 'SHID',
298             'shid=' => 'SHISTORY_SPEC',
299             show => 'SHOW',
300             sid => 'SID',
301             'sid=' => 'SCHEDULE_SPEC',
302             site => 'SITE',
303             sunday => '_DOW',
304             summary => 'SUMMARY',
305             supervisor => 'SUPERVISOR',
306             team => 'TEAM',
307             text => 'TEXT',
308             thursday => '_DOW',
309             today => '_TIMESTAMP',
310             tomorrow => '_TIMESTAMP',
311             tuesday => '_DOW',
312             version => 'VERSION',
313             wednesday => '_DOW',
314             whoami => 'WHOAMI',
315             yesterday => '_TIMESTAMP',
316             };
317              
318             1;