qemacs-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemacs-commit] qemacs extra-modes.c archive.c


From: Charlie Gordon
Subject: [Qemacs-commit] qemacs extra-modes.c archive.c
Date: Fri, 30 May 2014 22:12:30 +0000

CVSROOT:        /sources/qemacs
Module name:    qemacs
Changes by:     Charlie Gordon <chqrlie>        14/05/30 22:12:30

Modified files:
        .              : extra-modes.c archive.c 

Log message:
        improve support for sql files and databases
        
        * dump sqlite databases and syntax colorize output
        * add keyword and type support in sql mode

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/extra-modes.c?cvsroot=qemacs&r1=1.26&r2=1.27
http://cvs.savannah.gnu.org/viewcvs/qemacs/archive.c?cvsroot=qemacs&r1=1.13&r2=1.14

Patches:
Index: extra-modes.c
===================================================================
RCS file: /sources/qemacs/qemacs/extra-modes.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -b -r1.26 -r1.27
--- extra-modes.c       30 May 2014 17:18:13 -0000      1.26
+++ extra-modes.c       30 May 2014 22:12:30 -0000      1.27
@@ -1055,14 +1055,74 @@
     SQL_STYLE_TEXT =       QE_STYLE_DEFAULT,
     SQL_STYLE_COMMENT =    QE_STYLE_COMMENT,
     SQL_STYLE_STRING =     QE_STYLE_STRING,
-    SQL_STYLE_IDENTIFIER = QE_STYLE_KEYWORD,
+    SQL_STYLE_KEYWORD =    QE_STYLE_KEYWORD,
+    SQL_STYLE_TYPE =       QE_STYLE_TYPE,
+    SQL_STYLE_IDENTIFIER = QE_STYLE_DEFAULT,
     SQL_STYLE_PREPROCESS = QE_STYLE_PREPROCESS,
 };
 
+static char const sql_keywords[] = {
+    "abs|acos|add|aes_decrypt|aes_encrypt|after|all|alter|analyse|analyze|"
+    "and|as|asc|ascii|asin|atan|atan2|auto_increment|avg|backup|begin|"
+    "benchmark|between|bin|binlog|bit_and|bit_count|bit_length|bit_or|"
+    "bit_xor|both|btree|by|call|case|cast|ceil|ceiling|change|character|"
+    "character_length|char_length|check|checksum|clob|clock|coalesce|"
+    "collate|column|columns|comment|commit|compressed|concat|concat_ws|"
+    "concurrent|constraint|contents|controlfile|conv|convert|cos|cot|"
+    "count|crc32|crc64|create|current_date|current_time|current_timestamp|"
+    "current_user|data|database|databases|declare|default|degrees|delayed|"
+    "delete|desc|describe|directory|disable|discard|div|do|drop|dump|elt|"
+    "enable|enclosed|end|engine|enum|escaped|event|events|execute|exists|"
+    "exp|explain|export_set|fail|false|field|fields|find_in_set|first|"
+    "floor|for|foreign|format|found_rows|from|full|fulltext|function|"
+    "global|go|grant|greatest|group_concat|handler|hash|having|help|hex|"
+    "high_priority|hsieh_hash|if|ifnull|ignore|import|in|index|inet|infile|"
+    "insert|install|instr|interval|into|is|isnull|iterate|jenkins_hash|key|"
+    "keys|last|last_insert_id|lcase|leading|least|leave|left|length|like|"
+    "limit|lines|ln|load|load_file|local|localtime|localtimestamp|locate|"
+    "lock|log|log10|log2|logs|loop|lower|low_priority|lpad|ltrim|make_set|"
+    "max|md5|md5_bin|memory|mid|min|mod|modify|no|none|not|now|null|nullif|"
+    "oct|off|offset|on|optionally|or|ord|order|outfile|password|pi|pid|pow|"
+    "power|prepare|primary|print|procedure|quote|radians|rand|recno|"
+    "release|rename|repair|repeat|replace|restore|return|reverse|revoke|"
+    "right|rollback|round|rpad|rtree|rtrim|rule|savepoint|schema|select|"
+    "sequence|serial|server|session|set|sha|sha1|sha128_bin|sha224_bin|"
+    "sha256_bin|sha384_bin|sha512_bin|show|sign|signed|sin|soundex|source|"
+    "space|spatial|sql_calc_found_rows|sqrt|start|starting|stats|std|"
+    "stddev|stddev_pop|stddev_samp|strcmp|string|structure|substr|"
+    "substring|substring_index|sum|table|tables|tan|temporary|terminated|"
+    "time|timestamp|timings|to|trailing|transaction|trigger|trim|true|"
+    "truncate|type|ucase|unhex|uninstall|unique|unix_timestamp|unknown|"
+    "unlock|update|upper|use|user|using|utf8|value|values|varbinary|"
+    "variables|variance|var_pop|var_samp|verbose|version_comment|view|"
+    "when|where|while|xml|year|yes|"
+    "pragma|"
+    "adddate|addtime|curdate|curtime|date_add|date_sub|date_format|"
+    "datediff|day|dayname|dayofmonth|dayofweek|dayofyear|extract|"
+    "from_days|from_unixtime|get_format|hour|last_day|makedate|maketime|"
+    "microsecond|minute|month|monthname|period_add|period_diff|quarter|"
+    "sec_to_time|second|str_to_date|subdate|subtime|sysdate|timediff|"
+    "time_format|time_to_sec|to_days|utc_date|utc_time|utc_timestamp|"
+    "week|weekday|weekofyear|yearweek|second_microsecond|"
+    "minute_microsecond|minute_second|hour_microsecond|hour_second|"
+    "hour_minute|day_microsecond|day_second|day_minute|day_hour|"
+    "year_month|"
+};
+
+static char const sql_types[] = {
+    "bigint|binary|bit|blob|bool|char|counter|date|datetime|dec|decimal|"
+    "double|fixed|float|int|int16|int24|int32|int48|int64|int8|integer|"
+    "largeint|long|longblob|longtext|mediumblob|mediumint|mediumtext|"
+    "memo|number|numeric|real|smallint|text|tinyblob|tinyint|tinytext|"
+    "uint16|uint24|uint32|uint48|uint64|uint8|ulong|unsigned|varchar|"
+    "varchar2|"
+};
+
 static void sql_colorize_line(QEColorizeContext *cp,
                               unsigned int *str, int n, ModeDef *syn)
 {
-    int i = 0, start = i, c, style;
+    char keyword[MAX_KEYWORD_SIZE];
+    int i = 0, start = i, c, style, len;
     int state = cp->colorize_state;
 
     if (state & IN_SQL_COMMENT)
@@ -1123,13 +1183,39 @@
         default:
             break;
         }
