Skip to content

Commit

Permalink
Updated license, moved tool config default location to src/main/webcnf
Browse files Browse the repository at this point in the history
  • Loading branch information
codemonstur committed Jan 1, 2021
1 parent d0e4abb commit 26c353b
Show file tree
Hide file tree
Showing 10 changed files with 197 additions and 19 deletions.
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2020 Jurgen Voorneveld
Copyright (c) 2021 Jurgen Voorneveld

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
35 changes: 21 additions & 14 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -238,14 +238,6 @@
<version>2.7.0</version>
</dependency>

<dependency>
<groupId>com.google.javascript</groupId>
<artifactId>closure-compiler</artifactId>
<version>v20190929</version>
<scope>test</scope>
</dependency>


<!-- For Maven plugin -->
<dependency>
<groupId>org.apache.maven</groupId>
Expand All @@ -264,12 +256,12 @@
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>2.2.1</version>
</dependency>

<dependency>
<groupId>com.helger</groupId>
<artifactId>ph-css</artifactId>
<version>6.2.3</version>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>

<!-- For testing -->
Expand All @@ -280,13 +272,28 @@
<scope>test</scope>
</dependency>

<dependency>
<groupId>com.helger</groupId>
<artifactId>ph-css</artifactId>
<version>6.2.3</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.6.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>com.google.javascript</groupId>
<artifactId>closure-compiler</artifactId>
<version>v20190929</version>
<scope>test</scope>
</dependency>

</dependencies>

</project>
1 change: 0 additions & 1 deletion src/main/java/htmlcompiler/commands/Compile.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package htmlcompiler.commands;

import com.google.gson.Gson;
import htmlcompiler.pojos.compile.CompilerType;
import htmlcompiler.pojos.library.LibraryArchive;
import htmlcompiler.tools.Logger;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public final class MavenCompile extends AbstractMojo {
public boolean replaceExtension;
@Parameter(defaultValue = "jsoup")
public CompilerType type;
@Parameter(defaultValue = "src/main/websrc/validation.json")
@Parameter(defaultValue = "src/main/webcnf/validation.json")
public String validation;

public void execute() throws MojoFailureException {
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/htmlcompiler/commands/maven/MavenHost.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ public final class MavenHost extends AbstractMojo {
public String watchedDirectories;
@Parameter(defaultValue = "true")
public boolean requestApiEnabled;
@Parameter(defaultValue = "src/main/websrc/requests.json")
@Parameter(defaultValue = "src/main/webcnf/requests.json")
public String requestApiSpecification;
@Parameter(defaultValue = "src/main/websrc/validation.json")
@Parameter(defaultValue = "src/main/webcnf/validation.json")
public String validation;
@Parameter(defaultValue = "jsoup")
public CompilerType type;
Expand Down
129 changes: 129 additions & 0 deletions src/test/java/unittests/TestCssParser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
package unittests;

import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

import static java.nio.charset.StandardCharsets.UTF_8;
import static org.apache.commons.io.IOUtils.resourceToString;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class TestCssParser {

private static final String
CSS_COMMENTS = "/css/comments.css",
CSS_MEDIA = "/css/media.css",
CSS_SELECTORS = "/css/selectors.css",
CSS_SIMPLE = "/css/simple.css";

public static void main(final String... args) {
System.out.println(extractCssSelectors(""));
System.out.println(extractCssSelectors("html{margin: 0;}/* sdfdsfd */"));

System.out.println(removeCssComments("before/*inside*/after"));
System.out.println(removeCssComments("before/*/inside"));
System.out.println(removeCssComments("/*/inside*/after"));
System.out.println(removeCssComments("/*/inside*/"));
System.out.println(removeCssComments("/"));
System.out.println(removeCssComments("/*"));
System.out.println(removeCssComments("before/"));
System.out.println(removeCssComments("before/*"));
}

@Test
public void testCssComments() throws IOException {
final var cssCode = resourceToString(CSS_COMMENTS, UTF_8);

final var cssClasses = extractCssSelectors(cssCode);

assertEquals(Set.of("p"), cssClasses);
}

@Test
public void testCssMedia() throws IOException {
final var cssCode = resourceToString(CSS_MEDIA, UTF_8);

final var cssClasses = extractCssSelectors(cssCode);

assertEquals(Set.of("p"), cssClasses);
}

@Test
public void testCssSelectors() throws IOException {
final var cssCode = resourceToString(CSS_SELECTORS, UTF_8);

final var cssClasses = extractCssSelectors(cssCode);

assertEquals(Set.of("p"), cssClasses);
}

@Test
public void testCssSimple() throws IOException {
final var cssCode = resourceToString(CSS_SIMPLE, UTF_8);

final var cssClasses = extractCssSelectors(cssCode);

assertEquals(Set.of("body"), cssClasses);
}

public static Set<String> extractCssSelectors(final String css) {
return extractCssSelectors(removeCssComments(css).toCharArray());
}

private static Set<String> extractCssSelectors(final char[] chars) {
final var selectors = new HashSet<String>();

for (int offset = 0; offset < chars.length;) {
int openingBracket = findFirst('{', chars, offset);
selectors.add(new String(chars, offset, openingBracket-offset).trim());
int closingBracket = findFirst('}', chars, openingBracket+1);
offset = closingBracket+1;
}

return selectors;
}

private static String removeCssComments(final String css) {
final var builder = new StringBuilder();

final char[] chars = css.toCharArray();
for (int offset = 0; offset < chars.length;) {
int startComment = findFirst('/', chars, offset);
if (startComment == chars.length) {
builder.append(chars, offset, startComment-offset);
break;
}
if (startComment+1 == chars.length) {
builder.append(chars, offset, startComment-offset+1);
break;
}
if (chars[startComment+1] != '*') {
builder.append(chars, offset, startComment-offset);
offset = startComment+1;
continue;
}

builder.append(chars, offset, startComment-offset);

int endComment = startComment+2;
while (endComment+1 < chars.length && chars[endComment] != '*' && chars[endComment+1] != '/')
endComment = findFirst('*', chars, endComment+1);

if (endComment+1 >= chars.length) {
break;
}

offset = endComment+2;
}

return builder.toString();
}

private static int findFirst(final char c, final char[] chars, int index) {
while (index < chars.length && chars[index] != c) index++;
return index;
}

}
7 changes: 7 additions & 0 deletions src/test/resources/css/comments.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
/*.special {
color: red;
}*/

p {
color: blue;
}
7 changes: 7 additions & 0 deletions src/test/resources/css/media.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@


@media (min-width: 70em) {
body {
font-size: 130%;
}
}
23 changes: 23 additions & 0 deletions src/test/resources/css/selectors.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@

h1 {
font-size: 1.5em;
}

div p,
#id:first-line {
background-color: red;
border-radius: 3px;
}

div p {
margin: 0;
padding: 1em;
}

div p + p {
padding-top: 0;
}

.someclass {
display: block;
}
6 changes: 6 additions & 0 deletions src/test/resources/css/simple.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
body {
font: 1em/150% Helvetica, Arial, sans-serif;
padding: 1em;
margin: 0 auto;
max-width: 33em;
}

0 comments on commit 26c353b

Please sign in to comment.