home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / fed0217s.zip / source / pars_pl.cpp < prev    next >
C/C++ Source or Header  |  2000-12-13  |  4KB  |  167 lines

  1. /*
  2. ** Module   :PARS_PL.CPP
  3. ** Abstract :
  4. **
  5. ** Copyright (C) Sergey I. Yevtushenko
  6. **
  7. ** Log: Fri  08/12/2000 Created
  8. **
  9. */
  10.  
  11. #include <parser.h>
  12. #include <version.h>
  13.  
  14. //----------------------------------------------------------------------
  15. //
  16. // Class Parser_PL
  17. //
  18. //----------------------------------------------------------------------
  19.  
  20. int Parser_PL::next_token()
  21. {
  22.     old_tok = tok;
  23.     tok_len = 0;
  24.     color = CL_DEFAULT;
  25.     char *tmp = tok;
  26.  
  27.     int q_chr = (state == ST_QUOTE1) ? '"': ((state == ST_QUOTE2) ? '\'':0);
  28.  
  29.     if(state == ST_QUOTE1 || state == ST_QUOTE2)
  30.     {
  31.  
  32. // Processing variables inside quotes temporarily disabled
  33.  
  34. /*
  35.         if(state == ST_QUOTE1 && *tmp == '$')
  36.         {
  37.             for(++tmp;__isic(*tmp);)
  38.             {
  39.                 tmp++;
  40.  
  41.                 if(tmp[0] == ':' && tmp[1] == ':')
  42.                     tmp += 2;
  43.             }
  44.  
  45.             color = CL_IDENT;
  46.  
  47.             return (tok_len = (tmp - tok));
  48.         }
  49. */
  50.         while(*tmp)
  51.         {
  52.             if(*tmp == '\\' && tmp[1])
  53.             {
  54.                 tmp += 2;
  55.                 continue;
  56.             }
  57.  
  58.             //if(*tmp == '$')
  59.             //    break;
  60.  
  61.             if(*tmp == q_chr)
  62.             {
  63.                 tmp++;
  64.                 state = ST_INITIAL;
  65.                 break;
  66.             }
  67.             tmp++;
  68.         }
  69.         color = CL_CONST;
  70.         return (tok_len = (tmp - tok));
  71.     }
  72.     switch(*tmp)
  73.     {
  74.         case ' ':
  75.         case '\t':
  76.             for(++tmp; __issp(*tmp);)
  77.                 tmp++;
  78.             return (tok_len = (tmp - tok));
  79.  
  80.         case '"':
  81.         case '\'':
  82.  
  83.             q_chr = *tmp;
  84.  
  85.             state = (q_chr == '"') ? ST_QUOTE1:ST_QUOTE2;
  86.  
  87.             tmp++;
  88.  
  89.             color = CL_CONST;
  90.             return (tok_len = (tmp - tok));
  91.  
  92.         case '#':
  93.             while(*tmp)
  94.                 tmp++;
  95.  
  96.             color = CL_COMMENT;
  97.             return (tok_len = (tmp - tok));
  98.  
  99.         case '0':
  100.         case '1':
  101.         case '2':
  102.         case '3':
  103.         case '4':
  104.         case '5':
  105.         case '6':
  106.         case '7':
  107.         case '8':
  108.         case '9':
  109.  
  110.             while(__isdd(*tmp))
  111.                 tmp++;
  112.             color = CL_NUMBER;
  113.             return (tok_len = (tmp - tok));
  114.  
  115.         case ';':
  116.             color = CL_SEMICOL;
  117.             break;
  118.  
  119.         case '\\': /* Skip next character*/
  120.             return (tok_len = (tok[1]) ? 2:1);
  121.  
  122.         case '%':
  123.         case '$':
  124.         case '@':
  125.             tmp++;
  126.  
  127.         default:
  128.             if(__isic(*tmp))
  129.             {
  130.                 for(++tmp;__isic(*tmp);)
  131.                 {
  132.                     tmp++;
  133.  
  134.                     if(tmp[0] == ':' && tmp[1] == ':')
  135.                         tmp+= 2;
  136.                 }
  137.  
  138.                 tok_len = (tmp - tok);
  139.  
  140.                 if(is_kwd())
  141.                     color = CL_STDWORD;
  142.                 else
  143.                     color = CL_IDENT;
  144.  
  145.                 if(color == CL_IDENT)
  146.                 {
  147.                     while(*tmp)
  148.                     {
  149.                         if(__issp(*tmp))
  150.                         {
  151.                             tmp++;
  152.                             continue;
  153.                         }
  154.                         if(*tmp == '(')
  155.                             color = CL_FUNCTION;
  156.                         break;
  157.                     }
  158.                 }
  159.  
  160.                 return tok_len;
  161.             }
  162.     }
  163.     return (tok_len = 1);
  164. }
  165.  
  166.  
  167.