Scanner style.
This commit is contained in:
parent
10120b53c2
commit
aadf3232f0
|
@ -785,7 +785,7 @@ final class Scanner
|
||||||
///Move to the next non-space character.
|
///Move to the next non-space character.
|
||||||
void findNextNonSpace() @safe
|
void findNextNonSpace() @safe
|
||||||
{
|
{
|
||||||
while(reader_.peek() == ' '){reader_.forward();}
|
while(reader_.peek() == ' ') { reader_.forward(); }
|
||||||
}
|
}
|
||||||
|
|
||||||
///Scan a string of alphanumeric or "-_" characters.
|
///Scan a string of alphanumeric or "-_" characters.
|
||||||
|
@ -811,7 +811,10 @@ final class Scanner
|
||||||
dstring scanToNextBreak() @safe
|
dstring scanToNextBreak() @safe
|
||||||
{
|
{
|
||||||
uint length = 0;
|
uint length = 0;
|
||||||
while(!"\0\n\r\u0085\u2028\u2029"d.canFind(reader_.peek(length))){++length;}
|
while(!"\0\n\r\u0085\u2028\u2029"d.canFind(reader_.peek(length)))
|
||||||
|
{
|
||||||
|
++length;
|
||||||
|
}
|
||||||
return reader_.get(length);
|
return reader_.get(length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -912,11 +915,11 @@ final class Scanner
|
||||||
enforce(isDigit(reader_.peek()),
|
enforce(isDigit(reader_.peek()),
|
||||||
new Error("While scanning a directive", startMark,
|
new Error("While scanning a directive", startMark,
|
||||||
"expected a digit, but found: " ~
|
"expected a digit, but found: " ~
|
||||||
to!string(reader_.peek()), reader_.mark));
|
reader_.peek().to!string, reader_.mark));
|
||||||
|
|
||||||
//Already found the first digit in the enforce(), so set length to 1.
|
// Already found the first digit in the enforce(), so set length to 1.
|
||||||
uint length = 1;
|
uint length = 1;
|
||||||
while(isDigit(reader_.peek(length))){++length;}
|
while(isDigit(reader_.peek(length))) { ++length; }
|
||||||
|
|
||||||
return reader_.get(length);
|
return reader_.get(length);
|
||||||
}
|
}
|
||||||
|
@ -1402,24 +1405,24 @@ final class Scanner
|
||||||
///Scan plain scalar token (no block, no quotes).
|
///Scan plain scalar token (no block, no quotes).
|
||||||
Token scanPlain() @system
|
Token scanPlain() @system
|
||||||
{
|
{
|
||||||
//We keep track of the allowSimpleKey_ flag here.
|
// We keep track of the allowSimpleKey_ flag here.
|
||||||
//Indentation rules are loosed for the flow context
|
// Indentation rules are loosed for the flow context
|
||||||
//Using appender_, so clear it when we're done.
|
// Using appender_, so clear it when we're done.
|
||||||
scope(exit){appender_.clear();}
|
scope(exit) { appender_.clear(); }
|
||||||
const startMark = reader_.mark;
|
const startMark = reader_.mark;
|
||||||
Mark endMark = startMark;
|
Mark endMark = startMark;
|
||||||
const indent = indent_ + 1;
|
const indent = indent_ + 1;
|
||||||
|
|
||||||
//We allow zero indentation for scalars, but then we need to check for
|
// We allow zero indentation for scalars, but then we need to check for
|
||||||
//document separators at the beginning of the line.
|
// document separators at the beginning of the line.
|
||||||
//if(indent == 0){indent = 1;}
|
// if(indent == 0) { indent = 1; }
|
||||||
dstring spaces;
|
dstring spaces;
|
||||||
|
|
||||||
mixin FastCharSearch!" \t\0\n\r\u0085\u2028\u2029"d search;
|
mixin FastCharSearch!" \t\0\n\r\u0085\u2028\u2029"d search;
|
||||||
|
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
if(reader_.peek() == '#'){break;}
|
if(reader_.peek() == '#') { break; }
|
||||||
|
|
||||||
uint length = 0;
|
uint length = 0;
|
||||||
|
|
||||||
|
@ -1430,11 +1433,11 @@ final class Scanner
|
||||||
const bool done = search.canFind(c) || (flowLevel_ == 0 && c == ':' &&
|
const bool done = search.canFind(c) || (flowLevel_ == 0 && c == ':' &&
|
||||||
search.canFind(reader_.peek(length + 1))) ||
|
search.canFind(reader_.peek(length + 1))) ||
|
||||||
(flowLevel_ > 0 && ",:?[]{}"d.canFind(c));
|
(flowLevel_ > 0 && ",:?[]{}"d.canFind(c));
|
||||||
if(done){break;}
|
if(done) { break; }
|
||||||
++length;
|
++length;
|
||||||
}
|
}
|
||||||
|
|
||||||
//It's not clear what we should do with ':' in the flow context.
|
// It's not clear what we should do with ':' in the flow context.
|
||||||
if(flowLevel_ > 0 && c == ':' &&
|
if(flowLevel_ > 0 && c == ':' &&
|
||||||
!search.canFind(reader_.peek(length + 1)) &&
|
!search.canFind(reader_.peek(length + 1)) &&
|
||||||
!",[]{}"d.canFind(reader_.peek(length + 1)))
|
!",[]{}"d.canFind(reader_.peek(length + 1)))
|
||||||
|
@ -1446,7 +1449,7 @@ final class Scanner
|
||||||
"for details.", reader_.mark);
|
"for details.", reader_.mark);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(length == 0){break;}
|
if(length == 0) { break; }
|
||||||
allowSimpleKey_ = false;
|
allowSimpleKey_ = false;
|
||||||
|
|
||||||
appender_.put(spaces);
|
appender_.put(spaces);
|
||||||
|
@ -1461,7 +1464,9 @@ final class Scanner
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return scalarToken(startMark, endMark, to!string(cast(dstring)appender_.data), ScalarStyle.Plain);
|
return scalarToken(startMark, endMark,
|
||||||
|
to!string(cast(dstring)appender_.data),
|
||||||
|
ScalarStyle.Plain);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Scan spaces in a plain scalar.
|
/// Scan spaces in a plain scalar.
|
||||||
|
@ -1472,7 +1477,7 @@ final class Scanner
|
||||||
auto appender = appender!dstring();
|
auto appender = appender!dstring();
|
||||||
|
|
||||||
uint length = 0;
|
uint length = 0;
|
||||||
while(reader_.peek(length) == ' '){++length;}
|
while(reader_.peek(length) == ' ') { ++length; }
|
||||||
dstring whitespaces = reader_.get(length);
|
dstring whitespaces = reader_.get(length);
|
||||||
|
|
||||||
dchar c = reader_.peek();
|
dchar c = reader_.peek();
|
||||||
|
@ -1492,7 +1497,7 @@ final class Scanner
|
||||||
dstring breaks;
|
dstring breaks;
|
||||||
while(" \n\r\u0085\u2028\u2029"d.canFind(reader_.peek()))
|
while(" \n\r\u0085\u2028\u2029"d.canFind(reader_.peek()))
|
||||||
{
|
{
|
||||||
if(reader_.peek() == ' '){reader_.forward();}
|
if(reader_.peek() == ' ') { reader_.forward(); }
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
breaks ~= scanLineBreak();
|
breaks ~= scanLineBreak();
|
||||||
|
@ -1518,7 +1523,7 @@ final class Scanner
|
||||||
dchar c = reader_.peek();
|
dchar c = reader_.peek();
|
||||||
enforce(c == '!',
|
enforce(c == '!',
|
||||||
new Error("While scanning a " ~ name, startMark,
|
new Error("While scanning a " ~ name, startMark,
|
||||||
"expected a '!', but found: " ~ to!string(c), reader_.mark));
|
"expected a '!', but found: " ~ c.to!string, reader_.mark));
|
||||||
|
|
||||||
uint length = 1;
|
uint length = 1;
|
||||||
c = reader_.peek(length);
|
c = reader_.peek(length);
|
||||||
|
@ -1533,7 +1538,7 @@ final class Scanner
|
||||||
{
|
{
|
||||||
reader_.forward(length);
|
reader_.forward(length);
|
||||||
throw new Error("While scanning a " ~ name, startMark,
|
throw new Error("While scanning a " ~ name, startMark,
|
||||||
"expected a '!', but found: " ~ to!string(c),
|
"expected a '!', but found: " ~ c.to!string,
|
||||||
reader_.mark);
|
reader_.mark);
|
||||||
}
|
}
|
||||||
++length;
|
++length;
|
||||||
|
@ -1544,9 +1549,9 @@ final class Scanner
|
||||||
///Scan URI in a tag token.
|
///Scan URI in a tag token.
|
||||||
dstring scanTagURI(const string name, const Mark startMark) @system
|
dstring scanTagURI(const string name, const Mark startMark) @system
|
||||||
{
|
{
|
||||||
//Note: we do not check if URI is well-formed.
|
// Note: we do not check if URI is well-formed.
|
||||||
//Using appender_, so clear it when we're done.
|
// Using appender_, so clear it when we're done.
|
||||||
scope(exit){appender_.clear();}
|
scope(exit) { appender_.clear(); }
|
||||||
uint length = 0;
|
uint length = 0;
|
||||||
|
|
||||||
dchar c = reader_.peek();
|
dchar c = reader_.peek();
|
||||||
|
@ -1558,7 +1563,7 @@ final class Scanner
|
||||||
length = 0;
|
length = 0;
|
||||||
appender_.put(scanURIEscapes(name, startMark));
|
appender_.put(scanURIEscapes(name, startMark));
|
||||||
}
|
}
|
||||||
else{++length;}
|
else { ++length; }
|
||||||
c = reader_.peek(length);
|
c = reader_.peek(length);
|
||||||
}
|
}
|
||||||
if(length > 0)
|
if(length > 0)
|
||||||
|
@ -1568,7 +1573,7 @@ final class Scanner
|
||||||
}
|
}
|
||||||
enforce(appender_.data.length > 0,
|
enforce(appender_.data.length > 0,
|
||||||
new Error("While parsing a " ~ name, startMark,
|
new Error("While parsing a " ~ name, startMark,
|
||||||
"expected URI, but found: " ~ to!string(c), reader_.mark));
|
"expected URI, but found: " ~ c.to!string, reader_.mark));
|
||||||
|
|
||||||
return cast(dstring)appender_.data;
|
return cast(dstring)appender_.data;
|
||||||
}
|
}
|
||||||
|
@ -1585,7 +1590,7 @@ final class Scanner
|
||||||
|
|
||||||
ubyte b = 0;
|
ubyte b = 0;
|
||||||
uint mult = 16;
|
uint mult = 16;
|
||||||
//Converting 2 hexadecimal digits to a byte.
|
// Converting 2 hexadecimal digits to a byte.
|
||||||
foreach(k; 0 .. 2)
|
foreach(k; 0 .. 2)
|
||||||
{
|
{
|
||||||
const dchar c = reader_.peek(k);
|
const dchar c = reader_.peek(k);
|
||||||
|
@ -1593,13 +1598,13 @@ final class Scanner
|
||||||
new Error("While scanning a " ~ name, startMark,
|
new Error("While scanning a " ~ name, startMark,
|
||||||
"expected URI escape sequence of "
|
"expected URI escape sequence of "
|
||||||
"2 hexadecimal numbers, but found: " ~
|
"2 hexadecimal numbers, but found: " ~
|
||||||
to!string(c), reader_.mark));
|
c.to!string, reader_.mark));
|
||||||
|
|
||||||
uint digit;
|
uint digit;
|
||||||
if(c - '0' < 10){digit = c - '0';}
|
if(c - '0' < 10) { digit = c - '0'; }
|
||||||
else if(c - 'A' < 6){digit = c - 'A';}
|
else if(c - 'A' < 6) { digit = c - 'A'; }
|
||||||
else if(c - 'a' < 6){digit = c - 'a';}
|
else if(c - 'a' < 6) { digit = c - 'a'; }
|
||||||
else{assert(false);}
|
else { assert(false); }
|
||||||
b += mult * digit;
|
b += mult * digit;
|
||||||
mult /= 16;
|
mult /= 16;
|
||||||
}
|
}
|
||||||
|
@ -1608,7 +1613,7 @@ final class Scanner
|
||||||
reader_.forward(2);
|
reader_.forward(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
try{return to!dstring(cast(string)bytes);}
|
try { return to!dstring(cast(string)bytes); }
|
||||||
catch(ConvException e)
|
catch(ConvException e)
|
||||||
{
|
{
|
||||||
throw new Error("While scanning a " ~ name, startMark, e.msg, mark);
|
throw new Error("While scanning a " ~ name, startMark, e.msg, mark);
|
||||||
|
|
Loading…
Reference in a new issue