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

  1. /*
  2. ** Module   :PARS_ASM
  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_ASM
  17. //
  18. //----------------------------------------------------------------------
  19.  
  20. int Parser_ASM::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.  
  55.             q_chr = *tmp;
  56.  
  57.             state = (q_chr == '"') ? ST_QUOTE1:ST_QUOTE2;
  58.             ++tmp;
  59.             color = CL_CONST;
  60.             return (tok_len = (tmp - tok));
  61.  
  62.         case ';':
  63.             while(*tmp)
  64.                 tmp++;
  65.  
  66.             color = CL_COMMENT;
  67.             return (tok_len = (tmp - tok));
  68.  
  69.         case '0':
  70.         case '1':
  71.         case '2':
  72.         case '3':
  73.         case '4':
  74.         case '5':
  75.         case '6':
  76.         case '7':
  77.         case '8':
  78.         case '9':
  79.  
  80.             while(__ishd(*tmp))
  81.             {
  82.                 if(__ishd(*tmp) && !__isdd(*tmp))
  83.                     color = CL_XNUMBER;
  84.                 tmp++;
  85.             }
  86.  
  87.             if(__to_upper(*tmp) == 'H')
  88.             {
  89.                 tmp++;
  90.                 color = CL_XNUMBER;
  91.             }
  92.  
  93.             if(color == CL_DEFAULT)
  94.                 color = CL_NUMBER;
  95.             return (tok_len = (tmp - tok));
  96.  
  97.         default:
  98.             if(__isis(*tmp) || *tmp == '%' || *tmp=='@' || *tmp == '.')
  99.             {
  100.                 for(++tmp;__isic(*tmp) || *tmp == '%' || *tmp=='@';)
  101.                     tmp++;
  102.  
  103.                 tok_len = (tmp - tok);
  104.  
  105.                 if(is_kwd())
  106.                     color = CL_STDWORD;
  107.                 else
  108.                 {
  109.                     color = CL_IDENT;
  110.  
  111.                     while(*tmp)
  112.                     {
  113.                         if(__issp(*tmp))
  114.                         {
  115.                             tmp++;
  116.                             continue;
  117.                         }
  118.                         if(*tmp == '(' || *tmp == ':')
  119.                             color = CL_FUNCTION;
  120.                         break;
  121.                     }
  122.                 }
  123.                 return tok_len;
  124.             }
  125.     }
  126.     return (tok_len = 1);
  127. }
  128.  
  129.