rf-web/vendor/bundle/gems/rouge-3.12.0/lib/rouge/lexers/abap.rb
2019-10-21 10:18:17 +02:00

241 lines
13 KiB
Ruby

# -*- coding: utf-8 -*- #
# frozen_string_literal: true
# ABAP elements taken from http://help.sap.com/abapdocu_750/en/index.htm?file=abapdo.htm
module Rouge
module Lexers
class ABAP < RegexLexer
title "ABAP"
desc "SAP - Advanced Business Application Programming"
tag 'abap'
filenames '*.abap'
mimetypes 'text/x-abap'
def self.keywords
@keywords = Set.new %w(
*-INPUT ?TO ABAP-SOURCE ABBREVIATED ABS ABSTRACT ACCEPT ACCEPTING
ACCORDING ACCP ACTIVATION ACTUAL ADD ADD-CORRESPONDING ADJACENT
AFTER ALIAS ALIASES ALIGN ALL ALLOCATE ALPHA ANALYSIS ANALYZER AND
ANY APPEND APPENDAGE APPENDING APPLICATION ARCHIVE AREA ARITHMETIC
AS ASCENDING ASPECT ASSERT ASSIGN ASSIGNED ASSIGNING ASSOCIATION
ASYNCHRONOUS AT ATTRIBUTES AUTHORITY AUTHORITY-CHECK AVG BACK
BACKGROUND BACKUP BACKWARD BADI BASE BEFORE BEGIN BETWEEN BIG BINARY
BINTOHEX BIT BIT-AND BIT-NOT BIT-OR BIT-XOR BLACK BLANK BLANKS BLOB
BLOCK BLOCKS BLUE BOUND BOUNDARIES BOUNDS BOXED BREAK-POINT BT
BUFFER BY BYPASSING BYTE BYTE-CA BYTE-CN BYTE-CO BYTE-CS BYTE-NA
BYTE-NS BYTE-ORDER CA CALL CALLING CASE CAST CASTING CATCH CEIL
CENTER CENTERED CHAIN CHAIN-INPUT CHAIN-REQUEST CHANGE CHANGING
CHANNELS CHAR CHAR-TO-HEX CHARACTER CHECK CHECKBOX CIRCULAR CLASS
CLASS-CODING CLASS-DATA CLASS-EVENTS CLASS-METHODS CLASS-POOL
CLEANUP CLEAR CLIENT CLNT CLOB CLOCK CLOSE CN CO COALESCE CODE
CODING COLLECT COLOR COLUMN COLUMNS COL_BACKGROUND COL_GROUP
COL_HEADING COL_KEY COL_NEGATIVE COL_NORMAL COL_POSITIVE COL_TOTAL
COMMENT COMMENTS COMMIT COMMON COMMUNICATION COMPARING COMPONENT
COMPONENTS COMPRESSION COMPUTE CONCAT CONCATENATE CONCAT_WITH_SPACE
COND CONDENSE CONDITION CONNECT CONNECTION CONSTANTS CONTEXT
CONTEXTS CONTINUE CONTROL CONTROLS CONV CONVERSION CONVERT COPIES
COPY CORRESPONDING COUNT COUNTRY COVER CP CPI CREATE CREATING
CRITICAL CS CUKY CURR CURRENCY CURRENCY_CONVERSION CURRENT CURSOR
CURSOR-SELECTION CUSTOMER CUSTOMER-FUNCTION CX_DYNAMIC_CHECK
CX_NO_CHECK CX_ROOT CX_SQL_EXCEPTION CX_STATIC_CHECK DANGEROUS DATA
DATABASE DATAINFO DATASET DATE DATS DATS_ADD_DAYS DATS_ADD_MONTHS
DATS_DAYS_BETWEEN DATS_IS_VALID DAYLIGHT DD/MM/YY DD/MM/YYYY DDMMYY
DEALLOCATE DEC DECIMALS DECIMAL_SHIFT DECLARATIONS DEEP DEFAULT
DEFERRED DEFINE DEFINING DEFINITION DELETE DELETING DEMAND
DEPARTMENT DESCENDING DESCRIBE DESTINATION DETAIL DF16_DEC DF16_RAW
DF16_SCL DF34_DEC DF34_RAW DF34_SCL DIALOG DIRECTORY DISCONNECT
DISPLAY DISPLAY-MODE DISTANCE DISTINCT DIV DIVIDE
DIVIDE-CORRESPONDING DIVISION DO DUMMY DUPLICATE DUPLICATES DURATION
DURING DYNAMIC DYNPRO E EDIT EDITOR-CALL ELSE ELSEIF EMPTY ENABLED
ENABLING ENCODING END END-ENHANCEMENT-SECTION END-LINES
END-OF-DEFINITION END-OF-FILE END-OF-PAGE END-OF-SELECTION
END-TEST-INJECTION END-TEST-SEAM ENDAT ENDCASE ENDCATCH ENDCHAIN
ENDCLASS ENDDO ENDENHANCEMENT ENDEXEC ENDFORM ENDFUNCTION ENDIAN
ENDIF ENDING ENDINTERFACE ENDLOOP ENDMETHOD ENDMODULE ENDON
ENDPROVIDE ENDSELECT ENDTRY ENDWHILE ENDWITH ENGINEERING ENHANCEMENT
ENHANCEMENT-POINT ENHANCEMENT-SECTION ENHANCEMENTS ENTRIES ENTRY
ENVIRONMENT EQ EQUIV ERRORMESSAGE ERRORS ESCAPE ESCAPING EVENT
EVENTS EXACT EXCEPT EXCEPTION EXCEPTION-TABLE EXCEPTIONS EXCLUDE
EXCLUDING EXEC EXECUTE EXISTS EXIT EXIT-COMMAND EXPAND EXPANDING
EXPIRATION EXPLICIT EXPONENT EXPORT EXPORTING EXTEND EXTENDED
EXTENSION EXTRACT FAIL FETCH FIELD FIELD-GROUPS FIELD-SYMBOL
FIELD-SYMBOLS FIELDS FILE FILTER FILTER-TABLE FILTERS FINAL FIND
FIRST FIRST-LINE FIXED-POINT FKEQ FKGE FLOOR FLTP FLUSH FONT FOR
FORM FORMAT FORWARD FOUND FRAME FRAMES FREE FRIENDS FROM FUNCTION
FUNCTION-POOL FUNCTIONALITY FURTHER GAPS GE GENERATE GET
GET_PRINT_PARAMETERS GIVING GKEQ GKGE GLOBAL GRANT GREEN GROUP
GROUPS GT HANDLE HANDLER HARMLESS HASHED HAVING HDB HEAD-LINES
HEADER HEADERS HEADING HELP-ID HELP-REQUEST HEXTOBIN HIDE HIGH HINT
HOLD HOTSPOT I ICON ID IDENTIFICATION IDENTIFIER IDS IF
IF_ABAP_CLOSE_RESOURCE IF_ABAP_CODEPAGE IF_ABAP_DB_BLOB_HANDLE
IF_ABAP_DB_CLOB_HANDLE IF_ABAP_DB_LOB_HANDLE IF_ABAP_DB_READER
IF_ABAP_DB_WRITER IF_ABAP_READER IF_ABAP_WRITER IF_MESSAGE
IF_OS_CA_INSTANCE IF_OS_CA_PERSISTENCY IF_OS_FACTORY IF_OS_QUERY
IF_OS_QUERY_MANAGER IF_OS_QUERY_OPTIONS IF_OS_STATE
IF_OS_TRANSACTION IF_OS_TRANSACTION_MANAGER IF_SERIALIZABLE_OBJECT
IF_SHM_BUILD_INSTANCE IF_SYSTEM_UUID IF_T100_DYN_MSG IF_T100_MESSAGE
IGNORE IGNORING IMMEDIATELY IMPLEMENTATION IMPLEMENTATIONS
IMPLEMENTED IMPLICIT IMPORT IMPORTING IN INACTIVE INCL INCLUDE
INCLUDES INCLUDING INCREMENT INDEX INDEX-LINE INFOTYPES INHERITING
INIT INITIAL INITIALIZATION INNER INOUT INPUT INSERT INSTANCE
INSTANCES INSTR INT1 INT2 INT4 INT8 INTENSIFIED INTERFACE
INTERFACE-POOL INTERFACES INTERNAL INTERVALS INTO INVERSE
INVERTED-DATE IS ISO ITNO JOB JOIN KEEP KEEPING KERNEL KEY KEYS
KEYWORDS KIND LANG LANGUAGE LAST LATE LAYOUT LCHR LDB_PROCESS LE
LEADING LEAVE LEFT LEFT-JUSTIFIED LEFTPLUS LEFTSPACE LEGACY LENGTH
LET LEVEL LEVELS LIKE LINE LINE-COUNT LINE-SELECTION LINE-SIZE
LINEFEED LINES LIST LIST-PROCESSING LISTBOX LITTLE LLANG LOAD
LOAD-OF-PROGRAM LOB LOCAL LOCALE LOCATOR LOG-POINT LOGFILE LOGICAL
LONG LOOP LOW LOWER LPAD LPI LRAW LT LTRIM M MAIL MAIN MAJOR-ID
MAPPING MARGIN MARK MASK MATCH MATCHCODE MAX MAXIMUM MEDIUM MEMBERS
MEMORY MESH MESSAGE MESSAGE-ID MESSAGES MESSAGING METHOD METHODS MIN
MINIMUM MINOR-ID MM/DD/YY MM/DD/YYYY MMDDYY MOD MODE MODIF MODIFIER
MODIFY MODULE MOVE MOVE-CORRESPONDING MULTIPLY
MULTIPLY-CORRESPONDING NA NAME NAMETAB NATIVE NB NE NESTED NESTING
NEW NEW-LINE NEW-PAGE NEW-SECTION NEXT NO NO-DISPLAY NO-EXTENSION
NO-GAP NO-GAPS NO-GROUPING NO-HEADING NO-SCROLLING NO-SIGN NO-TITLE
NO-TOPOFPAGE NO-ZERO NODE NODES NON-UNICODE NON-UNIQUE NOT NP NS
NULL NUMBER NUMC O OBJECT OBJECTS OBLIGATORY OCCURRENCE OCCURRENCES
OCCURS OF OFF OFFSET ON ONLY OPEN OPTION OPTIONAL OPTIONS OR ORDER
OTHER OTHERS OUT OUTER OUTPUT OUTPUT-LENGTH OVERFLOW OVERLAY PACK
PACKAGE PAD PADDING PAGE PAGES PARAMETER PARAMETER-TABLE PARAMETERS
PART PARTIALLY PATTERN PERCENTAGE PERFORM PERFORMING PERSON PF
PF-STATUS PINK PLACES POOL POSITION POS_HIGH POS_LOW PRAGMAS PREC
PRECOMPILED PREFERRED PRESERVING PRIMARY PRINT PRINT-CONTROL
PRIORITY PRIVATE PROCEDURE PROCESS PROGRAM PROPERTY PROTECTED
PROVIDE PUBLIC PUSH PUSHBUTTON PUT QUAN QUEUE-ONLY QUICKINFO
RADIOBUTTON RAISE RAISING RANGE RANGES RAW RAWSTRING READ READ-ONLY
READER RECEIVE RECEIVED RECEIVER RECEIVING RED REDEFINITION REDUCE
REDUCED REF REFERENCE REFRESH REGEX REJECT REMOTE RENAMING REPLACE
REPLACEMENT REPLACING REPORT REQUEST REQUESTED RESERVE RESET
RESOLUTION RESPECTING RESPONSIBLE RESULT RESULTS RESUMABLE RESUME
RETRY RETURN RETURNCODE RETURNING RETURNS RIGHT RIGHT-JUSTIFIED
RIGHTPLUS RIGHTSPACE RISK RMC_COMMUNICATION_FAILURE
RMC_INVALID_STATUS RMC_SYSTEM_FAILURE ROLE ROLLBACK ROUND ROWS RPAD
RTRIM RUN SAP SAP-SPOOL SAVING SCALE_PRESERVING
SCALE_PRESERVING_SCIENTIFIC SCAN SCIENTIFIC
SCIENTIFIC_WITH_LEADING_ZERO SCREEN SCROLL SCROLL-BOUNDARY SCROLLING
SEARCH SECONDARY SECONDS SECTION SELECT SELECT-OPTIONS SELECTION
SELECTION-SCREEN SELECTION-SET SELECTION-SETS SELECTION-TABLE
SELECTIONS SEND SEPARATE SEPARATED SET SHARED SHIFT SHORT
SHORTDUMP-ID SIGN SIGN_AS_POSTFIX SIMPLE SINGLE SIZE SKIP SKIPPING
SMART SOME SORT SORTABLE SORTED SOURCE SPACE SPECIFIED SPLIT SPOOL
SPOTS SQL SQLSCRIPT SSTRING STABLE STAMP STANDARD START-OF-SELECTION
STARTING STATE STATEMENT STATEMENTS STATIC STATICS STATUSINFO
STEP-LOOP STOP STRING STRUCTURE STRUCTURES STYLE SUBKEY SUBMATCHES
SUBMIT SUBROUTINE SUBSCREEN SUBSTRING SUBTRACT
SUBTRACT-CORRESPONDING SUFFIX SUM SUMMARY SUMMING SUPPLIED SUPPLY
SUPPRESS SWITCH SWITCHSTATES SYMBOL SYNCPOINTS SYNTAX SYNTAX-CHECK
SYNTAX-TRACE SYST SYSTEM-CALL SYSTEM-EXCEPTIONS SYSTEM-EXIT TAB
TABBED TABLE TABLES TABLEVIEW TABSTRIP TARGET TASK TASKS TEST
TEST-INJECTION TEST-SEAM TESTING TEXT TEXTPOOL THEN THROW TIME TIMES
TIMESTAMP TIMEZONE TIMS TIMS_IS_VALID TITLE TITLE-LINES TITLEBAR TO
TOKENIZATION TOKENS TOP-LINES TOP-OF-PAGE TRACE-FILE TRACE-TABLE
TRAILING TRANSACTION TRANSFER TRANSFORMATION TRANSLATE TRANSPORTING
TRMAC TRUNCATE TRUNCATION TRY TSTMP_ADD_SECONDS
TSTMP_CURRENT_UTCTIMESTAMP TSTMP_IS_VALID TSTMP_SECONDS_BETWEEN TYPE
TYPE-POOL TYPE-POOLS TYPES ULINE UNASSIGN UNDER UNICODE UNION UNIQUE
UNIT UNIT_CONVERSION UNIX UNPACK UNTIL UNWIND UP UPDATE UPPER USER
USER-COMMAND USING UTF-8 VALID VALUE VALUE-REQUEST VALUES VARC VARY
VARYING VERIFICATION-MESSAGE VERSION VIA VIEW VISIBLE WAIT WARNING
WHEN WHENEVER WHERE WHILE WIDTH WINDOW WINDOWS WITH WITH-HEADING
WITH-TITLE WITHOUT WORD WORK WRITE WRITER XML XSD YELLOW YES YYMMDD
Z ZERO ZONE
)
end
def self.builtins
@keywords = Set.new %w(
acos apply asin assign atan attribute bit-set boolc boolx call
call-method cast ceil cfunc charlen char_off class_constructor clear
cluster cmax cmin cnt communication_failure concat_lines_of cond
cond-var condense constructor contains contains_any_not_of
contains_any_of copy cos cosh count count_any_not_of count_any_of
create cursor data dbmaxlen dbtab deserialize destructor distance
empty error_message escape exp extensible find find_any_not_of
find_any_of find_end floor frac from_mixed group hashed header idx
include index insert ipow itab key lax lines line_exists line_index
log log10 loop loop_key match matches me mesh_path namespace nmax
nmin node numeric numofchar object parameter primary_key read ref
repeat replace rescale resource_failure reverse root round segment
sender serialize shift_left shift_right sign simple sin sinh skip
sorted space sqrt standard strlen substring substring_after
substring_before substring_from substring_to sum switch switch-var
system_failure table table_line tan tanh template text to_lower
to_mixed to_upper transform translate trunc type value variable write
xsdbool xsequence xstrlen
)
end
def self.types
@types = Set.new %w(
b c d decfloat16 decfloat34 f i int8 n p s t x
clike csequence decfloat string xstring
)
end
def self.new_keywords
@types = Set.new %w(
DATA FIELD-SYMBOL
)
end
state :root do
rule %r/\s+/m, Text
rule %r/".*/, Comment::Single
rule %r(^\*.*), Comment::Multiline
rule %r/\d+/, Num::Integer
rule %r/('|`)/, Str::Single, :single_string
rule %r/[\[\]\(\)\{\}\.,:\|]/, Punctuation
# builtins / new ABAP 7.40 keywords (@DATA(), ...)
rule %r/(->|=>)?([A-Za-z][A-Za-z0-9_\-]*)(\()/ do |m|
if m[1] != ''
token Operator, m[1]
end
if (self.class.new_keywords.include? m[2].upcase) && m[1].nil?
token Keyword, m[2]
elsif (self.class.builtins.include? m[2].downcase) && m[1].nil?
token Name::Builtin, m[2]
else
token Name, m[2]
end
token Punctuation, m[3]
end
# keywords, types and normal text
rule %r/\w\w*/ do |m|
if self.class.keywords.include? m[0].upcase
token Keyword
elsif self.class.types.include? m[0].downcase
token Keyword::Type
else
token Name
end
end
# operators
rule %r((->|->>|=>)), Operator
rule %r([-\*\+%/~=&\?<>!#\@\^]+), Operator
end
state :operators do
rule %r((->|->>|=>)), Operator
rule %r([-\*\+%/~=&\?<>!#\@\^]+), Operator
end
state :single_string do
rule %r/\\./, Str::Escape
rule %r/(''|``)/, Str::Escape
rule %r/['`]/, Str::Single, :pop!
rule %r/[^\\'`]+/, Str::Single
end
end
end
end