зеркало из https://github.com/mozilla/gecko-dev.git
Bug 856317 - Expose the column number of style rules via inIDOMUtils. r=dbaron
This commit is contained in:
Родитель
ab74228011
Коммит
206e93e61e
|
@ -16,12 +16,13 @@ interface nsIDOMFontFaceList;
|
|||
interface nsIDOMRange;
|
||||
interface nsIDOMCSSStyleSheet;
|
||||
|
||||
[scriptable, uuid(1d9c29dc-230a-441e-bba9-49104ffa185e)]
|
||||
[scriptable, uuid(c10e5142-e936-45d7-ad5b-21a32ce739a3)]
|
||||
interface inIDOMUtils : nsISupports
|
||||
{
|
||||
// CSS utilities
|
||||
nsISupportsArray getCSSStyleRules(in nsIDOMElement aElement, [optional] in DOMString aPseudo);
|
||||
unsigned long getRuleLine(in nsIDOMCSSStyleRule aRule);
|
||||
unsigned long getRuleColumn(in nsIDOMCSSStyleRule aRule);
|
||||
|
||||
// Utilities for working with selectors. We don't have a JS OM representation
|
||||
// of a single selector or a selector list yet, but given a rule we can index
|
||||
|
|
|
@ -230,6 +230,18 @@ inDOMUtils::GetRuleLine(nsIDOMCSSStyleRule *aRule, uint32_t *_retval)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
inDOMUtils::GetRuleColumn(nsIDOMCSSStyleRule *aRule, uint32_t *_retval)
|
||||
{
|
||||
ErrorResult rv;
|
||||
nsRefPtr<StyleRule> rule = GetRuleFromDOMRule(aRule, rv);
|
||||
if (rv.Failed()) {
|
||||
return rv.ErrorCode();
|
||||
}
|
||||
*_retval = rule->GetColumnNumber();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
inDOMUtils::GetSelectorCount(nsIDOMCSSStyleRule* aRule, uint32_t *aCount)
|
||||
{
|
||||
|
|
|
@ -20,6 +20,8 @@ MOCHITEST_FILES =\
|
|||
test_bug557726.html \
|
||||
test_bug609549.xhtml \
|
||||
test_bug806192.html \
|
||||
test_bug856317.html \
|
||||
bug856317.css \
|
||||
test_isinheritableproperty.html \
|
||||
$(NULL)
|
||||
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -1281,6 +1281,7 @@ StyleRule::StyleRule(nsCSSSelectorList* aSelector,
|
|||
mImportantRule(nullptr),
|
||||
mDOMRule(nullptr),
|
||||
mLineNumber(0),
|
||||
mColumnNumber(0),
|
||||
mWasMatched(false)
|
||||
{
|
||||
NS_PRECONDITION(aDeclaration, "must have a declaration");
|
||||
|
@ -1294,6 +1295,7 @@ StyleRule::StyleRule(const StyleRule& aCopy)
|
|||
mImportantRule(nullptr),
|
||||
mDOMRule(nullptr),
|
||||
mLineNumber(aCopy.mLineNumber),
|
||||
mColumnNumber(aCopy.mColumnNumber),
|
||||
mWasMatched(false)
|
||||
{
|
||||
// rest is constructed lazily on existing data
|
||||
|
@ -1308,6 +1310,7 @@ StyleRule::StyleRule(StyleRule& aCopy,
|
|||
mImportantRule(nullptr),
|
||||
mDOMRule(aCopy.mDOMRule),
|
||||
mLineNumber(aCopy.mLineNumber),
|
||||
mColumnNumber(aCopy.mColumnNumber),
|
||||
mWasMatched(false)
|
||||
{
|
||||
// The DOM rule is replacing |aCopy| with |this|, so transfer
|
||||
|
|
|
@ -317,7 +317,10 @@ public:
|
|||
nsCSSSelectorList* Selector() { return mSelector; }
|
||||
|
||||
uint32_t GetLineNumber() const { return mLineNumber; }
|
||||
void SetLineNumber(uint32_t aLineNumber) { mLineNumber = aLineNumber; }
|
||||
uint32_t GetColumnNumber() const { return mColumnNumber; }
|
||||
void SetLineNumberAndColumnNumber(uint32_t aLineNumber,
|
||||
uint32_t aColumnNumber)
|
||||
{ mLineNumber = aLineNumber; mColumnNumber = aColumnNumber; }
|
||||
|
||||
Declaration* GetDeclaration() const { return mDeclaration; }
|
||||
|
||||
|
@ -373,7 +376,8 @@ private:
|
|||
ImportantRule* mImportantRule; // initialized by RuleMatched
|
||||
DOMCSSStyleRule* mDOMRule;
|
||||
// Keep the same type so that MSVC packs them.
|
||||
uint32_t mLineNumber : 31;
|
||||
uint32_t mLineNumber;
|
||||
uint32_t mColumnNumber : 31;
|
||||
uint32_t mWasMatched : 1;
|
||||
|
||||
private:
|
||||
|
|
|
@ -331,6 +331,7 @@ protected:
|
|||
|
||||
bool GetToken(bool aSkipWS);
|
||||
void UngetToken();
|
||||
bool GetNextTokenLocation(bool aSkipWS, uint32_t *linenum, uint32_t *colnum);
|
||||
|
||||
bool ExpectSymbol(PRUnichar aSymbol, bool aSkipWS);
|
||||
bool ExpectEndProperty();
|
||||
|
@ -1436,6 +1437,21 @@ CSSParserImpl::UngetToken()
|
|||
mHavePushBack = true;
|
||||
}
|
||||
|
||||
bool
|
||||
CSSParserImpl::GetNextTokenLocation(bool aSkipWS, uint32_t *linenum, uint32_t *colnum)
|
||||
{
|
||||
// Peek at next token so that mScanner updates line and column vals
|
||||
if (!GetToken(aSkipWS)) {
|
||||
return false;
|
||||
}
|
||||
UngetToken();
|
||||
// The scanner uses one-indexing for line numbers but zero-indexing
|
||||
// for column numbers.
|
||||
*linenum = mScanner->GetLineNumber();
|
||||
*colnum = 1 + mScanner->GetColumnNumber();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
CSSParserImpl::ExpectSymbol(PRUnichar aSymbol,
|
||||
bool aSkipWS)
|
||||
|
@ -2888,8 +2904,9 @@ CSSParserImpl::ParseRuleSet(RuleAppendFunc aAppendFunc, void* aData,
|
|||
{
|
||||
// First get the list of selectors for the rule
|
||||
nsCSSSelectorList* slist = nullptr;
|
||||
uint32_t linenum = mScanner->GetLineNumber();
|
||||
if (! ParseSelectorList(slist, PRUnichar('{'))) {
|
||||
uint32_t linenum, colnum;
|
||||
if (!GetNextTokenLocation(true, &linenum, &colnum) ||
|
||||
!ParseSelectorList(slist, PRUnichar('{'))) {
|
||||
REPORT_UNEXPECTED(PEBadSelectorRSIgnored);
|
||||
OUTPUT_ERROR();
|
||||
SkipRuleSet(aInsideBraces);
|
||||
|
@ -2917,7 +2934,7 @@ CSSParserImpl::ParseRuleSet(RuleAppendFunc aAppendFunc, void* aData,
|
|||
// Translate the selector list and declaration block into style data
|
||||
|
||||
nsRefPtr<css::StyleRule> rule = new css::StyleRule(slist, declaration);
|
||||
rule->SetLineNumber(linenum);
|
||||
rule->SetLineNumberAndColumnNumber(linenum, colnum);
|
||||
(*aAppendFunc)(rule, aData);
|
||||
|
||||
return true;
|
||||
|
|
Загрузка…
Ссылка в новой задаче