4 Copyright (C) 2006-2009 Jonathan Zarate
14 <% ident(arg, "arg", 'arg'); %>
16 Syntax checking is very relaxed and all arguments are considered a
17 string. Example, the following are the same:
23 int parse_asp(const char *path
)
34 if (f_read_alloc_string(path
, &buffer
, 128 * 1024) < 0) {
36 if (!header_sent
) send_error(500, NULL
, "Read error");
40 if (!header_sent
) send_header(200, NULL
, mime_html
, 0);
42 // <% id(arg, arg); %>
45 if ((b
= strstr(cp
, "%>")) == NULL
) {
55 while ((c
= strstr(a
, "<%")) != NULL
) {
62 web_write(cp
, b
- cp
);
67 web_write(cp
, (a
- cp
) - 2);
71 while (*a
== ' ') ++a
;
73 while (((*a
>= 'a') && (*a
<= 'z')) || ((*a
>= 'A') && (*a
<= 'Z')) || ((*a
>= '0') && (*a
<= '9')) || (*a
== '_')) {
78 syslog(LOG_WARNING
, "Identifier not found in %s @%u", path
, a
- buffer
);
83 while (*a
== ' ') ++a
;
86 syslog(LOG_WARNING
, "Expecting ( in %s @%u", path
, a
- buffer
);
92 // <% foo(123, "arg"); %>
95 // printf("\n[[['%s'\n", ident);
99 while (*a
== ' ') ++a
;
103 while ((*a
== ' ') || (*a
== ';')) ++a
;
106 for (api
= aspapi
; api
->name
; ++api
) {
107 if (strcmp(api
->name
, ident
) == 0) {
108 api
->exec(argc
, argv
);
116 for (z = 0; z < argc; ++z) {
117 printf(" %d '%s'\n", z, argv[z]);
125 syslog(LOG_WARNING
, "Error while parsing arguments in %s @%u", path
, a
- buffer
);
130 if ((*a
== '"') || (*a
== '\'')) {
132 argv
[argc
++] = a
+ 1;
133 while ((*++a
!= x
) && (*a
!= 0)) {
135 if (*++a
== 0) break;
144 while ((*a
!= ',') && (*a
!= ')') && (*a
!= ' ') && (*a
!= 0)) ++a
;
146 while (*a
== ' ') ++a
;
151 if (*a
!= ',') break;
156 if (a
!= NULL
) syslog(LOG_WARNING
, "Error while parsing arguments in %s @%u", path
, a
- buffer
);
159 // printf("argc=%d]]]\n", argc);
167 void wo_asp(char *path
)