public IEnumerable <Record> ReadRecords(DocumentReaderSettings settings = null) { XElement element = DocumentElement(); Version version = DocumentVersion(element); if (version != null && version > SchemaVersion) { ThrowHelper.ThrowInvalidOperation(ExceptionMessages.DocumentVersionIsNotSupported(version, SchemaVersion)); } var reader = new DocumentReader(element, settings ?? new DocumentReaderSettings()); return(reader.ReadRecords()); }
public EntityReader(XElement element, DocumentReaderSettings settings, EntityDefinition baseEntity = null) { Settings = settings; Scan(element.Elements()); ExtendedKeyedCollection <string, PropertyDefinition> properties = null; ExtendedKeyedCollection <string, Variable> variables = null; if (_declarationsElement != null) { ScanDeclarations(_declarationsElement.Elements(), out properties, out variables); } Entity = new EntityDefinition( element.AttributeValueOrThrow(AttributeNames.Name), baseEntity, properties, variables, element); }
public RecordReaderBase(XElement element, EntityDefinition entity, DocumentReaderSettings settings) { Element = element; Entity = entity; Settings = settings; }
public DocumentReader(XElement element, DocumentReaderSettings settings) { Element = element; Settings = settings; }
public static string GetAttributeValue(string value, RecordReaderBase reader) { DocumentReaderSettings settings = reader.Settings; if (!settings.UseVariables) { return(value); } for (int i = 0; i < value.Length; i++) { if (value[i] == settings.VariableOpenDelimiter) { if (i == value.Length - 1) { Throw.CharacterMustBeEscaped(value, settings.VariableOpenDelimiter); } else if (value[i + 1] == settings.VariableOpenDelimiter) { i++; } else { bool fInside = true; int startIndex = i; int lastEndIndex = 0; i++; var sb = new StringBuilder(); while (i < value.Length) { if (!fInside) { if (value[i] == settings.VariableOpenDelimiter) { fInside = true; startIndex = i; } else if (value[i] == settings.VariableCloseDelimiter) { if (i == value.Length - 1 || value[i + 1] != settings.VariableCloseDelimiter) { Throw.CharacterMustBeEscaped(value, settings.VariableCloseDelimiter); } } } else { if (value[i] == settings.VariableOpenDelimiter) { if (i - startIndex == 1) { fInside = false; startIndex = -1; } else { Throw.VariableNameCannotContainCharacter(value, settings.VariableOpenDelimiter); } } else if (value[i] == settings.VariableCloseDelimiter) { int length = i - startIndex - 1; if (length == 0) { Throw.VariableNameCannotBeEmpty(value); } string variableName = value.Substring(startIndex + 1, length); Variable variable = reader.FindVariable(variableName); if (variable == null) { Throw.VariableIsNotDefined(value, variableName); } sb.Append(value, lastEndIndex, startIndex - lastEndIndex); sb.Append(variable.Value); fInside = false; startIndex = -1; lastEndIndex = i + 1; } } i++; } if (fInside) { Throw.VariableMustBeClosed(value, settings.VariableOpenDelimiter); } if (lastEndIndex > 0) { sb.Append(value, lastEndIndex, value.Length - lastEndIndex); } return(sb.ToString()); } } } return(value); }
public EntityReader(XElement element, DocumentReaderSettings settings) : this(element, settings, null) { }
public RecordReader(XElement element, EntityDefinition entity, DocumentReaderSettings settings, IEnumerable <Record> baseRecords = null) : base(element, entity, settings) { BaseRecords = (baseRecords != null) ? new BaseRecordCollection(baseRecords) : Empty.BaseRecordCollection; }
public BaseRecordReader(XElement element, EntityDefinition entity, DocumentReaderSettings settings) : base(element, entity, settings) { }