1 #include "EnumParser.h"
2 
3 #include "../universe/Enums.h"
4 #include "../universe/ShipPart.h"
5 #include "../universe/UnlockableItem.h"
6 
7 #include <boost/phoenix/object/dynamic_cast.hpp>
8 #include <boost/phoenix/operator/self.hpp>
9 
10 namespace qi = boost::spirit::qi;
11 
12 #define DEBUG_PARSERS 0
13 
14 namespace {
15     qi::_val_type _val;
16 }
17 
18 namespace parse {
empire_affiliation_enum_grammar(const parse::lexer & tok)19     empire_affiliation_enum_grammar::empire_affiliation_enum_grammar(const parse::lexer& tok) :
20         empire_affiliation_enum_grammar::base_type(rule, "empire_affiliation_enum_grammar")
21     {
22         rule
23             =   tok.TheEmpire_  [ _val = AFFIL_SELF ]
24             |   tok.EnemyOf_    [ _val = AFFIL_ENEMY ]
25             |   tok.PeaceWith_  [ _val = AFFIL_PEACE ]
26             |   tok.AllyOf_     [ _val = AFFIL_ALLY ]
27             |   tok.AnyEmpire_  [ _val = AFFIL_ANY ]
28             |   tok.None_       [ _val = AFFIL_NONE ]
29             |   tok.CanSee_     [ _val = AFFIL_CAN_SEE ]
30             |   tok.Human_      [ _val = AFFIL_HUMAN ]
31             ;
32     }
33 
unlockable_item_enum_grammar(const parse::lexer & tok)34     unlockable_item_enum_grammar::unlockable_item_enum_grammar(const parse::lexer& tok) :
35         unlockable_item_enum_grammar::base_type(rule, "unlockable_item_enum_grammar")
36     {
37         rule
38             =   tok.Building_       [ _val = UIT_BUILDING ]
39             |   tok.ShipPart_       [ _val = UIT_SHIP_PART ]
40             |   tok.ShipHull_       [ _val = UIT_SHIP_HULL ]
41             |   tok.ShipDesign_     [ _val = UIT_SHIP_DESIGN ]
42             |   tok.Tech_           [ _val = UIT_TECH ]
43             ;
44     }
45 
ship_slot_enum_grammar(const parse::lexer & tok)46     ship_slot_enum_grammar::ship_slot_enum_grammar(const parse::lexer& tok) :
47         ship_slot_enum_grammar::base_type(rule, "ship_slot_enum_grammar")
48     {
49         rule
50             =   tok.External_   [ _val = SL_EXTERNAL ]
51             |   tok.Internal_   [ _val = SL_INTERNAL ]
52             |   tok.Core_       [ _val = SL_CORE ]
53             ;
54     }
55 
ship_part_class_enum_grammar(const parse::lexer & tok)56     ship_part_class_enum_grammar::ship_part_class_enum_grammar(const parse::lexer& tok) :
57         ship_part_class_enum_grammar::base_type(rule, "ship_part_class_enum_grammar")
58     {
59         rule
60             =   tok.ShortRange_         [ _val = PC_DIRECT_WEAPON ]
61             |   tok.FighterBay_         [ _val = PC_FIGHTER_BAY ]
62             |   tok.FighterHangar_      [ _val = PC_FIGHTER_HANGAR ]
63             |   tok.Shield_             [ _val = PC_SHIELD ]
64             |   tok.Armour_             [ _val = PC_ARMOUR ]
65             |   tok.Troops_             [ _val = PC_TROOPS ]
66             |   tok.Detection_          [ _val = PC_DETECTION ]
67             |   tok.Stealth_            [ _val = PC_STEALTH ]
68             |   tok.Fuel_               [ _val = PC_FUEL ]
69             |   tok.Colony_             [ _val = PC_COLONY ]
70             |   tok.Speed_              [ _val = PC_SPEED ]
71             |   tok.General_            [ _val = PC_GENERAL ]
72             |   tok.Bombard_            [ _val = PC_BOMBARD ]
73             |   tok.Research_           [ _val = PC_RESEARCH ]
74             |   tok.Industry_           [ _val = PC_INDUSTRY ]
75             |   tok.Trade_              [ _val = PC_TRADE ]
76             |   tok.ProductionLocation_ [ _val = PC_PRODUCTION_LOCATION ]
77             ;
78     }
79 
capture_result_enum_grammar(const parse::lexer & tok)80     capture_result_enum_grammar::capture_result_enum_grammar(const parse::lexer& tok) :
81         capture_result_enum_grammar::base_type(rule, "capture_result_enum_grammar")
82     {
83         rule
84             =   tok.Capture_            [ _val = CR_CAPTURE ]
85             |   tok.Retain_             [ _val = CR_RETAIN ]
86             |   tok.Destroy_            [ _val = CR_DESTROY ]
87             ;
88     }
89 
statistic_enum_grammar(const parse::lexer & tok)90     statistic_enum_grammar::statistic_enum_grammar(const parse::lexer& tok) :
91         statistic_enum_grammar::base_type(rule, "statistic_enum_grammar")
92     {
93         rule
94             =   tok.CountUnique_    [ _val = ValueRef::UNIQUE_COUNT ]
95             |   tok.Count_          [ _val = ValueRef::COUNT ]
96             |   tok.If_             [ _val = ValueRef::IF ]
97             |   tok.Sum_            [ _val = ValueRef::SUM ]
98             |   tok.Mean_           [ _val = ValueRef::MEAN ]
99             |   tok.RMS_            [ _val = ValueRef::RMS ]
100             |   tok.Mode_           [ _val = ValueRef::MODE ]
101             |   tok.Max_            [ _val = ValueRef::MAX ]
102             |   tok.Min_            [ _val = ValueRef::MIN ]
103             |   tok.Spread_         [ _val = ValueRef::SPREAD ]
104             |   tok.StDev_          [ _val = ValueRef::STDEV ]
105             |   tok.Product_        [ _val = ValueRef::PRODUCT ]
106             ;
107     }
108 
non_ship_part_meter_enum_grammar(const parse::lexer & tok)109     non_ship_part_meter_enum_grammar::non_ship_part_meter_enum_grammar(const parse::lexer& tok) :
110         non_ship_part_meter_enum_grammar::base_type(rule, "non_ship_part_meter_enum_grammar")
111     {
112         rule
113             =   tok.TargetConstruction_     [ _val = METER_TARGET_CONSTRUCTION ]
114             |   tok.TargetIndustry_         [ _val = METER_TARGET_INDUSTRY ]
115             |   tok.TargetPopulation_       [ _val = METER_TARGET_POPULATION ]
116             |   tok.TargetResearch_         [ _val = METER_TARGET_RESEARCH ]
117             |   tok.TargetTrade_            [ _val = METER_TARGET_TRADE ]
118             |   tok.TargetHappiness_        [ _val = METER_TARGET_HAPPINESS ]
119             |   tok.MaxDefense_             [ _val = METER_MAX_DEFENSE ]
120             |   tok.MaxFuel_                [ _val = METER_MAX_FUEL ]
121             |   tok.MaxShield_              [ _val = METER_MAX_SHIELD ]
122             |   tok.MaxStructure_           [ _val = METER_MAX_STRUCTURE ]
123             |   tok.MaxTroops_              [ _val = METER_MAX_TROOPS ]
124             |   tok.MaxSupply_              [ _val = METER_MAX_SUPPLY ]
125             |   tok.MaxStockpile_           [ _val = METER_MAX_STOCKPILE ]
126 
127             |   tok.Construction_           [ _val = METER_CONSTRUCTION ]
128             |   tok.Industry_               [ _val = METER_INDUSTRY ]
129             |   tok.Population_             [ _val = METER_POPULATION ]
130             |   tok.Research_               [ _val = METER_RESEARCH ]
131             |   tok.Trade_                  [ _val = METER_TRADE ]
132             |   tok.Happiness_              [ _val = METER_HAPPINESS ]
133 
134             |   tok.Defense_                [ _val = METER_DEFENSE ]
135             |   tok.Fuel_                   [ _val = METER_FUEL ]
136             |   tok.Shield_                 [ _val = METER_SHIELD ]
137             |   tok.Structure_              [ _val = METER_STRUCTURE ]
138             |   tok.Troops_                 [ _val = METER_TROOPS ]
139             |   tok.Supply_                 [ _val = METER_SUPPLY ]
140             |   tok.Stockpile_              [ _val = METER_STOCKPILE ]
141 
142             |   tok.RebelTroops_            [ _val = METER_REBEL_TROOPS ]
143             |   tok.Stealth_                [ _val = METER_STEALTH ]
144             |   tok.Detection_              [ _val = METER_DETECTION ]
145             |   tok.Speed_                  [ _val = METER_SPEED ]
146 
147             |   tok.Size_                   [ _val = METER_SIZE ]
148             ;
149     }
150 
ship_part_meter_enum_grammar(const parse::lexer & tok)151     ship_part_meter_enum_grammar::ship_part_meter_enum_grammar(const parse::lexer& tok) :
152         ship_part_meter_enum_grammar::base_type(rule, "ship_part_meter_enum_grammar")
153     {
154         rule
155             =   tok.MaxCapacity_            [ _val = METER_MAX_CAPACITY ]
156             |   tok.MaxDamage_              [ _val = METER_MAX_CAPACITY ]
157             |   tok.Capacity_               [ _val = METER_CAPACITY ]
158             |   tok.Damage_                 [ _val = METER_CAPACITY ]
159             |   tok.SecondaryStat_          [ _val = METER_SECONDARY_STAT ]
160             |   tok.MaxSecondaryStat_       [ _val = METER_MAX_SECONDARY_STAT ]
161             ;
162     }
163 
set_non_ship_part_meter_enum_grammar(const parse::lexer & tok)164     set_non_ship_part_meter_enum_grammar::set_non_ship_part_meter_enum_grammar(const parse::lexer& tok) :
165         set_non_ship_part_meter_enum_grammar::base_type(rule, "set_non_ship_part_meter_enum_grammar")
166     {
167         rule
168             =   tok.SetTargetConstruction_  [ _val = METER_TARGET_CONSTRUCTION ]
169             |   tok.SetTargetIndustry_      [ _val = METER_TARGET_INDUSTRY ]
170             |   tok.SetTargetPopulation_    [ _val = METER_TARGET_POPULATION ]
171             |   tok.SetTargetResearch_      [ _val = METER_TARGET_RESEARCH ]
172             |   tok.SetTargetTrade_         [ _val = METER_TARGET_TRADE ]
173             |   tok.SetTargetHappiness_     [ _val = METER_TARGET_HAPPINESS ]
174 
175             |   tok.SetMaxDefense_          [ _val = METER_MAX_DEFENSE ]
176             |   tok.SetMaxFuel_             [ _val = METER_MAX_FUEL ]
177             |   tok.SetMaxShield_           [ _val = METER_MAX_SHIELD ]
178             |   tok.SetMaxStructure_        [ _val = METER_MAX_STRUCTURE ]
179             |   tok.SetMaxTroops_           [ _val = METER_MAX_TROOPS ]
180             |   tok.SetMaxSupply_           [ _val = METER_MAX_SUPPLY ]
181             |   tok.SetMaxStockpile_        [ _val = METER_MAX_STOCKPILE ]
182 
183             |   tok.SetConstruction_        [ _val = METER_CONSTRUCTION ]
184             |   tok.SetIndustry_            [ _val = METER_INDUSTRY ]
185             |   tok.SetPopulation_          [ _val = METER_POPULATION ]
186             |   tok.SetResearch_            [ _val = METER_RESEARCH ]
187             |   tok.SetTrade_               [ _val = METER_TRADE ]
188             |   tok.SetHappiness_           [ _val = METER_HAPPINESS ]
189 
190             |   tok.SetDefense_             [ _val = METER_DEFENSE ]
191             |   tok.SetFuel_                [ _val = METER_FUEL ]
192             |   tok.SetShield_              [ _val = METER_SHIELD ]
193             |   tok.SetStructure_           [ _val = METER_STRUCTURE ]
194             |   tok.SetTroops_              [ _val = METER_TROOPS ]
195             |   tok.SetSupply_              [ _val = METER_SUPPLY ]
196             |   tok.SetStockpile_           [ _val = METER_STOCKPILE ]
197 
198             |   tok.SetRebelTroops_         [ _val = METER_REBEL_TROOPS ]
199             |   tok.SetStealth_             [ _val = METER_STEALTH ]
200             |   tok.SetDetection_           [ _val = METER_DETECTION ]
201             |   tok.SetSpeed_               [ _val = METER_SPEED ]
202 
203             |   tok.SetSize_                [ _val = METER_SIZE ]
204             ;
205     }
206 
set_ship_part_meter_enum_grammar(const parse::lexer & tok)207     set_ship_part_meter_enum_grammar::set_ship_part_meter_enum_grammar(const parse::lexer& tok) :
208         set_ship_part_meter_enum_grammar::base_type(rule, "set_ship_part_meter_enum_grammar")
209     {
210         rule
211             =   tok.SetMaxCapacity_         [ _val = METER_MAX_CAPACITY ]
212             |   tok.SetMaxDamage_           [ _val = METER_MAX_CAPACITY ]
213             |   tok.SetMaxSecondaryStat_    [ _val = METER_MAX_SECONDARY_STAT ]
214             |   tok.SetCapacity_            [ _val = METER_CAPACITY ]
215             |   tok.SetDamage_              [ _val = METER_CAPACITY ]
216             |   tok.SetSecondaryStat_       [ _val = METER_SECONDARY_STAT ]
217             ;
218     }
219 }
220