/* Simple lexical (and some syntactical) analysis */

/* #include <stdio.h>    for debugging only */
#include "lex.h"

char *skipstring(char *p0)
{
  char *p=p0;

  p++;  /* skip leading quote */

  while(*p && *p!='"')
    if(*p=='\\' && p[1]) p+=2;
    else p++;
  if(*p) p++;   /* skip terminating quote */
  return p;
}

char *skippar(char *p, char right)
{
  return skiparg(p,right,right);
}

char *skiparg(char *p0,char right1, char right2)
{
  char *p=p0;

  p++;  /* skip opening parenthesis */

  /*
  fprintf(stderr,"skiparg(%s,'%c','%c')\n",p0,right1,right2);
  */
  while(*p && *p!=right1 && *p!=right2) {
    switch(*p) {
      case '"': p=skipstring(p); break;
      case '(': p=skippar(p,')'); if(*p) p++; break;
      case '[': p=skippar(p,']'); if(*p) p++;break;
      default:  p++; continue;
    }
/*    if(*p) p++;          skip ')' or ']' */
  }
  /*
  fprintf(stderr,"stopped at %c after %d bytes.\n",*p,p-p0);
  */
  return p;
}

char *skipspace(char *p)
{
  while(*p==' ' || *p=='\t') p++;
  return p;
}
