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.*;
  import  org.lesscss.LessCompiler;
  import  org.lesscss.LessException;
  
  import java.io.File;
 import java.net.URL;
 
 import static java.util.regex.Pattern.MULTILINE;

Converts a less resource to a css file using the java LessCompiler wrapper. And adds deferred binding properties to the top of the sheet. So that you can use user.agent in less be sure to change '.' into '_' because variables with a '.' in the name are not valid in less.

Author(s):
edewit@redhat.com
 
 public class LessConverter {
   private static final Pattern IMPORT_PATTERN = Pattern.compile("^(?!\\s*//\\s*)@import\\s+(url\\()?\\s*(\"|')(.+)\\s*(\"|')(\\))?\\s*;.*$");
   private static final Pattern LESS_VAR = Pattern.compile("@(\\w+)");
 
   private final TreeLogger logger;
   private final PropertyOracle oracle;
 
   public LessConverter(TreeLogger logger, PropertyOracle oracle) {
     this. = logger;
     this. = oracle;
   }
 
   public File convert(URL resourcethrows IOException {
     LessCompiler lessCompiler = new LessCompiler();
     try {
       String lessFile = parseLess(resource);
       final String css = lessCompiler.compile(lessFile);
       return createCssFile(css);
     } catch (LessException e) {
       throw new IOException("specified less stylesheet could not be compiled to css"e);
     }
   }
 
   private File createCssFile(String cssthrows IOException {
     final File compiled = File.createTempFile("compiled"".css");
     PrintWriter writer = new PrintWriter(compiled);
     writer.print(css);
     writer.close();
     return compiled;
   }
 
   private String parseLess(URL resourcethrows IOException {
     String lessFile = resourceToString(resource);
     lessFile = resolveImports(resourcelessFile);
     lessFile = replaceVariables(lessFile);
     return lessFile;
   }
 
   private String resourceToString(URL resourcethrows IOException {
     Scanner scanner = new Scanner(resource.openStream());
     StringBuilder lessFile = new StringBuilder();
     while (scanner.hasNextLine()) {
       lessFile.append(scanner.nextLine()).append('\n');
     }
     scanner.close();
     return lessFile.toString();
   }
 
   private String replaceVariables(String lessFile) {
     final Matcher matcher = .matcher(lessFile);
     while (matcher.find()) {
       for (int i = 1; i < matcher.groupCount() + 1; i++) {
         final String lessVariable = matcher.group(i);
         final String value = evaluate(lessVariable.replace('_''.'));
         if (value != null) {
           lessFile = "@" + lessVariable + ": \"" + value + "\";\n" + lessFile;
         }
       }
     }
     return lessFile;
   }
 
   private String evaluate(String lessVariable) {
     try {
       SelectionProperty selProp = .getSelectionProperty(lessVariable);
       return selProp.getCurrentValue();
     } catch (BadPropertyValueException e) {
       try {
         ConfigurationProperty confProp = .getConfigurationProperty(lessVariable);
         return confProp.getValues().get(0);
       } catch (BadPropertyValueException e1) {
         return null;
       }
     }
   }
  private String resolveImports(URL baseString contentthrows IOException {
    Matcher importMatcher = .matcher(content);
    while (importMatcher.find()) {
      String importedFile = importMatcher.group(3);
      importedFile = importedFile.matches(".*\\.(le?|c)ss$") ? importedFile : importedFile + ".less";
      boolean css = importedFile.matches(".*css$");
      if (!css) {
        String importedLess = parseLess(new URL(baseimportedFile));
        // update content *and* matcher
        content = content.substring(0, importMatcher.start()) + importedLess + content.substring(importMatcher.end());
        importMatcher = .matcher(content);
      }
    }
    return content;
  }
New to GrepCode? Check out our FAQ X