1   package org.daisy.pipeline.css;
2   
3   import java.io.IOException;
4   import java.util.Collection;
5   import java.util.Collections;
6   
7   import javax.xml.transform.Source;
8   import javax.xml.transform.URIResolver;
9   
10  import org.daisy.pipeline.css.Medium;
11  import org.daisy.pipeline.css.sass.impl.SassAnalyzer;
12  import org.daisy.pipeline.datatypes.DatatypeRegistry;
13  import org.daisy.pipeline.datatypes.DatatypeService;
14  
15  /**
16   * Analyzes a style sheet and extracts information about global variables.
17   */
18  public class CssAnalyzer {
19  
20  	private final org.daisy.pipeline.css.sass.impl.SassAnalyzer analyzer;
21  
22  	public CssAnalyzer(Medium medium, URIResolver uriResolver, DatatypeRegistry datatypes) {
23  	    this(Collections.singleton(medium), uriResolver, datatypes);
24  	}
25  
26  	public CssAnalyzer(Collection<Medium> media, URIResolver uriResolver, DatatypeRegistry datatypes) {
27  		analyzer = new SassAnalyzer(media, uriResolver, datatypes);
28  	}
29  
30  	/**
31  	 * Get the variables declared within the given style sheets and source document.
32  	 *
33  	 * @param userAndUserAgentStylesheets {@code Source} objects must have absolute hierarchical URI as
34  	 *                                    system ID
35  	 * @param sourceDocument {@code Source} object must have absolute hierarchical URI as system ID,
36  	 *                       or object may be {@code null}.
37  	 */
38  	public Result analyze(Iterable<Source> userAndUserAgentStylesheets, Source sourceDocument) throws IOException {
39  		return new Result(analyzer.getVariableDeclarations(userAndUserAgentStylesheets, sourceDocument));
40  	}
41  
42  	public interface SassVariable {
43  		public String getName();
44  		public String getNiceName();
45  		public String getDescription();
46  		public String getValue();
47  		public boolean isDefault();
48  		public DatatypeService getType();
49  	}
50  
51  	public static class Result {
52  
53  		private final Collection<SassVariable> variables;
54  
55  		private Result(Collection<? extends SassVariable> variables) {
56  			this.variables = Collections.unmodifiableCollection(variables);
57  		}
58  
59  		public Collection<SassVariable> getVariables() {
60  			return variables;
61  		}
62  	}
63  }