mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
Improve LaTeX format detection
libmime is a bit lacking here.
This commit is contained in:
parent
0613a218aa
commit
f4eae12d60
@ -253,12 +253,11 @@ string guessFormatFromContents(FileName const & fn)
|
||||
string str;
|
||||
string format;
|
||||
bool firstLine = true;
|
||||
bool backslash = false;
|
||||
int dollars = 0;
|
||||
while ((count++ < max_count) && format.empty()) {
|
||||
if (ifs.eof()) {
|
||||
LYXERR(Debug::GRAPHICS, "filetools(getFormatFromContents)\n"
|
||||
<< "\tFile type not recognised before EOF!");
|
||||
if (ifs.eof())
|
||||
break;
|
||||
}
|
||||
|
||||
getline(ifs, str);
|
||||
string const stamp = str.substr(0, 2);
|
||||
@ -363,9 +362,32 @@ string guessFormatFromContents(FileName const & fn)
|
||||
|
||||
else if (contains(str, "BITPIX"))
|
||||
format = "fits";
|
||||
|
||||
else if (contains(str, "\\documentclass") ||
|
||||
contains(str, "\\chapter") ||
|
||||
contains(str, "\\section") ||
|
||||
contains(str, "\\begin") ||
|
||||
contains(str, "\\end") ||
|
||||
contains(str, "$$") ||
|
||||
contains(str, "\\[") ||
|
||||
contains(str, "\\]"))
|
||||
format = "latex";
|
||||
else {
|
||||
if (contains(str, '\\'))
|
||||
backslash = true;
|
||||
dollars += count_char(str, '$');
|
||||
}
|
||||
}
|
||||
|
||||
if (!format.empty()) {
|
||||
if (format.empty() && backslash && dollars > 1)
|
||||
// inline equation
|
||||
format = "latex";
|
||||
|
||||
if (format.empty()) {
|
||||
if (ifs.eof())
|
||||
LYXERR(Debug::GRAPHICS, "filetools(getFormatFromContents)\n"
|
||||
"\tFile type not recognised before EOF!");
|
||||
} else {
|
||||
LYXERR(Debug::GRAPHICS, "Recognised Fileformat: " << format);
|
||||
return format;
|
||||
}
|
||||
|
@ -882,6 +882,18 @@ docstring const subst(docstring const & a,
|
||||
}
|
||||
|
||||
|
||||
int count_char(string const & str, char chr)
|
||||
{
|
||||
int count = 0;
|
||||
string::const_iterator lit = str.begin();
|
||||
string::const_iterator end = str.end();
|
||||
for (; lit != end; ++lit)
|
||||
if ((*lit) == chr)
|
||||
count++;
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
/// Count all occurences of char \a chr inside \a str
|
||||
int count_char(docstring const & str, docstring::value_type chr)
|
||||
{
|
||||
|
@ -188,6 +188,9 @@ std::string const subst(std::string const & a,
|
||||
docstring const subst(docstring const & a,
|
||||
docstring const & oldstr, docstring const & newstr);
|
||||
|
||||
/// Count all occurences of char \a chr inside \a str
|
||||
int count_char(std::string const & str, char chr);
|
||||
|
||||
/// Count all occurences of char \a chr inside \a str
|
||||
int count_char(docstring const & str, docstring::value_type chr);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user