This is an automated email from the git hooks/post-receive script. pini pushed a commit to tag upstream/1.1.0_beta1 in repository sikuli.
commit aa67455f06bb7fa7ddccee3bece827f33d80cf4a Author: Raimund Hocke <[email protected]> Date: Sat Feb 1 17:37:06 2014 +0100 made the Jygments stuff Maven compatible and that it can be used inside Netbeans when running stuff (NB json has a problem with comments so files are renamed to jso) --- .../main/java/org/sikuli/syntaxhighlight/Run.java | 31 ++- .../main/java/org/sikuli/syntaxhighlight/Util.java | 267 +++++++++++---------- .../org/sikuli/syntaxhighlight/grammar/Lexer.java | 30 ++- .../org/sikuli/syntaxhighlight/style/Style.java | 28 ++- .../main/resources/jygments-legal/copyright.txt | 8 + .../src/main/resources/jygments-legal/license.txt | 25 ++ 6 files changed, 237 insertions(+), 152 deletions(-) diff --git a/Jygments4Sikuli/src/main/java/org/sikuli/syntaxhighlight/Run.java b/Jygments4Sikuli/src/main/java/org/sikuli/syntaxhighlight/Run.java index df64d42..c3e137c 100644 --- a/Jygments4Sikuli/src/main/java/org/sikuli/syntaxhighlight/Run.java +++ b/Jygments4Sikuli/src/main/java/org/sikuli/syntaxhighlight/Run.java @@ -3,16 +3,33 @@ package org.sikuli.syntaxhighlight; import java.io.FileInputStream; import java.io.IOException; import java.io.PrintWriter; +import java.util.Date; import org.sikuli.syntaxhighlight.format.Formatter; import org.sikuli.syntaxhighlight.grammar.Lexer; +import org.sikuli.syntaxhighlight.grammar.Token; public class Run { + + private static void p(String text, Object... args) { + System.out.println(String.format(text, args)); + } - public static void main(String[] args) throws IOException, ResolutionException { - String file = System.getProperty("user.dir") + "/org/sikuli/syntaxhighlight/Run.java"; - Lexer lexer = Lexer.getByName("java"); - Formatter formatter = Formatter.getByName("html"); - String code = Util.streamToString(new FileInputStream(file)); - formatter.format(lexer.getTokens(code), new PrintWriter(System.out)); - } + public static void main(String[] args) throws IOException, ResolutionException { + String file = System.getProperty("user.dir") + "/src/main/java/org/sikuli/syntaxhighlight/Util.java"; + String aLexer = "java"; + Lexer lexer = Lexer.getByName(aLexer); + if (lexer != null) { + Formatter formatter = Formatter.getByName("html"); + String code = Util.streamToString(new FileInputStream(file)); +// code = " String code = Util.streamToString(new FileInputStream(file));"; + long start = new Date().getTime(); + Iterable<Token> tokens = lexer.getTokens(code); + long lexing = new Date().getTime() - start; + formatter.format(tokens, new PrintWriter("/Users/rhocke/Desktop/shtest.html")); + long formatting = new Date().getTime()- start - lexing; + p("%s: processed (%d, %d)", aLexer, lexing, formatting); + } else { + p("%s: no Lexer found", aLexer); + } + } } diff --git a/Jygments4Sikuli/src/main/java/org/sikuli/syntaxhighlight/Util.java b/Jygments4Sikuli/src/main/java/org/sikuli/syntaxhighlight/Util.java index c941bcf..8909cb7 100644 --- a/Jygments4Sikuli/src/main/java/org/sikuli/syntaxhighlight/Util.java +++ b/Jygments4Sikuli/src/main/java/org/sikuli/syntaxhighlight/Util.java @@ -1,12 +1,10 @@ /** * Copyright 2010-2013 Three Crickets LLC. * <p> - * The contents of this file are subject to the terms of a BSD license. See - * attached license.txt. + * The contents of this file are subject to the terms of a BSD license. See attached license.txt. * <p> - * Alternatively, you can obtain a royalty free commercial license with less - * limitations, transferable or non-transferable, directly from Three Crickets - * at http://threecrickets.com/ + * Alternatively, you can obtain a royalty free commercial license with less limitations, + * transferable or non-transferable, directly from Three Crickets at http://threecrickets.com/ */ package org.sikuli.syntaxhighlight; @@ -19,135 +17,148 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.net.URI; import java.net.URISyntaxException; -import java.util.logging.Level; -import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.sikuli.syntaxhighlight.grammar.Lexer; /** * @author Tal Liron */ public class Util { - public static String literalRegEx(String expression) { - return "\\Q" + expression + "\\E"; - } - - public static String replace(String string, String occurence, String replacement) { - return string.replaceAll(literalRegEx(occurence), replacement); - } - - public static String streamToString(InputStream stream) throws IOException { - StringBuilder builder = new StringBuilder(); - String line; - - try { - BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8")); - while ((line = reader.readLine()) != null) { - builder.append(line).append("\n"); - } - } finally { - stream.close(); - } - - return builder.toString(); - } - - public static String rejsonToJson(InputStream stream) throws IOException { - String rejson = streamToString(stream); - String json = rejsonToJson(rejson, true); - json = rejsonToJson(json, false); - return json; - } - - public static String rejsonToJson(String rejson, boolean doubleQuote) { - Matcher matcher = doubleQuote ? DOUBLE_QUOTED_STRING.matcher(rejson) : SINGLE_QUOTED_STRING.matcher(rejson); - StringBuilder json = new StringBuilder(); - int start = 0, end = 0, lastEnd = 0; - while (matcher.find()) { - lastEnd = end; - start = matcher.start(); - end = matcher.end(); - if ((start > 0) && (rejson.charAt(start - 1) == 'r')) { - // Convert Python-style r"" string to Java-compatible pattern - String string = rejson.substring(start + 1, end - 1); - json.append(rejson.substring(lastEnd, start - 1)); - json.append('\"'); - json.append(pythonRegExToJavaPattern(string, doubleQuote)); - json.append('\"'); - } /* - * else if( !doubleQuote ) { // From single quote to double quote - * String string = rejson.substring( start + 1, end - 1 ); - * json.append( rejson.substring( lastEnd, start - 1 ) ); - * json.append( '\"' ); json.append( string.replaceAll( "\"", - * "\\\\\"" ) ); json.append( '\"' ); } - */ else { - // As is - json.append(rejson.substring(lastEnd, end)); - } - } - json.append(rejson.substring(end)); - // System.out.println( json ); - return json.toString(); - } - - public static String pythonRegExToJavaPattern(String pattern, boolean doubleQuote) { - pattern = pattern.replaceAll("\\\\", "\\\\\\\\"); - pattern = pattern.replaceAll("\\{", "\\\\\\\\{"); - pattern = pattern.replaceAll("\\}", "\\\\\\\\}"); - if (!doubleQuote) { - pattern = pattern.replaceAll("\"", "\\\\\""); - } - // System.out.println( pattern ); - return pattern; - } - - public static String escapeHtml(String text) { - text = text.replace("&", "&"); - text = text.replace("<", "<"); - text = text.replace(">", ">"); - text = text.replace("\"", """); - text = text.replace("'", "'"); - return text; - } - - public static String asHtml(String text) { - text = escapeHtml(text); - text = text.replace(" ", " "); - return text; - } - - private static final Pattern DOUBLE_QUOTED_STRING = Pattern.compile("\"(?>\\\\.|.)*?\""); - - private static final Pattern SINGLE_QUOTED_STRING = Pattern.compile("'(?>\\\\.|.)*?'"); - - public static String extJSON = ".jso"; - - public static InputStream getJsonFile(String filename) { - URI jarFileURI = null; - File jarFile; - InputStream stream = null; - filename = filename.replace('.', '/') + extJSON; - try { - jarFileURI = Jygments.class.getProtectionDomain().getCodeSource().getLocation().toURI(); - } catch (URISyntaxException ex) { - //TODO error message - } - if (jarFileURI != null) { - if (jarFileURI.getScheme().equals("file")) { - jarFile = new File(jarFileURI.getPath(), filename); - if (jarFile.exists()) { - try { - stream = new FileInputStream(jarFile); - } catch (FileNotFoundException ex) { - //TODO error message - } - } - } else { - stream = Jygments.class.getClassLoader().getResourceAsStream(filename); - } - } - return stream; - } + public static String literalRegEx(String expression) { + return "\\Q" + expression + "\\E"; + } + + public static String replace(String string, String occurence, String replacement) { + return string.replaceAll(literalRegEx(occurence), replacement); + } + + public static String streamToString(InputStream stream) throws IOException { + StringBuilder builder = new StringBuilder(); + String line; + + try { + BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8")); + while ((line = reader.readLine()) != null) { + builder.append(line).append("\n"); + } + } finally { + stream.close(); + } + + return builder.toString(); + } + + public static String rejsonToJson(InputStream stream) throws IOException { + String rejson = streamToString(stream); + String json = rejsonToJson(rejson, true); + json = rejsonToJson(json, false); + return json; + } + + public static String rejsonToJson(String rejson, boolean doubleQuote) { + Matcher matcher = doubleQuote ? DOUBLE_QUOTED_STRING.matcher(rejson) : SINGLE_QUOTED_STRING.matcher(rejson); + StringBuilder json = new StringBuilder(); + int start = 0, end = 0, lastEnd = 0; + while (matcher.find()) { + lastEnd = end; + start = matcher.start(); + end = matcher.end(); + if ((start > 0) && (rejson.charAt(start - 1) == 'r')) { + // Convert Python-style r"" string to Java-compatible pattern + String string = rejson.substring(start + 1, end - 1); + json.append(rejson.substring(lastEnd, start - 1)); + json.append('\"'); + json.append(pythonRegExToJavaPattern(string, doubleQuote)); + json.append('\"'); + } /* + * else if( !doubleQuote ) { // From single quote to double quote + * String string = rejson.substring( start + 1, end - 1 ); + * json.append( rejson.substring( lastEnd, start - 1 ) ); + * json.append( '\"' ); json.append( string.replaceAll( "\"", + * "\\\\\"" ) ); json.append( '\"' ); } + */ else { + // As is + json.append(rejson.substring(lastEnd, end)); + } + } + json.append(rejson.substring(end)); + // System.out.println( json ); + return json.toString(); + } + + public static String pythonRegExToJavaPattern(String pattern, boolean doubleQuote) { + pattern = pattern.replaceAll("\\\\", "\\\\\\\\"); + pattern = pattern.replaceAll("\\{", "\\\\\\\\{"); + pattern = pattern.replaceAll("\\}", "\\\\\\\\}"); + if (!doubleQuote) { + pattern = pattern.replaceAll("\"", "\\\\\""); + } + // System.out.println( pattern ); + return pattern; + } + + public static String escapeHtml(String text) { + text = text.replace("&", "&"); + text = text.replace("<", "<"); + text = text.replace(">", ">"); + text = text.replace("\"", """); + text = text.replace("'", "'"); + return text; + } + + public static String asHtml(String text) { + text = escapeHtml(text); + text = text.replace(" ", " "); + return text; + } + private static final Pattern DOUBLE_QUOTED_STRING = Pattern.compile("\"(?>\\\\.|.)*?\""); + private static final Pattern SINGLE_QUOTED_STRING = Pattern.compile("'(?>\\\\.|.)*?'"); + public static String extJSON = ".jso"; + + public static InputStream getJsonFile(String pack, String sub, String name, String fullname) { + URI jarFileURI = null; + File jarFile = null; + InputStream stream = null; + String jsonname = name.replace('.', '/') + extJSON; + fullname = fullname.replace('.', '/') + extJSON; + String filenamePack, filenameRoot; + try { + jarFileURI = Jygments.class.getProtectionDomain().getCodeSource().getLocation().toURI(); + } catch (URISyntaxException ex) { + //TODO error message + } + if (jarFileURI != null) { + String jarFilePath = jarFileURI.getPath(); + filenamePack = filenameRoot = jsonname; + if (jarFileURI.getScheme().equals("file")) { + if (!pack.isEmpty()) { + pack = pack.replace(".", "/"); + if (!sub.isEmpty()) { + sub = sub.replace(".", "/"); + pack = pack + "/" + sub; + filenameRoot = sub + "/" + jsonname; + } + filenamePack = pack + "/" + jsonname; + } + jarFile = new File(jarFilePath, filenamePack); + if (!jarFile.exists()) { + jarFile = new File(jarFilePath, filenameRoot); + if (!jarFile.exists()) { + jarFile = null; + } + } + if (jarFile != null) { + try { + stream = new FileInputStream(jarFile); + } catch (FileNotFoundException ex) { + //TODO error message + } + } + } else { + stream = Jygments.class.getClassLoader().getResourceAsStream(fullname); + } + } + return stream; + } } diff --git a/Jygments4Sikuli/src/main/java/org/sikuli/syntaxhighlight/grammar/Lexer.java b/Jygments4Sikuli/src/main/java/org/sikuli/syntaxhighlight/grammar/Lexer.java index 18ac312..abd5396 100644 --- a/Jygments4Sikuli/src/main/java/org/sikuli/syntaxhighlight/grammar/Lexer.java +++ b/Jygments4Sikuli/src/main/java/org/sikuli/syntaxhighlight/grammar/Lexer.java @@ -60,29 +60,41 @@ public class Lexer extends Grammar else { // Try contrib package - String pack = Jygments.class.getPackage().getName() + ".contrib"; - lexer = getByFullName( pack + "." + name ); + String pack = Jygments.class.getPackage().getName(); + lexer = getByFullName( pack, "contrib", name ); if( lexer == null ) { // Try this package pack = Lexer.class.getPackage().getName(); - lexer = getByFullName( pack + "." + name ); + lexer = getByFullName( pack, "", name ); } return lexer; } } + public static Lexer getByFullName( String name ) throws ResolutionException { + return getByFullName("", "", name); + } + @SuppressWarnings("unchecked") - public static Lexer getByFullName( String fullName ) throws ResolutionException + public static Lexer getByFullName( String pack, String sub, String name ) throws ResolutionException { - // Try cache - Lexer lexer = lexers.get( fullName ); + String fullname = name; + if (!pack.isEmpty()) { + if (!sub.isEmpty()) { + fullname = pack + "." + sub + "." + fullname; + } else { + fullname = pack + "." + fullname; + } + } + // Try cache + Lexer lexer = lexers.get( fullname ); if( lexer != null ) return lexer; try { - return (Lexer) Jygments.class.getClassLoader().loadClass( fullName ).newInstance(); + return (Lexer) Jygments.class.getClassLoader().loadClass( fullname ).newInstance(); } catch( InstantiationException x ) { @@ -94,7 +106,7 @@ public class Lexer extends Grammar { } - InputStream stream = Util.getJsonFile(fullName); + InputStream stream = Util.getJsonFile(pack, sub, name, fullname); if( stream != null ) { try @@ -114,7 +126,7 @@ public class Lexer extends Grammar if( lexer != null ) { // Cache it - Lexer existing = lexers.putIfAbsent( fullName, lexer ); + Lexer existing = lexers.putIfAbsent( fullname, lexer ); if( existing != null ) lexer = existing; } diff --git a/Jygments4Sikuli/src/main/java/org/sikuli/syntaxhighlight/style/Style.java b/Jygments4Sikuli/src/main/java/org/sikuli/syntaxhighlight/style/Style.java index 3ad8ce8..6c99bf3 100644 --- a/Jygments4Sikuli/src/main/java/org/sikuli/syntaxhighlight/style/Style.java +++ b/Jygments4Sikuli/src/main/java/org/sikuli/syntaxhighlight/style/Style.java @@ -27,6 +27,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.sikuli.syntaxhighlight.Jygments; import org.sikuli.syntaxhighlight.NestedDef; import org.sikuli.syntaxhighlight.ResolutionException; +import org.sikuli.syntaxhighlight.Util; import org.sikuli.syntaxhighlight.grammar.TokenType; import org.sikuli.syntaxhighlight.style.def.StyleElementDef; @@ -51,23 +52,34 @@ public class Style extends NestedDef<Style> else { // Try contrib package - String pack = Jygments.class.getPackage().getName() + ".contrib"; - name = pack + "." + name; - return getByFullName( name ); + String pack = Jygments.class.getPackage().getName(); + return getByFullName( pack, "contrib", name ); } } + public static Style getByFullName( String name ) throws ResolutionException { + return getByFullName("", "", name); + } + @SuppressWarnings("unchecked") - public static Style getByFullName( String fullName ) throws ResolutionException + public static Style getByFullName( String pack, String sub, String name ) throws ResolutionException { + String fullname = name; + if (!pack.isEmpty()) { + if (!sub.isEmpty()) { + fullname = pack + "." + sub + "." + fullname; + } else { + fullname = pack + "." + fullname; + } + } // Try cache - Style style = styles.get( fullName ); + Style style = styles.get( fullname ); if( style != null ) return style; try { - return (Style) Jygments.class.getClassLoader().loadClass( fullName ).newInstance(); + return (Style) Jygments.class.getClassLoader().loadClass( fullname ).newInstance(); } catch( InstantiationException x ) { @@ -79,7 +91,7 @@ public class Style extends NestedDef<Style> { } - InputStream stream = Jygments.class.getClassLoader().getResourceAsStream( fullName.replace( '.', '/' ) + extJSON ); + InputStream stream = Util.getJsonFile(pack, sub, name, fullname); if( stream != null ) { ObjectMapper objectMapper = new ObjectMapper(); @@ -92,7 +104,7 @@ public class Style extends NestedDef<Style> style.resolve(); // Cache it - Style existing = styles.putIfAbsent( fullName, style ); + Style existing = styles.putIfAbsent( fullname, style ); if( existing != null ) style = existing; diff --git a/Jygments4Sikuli/src/main/resources/jygments-legal/copyright.txt b/Jygments4Sikuli/src/main/resources/jygments-legal/copyright.txt new file mode 100644 index 0000000..a46caea --- /dev/null +++ b/Jygments4Sikuli/src/main/resources/jygments-legal/copyright.txt @@ -0,0 +1,8 @@ + +Jygments is Copyright 2010-2013 Three Crickets LLC: + +http://threecrickets.com/ + +All third-party libraries redistributed with this software remain the property +of their respective copyright owners and are subject to separate license +agreements. diff --git a/Jygments4Sikuli/src/main/resources/jygments-legal/license.txt b/Jygments4Sikuli/src/main/resources/jygments-legal/license.txt new file mode 100644 index 0000000..ec67b93 --- /dev/null +++ b/Jygments4Sikuli/src/main/resources/jygments-legal/license.txt @@ -0,0 +1,25 @@ +Copyright (c) 2010 by the respective authors (see copyright.txt file). +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. + +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 +OWNER 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. -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/sikuli.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

