dp.SyntaxHighlighter C++ 추가 패치

@codemaru · January 15, 2007 · 4 min read

dp.SyntaxHighlighterKAISTIZEN님의 블로그에서 알게되어서 쓰게된 자바스크립트 신택스 하이라이팅 프로그램입니다. 기능도 괜찮고 무엇보다 원본 코드를 훼손하지 않아서 좋더군요. 그런데, 요 프로그램 아주 다양한 언어를 지원하는데 유독 C++만 지원하지 않더군요.

저처럼 C++ 골수 유저들을 위해서 지난 번에 패치를 제작해서 보냈습니다. 대단한건 아니고 아래와 같이 C++ 키워드만 추가한 형태입니다. 보면 알겠지만 Windows 코드를 하이라이팅 하는데 최적화 되어 있습니다.

근데 이 사람들 무심하게도 패치를 보내도 메일 한통이 없더군요. 그래서 개발을 중단했나보다 하고는 걍 저혼자 쓰고 있었습니다. 오늘 이 프로그램이 무엇인지 물어 보는 분이 계셔서 다시 들어가 봤는데. 패치가 적용이 되었더군요. 거맙다는 말과 함께. 이 맛에 패치하는거 아니겠습니까?... ㅋㅋㅋ

[js]dp.sh.Brushes.WinCpp = function()
{
var 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';

   var 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';

   this.regexList = [
{ regex: new RegExp('//.*$', 'gm'), css: 'comment' },
{ regex: new RegExp('/\*[\s\S]*?\*/', 'g'), css: 'comment' },
{ regex: new RegExp('"(?:\.|[^\""])*"', 'g'), css: 'string' },
{ regex: new RegExp('^ *#.*', 'gm'), css: 'preprocessor' },
{ regex: new RegExp(this.GetKeywords(datatypes), 'gm'), css: 'datatypes' },
{ regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' }
];

   this.CssClass = 'dp-wcpp';
}

dp.sh.Brushes.WinCpp.prototype    = new dp.sh.Highlighter();
dp.sh.Brushes.WinCpp.Aliases    = ['wcpp', 'wcxx', 'cpp'];[/js]

@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중