XHTML output for InsetInclude.

Here's the deal:
* With verbatim, we include it verbatim. This would allow the inclusion of 
  other HTML files.
* With listings, we include it verbatim, wrapped in <pre>.
* With Input and Include, we check if it's a LyX file. If not, we don't do
  anything, since we don't know how to include (say) a TeX file in the HTML
  output. (Wanna call tex4ht, anyone?) If it is a LyX file, we let it write
  itself as HTML, and include it.



git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@30191 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Richard Heck 2009-06-19 15:11:33 +00:00
parent 1898db6aca
commit 16f119cab5
3 changed files with 58 additions and 11 deletions

View File

@ -14,8 +14,9 @@ Known issues:
These insets are basically done, though there are probably issues here and there, These insets are basically done, though there are probably issues here and there,
and there are even some FIXMEs: and there are even some FIXMEs:
Bibitem, Branch, Caption, Collapsable, Footnote, Hyperlink, Info, Label, Line, Bibitem, Branch, Caption, Collapsable, Footnote, Hyperlink, Include, Info,
Listings, Marginal, Note, Newline, Newpage, Quotes, Space, SpecialChar, Wrap Label, Line, Listings, Marginal, Note, Newline, Newpage, Quotes, Space,
SpecialChar, Wrap
These insets do nothing for XHTML: These insets do nothing for XHTML:
ERT, OptArg, Phantom ERT, OptArg, Phantom
@ -63,9 +64,6 @@ These do not yet work and need some attention:
about export formats, etc, to get it completely right. We'll also want to make about export formats, etc, to get it completely right. We'll also want to make
some use of the params, eg, on width and height. I guess there is also some some use of the params, eg, on width and height. I guess there is also some
issue about converting the graphics formats? issue about converting the graphics formats?
InsetInclude: I think we just want to include it, straightforwardly. Probably will
base this more on the latex() routine, then. Another possibility, maybe with a
flag of some sort, would be to do it as a separate file, to which we link.
InsetRef: Presumably, this is an internal link. But what should the text be, and how InsetRef: Presumably, this is an internal link. But what should the text be, and how
should we get it? Probably some validation thing again, where labels tell us where should we get it? Probably some validation thing again, where labels tell us where
they are. Alternatively, we could parse the aux file. they are. Alternatively, we could parse the aux file.

View File

@ -377,7 +377,7 @@ Buffer * InsetInclude::getChildBuffer() const
Buffer * InsetInclude::loadIfNeeded() const Buffer * InsetInclude::loadIfNeeded() const
{ {
// Don't try to load it again if we failed before. // Don't try to load it again if we failed before.
if (failedtoload_) if (failedtoload_ || isVerbatim(params()) || isListings(params()))
return 0; return 0;
// Use cached Buffer if possible. // Use cached Buffer if possible.
@ -388,13 +388,9 @@ Buffer * InsetInclude::loadIfNeeded() const
child_buffer_ = 0; child_buffer_ = 0;
} }
InsetCommandParams const & p = params();
if (isVerbatim(p) || isListings(p))
return 0;
string const parent_filename = buffer().absFileName(); string const parent_filename = buffer().absFileName();
FileName const included_file = FileName const included_file =
makeAbsPath(to_utf8(p["filename"]), onlyPath(parent_filename)); makeAbsPath(to_utf8(params()["filename"]), onlyPath(parent_filename));
if (!isLyXFilename(included_file.absFilename())) if (!isLyXFilename(included_file.absFilename()))
return 0; return 0;
@ -626,6 +622,57 @@ int InsetInclude::latex(odocstream & os, OutputParams const & runparams) const
} }
docstring InsetInclude::xhtml(odocstream & os, OutputParams const &rp) const
{
if (rp.inComment)
return docstring();
// For verbatim and listings, we just include the contents of the file as-is.
// In the case of listings, we wrap it in <pre>.
bool const listing = isListings(params();
if (listing || isVerbatim(params())) {
if (listing)
os << "<pre>\n";
// FIXME: We don't know the encoding of the file, default to UTF-8.
os << includedFilename(buffer(), params()).fileContents("UTF-8");
if (listing)
os << "</pre>\n";
return docstring();
}
// We don't (yet) know how to Input or Include non-LyX files.
// (If we wanted to get really arcane, we could run some tex2html
// converter on the included file. But that's just masochistic.)
if (!isLyXFilename(included_file.absFilename())) {
frontend::Alert::warning(_("Unsupported Inclusion"),
_("LyX does not know how to include non-LyX files when"
"generating HTML output. Offending file: ") +
params()["filename"]);
return docstring();
}
// In the other cases, we will generate the HTML and include it.
// Check we're not trying to include ourselves.
// FIXME RECURSIVE INCLUDE
string const parent_filename = buffer().absFileName();
FileName const included_file =
makeAbsPath(to_utf8(params()["filename"]), onlyPath(parent_filename));
if (buffer().absFileName() == included_file.absFilename()) {
Alert::error(_("Recursive input"),
bformat(_("Attempted to include file %1$s in itself! "
"Ignoring inclusion."), params()["filename"]));
return docstring();
}
Buffer const * const ibuf = loadIfNeeded();
if (!ibuf)
return docstring();
ibuf->writeLyXHTMLSource(os, rp, true);
return docstring();
}
int InsetInclude::plaintext(odocstream & os, OutputParams const &) const int InsetInclude::plaintext(odocstream & os, OutputParams const &) const
{ {
if (isVerbatim(params()) || isListings(params())) { if (isVerbatim(params()) || isListings(params())) {

View File

@ -80,6 +80,8 @@ public:
/// ///
int docbook(odocstream &, OutputParams const &) const; int docbook(odocstream &, OutputParams const &) const;
/// ///
docstring xhtml(odocstream &, OutputParams const &) const;
///
void validate(LaTeXFeatures &) const; void validate(LaTeXFeatures &) const;
/// ///
void addPreview(graphics::PreviewLoader &) const; void addPreview(graphics::PreviewLoader &) const;