43 namespace qi = ::boost::spirit::qi;
44 namespace ascii = ::boost::spirit::ascii;
128 out <<
"--------config-----------\n\n" << printme.
Config() <<
"\n\n-------input--------\n\n" << printme.
Input();
140 bool readable_ =
true;
180 template<
typename Iterator,
typename Skipper = ascii::space_type>
187 namespace phx = boost::phoenix;
197 using boost::spirit::lexeme;
198 using boost::spirit::as_string;
199 using boost::spirit::ascii::no_case;
201 root_rule_.name(
"SplitInputFile_root_rule");
203 root_rule_ = both_ | unreadable_ |only_input_ ;
208 both_.name(
"have_both_config_and_input");
239 only_input_.name(
"have_only_input");
241 (omit[input_] >> end_ >> omit[no_decl_])
243 (omit[input_] >> no_decl_)
245 (end_ >> omit[no_decl_])
251 unreadable_.name(
"unreadable_input");
253 (omit[config_] >> no_decl_)
255 (end_ >> omit[input_] >> end_ >> omit[no_decl_])
257 (end_ >> omit[input_] >> omit[no_decl_])
259 (end_ >> end_ >> omit[no_decl_])
263 config_.name(
"config_");
264 config_ = no_case[*(char_ -
"CONFIG") >>
"CONFIG"];
267 end_ = no_case[lexeme[*(char_ -
"END;")] >>
"END;"];
269 input_.name(
"input_");
270 input_ = no_case[lexeme[*(char_ -
"INPUT")] >>
"INPUT"];
274 no_decl_.name(
"no_decl_");
275 no_decl_ = lexeme[*(char_)];
292 qi::on_error<qi::fail>(
294 phx::bind(&
ReportParseError, _1, _2, _3, _4, std::string(
"SplitInputFileParser"))
299 qi::rule<Iterator,
SplitInputFile(), ascii::space_type > root_rule_, both_, only_input_, unreadable_;
300 qi::rule<Iterator, ascii::space_type, std::string()> end_, input_, no_decl_;
301 qi::rule<Iterator, ascii::space_type> config_;
315 template<
typename Iterator,
typename Skipper = ascii::space_type>
322 namespace phx = boost::phoenix;
334 using boost::spirit::lexeme;
335 using boost::spirit::as_string;
337 root_rule_.name(
"CommentStripper_root_rule");
339 root_rule_ = eps[_val =
""] >> *line_[_val = _val + _1 +
"\n"] >> -last_line_[_val = _val + _1 +
"\n"];
342 line_.name(
"line_of_commented_input");
343 line_ = lexeme[*(char_ - eol -
"%") >> omit[-(
"%" >> lexeme[*(char_ - eol)] )] >> (eol ) ];
345 last_line_.name(
"line_of_commented_input_with_no_eol");
346 last_line_ = lexeme[*(char_ -
"%") >> omit[-(
"%" >> lexeme[*(char_ - eol)] )]] ;
358 qi::on_error<qi::fail>(
360 phx::bind(&
ReportParseError, _1, _2, _3, _4, std::string(
"CommentStripper"))
365 qi::rule<Iterator, std::string(), ascii::space_type > root_rule_;
366 qi::rule<Iterator, ascii::space_type, std::string()> line_, last_line_;
374 std::string::const_iterator iter = str_input_file.begin();
375 std::string::const_iterator end = str_input_file.end();
377 std::string uncommented_str_input;
379 phrase_parse(iter, end, commentparser,boost::spirit::ascii::space, uncommented_str_input);
381 iter = uncommented_str_input.begin();
382 end = uncommented_str_input.end();
387 phrase_parse(iter, end, spliter,boost::spirit::ascii::space, input_file);
405 return std::make_tuple(config_and_input.Config(), config_and_input.Input());
Provides the file_utilities screens for bertini2.
Definition classic_utilities.hpp:41
void ReportParseError(std::string::const_iterator begin, std::string::const_iterator end, std::string::const_iterator err_pos, boost::spirit::info const &what, std::string const &parser_name)
Report a parse error (via FormatParseError) to the log, for use in a Spirit on_error handler.
Definition qi_files.hpp:199
std::tuple< std::string, std::string > SplitIntoConfigAndInput(Path const &input_file)
Function for splitting a Bertini Classic style input file into config and input.
Definition classic_utilities.hpp:397
SplitInputFile ParseInputFile(std::string str_input_file)
Split a classic Bertini input file's contents into its config and input portions.
Definition classic_utilities.hpp:372
Definition classic_utilities.hpp:40
Definition algorithm_builder.hpp:36
std::string FileToString(Path const &input_path)
Read an entire file into a string.
Definition file_utilities.hpp:91
fs::path Path
Shorthand for a filesystem path.
Definition file_utilities.hpp:38
Provides all the include files needed to develop a parsing file that uses boost qi.