Let the annotation parser skip html tags
[mussa.git] / alg / sequence.cpp
index e2961c2c7bf60de6d7339070bd4ab9990365c4eb..bbd6292c75f90dd81977887b301485eabf2a712b 100644 (file)
@@ -380,7 +380,7 @@ struct push_back_seq {
   };
 };
 
-void
+bool
 Sequence::parse_annot(std::string data, int start_index, int end_index)
 {
   int start=0;
@@ -401,6 +401,14 @@ Sequence::parse_annot(std::string data, int start_index, int end_index)
                       +(spirit::space_p)
                     ) >>
                     *(
+                       ( // ignore html tags
+                         *(spirit::space_p) >>
+                         spirit::ch_p('<') >> 
+                         +(~spirit::ch_p('>')) >>
+                         spirit::ch_p('>') >>
+                         *(spirit::space_p)
+                       )
+                     |
                       ( // parse an absolute location name
                        (spirit::uint_p[spirit::assign_a(start)] >> 
                         +spirit::space_p >>
@@ -422,7 +430,7 @@ Sequence::parse_annot(std::string data, int start_index, int end_index)
                         // read the comment above struct push_back_annot
                        )[push_back_annot(annots, start, end, type, name)]
                      |
-                      (spirit::ch_p('>') >> 
+                      ((spirit::ch_p('>')|spirit::str_p("&gt;")) >> 
                          (*(spirit::print_p))[spirit::assign_a(name)] >>
                          spirit::eol_p >> 
                          (+(spirit::chset<>(iupac_alphabet)))[spirit::assign_a(seq)]
@@ -436,6 +444,7 @@ Sequence::parse_annot(std::string data, int start_index, int end_index)
                 
   // go seearch for query sequences 
   find_sequences(query_seqs.begin(), query_seqs.end());
+  return status;
 }
 
 void Sequence::add_annotation(const annot& a)