무슨 깡으로 블로그에 SyntaxHighlighter 테스트를 하는지 모르겠으나, ANSI 컬러로 SQL colorize하는 소스코드를 붙여본다.
/*
* Copyright (c) 1999-2012, Jang-Ho Hwang, rath@xrath.com.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. Redistributions in
* binary form must reproduce the above copyright notice, this list of
* conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution. Neither the name of the
* Jang-Ho Hwang nor the names of its contributors may be used to endorse or
* promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
package rath.adrenaline.tool.colorize;
import rath.adrenaline.pcre.MatchResult;
import rath.adrenaline.pcre.Pattern;
import rath.adrenaline.pcre.Replacer;
import rath.adrenaline.pcre.Substitution;
import rath.adrenaline.util.ANSI;
/**
* Created by IntelliJ IDEA.
* User: rath
* Date: 21/01/2011
* Time: 22:13
*/
public class SqlColorize {
private static Pattern keywordsPattern = Pattern.compile(
"\\b(SELECT|FROM|INSERT|INTO|VALUES|UPDATE|SET|DELETE|VALUES|WHERE|" +
"LIKE|AND|ORDER BY|OR|GROUP BY|HAVING|UNION|LIMIT|USING|JOIN|OUTER|IS|NOT|ASC|DESC)\\b",
Pattern.CASE_INSENSITIVE);
private static Pattern constantPattern = Pattern.compile(
"\\b([0-9]+|NULL|true|false)\\b", Pattern.CASE_INSENSITIVE
);
private static Pattern stringPattern = Pattern.compile("('[^']+')");
private static Pattern functionPattern = Pattern.compile(
"\\b(COUNT|CONCAT|LENGTH|LOWER|UPPER|SUBSTRING|TRIM|" +
"ADDDATE|ADDTIME|CURDATE|NOW|DATE)\\b",
Pattern.CASE_INSENSITIVE);
private static Replacer keywordsReplacer = keywordsPattern.replacer(new Substitution() {
public void append(MatchResult matchResult, StringBuilder buf) {
String keyword = matchResult.group(1);
buf.append(ANSI.CYAN_BOLD);
buf.append(keyword);
buf.append(ANSI.RESET);
}
});
private static Replacer constantReplacer = constantPattern.replacer(new Substitution() {
public void append(MatchResult matchResult, StringBuilder buf) {
String constant = matchResult.group(1);
buf.append(ANSI.GREEN);
buf.append(constant);
buf.append(ANSI.RESET);
}
});
private static Replacer stringReplacer = stringPattern.replacer(new Substitution() {
public void append(MatchResult matchResult, StringBuilder buf) {
String constant = matchResult.group(1);
buf.append(ANSI.MAGENTA);
buf.append(constant);
buf.append(ANSI.RESET);
}
});
private static Replacer functionReplacer = functionPattern.replacer(new Substitution() {
public void append(MatchResult matchResult, StringBuilder buf) {
String constant = matchResult.group(1);
buf.append(ANSI.YELLOW);
buf.append(constant);
buf.append(ANSI.RESET);
}
});
public static String colorize(String sql) {
sql = constantReplacer.replace(sql);
sql = keywordsReplacer.replace(sql);
sql = stringReplacer.replace(sql);
sql = functionReplacer.replace(sql);
return sql;
}
}
워드프레스 LightWord 테마때문에 80 컬럼 안지킨거 딱 걸려서 테마설정 Layout settings => wider로 바꿨다. Java에서는 120컬럼 정도가 어떠할지.
Comments
1 thoughts shared
Continue Reading
Discover more thoughts and insights
연애시대 OST - Thank You
원곡은 노영심씨의 1997년 앨범 '이야기 피아노 무언가' 11번 트랙인데 SBS 드라마 '연애시대'에서 손예진의 눈물송으로 더 잘 알려져 있습니다. 악보가 무려 9장이라.. 3페이지만
Read more
아이디어와 욕구 그리고 할 일 목록 정리
최근에는 바로 1시간전에 뭘 하고 있었는지 기억이 전혀 안날 정도로 순간 몰입도가 높아졌습니다. 해보고 싶거나 공부할 것 혹은 아이디어가 우르르 쏟아져 나오고 어이없게도 업무시간에 자꾸 생각나서 난감할 때가
Read more
발전과 자기개발에 대한 고찰
발전을 바란다면 일시적으로 자아를 버리고 의지력에만 기대어 훈련해야 한다. 시간을 쏟는 것만으로는 효과가 없다. 주의력과 시간을 쏟는 것도 충분히 고되지만, 이것만으로는 무엇을 성취하거나 이루어내거나 돈을 벌 수
Read more