[richfaces-svn-commits] JBoss Rich Faces SVN: r2183 - in trunk/framework: impl/src/main/java/org/ajax4jsf/javascript and 2 other directories.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Thu Aug 9 14:31:46 EDT 2007


Author: alexsmirnov
Date: 2007-08-09 14:31:46 -0400 (Thu, 09 Aug 2007)
New Revision: 2183

Added:
   trunk/framework/impl/src/main/java/org/ajax4jsf/javascript/JSMin.java
   trunk/framework/impl/src/test/java/org/ajax4jsf/javascript/
   trunk/framework/impl/src/test/java/org/ajax4jsf/javascript/JSMinTest.java
Removed:
   trunk/framework/api/src/main/java/org/ajax4jsf/javascript/JSMin.java
Log:
Fix JSMin bur - error on compression prototype script.

Deleted: trunk/framework/api/src/main/java/org/ajax4jsf/javascript/JSMin.java
===================================================================
--- trunk/framework/api/src/main/java/org/ajax4jsf/javascript/JSMin.java	2007-08-09 17:04:22 UTC (rev 2182)
+++ trunk/framework/api/src/main/java/org/ajax4jsf/javascript/JSMin.java	2007-08-09 18:31:46 UTC (rev 2183)
@@ -1,327 +0,0 @@
-/**
- * License Agreement.
- *
- * Ajax4jsf 1.1 - Natural Ajax for Java Server Faces (JSF)
- *
- * Copyright (C) 2007 Exadel, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1 as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
- */
-
-/*
- * JSMin.java 2006-02-13
- * 
- * Copyright (c) 2006 John Reilly (www.inconspicuous.org)
- * 
- * This work is a translation from C to Java of jsmin.c published by
- * Douglas Crockford.  Permission is hereby granted to use the Java 
- * version under the same conditions as the jsmin.c on which it is
- * based.  
- * 
- * 
- * 
- * 
- * jsmin.c 2003-04-21
- * 
- * Copyright (c) 2002 Douglas Crockford (www.crockford.com)
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * 
- * The Software shall be used for Good, not Evil.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-package org.ajax4jsf.javascript;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PushbackInputStream;
-
-
-
-
-public class JSMin {
-	private static final int EOF = -1;
-
-	private PushbackInputStream in;
-	private OutputStream out;
-
-	private int theA;
-	private int theB;
-	
-	public JSMin(InputStream in, OutputStream out) {
-		this.in = new PushbackInputStream(in);
-		this.out = out;
-	}
-
-	/**
-	 * isAlphanum -- return true if the character is a letter, digit,
-	 * underscore, dollar sign, or non-ASCII character.
-	 */
-	static boolean isAlphanum(int c) {
-		return ( (c >= 'a' && c <= 'z') || 
-				 (c >= '0' && c <= '9') || 
-				 (c >= 'A' && c <= 'Z') || 
-				 c == '_' || 
-				 c == '$' || 
-				 c == '\\' || 
-				 c > 126);
-	}
-
-	/**
-	 * get -- return the next character from stdin. Watch out for lookahead. If
-	 * the character is a control character, translate it to a space or
-	 * linefeed.
-	 */
-	int get() throws IOException {
-		int c = in.read();
-
-		if (c >= ' ' || c == '\n' || c == EOF) {
-			return c;
-		}
-
-		if (c == '\r') {
-			return '\n';
-		}
-		
-		return ' ';
-	}
-
-	
-	
-	/**
-	 * Get the next character without getting it.
-	 */
-	int peek() throws IOException {
-		int lookaheadChar = in.read();
-		in.unread(lookaheadChar);
-		return lookaheadChar;
-	}
-
-	/**
-	 * next -- get the next character, excluding comments. peek() is used to see
-	 * if a '/' is followed by a '/' or '*'.
-	 */
-	int next() throws IOException, UnterminatedCommentException {
-		int c = get();
-		if (c == '/') {
-			switch (peek()) {
-			case '/':
-				for (;;) {
-					c = get();
-					if (c <= '\n') {
-						return c;
-					}
-				}
-
-			case '*':
-				get();
-				for (;;) {
-					switch (get()) {
-					case '*':
-						if (peek() == '/') {
-							get();
-							return ' ';
-						}
-						break;
-					case EOF:
-						throw new UnterminatedCommentException();
-					}
-				}
-
-			default:
-				return c;
-			}
-
-		}
-		return c;
-	}
-
-	/**
-	 * action -- do something! What you do is determined by the argument: 1
-	 * Output A. Copy B to A. Get the next B. 2 Copy B to A. Get the next B.
-	 * (Delete A). 3 Get the next B. (Delete B). action treats a string as a
-	 * single character. Wow! action recognizes a regular expression if it is
-	 * preceded by ( or , or =.
-	 */
-
-	void action(int d) throws IOException, UnterminatedRegExpLiteralException,
-			UnterminatedCommentException, UnterminatedStringLiteralException {
-		switch (d) {
-		case 1:
-			out.write(theA);
-		case 2:
-			theA = theB;
-
-			if (theA == '\'' || theA == '"') {
-				for (;;) {
-					out.write(theA);
-					theA = get();
-					if (theA == theB) {
-						break;
-					}
-					if (theA <= '\n') {
-						throw new UnterminatedStringLiteralException();
-					}
-					if (theA == '\\') {
-						out.write(theA);
-						theA = get();
-					}
-				}
-			}
-			
-		case 3:
-			theB = next();
-			if (theB == '/' && (theA == '(' || theA == ',' || theA == '=')) {
-				out.write(theA);
-				out.write(theB);
-				for (;;) {
-					theA = get();
-					if (theA == '/') {
-						break;
-					} else if (theA == '\\') {
-						out.write(theA);
-						theA = get();
-					} else if (theA <= '\n') {
-						throw new UnterminatedRegExpLiteralException();
-					}
-					out.write(theA);
-				}
-				theB = next();
-			}
-		}
-	}
-
-	/**
-	 * jsmin -- Copy the input to the output, deleting the characters which are
-	 * insignificant to JavaScript. Comments will be removed. Tabs will be
-	 * replaced with spaces. Carriage returns will be replaced with linefeeds.
-	 * Most spaces and linefeeds will be removed.
-	 */
-	public void jsmin() throws IOException, UnterminatedRegExpLiteralException, UnterminatedCommentException, UnterminatedStringLiteralException{
-		theA = '\n';
-		action(3);
-		while (theA != EOF) {
-			switch (theA) {
-			case ' ':
-				if (isAlphanum(theB)) {
-					action(1);
-				} else {
-					action(2);
-				}
-				break;
-			case '\n':
-				switch (theB) {
-				case '{':
-				case '[':
-				case '(':
-				case '+':
-				case '-':
-					action(1);
-					break;
-				case ' ':
-					action(3);
-					break;
-				default:
-					if (isAlphanum(theB)) {
-						action(1);
-					} else {
-						action(2);
-					}
-				}
-				break;
-			default:
-				switch (theB) {
-				case ' ':
-					if (isAlphanum(theA)) {
-						action(1);
-						break;
-					}
-					action(3);
-					break;
-				case '\n':
-					switch (theA) {
-					case '}':
-					case ']':
-					case ')':
-					case '+':
-					case '-':
-					case '"':
-					case '\'':
-						action(1);
-						break;
-					default:
-						if (isAlphanum(theA)) {
-							action(1);
-						} else {
-							action(3);
-						}
-					}
-					break;
-				default:
-					action(1);
-					break;
-				}
-			}
-		}
-		out.flush();
-	}
-
-	class UnterminatedCommentException extends Exception {
-	}
-
-	class UnterminatedStringLiteralException extends Exception {
-	}
-
-	class UnterminatedRegExpLiteralException extends Exception {
-	}
-
-	public static void main(String arg[]) {
-		try {
-			JSMin jsmin = new JSMin(new FileInputStream(arg[0]), System.out);
-			jsmin.jsmin();
-		} catch (FileNotFoundException e) {
-			e.printStackTrace();
-		} catch (ArrayIndexOutOfBoundsException e) {
-			e.printStackTrace();			
-		} catch (IOException e) {
-			e.printStackTrace();
-		} catch (UnterminatedRegExpLiteralException e) {
-			e.printStackTrace();
-		} catch (UnterminatedCommentException e) {
-			e.printStackTrace();
-		} catch (UnterminatedStringLiteralException e) {
-			e.printStackTrace();
-		}
-	}
-
-
-
-}

