// namespace {
struct compare_tags {
- // used by lower_bound
- inline
- int operator()(keyword_item const & a, char const * const tag) const {
- return compare_no_case(a.tag, tag) < 0;
- }
- // used by sorted and sort
+ // used by lower_bound, sort and sorted
inline
int operator()(keyword_item const & a, keyword_item const & b) const {
return compare_no_case(a.tag, b.tag) < 0;
}
-string const LyXLex::Pimpl::GetString() const
+string LyXLex::Pimpl::GetString() const
{
return string(buff);
}
bool LyXLex::Pimpl::setFile(string const & filename)
{
- if (fb__.is_open())
- lyxerr << "Error in LyXLex::setFile: "
- "file or stream already set." << endl;
+ //if (fb__.is_open())
+ // lyxerr << "Error in LyXLex::setFile: "
+ // "file or stream already set." << endl;
fb__.open(filename.c_str(), ios::in);
- is.rdbuf(&fb__);
+ //is.rdbuf(&fb__);
name = filename;
lineno = 0;
return fb__.is_open() && is.good();
bool LyXLex::Pimpl::next(bool esc /* = false */)
{
+ if (!pushTok.empty()) {
+ pushTok.copy(buff, string::npos);
+ buff[pushTok.length()] = '\0';
+ pushTok.erase();
+ return true;
+ }
if (!esc) {
unsigned char c = 0; // getc() returns an int
char cc = 0;
}
}
- ///
+
int LyXLex::Pimpl::search_kw(char const * const tag) const
{
+ keyword_item search_tag = { tag, 0 };
keyword_item * res =
lower_bound(table, table + no_items,
- tag, compare_tags());
+ search_tag, compare_tags());
if (res != table + no_items
&& !compare_no_case(res->tag, tag))
return res->code;
bool LyXLex::Pimpl::nextToken()
{
+ if (!pushTok.empty()) {
+ pushTok.copy(buff, string::npos);
+ buff[pushTok.length()] = '\0';
+ pushTok.erase();
+ return true;
+ }
+
status = 0;
while (is && !status) {
unsigned char c = 0;
buff[0] = '\0';
return false;
}
+
+
+void LyXLex::Pimpl::pushToken(string const & pt)
+{
+ pushTok = pt;
+}