string::const_iterator it = str.begin();
string::const_iterator en = str.end();
for (; it != en; ++it)
- newname += isalnum(*it) ? *it : '_';
+ newname += isAlnumASCII(*it) ? *it : '_';
return newname;
}
void XHTMLStream::endParagraph()
{
- if (!isTagOpen(parsep_tag)) {
- // is it pending?
- TagStack::const_iterator dit = pending_tags_.begin();
- TagStack::const_iterator const den = pending_tags_.end();
- bool found = false;
- for (; dit != den; ++dit) {
- if (dit->tag_ == parsep_tag) {
- found = true;
- break;
- }
- }
-
- if (!found) {
- writeError("No paragraph separation tag found in endParagraph().");
- return;
- }
-
- // this case is normal.
+ if (isTagPending(parsep_tag)) {
+ // this case is normal. it just means we didn't have content,
+ // so the parsep_tag never got moved onto the tag stack.
while (!pending_tags_.empty()) {
// clear all pending tags up to and including the parsep tag.
// note that we work from the back, because we want to get rid
- // of everything that hasnt' been used.
+ // of everything that hasn't been used.
html::StartTag const cur_tag = pending_tags_.back();
string const & tag = cur_tag.tag_;
- tag_stack_.pop_back();
+ pending_tags_.pop_back();
if (tag == parsep_tag)
break;
}
return;
}
+ if (!isTagOpen(parsep_tag)) {
+ writeError("No paragraph separation tag found in endParagraph().");
+ return;
+ }
+
// this case is also normal, if the parsep tag is the last one
// on the stack. otherwise, it's an error.
while (!tag_stack_.empty()) {
// (ii) We didn't open it and html_in_par is true,
// but we are in the first par, and there is a next par.
ParagraphList::const_iterator nextpar = par;
- nextpar++;
+ ++nextpar;
bool const needclose =
(opened && (!runparams.html_in_par || nextpar != pend))
|| (!opened && runparams.html_in_par && par == pbegin && nextpar != pend);