mirror of
https://git.lyx.org/repos/lyx.git
synced 2025-01-18 21:45:24 +00:00
An dialog is displayed if some character can not be encoded properly. The offending character will be highlighted. (BUG3511)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_1_5_X@22235 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
9975b55687
commit
3181c5122f
@ -946,17 +946,30 @@ bool Buffer::makeLaTeXFile(FileName const & fname,
|
||||
if (!openFileWrite(ofs, fname))
|
||||
return false;
|
||||
|
||||
ErrorList & errorList = pimpl_->errorLists["Export"];
|
||||
errorList.clear();
|
||||
bool failed_export = false;
|
||||
try {
|
||||
writeLaTeXSource(ofs, original_path,
|
||||
runparams, output_preamble, output_body);
|
||||
}
|
||||
catch (EncodingException & e) {
|
||||
docstring msg = _("Could not find LaTeX command for character '%'");
|
||||
msg[msg.size() - 2] = e.failed_char;
|
||||
errorList.push_back(ErrorItem(msg, _("Some characters of your document are probably not "
|
||||
"representable in the chosen encoding.\n"
|
||||
"Changing the document encoding to utf8 could help."),
|
||||
e.par_id, e.pos, e.pos + 1));
|
||||
failed_export = true;
|
||||
}
|
||||
catch (iconv_codecvt_facet_exception & e) {
|
||||
lyxerr << "Caught iconv exception: " << e.what() << endl;
|
||||
errorList.push_back(ErrorItem(_("iconv conversion failed"),
|
||||
_(e.what()), -1, 0, 0));
|
||||
failed_export = true;
|
||||
}
|
||||
catch (std::exception const & e) {
|
||||
lyxerr << "Caught \"normal\" exception: " << e.what() << endl;
|
||||
errorList.push_back(ErrorItem(_("conversion failed"),
|
||||
_(e.what()), -1, 0, 0));
|
||||
failed_export = true;
|
||||
}
|
||||
catch (...) {
|
||||
@ -970,15 +983,8 @@ bool Buffer::makeLaTeXFile(FileName const & fname,
|
||||
failed_export = true;
|
||||
lyxerr << "File '" << fname << "' was not closed properly." << endl;
|
||||
}
|
||||
|
||||
if (failed_export) {
|
||||
Alert::error(_("Encoding error"),
|
||||
_("Some characters of your document are probably not "
|
||||
"representable in the chosen encoding.\n"
|
||||
"Changing the document encoding to utf8 could help."));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
errors("Export");
|
||||
return !failed_export;
|
||||
}
|
||||
|
||||
|
||||
|
@ -251,6 +251,18 @@ char_type const max_ucs4 = 0x110000;
|
||||
} // namespace anon
|
||||
|
||||
|
||||
EncodingException::EncodingException(char_type c)
|
||||
: failed_char(c), par_id(0), pos(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
const char * EncodingException::what() const throw()
|
||||
{
|
||||
return "Could not find LaTeX command for a character";
|
||||
}
|
||||
|
||||
|
||||
Encoding::Encoding(string const & n, string const & l, string const & i,
|
||||
bool f, Encoding::Package p)
|
||||
: Name_(n), LatexName_(l), iconvName_(i), fixedwidth_(f), package_(p)
|
||||
@ -325,10 +337,7 @@ docstring const Encoding::latexChar(char_type c) const
|
||||
// c cannot be encoded in this encoding
|
||||
CharInfoMap::const_iterator const it = unicodesymbols.find(c);
|
||||
if (it == unicodesymbols.end())
|
||||
lyxerr << "Could not find LaTeX command for character 0x"
|
||||
<< std::hex << c << std::dec
|
||||
<< ".\nLaTeX export will fail."
|
||||
<< endl;
|
||||
throw EncodingException(c);
|
||||
else
|
||||
return it->second.command;
|
||||
}
|
||||
|
@ -24,6 +24,17 @@ namespace support { class FileName; }
|
||||
|
||||
class LaTeXFeatures;
|
||||
|
||||
class EncodingException : public std::exception {
|
||||
public:
|
||||
EncodingException(char_type c);
|
||||
virtual ~EncodingException() throw() {}
|
||||
virtual const char * what() const throw();
|
||||
|
||||
char_type failed_char;
|
||||
int par_id;
|
||||
pos_type pos;
|
||||
};
|
||||
|
||||
|
||||
///
|
||||
class Encoding {
|
||||
|
@ -2229,10 +2229,18 @@ bool Paragraph::simpleTeXOnePar(Buffer const & buf,
|
||||
rp.free_spacing = style->free_spacing;
|
||||
rp.local_font = &font;
|
||||
rp.intitle = style->intitle;
|
||||
pimpl_->simpleTeXSpecialChars(buf, bparams, os,
|
||||
|
||||
try {
|
||||
pimpl_->simpleTeXSpecialChars(buf, bparams, os,
|
||||
texrow, rp, running_font,
|
||||
basefont, outerfont, open_font,
|
||||
runningChange, *style, i, column, c);
|
||||
} catch (EncodingException & e) {
|
||||
// add location information and throw again.
|
||||
e.par_id = id();
|
||||
e.pos = i;
|
||||
throw(e);
|
||||
}
|
||||
|
||||
// Set the encoding to that returned from simpleTeXSpecialChars (see
|
||||
// comment for encoding member in OutputParams.h)
|
||||
|
@ -29,7 +29,8 @@ What's new
|
||||
|
||||
* USER INTERFACE
|
||||
|
||||
|
||||
- An dialog is displayed if some character can not be encoded properly. The
|
||||
offending character will be highlighted. (BUG3511)
|
||||
|
||||
|
||||
* DOCUMENT INPUT/OUTPUT
|
||||
|
Loading…
x
Reference in New Issue
Block a user