Package de.sebastianbenz.task.ui.highlighting

Source Code of de.sebastianbenz.task.ui.highlighting.BrushRegistry

package de.sebastianbenz.task.ui.highlighting;

import static com.google.common.collect.Maps.newHashMap;
import static de.sebastianbenz.task.ui.highlighting.Brush.Mapping.pattern;
import static de.sebastianbenz.task.ui.highlighting.BrushBuilder.lang;
import static de.sebastianbenz.task.ui.highlighting.HighlightingConfiguration.CODE_ANNOTATION_ID;

import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;

import com.google.inject.Singleton;

import de.sebastianbenz.task.ui.highlighting.Brush;
import de.sebastianbenz.task.ui.highlighting.BrushBuilder;
import de.sebastianbenz.task.ui.highlighting.HighlightingConfiguration;

@Singleton
public class BrushRegistry {
 
  public static final String KEYWORD_ID = "keyword";
  public static final String COMMENT_ID = "comment";
  public static final String STRING_ID = "string";
  public static final String NUMBER_ID = "number";
 
  private static final Pattern PERL_SINGLE_LINE_COMMENT = Pattern.compile("#.*$", Pattern.MULTILINE);
  public static final String DEFAULT_CONFIGURATION = "default";
  public static final Pattern MULTILINE_LINE_COMMENT = Pattern.compile("/\\*[\\s\\S]*?\\*/", Pattern.MULTILINE);
  public static final Pattern SINGLE_LINE_COMMENT = Pattern.compile("//.*$", Pattern.MULTILINE);
  public static final Pattern DOUBLE_QUOTED_STRING = Pattern.compile("\"(?:\\.|(\\\\\\\")|[^\\\"\"\\n])*\"");
  public static final Pattern SINGLE_QUOTED_STRING = Pattern.compile("'(?:\\.|(\\\\\\')|[^\\''\\n])*'");
 
  private Map<String, Brush> configurations = newHashMap();
 
  public BrushRegistry() {
    init();
  }
 
  protected void init(){
    register(
        lang(DEFAULT_CONFIGURATION)
        .mapping(
          pattern(MULTILINE_LINE_COMMENT).style(COMMENT_ID),
          pattern(SINGLE_LINE_COMMENT).style(COMMENT_ID),
          pattern(DOUBLE_QUOTED_STRING).style(STRING_ID),
          pattern(SINGLE_QUOTED_STRING).style(STRING_ID),
          pattern("\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b").style(NUMBER_ID),
          pattern("(?!\\@interface\\b)\\@[\\$\\w]+\\b").style(CODE_ANNOTATION_ID)
        ),
      // Copyright Alex Gorbatchev
      lang("java")
        .keywords"abstract assert boolean break byte case catch char class const " +
                      "continue default do double else enum extends " +
                      "false final finally float for goto if implements import " +
                      "instanceof int interface long native new null " +
                      "package private protected public return " +
                      "short static strictfp super switch synchronized this throw throws true " +
                      "transient try void volatile while")
        .mapping(
          pattern(MULTILINE_LINE_COMMENT).style(COMMENT_ID),
          pattern(SINGLE_LINE_COMMENT).style(COMMENT_ID),
          pattern(DOUBLE_QUOTED_STRING).style(STRING_ID),
          pattern(SINGLE_QUOTED_STRING).style(STRING_ID),
         
          pattern("\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b").style(NUMBER_ID),
          pattern("(?!\\@interface\\b)\\@[\\$\\w]+\\b").style(CODE_ANNOTATION_ID)),
      // copyright Alex Gorbatchev
      lang("js", "javascript")
        .keywords"break case catch continue " +
                          "default delete do else false " +
                          "for function if in instanceof " +
                          "new null return super switch " +
                          "this throw true try typeof var while with")
        .mapping(
          pattern(MULTILINE_LINE_COMMENT).style(COMMENT_ID),
          pattern(SINGLE_LINE_COMMENT).style(COMMENT_ID),
          pattern(DOUBLE_QUOTED_STRING).style(STRING_ID),
          pattern(SINGLE_QUOTED_STRING).style(STRING_ID),
          pattern("\\s*#.*").style(CODE_ANNOTATION_ID),
          pattern("\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b").style(NUMBER_ID)),
         
