> > > So please commit and close bug 3511 with target 1.5.4.
> >
> > Done.
>
> Note that now LyX crashes on View->Source.

Ohmm, This is because view source does not catch this exception. How
about the attached patch? It is not a good idea to show the error
dialog here because the view source dialog will be updated frequently.

Please test.

Thanks.
Bo
Index: src/Buffer.cpp
===================================================================
--- src/Buffer.cpp	(revision 22235)
+++ src/Buffer.cpp	(working copy)
@@ -1799,34 +1799,39 @@
 	// No side effect of file copying and image conversion
 	runparams.dryrun = true;
 
-	if (full_source) {
-		os << "% " << _("Preview source code") << "\n\n";
-		if (isLatex())
-			writeLaTeXSource(os, filePath(), runparams, true, true);
-		else {
-			writeDocBookSource(os, fileName(), runparams, false);
-		}
-	} else {
-		runparams.par_begin = par_begin;
-		runparams.par_end = par_end;
-		if (par_begin + 1 == par_end)
-			os << "% "
-			   << bformat(_("Preview source code for paragraph %1$d"), par_begin)
-			   << "\n\n";
-		else
-			os << "% "
-			   << bformat(_("Preview source code from paragraph %1$s to %2$s"),
-					convert<docstring>(par_begin),
-					convert<docstring>(par_end - 1))
-			   << "\n\n";
-		// output paragraphs
-		if (isLatex()) {
-			texrow().reset();
-			latexParagraphs(*this, paragraphs(), os, texrow(), runparams);
+	try {
+		if (full_source) {
+			os << "% " << _("Preview source code") << "\n\n";
+			if (isLatex())
+				writeLaTeXSource(os, filePath(), runparams, true, true);
+			else {
+				writeDocBookSource(os, fileName(), runparams, false);
+			}
+
 		} else {
-			// DocBook
-			docbookParagraphs(paragraphs(), *this, os, runparams);
+			runparams.par_begin = par_begin;
+			runparams.par_end = par_end;
+			if (par_begin + 1 == par_end)
+				os << "% "
+				   << bformat(_("Preview source code for paragraph %1$d"), par_begin)
+				   << "\n\n";
+			else
+				os << "% "
+				   << bformat(_("Preview source code from paragraph %1$s to %2$s"),
+						convert<docstring>(par_begin),
+						convert<docstring>(par_end - 1))
+				   << "\n\n";
+			// output paragraphs
+			if (isLatex()) {
+				texrow().reset();
+				latexParagraphs(*this, paragraphs(), os, texrow(), runparams);
+			} else {
+				// DocBook
+				docbookParagraphs(paragraphs(), *this, os, runparams);
+			}
 		}
+	} catch (EncodingException & e) {
+		os << _("<Error: Unknown character '") << e.failed_char << "'>";
 	}
 }
 

Reply via email to