logo

libbulletml

Library of Bullet Markup Language (forked from https://shinh.skr.jp/libbulletml/index_en.html )git clone https://hacktivis.me/git/libbulletml.git

bulletmlparser.h (2057B)


  1. /// BulletML のパーサ
  2. /**
  3. * c++ 用 RELAX が無かったのでまあ自分で作ることに
  4. */
  5. #ifndef BULLETMLPARSER_H_
  6. #define BULLETMLPARSER_H_
  7. #include "bulletmltree.h"
  8. #include "bulletmlcommon.h"
  9. #include <string>
  10. #include <vector>
  11. #include <stdio.h>
  12. class BulletMLParser {
  13. protected:
  14. typedef std::vector<std::string> MyAttributes;
  15. typedef MyAttributes::const_iterator MyAttributeIte;
  16. public:
  17. DECLSPEC BulletMLParser();
  18. DECLSPEC virtual ~BulletMLParser();
  19. public:
  20. DECLSPEC void build();
  21. DECLSPEC virtual void parse() =0;
  22. public:
  23. /**
  24. * BulletML は仕様上ツリー構造の根っこを取れる必要はなく
  25. * ラベルからこれらのみ取れれば良い
  26. */
  27. //@{
  28. DECLSPEC BulletMLNode* getBulletRef(int id);
  29. DECLSPEC BulletMLNode* getActionRef(int id);
  30. DECLSPEC BulletMLNode* getFireRef(int id);
  31. //@}
  32. DECLSPEC const std::vector<BulletMLNode*>& getTopActions() const {
  33. return topActions_;
  34. }
  35. DECLSPEC void setHorizontal() { isHorizontal_ = true; }
  36. DECLSPEC bool isHorizontal() const { return isHorizontal_; }
  37. protected:
  38. BulletMLNode* addContent(const std::string& name);
  39. void addAttribute(const MyAttributes& attr, BulletMLNode* elem);
  40. protected:
  41. /// これはgccのバージョン間の互換のためなのだが
  42. template <class Char_>
  43. std::string uc2string(Char_* src, size_t len = std::string::npos);
  44. protected:
  45. BulletMLNode* bulletml_;
  46. std::vector<BulletMLNode*> topActions_;
  47. typedef std::vector<BulletMLNode*> MyMap;
  48. typedef MyMap BulletMap;
  49. typedef MyMap ActionMap;
  50. typedef MyMap FireMap;
  51. BulletMap bulletMap_;
  52. ActionMap actionMap_;
  53. FireMap fireMap_;
  54. bool isHorizontal_;
  55. protected:
  56. void setName(const char* name) { name_ = name; }
  57. const char* name_;
  58. public:
  59. DECLSPEC const char* getName() const { return name_; }
  60. };
  61. template <class Char_>
  62. std::string BulletMLParser::uc2string(Char_* src, size_t len) {
  63. std::string dst;
  64. size_t i = 0;
  65. while (i != len && *src != '\0') {
  66. dst += *src;
  67. src++;
  68. i++;
  69. }
  70. return dst;
  71. }
  72. #endif // ! BULLETMLPARSER_H_