@@ -100,13 +100,31 @@ namespace jse
100100 enriched.push_back (rule);
101101 }
102102 // if the rule is an include, expand the node with a copy of the included file
103+ // include an embedded rule
104+ else if (embedded_rules.find (rule.at (" spec_file" )) != embedded_rules.end ())
105+ {
106+ json embed_include_rules = embedded_rules[rule.at (" spec_file" )];
107+ // loop over all rules to add the prefix
108+ for (auto &i_rule : embed_include_rules)
109+ {
110+ string prefix = rule.at (" pointer" );
111+ string pointer = i_rule.at (" pointer" );
112+ string new_pointer = prepend_pointer (pointer, prefix);
113+ i_rule.at (" pointer" ) = new_pointer;
114+ }
115+
116+ // save modified rules
117+ for (const auto &i_rule : embed_include_rules)
118+ enriched.push_back (i_rule);
119+ }
120+ // include an rule from a file
103121 else
104122 {
105123 bool replaced = false ;
106124 // the include file could be in any of the include directories
125+ string spec_file = rule.at (" spec_file" );
107126 for (const auto &dir : dirs)
108127 {
109- string spec_file = rule.at (" spec_file" );
110128 string f = dir + " /" + spec_file;
111129 // check if the file exists
112130 if (std::filesystem::is_regular_file (f))
@@ -367,7 +385,7 @@ namespace jse
367385 {
368386 assert (rule.at (" type" ) == " float" );
369387
370- if (!input.is_number () && !input. is_null () )
388+ if (!input.is_number ())
371389 return false ;
372390
373391 if (rule.contains (" min" ) && input < rule[" min" ])
@@ -383,7 +401,7 @@ namespace jse
383401 {
384402 assert (rule.at (" type" ) == " int" );
385403
386- if (!input.is_number_integer () && !input. is_null () )
404+ if (!input.is_number_integer ())
387405 return false ;
388406
389407 if (rule.contains (" min" ) && input < rule[" min" ])
0 commit comments