Horizon
kicad_package_parser.hpp
1 #pragma once
2 #include "common/common.hpp"
3 
4 namespace SEXPR {
5 class SEXPR;
6 }
7 
8 namespace horizon {
9 class KiCadModuleParser {
10 protected:
11  class Line *parse_line(const SEXPR::SEXPR *data);
12  void parse_poly(const SEXPR::SEXPR *data);
13  static int get_layer(const std::string &l);
14  static Coordi get_coord(const SEXPR::SEXPR *data, size_t offset = 1);
15  static Coordi get_size(const SEXPR::SEXPR *data, size_t offset = 1);
16  std::map<Coordi, class Junction *> junctions;
17  Junction *get_or_create_junction(const Coordi &c);
18 
19  virtual class Junction &create_junction() = 0;
20  virtual class Polygon &create_polygon() = 0;
21  virtual class Line &create_line() = 0;
22 
23 public:
24  virtual ~KiCadModuleParser()
25  {
26  }
27 };
28 
29 class KiCadPackageParser : public KiCadModuleParser {
30 public:
31  KiCadPackageParser(class Package &p, class IPool &po);
32  void parse(const SEXPR::SEXPR *data);
33 
34 private:
35  void parse_pad(const SEXPR::SEXPR *data);
36 
37  class Junction &create_junction() override;
38  class Polygon &create_polygon() override;
39  class Line &create_line() override;
40 
41  Package &package;
42  IPool &pool;
43 };
44 
45 class KiCadDecalParser : public KiCadModuleParser {
46 public:
47  KiCadDecalParser(class Decal &d);
48  void parse(const SEXPR::SEXPR *data);
49 
50 private:
51  class Junction &create_junction() override;
52  class Polygon &create_polygon() override;
53  class Line &create_line() override;
54 
55  Decal &decal;
56 };
57 
58 } // namespace horizon
SEXPR::SEXPR
Definition: sexpr.h:45