Lines Matching refs:idx

240 get_token (int idx, sb *in, sb *name)
242 if (idx < in->len
243 && is_name_beginner (in->ptr[idx]))
245 sb_add_char (name, in->ptr[idx++]);
246 while (idx < in->len
247 && is_part_of_name (in->ptr[idx]))
249 sb_add_char (name, in->ptr[idx++]);
251 if (idx < in->len
252 && is_name_ender (in->ptr[idx]))
254 sb_add_char (name, in->ptr[idx++]);
258 if (macro_alternate && idx < in->len && in->ptr[idx] == '&')
259 idx++;
260 return idx;
266 getstring (int idx, sb *in, sb *acc)
268 while (idx < in->len
269 && (in->ptr[idx] == '"'
270 || (in->ptr[idx] == '<' && (macro_alternate || macro_mri))
271 || (in->ptr[idx] == '\'' && macro_alternate)))
273 if (in->ptr[idx] == '<')
276 idx++;
277 while ((in->ptr[idx] != '>' || nest)
278 && idx < in->len)
280 if (in->ptr[idx] == '!')
282 idx++;
283 sb_add_char (acc, in->ptr[idx++]);
287 if (in->ptr[idx] == '>')
289 if (in->ptr[idx] == '<')
291 sb_add_char (acc, in->ptr[idx++]);
294 idx++;
296 else if (in->ptr[idx] == '"' || in->ptr[idx] == '\'')
298 char tchar = in->ptr[idx];
301 idx++;
303 while (idx < in->len)
305 if (in->ptr[idx - 1] == '\\')
310 if (macro_alternate && in->ptr[idx] == '!')
312 idx ++;
314 sb_add_char (acc, in->ptr[idx]);
316 idx ++;
318 else if (escaped && in->ptr[idx] == tchar)
321 idx ++;
325 if (in->ptr[idx] == tchar)
327 idx ++;
329 if (idx >= in->len || in->ptr[idx] != tchar)
333 sb_add_char (acc, in->ptr[idx]);
334 idx ++;
340 return idx;
352 get_any_string (int idx, sb *in, sb *out)
355 idx = sb_skip_white (idx, in);
357 if (idx < in->len)
359 if (in->len > idx + 2 && in->ptr[idx + 1] == '\'' && ISBASE (in->ptr[idx]))
361 while (!ISSEP (in->ptr[idx]))
362 sb_add_char (out, in->ptr[idx++]);
364 else if (in->ptr[idx] == '%' && macro_alternate)
371 idx = (*macro_expr) (_("% operator needs absolute expression"),
372 idx + 1,
378 else if (in->ptr[idx] == '"'
379 || (in->ptr[idx] == '<' && (macro_alternate || macro_mri))
380 || (macro_alternate && in->ptr[idx] == '\''))
382 if (macro_alternate && ! macro_strip_at && in->ptr[idx] != '<')
386 idx = getstring (idx, in, out);
391 idx = getstring (idx, in, out);
400 while (idx < in->len
402 || (in->ptr[idx] != ' '
403 && in->ptr[idx] != '\t'))
404 && in->ptr[idx] != ','
405 && (in->ptr[idx] != '<'
408 char tchar = in->ptr[idx];
414 sb_add_char (out, in->ptr[idx++]);
415 while (idx < in->len
416 && in->ptr[idx] != tchar)
417 sb_add_char (out, in->ptr[idx++]);
418 if (idx == in->len)
419 return idx;
444 ++idx;
450 return idx;
484 do_formals (macro_entry *macro, int idx, sb *in)
489 idx = sb_skip_white (idx, in);
490 while (idx < in->len)
495 idx = get_token (idx, in, &formal->name);
499 --idx;
502 idx = sb_skip_white (idx, in);
506 && idx < in->len
507 && in->ptr[idx] == ':'
509 || idx + 1 >= in->len
510 || ! is_part_of_name (in->ptr[idx + 1])))
516 idx = get_token (sb_skip_white (idx + 1, in), in, &qual);
536 idx = sb_skip_white (idx, in);
538 if (idx < in->len && in->ptr[idx] == '=')
541 idx = get_any_string (idx + 1, in, &formal->def);
542 idx = sb_skip_white (idx, in);
569 cidx = idx;
570 idx = sb_skip_comma (idx, in);
571 if (idx != cidx && idx >= in->len)
573 idx = cidx;
606 return idx;
614 define_macro (int idx, sb *in, sb *label,
633 idx = sb_skip_white (idx, in);
640 if (idx < in->len && in->ptr[idx] == '(')
643 idx = do_formals (macro, idx + 1, in);
644 if (idx < in->len && in->ptr[idx] == ')')
645 idx = sb_skip_white (idx + 1, in);
652 idx = do_formals (macro, idx, in);
659 idx = get_token (idx, in, &name);
663 cidx = sb_skip_white (idx, in);
664 idx = sb_skip_comma (cidx, in);
665 if (idx == cidx || idx < in->len)
666 idx = do_formals (macro, idx, in);
668 idx = cidx;
670 if (!error && idx < in->len)
674 for (idx = 0; idx < name.len; idx++)
675 name.ptr[idx] = TOLOWER (name.ptr[idx]);
695 get_apost_token (int idx, sb *in, sb *name, int kind)
697 idx = get_token (idx, in, name);
698 if (idx < in->len
699 && in->ptr[idx] == kind
702 idx++;
703 return idx;
987 macro_expand (int idx, sb *in, macro_entry *m, sb *out)
1009 if (idx < in->len && in->ptr[idx] == '.')
1013 idx++;
1014 if ( idx < in->len
1015 && in->ptr[idx] != ' '
1016 && in->ptr[idx] != '\t')
1025 idx = get_any_string (idx, in, &n->actual);
1031 idx = sb_skip_white (idx, in);
1032 while (idx < in->len)
1037 scan = idx;
1052 idx = get_token (idx, in, &t);
1053 if (in->ptr[idx] != '=')
1075 idx = get_any_string (idx + 1, in, &ptr->actual);
1112 idx = get_any_string (idx, in, &f->actual);
1115 sb_add_buffer (&f->actual, in->ptr + idx, in->len - idx);
1116 idx = in->len;
1128 idx = sb_skip_comma (idx, in);
1131 if (in->ptr[idx] == ',')
1132 ++idx;
1133 if (ISWHITE (in->ptr[idx]))
1288 expand_irp (int irpc, int idx, sb *in, sb *out, int (*get_line) (sb *))
1295 idx = sb_skip_white (idx, in);
1305 idx = get_token (idx, in, &f.name);
1320 idx = sb_skip_comma (idx, in);
1321 if (idx >= in->len)
1330 if (irpc && in->ptr[idx] == '"')
1333 ++idx;
1336 while (idx < in->len)
1339 idx = get_any_string (idx, in, &f.actual);
1342 if (in->ptr[idx] == '"')
1349 nxt = sb_skip_white (idx + 1, in);
1352 idx = nxt;
1357 sb_add_char (&f.actual, in->ptr[idx]);
1358 ++idx;
1365 idx = sb_skip_comma (idx, in);
1367 idx = sb_skip_white (idx, in);