void operator()(std::string::const_iterator,
std::string::const_iterator) const
{
- std::cout << "adding seq: " << name << " " << seq << std::endl;
- Sequence s(seq);
+ // filter out newlines from our sequence
+ std::string new_seq;
+ for(std::string::const_iterator seq_i = seq.begin();
+ seq_i != seq.end();
+ ++seq_i)
+ {
+ if (*seq_i != '\n') new_seq += *seq_i;
+ }
+ std::cout << "adding seq: " << name << " " << new_seq << std::endl;
+
+ Sequence s(new_seq);
s.set_header(name);
seq_list.push_back(s);
};
std::list<Sequence> query_seqs;
bool status = spirit::parse(data.begin(), data.end(),
- //begin grammar
(
+ //begin grammar
(+(spirit::alpha_p))[spirit::assign_a(species)] >>
+ +(spirit::space_p) >>
*(
- // parse an absolute location name
+ ( // parse an absolute location name
(spirit::uint_p[spirit::assign_a(start)] >>
+ +spirit::space_p >>
spirit::uint_p[spirit::assign_a(end)] >>
- (*(spirit::alpha_p))[spirit::assign_a(name)]/* >>
- (*(spirit::alpha_p))[spirit::assign_a(type)]*/
+ +spirit::space_p >>
+ (*(spirit::alpha_p|spirit::digit_p))[spirit::assign_a(name)] >>
+ // optional type
+ !(
+ +spirit::space_p >>
+ (*(spirit::alpha_p))[spirit::assign_a(type)]
+ )
// to understand how this group gets set
// read the comment above struct push_back_annot
)[push_back_annot(annots, start, end, type, name)]
|
(spirit::ch_p('>') >>
- (*(spirit::alpha_p))[spirit::assign_a(name)] >>
+ (*(~spirit::chlit<char>('\n')))[spirit::assign_a(name)] >>
+ +spirit::space_p >>
(+(spirit::ch_p('A')|
spirit::ch_p('G')|
spirit::ch_p('C')|
- spirit::ch_p('T'))[spirit::assign_a(seq)])
+ spirit::ch_p('T')|
+ spirit::ch_p('N')|
+ spirit::ch_p('\n')))[spirit::assign_a(seq)]
)[push_back_seq(query_seqs, name, seq)]
+ ) >>
+ *spirit::space_p
)
- ),
//end grammar
- spirit::space_p).full;
+ ) /*,
+ spirit::space_p*/).full;
}
/*