Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.jboss.errai.ui.rebind.less;
  
  import  com.google.gwt.core.ext.TreeLogger;
  import  com.google.gwt.core.ext.UnableToCompleteException;
  import  com.google.gwt.dev.util.DefaultTextOutput;
  import  com.google.gwt.dev.util.TextOutput;
  import  com.google.gwt.resources.css.*;
  import  com.google.gwt.resources.css.ast.Context;
  import  com.google.gwt.resources.css.ast.CssProperty;
 import  com.google.gwt.resources.css.ast.CssRule;
 import  com.google.gwt.resources.css.ast.CssStylesheet;
 
 import java.io.File;
 import java.net.URL;
 import java.util.Map;

Parses the css stylesheet and performs optimizations on it remove identical selectors and merge identical rules.

Author(s):
edewit@redhat.com
 
 public class StylesheetOptimizer {
 
   private final CssStylesheet stylesheet;
 
   public StylesheetOptimizer(File stylesheetthrows UnableToCompleteException {
     this. = parse(stylesheet);
     minify();
   }
 
   private CssStylesheet parse(File compiledthrows UnableToCompleteException {
     final URL url;
     try {
       url = compiled.toURI().toURL();
     } catch (MalformedURLException e) {
       throw new UnableToCompleteException();
     }
 
     return GenerateCssAst.exec(TreeLogger.NULL, url);
   }
 
   private void minify() {
     (new SplitRulesVisitor()).accept();
     (new MergeIdenticalSelectorsVisitor()).accept();
     (new MergeRulesByContentVisitor()).accept();
   }
 
   protected CssStylesheet getStylesheet() {
     return ;
   }
 
   public Map<StringStringgetConvertedSelectors() {
   }
 
   public String output() {
     final DefaultTextOutput defaultTextOutput = new DefaultTextOutput(false);
     new CssGeneration(defaultTextOutput).accept();
 
     return defaultTextOutput.toString();
   }

  
The CssGenerationVisitor will create a static css template and a list of substitutions this one will output the css as is.
 
   private static class CssGeneration extends CssGenerationVisitor {
     private final TextOutput out;
     private boolean needsOpenBrace;
 
     public CssGeneration(TextOutput out) {
       super(out);
       this. = out;
     }
 
     @Override
     public boolean visit(CssRule x, Context ctx) {
       if (x.getProperties().isEmpty()) {
         return false;
       }
 
        = true;
       return super.visit(xctx);
     }
 
     @Override
     public boolean visit(CssProperty x, Context ctx) {
       if () {
         openBrace();
          = false;
       }
 
       .print(x.getName());
 
       colon();
       .print(x.getValues().toCss());
 
      if (x.isImportant()) {
        important();
      }
      semi();
      return true;
    }
    private void colon() {
      spaceOpt();
      .print(':');
      spaceOpt();
    }
    private void important() {
      .print(" !important");
    }
    private void openBrace() {
      spaceOpt();
      .print('{');
      .newlineOpt();
      .indentIn();
    }
    private void semi() {
      .print(';');
      .newlineOpt();
    }
    private void spaceOpt() {
      .printOpt(' ');
    }
  }
New to GrepCode? Check out our FAQ X