Update to 2.0.0 tree from current Fremantle build
[opencv] / apps / cvenv / colorer.cpp
diff --git a/apps/cvenv/colorer.cpp b/apps/cvenv/colorer.cpp
deleted file mode 100644 (file)
index a0d51e5..0000000
+++ /dev/null
@@ -1,537 +0,0 @@
-/*M///////////////////////////////////////////////////////////////////////////////////////
-//
-//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
-//
-//  By downloading, copying, installing or using the software you agree to this license.
-//  If you do not agree to this license, do not download, install,
-//  copy or use the software.
-//
-//
-//                        Intel License Agreement
-//                For Open Source Computer Vision Library
-//
-// Copyright (C) 2000, Intel Corporation, all rights reserved.
-// Third party copyrights are property of their respective owners.
-//
-// Redistribution and use in source and binary forms, with or without modification,
-// are permitted provided that the following conditions are met:
-//
-//   * Redistribution's of source code must retain the above copyright notice,
-//     this list of conditions and the following disclaimer.
-//
-//   * Redistribution's in binary form must reproduce the above copyright notice,
-//     this list of conditions and the following disclaimer in the documentation
-//     and/or other materials provided with the distribution.
-//
-//   * The name of Intel Corporation may not be used to endorse or promote products
-//     derived from this software without specific prior written permission.
-//
-// This software is provided by the copyright holders and contributors "as is" and
-// any express or implied warranties, including, but not limited to, the implied
-// warranties of merchantability and fitness for a particular purpose are disclaimed.
-// In no event shall the Intel Corporation or contributors be liable for any direct,
-// indirect, incidental, special, exemplary, or consequential damages
-// (including, but not limited to, procurement of substitute goods or services;
-// loss of use, data, or profits; or business interruption) however caused
-// and on any theory of liability, whether in contract, strict liability,
-// or tort (including negligence or otherwise) arising in any way out of
-// the use of this software, even if advised of the possibility of such damage.
-//
-//M*/
-
-#include <assert.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include "colorer.h"
-
-typedef struct _HashEntry
-{
-    unsigned  hash;
-    int       len;
-    struct _HashEntry* next;
-    const char* str;
-}
-HashEntry;
-
-HashEntry   keyword_storage[100];
-
-#define  HASHTABLE_SIZE   17
-HashEntry*  keyword_table[HASHTABLE_SIZE];
-static int  hash_init = 0;
-
-const char* keywords[] =
-{
-    "break",    "case",     "char",     "const",
-    "continue", "default",  "do",       "double",
-    "else",     "enum",     "extern",   "float",
-    "for",      "goto",     "if",       "int",
-    "long",     "register", "return",   "short",
-    "signed",   "sizeof",   "static",   "struct",
-    "switch",   "typedef",  "union",    "unsigned",
-    "void",     "volatile", "while",    0
-};
-
-
-inline unsigned  calc_hash( const char* text, int len )
-{
-    int j, shift = 0;
-    unsigned hash = len;
-    for( j = 0; j < len; j++ )
-    {
-        shift += 11;
-        if( shift >= 32 ) shift -= 32;
-        hash ^= ((unsigned char*)text)[j] << shift;
-    }
-    return hash;
-}
-
-
-void InitLexer( Lexer* lexer, const char* text )
-{
-    lexer->text = text;
-    lexer->pos = 0;
-
-    if( !hash_init )
-    {
-        int  i;
-        int  count[HASHTABLE_SIZE];
-        memset( count, 0, sizeof(count));
-        memset( keyword_table, 0, sizeof( keyword_table));
-
-        for( i = 0; keywords[i] != 0; i++ )
-        {
-            int idx, len;
-            keyword_storage[i].len = len = strlen( keywords[i] );
-            keyword_storage[i].hash = calc_hash( keywords[i], len );
-            keyword_storage[i].str = keywords[i];
-            idx = keyword_storage[i].hash % HASHTABLE_SIZE;
-            keyword_storage[i].next = keyword_table[idx];
-            keyword_table[idx] = keyword_storage + i;
-            count[idx]++;
-        }
-        hash_init = 1;
-    }
-}
-
-
-HashEntry* find_text( const char* str, int len )
-{
-    unsigned hash = calc_hash( str, len );
-    int idx = hash % HASHTABLE_SIZE;
-    HashEntry* entry = keyword_table[idx];
-
-    while( entry )
-    {
-        if( entry->hash == hash &&
-            entry->len == len &&
-            !strncmp( entry->str, str, len )) break;
-        entry = entry->next;
-    }
-    return entry;
-}
-
-
-void  GetToken( Lexer* lexer, Token* token )
-{
-    const char* text = lexer->text;
-    int pos = lexer->pos;
-    token->type = TOKEN_NORMAL;
-
-    while( isspace(text[pos])) pos++;
-    token->start = pos;
-
-    switch( text[pos] )
-    {
-    case '/': pos++;
-              switch( text[pos] )
-              {
-              case '/': /* end-line comment */
-                  token->type = TOKEN_COMMENT;
-                  ++pos; while( text[pos] != '\n' && text[pos] != '\0' ) pos++;
-                  break;
-              case '*':
-                  token->type = TOKEN_COMMENT;
-                  ++pos;
-                  while( text[pos] != '\0' )
-                  {
-                      if( text[pos] == '*' && text[pos+1] == '/')
-                      {
-                          pos += 2;
-                          break;
-                      }
-                      pos++;
-                  }
-                  break;
-              }
-              break;
-    case '\0':  token->type = TOKEN_END;
-                return;
-
-    case '\"':  token->type = TOKEN_STRING;
-                pos++;
-                for(;;)
-                {
-                    if( text[pos] == '\0' || text[pos] == '\"' || text[pos] == '\n' )
-                        break;
-                    if( text[pos] == '\\' )
-                    {
-                        pos += 2;
-                        if( text[pos] == '\n' ) pos++;
-                    }
-                    else
-                    {
-                        pos++;
-                    }
-                }
-                if( text[pos] == '\"') pos++;
-                break;
-
-    case '\'':  token->type = TOKEN_STRING;
-                pos++;
-                for(;;)
-                {
-                    if( text[pos] == '\0' || text[pos] == '\'' || text[pos] == '\n' )
-                        break;
-                    pos += text[pos] == '\\' ? 2 : 1;
-                }
-                if( text[pos] == '\'') pos++;
-                break;
-    default:
-        if( isalpha( text[pos] ) || text[pos] == '_' )
-        {
-            pos++;
-            while( isalnum( text[pos] ) || text[pos] == '_' ) pos++;
-
-            if( find_text( text + token->start, pos - token->start ))
-            {
-                token->type = TOKEN_KEYWORD;
-            }
-        }
-        else if( isdigit(text[pos]) || (text[pos] == '.' && isdigit(text[pos+1])))
-        {
-            int pos1 = pos;
-            token->type = TOKEN_NUMBER;
-            pos++; while( isalnum( text[pos])) pos++;
-            if( (text[pos] == '+' || text[pos] == '-') && text[pos-1] == 'e')
-            {
-                while( isdigit(text[pos1]) || text[pos1] == '.') pos1++;
-                if( pos1 == pos - 1 )
-                {
-                    pos++;
-                    while( isdigit(text[pos])) pos++;
-                }
-            }
-        }
-        else
-        {
-            pos++;
-        }
-    }
-
-    lexer->pos = pos;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-//parser
-//
-
-int GetTokenFromPos(int pos, Token* tokens, int num)
-{
-    int i;
-    for(i = 1; i < num; i++)
-        if(pos < tokens[i].start) return i -1;
-    return i - 1;
-}
-
-int SetMap(char* map, Token* tokens, int num)
-{
-    tokens->start = 0;
-    for(int i = 0; i < num - 1; i++)
-        for(int j = 0; j < tokens[i + 1].start - tokens[i].start; j++)
-            map[tokens[i].start + j] = (char)tokens[i].type;
-    map[tokens[max(0, num - 1)].start] = TOKEN_END;
-    return 0;
-}
-
-static char* old_text = 0;
-static char* old_map = 0;
-
-int ParseTextBegin(ClientData, Tcl_Interp *interp,
-              int, char**)
-{
-    Token tokens__[MAX_TOKNS] = { TOKEN_END, 0 };
-    Token* tokens_ = tokens__;
-    int num = 0;
-    int max_num = MAX_TOKNS;
-
-    Tcl_Eval(interp, "$CVEnv::curframe get 1.0 end");
-
-    if(old_text) delete old_text;
-    if(old_map) delete old_map;
-
-    int len = strlen(interp->result);
-    if(!len) return 0;
-    old_text = new char[len + 1];
-    assert(old_text);
-    old_map  = new char[len + 1];
-    assert(old_map);
-
-    strcpy(old_text, interp->result);
-
-    Lexer lexer;
-    Token token;
-    Token prev_token = { TOKEN_END, 0 };
-
-    InitLexer( &lexer, old_text );
-    lexer.pos = 0;
-
-    for(num = 0;;)
-    {
-        GetToken( &lexer, &token );
-        if( token.type != prev_token.type )
-        {
-            tokens_[num] = token;
-            prev_token = token;
-            num++;
-            if(num >= max_num)
-            {
-                max_num *= 2;
-                Token* tokens_tmp = new Token[max_num];
-                assert(tokens_tmp);
-                for(int i = 0; i < num; i++) tokens_tmp[i] = tokens_[i];
-                if(tokens_ != tokens__) delete tokens_;
-                tokens_ = tokens_tmp;
-            }
-        }
-        if( token.type == TOKEN_END ) break;
-    }
-
-    SetMap(old_map, tokens_, num);
-
-    assert(*old_map <= TOKEN_END);
-
-    if(tokens_ != tokens__) delete tokens_;
-    return 0;
-}
-
-
-int ParseTextEnd(ClientData, Tcl_Interp *interp,
-              int, char**)
-{
-    Token tokens__[MAX_TOKNS] = { TOKEN_END, 0 };
-    Token* tokens_ = tokens__;
-    int num = 0;
-    int max_num = MAX_TOKNS;
-    
-    Tcl_Eval(interp, "$CVEnv::curframe get 1.0 end");
-
-    int len = strlen(interp->result);
-    if(!len) return 0;
-    char* text = new char[len + 1];
-    assert(text);
-    char* map  = new char[len + 1];
-    assert(map);
-
-    strcpy(text, interp->result);
-
-    if(old_text && !strcmp(text, old_text)) goto end;
-
-    {
-    if(!old_text) {old_text = new char[1]; *old_text = 0;}
-    if(!old_map) {old_map = new char[1]; *old_map = TOKEN_END;}
-
-    assert(*old_map <= TOKEN_END);
-
-    Lexer lexer;
-    Token* tokens = tokens_;
-    Token token;
-    Token prev_token = { TOKEN_END, 0 };
-
-    InitLexer( &lexer, text );
-    lexer.pos = 0;
-
-    for(num = 0;;)
-    {
-        GetToken( &lexer, &token );
-        if( token.type != prev_token.type )
-        {
-            tokens_[num] = token;
-            prev_token = token;
-            num++;
-            if(num >= max_num)
-            {
-                max_num *= 2;
-                Token* tokens_tmp = new Token[max_num];
-                assert(tokens_tmp);
-                for(int i = 0; i < num; i++) tokens_tmp[i] = tokens_[i];
-                if(tokens_ != tokens__) delete tokens_;
-                tokens_ = tokens_tmp;
-            }
-        }
-        if( token.type == TOKEN_END ) break;
-    }
-
-    assert(*old_map <= TOKEN_END);
-
-    int len = strlen(text);
-    int old_len = strlen(old_text);
-
-    SetMap(map, tokens_, num);
-    // finding first & last changed tokens
-    int first;
-    int last;
-    for(first = 0; map[first] == old_map[first]; first++);
-    for(last = len - 1; map[last] == old_map[max(0, last + (old_len - len))]; last--);
-
-    if(first > last) swap(first, last);
-
-    int first_t = GetTokenFromPos(first, tokens_, num);
-    int last_t = GetTokenFromPos(last, tokens_, num);
-
-    if(first == len)
-        goto end2;
-
-    char command[1000];
-
-    char* normal  = new char[len * strlen("\"0.0 + 0000000 chars\" \"0.0 + 0000000 chars\" ")];
-    char* comment = new char[len * strlen("\"0.0 + 0000000 chars\" \"0.0 + 0000000 chars\" ")];
-    char* strng  = new char[len * strlen("\"0.0 + 0000000 chars\" \"0.0 + 0000000 chars\" ")];
-    char* keyword = new char[len * strlen("\"0.0 + 0000000 chars\" \"0.0 + 0000000 chars\" ")];
-    char* number  = new char[len * strlen("\"0.0 + 0000000 chars\" \"0.0 + 0000000 chars\" ")];
-
-    assert( normal && comment && strng && keyword && number );
-    strcpy( normal, "$CVEnv::curframe tag add normal " );
-    strcpy( comment, "$CVEnv::curframe tag add comment " );
-    strcpy( strng, "$CVEnv::curframe tag add string " );
-    strcpy( keyword, "$CVEnv::curframe tag add keyword " );
-    strcpy( number, "$CVEnv::curframe tag add number " );
-
-    sprintf(command, "ClearColors %d %d $CVEnv::curframe", first, last);
-    Tcl_Eval(interp, command);
-    assert(*interp->result == 0);
-
-    tokens = tokens_;
-    for( int t = first_t; t <=last_t; t++ )
-    {
-        char pos[60];
-        sprintf(pos, "\"0.0 + %d chars\" \"0.0 + %d chars\" ", tokens[t].start, tokens[t + 1].start);
-        switch(tokens[t].type)
-        {
-        case TOKEN_COMMENT:
-            strcat(comment, pos);
-            break;
-        case TOKEN_STRING:
-            strcat(strng, pos);
-            break;
-        case TOKEN_KEYWORD:
-            strcat(keyword, pos);
-            break;
-        case TOKEN_NUMBER:
-            strcat(number, pos);
-            break;
-        case TOKEN_END:
-            goto end2;
-            break;
-        default:
-            strcat(normal, pos);
-            break;
-        }
-    }
-    if(strlen(normal) > 34)
-    {
-        Tcl_Eval(interp, normal);
-        assert(*interp->result == 0);
-    }
-    if(strlen(comment) > 34)
-    {
-        Tcl_Eval(interp, comment);
-        assert(*interp->result == 0);
-    }
-    if(strlen(strng) > 34)
-    {
-        Tcl_Eval(interp, strng);
-        assert(*interp->result == 0);
-    }
-    if(strlen(number) > 34)
-    {
-        Tcl_Eval(interp, number);
-        assert(*interp->result == 0);
-    }
-    if(strlen(keyword) > 34)
-    {
-        Tcl_Eval(interp, keyword);
-        assert(*interp->result == 0);
-    }
-
-    delete normal;
-    delete comment;
-    delete strng;
-    delete keyword;
-    delete number;
-    }
-end2:
-    if(old_map) delete old_map;
-    old_map = map;
-end:
-    if(old_text) delete old_text;
-    old_text = text;
-    if(tokens_ != tokens__) delete tokens_;
-    return 0;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// color's function
-//
-
-bool LoadColors(Tcl_Interp *pinterp, const char* colorsfile)
-{
-    int code = Tcl_EvalFile(pinterp, (char*)colorsfile);
-    if (code != TCL_OK)
-                    return false;
-
-    return true;
-}
-
-bool SaveColors(Tcl_Interp *pinterp, const char* colorsfile)
-{
-    FILE* pfile  = fopen(colorsfile, "w");
-    if (pfile == NULL) 
-        return false;
-
-    fprintf( pfile, "# Custom Colors\n");
-    fprintf( pfile, "set ::EditorTextbg ");
-    fprintf( pfile, "%s\n",Tcl_GetVar(pinterp, "EditorTextbg", TCL_GLOBAL_ONLY));
-    fprintf( pfile, "set ::EditorTextfg ");
-    fprintf( pfile, "%s\n",Tcl_GetVar(pinterp, "EditorTextfg", TCL_GLOBAL_ONLY));
-    fprintf( pfile, "set ::EditorStringfg ");
-    fprintf( pfile, "%s\n",Tcl_GetVar(pinterp, "EditorStringfg", TCL_GLOBAL_ONLY));
-    fprintf( pfile, "set ::EditorNumberfg ");
-    fprintf( pfile, "%s\n",Tcl_GetVar(pinterp, "EditorNumberfg", TCL_GLOBAL_ONLY));
-    fprintf( pfile, "set ::EditorCommentfg ");
-    fprintf( pfile, "%s\n",Tcl_GetVar(pinterp, "EditorCommentfg", TCL_GLOBAL_ONLY));
-    fprintf( pfile, "set ::EditorKeywordfg ");
-    fprintf( pfile, "%s\n",Tcl_GetVar(pinterp, "EditorKeywordfg", TCL_GLOBAL_ONLY));
-    fprintf( pfile, "set ::EditorSelectbg ");
-    fprintf( pfile, "%s\n",Tcl_GetVar(pinterp, "EditorSelectbg", TCL_GLOBAL_ONLY));
-    fprintf( pfile, "set ::EditorSelectfg ");
-    fprintf( pfile, "%s\n",Tcl_GetVar(pinterp, "EditorSelectfg", TCL_GLOBAL_ONLY));
-    fprintf( pfile, "set ::EditorCursorbg ");
-    fprintf( pfile, "%s\n",Tcl_GetVar(pinterp, "EditorCursorbg", TCL_GLOBAL_ONLY));
-
-    fprintf( pfile, "# Custom Fonts\n");
-    fprintf( pfile, "set ::EditorTextfont \"");
-    fprintf( pfile, "%s\"\n",Tcl_GetVar(pinterp, "EditorTextfont", TCL_GLOBAL_ONLY));
-    fprintf( pfile, "set ::EditorStringfont \"");
-    fprintf( pfile, "%s\"\n",Tcl_GetVar(pinterp, "EditorStringfont", TCL_GLOBAL_ONLY));
-    fprintf( pfile, "set ::EditorNumberfont \"");
-    fprintf( pfile, "%s\"\n",Tcl_GetVar(pinterp, "EditorNumberfont", TCL_GLOBAL_ONLY));
-    fprintf( pfile, "set ::EditorCommentfont \"");
-    fprintf( pfile, "%s\"\n",Tcl_GetVar(pinterp, "EditorCommentfont", TCL_GLOBAL_ONLY));
-    fprintf( pfile, "set ::EditorKeywordfont \"");
-    fprintf( pfile, "%s\"\n",Tcl_GetVar(pinterp, "EditorKeywordfont", TCL_GLOBAL_ONLY));
-
-    fclose(pfile);
-    
-    return true;
-}