|
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
|
2 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
3 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
5 |
|
6 /* diagnostic reporting for CSS style sheet parser */ |
|
7 |
|
8 #ifndef mozilla_css_ErrorReporter_h_ |
|
9 #define mozilla_css_ErrorReporter_h_ |
|
10 |
|
11 // XXX turn this off for minimo builds |
|
12 #define CSS_REPORT_PARSE_ERRORS |
|
13 |
|
14 #include "nsString.h" |
|
15 |
|
16 struct nsCSSToken; |
|
17 class nsCSSStyleSheet; |
|
18 class nsCSSScanner; |
|
19 class nsIURI; |
|
20 |
|
21 namespace mozilla { |
|
22 namespace css { |
|
23 |
|
24 class Loader; |
|
25 |
|
26 // If CSS_REPORT_PARSE_ERRORS is not defined, all of this class's |
|
27 // methods become inline stubs. |
|
28 class MOZ_STACK_CLASS ErrorReporter { |
|
29 public: |
|
30 ErrorReporter(const nsCSSScanner &aScanner, |
|
31 const nsCSSStyleSheet *aSheet, |
|
32 const Loader *aLoader, |
|
33 nsIURI *aURI); |
|
34 ~ErrorReporter(); |
|
35 |
|
36 static void ReleaseGlobals(); |
|
37 |
|
38 void OutputError(); |
|
39 void OutputError(uint32_t aLineNumber, uint32_t aLineOffset); |
|
40 void ClearError(); |
|
41 |
|
42 // In all overloads of ReportUnexpected, aMessage is a stringbundle |
|
43 // name, which will be processed as a format string with the |
|
44 // indicated number of parameters. |
|
45 |
|
46 // no parameters |
|
47 void ReportUnexpected(const char *aMessage); |
|
48 // one parameter, a string |
|
49 void ReportUnexpected(const char *aMessage, const nsString& aParam); |
|
50 // one parameter, a token |
|
51 void ReportUnexpected(const char *aMessage, const nsCSSToken& aToken); |
|
52 // two parameters, a token and a character, in that order |
|
53 void ReportUnexpected(const char *aMessage, const nsCSSToken& aToken, |
|
54 char16_t aChar); |
|
55 |
|
56 // for ReportUnexpectedEOF, aExpected can be either a stringbundle |
|
57 // name or a single character. In the former case there may not be |
|
58 // any format parameters. |
|
59 void ReportUnexpectedEOF(const char *aExpected); |
|
60 void ReportUnexpectedEOF(char16_t aExpected); |
|
61 |
|
62 private: |
|
63 void AddToError(const nsString &aErrorText); |
|
64 |
|
65 #ifdef CSS_REPORT_PARSE_ERRORS |
|
66 nsAutoString mError; |
|
67 nsString mErrorLine; |
|
68 nsString mFileName; |
|
69 const nsCSSScanner *mScanner; |
|
70 const nsCSSStyleSheet *mSheet; |
|
71 const Loader *mLoader; |
|
72 nsIURI *mURI; |
|
73 uint64_t mInnerWindowID; |
|
74 uint32_t mErrorLineNumber; |
|
75 uint32_t mPrevErrorLineNumber; |
|
76 uint32_t mErrorColNumber; |
|
77 #endif |
|
78 }; |
|
79 |
|
80 #ifndef CSS_REPORT_PARSE_ERRORS |
|
81 inline ErrorReporter::ErrorReporter(const nsCSSScanner&, |
|
82 const nsCSSStyleSheet*, |
|
83 const Loader*, |
|
84 nsIURI*) {} |
|
85 inline ErrorReporter::~ErrorReporter() {} |
|
86 |
|
87 inline void ErrorReporter::ReleaseGlobals() {} |
|
88 |
|
89 inline void ErrorReporter::OutputError() {} |
|
90 inline void ErrorReporter::ClearError() {} |
|
91 |
|
92 inline void ErrorReporter::ReportUnexpected(const char *) {} |
|
93 inline void ErrorReporter::ReportUnexpected(const char *, const nsString &) {} |
|
94 inline void ErrorReporter::ReportUnexpected(const char *, const nsCSSToken &) {} |
|
95 inline void ErrorReporter::ReportUnexpected(const char *, const nsCSSToken &, |
|
96 char16_t) {} |
|
97 |
|
98 inline void ErrorReporter::ReportUnexpectedEOF(const char *) {} |
|
99 inline void ErrorReporter::ReportUnexpectedEOF(char16_t) {} |
|
100 |
|
101 inline void ErrorReporter::AddToError(const nsString &) {} |
|
102 #endif |
|
103 |
|
104 } // namespace css |
|
105 } // namespace mozilla |
|
106 |
|
107 #endif // mozilla_css_ErrorReporter_h_ |