LCOV - code coverage report
Current view: top level - ogr/ogrsf_frmts/svg - ogr_svg.h (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 4 4 100.0 %
Date: 2024-11-21 22:18:42 Functions: 2 2 100.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  * $Id$
       3             :  *
       4             :  * Project:  SVG Translator
       5             :  * Purpose:  Definition of classes for OGR .svg driver.
       6             :  * Author:   Even Rouault, even dot rouault at spatialys.com
       7             :  *
       8             :  ******************************************************************************
       9             :  * Copyright (c) 2011-2013, Even Rouault <even dot rouault at spatialys.com>
      10             :  *
      11             :  * SPDX-License-Identifier: MIT
      12             :  ****************************************************************************/
      13             : 
      14             : #ifndef OGR_SVG_H_INCLUDED
      15             : #define OGR_SVG_H_INCLUDED
      16             : 
      17             : #include "ogrsf_frmts.h"
      18             : 
      19             : #ifdef HAVE_EXPAT
      20             : #include "ogr_expat.h"
      21             : #endif
      22             : 
      23             : class OGRSVGDataSource;
      24             : 
      25             : typedef enum
      26             : {
      27             :     SVG_POINTS,
      28             :     SVG_LINES,
      29             :     SVG_POLYGONS,
      30             : } SVGGeometryType;
      31             : 
      32             : constexpr int PARSER_BUF_SIZE = 8192;
      33             : 
      34             : /************************************************************************/
      35             : /*                             OGRSVGLayer                              */
      36             : /************************************************************************/
      37             : 
      38             : class OGRSVGLayer final : public OGRLayer
      39             : {
      40             :     OGRFeatureDefn *poFeatureDefn;
      41             :     OGRSpatialReference *poSRS;
      42             : #ifdef HAVE_EXPAT
      43             :     OGRSVGDataSource *poDS;
      44             : #endif
      45             :     CPLString osLayerName;
      46             : 
      47             :     SVGGeometryType svgGeomType;
      48             : 
      49             :     int nTotalFeatures;
      50             :     int nNextFID;
      51             :     VSILFILE *fpSVG;  // Large file API.
      52             : 
      53             : #ifdef HAVE_EXPAT
      54             :     XML_Parser oParser;
      55             :     XML_Parser oSchemaParser;
      56             : #endif
      57             :     char *pszSubElementValue;
      58             :     int nSubElementValueLen;
      59             :     int iCurrentField;
      60             : 
      61             :     OGRFeature *poFeature;
      62             :     OGRFeature **ppoFeatureTab;
      63             :     int nFeatureTabLength;
      64             :     int nFeatureTabIndex;
      65             : 
      66             :     int depthLevel;
      67             :     int interestingDepthLevel;
      68             :     bool inInterestingElement;
      69             : 
      70             :     bool bStopParsing;
      71             : #ifdef HAVE_EXPAT
      72             :     int nWithoutEventCounter;
      73             :     int nDataHandlerCounter;
      74             : 
      75             :     OGRSVGLayer *poCurLayer;
      76             : #endif
      77             : 
      78             :   private:
      79             :     void LoadSchema();
      80             : 
      81             :   public:
      82             :     OGRSVGLayer(const char *pszFilename, const char *layerName,
      83             :                 SVGGeometryType svgGeomType, OGRSVGDataSource *poDS);
      84             :     virtual ~OGRSVGLayer();
      85             : 
      86             :     virtual void ResetReading() override;
      87             :     virtual OGRFeature *GetNextFeature() override;
      88             : 
      89           6 :     virtual const char *GetName() override
      90             :     {
      91           6 :         return osLayerName.c_str();
      92             :     }
      93             : 
      94             :     virtual OGRwkbGeometryType GetGeomType() override;
      95             : 
      96             :     virtual GIntBig GetFeatureCount(int bForce = TRUE) override;
      97             : 
      98             :     virtual OGRFeatureDefn *GetLayerDefn() override;
      99             : 
     100             :     virtual int TestCapability(const char *) override;
     101             : 
     102             : #ifdef HAVE_EXPAT
     103             :     void startElementCbk(const char *pszName, const char **ppszAttr);
     104             :     void endElementCbk(const char *pszName);
     105             :     void dataHandlerCbk(const char *data, int nLen);
     106             : 
     107             :     void startElementLoadSchemaCbk(const char *pszName, const char **ppszAttr);
     108             :     void endElementLoadSchemaCbk(const char *pszName);
     109             :     void dataHandlerLoadSchemaCbk(const char *data, int nLen);
     110             : #endif
     111             : };
     112             : 
     113             : /************************************************************************/
     114             : /*                           OGRSVGDataSource                           */
     115             : /************************************************************************/
     116             : 
     117             : typedef enum
     118             : {
     119             :     SVG_VALIDITY_UNKNOWN,
     120             :     SVG_VALIDITY_INVALID,
     121             :     SVG_VALIDITY_VALID
     122             : } OGRSVGValidity;
     123             : 
     124             : class OGRSVGDataSource final : public GDALDataset
     125             : {
     126             :     OGRSVGLayer **papoLayers;
     127             :     int nLayers;
     128             : 
     129             : #ifdef HAVE_EXPAT
     130             :     OGRSVGValidity eValidity;
     131             :     int bIsCloudmade;
     132             :     XML_Parser oCurrentParser;
     133             :     int nDataHandlerCounter;
     134             : #endif
     135             : 
     136             :   public:
     137             :     OGRSVGDataSource();
     138             :     virtual ~OGRSVGDataSource();
     139             : 
     140             :     int Open(const char *pszFilename);
     141             : 
     142          11 :     virtual int GetLayerCount() override
     143             :     {
     144          11 :         return nLayers;
     145             :     }
     146             : 
     147             :     virtual OGRLayer *GetLayer(int) override;
     148             : 
     149             : #ifdef HAVE_EXPAT
     150             :     void startElementValidateCbk(const char *pszName, const char **ppszAttr);
     151             :     void dataHandlerValidateCbk(const char *data, int nLen);
     152             : #endif
     153             : };
     154             : 
     155             : #endif /* ndef OGR_SVG_H_INCLUDED */

Generated by: LCOV version 1.14