| # -*- coding: utf-8 -*- # |
| |
| module Rouge |
| module Lexers |
| class SQL < RegexLexer |
| title "SQL" |
| desc "Structured Query Language, for relational databases" |
| tag 'sql' |
| filenames '*.sql' |
| mimetypes 'text/x-sql' |
| |
| def self.keywords |
| @keywords ||= Set.new %w( |
| ABORT ABS ABSOLUTE ACCESS ADA ADD ADMIN AFTER AGGREGATE ALIAS |
| ALL ALLOCATE ALTER ANALYSE ANALYZE AND ANY ARE AS ASC ASENSITIVE |
| ASSERTION ASSIGNMENT ASYMMETRIC AT ATOMIC AUTHORIZATION |
| AVG BACKWARD BEFORE BEGIN BETWEEN BITVAR BIT_LENGTH BOTH |
| BREADTH BY C CACHE CALL CALLED CARDINALITY CASCADE CASCADED |
| CASE CAST CATALOG CATALOG_NAME CHAIN CHARACTERISTICS |
| CHARACTER_LENGTH CHARACTER_SET_CATALOG CHARACTER_SET_NAME |
| CHARACTER_SET_SCHEMA CHAR_LENGTH CHECK CHECKED CHECKPOINT |
| CLASS CLASS_ORIGIN CLOB CLOSE CLUSTER COALSECE COBOL COLLATE |
| COLLATION COLLATION_CATALOG COLLATION_NAME COLLATION_SCHEMA |
| COLUMN COLUMN_NAME COMMAND_FUNCTION COMMAND_FUNCTION_CODE |
| COMMENT COMMIT COMMITTED COMPLETION CONDITION_NUMBER |
| CONNECT CONNECTION CONNECTION_NAME CONSTRAINT CONSTRAINTS |
| CONSTRAINT_CATALOG CONSTRAINT_NAME CONSTRAINT_SCHEMA |
| CONSTRUCTOR CONTAINS CONTINUE CONVERSION CONVERT COPY |
| CORRESPONTING COUNT CREATE CREATEDB CREATEUSER CROSS CUBE |
| CURRENT CURRENT_DATE CURRENT_PATH CURRENT_ROLE CURRENT_TIME |
| CURRENT_TIMESTAMP CURRENT_USER CURSOR CURSOR_NAME CYCLE DATA |
| DATABASE DATETIME_INTERVAL_CODE DATETIME_INTERVAL_PRECISION |
| DAY DEALLOCATE DECLARE DEFAULT DEFAULTS DEFERRABLE DEFERRED |
| DEFINED DEFINER DELETE DELIMITER DELIMITERS DEREF DESC DESCRIBE |
| DESCRIPTOR DESTROY DESTRUCTOR DETERMINISTIC DIAGNOSTICS |
| DICTIONARY DISCONNECT DISPATCH DISTINCT DO DOMAIN DROP |
| DYNAMIC DYNAMIC_FUNCTION DYNAMIC_FUNCTION_CODE EACH ELSE |
| ENCODING ENCRYPTED END END-EXEC EQUALS ESCAPE EVERY EXCEPT |
| ESCEPTION EXCLUDING EXCLUSIVE EXEC EXECUTE EXISTING EXISTS |
| EXPLAIN EXTERNAL EXTRACT FALSE FETCH FINAL FIRST FOR FORCE |
| FOREIGN FORTRAN FORWARD FOUND FREE FREEZE FROM FULL FUNCTION |
| G GENERAL GENERATED GET GLOBAL GO GOTO GRANT GRANTED GROUP |
| GROUPING HANDLER HAVING HIERARCHY HOLD HOST IDENTITY IGNORE |
| ILIKE IMMEDIATE IMMUTABLE IMPLEMENTATION IMPLICIT IN INCLUDING |
| INCREMENT INDEX INDITCATOR INFIX INHERITS INITIALIZE INITIALLY |
| INNER INOUT INPUT INSENSITIVE INSERT INSTANTIABLE INSTEAD |
| INTERSECT INTO INVOKER IS ISNULL ISOLATION ITERATE JOIN KEY |
| KEY_MEMBER KEY_TYPE LANCOMPILER LANGUAGE LARGE LAST LATERAL |
| LEADING LEFT LENGTH LESS LEVEL LIKE LIMIT LISTEN LOAD LOCAL |
| LOCALTIME LOCALTIMESTAMP LOCATION LOCATOR LOCK LOWER MAP MATCH |
| MAX MAXVALUE MESSAGE_LENGTH MESSAGE_OCTET_LENGTH MESSAGE_TEXT |
| METHOD MIN MINUTE MINVALUE MOD MODE MODIFIES MODIFY MONTH |
| MORE MOVE MUMPS NAMES NATIONAL NATURAL NCHAR NCLOB NEW NEXT |
| NO NOCREATEDB NOCREATEUSER NONE NOT NOTHING NOTIFY NOTNULL |
| NULL NULLABLE NULLIF OBJECT OCTET_LENGTH OF OFF OFFSET OIDS |
| OLD ON ONLY OPEN OPERATION OPERATOR OPTION OPTIONS OR ORDER |
| ORDINALITY OUT OUTER OUTPUT OVERLAPS OVERLAY OVERRIDING |
| OWNER PAD PARAMETER PARAMETERS PARAMETER_MODE PARAMATER_NAME |
| PARAMATER_ORDINAL_POSITION PARAMETER_SPECIFIC_CATALOG |
| PARAMETER_SPECIFIC_NAME PARAMATER_SPECIFIC_SCHEMA PARTIAL PASCAL |
| PENDANT PLACING PLI POSITION POSTFIX PRECISION PREFIX PREORDER |
| PREPARE PRESERVE PRIMARY PRIOR PRIVILEGES PROCEDURAL PROCEDURE |
| PUBLIC READ READS RECHECK RECURSIVE REF REFERENCES REFERENCING |
| REINDEX RELATIVE RENAME REPEATABLE REPLACE RESET RESTART |
| RESTRICT RESULT RETURN RETURNED_LENGTH RETURNED_OCTET_LENGTH |
| RETURNED_SQLSTATE RETURNS REVOKE RIGHT ROLE ROLLBACK ROLLUP |
| ROUTINE ROUTINE_CATALOG ROUTINE_NAME ROUTINE_SCHEMA ROW ROWS |
| ROW_COUNT RULE SAVE_POINT SCALE SCHEMA SCHEMA_NAME SCOPE SCROLL |
| SEARCH SECOND SECURITY SELECT SELF SENSITIVE SERIALIZABLE |
| SERVER_NAME SESSION SESSION_USER SET SETOF SETS SHARE SHOW |
| SIMILAR SIMPLE SIZE SOME SOURCE SPACE SPECIFIC SPECIFICTYPE |
| SPECIFIC_NAME SQL SQLCODE SQLERROR SQLEXCEPTION SQLSTATE |
| SQLWARNINIG STABLE START STATE STATEMENT STATIC STATISTICS |
| STDIN STDOUT STORAGE STRICT STRUCTURE STYPE SUBCLASS_ORIGIN |
| SUBLIST SUBSTRING SUM SYMMETRIC SYSID SYSTEM SYSTEM_USER |
| TABLE TABLE_NAME TEMP TEMPLATE TEMPORARY TERMINATE THAN THEN |
| TIMESTAMP TIMEZONE_HOUR TIMEZONE_MINUTE TO TOAST TRAILING |
| TRANSATION TRANSACTIONS_COMMITTED TRANSACTIONS_ROLLED_BACK |
| TRANSATION_ACTIVE TRANSFORM TRANSFORMS TRANSLATE TRANSLATION |
| TREAT TRIGGER TRIGGER_CATALOG TRIGGER_NAME TRIGGER_SCHEMA TRIM |
| TRUE TRUNCATE TRUSTED TYPE UNCOMMITTED UNDER UNENCRYPTED UNION |
| UNIQUE UNKNOWN UNLISTEN UNNAMED UNNEST UNTIL UPDATE UPPER |
| USAGE USER USER_DEFINED_TYPE_CATALOG USER_DEFINED_TYPE_NAME |
| USER_DEFINED_TYPE_SCHEMA USING VACUUM VALID VALIDATOR VALUES |
| VARIABLE VERBOSE VERSION VIEW VOLATILE WHEN WHENEVER WHERE |
| WITH WITHOUT WORK WRITE YEAR ZONE |
| ) |
| end |
| |
| state :root do |
| rule /\s+/m, Text |
| rule /--.*/, Comment::Single |
| rule %r(/\*), Comment::Multiline, :multiline_comments |
| rule /\d+/, Num::Integer |
| rule /'/, Str::Single, :single_string |
| rule /"/, Name::Variable, :double_string |
| rule /`/, Name::Variable, :backtick |
| |
| rule /\w[\w\d]*/ do |m| |
| if self.class.keywords.include? m[0].upcase |
| token Keyword |
| else |
| token Name |
| end |
| end |
| |
| rule %r([+*/<>=~!@#%^&|?^-]), Operator |
| rule /[;:()\[\],.]/, Punctuation |
| end |
| |
| state :multiline_comments do |
| rule %r(/[*]), Comment::Multiline, :multiline_comments |
| rule %r([*]/), Comment::Multiline, :pop! |
| rule %r([^/*]+), Comment::Multiline |
| rule %r([/*]), Comment::Multiline |
| end |
| |
| state :backtick do |
| rule /\\./, Str::Escape |
| rule /``/, Str::Escape |
| rule /`/, Name::Variable, :pop! |
| rule /[^\\`]+/, Name::Variable |
| end |
| |
| state :single_string do |
| rule /\\./, Str::Escape |
| rule /''/, Str::Escape |
| rule /'/, Str::Single, :pop! |
| rule /[^\\']+/, Str::Single |
| end |
| |
| state :double_string do |
| rule /\\./, Str::Escape |
| rule /""/, Str::Escape |
| rule /"/, Name::Variable, :pop! |
| rule /[^\\"]+/, Name::Variable |
| end |
| end |
| end |
| end |