Copied: trunk/framework/impl/src/main/java/org/ajax4jsf/javascript/JSMin.java (from rev 2182, trunk/framework/api/src/main/java/org/ajax4jsf/javascript/JSMin.java)
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/javascript/JSMin.java	                        (rev 0)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/javascript/JSMin.java	2007-08-09 18:31:46 UTC (rev 2183)
@@ -0,0 +1,350 @@
+/**
+ * License Agreement.
+ *
+ * Ajax4jsf 1.1 - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+/*
+ * JSMin.java 2006-02-13
+ * 
+ * Copyright (c) 2006 John Reilly (www.inconspicuous.org)
+ * 
+ * This work is a translation from C to Java of jsmin.c published by
+ * Douglas Crockford.  Permission is hereby granted to use the Java 
+ * version under the same conditions as the jsmin.c on which it is
+ * based.  
+ * 
+ * 
+ * 
+ * 
+ * jsmin.c 2003-04-21
+ * 
+ * Copyright (c) 2002 Douglas Crockford (www.crockford.com)
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * The Software shall be used for Good, not Evil.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+package org.ajax4jsf.javascript;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PushbackInputStream;
+
+
+
+
+public class JSMin {
+	private static final int EOF = -1;
+
+	private PushbackInputStream in;
+	private OutputStream out;
+
+	private int theA;
+	private int theB;
+	
+	private int line;
+	
+	private int column;
+	
+	public JSMin(InputStream in, OutputStream out) {
+		this.in = new PushbackInputStream(in);
+		this.out = out;
+		this.line = 0;
+		this.column = 0;
+	}
+
+	/**
+	 * isAlphanum -- return true if the character is a letter, digit,
+	 * underscore, dollar sign, or non-ASCII character.
+	 */
+	static boolean isAlphanum(int c) {
+		return ( (c >= 'a' && c <= 'z') || 
+				 (c >= '0' && c <= '9') || 
+				 (c >= 'A' && c <= 'Z') || 
+				 c == '_' || 
+				 c == '$' || 
+				 c == '\\' || 
+				 c > 126);
+	}
+
+	/**
+	 * get -- return the next character from stdin. Watch out for lookahead. If
+	 * the character is a control character, translate it to a space or
+	 * linefeed.
+	 */
+	int get() throws IOException {
+		int c = in.read();
+		
+		if(c == '\n'){
+			line++;
+			column = 0;
+		} else {
+			column++;
+		}
+
+		if (c >= ' ' || c == '\n' || c == EOF) {
+			return c;
+		}
+
+		if (c == '\r') {
+			column = 0;
+			return '\n';
+		}
+		
+		return ' ';
+	}
+
+	
+	
+	/**
+	 * Get the next character without getting it.
+	 */
+	int peek() throws IOException {
+		int lookaheadChar = in.read();
+		in.unread(lookaheadChar);
+		return lookaheadChar;
+	}
+
+	/**
+	 * next -- get the next character, excluding comments. peek() is used to see
+	 * if a '/' is followed by a '/' or '*'.
+	 */
+	int next() throws IOException, UnterminatedCommentException {
+		int c = get();
+		if (c == '/') {
+			switch (peek()) {
+			case '/':
+				for (;;) {
+					c = get();
+					if (c <= '\n') {
+						return c;
+					}
+				}
+
+			case '*':
+				get();
+				for (;;) {
+					switch (get()) {
+					case '*':
+						if (peek() == '/') {
+							get();
+							return ' ';
+						}
+						break;
+					case EOF:
+						throw new UnterminatedCommentException(line,column);
+					}
+				}
+
+			default:
+				return c;
+			}
+
+		}
+		return c;
+	}
+
+	/**
+	 * action -- do something! What you do is determined by the argument: 1
+	 * Output A. Copy B to A. Get the next B. 2 Copy B to A. Get the next B.
+	 * (Delete A). 3 Get the next B. (Delete B). action treats a string as a
+	 * single character. Wow! action recognizes a regular expression if it is
+	 * preceded by ( or , or =.
+	 */
+
+	void action(int d) throws IOException, UnterminatedRegExpLiteralException,
+			UnterminatedCommentException, UnterminatedStringLiteralException {
+		switch (d) {
+		case 1:
+			out.write(theA);
+		case 2:
+			theA = theB;
+
+			if (theA == '\'' || theA == '"') {
+				for (;;) {
+					out.write(theA);
+					theA = get();
+					if (theA == theB) {
+						break;
+					}
+					if (theA <= '\n') {
+						throw new UnterminatedStringLiteralException(line,column);
+					}
+					if (theA == '\\') {
+						out.write(theA);
+						theA = get();
+					}
+				}
+			}
+			
+		case 3:
+			theB = next();
+			if (theB == '/' && (theA == '(' || theA == ',' || theA == '='|| theA == ':')) {
+				out.write(theA);
+				out.write(theB);
+				for (;;) {
+					theA = get();
+					if (theA == '/') {
+						break;
+					} else if (theA == '\\') {
+						out.write(theA);
+						theA = get();
+					} else if (theA <= '\n') {
+						throw new UnterminatedRegExpLiteralException(line,column);
+					}
+					out.write(theA);
+				}
+				theB = next();
+			}
+		}
+	}
+
+	/**
+	 * jsmin -- Copy the input to the output, deleting the characters which are
+	 * insignificant to JavaScript. Comments will be removed. Tabs will be
+	 * replaced with spaces. Carriage returns will be replaced with linefeeds.
+	 * Most spaces and linefeeds will be removed.
+	 */
+	public void jsmin() throws IOException, UnterminatedRegExpLiteralException, UnterminatedCommentException, UnterminatedStringLiteralException{
+		theA = '\n';
+		action(3);
+		while (theA != EOF) {
+			switch (theA) {
+			case ' ':
+				if (isAlphanum(theB)) {
+					action(1);
+				} else {
+					action(2);
+				}
+				break;
+			case '\n':
+				switch (theB) {
+				case '{':
+				case '[':
+				case '(':
+				case '+':
+				case '-':
+					action(1);
+					break;
+				case ' ':
+					action(3);
+					break;
+				default:
+					if (isAlphanum(theB)) {
+						action(1);
+					} else {
+						action(2);
+					}
+				}
+				break;
+			default:
+				switch (theB) {
+				case ' ':
+					if (isAlphanum(theA)) {
+						action(1);
+						break;
+					}
+					action(3);
+					break;
+				case '\n':
+					switch (theA) {
+					case '}':
+					case ']':
+					case ')':
+					case '+':
+					case '-':
+					case '"':
+					case '\'':
+						action(1);
+						break;
+					default:
+						if (isAlphanum(theA)) {
+							action(1);
+						} else {
+							action(3);
+						}
+					}
+					break;
+				default:
+					action(1);
+					break;
+				}
+			}
+		}
+		out.flush();
+	}
+
+	static class UnterminatedCommentException extends Exception {
+		public UnterminatedCommentException(int line,int column) {
+			super("Unterminated comment at line "+line+" and column "+column);
+		}
+	}
+
+	static class UnterminatedStringLiteralException extends Exception {
+		public UnterminatedStringLiteralException(int line,int column) {
+			super("Unterminated string literal at line "+line+" and column "+column);
+		}
+	}
+
+	static class UnterminatedRegExpLiteralException extends Exception {
+		public UnterminatedRegExpLiteralException(int line,int column) {
+			super("Unterminated regular expression at line "+line+" and column "+column);
+		}
+	}
+
+	public static void main(String arg[]) {
+		try {
+			JSMin jsmin = new JSMin(new FileInputStream(arg[0]), System.out);
+			jsmin.jsmin();
+		} catch (FileNotFoundException e) {
+			e.printStackTrace();
+		} catch (ArrayIndexOutOfBoundsException e) {
+			e.printStackTrace();			
+		} catch (IOException e) {
+			e.printStackTrace();
+		} catch (UnterminatedRegExpLiteralException e) {
+			e.printStackTrace();
+		} catch (UnterminatedCommentException e) {
+			e.printStackTrace();
+		} catch (UnterminatedStringLiteralException e) {
+			e.printStackTrace();
+		}
+	}
+
+
+
+}