      lang("xml", "html", "xhtml", "xslt")
        .mapping(
          pattern("<\\?.*\\?>").style(CODE_ANNOTATION_ID),
          pattern("</?[a-zA-Z-_0-9]*").style(COMMENT_ID),
          pattern("(/>|>)").style(COMMENT_ID),
          pattern("(<!--.*-->)").style(STRING_ID),
          pattern("\\s([a-zA-Z0-9-_]*)\\=").style(HighlightingConfiguration.KEYWORD_ID),
          pattern(DOUBLE_QUOTED_STRING).style(STRING_ID),
          pattern(SINGLE_QUOTED_STRING).style(STRING_ID)
        ),
      // Copyright Alex Gorbatchev
      lang("scala")
        .keywords("val sealed case def true trait implicit forSome import match object null finally super " +
                        "override try lazy for var catch throw type extends class while with new final yield abstract " +
                        "else do if return protected private this package false")
        .mapping(
          pattern(MULTILINE_LINE_COMMENT).style(COMMENT_ID),
          pattern(SINGLE_LINE_COMMENT).style(COMMENT_ID),
          pattern(DOUBLE_QUOTED_STRING).style(STRING_ID),
          pattern(SINGLE_QUOTED_STRING).style(STRING_ID),
          pattern("\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b").style(NUMBER_ID)
        ),
      // Copyright Erik Peterson.
      lang("ruby")
        .keywords("alias and BEGIN begin break case class def define_method defined do each else elsif " +
                        "END end ensure false for if in module new next nil not or raise redo rescue retry return " +
                        "self super then throw true undef unless until when while yield " +
            // builtins
            "Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload " +
                        "Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol " +
                        "ThreadGroup Thread Time TrueClass")
        .mapping(
            pattern(PERL_SINGLE_LINE_COMMENT).style(COMMENT_ID),
            pattern(DOUBLE_QUOTED_STRING).style(STRING_ID),
            pattern(SINGLE_QUOTED_STRING).style(STRING_ID),
            pattern("(\\$|@@|@)\\w+").style(KEYWORD_ID),
            pattern(":[a-z][A-Za-z0-9_]*").style(KEYWORD_ID), // symbols
            pattern("\b[A-Z0-9_]+\b").style(KEYWORD_ID) // constants
        ),
      // Copyright Alex Gorbatchev
      lang("python")
        .keywords(
            "and assert break class continue def del elif else " +
                        "except exec finally for from global if import in is " +
                        "lambda not or pass print raise return try yield while " +
            // functions
            "__import__ abs all any apply basestring bin bool buffer callable " +
                    "chr classmethod cmp coerce compile complex delattr dict dir " +
                    "divmod enumerate eval execfile file filter float format frozenset " +
                    "getattr globals hasattr hash help hex id input int intern " +
                    "isinstance issubclass iter len list locals long map max min next " +
                    "object oct open ord pow print property range raw_input reduce " +
                    "reload repr reversed round set setattr slice sorted staticmethod " +
                    "str sum super tuple type type unichr unicode vars xrange zip " +
            // special
            "None True False self cls class_"
        )
        .mapping(
            pattern(DOUBLE_QUOTED_STRING).style(STRING_ID),
            pattern(PERL_SINGLE_LINE_COMMENT).style(COMMENT_ID),
            pattern("^\\s*@\\w+").style(CODE_ANNOTATION_ID),
            pattern(Pattern.compile("\"(?!\")(?:\\.|\\\"|[^\"\"\n])*\"", Pattern.MULTILINE)).style(STRING_ID),
            pattern(Pattern.compile("'(?!')(?:\\.|(\\\')|[^\''\n])*'", Pattern.MULTILINE)).style(STRING_ID),
           
            pattern("\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b").style(NUMBER_ID))
      ,
      // Copyright 2006 Shin, YoungJin
      lang("cpp", "c")
        .keywords// datatypes
            "ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR " +
                        "DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH " +
                        "HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP " +
                        "HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY " +
                        "HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT " +
                        "HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE " +
                        "LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF " +
                        "LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR " +
                        "LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR " +
                        "PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT " +
                        "PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 " +
                        "POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR " +
                        "PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 " +
                        "PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT " +
                        "SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG " +
                        "ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM " +
                        "char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t " +
                        "clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS " +
                        "FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t " +
                        "__wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t " +
                        "jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler " +
                        "sig_atomic_t size_t _stat __stat64 _stati64 terminate_function " +
                        "time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf " +
                        "va_list wchar_t wctrans_t wctype_t wint_t signed "  +
                        // keywords
                        "break case catch class const __finally __exception __try " +
                        "const_cast continue private public protected __declspec " +
                        "default delete deprecated dllexport dllimport do dynamic_cast " +
                        "else enum explicit extern if for friend goto inline " +
                        "mutable naked namespace new noinline noreturn nothrow " +
                        "register reinterpret_cast return selectany " +
                        "sizeof static static_cast struct switch template this " +
                        "thread throw true false try typedef typeid typename union " +
                        "using uuid virtual void volatile whcar_t while " +
                        // functions
                        "assert isalnum isalpha iscntrl isdigit isgraph islower isprint" +
                        "ispunct isspace isupper isxdigit tolower toupper errno localeconv " +
                        "setlocale acos asin atan atan2 ceil cos cosh exp fabs floor fmod " +
                        "frexp ldexp log log10 modf pow sin sinh sqrt tan tanh jmp_buf " +
                        "longjmp setjmp raise signal sig_atomic_t va_arg va_end va_start " +
                        "clearerr fclose feof ferror fflush fgetc fgetpos fgets fopen " +
                        "fprintf fputc fputs fread freopen fscanf fseek fsetpos ftell " +
                        "fwrite getc getchar gets perror printf putc putchar puts remove " +
                        "rename rewind scanf setbuf setvbuf sprintf sscanf tmpfile tmpnam " +
                        "ungetc vfprintf vprintf vsprintf abort abs atexit atof atoi atol " +
                        "bsearch calloc div exit free getenv labs ldiv malloc mblen mbstowcs " +
                        "mbtowc qsort rand realloc srand strtod strtol strtoul system " +
                        "wcstombs wctomb memchr memcmp memcpy memmove memset strcat strchr " +
                        "strcmp strcoll strcpy strcspn strerror strlen strncat strncmp " +
                        "strncpy strpbrk strrchr strspn strstr strtok strxfrm asctime " +
                        "clock ctime difftime gmtime localtime mktime strftime time")
               .mapping(
              pattern(MULTILINE_LINE_COMMENT).style(COMMENT_ID),
              pattern(SINGLE_LINE_COMMENT).style(COMMENT_ID),
              pattern(DOUBLE_QUOTED_STRING).style(STRING_ID),
              pattern(SINGLE_QUOTED_STRING).style(STRING_ID),
              pattern("\\s*#.*").style(CODE_ANNOTATION_ID))
    );
       
  }

  private void register(BrushBuilder... builders) {
    for (BrushBuilder builder : builders) {
      Collection<Brush> brushes = builder.build();
      for (Brush brush : brushes) {
        configurations.put(brush.getName(), brush);
      }
    }
  }

  public Brush get(String key) {
    Brush configuration = configurations.get(key);
    if(configuration == null){
      configuration = configurations.get(DEFAULT_CONFIGURATION);
    }
    return configuration;
  }

  public Set<String> getLanguages() {
    return configurations.keySet();
  }


}
TOP

Related Classes of de.sebastianbenz.task.ui.highlighting.BrushRegistry

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.