Horizon
kicad_package_parser.hpp
1 #pragma once
2 #include "common/common.hpp"
3 #include <set>
4 #include <functional>
5 
6 namespace SEXPR {
7 class SEXPR;
8 }
9 
10 namespace horizon {
12 public:
13  using LogCb = std::function<void(const std::string &, const std::string &)>;
14  void set_log_cb(LogCb cb);
15 
16 protected:
18  class Line *parse_line(const SEXPR::SEXPR *data);
19  void parse_poly(const SEXPR::SEXPR *data);
20  static int get_layer(const std::string &l);
21  static Coordi get_coord(const SEXPR::SEXPR *data, size_t offset = 1);
22  static Coordi get_size(const SEXPR::SEXPR *data, size_t offset = 1);
23  std::map<Coordi, class Junction *> junctions;
24  Junction *get_or_create_junction(const Coordi &c);
25  LogCb log_cb;
26 
27  virtual class Junction &create_junction() = 0;
28  virtual class Polygon &create_polygon() = 0;
29  virtual class Line &create_line() = 0;
30 
31 public:
32  virtual ~KiCadModuleParser()
33  {
34  }
35 };
36 
38 public:
39  KiCadPackageParser(class Package &p, class IPool &po);
40 
41  class Meta {
42  public:
43  std::string name;
44  std::string descr;
45  std::set<std::string> tags;
46  };
47 
48  Meta parse(const SEXPR::SEXPR *data);
49 
50 private:
51  void parse_pad(const SEXPR::SEXPR *data);
52 
53  class Junction &create_junction() override;
54  class Polygon &create_polygon() override;
55  class Line &create_line() override;
56 
57  Package &package;
58  IPool &pool;
59 };
60 
62 public:
63  KiCadDecalParser(class Decal &d);
64  void parse(const SEXPR::SEXPR *data);
65 
66 private:
67  class Junction &create_junction() override;
68  class Polygon &create_polygon() override;
69  class Line &create_line() override;
70 
71  Decal &decal;
72 };
73 
74 } // namespace horizon
Definition: sexpr.h:45
Definition: decal.hpp:16
Definition: ipool.hpp:14
A Junction is a point in 2D-Space.
Definition: junction.hpp:20
Definition: kicad_package_parser.hpp:61
Definition: kicad_package_parser.hpp:11
Definition: kicad_package_parser.hpp:41
Definition: kicad_package_parser.hpp:37
Graphical line.
Definition: line.hpp:19
Definition: package.hpp:30
Polygon used in Padstack, Package and Board for specifying filled Regions.
Definition: polygon.hpp:27