Skip to content

Instantly share code, notes, and snippets.

@trockenasche
Created April 30, 2018 14:18
Show Gist options
  • Save trockenasche/68fb938824ab4685979ff95b4ff47a0b to your computer and use it in GitHub Desktop.
Save trockenasche/68fb938824ab4685979ff95b4ff47a0b to your computer and use it in GitHub Desktop.
ABAP Syntax Highligther for the JavaScript compatible SyntaxHighlighter
/**
* abap-brush
* http://fanninger.at/wordpress/syntaxhighlighter-evolved-abap-brush/
*
* @version
* 0.4 (2018-04-30)
*
* @copyright
* Copyleft 2011 fanningert
*
* @modified
* trockenasche
*
* @license
* Free
*
*/
SyntaxHighlighter.brushes.Abap=function(){
var functions = 'STRLEN XSTRLEN ABS SIGN CEIL FLOOR TRUNC FRAC';
var keywords = 'ABAP-SOURCE ABBREVIATED ABSTRACT ACCEPT ACCEPTING' +
' ACCORDING ACTIVATION ACTUAL ADD ADD-CORRESPONDING' +
' ADJACENT AFTER ALIAS ALIASES ALIGN' +
' ALL ALLOCATE ANALYSIS ANALYZER AND' +
' ANY APPEND APPENDAGE APPENDING APPLICATION' +
' ARCHIVE AREA ARITHMETIC AS ASCENDING' +
' ASSERT ASSIGN ASSIGNED ASSIGNING AT' +
' ATTRIBUTES AUTHORITY AUTHORITY-CHECK AVG BACK' +
' BACKGROUND BACKUP BACKWARD BADI BEFORE' +
' BEGIN BETWEEN BIG BINARY BIT' +
' 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 CALL' +
' CALLING CASE CASTING CATCH CENTER' +
' CENTERED CHAIN CHAIN-INPUT CHAIN-REQUEST CHANGE' +
' CHANGING CHAR-TO-HEX CHARACTER CHECK CHECKBOX' +
' CI_ CIRCULAR CLASS CLASS-CODING CLASS-DATA' +
' CLASS-EVENTS CLASS-METHODS CLASS-POOL CLEANUP CLEAR' +
' CLIENT CLOB CLOCK CLOSE' +
' CODE CODING COL_BACKGROUND COL_GROUP' +
' COL_HEADING COL_KEY COL_NEGATIVE COL_NORMAL COL_POSITIVE' +
' COL_TOTAL COLLECT COLOR COLUMN COLUMNS' +
' COMMENT COMMENTS COMMIT COMMON COMMUNICATION' +
' COMPARING COMPONENT COMPONENTS COMPRESSION COMPUTE' +
' CONCATENATE CONDENSE CONDITION CONNECT CONNECTION' +
' CONSTANTS CONTEXT CONTEXTS CONTINUE CONTROL' +
' CONTROLS CONVERSION CONVERT COPIES COPY' +
' CORRESPONDING COUNT COUNTRY COVER CP' +
' CPI CREATE CREATING CRITICAL' +
' CURRENCY CURRENT CURSOR CURSOR-SELECTION CUSTOMER' +
' CUSTOMER-FUNCTION DANGEROUS DATA DATAS DATABASE DATAINFO' +
' DATASET DATE DAYLIGHT DD/MM/YY DD/MM/YYYY' +
' DDMMYY DEALLOCATE DECIMALS DEFAULT DEFERRED' +
' DEFINE DEFINING DEFINITION DELETE DELETING' +
' DEMAND DEPARTMENT DESCENDING DESCRIBE DESTINATION' +
' DETAIL DIALOG DIRECTORY DISCONNECT DISPLAY' +
' DISPLAY-MODE DISTANCE DISTINCT DIV DIVIDE' +
' DIVIDE-CORRESPONDING DO DUMMY DUPLICATE DUPLICATES' +
' DURATION DURING DYNAMIC DYNPRO E' +
' EDIT EDITOR-CALL ELSE ELSEIF ENABLED' +
' ENABLING ENCODING END END-ENHANCEMENT-SECTION END-LINES' +
' END-OF-DEFINITION END-OF-FILE END-OF-PAGE END-OF-SELECTION ENDAT' +
' ENDCASE ENDCATCH ENDCHAIN ENDCLASS ENDDO' +
' ENDENHANCEMENT ENDEXEC ENDFORM ENDFUNCTION ENDIAN' +
' ENDIF ENDING ENDINTERFACE ENDLOOP ENDMETHOD' +
' ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDTRY' +
' ENDWHILE ENGINEERING ENHANCEMENT ENHANCEMENT-POINT ENHANCEMENT-SECTION' +
' ENHANCEMENTS ENTRIES ENTRY ENVIRONMENT EQ' +
' EQUIV ERRORMESSAGE ERRORS ESCAPE ESCAPING' +
' EVENT EVENTS EXACT EXCEPTION EXCEPTION-TABLE' +
' EXCEPTIONS EXCLUDE EXCLUDING EXEC EXECUTE' +
' EXISTS EXIT EXIT-COMMAND EXPAND EXPIRATION' +
' EXPLICIT EXPONENT EXPORT EXPORTING EXTENDED' +
' EXTENSION EXTRACT FETCH FIELD FIELD-GROUPS' +
' FIELD-SYMBOLS FIELDS FILE FILTER FILTER-TABLE' +
' FILTERS FINAL FIND FIRST FIRST-LINE' +
' FIXED-POINT FKEQ FKGE FLUSH FONT' +
' FOR FORM FORMAT FORWARD FOUND' +
' FRAME FRAMES FREE FRIENDS FROM' +
' FUNCTION FUNCTION-POOL FUNCTIONALITY FURTHER GAPS' +
' GENERATE GET GIVING GKEQ' +
' GKGE GLOBAL GREEN GROUP GROUPS' +
' HANDLE HANDLER HARMLESS HASHED' +
' HAVING HEAD-LINES HEADER HEADERS HEADING' +
' HELP-ID HELP-REQUEST HIDE HIGH HINT' +
' HOLD HOTSPOT I ICON ID' +
' IDENTIFICATION IDENTIFIER IDS IF IGNORING' +
' IMMEDIATELY IMPLEMENTATION IMPLEMENTATIONS IMPLICIT IMPORT' +
' IMPORTING IN INACTIVE INCL INCLUDE' +
' INCLUDES INCLUDING INCREMENT INDEX INDEX-LINE' +
' INFOTYPES INHERITING INIT INITIAL INITIALIZATION' +
' INNER INOUT INPUT INPUT INSERT' +
' INSTANCES INTENSIFIED INTERFACE INTERFACE-POOL INTERFACES' +
' INTERNAL INTERVALS INTO INVERSE INVERTED-DATE' +
' IS ISO JOB JOIN KEEP' +
' KEEPING KERNEL KEY KEYS KEYWORDS' +
' KIND LANGUAGE LAST LATE LAYOUT' +
' LEADING LEAVE LEFT LEFT-JUSTIFIED' +
' LEFTPLUS LEFTSPACE LEGACY LENGTH LEVEL' +
' LEVELS LIKE LINE LINE-COUNT LINE-SELECTION' +
' LINE-SIZE LINEFEED LINES LIST LIST-PROCESSING' +
' LISTBOX LITTLE LOAD LOAD-OF-PROGRAM LOB' +
' LOCAL LOCALE LOCATOR LOG-POINT LOGFILE' +
' LOGICAL LONG LOOP LOW LOWER' +
' LPI MAIL MAIN' +
' MAJOR-ID MARGIN MARK MASK MATCH' +
' MATCHCODE MAX MAXIMUM MEDIUM MEMORY' +
' MESSAGE MESSAGE-ID MESSAGES 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 NAME NAMETAB NATIVE' +
' NB 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' +
' NULL NUMBER O' +
' OBJECT OBJECTS OBLIGATORY OCCURRENCE OCCURRENCES' +
' OCCURS OF OFF OFFSET OLE' +
' 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 PATTERN PERCENTAGE PERFORM PERFORMING' +
' PERSON PF PF-STATUS PINK PLACES' +
' POOL POS_HIGH POS_LOW POSITION PRAGMAS' +
' PRECOMPILED PREFERRED PRESERVING PRIMARY PRINT' +
' PRINT-CONTROL PRIORITY PRIVATE PROCEDURE PROCESS' +
' PROGRAM PROPERTY PROTECTED PROVIDE PUBLIC' +
' PUSHBUTTON PUT QUEUE-ONLY QUICKINFO RADIOBUTTON' +
' RAISE RAISING RANGE RANGES RAW' +
' READ READ-ONLY READER RECEIVE RECEIVED' +
' RECEIVER RECEIVING RED REDEFINITION 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 RIGHT RIGHT-JUSTIFIED RIGHTPLUS RIGHTSPACE' +
' RISK RMC_COMMUNICATION_FAILURE RMC_INVALID_STATUS RMC_SYSTEM_FAILURE ROLLBACK' +
' ROUND ROWS 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_AS_POSTFIX SIMPLE SINGLE SIZE' +
' SKIP SKIPPING SMART SOME SORT' +
' SORTABLE SORTED SOURCE SPECIFIED' +
' SPLIT SPOOL SPOTS SQL STABLE' +
' STAMP STANDARD START-OF-SELECTION STARTING STATE' +
' STATEMENT STATEMENTS STATIC STATICS STATUSINFO' +
' STEP-LOOP STOP STRUCTURE STRUCTURES STYLE' +
' SUBKEY SUBMATCHES SUBMIT SUBROUTINE SUBSCREEN' +
' SUBSTRING SUBTRACT SUBTRACT-CORRESPONDING SUFFIX SUM' +
' SUMMARY SUMMING SUPPLIED SUPPLY SUPPRESS' +
' SWITCH SWITCHSTATES SYMBOL SYNCPOINTS SYNTAX-CHECK' +
' SYNTAX-TRACE SYSTEM-CALL SYSTEM-EXCEPTIONS SYSTEM-EXIT TAB' +
' TABBED TABLE TABLES TABLEVIEW TABSTRIP' +
' TASK TEST TESTING TEXT TEXTPOOL' +
' THEN TIME TIMES TIMESTAMP TIMEZONE' +
' 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 TYPE TYPE-POOL TYPE-POOLS TYPES' +
' ULINE UNASSIGN UNDER UNICODE UNIQUE' +
' UNIT UNIX UNPACK UNTIL UNWIND' +
' UP UPDATE UPPER USER USER-COMMAND' +
' USING UTF-8 VALID VALUE VALUE-REQUEST' +
' VALUES VARY VARYING VERIFICATION-MESSAGE VERSION' +
' VIA VISIBLE WAIT WARNING WHEN' +
' WHENEVER WHERE WHILE WIDTH WINDOW' +
' WINDOWS WITH WITH-HEADING WITH-TITLE WITHOUT' +
' WORD WORK WRITE WRITER XML' +
' YELLOW YES YYMMDD ZERO' +
' ZONE CALL METHOD CLASS ENDCLASS CLASS-DATA CLASS-EVENTS' +
' CLASS-METHODS CREATE OBJECT EVENTS INTERFACE INTERFACES' +
' METHOD ENDMETHOD METHODS PRIVATE SECTION PROTECTED SECTION' +
' PUBLIC SECTION RAISE EVENT SET HANDLER';
this.regexList=[
/* comments */
{ regex: /\*.*$/gm, css: 'comments' },
{ regex: /\".*$/gm, css: 'comments' },
/* strings */
{ regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' },
/* numbers */
{ regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi, css: 'value' },
/* SY and SYST */
{ regex: /(SY|SYST)-(DBSYS|HOST|OPSYS|SYSID|LANGU|MANDT|MODNO|UNAME|DATUM|FDAYW|TIMLO|UZEIT|CALLD|CPROG|DBNAM|DYNGR|DYNNR|LDBPG|REPID|TCODE|BATCH|BINPT|ABCDE|ULINE|VLINE|INDEX|FDPOS|TABIX|TFILL|DBCNT|SUBRC|CUCOL|CUROW|DATAR|LOOPC|PFKEY|SCOLS|SROWS|STEPL|TITLE|UCOMM|SLSET|COLNO|LINCT|LINNO|LINSZ|PAGNO|TVAR0|TVAR1|TVAR2|TVAR3|TVAR4|TVAR5|TVAR6|TVAR7|TVAR8|TVAR9|MSGID|MSGNO|MSGTY|MSGV1|MSGV2|MSGV3|MSGV4)|(SPACE)|(ABAP)_(BOOL|TRUE|FALSE)/gmi, css: 'constants' },
/* functions */
{ regex: new RegExp(this.getKeywords(functions), 'gmi'), css: 'functions' },
/* keywords */
{ regex: new RegExp(this.getKeywords(keywords), 'gmi'), css: 'keyword' },
/* regular expression */
{ regex: /\b( EQ | NE | LT | LE | GT | GE )\b/gmi, css: 'keyword' },
/* comparing string */
{ regex: /\b( CO | CN | CA | NA | CS | NS | CP | NP )\b/gmi, css: 'keyword' },
/* comparing bit */
{ regex: /\b( O | Z | M )\b/gmi, css: 'keyword' },
/* bit operations */
{ regex: /\b( BIT-AND | BIT-OR | BIT-XOR | BIT-NOT )\b/gmi, css: 'keyword' }
]
};
SyntaxHighlighter.brushes.Abap.prototype=new SyntaxHighlighter.Highlighter();
SyntaxHighlighter.brushes.Abap.aliases=["abap"];
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment