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

  1. /*
  2. ** Module   :PARS_MK.CPP
  3. ** Abstract :
  4. **
  5. ** Copyright (C) Sergey I. Yevtushenko
  6. **
  7. ** Log: Thu  09/04/1998 Created
  8. **
  9. */
  10.  
  11. #include <parser.h>
  12. #include <version.h>
  13.  
  14. //----------------------------------------------------------------------
  15. //
  16. // Class Parser_MAKE
  17. //
  18. //----------------------------------------------------------------------
  19.  
  20. int Parser_MAKE::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.         while(*tmp)
  32.         {
  33.             if(*tmp == q_chr)
  34.             {
  35.                 tmp++;
  36.                 state = ST_INITIAL;
  37.                 break;
  38.             }
  39.             tmp++;
  40.         }
  41.         color = CL_CONST;
  42.         return (tok_len = (tmp - tok));
  43.     }
  44.     switch(*tmp)
  45.     {
  46.         case ' ':
  47.         case '\t':
  48.             for(++tmp; __issp(*tmp);)
  49.                 tmp++;
  50.             return (tok_len = (tmp - tok));
  51.  
  52.         case '"':
  53.         case '\'':
  54.             q_chr = *tmp;
  55.  
  56.             state = (q_chr == '"') ? ST_QUOTE1:ST_QUOTE2;
  57.  
  58.             for(++tmp; *tmp != q_chr && *tmp;)
  59.             {
  60.                 if(*tmp == '\\')
  61.                     tmp++;
  62.                 tmp++;
  63.             }
  64.  
  65.             if(*tmp == q_chr)
  66.             {
  67.                 tmp++;
  68.                 state = ST_INITIAL;
  69.             }
  70.             color = CL_CONST;
  71.             return (tok_len = (tmp - tok));
  72.  
  73.         case '#':
  74.             while(*tmp)
  75.                 tmp++;
  76.  
  77.             color = CL_COMMENT;
  78.             return (tok_len = (tmp - tok));
  79.  
  80.         case '0':
  81.         case '1':
  82.         case '2':
  83.         case '3':
  84.         case '4':
  85.         case '5':
  86.         case '6':
  87.         case '7':
  88.         case '8':
  89.         case '9':
  90.  
  91.             while(__isdd(*tmp))
  92.                 tmp++;
  93.             color = CL_NUMBER;
  94.             return (tok_len = (tmp - tok));
  95.  
  96.         default:
  97.             if(__isis(*tmp))
  98.             {
  99.                 for(++tmp;__isic(*tmp);)
  100.                     tmp++;
  101.  
  102.                 tok_len = (tmp - tok);
  103.  
  104.                 color = CL_IDENT;
  105.  
  106.                 return tok_len;
  107.             }
  108.     }
  109.     return (tok_len = 1);
  110. }
  111.  
  112.  
  113.