+ } else if ((c == 'p' || c == 'm' || c == 'b'||
+ c == '!' || c == '@' || c == '>' || c == '<') &&
+ it + 1 != hh.end() && *(it + 1) == '{') {
+ // @{decl.} and p{width} are standard LaTeX, the
+ // others are extensions by array.sty
+ bool const newcolumn = c == 'p' || c == 'm' || c == 'b';
+ if (newcolumn) {
+ // this declares a new column
+ if (col >= ncols())
+ // Only intercolumn stuff is allowed
+ // in the last dummy column
+ break;
+ colinfo_[col].align_ = 'l';
+ } else {
+ // this is intercolumn stuff
+ if (colinfo_[col].special_.empty())
+ // Overtake possible lines
+ colinfo_[col].special_ = docstring(colinfo_[col].lines_, '|');
+ }
+ int brace_open = 0;
+ int brace_close = 0;
+ while (it != hh.end()) {
+ c = *it;
+ colinfo_[col].special_ += c;
+ if (c == '{')
+ ++brace_open;
+ else if (c == '}')
+ ++brace_close;
+ ++it;
+ if (brace_open > 0 && brace_open == brace_close)
+ break;
+ }
+ --it;
+ if (newcolumn) {
+ colinfo_[col].lines_ = count(
+ colinfo_[col].special_.begin(),
+ colinfo_[col].special_.end(), '|');
+ LYXERR(Debug::MATHED, "special column separator: `"
+ << to_utf8(colinfo_[col].special_) << '\'');
+ ++col;
+ colinfo_[col].lines_ = 0;
+ colinfo_[col].special_.clear();
+ }