limit,
final CssErrorHandler err)
{
@@ -995,7 +1021,7 @@
return function;
}
- static CssConstruct createNegationPseudo(final CssToken start,
+ CssConstruct createNegationPseudo(final CssToken start,
final CssTokenIterator iter, final CssErrorHandler err) throws
CssException
{
@@ -1005,7 +1031,7 @@
CssFunction negation = new CssFunction(name, start.location);
CssToken tk = iter.next();
- CssConstruct cc = CssSelectorConstructFactory.createSimpleSelector(tk, iter, err);
+ CssConstruct cc = createSimpleSelector(tk, iter, err);
if (cc == null || !ContextRestrictions.PSEUDO_NEGATION.apply(cc))
{
return null;
@@ -1018,7 +1044,7 @@
return negation;
}
- static CssAttributeSelector createAttributeSelector(final CssToken start,
+ CssAttributeSelector createAttributeSelector(final CssToken start,
final CssTokenIterator iter, final CssErrorHandler err) throws
CssException
{
@@ -1051,8 +1077,8 @@
else
{
err.error(new CssGrammarException(
- CssErrorCode.GRAMMAR_EXPECTING_TOKEN, next.location, next.chars,
- Messages.get("a_string_or_dentifier")));
+ CssErrorCode.GRAMMAR_EXPECTING_TOKEN, next.location, locale, next.chars,
+ messages.get("a_string_or_dentifier")));
return null;
}
iter.next(); // ']'
@@ -1060,15 +1086,15 @@
else
{
err.error(new CssGrammarException(
- CssErrorCode.GRAMMAR_EXPECTING_TOKEN, next.location, next.chars,
- Messages.get("an_attribute_value_matcher")));
+ CssErrorCode.GRAMMAR_EXPECTING_TOKEN, next.location, locale, next.chars,
+ messages.get("an_attribute_value_matcher")));
return null;
}
}
return cas;
}
- static CssAttributeMatchSelector createAttributeMatchSelector(final CssToken tk,
+ CssAttributeMatchSelector createAttributeMatchSelector(final CssToken tk,
final CssTokenIterator iter, final CssErrorHandler err)
{
CssAttributeMatchSelector.Type type;
@@ -1096,7 +1122,7 @@
return new CssAttributeMatchSelector(tk.getChars(), type, tk.location);
}
- private static CssTypeSelector createTypeSelector(final CssToken start,
+ CssTypeSelector createTypeSelector(final CssToken start,
final CssTokenIterator iter, final CssErrorHandler err) throws
CssException
{
@@ -1104,8 +1130,8 @@
if (start.type != CssToken.Type.IDENT && !MATCH_STAR_PIPE.apply(start))
{
err.error(new CssGrammarException(
- CssErrorCode.GRAMMAR_EXPECTING_TOKEN, start.location,
- start.getChars(), Messages.get("a_type_or_universal_selector")));
+ CssErrorCode.GRAMMAR_EXPECTING_TOKEN, start.location, locale,
+ start.getChars(), messages.get("a_type_or_universal_selector")));
return null;
}
@@ -1119,8 +1145,8 @@
if (next.type != CssToken.Type.IDENT)
{
err.error(new CssGrammarException(
- CssErrorCode.GRAMMAR_EXPECTING_TOKEN, next.location,
- next.getChars(), Messages.get("a_type_or_universal_selector")));
+ CssErrorCode.GRAMMAR_EXPECTING_TOKEN, next.location, locale,
+ next.getChars(), messages.get("a_type_or_universal_selector")));
return null;
}
else
@@ -1136,8 +1162,8 @@
if (next.type != CssToken.Type.IDENT && !MATCH_STAR.apply(next))
{
err.error(new CssGrammarException(
- CssErrorCode.GRAMMAR_EXPECTING_TOKEN, start.location,
- next.getChars(), Messages.get("a_type_or_universal_selector")));
+ CssErrorCode.GRAMMAR_EXPECTING_TOKEN, start.location, locale,
+ next.getChars(), messages.get("a_type_or_universal_selector")));
return null;
}
else
diff -Nru epubcheck-4.0.2/src/main/java/org/idpf/epubcheck/util/css/CssLocation.java epubcheck-4.1.0/src/main/java/org/idpf/epubcheck/util/css/CssLocation.java
--- epubcheck-4.0.2/src/main/java/org/idpf/epubcheck/util/css/CssLocation.java 2016-11-29 13:08:40.000000000 +0000
+++ epubcheck-4.1.0/src/main/java/org/idpf/epubcheck/util/css/CssLocation.java 2018-11-26 10:49:29.000000000 +0000
@@ -22,10 +22,10 @@
package org.idpf.epubcheck.util.css;
-import com.google.common.base.Objects;
-
import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.base.MoreObjects;
+
/**
* Represents a location in a CSS file.
*
@@ -75,7 +75,7 @@
@Override
public String toString()
{
- return Objects.toStringHelper(this)
+ return MoreObjects.toStringHelper(this)
.add("line", line)
.add("col", col)
.add("charOffset", charOffset)
diff -Nru epubcheck-4.0.2/src/main/java/org/idpf/epubcheck/util/css/CssParser.java epubcheck-4.1.0/src/main/java/org/idpf/epubcheck/util/css/CssParser.java
--- epubcheck-4.0.2/src/main/java/org/idpf/epubcheck/util/css/CssParser.java 2016-11-29 13:08:40.000000000 +0000
+++ epubcheck-4.1.0/src/main/java/org/idpf/epubcheck/util/css/CssParser.java 2018-11-26 10:49:29.000000000 +0000
@@ -30,6 +30,7 @@
import java.io.IOException;
import java.io.Reader;
import java.util.List;
+import java.util.Locale;
import java.util.NoSuchElementException;
import org.idpf.epubcheck.util.css.CssExceptions.CssException;
@@ -46,6 +47,7 @@
import org.idpf.epubcheck.util.css.CssTokenList.CssTokenIterator;
import org.idpf.epubcheck.util.css.CssTokenList.PrematureEOFException;
+import com.adobe.epubcheck.util.Messages;
import com.google.common.base.Predicate;
import com.google.common.collect.Lists;
@@ -57,6 +59,32 @@
public final class CssParser
{
private final boolean debug = false;
+ private final Messages messages;
+ private final CssSelectorConstructFactory cssSelectorFactory;
+
+ /**
+ * Builds a new CSS parser reporting errors in the default locale.
+ *
+ * The localized constructor {@link #CssParser(Locale)} should be preferred over
+ * this one, except for tests.
+ *
+ */
+ public CssParser()
+ {
+ this(Locale.getDefault());
+ }
+
+ /**
+ * Builds a new CSS parser that will report parsing errors in the given locale.
+ *
+ * @param locale
+ * the locale used in the parsing errors.
+ */
+ public CssParser(Locale locale)
+ {
+ this.messages = Messages.getInstance(locale, CssParser.class);
+ this.cssSelectorFactory = new CssSelectorConstructFactory(locale);
+ }
/*
* TODOs
@@ -181,7 +209,7 @@
{
tokens.add(token);
}
- }).scan();
+ }, messages.getLocale()).scan();
return tokens.iterator(FILTER_S_CMNT); // default filter
}
@@ -222,8 +250,8 @@
}
catch (NoSuchElementException nse)
{
- err.error(new CssGrammarException(GRAMMAR_PREMATURE_EOF,
- iter.last.location, "'" + errChar + "'"));
+ err.error(new CssGrammarException(GRAMMAR_PREMATURE_EOF, iter.last.location,
+ messages.getLocale(), "'" + errChar + "'"));
throw new PrematureEOFException();
}
@@ -234,9 +262,8 @@
}
/**
- * With start token being the first non-ignorable token inside the
- * declaration block, iterate issuing CssDeclaration objects until the block
- * ends.
+ * With start token being the first non-ignorable token inside the declaration
+ * block, iterate issuing CssDeclaration objects until the block ends.
*/
private void handleDeclarationBlock(CssToken start, CssTokenIterator iter,
final CssContentHandler doc, CssErrorHandler err) throws
@@ -294,8 +321,8 @@
}
catch (NoSuchElementException nse)
{
- err.error(new CssGrammarException(GRAMMAR_PREMATURE_EOF, iter.last.location, "';' "
- + Messages.get("or") + " '}'"));
+ err.error(new CssGrammarException(GRAMMAR_PREMATURE_EOF, iter.last.location,
+ messages.getLocale(), "';' " + messages.get("or") + " '}'"));
throw new PrematureEOFException();
}
}
@@ -313,8 +340,8 @@
if (name.type != CssToken.Type.IDENT)
{
- err.error(new CssGrammarException(GRAMMAR_EXPECTING_TOKEN, name.location, name
- .getChars(), Messages.get("a_property_name")));
+ err.error(new CssGrammarException(GRAMMAR_EXPECTING_TOKEN, name.location,
+ messages.getLocale(), name.getChars(), messages.get("a_property_name")));
return null;
}
@@ -324,14 +351,15 @@
{
if (!MATCH_COLON.apply(iter.next()))
{
- err.error(new CssGrammarException(GRAMMAR_EXPECTING_TOKEN, name.location, iter.last
- .getChars(), ":"));
+ err.error(new CssGrammarException(GRAMMAR_EXPECTING_TOKEN, name.location,
+ messages.getLocale(), iter.last.getChars(), ":"));
return null;
}
}
catch (NoSuchElementException nse)
{
- err.error(new CssGrammarException(GRAMMAR_PREMATURE_EOF, iter.last.location, ":"));
+ err.error(new CssGrammarException(GRAMMAR_PREMATURE_EOF, iter.last.location,
+ messages.getLocale(), ":"));
throw new PrematureEOFException();
}
@@ -344,9 +372,8 @@
{
if (declaration.components.size() < 1)
{
- err.error(new CssGrammarException(GRAMMAR_EXPECTING_TOKEN,
- iter.last.location, value.getChar(), Messages
- .get("a_property_value")));
+ err.error(new CssGrammarException(GRAMMAR_EXPECTING_TOKEN, iter.last.location,
+ messages.getLocale(), value.getChar(), messages.get("a_property_value")));
return null;
}
else
@@ -358,8 +385,8 @@
{
if (!handlePropertyValue(declaration, value, iter, isStyleAttribute))
{
- err.error(new CssGrammarException(GRAMMAR_UNEXPECTED_TOKEN,
- iter.last.location, iter.last.getChars()));
+ err.error(new CssGrammarException(GRAMMAR_UNEXPECTED_TOKEN, iter.last.location,
+ messages.getLocale(), iter.last.getChars()));
return null;
}
else
@@ -374,8 +401,8 @@
}
catch (NoSuchElementException nse)
{
- err.error(new CssGrammarException(GRAMMAR_PREMATURE_EOF, iter.last.location, "';' "
- + Messages.get("or") + " '}'"));
+ err.error(new CssGrammarException(GRAMMAR_PREMATURE_EOF, iter.last.location,
+ messages.getLocale(), "';' " + messages.get("or") + " '}'"));
throw new PrematureEOFException();
}
@@ -447,8 +474,8 @@
CssSelector selector = new CssSelector(start.location);
while (true)
{ //combinator loop
- CssSimpleSelectorSequence seq = CssSelectorConstructFactory
- .createSimpleSelectorSequence(start, iter, err);
+ CssSimpleSelectorSequence seq = cssSelectorFactory.createSimpleSelectorSequence(start, iter,
+ err);
if (seq == null)
{
//errors already issued
@@ -467,8 +494,7 @@
break;
}
- CssSelectorCombinator comb =
- CssSelectorConstructFactory.createCombinator(start, iter, err);
+ CssSelectorCombinator comb = cssSelectorFactory.createCombinator(start, iter, err);
if (comb != null)
{
selector.components.add(comb);
@@ -480,8 +506,8 @@
}
else
{
- err.error(new CssGrammarException(GRAMMAR_UNEXPECTED_TOKEN,
- iter.last.location, iter.last.chars));
+ err.error(new CssGrammarException(GRAMMAR_UNEXPECTED_TOKEN, iter.last.location,
+ messages.getLocale(), iter.last.chars));
return null;
}
} //combinator loop
@@ -535,8 +561,8 @@
if (param == null)
{
// issue error, forward, then return
- err.error(new CssGrammarException(GRAMMAR_UNEXPECTED_TOKEN,
- iter.last.location, iter.last.chars));
+ err.error(new CssGrammarException(GRAMMAR_UNEXPECTED_TOKEN, iter.last.location,
+ messages.getLocale(), iter.last.chars));
//skip to atrule closebrace, ignoring any inner blocks
int stack = 0;
while (true)
@@ -572,8 +598,8 @@
{
// UAs required to close any open constructs on premature EOF
doc.startAtRule(atRule);
- err.error(new CssGrammarException(GRAMMAR_PREMATURE_EOF, iter.last.location, "';' "
- + Messages.get("or") + " '{'"));
+ err.error(new CssGrammarException(GRAMMAR_PREMATURE_EOF, iter.last.location,
+ messages.getLocale(), "';' " + messages.get("or") + " '{'"));
doc.endAtRule(atRule.getName().get());
throw new PrematureEOFException();
}
@@ -611,7 +637,8 @@
}
catch (NoSuchElementException nse)
{
- err.error(new CssGrammarException(GRAMMAR_PREMATURE_EOF, iter.last.location, "'}'"));
+ err.error(new CssGrammarException(GRAMMAR_PREMATURE_EOF, iter.last.location,
+ messages.getLocale(), "'}'"));
doc.endAtRule(atRule.name.get());
throw new PrematureEOFException();
}
diff -Nru epubcheck-4.0.2/src/main/java/org/idpf/epubcheck/util/css/CssReader.java epubcheck-4.1.0/src/main/java/org/idpf/epubcheck/util/css/CssReader.java
--- epubcheck-4.0.2/src/main/java/org/idpf/epubcheck/util/css/CssReader.java 2016-11-29 13:08:40.000000000 +0000
+++ epubcheck-4.1.0/src/main/java/org/idpf/epubcheck/util/css/CssReader.java 2018-11-26 10:49:29.000000000 +0000
@@ -21,17 +21,19 @@
*/
package org.idpf.epubcheck.util.css;
-import com.google.common.base.CharMatcher;
-import com.google.common.base.Objects;
-import com.google.common.collect.Lists;
-import com.google.common.primitives.Ints;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
-import static com.google.common.base.Preconditions.*;
+import com.google.common.base.CharMatcher;
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.Lists;
+import com.google.common.primitives.Ints;
/**
* A wrapper around java.io.Reader with a pushback buffer, offset and
@@ -380,7 +382,7 @@
@Override
public String toString()
{
- return Objects.toStringHelper(this)
+ return MoreObjects.toStringHelper(this)
.add("curChar", (char) curChar)
.add("prevChar", (char) prevChar)
.toString();
diff -Nru epubcheck-4.0.2/src/main/java/org/idpf/epubcheck/util/css/CssScanner.java epubcheck-4.1.0/src/main/java/org/idpf/epubcheck/util/css/CssScanner.java
--- epubcheck-4.0.2/src/main/java/org/idpf/epubcheck/util/css/CssScanner.java 2016-11-29 13:08:40.000000000 +0000
+++ epubcheck-4.1.0/src/main/java/org/idpf/epubcheck/util/css/CssScanner.java 2018-11-26 10:49:29.000000000 +0000
@@ -38,6 +38,7 @@
import java.io.IOException;
import java.io.Reader;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import static com.google.common.base.Preconditions.*;
@@ -65,20 +66,22 @@
private final CssErrorHandler errHandler;
private final boolean debug = false;
private char cur;
+ private Locale locale;
private CssScanner(final Reader in, final String systemID, final CssErrorHandler errHandler,
- final CssTokenConsumer consumer, final int pushbackBufferSize)
+ final CssTokenConsumer consumer, final int pushbackBufferSize, final Locale locale)
{
this.consumer = checkNotNull(consumer);
this.errHandler = checkNotNull(errHandler);
this.reader = new CssReader(in, systemID, pushbackBufferSize);
this.escapes = new CssEscapeMemoizer(reader);
+ this.locale = locale;
}
CssScanner(Reader in, final String systemID, final CssErrorHandler errHandler,
- final CssTokenConsumer consumer)
+ final CssTokenConsumer consumer, final Locale locale)
{
- this(in, systemID, errHandler, consumer, CssReader.DEFAULT_PUSHBACK_BUFFER_SIZE);
+ this(in, systemID, errHandler, consumer, CssReader.DEFAULT_PUSHBACK_BUFFER_SIZE, locale);
}
void scan() throws
@@ -94,7 +97,7 @@
{
break;
}
- builder = new TokenBuilder(reader, /* this, */errHandler);
+ builder = new TokenBuilder(reader, /* this, */errHandler, locale);
cur = (char) ch;
next = reader.peek();
escapes.reset(builder);
@@ -741,7 +744,7 @@
* that if a specific quantity literal is found.
*/
builder.type = Type.QNTY_DIMEN;
- TokenBuilder suffix = new TokenBuilder(reader, errHandler);
+ TokenBuilder suffix = new TokenBuilder(reader, errHandler, locale);
append(QNTSTART, suffix);
if (suffix.getLast() != '%')
{ // QNTSTART = NMSTART | '%'
diff -Nru epubcheck-4.0.2/src/main/java/org/idpf/epubcheck/util/css/CssSource.java epubcheck-4.1.0/src/main/java/org/idpf/epubcheck/util/css/CssSource.java
--- epubcheck-4.0.2/src/main/java/org/idpf/epubcheck/util/css/CssSource.java 2016-11-29 13:08:40.000000000 +0000
+++ epubcheck-4.1.0/src/main/java/org/idpf/epubcheck/util/css/CssSource.java 2018-11-26 10:49:29.000000000 +0000
@@ -21,12 +21,17 @@
*/
package org.idpf.epubcheck.util.css;
-import java.io.UnsupportedEncodingException;
-import com.google.common.base.Objects;
+import static com.google.common.base.Preconditions.checkNotNull;
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.UnsupportedEncodingException;
-import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.base.MoreObjects;
/**
* Represents a CSS source.
@@ -86,7 +91,7 @@
@Override
public String toString()
{
- return Objects.toStringHelper(this).addValue(systemID).toString();
+ return MoreObjects.toStringHelper(this).addValue(systemID).toString();
}
@Override
diff -Nru epubcheck-4.0.2/src/main/java/org/idpf/epubcheck/util/css/CssToken.java epubcheck-4.1.0/src/main/java/org/idpf/epubcheck/util/css/CssToken.java
--- epubcheck-4.0.2/src/main/java/org/idpf/epubcheck/util/css/CssToken.java 2016-11-29 13:08:40.000000000 +0000
+++ epubcheck-4.1.0/src/main/java/org/idpf/epubcheck/util/css/CssToken.java 2018-11-26 10:49:29.000000000 +0000
@@ -21,16 +21,22 @@
*/
package org.idpf.epubcheck.util.css;
-import com.google.common.base.*;
-import com.google.common.collect.Lists;
-import org.idpf.epubcheck.util.css.CssExceptions.CssErrorCode;
-import org.idpf.epubcheck.util.css.CssExceptions.CssException;
-import org.idpf.epubcheck.util.css.CssExceptions.CssScannerException;
+import static com.google.common.base.Preconditions.checkState;
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
-import static com.google.common.base.Preconditions.checkState;
+import org.idpf.epubcheck.util.css.CssExceptions.CssErrorCode;
+import org.idpf.epubcheck.util.css.CssExceptions.CssException;
+import org.idpf.epubcheck.util.css.CssExceptions.CssScannerException;
+
+import com.google.common.base.Joiner;
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
/**
* Represents a CSS token.
@@ -48,7 +54,8 @@
/**
* Constructor for tokens with type other than CHAR
*/
- CssToken(final Type type, final CssLocation location, final String chars, final List errors)
+ CssToken(final Type type, final CssLocation location, final String chars,
+ final List errors)
{
this.type = type;
this.location = location;
@@ -62,7 +69,8 @@
/**
* Constructor for CHAR tokens
*/
- CssToken(final Type type, final CssLocation location, final char chr, final List errors)
+ CssToken(final Type type, final CssLocation location, final char chr,
+ final List errors)
{
this.type = type;
this.location = location;
@@ -111,11 +119,8 @@
@Override
public String toString()
{
- return Objects.toStringHelper(this)
- .add("type", type.name())
- .add("value", chars)
- .add("errors", errors.isPresent() ? Joiner.on(", ").join(errors.get()) : "none")
- .toString();
+ return MoreObjects.toStringHelper(this).add("type", type.name()).add("value", chars)
+ .add("errors", errors.isPresent() ? Joiner.on(", ").join(errors.get()) : "none").toString();
}
@Override
@@ -124,8 +129,7 @@
if (obj instanceof CssToken)
{
CssToken tk = (CssToken) obj;
- if (tk.type.equals(this.type)
- && tk.chars.equals(this.chars)
+ if (tk.type.equals(this.type) && tk.chars.equals(this.chars)
&& tk.location.equals(this.location))
{
return true;
@@ -230,8 +234,7 @@
{
public final boolean apply(final CssToken input)
{
- return input.type == CssToken.Type.CHAR
- && (input.getChar() == ':');
+ return input.type == CssToken.Type.CHAR && (input.getChar() == ':');
}
};
@@ -242,8 +245,7 @@
{
public final boolean apply(final CssToken input)
{
- return input.type == CssToken.Type.CHAR
- && (input.getChar() == '|');
+ return input.type == CssToken.Type.CHAR && (input.getChar() == '|');
}
};
@@ -254,8 +256,7 @@
{
public final boolean apply(final CssToken input)
{
- return input.type == CssToken.Type.CHAR
- && (input.getChar() == '}');
+ return input.type == CssToken.Type.CHAR && (input.getChar() == '}');
}
};
@@ -266,23 +267,20 @@
{
public final boolean apply(final CssToken input)
{
- return input.type == CssToken.Type.CHAR
- && (input.getChar() == '{');
+ return input.type == CssToken.Type.CHAR && (input.getChar() == '{');
}
};
/**
- * Matches a CssToken.Type.CHAR with value '>', '+' or '~'. Note that S is the fourth
- * CSS combinator which is not matched here.
+ * Matches a CssToken.Type.CHAR with value '>', '+' or '~'. Note that S is the
+ * fourth CSS combinator which is not matched here.
*/
static final Predicate MATCH_COMBINATOR_CHAR = new Predicate()
{
public final boolean apply(final CssToken input)
{
return input.type == CssToken.Type.CHAR
- && (input.getChar() == '>'
- || input.getChar() == '+'
- || input.getChar() == '~');
+ && (input.getChar() == '>' || input.getChar() == '+' || input.getChar() == '~');
}
};
@@ -293,8 +291,7 @@
{
public final boolean apply(final CssToken input)
{
- return input.type == CssToken.Type.CHAR
- && (input.getChar() == ';');
+ return input.type == CssToken.Type.CHAR && (input.getChar() == ';');
}
};
@@ -305,8 +302,7 @@
{
public final boolean apply(final CssToken input)
{
- return input.type == CssToken.Type.CHAR
- && (input.getChar() == ',');
+ return input.type == CssToken.Type.CHAR && (input.getChar() == ',');
}
};
@@ -317,8 +313,7 @@
{
public final boolean apply(final CssToken input)
{
- return input.type == CssToken.Type.CHAR
- && (input.getChar() == ')');
+ return input.type == CssToken.Type.CHAR && (input.getChar() == ')');
}
};
@@ -329,8 +324,7 @@
{
public final boolean apply(final CssToken input)
{
- return input.type == CssToken.Type.CHAR
- && (input.getChar() == '(');
+ return input.type == CssToken.Type.CHAR && (input.getChar() == '(');
}
};
@@ -353,8 +347,7 @@
{
public final boolean apply(final CssToken input)
{
- return input.type == CssToken.Type.CHAR
- && (input.getChar() == '*');
+ return input.type == CssToken.Type.CHAR && (input.getChar() == '*');
}
};
@@ -365,8 +358,7 @@
{
public final boolean apply(final CssToken input)
{
- return input.type == CssToken.Type.CHAR
- && (input.getChar() == '[');
+ return input.type == CssToken.Type.CHAR && (input.getChar() == '[');
}
};
@@ -377,8 +369,7 @@
{
public final boolean apply(final CssToken input)
{
- return input.type == CssToken.Type.CHAR
- && (input.getChar() == ']');
+ return input.type == CssToken.Type.CHAR && (input.getChar() == ']');
}
};
@@ -398,12 +389,9 @@
{
public final boolean apply(final CssToken input)
{
- return (input.type == CssToken.Type.CHAR
- && input.getChar() == '=')
- || input.type == CssToken.Type.INCLUDES
- || input.type == CssToken.Type.DASHMATCH
- || input.type == CssToken.Type.PREFIXMATCH
- || input.type == CssToken.Type.SUFFIXMATCH
+ return (input.type == CssToken.Type.CHAR && input.getChar() == '=')
+ || input.type == CssToken.Type.INCLUDES || input.type == CssToken.Type.DASHMATCH
+ || input.type == CssToken.Type.PREFIXMATCH || input.type == CssToken.Type.SUFFIXMATCH
|| input.type == CssToken.Type.SUBSTRINGMATCH;
}
@@ -421,8 +409,10 @@
final List errors;
private final boolean debug = false;
private final CssErrorHandler errorListener;
+ private final Locale locale;
- TokenBuilder(final String systemID, final int line, final int col, final int offset, final CssErrorHandler errorListener)
+ private TokenBuilder(final String systemID, final int line, final int col, final int offset,
+ final CssErrorHandler errorListener, final Locale locale)
{
this.systemID = systemID;
this.line = line;
@@ -431,11 +421,12 @@
this.chars = new StringBuilder();
this.errors = Lists.newArrayList();
this.errorListener = errorListener;
+ this.locale = locale;
}
- TokenBuilder(final CssReader reader, final CssErrorHandler errorListener)
+ TokenBuilder(final CssReader reader, final CssErrorHandler errorListener, final Locale locale)
{
- this(reader.systemID, reader.line, reader.col, reader.offset, errorListener);
+ this(reader.systemID, reader.line, reader.col, reader.offset, errorListener, locale);
}
TokenBuilder append(int ch)
@@ -470,14 +461,15 @@
}
/**
- * All lexer-time errors are funnelled through this method. Reported errors are stored in
- * the resulting CssToken. This method also passes the error on to a CssErrorHandler,
- * which can opt to rethrow to terminate the scanning.
+ * All lexer-time errors are funnelled through this method. Reported errors are
+ * stored in the resulting CssToken. This method also passes the error on to a
+ * CssErrorHandler, which can opt to rethrow to terminate the scanning.
*/
- void error(CssErrorCode errorCode, CssReader reader, Object... arguments) throws
- CssException
+ void error(CssErrorCode errorCode, CssReader reader, Object... arguments)
+ throws CssException
{
- CssScannerException cse = new CssScannerException(errorCode, CssLocation.create(reader), arguments);
+ CssScannerException cse = new CssScannerException(errorCode, CssLocation.create(reader),
+ locale, arguments);
errors.add(cse);
errorListener.error(cse);
}
diff -Nru epubcheck-4.0.2/src/main/java/org/idpf/epubcheck/util/css/Messages.java epubcheck-4.1.0/src/main/java/org/idpf/epubcheck/util/css/Messages.java
--- epubcheck-4.0.2/src/main/java/org/idpf/epubcheck/util/css/Messages.java 2016-11-29 13:08:40.000000000 +0000
+++ epubcheck-4.1.0/src/main/java/org/idpf/epubcheck/util/css/Messages.java 1970-01-01 00:00:00.000000000 +0000
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2012 International Digital Publishing Forum
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-package org.idpf.epubcheck.util.css;
-
-import com.google.common.base.Charsets;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.net.URLConnection;
-import java.text.MessageFormat;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.PropertyResourceBundle;
-import java.util.ResourceBundle;
-import java.util.ResourceBundle.Control;
-
-final class Messages
-{
- private static final String BUNDLE_NAME = "org.idpf.epubcheck.util.css.messages"; //$NON-NLS-1$
- private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME, Locale.getDefault(), new UTF8Control());
-
- static String get(String key)
- {
- try
- {
- return RESOURCE_BUNDLE.getString(key);
- }
- catch (MissingResourceException e)
- {
- return key;
- }
- }
-
- static String get(String key, Object... arguments)
- {
- try
- {
- return MessageFormat.format(RESOURCE_BUNDLE.getString(key), arguments);
- }
- catch (MissingResourceException e)
- {
- return key;
- }
- }
-
- private static class UTF8Control extends Control
- {
- public ResourceBundle newBundle
- (String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
- throws
- IllegalAccessException,
- InstantiationException,
- IOException
- {
- // The below is a copy of the default implementation.
- String bundleName = toBundleName(baseName, locale);
- String resourceName = toResourceName(bundleName, "properties"); //$NON-NLS-1$
- ResourceBundle bundle = null;
- InputStream stream = null;
- if (reload)
- {
- URL url = loader.getResource(resourceName);
- if (url != null)
- {
- URLConnection connection = url.openConnection();
- if (connection != null)
- {
- connection.setUseCaches(false);
- stream = connection.getInputStream();
- }
- }
- }
- else
- {
- stream = loader.getResourceAsStream(resourceName);
- }
- if (stream != null)
- {
- try
- {
- // Only this line is changed to make it to read properties files as UTF-8.
- bundle = new PropertyResourceBundle(
- new BufferedReader(
- new InputStreamReader(stream, Charsets.UTF_8)));
- }
- finally
- {
- stream.close();
- }
- }
- return bundle;
- }
- }
-
- private Messages()
- {
- }
-}
diff -Nru epubcheck-4.0.2/src/main/java/org/idpf/epubcheck/util/saxon/Int64ValueSequence.java epubcheck-4.1.0/src/main/java/org/idpf/epubcheck/util/saxon/Int64ValueSequence.java
--- epubcheck-4.0.2/src/main/java/org/idpf/epubcheck/util/saxon/Int64ValueSequence.java 2016-11-29 13:08:40.000000000 +0000
+++ epubcheck-4.1.0/src/main/java/org/idpf/epubcheck/util/saxon/Int64ValueSequence.java 2018-11-26 10:49:29.000000000 +0000
@@ -21,7 +21,7 @@
}
@Override
- public SequenceIterator extends Item> iterate() throws
+ public SequenceIterator iterate() throws
XPathException
{
return item.iterate();
diff -Nru epubcheck-4.0.2/src/main/java/org/idpf/epubcheck/util/saxon/SystemIdFunction.java epubcheck-4.1.0/src/main/java/org/idpf/epubcheck/util/saxon/SystemIdFunction.java
--- epubcheck-4.0.2/src/main/java/org/idpf/epubcheck/util/saxon/SystemIdFunction.java 2016-11-29 13:08:40.000000000 +0000
+++ epubcheck-4.1.0/src/main/java/org/idpf/epubcheck/util/saxon/SystemIdFunction.java 2018-11-26 10:49:29.000000000 +0000
@@ -94,7 +94,7 @@
}
@Override
- public SequenceIterator extends Item> iterate() throws
+ public SequenceIterator iterate() throws
XPathException
{
return item.iterate();
diff -Nru epubcheck-4.0.2/src/main/resources/com/adobe/epubcheck/messages/MessageBundle_de.properties epubcheck-4.1.0/src/main/resources/com/adobe/epubcheck/messages/MessageBundle_de.properties
--- epubcheck-4.0.2/src/main/resources/com/adobe/epubcheck/messages/MessageBundle_de.properties 2016-11-29 13:08:40.000000000 +0000
+++ epubcheck-4.1.0/src/main/resources/com/adobe/epubcheck/messages/MessageBundle_de.properties 2018-11-26 10:49:29.000000000 +0000
@@ -9,17 +9,17 @@
ACC_006=Tabellen sollten für bessere Barrierefreiheit ein 'thead'-Element besitzen.
ACC_007=Das Dokument nutzt keine 'epub:type'-Attribute für semantische Auszeichnung.
ACC_008=Die Navigationsdatei enthält kein 'landmarks nav'-Element.
-ACC_009=MathML sollte entweder ein 'alt'-Attribut besitzen oder ein 'annotation-xml'-Kindelement.
+ACC_009=MathML sollte entweder ein 'alttext'-Attribut besitzen oder ein 'annotation-xml'-Kindelement.
ACC_010=Überschriften sollten nicht innerhalb von 'blockquote' oder 'figure'-Elementen benutzt werden.
ACC_011=SVG-Hyperlinks sollten einen für Menschen lesbaren Titel besitzen ('title' Kindelement oder 'xlink:title'-Attribut).
ACC_012=Tabellen sollten ein 'caption'-Element besitzen.
ACC_013=Die Datei enthält mindestens eine Inline-CSS-Deklaration.
ACC_013_SUG=Inline-Styles sind nicht kompatibel mit Einstellungen für Barrierefreiheit und benutzerspezifische Display-Anpassungen. Stattdessen sollten CSS-Klassen verwendet werden.
-ACC_014=Wert der CSS-Eigenschaft 'font-size' ist keine relative Größenangabe.
+ACC_014=Wert der CSS-Eigenschaft 'font-size' ist keine relative Größenangabe: '%1$s'
ACC_014_SUG=Erlaubte Werte sind Prozentangaben, 'em'-Werte, 'larger', 'smaller', 'normal' oder 'inherit'.
ACC_015=Wert der CSS-Eigenschaft 'line-height' ist keine relative Größenangabe.
ACC_015_SUG=Erlaubte Werte sind Prozentangaben, Zahlen, 'larger', 'smaller', 'normal' oder 'inherit'.
-ACC_016=CSS-Eigenschaft 'font-size' sollte in einer relativen Größe angegeben werden.
+ACC_016=CSS-Eigenschaft 'font-size' sollte in einer relativen Größe angegeben werden: '%1$s'
ACC_016_SUG=Erlaubte Werte sind Prozentangaben, 'em'-Werte, 'larger', 'smaller', 'normal' oder 'inherit'.
ACC_017=Wert der CSS-Eigenschaft 'line-height' ist keine relative Größenangabe.
ACC_017_SUG=Erlaubte Werte sind Prozentangaben, Zahlen, 'larger', 'smaller', 'normal' oder 'inherit'.
@@ -32,6 +32,7 @@
CHK_005=Der benutzerdefinierte Vorschlag enthält zu viele Parameter in der Datei zum Überschreiben von Warnungen und Fehlermeldungen '%1$s'.
CHK_006=Der benutzerdefinierte Formatierungs-Parameter ist ungültig in der Datei zum Überschreiben von Warnungen und Fehlermeldungen '%1$s'.
CHK_007=Fehler beim Einlesen der Datei zum Überschreiben von Warnungen und Fehlermeldungen '%1$s': %2$s
+CHK_008=Fehler beim Verarbeiten von '%1$s', weitere Checks werden übersprungen.
#CSS
CSS_001=Die CSS-Eigenschaft '%1$s' darf im EPUB nicht verwendet werden!
@@ -120,6 +121,7 @@
HTM_050=Das Attribut epub:type="pagebreak" wurde im Dokument gefunden.
HTM_051=Semantische 'Microdata'-Erweiterungen wurden gefunden, aber kein RDFa. EDUPUB empfiehlt die Nutzung von RDFa Lite.
HTM_052=Die Eigenschaft 'region-based' ist nur an 'nav'-Elementen in EPUB 3-Navigationsdokumenten erlaubt.
+HTM_053=In der Datei '%1$s' wurde ein Datei-Link ('file://') gefunden.
#media
MED_001=Das Video-Standbild muss in einem vom OPF-Standard unterstützten Dateiformate für Bilder vorliegen!
@@ -213,12 +215,12 @@
OPF_055='%1$s'-Element ist leer.
OPF_056=MimeType '%1$s' ist kein gültiger Audio-MimeType.
OPF_057=Die Bild-Dateigröße überschreiten die empfohlenen Vorgaben.
-OPF_058='spine'-Eintrag wird nicht aus der '.ncx'-Datei referenziert.
-OPF_058_SUG=Jeder 'spine'-Eintrag im OPF-Manifest sollte von mindestens einem TOC-Eintrag in der '.ncx'-Datei referenziert werden.
-OPF_059='spine'-Eintrag wird nicht in der NCX-Datei referenziert.
+OPF_058='spine'-Eintrag '%1$s' wird nicht aus der Navigationsdatei referenziert.
+OPF_058_SUG=Jeder 'spine'-Eintrag im OPF-Manifest sollte von mindestens einem TOC-Eintrag in der Navigationsdatei referenziert werden.
+OPF_059= 'spine'-Eintrag '%1$s' wird nicht in der NCX-Datei referenziert.
OPF_059_SUG=Jeder 'spine'-Eintrag im OPF-Manifest sollte von mindestens einem Eintrag in der NCX-Datei referenziert werden.
-OPF_060=Doppelte Datei im EPUB-Archiv: '%1$f'
-OPF_061=Doppelte Datei im EPUB-Archiv (nach Unicode-NFC-Normalisierung): '%1$f'
+OPF_060=Doppelte Datei im EPUB-Archiv: '%1$s'
+OPF_061=Doppelte Datei im EPUB-Archiv (nach Unicode-NFC-Normalisierung): '%1$s'
OPF_062=Adobe "page-map" Attribut am 'spine'-Element der OPF-Datei gefunden.
OPF_063=Die in der Adobe 'page-map' referenzierte Datei '%1$s' wurde nicht im OPF-Manifest gefunden.
OPF_064=Im OPF wird der Typ '%1$s' deklariert, deshalb wird mit dem Profil '%2$s' validiert.
@@ -267,6 +269,8 @@
PKG_021=Fehlerhafte Bild-Datei gefunden.
PKG_022=Falsche Dateiendung für das Bild. Es ist eine '%1$s'-Datei, besitzt aber die Dateiendung '%2$s'.
PKG_023=Validierung gegen den EPUB-Standard 2.0 mit dem Standard-Validierungsprofil.
+PKG_024=Unbekannte EPUB-Dateiendung.
+PKG_024_SUG=Für bestmögliche Kompatibilität sollte '.epub' verwendet werden.
#Resources
RSC_001=Datei '%1$s' wurde nicht gefunden.
@@ -276,9 +280,9 @@
RSC_005=Validierungsfehler: %1$s
RSC_006=Verlinkte Ressourcen sind nicht erlaubt. Platzieren Sie den Inhalt stattdessen im EPUB selbst.
RSC_006_SUG=Remote-Ressourcen sind nur für Audio und Video erlaubt!
-RSC_007=Die referenzierte Datei wurde im EPUB nicht gefunden.
-RSC_007w=Die Datei wurde im EPUB nicht gefunden.
-RSC_008=Die referenzierte Datei ist im OPF-Manifest nicht deklariert.
+RSC_007=Die referenzierte Datei '%1$s' wurde im EPUB nicht gefunden.
+RSC_007w=Die referenzierte Datei '%1$s' wurde im EPUB nicht gefunden.
+RSC_008=Die referenzierte Datei '%1$s' ist im OPF-Manifest nicht deklariert.
RSC_009=Im 'src'-Attribut am 'img'-Element darf keine 'fragment identifier' (ID-Referenz) angegeben werden.
RSC_010=Referenz auf eine Ressource gefunden, die laut Standard nicht erlaubt ist.
RSC_011=Referenz auf eine Ressource gefunden, die nicht im OPF 'Spine' deklariert ist.
@@ -286,13 +290,14 @@
RSC_013=Fragmentbezeichner wird in einem Link zu einem Stylesheet-Dokument genutzt.
RSC_014=Fragmentbezeichner an einer inkompatiblen Ressource.
RSC_015=Das SVG-Element