allow minfeature array to be array in type 1 and ignore failures #380

This commit is contained in:
Eliot Jones 2022-01-15 14:02:33 +00:00
parent 0b876cb338
commit e54cd8f209

View File

@ -88,7 +88,7 @@
case Type1Symbols.RdProcedure: case Type1Symbols.RdProcedure:
case Type1Symbols.RdProcedureAlt: case Type1Symbols.RdProcedureAlt:
{ {
var procedureTokens = ReadProcedure(tokenizer); var procedureTokens = ReadProcedure(tokenizer, false);
builder.Rd = procedureTokens; builder.Rd = procedureTokens;
ReadTillDef(tokenizer); ReadTillDef(tokenizer);
break; break;
@ -96,7 +96,7 @@
case Type1Symbols.NoAccessDef: case Type1Symbols.NoAccessDef:
case Type1Symbols.NoAccessDefAlt: case Type1Symbols.NoAccessDefAlt:
{ {
var procedureTokens = ReadProcedure(tokenizer); var procedureTokens = ReadProcedure(tokenizer, false);
builder.NoAccessDef = procedureTokens; builder.NoAccessDef = procedureTokens;
ReadTillDef(tokenizer); ReadTillDef(tokenizer);
break; break;
@ -104,7 +104,7 @@
case Type1Symbols.NoAccessPut: case Type1Symbols.NoAccessPut:
case Type1Symbols.NoAccessPutAlt: case Type1Symbols.NoAccessPutAlt:
{ {
var procedureTokens = ReadProcedure(tokenizer); var procedureTokens = ReadProcedure(tokenizer, false);
builder.NoAccessPut = procedureTokens; builder.NoAccessPut = procedureTokens;
ReadTillDef(tokenizer); ReadTillDef(tokenizer);
break; break;
@ -161,9 +161,27 @@
} }
case Type1Symbols.MinFeature: case Type1Symbols.MinFeature:
{ {
var procedureTokens = ReadProcedure(tokenizer); try
{
var startToken = tokenizer.GetNext();
builder.MinFeature = new MinFeature(procedureTokens[0].AsInt(), procedureTokens[1].AsInt()); if (startToken.Type == Type1Token.TokenType.StartArray)
{
var arrayTokens = ReadArrayValues(tokenizer, x => x.AsInt(), true);
builder.MinFeature = new MinFeature(arrayTokens[0], arrayTokens[1]);
}
else if (startToken.Type == Type1Token.TokenType.StartProc)
{
var procedureTokens = ReadProcedure(tokenizer, true);
builder.MinFeature = new MinFeature(procedureTokens[0].AsInt(), procedureTokens[1].AsInt());
}
}
catch
{
// Ignored.
}
ReadTillDef(tokenizer); ReadTillDef(tokenizer);
@ -433,10 +451,10 @@
throw new InvalidOperationException($"Found invalid token {token} when type {type} with text {text} was expected."); throw new InvalidOperationException($"Found invalid token {token} when type {type} with text {text} was expected.");
} }
private static IReadOnlyList<Type1Token> ReadProcedure(Type1Tokenizer tokenizer) private static IReadOnlyList<Type1Token> ReadProcedure(Type1Tokenizer tokenizer, bool hasReadStartProc)
{ {
var tokens = new List<Type1Token>(); var tokens = new List<Type1Token>();
var depth = -1; var depth = hasReadStartProc ? 1 : -1;
ReadProcedure(tokenizer, tokens, ref depth); ReadProcedure(tokenizer, tokens, ref depth);
return tokens; return tokens;
} }