From ed76e55b527a5264a428b648c83feb87d2eeee80 Mon Sep 17 00:00:00 2001 From: Adeel Ejaz Date: Wed, 16 Mar 2011 23:45:40 +0000 Subject: [PATCH] Alphabetically arrange properties in the declaration block --- .../yui/compressor/CssCompressor.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/com/yahoo/platform/yui/compressor/CssCompressor.java b/src/com/yahoo/platform/yui/compressor/CssCompressor.java index 170d028a..7d3698a5 100644 --- a/src/com/yahoo/platform/yui/compressor/CssCompressor.java +++ b/src/com/yahoo/platform/yui/compressor/CssCompressor.java @@ -16,6 +16,7 @@ import java.util.regex.Pattern; import java.util.regex.Matcher; import java.util.ArrayList; +import java.util.Arrays; public class CssCompressor { @@ -294,7 +295,36 @@ public void compress(Writer out, int linebreakpos) for(i = 0, max = preservedTokens.size(); i < max; i++) { css = css.replace("___YUICSSMIN_PRESERVED_TOKEN_" + i + "___", preservedTokens.get(i).toString()); } + + // Alphabetically arrange properties in declaration block + sb = new StringBuffer(css); + startIndex = 0; + while ((startIndex = sb.indexOf("{", startIndex)) >= 0) { + endIndex = sb.indexOf("}", startIndex + 1); + if (endIndex < 0) { + endIndex = totallen; + } + token = sb.substring(startIndex + 1, endIndex); + + // Split string into an array and sort + String[] arr = token.split(";"); + Arrays.sort(arr); + + // And glue it back + token = ""; + for(i = 0, max = arr.length; i < max; i++) { + if (token != "") { + token += ";"; + } + token += arr[i]; + } + + sb.replace(startIndex + 1, endIndex, token); + startIndex++; + } + css = sb.toString(); + // Trim the final string (for any leading or trailing white spaces) css = css.trim();