/* See source-cache.h. */
-bool
+std::string
source_cache::extract_lines (const struct source_text &text, int first_line,
- int last_line, std::string *lines)
+ int last_line)
{
int lineno = 1;
std::string::size_type pos = 0;
pos = new_pos;
if (lineno == last_line || pos == std::string::npos)
{
+ if (first_pos == std::string::npos)
+ return {};
if (pos == std::string::npos)
pos = text.contents.size ();
- *lines = text.contents.substr (first_pos, pos - first_pos);
- return true;
+ return text.contents.substr (first_pos, pos - first_pos);
}
++lineno;
++pos;
}
- return false;
+ return {};
}
#ifdef HAVE_SOURCE_HIGHLIGHT
for (const auto &item : m_source_map)
{
if (item.fullname == fullname)
- return extract_lines (item, first_line, last_line, lines);
+ {
+ *lines = extract_lines (item, first_line, last_line);
+ return true;
+ }
}
const char *lang_name = get_language_name (SYMTAB_LANGUAGE (s));
std::ifstream input (fullname);
if (input.is_open ())
{
+ if (s->line_charpos == 0)
+ {
+ scoped_fd desc = open_source_file (s);
+ if (desc.get () < 0)
+ return false;
+ find_source_lines (s, desc.get ());
+ }
srchilite::SourceHighlight highlighter ("esc.outlang");
highlighter.setStyleFile("esc.style");
if (m_source_map.size () > MAX_ENTRIES)
m_source_map.erase (m_source_map.begin ());
- return extract_lines (m_source_map.back (), first_line,
- last_line, lines);
+ *lines = extract_lines (m_source_map.back (), first_line,
+ last_line);
+ return true;
}
}
}