Removed -8 suffixes from Reader methods.
This commit is contained in:
parent
eb266b4e27
commit
c473ef7dee
|
@ -135,7 +135,7 @@ final class Reader
|
|||
validateResult.sequence.to!string));
|
||||
characterCount_ = validateResult.characterCount;
|
||||
|
||||
this.sliceBuilder8 = SliceBuilder8(this);
|
||||
this.sliceBuilder = SliceBuilder(this);
|
||||
}
|
||||
|
||||
/// Get character at specified index relative to current position.
|
||||
|
@ -198,9 +198,9 @@ final class Reader
|
|||
/// returned slice will be shorter.
|
||||
///
|
||||
/// Returns: Characters starting at current position or an empty slice if out of bounds.
|
||||
char[] prefix8(const size_t length) @safe pure nothrow @nogc
|
||||
char[] prefix(const size_t length) @safe pure nothrow @nogc
|
||||
{
|
||||
return slice8(length);
|
||||
return slice(length);
|
||||
}
|
||||
|
||||
/// Get a slice view of the internal buffer, starting at the current position.
|
||||
|
@ -213,7 +213,7 @@ final class Reader
|
|||
/// be shorter.
|
||||
///
|
||||
/// Returns: Slice into the internal buffer or an empty slice if out of bounds.
|
||||
char[] slice8(const size_t end) @safe pure nothrow @nogc
|
||||
char[] slice(const size_t end) @safe pure nothrow @nogc
|
||||
{
|
||||
// Fast path in case the caller has already peek()ed all the way to end.
|
||||
if(end == lastDecodedCharOffset_)
|
||||
|
@ -252,9 +252,9 @@ final class Reader
|
|||
/// Params: length = Number or characters (code points, not bytes) to get.
|
||||
///
|
||||
/// Returns: Characters starting at current position.
|
||||
char[] get8(const size_t length) @safe pure nothrow @nogc
|
||||
char[] get(const size_t length) @safe pure nothrow @nogc
|
||||
{
|
||||
auto result = prefix8(length);
|
||||
auto result = prefix(length);
|
||||
forward(length);
|
||||
return result;
|
||||
}
|
||||
|
@ -283,7 +283,7 @@ final class Reader
|
|||
}
|
||||
|
||||
/// Used to build slices of read data in Reader; to avoid allocations.
|
||||
SliceBuilder8 sliceBuilder8;
|
||||
SliceBuilder sliceBuilder;
|
||||
|
||||
/// Get a string describing current buffer position, used for error messages.
|
||||
final Mark mark() @safe pure nothrow const @nogc { return Mark(line_, column_); }
|
||||
|
@ -349,12 +349,12 @@ private:
|
|||
/// changed due to how YAML interprets certain characters/strings.
|
||||
///
|
||||
/// See begin() documentation.
|
||||
struct SliceBuilder8
|
||||
struct SliceBuilder
|
||||
{
|
||||
private:
|
||||
// No copying by the user.
|
||||
@disable this(this);
|
||||
@disable void opAssign(ref SliceBuilder8);
|
||||
@disable void opAssign(ref SliceBuilder);
|
||||
|
||||
// Reader this builder works in.
|
||||
Reader reader_;
|
||||
|
@ -521,7 +521,7 @@ public:
|
|||
{
|
||||
private:
|
||||
// The slice builder affected by the transaction.
|
||||
SliceBuilder8* builder_ = null;
|
||||
SliceBuilder* builder_ = null;
|
||||
// Index of the return point of the transaction in StringBuilder.endStack_.
|
||||
size_t stackLevel_;
|
||||
// True after commit() has been called.
|
||||
|
@ -535,7 +535,7 @@ public:
|
|||
/// ended either by commit()-ing or reverting through the destructor.
|
||||
///
|
||||
/// Saves the current state of a slice.
|
||||
this(ref SliceBuilder8 builder) @system pure nothrow @nogc
|
||||
this(ref SliceBuilder builder) @system pure nothrow @nogc
|
||||
{
|
||||
builder_ = &builder;
|
||||
stackLevel_ = builder_.endStackUsed_;
|
||||
|
@ -816,7 +816,7 @@ void testPeekPrefixForward(R)()
|
|||
assert(reader.peek(2) == 't');
|
||||
assert(reader.peek(3) == 'a');
|
||||
assert(reader.peek(4) == '\0');
|
||||
assert(reader.prefix8(4) == "data");
|
||||
assert(reader.prefix(4) == "data");
|
||||
// assert(reader.prefix(6) == "data\0");
|
||||
reader.forward(2);
|
||||
assert(reader.peek(1) == 'a');
|
||||
|
|
|
@ -741,7 +741,7 @@ final class Scanner
|
|||
// Check one char first, then all 3, to prevent reading outside the buffer.
|
||||
return reader_.column == 0 &&
|
||||
reader_.peek() == '-' &&
|
||||
reader_.prefix8(3) == "---" &&
|
||||
reader_.prefix(3) == "---" &&
|
||||
" \t\0\n\r\u0085\u2028\u2029"d.canFind(reader_.peek(3));
|
||||
}
|
||||
|
||||
|
@ -751,7 +751,7 @@ final class Scanner
|
|||
// Check one char first, then all 3, to prevent reading outside the buffer.
|
||||
return reader_.column == 0 &&
|
||||
reader_.peek() == '.' &&
|
||||
reader_.prefix8(3) == "..." &&
|
||||
reader_.prefix(3) == "..." &&
|
||||
" \t\0\n\r\u0085\u2028\u2029"d.canFind(reader_.peek(3));
|
||||
}
|
||||
|
||||
|
@ -831,7 +831,7 @@ final class Scanner
|
|||
return;
|
||||
}
|
||||
|
||||
reader_.sliceBuilder8.write(reader_.get8(length));
|
||||
reader_.sliceBuilder.write(reader_.get(length));
|
||||
}
|
||||
|
||||
/// Scan and throw away all characters until next line break.
|
||||
|
@ -854,7 +854,7 @@ final class Scanner
|
|||
{
|
||||
++length;
|
||||
}
|
||||
reader_.sliceBuilder8.write(reader_.get8(length));
|
||||
reader_.sliceBuilder.write(reader_.get(length));
|
||||
}
|
||||
|
||||
|
||||
|
@ -904,19 +904,19 @@ final class Scanner
|
|||
reader_.forward();
|
||||
|
||||
// Scan directive name
|
||||
reader_.sliceBuilder8.begin();
|
||||
reader_.sliceBuilder.begin();
|
||||
scanDirectiveNameToSlice(startMark);
|
||||
if(error_) { return Token.init; }
|
||||
const name = reader_.sliceBuilder8.finish();
|
||||
const name = reader_.sliceBuilder.finish();
|
||||
|
||||
reader_.sliceBuilder8.begin();
|
||||
reader_.sliceBuilder.begin();
|
||||
|
||||
// Index where tag handle ends and suffix starts in a tag directive value.
|
||||
uint tagHandleEnd = uint.max;
|
||||
if(name == "YAML") { scanYAMLDirectiveValueToSlice(startMark); }
|
||||
else if(name == "TAG") { tagHandleEnd = scanTagDirectiveValueToSlice(startMark); }
|
||||
if(error_) { return Token.init; }
|
||||
const value = reader_.sliceBuilder8.finish();
|
||||
const value = reader_.sliceBuilder.finish();
|
||||
|
||||
Mark endMark = reader_.mark;
|
||||
|
||||
|
@ -975,7 +975,7 @@ final class Scanner
|
|||
// Skip the '.'.
|
||||
reader_.forward();
|
||||
|
||||
reader_.sliceBuilder8.write('.');
|
||||
reader_.sliceBuilder.write('.');
|
||||
scanYAMLDirectiveNumberToSlice(startMark);
|
||||
if(error_) { return; }
|
||||
|
||||
|
@ -1006,7 +1006,7 @@ final class Scanner
|
|||
uint length = 1;
|
||||
while(isDigit(reader_.peek(length))) { ++length; }
|
||||
|
||||
reader_.sliceBuilder8.write(reader_.get8(length));
|
||||
reader_.sliceBuilder.write(reader_.get(length));
|
||||
}
|
||||
|
||||
/// Scan value of a tag directive.
|
||||
|
@ -1021,10 +1021,10 @@ final class Scanner
|
|||
@system pure nothrow
|
||||
{
|
||||
findNextNonSpace();
|
||||
const startLength = reader_.sliceBuilder8.length;
|
||||
const startLength = reader_.sliceBuilder.length;
|
||||
scanTagDirectiveHandleToSlice(startMark);
|
||||
if(error_) { return uint.max; }
|
||||
const handleLength = cast(uint)(reader_.sliceBuilder8.length - startLength);
|
||||
const handleLength = cast(uint)(reader_.sliceBuilder.length - startLength);
|
||||
findNextNonSpace();
|
||||
scanTagDirectivePrefixToSlice(startMark);
|
||||
|
||||
|
@ -1095,11 +1095,11 @@ final class Scanner
|
|||
const startMark = reader_.mark;
|
||||
const dchar i = reader_.get();
|
||||
|
||||
reader_.sliceBuilder8.begin();
|
||||
reader_.sliceBuilder.begin();
|
||||
if(i == '*') { scanAlphaNumericToSlice!"an alias"(startMark); }
|
||||
else { scanAlphaNumericToSlice!"an anchor"(startMark); }
|
||||
// On error, value is discarded as we return immediately
|
||||
const value = reader_.sliceBuilder8.finish();
|
||||
const value = reader_.sliceBuilder.finish();
|
||||
if(error_) { return Token.init; }
|
||||
|
||||
if(!" \t\0\n\r\u0085\u2028\u2029"d.canFind(reader_.peek()) &&
|
||||
|
@ -1131,8 +1131,8 @@ final class Scanner
|
|||
const startMark = reader_.mark;
|
||||
dchar c = reader_.peek(1);
|
||||
|
||||
reader_.sliceBuilder8.begin();
|
||||
scope(failure) { reader_.sliceBuilder8.finish(); }
|
||||
reader_.sliceBuilder.begin();
|
||||
scope(failure) { reader_.sliceBuilder.finish(); }
|
||||
// Index where tag handle ends and tag suffix starts in the tag value
|
||||
// (slice) we will produce.
|
||||
uint handleEnd;
|
||||
|
@ -1156,7 +1156,7 @@ final class Scanner
|
|||
{
|
||||
reader_.forward();
|
||||
handleEnd = 0;
|
||||
reader_.sliceBuilder8.write('!');
|
||||
reader_.sliceBuilder.write('!');
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1177,14 +1177,14 @@ final class Scanner
|
|||
if(useHandle)
|
||||
{
|
||||
scanTagHandleToSlice!"tag"(startMark);
|
||||
handleEnd = cast(uint)reader_.sliceBuilder8.length;
|
||||
handleEnd = cast(uint)reader_.sliceBuilder.length;
|
||||
if(error_) { return Token.init; }
|
||||
}
|
||||
else
|
||||
{
|
||||
reader_.forward();
|
||||
reader_.sliceBuilder8.write('!');
|
||||
handleEnd = cast(uint)reader_.sliceBuilder8.length;
|
||||
reader_.sliceBuilder.write('!');
|
||||
handleEnd = cast(uint)reader_.sliceBuilder.length;
|
||||
}
|
||||
|
||||
scanTagURIToSlice!"tag"(startMark);
|
||||
|
@ -1193,7 +1193,7 @@ final class Scanner
|
|||
|
||||
if(" \0\n\r\u0085\u2028\u2029"d.canFind(reader_.peek()))
|
||||
{
|
||||
const slice = reader_.sliceBuilder8.finish();
|
||||
const slice = reader_.sliceBuilder.finish();
|
||||
return tagToken(startMark, reader_.mark, slice, handleEnd);
|
||||
}
|
||||
|
||||
|
@ -1224,13 +1224,13 @@ final class Scanner
|
|||
Mark endMark;
|
||||
uint indent = max(1, indent_ + 1);
|
||||
|
||||
reader_.sliceBuilder8.begin();
|
||||
alias Transaction = SliceBuilder8.Transaction;
|
||||
reader_.sliceBuilder.begin();
|
||||
alias Transaction = SliceBuilder.Transaction;
|
||||
// Used to strip the last line breaks written to the slice at the end of the
|
||||
// scalar, which may be needed based on chomping.
|
||||
Transaction breaksTransaction = Transaction(reader_.sliceBuilder8);
|
||||
Transaction breaksTransaction = Transaction(reader_.sliceBuilder);
|
||||
// Read the first indentation/line breaks before the scalar.
|
||||
size_t startLen = reader_.sliceBuilder8.length;
|
||||
size_t startLen = reader_.sliceBuilder.length;
|
||||
if(increment == int.min)
|
||||
{
|
||||
auto indentation = scanBlockScalarIndentationToSlice();
|
||||
|
@ -1258,8 +1258,8 @@ final class Scanner
|
|||
|
||||
// This transaction serves to rollback data read in the
|
||||
// scanBlockScalarBreaksToSlice() call.
|
||||
breaksTransaction = Transaction(reader_.sliceBuilder8);
|
||||
startLen = reader_.sliceBuilder8.length;
|
||||
breaksTransaction = Transaction(reader_.sliceBuilder);
|
||||
startLen = reader_.sliceBuilder.length;
|
||||
// The line breaks should actually be written _after_ the if() block
|
||||
// below. We work around that by inserting
|
||||
endMark = scanBlockScalarBreaksToSlice(indent);
|
||||
|
@ -1277,16 +1277,16 @@ final class Scanner
|
|||
{
|
||||
// No breaks were scanned; no need to insert the space in the
|
||||
// middle of slice.
|
||||
if(startLen == reader_.sliceBuilder8.length)
|
||||
if(startLen == reader_.sliceBuilder.length)
|
||||
{
|
||||
reader_.sliceBuilder8.write(' ');
|
||||
reader_.sliceBuilder.write(' ');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// We need to insert in the middle of the slice in case any line
|
||||
// breaks were scanned.
|
||||
reader_.sliceBuilder8.insert(lineBreak, startLen);
|
||||
reader_.sliceBuilder.insert(lineBreak, startLen);
|
||||
}
|
||||
|
||||
////this is Clark Evans's interpretation (also in the spec
|
||||
|
@ -1298,7 +1298,7 @@ final class Scanner
|
|||
// {
|
||||
// if(!" \t"d.canFind(reader_.peek()))
|
||||
// {
|
||||
// reader_.sliceBuilder8.write(' ');
|
||||
// reader_.sliceBuilder.write(' ');
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
|
@ -1308,7 +1308,7 @@ final class Scanner
|
|||
//}
|
||||
//else
|
||||
//{
|
||||
// reader_.sliceBuilder8.insertBack(lineBreak, endLen - startLen);
|
||||
// reader_.sliceBuilder.insertBack(lineBreak, endLen - startLen);
|
||||
//}
|
||||
}
|
||||
else
|
||||
|
@ -1329,18 +1329,18 @@ final class Scanner
|
|||
// be inserted _before_ the other line breaks.
|
||||
if(chomping == Chomping.Keep)
|
||||
{
|
||||
reader_.sliceBuilder8.insert(lineBreak, startLen);
|
||||
reader_.sliceBuilder.insert(lineBreak, startLen);
|
||||
}
|
||||
// If chomping is not Keep, breaksTransaction was cancelled so we can
|
||||
// directly write the first line break (as it isn't stripped - chomping
|
||||
// is not Strip)
|
||||
else
|
||||
{
|
||||
reader_.sliceBuilder8.write(lineBreak);
|
||||
reader_.sliceBuilder.write(lineBreak);
|
||||
}
|
||||
}
|
||||
|
||||
const slice = reader_.sliceBuilder8.finish();
|
||||
const slice = reader_.sliceBuilder.finish();
|
||||
return scalarToken(startMark, endMark, slice, style);
|
||||
}
|
||||
|
||||
|
@ -1455,7 +1455,7 @@ final class Scanner
|
|||
{
|
||||
if(reader_.peek() != ' ')
|
||||
{
|
||||
reader_.sliceBuilder8.write(scanLineBreak());
|
||||
reader_.sliceBuilder.write(scanLineBreak());
|
||||
endMark = reader_.mark;
|
||||
continue;
|
||||
}
|
||||
|
@ -1478,7 +1478,7 @@ final class Scanner
|
|||
{
|
||||
while(reader_.column < indent && reader_.peek() == ' ') { reader_.forward(); }
|
||||
if(!"\n\r\u0085\u2028\u2029"d.canFind(reader_.peek())) { break; }
|
||||
reader_.sliceBuilder8.write(scanLineBreak());
|
||||
reader_.sliceBuilder.write(scanLineBreak());
|
||||
endMark = reader_.mark;
|
||||
}
|
||||
|
||||
|
@ -1493,8 +1493,8 @@ final class Scanner
|
|||
const startMark = reader_.mark;
|
||||
const quote = reader_.get();
|
||||
|
||||
reader_.sliceBuilder8.begin();
|
||||
scope(exit) if(error_) { reader_.sliceBuilder8.finish(); }
|
||||
reader_.sliceBuilder.begin();
|
||||
scope(exit) if(error_) { reader_.sliceBuilder.finish(); }
|
||||
|
||||
scanFlowScalarNonSpacesToSlice(quotes, startMark);
|
||||
if(error_) { return Token.init; }
|
||||
|
@ -1508,7 +1508,7 @@ final class Scanner
|
|||
}
|
||||
reader_.forward();
|
||||
|
||||
auto slice = reader_.sliceBuilder8.finish();
|
||||
auto slice = reader_.sliceBuilder.finish();
|
||||
return scalarToken(startMark, reader_.mark, slice, quotes);
|
||||
}
|
||||
|
||||
|
@ -1532,7 +1532,7 @@ final class Scanner
|
|||
// while(!search.canFind(reader_.peek(length))) { ++length; }
|
||||
outer: for(;;)
|
||||
{
|
||||
const char[] slice = reader_.slice8(length + 32);
|
||||
const char[] slice = reader_.slice(length + 32);
|
||||
if(slice.length == length)
|
||||
{
|
||||
error("While reading a flow scalar", startMark,
|
||||
|
@ -1548,19 +1548,19 @@ final class Scanner
|
|||
}
|
||||
}
|
||||
|
||||
reader_.sliceBuilder8.write(reader_.get8(length));
|
||||
reader_.sliceBuilder.write(reader_.get(length));
|
||||
|
||||
c = reader_.peek();
|
||||
if(quotes == SingleQuoted && c == '\'' && reader_.peek(1) == '\'')
|
||||
{
|
||||
reader_.forward(2);
|
||||
reader_.sliceBuilder8.write('\'');
|
||||
reader_.sliceBuilder.write('\'');
|
||||
}
|
||||
else if((quotes == DoubleQuoted && c == '\'') ||
|
||||
(quotes == SingleQuoted && "\"\\"d.canFind(c)))
|
||||
{
|
||||
reader_.forward();
|
||||
reader_.sliceBuilder8.write(c);
|
||||
reader_.sliceBuilder.write(c);
|
||||
}
|
||||
else if(quotes == DoubleQuoted && c == '\\')
|
||||
{
|
||||
|
@ -1573,7 +1573,7 @@ final class Scanner
|
|||
// place (in a slice) in case of '\P' and '\L' (very uncommon,
|
||||
// but we don't want to break the spec)
|
||||
char[2] escapeSequence = ['\\', cast(char)c];
|
||||
reader_.sliceBuilder8.write(escapeSequence);
|
||||
reader_.sliceBuilder.write(escapeSequence);
|
||||
}
|
||||
else if(dyaml.escapes.escapeHexCodeList.canFind(c))
|
||||
{
|
||||
|
@ -1587,10 +1587,10 @@ final class Scanner
|
|||
reader_.peek(i)), reader_.mark);
|
||||
return;
|
||||
}
|
||||
char[] hex = reader_.get8(hexLength);
|
||||
char[] hex = reader_.get(hexLength);
|
||||
char[2] escapeStart = ['\\', cast(char) c];
|
||||
reader_.sliceBuilder8.write(escapeStart);
|
||||
reader_.sliceBuilder8.write(hex);
|
||||
reader_.sliceBuilder.write(escapeStart);
|
||||
reader_.sliceBuilder.write(hex);
|
||||
bool overflow;
|
||||
// Note: This is just error checking; Parser does the actual
|
||||
// escaping (otherwise we could accidentally create an
|
||||
|
@ -1636,7 +1636,7 @@ final class Scanner
|
|||
// Increase length as long as we see whitespace.
|
||||
size_t length = 0;
|
||||
while(" \t"d.canFind(reader_.peek(length))) { ++length; }
|
||||
auto whitespaces = reader_.prefix8(length);
|
||||
auto whitespaces = reader_.prefix(length);
|
||||
|
||||
// Can check the last byte without striding because '\0' is ASCII
|
||||
const c = reader_.peek(length);
|
||||
|
@ -1651,7 +1651,7 @@ final class Scanner
|
|||
if(!"\n\r\u0085\u2028\u2029"d.canFind(c))
|
||||
{
|
||||
reader_.forward(length);
|
||||
reader_.sliceBuilder8.write(whitespaces);
|
||||
reader_.sliceBuilder.write(whitespaces);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1659,7 +1659,7 @@ final class Scanner
|
|||
reader_.forward(length);
|
||||
const lineBreak = scanLineBreak();
|
||||
|
||||
if(lineBreak != '\n') { reader_.sliceBuilder8.write(lineBreak); }
|
||||
if(lineBreak != '\n') { reader_.sliceBuilder.write(lineBreak); }
|
||||
|
||||
// If we have extra line breaks after the first, scan them into the
|
||||
// slice.
|
||||
|
@ -1667,7 +1667,7 @@ final class Scanner
|
|||
if(error_) { return; }
|
||||
|
||||
// No extra breaks, one normal line break. Replace it with a space.
|
||||
if(lineBreak == '\n' && !extraBreaks) { reader_.sliceBuilder8.write(' '); }
|
||||
if(lineBreak == '\n' && !extraBreaks) { reader_.sliceBuilder.write(' '); }
|
||||
}
|
||||
|
||||
/// Scan line breaks in a flow scalar.
|
||||
|
@ -1684,7 +1684,7 @@ final class Scanner
|
|||
for(;;)
|
||||
{
|
||||
// Instead of checking indentation, we check for document separators.
|
||||
const prefix = reader_.prefix8(3);
|
||||
const prefix = reader_.prefix(3);
|
||||
if((prefix == "---" || prefix == "...") &&
|
||||
" \t\0\n\r\u0085\u2028\u2029"d.canFind(reader_.peek(3)))
|
||||
{
|
||||
|
@ -1701,7 +1701,7 @@ final class Scanner
|
|||
|
||||
const lineBreak = scanLineBreak();
|
||||
anyBreaks = true;
|
||||
reader_.sliceBuilder8.write(lineBreak);
|
||||
reader_.sliceBuilder.write(lineBreak);
|
||||
}
|
||||
return anyBreaks;
|
||||
}
|
||||
|
@ -1723,9 +1723,9 @@ final class Scanner
|
|||
|
||||
mixin FastCharSearch!" \t\0\n\r\u0085\u2028\u2029"d search;
|
||||
|
||||
reader_.sliceBuilder8.begin();
|
||||
reader_.sliceBuilder.begin();
|
||||
|
||||
alias Transaction = SliceBuilder8.Transaction;
|
||||
alias Transaction = SliceBuilder.Transaction;
|
||||
Transaction spacesTransaction;
|
||||
// Stop at a comment.
|
||||
while(reader_.peek() != '#')
|
||||
|
@ -1750,7 +1750,7 @@ final class Scanner
|
|||
{
|
||||
// This is an error; throw the slice away.
|
||||
spacesTransaction.commit();
|
||||
reader_.sliceBuilder8.finish();
|
||||
reader_.sliceBuilder.finish();
|
||||
reader_.forward(length);
|
||||
error("While scanning a plain scalar", startMark,
|
||||
"found unexpected ':' . Please check "
|
||||
|
@ -1763,16 +1763,16 @@ final class Scanner
|
|||
|
||||
allowSimpleKey_ = false;
|
||||
|
||||
reader_.sliceBuilder8.write(reader_.get8(length));
|
||||
reader_.sliceBuilder.write(reader_.get(length));
|
||||
|
||||
endMark = reader_.mark;
|
||||
|
||||
spacesTransaction.commit();
|
||||
spacesTransaction = Transaction(reader_.sliceBuilder8);
|
||||
spacesTransaction = Transaction(reader_.sliceBuilder);
|
||||
|
||||
const startLength = reader_.sliceBuilder8.length;
|
||||
const startLength = reader_.sliceBuilder.length;
|
||||
scanPlainSpacesToSlice(startMark);
|
||||
if(startLength == reader_.sliceBuilder8.length ||
|
||||
if(startLength == reader_.sliceBuilder.length ||
|
||||
(flowLevel_ == 0 && reader_.column < indent))
|
||||
{
|
||||
break;
|
||||
|
@ -1780,7 +1780,7 @@ final class Scanner
|
|||
}
|
||||
|
||||
spacesTransaction.__dtor();
|
||||
const slice = reader_.sliceBuilder8.finish();
|
||||
const slice = reader_.sliceBuilder.finish();
|
||||
|
||||
return scalarToken(startMark, endMark, slice, ScalarStyle.Plain);
|
||||
}
|
||||
|
@ -1797,14 +1797,14 @@ final class Scanner
|
|||
// Get as many plain spaces as there are.
|
||||
size_t length = 0;
|
||||
while(reader_.peek(length) == ' ') { ++length; }
|
||||
char[] whitespaces = reader_.get8(length);
|
||||
char[] whitespaces = reader_.get(length);
|
||||
|
||||
dchar c = reader_.peek();
|
||||
// No newline after the spaces (if any)
|
||||
if(!"\n\r\u0085\u2028\u2029"d.canFind(c))
|
||||
{
|
||||
// We have spaces, but no newline.
|
||||
if(whitespaces.length > 0) { reader_.sliceBuilder8.write(whitespaces); }
|
||||
if(whitespaces.length > 0) { reader_.sliceBuilder.write(whitespaces); }
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1814,7 +1814,7 @@ final class Scanner
|
|||
|
||||
static bool end(Reader reader_) @safe pure nothrow @nogc
|
||||
{
|
||||
return ("---" == reader_.prefix8(3) || "..." == reader_.prefix8(3))
|
||||
return ("---" == reader_.prefix(3) || "..." == reader_.prefix(3))
|
||||
&& " \t\0\n\r\u0085\u2028\u2029"d.canFind(reader_.peek(3));
|
||||
}
|
||||
|
||||
|
@ -1822,9 +1822,9 @@ final class Scanner
|
|||
|
||||
bool extraBreaks = false;
|
||||
|
||||
alias Transaction = SliceBuilder8.Transaction;
|
||||
auto transaction = Transaction(reader_.sliceBuilder8);
|
||||
if(lineBreak != '\n') { reader_.sliceBuilder8.write(lineBreak); }
|
||||
alias Transaction = SliceBuilder.Transaction;
|
||||
auto transaction = Transaction(reader_.sliceBuilder);
|
||||
if(lineBreak != '\n') { reader_.sliceBuilder.write(lineBreak); }
|
||||
while(" \n\r\u0085\u2028\u2029"d.canFind(reader_.peek()))
|
||||
{
|
||||
if(reader_.peek() == ' ') { reader_.forward(); }
|
||||
|
@ -1832,7 +1832,7 @@ final class Scanner
|
|||
{
|
||||
const lBreak = scanLineBreak();
|
||||
extraBreaks = true;
|
||||
reader_.sliceBuilder8.write(lBreak);
|
||||
reader_.sliceBuilder.write(lBreak);
|
||||
|
||||
if(end(reader_)) { return; }
|
||||
}
|
||||
|
@ -1840,7 +1840,7 @@ final class Scanner
|
|||
transaction.commit();
|
||||
|
||||
// No line breaks, only a space.
|
||||
if(lineBreak == '\n' && !extraBreaks) { reader_.sliceBuilder8.write(' '); }
|
||||
if(lineBreak == '\n' && !extraBreaks) { reader_.sliceBuilder.write(' '); }
|
||||
}
|
||||
|
||||
/// Scan handle of a tag token.
|
||||
|
@ -1878,7 +1878,7 @@ final class Scanner
|
|||
++length;
|
||||
}
|
||||
|
||||
reader_.sliceBuilder8.write(reader_.get8(length));
|
||||
reader_.sliceBuilder.write(reader_.get(length));
|
||||
}
|
||||
|
||||
/// Scan URI in a tag token.
|
||||
|
@ -1892,15 +1892,15 @@ final class Scanner
|
|||
{
|
||||
// Note: we do not check if URI is well-formed.
|
||||
dchar c = reader_.peek();
|
||||
const startLen = reader_.sliceBuilder8.length;
|
||||
const startLen = reader_.sliceBuilder.length;
|
||||
{
|
||||
uint length = 0;
|
||||
while(c.isAlphaNum || "-;/?:@&=+$,_.!~*\'()[]%"d.canFind(c))
|
||||
{
|
||||
if(c == '%')
|
||||
{
|
||||
auto chars = reader_.get8(length);
|
||||
reader_.sliceBuilder8.write(chars);
|
||||
auto chars = reader_.get(length);
|
||||
reader_.sliceBuilder.write(chars);
|
||||
length = 0;
|
||||
scanURIEscapesToSlice!name(startMark);
|
||||
if(error_) { return; }
|
||||
|
@ -1910,13 +1910,13 @@ final class Scanner
|
|||
}
|
||||
if(length > 0)
|
||||
{
|
||||
auto chars = reader_.get8(length);
|
||||
reader_.sliceBuilder8.write(chars);
|
||||
auto chars = reader_.get(length);
|
||||
reader_.sliceBuilder.write(chars);
|
||||
length = 0;
|
||||
}
|
||||
}
|
||||
// OK if we scanned something, error otherwise.
|
||||
if(reader_.sliceBuilder8.length > startLen) { return; }
|
||||
if(reader_.sliceBuilder.length > startLen) { return; }
|
||||
|
||||
enum contextMsg = "While parsing a " ~ name;
|
||||
error(contextMsg, startMark, expected("URI", c), reader_.mark);
|
||||
|
@ -1947,7 +1947,7 @@ final class Scanner
|
|||
import std.utf;
|
||||
size_t nextChar;
|
||||
const c = std.utf.decode(bytes[], nextChar);
|
||||
reader_.sliceBuilder8.write(c);
|
||||
reader_.sliceBuilder.write(c);
|
||||
if(bytes.length - nextChar > 0)
|
||||
{
|
||||
core.stdc.string.memmove(bytes.ptr, bytes.ptr + nextChar,
|
||||
|
@ -2024,7 +2024,7 @@ final class Scanner
|
|||
|
||||
if(c == '\n' || c == '\r' || c == '\u0085')
|
||||
{
|
||||
if(reader_.prefix8(2) == "\r\n") { reader_.forward(2); }
|
||||
if(reader_.prefix(2) == "\r\n") { reader_.forward(2); }
|
||||
else { reader_.forward(); }
|
||||
return '\n';
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue