use of com.helger.css.writer.CSSWriterSettings in project ph-css by phax.
the class CSSReader30FuncTest method testReadExpressions.
@Test
public void testReadExpressions() {
final ECSSVersion eVersion = ECSSVersion.CSS30;
final CSSWriterSettings aCSSWS = new CSSWriterSettings(eVersion, false);
final Charset aCharset = StandardCharsets.UTF_8;
final File aFile = new File("src/test/resources/testfiles/css30/good/artificial/test-expression.css");
final CascadingStyleSheet aCSS = CSSReader.readFromFile(aFile, aCharset, eVersion);
assertNotNull(aCSS);
assertEquals(1, aCSS.getRuleCount());
assertEquals(1, aCSS.getStyleRuleCount());
final CSSStyleRule aSR = aCSS.getStyleRuleAtIndex(0);
assertEquals("div", aSR.getSelectorsAsCSSString(aCSSWS, 0));
assertEquals(23, aSR.getDeclarationCount());
int i = 0;
for (final CSSDeclaration aDecl : aSR.getAllDeclarations()) {
final String sExpectedName = Character.toString((char) ('a' + i));
assertEquals(sExpectedName, aDecl.getProperty());
++i;
}
CSSDeclaration aDecl;
ICSSExpressionMember aMember;
// a: -5
aDecl = aSR.getDeclarationOfPropertyName("a");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermSimple);
assertEquals("-5", aMember.getAsCSSString(aCSSWS));
// b: +5
aDecl = aSR.getDeclarationOfPropertyName("b");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermSimple);
assertEquals("+5", aMember.getAsCSSString(aCSSWS));
// c: 5
aDecl = aSR.getDeclarationOfPropertyName("c");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermSimple);
assertEquals("5", aMember.getAsCSSString(aCSSWS));
// d: -5.12
aDecl = aSR.getDeclarationOfPropertyName("d");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermSimple);
assertEquals("-5.12", aMember.getAsCSSString(aCSSWS));
// e: +5.12
aDecl = aSR.getDeclarationOfPropertyName("e");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermSimple);
assertEquals("+5.12", aMember.getAsCSSString(aCSSWS));
// f: 5.12
aDecl = aSR.getDeclarationOfPropertyName("f");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermSimple);
assertEquals("5.12", aMember.getAsCSSString(aCSSWS));
// g: -5.12%
aDecl = aSR.getDeclarationOfPropertyName("g");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermSimple);
assertEquals("-5.12%", aMember.getAsCSSString(aCSSWS));
// h: +5.12%
aDecl = aSR.getDeclarationOfPropertyName("h");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermSimple);
assertEquals("+5.12%", aMember.getAsCSSString(aCSSWS));
// i: 5.12%
aDecl = aSR.getDeclarationOfPropertyName("i");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermSimple);
assertEquals("5.12%", aMember.getAsCSSString(aCSSWS));
// j: -5px
aDecl = aSR.getDeclarationOfPropertyName("j");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermSimple);
assertEquals("-5px", aMember.getAsCSSString(aCSSWS));
// k: +5px
aDecl = aSR.getDeclarationOfPropertyName("k");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermSimple);
assertEquals("+5px", aMember.getAsCSSString(aCSSWS));
// l: 5px
aDecl = aSR.getDeclarationOfPropertyName("l");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermSimple);
assertEquals("5px", aMember.getAsCSSString(aCSSWS));
// m: 'string1'
aDecl = aSR.getDeclarationOfPropertyName("m");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermSimple);
assertEquals("'string1'", aMember.getAsCSSString(aCSSWS));
// n: "string2"
aDecl = aSR.getDeclarationOfPropertyName("n");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermSimple);
assertEquals("\"string2\"", aMember.getAsCSSString(aCSSWS));
// o: abc
aDecl = aSR.getDeclarationOfPropertyName("o");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermSimple);
assertEquals("abc", aMember.getAsCSSString(aCSSWS));
// p: from
aDecl = aSR.getDeclarationOfPropertyName("p");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermSimple);
assertEquals("from", aMember.getAsCSSString(aCSSWS));
// q: to
aDecl = aSR.getDeclarationOfPropertyName("q");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermSimple);
assertEquals("to", aMember.getAsCSSString(aCSSWS));
// r: url(a.gif)
aDecl = aSR.getDeclarationOfPropertyName("r");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermURI);
assertEquals("url(a.gif)", aMember.getAsCSSString(aCSSWS));
// s: #123
aDecl = aSR.getDeclarationOfPropertyName("s");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermSimple);
assertEquals("#123", aMember.getAsCSSString(aCSSWS));
// t: function(5,6,abc)
aDecl = aSR.getDeclarationOfPropertyName("t");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberFunction);
assertEquals("function", ((CSSExpressionMemberFunction) aMember).getFunctionName());
// 3 parameters and 2 commas
assertEquals(5, ((CSSExpressionMemberFunction) aMember).getExpression().getMemberCount());
assertEquals("function(5,6,abc)", aMember.getAsCSSString(aCSSWS));
// u: calc(4 + 5)
aDecl = aSR.getDeclarationOfPropertyName("u");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberMath);
// 2 values and 1 operator
assertEquals(3, ((CSSExpressionMemberMath) aMember).getMemberCount());
assertEquals("calc(4 + 5)", aMember.getAsCSSString(aCSSWS));
// v: inherit
aDecl = aSR.getDeclarationOfPropertyName("v");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermSimple);
assertEquals("inherit", aMember.getAsCSSString(aCSSWS));
// w: u+1234
aDecl = aSR.getDeclarationOfPropertyName("w");
assertNotNull(aDecl);
assertEquals(1, aDecl.getExpression().getMemberCount());
aMember = aDecl.getExpression().getMemberAtIndex(0);
assertTrue(aMember instanceof CSSExpressionMemberTermSimple);
assertEquals("u+1234", aMember.getAsCSSString(aCSSWS));
// Write result
final String sCSS = new CSSWriter(aCSSWS).getCSSAsString(aCSS);
assertNotNull(sCSS);
if (false)
m_aLogger.info(sCSS);
}
use of com.helger.css.writer.CSSWriterSettings in project ph-css by phax.
the class CSSCompressMojo method _compressCSSFile.
private void _compressCSSFile(@Nonnull final File aChild) {
// Compress the file only if the compressed file is older than the original
// file. Note: lastModified on a non-existing file returns 0L
final File aCompressed = new File(FilenameHelper.getWithoutExtension(aChild.getAbsolutePath()) + targetFileExtension);
if (aCompressed.lastModified() < aChild.lastModified() || forceCompress) {
if (verbose)
getLog().info("Start compressing CSS file " + _getRelativePath(aChild));
else
getLog().debug("Start compressing CSS file " + _getRelativePath(aChild));
final ICSSParseExceptionCallback aExHdl = (@Nonnull final ParseException ex) -> getLog().error("Failed to parse CSS file " + _getRelativePath(aChild), ex);
final Charset aFallbackCharset = CharsetHelper.getCharsetFromName(sourceEncoding);
final CSSReaderSettings aSettings = new CSSReaderSettings().setCSSVersion(ECSSVersion.CSS30).setFallbackCharset(aFallbackCharset).setCustomExceptionHandler(aExHdl).setBrowserCompliantMode(browserCompliantMode);
final CascadingStyleSheet aCSS = CSSReader.readFromFile(aChild, aSettings);
if (aCSS != null) {
// We read it!
final FileSystemResource aDestFile = new FileSystemResource(aCompressed);
try {
final CSSWriterSettings aWriterSettings = new CSSWriterSettings(ECSSVersion.CSS30);
aWriterSettings.setOptimizedOutput(true);
aWriterSettings.setRemoveUnnecessaryCode(removeUnnecessaryCode);
aWriterSettings.setNewLineMode(newLineMode);
aWriterSettings.setQuoteURLs(quoteURLs);
aWriterSettings.setWriteNamespaceRules(writeNamespaceRules);
aWriterSettings.setWriteFontFaceRules(writeFontFaceRules);
aWriterSettings.setWriteKeyframesRules(writeKeyframesRules);
aWriterSettings.setWriteMediaRules(writeMediaRules);
aWriterSettings.setWritePageRules(writePageRules);
aWriterSettings.setWriteViewportRules(writeViewportRules);
aWriterSettings.setWriteSupportsRules(writeSupportsRules);
aWriterSettings.setWriteUnknownRules(writeUnknownRules);
final Charset aTargetCharset = CharsetHelper.getCharsetFromName(targetEncoding);
new CSSWriter(aWriterSettings).writeCSS(aCSS, aDestFile.getWriter(aTargetCharset, EAppend.TRUNCATE));
} catch (final IOException ex) {
getLog().error("Failed to write compressed CSS file '" + aCompressed.toString() + "' to disk", ex);
}
}
} else {
if (verbose)
getLog().info("Ignoring already compressed CSS file " + _getRelativePath(aChild));
else
getLog().debug("Ignoring already compressed CSS file " + _getRelativePath(aChild));
}
}
use of com.helger.css.writer.CSSWriterSettings in project ph-css by phax.
the class CSSShortHandDescriptor method getSplitIntoPieces.
@Nonnull
@ReturnsMutableCopy
public ICommonsList<CSSDeclaration> getSplitIntoPieces(@Nonnull final CSSDeclaration aDeclaration) {
ValueEnforcer.notNull(aDeclaration, "Declaration");
// Check that declaration matches this property
if (!aDeclaration.hasProperty(m_eProperty))
throw new IllegalArgumentException("Cannot split a '" + aDeclaration.getProperty() + "' as a '" + m_eProperty.getName() + "'");
// global
final int nSubProperties = m_aSubProperties.size();
final ICommonsList<CSSDeclaration> ret = new CommonsArrayList<>();
final ICommonsList<ICSSExpressionMember> aExpressionMembers = aDeclaration.getExpression().getAllMembers();
// Modification for margin and padding
modifyExpressionMembers(aExpressionMembers);
final int nExpressionMembers = aExpressionMembers.size();
final CSSWriterSettings aCWS = new CSSWriterSettings(ECSSVersion.CSS30, false);
final boolean[] aHandledSubProperties = new boolean[nSubProperties];
// For all expression members
for (int nExprMemberIndex = 0; nExprMemberIndex < nExpressionMembers; ++nExprMemberIndex) {
final ICSSExpressionMember aMember = aExpressionMembers.get(nExprMemberIndex);
// For all unhandled sub-properties
for (int nSubPropIndex = 0; nSubPropIndex < nSubProperties; ++nSubPropIndex) if (!aHandledSubProperties[nSubPropIndex]) {
final CSSPropertyWithDefaultValue aSubProp = m_aSubProperties.get(nSubPropIndex);
final ICSSProperty aProperty = aSubProp.getProperty();
final int nMinArgs = aProperty.getMinimumArgumentCount();
// Always use minimum number of arguments
if (nExprMemberIndex + nMinArgs - 1 < nExpressionMembers) {
// Build sum of all members
final StringBuilder aSB = new StringBuilder();
for (int k = 0; k < nMinArgs; ++k) {
final String sValue = aMember.getAsCSSString(aCWS);
if (aSB.length() > 0)
aSB.append(' ');
aSB.append(sValue);
}
if (aProperty.isValidValue(aSB.toString())) {
// We found a match
final CSSExpression aExpr = new CSSExpression();
for (int k = 0; k < nMinArgs; ++k) aExpr.addMember(aExpressionMembers.get(nExprMemberIndex + k));
ret.add(new CSSDeclaration(aSubProp.getProperty().getPropertyName(), aExpr));
nExprMemberIndex += nMinArgs - 1;
// Remember as handled
aHandledSubProperties[nSubPropIndex] = true;
// Next expression member
break;
}
}
}
}
// Assign all default values that are not present
for (int nSubPropIndex = 0; nSubPropIndex < nSubProperties; ++nSubPropIndex) if (!aHandledSubProperties[nSubPropIndex]) {
final CSSPropertyWithDefaultValue aSubProp = m_aSubProperties.get(nSubPropIndex);
// assign default value
final CSSExpression aExpr = new CSSExpression();
aExpr.addMember(new CSSExpressionMemberTermSimple(aSubProp.getDefaultValue()));
ret.add(new CSSDeclaration(aSubProp.getProperty().getPropertyName(), aExpr));
}
return ret;
}
use of com.helger.css.writer.CSSWriterSettings in project ph-css by phax.
the class CSSHSLATest method testBasic.
@Test
public void testBasic() {
final CSSWriterSettings aSettings = new CSSWriterSettings(ECSSVersion.CSS30, false);
final CSSHSLA aColor = new CSSHSLA(1, 2, 3, 0.5f);
assertEquals("hsla(1,2%,3%,0.5)", aColor.getAsCSSString(aSettings));
CommonsTestHelper.testDefaultImplementationWithEqualContentObject(aColor, new CSSHSLA(aColor));
CommonsTestHelper.testDefaultImplementationWithEqualContentObject(aColor, new CSSHSLA(1, 2, 3, 0.5f));
CommonsTestHelper.testDefaultImplementationWithDifferentContentObject(aColor, new CSSHSLA(0, 2, 3, 0.5f));
CommonsTestHelper.testDefaultImplementationWithDifferentContentObject(aColor, new CSSHSLA(1, 0, 3, 0.5f));
CommonsTestHelper.testDefaultImplementationWithDifferentContentObject(aColor, new CSSHSLA(1, 2, 0, 0.5f));
CommonsTestHelper.testDefaultImplementationWithDifferentContentObject(aColor, new CSSHSLA(1, 2, 3, 0f));
}
use of com.helger.css.writer.CSSWriterSettings in project ph-css by phax.
the class CSSRGBTest method testBasic.
@Test
public void testBasic() {
final CSSWriterSettings aSettings = new CSSWriterSettings(ECSSVersion.CSS30, false);
final CSSRGB aColor = new CSSRGB(1, 2, 3);
assertEquals("rgb(1,2,3)", aColor.getAsCSSString(aSettings));
CommonsTestHelper.testDefaultImplementationWithEqualContentObject(aColor, new CSSRGB(aColor));
CommonsTestHelper.testDefaultImplementationWithEqualContentObject(aColor, new CSSRGB(1, 2, 3));
CommonsTestHelper.testDefaultImplementationWithDifferentContentObject(aColor, new CSSRGB(0, 2, 3));
CommonsTestHelper.testDefaultImplementationWithDifferentContentObject(aColor, new CSSRGB(1, 0, 3));
CommonsTestHelper.testDefaultImplementationWithDifferentContentObject(aColor, new CSSRGB(1, 2, 0));
}
Aggregations