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: 2025-01-18 12:42:00 Functions: 2 2 100.0 %

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

Generated by: LCOV version 1.14