summaryrefslogtreecommitdiff
path: root/dom/webidl/CSSLexer.webidl
diff options
context:
space:
mode:
Diffstat (limited to 'dom/webidl/CSSLexer.webidl')
-rw-r--r--dom/webidl/CSSLexer.webidl168
1 files changed, 168 insertions, 0 deletions
diff --git a/dom/webidl/CSSLexer.webidl b/dom/webidl/CSSLexer.webidl
new file mode 100644
index 0000000000..86fbfcfffe
--- /dev/null
+++ b/dom/webidl/CSSLexer.webidl
@@ -0,0 +1,168 @@
+/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// The possible values for CSSToken.tokenType.
+enum CSSTokenType {
+ // Whitespace.
+ "whitespace",
+ // A CSS comment.
+ "comment",
+ // An identifier. |text| holds the identifier text.
+ "ident",
+ // A function token. |text| holds the function name. Note that the
+ // function token includes (i.e., consumes) the "(" -- but this is
+ // not included in |text|.
+ "function",
+ // "@word". |text| holds "word", without the "@".
+ "at",
+ // "#word". |text| holds "word", without the "#".
+ "id",
+ // "#word". ID is used when "word" would have been a valid IDENT
+ // token without the "#"; otherwise, HASH is used.
+ "hash",
+ // A number.
+ "number",
+ // A dimensioned number.
+ "dimension",
+ // A percentage.
+ "percentage",
+ // A string.
+ "string",
+ // A "bad string". This can only be returned when a string is
+ // unterminated at EOF. (However, currently the lexer returns
+ // ordinary STRING tokens in this situation.)
+ "bad_string",
+ // A URL. |text| holds the URL.
+ "url",
+ // A "bad URL". This is a URL that is unterminated at EOF. |text|
+ // holds the URL.
+ "bad_url",
+ // A "symbol" is any one-character symbol. This corresponds to the
+ // DELIM token in the CSS specification.
+ "symbol",
+ // The "~=" token.
+ "includes",
+ // The "|=" token.
+ "dashmatch",
+ // The "^=" token.
+ "beginsmatch",
+ // The "$=" token.
+ "endsmatch",
+ // The "*=" token.
+ "containsmatch",
+ // A unicode-range token. This is currently not fully represented
+ // by CSSToken.
+ "urange",
+ // HTML comment delimiters, either "<!--" or "-->". Note that each
+ // is emitted as a separate token, and the intervening text is lexed
+ // as normal; whereas ordinary CSS comments are lexed as a unit.
+ "htmlcomment"
+};
+
+dictionary CSSToken {
+ // The token type.
+ CSSTokenType tokenType = "whitespace";
+
+ // Offset of the first character of the token.
+ unsigned long startOffset = 0;
+ // Offset of the character after the final character of the token.
+ // This is chosen so that the offsets can be passed to |substring|
+ // to yield the exact contents of the token.
+ unsigned long endOffset = 0;
+
+ // If the token is a number, percentage, or dimension, this holds
+ // the value. This is not present for other token types.
+ double number;
+ // If the token is a number, percentage, or dimension, this is true
+ // iff the number had an explicit sign. This is not present for
+ // other token types.
+ boolean hasSign;
+ // If the token is a number, percentage, or dimension, this is true
+ // iff the number was specified as an integer. This is not present
+ // for other token types.
+ boolean isInteger;
+
+ // Text associated with the token. This is not present for all
+ // token types. In particular it is:
+ //
+ // Token type Meaning
+ // ===============================
+ // ident The identifier.
+ // function The function name. Note that the "(" is part
+ // of the token but is not present in |text|.
+ // at The word.
+ // id The word.
+ // hash The word.
+ // dimension The dimension.
+ // string The string contents after escape processing.
+ // bad_string Ditto.
+ // url The URL after escape processing.
+ // bad_url Ditto.
+ // symbol The symbol text.
+ DOMString text;
+};
+
+/**
+ * CSSLexer is an interface to the CSS lexer. It tokenizes an
+ * input stream and returns CSS tokens.
+ *
+ * @see inIDOMUtils.getCSSLexer to create an instance of the lexer.
+ */
+[ChromeOnly]
+interface CSSLexer
+{
+ /**
+ * The line number of the most recently returned token. Line
+ * numbers are 0-based.
+ */
+ readonly attribute unsigned long lineNumber;
+
+ /**
+ * The column number of the most recently returned token. Column
+ * numbers are 0-based.
+ */
+ readonly attribute unsigned long columnNumber;
+
+ /**
+ * When EOF is reached, the last token might be unterminated in some
+ * ways. This method takes an input string and appends the needed
+ * terminators. In particular:
+ *
+ * 1. If EOF occurs mid-string, this will append the correct quote.
+ * 2. If EOF occurs in a url token, this will append the close paren.
+ * 3. If EOF occurs in a comment this will append the comment closer.
+ *
+ * A trailing backslash might also have been present in the input
+ * string. This is handled in different ways, depending on the
+ * context and arguments.
+ *
+ * If preserveBackslash is true, then the existing backslash at the
+ * end of inputString is preserved, and a new backslash is appended.
+ * That is, the input |\| is transformed to |\\|, and the
+ * input |'\| is transformed to |'\\'|.
+ *
+ * Otherwise, preserveBackslash is false:
+ * If the backslash appears in a string context, then the trailing
+ * backslash is dropped from inputString. That is, |"\| is
+ * transformed to |""|.
+ * If the backslash appears outside of a string context, then
+ * U+FFFD is appended. That is, |\| is transformed to a string
+ * with two characters: backslash followed by U+FFFD.
+ *
+ * Passing false for preserveBackslash makes the result conform to
+ * the CSS Syntax specification. However, passing true may give
+ * somewhat more intuitive behavior.
+ *
+ * @param inputString the input string
+ * @param preserveBackslash how to handle trailing backslashes
+ * @return the input string with the termination characters appended
+ */
+ DOMString performEOFFixup(DOMString inputString, boolean preserveBackslash);
+
+ /**
+ * Return the next token, or null at EOF.
+ */
+ CSSToken? nextToken();
+};