Added: trunk/framework/impl/src/test/java/org/ajax4jsf/javascript/JSMinTest.java
===================================================================
--- trunk/framework/impl/src/test/java/org/ajax4jsf/javascript/JSMinTest.java	                        (rev 0)
+++ trunk/framework/impl/src/test/java/org/ajax4jsf/javascript/JSMinTest.java	2007-08-09 18:31:46 UTC (rev 2183)
@@ -0,0 +1,71 @@
+/**
+ * 
+ */
+package org.ajax4jsf.javascript;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+
+import org.ajax4jsf.javascript.JSMin.UnterminatedCommentException;
+import org.ajax4jsf.javascript.JSMin.UnterminatedRegExpLiteralException;
+import org.ajax4jsf.javascript.JSMin.UnterminatedStringLiteralException;
+
+import junit.framework.TestCase;
+
+/**
+ * @author asmirnov
+ *
+ */
+public class JSMinTest extends TestCase {
+
+	/**
+	 * @param name
+	 */
+	public JSMinTest(String name) {
+		super(name);
+	}
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+	}
+
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	/**
+	 * Test method for {@link org.ajax4jsf.javascript.JSMin#jsmin()}.
+	 * @throws UnterminatedStringLiteralException 
+	 * @throws UnterminatedCommentException 
+	 * @throws UnterminatedRegExpLiteralException 
+	 * @throws IOException 
+	 */
+	public void testJsmin() throws IOException, UnterminatedRegExpLiteralException, UnterminatedCommentException, UnterminatedStringLiteralException {
+		String script ="  patterns: {\n" + 
+				"    // combinators must be listed first\n" + 
+				"    // (and descendant needs to be last combinator)\n" + 
+				"    laterSibling: /^\\s*~\\s*/,\n" + 
+				"    child:        /^\\s*>\\s*/,\n" + 
+				"    adjacent:     /^\\s*\\+\\s*/,\n" + 
+				"    descendant:   /^\\s/,\n" + 
+				"\n" + 
+				"    // selectors follow\n" + 
+				"    tagName:      /^\\s*(\\*|[\\w\\-]+)(\\b|$)?/,\n" + 
+				"    id:           /^#([\\w\\-\\*]+)(\\b|$)/,\n" + 
+				"    className:    /^\\.([\\w\\-\\*]+)(\\b|$)/,\n" + 
+				"    pseudo:       /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\\((.*?)\\))?(\\b|$|\\s|(?=:))/,\n" + 
+				"    attrPresence: /^\\[([\\w]+)\\]/,\n" + 
+				"    attr:         /\\[((?:[\\w-]*:)?[\\w-]+)\\s*(?:([!^$*~|]?=)\\s*(([\'\"])([^\\]]*?)\\4|([^\'\"][^\\]]*?)))?\\]/\n" + 
+				"  }";
+		ByteArrayInputStream in = new ByteArrayInputStream(script.getBytes());
+		JSMin jsmin = new JSMin(in,System.out);
+		jsmin.jsmin();
+	}
+
+}


Property changes on: trunk/framework/impl/src/test/java/org/ajax4jsf/javascript/JSMinTest.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:keywords
   + Date Revision Author




More information about the richfaces-svn-commits mailing list