222 Lexer(
const Lexer &) =
delete;
223 void operator=(
const Lexer &) =
delete;
227 llvm::BumpPtrAllocator &Allocator;
233 const char *
const BufferStart;
234 const char *
const BufferEnd;
236 const char *BufferPtr;
240 const char *CommentEnd;
249 enum LexerCommentState : uint8_t {
251 LCS_InsideBCPLComment,
257 LexerCommentState CommentState;
259 enum LexerState : uint8_t {
265 LS_VerbatimBlockFirstLine,
269 LS_VerbatimBlockBody,
291 StringRef resolveHTMLNamedCharacterReference(StringRef Name)
const;
294 StringRef resolveHTMLDecimalCharacterReference(StringRef Name)
const;
297 StringRef resolveHTMLHexCharacterReference(StringRef Name)
const;
299 void formTokenWithChars(
Token &
Result,
const char *TokEnd,
302 void formTextToken(
Token &
Result,
const char *TokEnd) {
303 StringRef
Text(BufferPtr, TokEnd - BufferPtr);
309 assert(Loc >= BufferStart && Loc <= BufferEnd &&
310 "Location out of range for this buffer!");
312 const unsigned CharNo = Loc - BufferStart;
313 return FileLoc.getLocWithOffset(CharNo);
317 return Diags.Report(Loc, DiagID);
321 void skipLineStartingDecorations();
324 const char *skipTextToken();
327 void lexCommentText(
Token &
T);
329 void setupAndLexVerbatimBlock(
Token &
T,
const char *TextBegin,
char Marker,
332 void lexVerbatimBlockFirstLine(
Token &
T);
334 void lexVerbatimBlockBody(
Token &
T);
336 void setupAndLexVerbatimLine(
Token &
T,
const char *TextBegin,
339 void lexVerbatimLineText(
Token &
T);
341 void lexHTMLCharacterReference(
Token &
T);
343 void setupAndLexHTMLStartTag(
Token &
T);
345 void lexHTMLStartTag(
Token &
T);
347 void setupAndLexHTMLEndTag(
Token &
T);
349 void lexHTMLEndTag(
Token &
T);
354 const char *BufferStart,
const char *BufferEnd,
355 bool ParseCommands =
true);