public static CellArray CellArray(MetafileReader reader) { var p = reader.ReadPoint(); var q = reader.ReadPoint(); var r = reader.ReadPoint(); int nx = reader.ReadInteger(); int ny = reader.ReadInteger(); // TODO: not really used in text encoding; but in case we ever need it, // the same check for zero as in binary encoding needs to happen. // intentionally unused until that time comes. int localColorPrecision = reader.ReadInteger(); int totalCount = nx * ny; var colors = new List <MetafileColor>(); while (reader.HasMoreData()) { colors.Add(reader.ReadColor()); } // FIXME: for parenthesized lists, every row is enclosed by parenthesis (which right now are ignored by the parser). // The number of cells between parentheses shall be less than or equal to the row length. // If a row is not complete, then the last defined cell in the row is replicated to fill the row. // Since the parser ignores parenthesis, we can only fill the last row with the last color of all rows; // but not every row with the last color of each row. if (colors.Count < totalCount) { var lastColor = colors.Last(); colors.AddRange(Enumerable.Range(0, totalCount - colors.Count).Select(i => lastColor)); } return(new CellArray(p, q, r, nx, ny, colors.ToArray())); }
public static MetafileElementsList MetafileElementsList(MetafileReader reader) { var elements = new List <string>(); while (reader.HasMoreData()) { elements.Add(reader.ReadString()); } return(new MetafileElementsList(elements)); }
public static FontList FontList(MetafileReader reader) { var fonts = new List <string>(); while (reader.HasMoreData()) { fonts.Add(reader.ReadString()); } return(new FontList(fonts)); }
public static CharacterSetList CharacterSetList(MetafileReader reader) { var entries = new List <CharacterSetListEntry>(); while (reader.HasMoreData(2)) { entries.Add(new CharacterSetListEntry(ParseCharacterSetType(reader.ReadEnum()), reader.ReadString())); } return(new CharacterSetList(entries)); }
public static AspectSourceFlags AspectSourceFlags(MetafileReader reader) { var asf = new Dictionary <AspectSourceFlagsType, AspectSourceFlagsValue>(); while (reader.HasMoreData(2)) { SetASFValue(asf, reader.ReadEnum(), reader.ReadEnum()); } return(new AspectSourceFlags(asf)); }
public static Polygon Polygon(MetafileReader reader) { var points = new List <PointF>(); while (reader.HasMoreData(2)) { points.Add(reader.ReadPoint()); } return(new Polygon(points.ToArray())); }
public static ColorTable ColorTable(MetafileReader reader) { int startIndex = reader.ReadColorIndex(); var colors = new List <MetafileColor>(); while (reader.HasMoreData()) { colors.Add(reader.ReadDirectColor()); } return(new ColorTable(startIndex, colors.ToArray())); }
private static List <PointF> ReadPointList(MetafileReader reader) { var points = new List <PointF>(); while (reader.HasMoreData(2)) { points.Add(reader.ReadPoint()); } return(points); }
public static Polybezier Polybezier(MetafileReader reader) { int continuityIndicator = reader.ReadIndex(); var pointSequences = new List <PointF>(); while (reader.HasMoreData(2)) { pointSequences.Add(reader.ReadPoint()); } return(new Polybezier(continuityIndicator, pointSequences.ToArray())); }
public static PolygonSet PolygonSet(MetafileReader reader) { var points = new List <PointF>(); var flags = new List <EdgeOutFlags>(); while (reader.HasMoreData(3)) { points.Add(reader.ReadPoint()); flags.Add(ParseEdgeOutFlags(reader.ReadEnum())); } return(new PolygonSet(points.ToArray(), flags.ToArray())); }
public static LineAndEdgeTypeDefinition LineAndEdgeTypeDefinition(MetafileReader reader) { int lineType = reader.ReadIndex(); double dashCycleRepeatLength = reader.ReadSizeSpecification(reader.Descriptor.LineWidthSpecificationMode); var dashElements = new List <int>(); while (reader.HasMoreData()) { dashElements.Add(reader.ReadInteger()); } return(new LineAndEdgeTypeDefinition(lineType, dashCycleRepeatLength, dashElements.ToArray())); }
public static InheritanceFilter InheritanceFilter(MetafileReader reader) { var items = new List <InheritanceFilterItem>(); while (reader.HasMoreData(2)) { items.Add(new InheritanceFilterItem( ParseFilterDesignator(reader.ReadEnum()), ParseFilterSetting(reader.ReadEnum()))); } return(new InheritanceFilter(items.ToArray())); }
public static FontProperties FontProperties(MetafileReader reader) { var properties = new List <FontProperty>(); while (reader.HasMoreData()) { int propertyIndicator = reader.ReadIndex(); int priority = reader.ReadInteger(); // The SDR for each of the standardized properties contains only one member (typed sequence) [ISO/IEC 8632-1 7.3.21] var record = ApplicationStructureDescriptorReader.ParseStructuredDataRecord(reader.ReadString()); properties.Add(new FontProperty(propertyIndicator, priority, record.Elements.First())); } return(new FontProperties(properties.ToArray())); }
public static Polygon IncrementalPolygon(MetafileReader reader) { var points = new List <PointF>(); var lastPoint = reader.ReadPoint(); points.Add(lastPoint); while (reader.HasMoreData(2)) { double deltaX = reader.ReadVdc(); double deltaY = reader.ReadVdc(); lastPoint = new PointF((float)(lastPoint.X + deltaX), (float)(lastPoint.Y + deltaY)); points.Add(lastPoint); } return(new Polygon(points.ToArray())); }
private static List <PointF> ReadIncrementalPointList(MetafileReader reader) { var points = new List <PointF>(); var lastPoint = reader.ReadPoint(); points.Add(lastPoint); while (reader.HasMoreData(2)) { double deltaX = reader.ReadVdc(); double deltaY = reader.ReadVdc(); lastPoint = new PointF((float)(lastPoint.X + deltaX), (float)(lastPoint.Y + deltaY)); points.Add(lastPoint); } return(points); }
public static PolygonSet IncrementalPolygonSet(MetafileReader reader) { var points = new List <PointF>(); var flags = new List <EdgeOutFlags>(); var lastPoint = reader.ReadPoint(); points.Add(lastPoint); flags.Add(ParseEdgeOutFlags(reader.ReadEnum())); while (reader.HasMoreData(3)) { double deltaX = reader.ReadVdc(); double deltaY = reader.ReadVdc(); lastPoint = new PointF((float)(lastPoint.X + deltaX), (float)(lastPoint.Y + deltaY)); points.Add(lastPoint); flags.Add(ParseEdgeOutFlags(reader.ReadEnum())); } return(new PolygonSet(points.ToArray(), flags.ToArray())); }
public static PatternTable PatternTable(MetafileReader reader) { int index = reader.ReadIndex(); int nx = reader.ReadInteger(); int ny = reader.ReadInteger(); // TODO: not really used in text encoding; but in case we ever need it, // the same check for zero as in binary encoding needs to happen. // intentionally unused until that time comes. int localColorPrecision = reader.ReadInteger(); var colors = new List <MetafileColor>(); int count = nx * ny; while (reader.HasMoreData(3) && count-- > 0) { colors.Add(reader.ReadColor()); } return(new PatternTable(index, nx, ny, colors.ToArray())); }