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));
        }
Пример #5
0
        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()));
        }
Пример #7
0
        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()));
        }
Пример #11
0
        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()));
        }
Пример #12
0
        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()));
        }
Пример #17
0
        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()));
        }