+        /* parse identifiers and keywords */
+        if (qe_isalpha_(c)) {
+            len = 0;
+            keyword[len++] = qe_tolower(c);
+            for (; i < n; i++) {
+                if (qe_isalnum_(str[i])) {
+                    if (len < countof(keyword) - 1)
+                        keyword[len++] = qe_tolower(str[i]);
+                } else {
+                    break;
+                }
+            }
+            keyword[len] = '\0';
+            if (syn && syn->keywords && strfind(syn->keywords, keyword)) {
+                SET_COLOR(str, start, i, SQL_STYLE_KEYWORD);
+                continue;
+            }
+            if (syn && syn->types && strfind(syn->types, keyword)) {
+                SET_COLOR(str, start, i, SQL_STYLE_TYPE);
+                continue;
+            }
+            SET_COLOR(str, start, i, SQL_STYLE_IDENTIFIER);
+            continue;
+        }
     }
     cp->colorize_state = state;
 }
 
 static ModeDef sql_mode = {
     .name = "SQL",
-    .extensions = "sql|mysql|sqlite|sqlplus",
+    .extensions = "sql|mysql|sqlite|sqlplus|rdb|xdb|db",
+    .keywords = sql_keywords,
+    .types = sql_types,
     .colorize_func = sql_colorize_line,
 };
 

Index: archive.c
===================================================================
RCS file: /sources/qemacs/qemacs/archive.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- archive.c   27 May 2014 22:56:39 -0000      1.13
+++ archive.c   30 May 2014 22:12:30 -0000      1.14
@@ -62,6 +62,7 @@
     { "XZ", "xz", "unxz -c $1", "xz > $1" },
     { "BinHex", "hqx", "binhex decode -o /tmp/qe-$$ $1 && "
                        "cat /tmp/qe-$$ ; rm -f /tmp/qe-$$", NULL },
+    { "sqlite", "xdb|rdb|db", "sqlite3 $1 .dump", NULL },
 };
 
 static CompressType *compress_types;
@@ -222,7 +223,7 @@
             return 9;
         } else {
             /* buffer not yet loaded */
-            return 60;
+            return 82;
         }
     }
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]