return new InsetLabel(buf, icp);
}
-} // namespace anon
+} // namespace
InsetInclude::InsetInclude(Buffer * buf, InsetCommandParams const & p)
InsetListingsParams new_params(to_utf8(p["lstparams"]));
docstring const new_label =
from_utf8(new_params.getParamValue("label"));
-
+
if (new_label.empty()) {
delete label_;
label_ = 0;
} else {
docstring old_label;
- if (label_)
+ if (label_)
old_label = label_->getParam("name");
else {
label_ = createLabel(buffer_, new_label);
label_->setBuffer(buffer());
- }
+ }
if (new_label != old_label) {
label_->updateLabelAndRefs(new_label, &cur);
// the label might have been adapted (duplicate)
if (new_label != label_->getParam("name")) {
- new_params.addParam("label", "{" +
+ new_params.addParam("label", "{" +
to_utf8(label_->getParam("name")) + "}", true);
p["lstparams"] = from_utf8(new_params.params());
}
Buffer * InsetInclude::getChildBuffer() const
{
- Buffer * childBuffer = loadIfNeeded();
+ Buffer * childBuffer = loadIfNeeded();
// FIXME RECURSIVE INCLUDE
// This isn't sufficient, as the inclusion could be downstream.
// try to load the cloned child document again.
if (buffer().isClone())
return child_buffer_;
-
+
// Don't try to load it again if we failed before.
if (failedtoload_ || isVerbatim(params()) || isListings(params()))
return 0;
// Use cached Buffer if possible.
if (child_buffer_ != 0) {
if (theBufferList().isLoaded(child_buffer_)
- // additional sanity check: make sure the Buffer really is
+ // additional sanity check: make sure the Buffer really is
// associated with the file we want.
&& child_buffer_ == theBufferList().getBuffer(included_file))
return child_buffer_;
// Using listings, it is always possible to have a caption,
// even for non-floats. Using minted, only floats can have a
// caption. So, with minted we use the following strategy.
- // If a caption or the float parameter are specified, we
- // assume that the listing is floating. In this case, the
+ // If a caption was specified but the float parameter was not,
+ // we ourselves add a caption above the listing (because the
+ // listing comes from a file and might span several pages).
+ // Otherwise, if float was specified, the floating listing
+ // environment provided by minted is used. In either case, the
// label parameter is taken as the label by which the float
// can be referenced, otherwise it will have the meaning
// intended by minted. In this last case, the label will
string caption;
string label;
string placement;
- bool isfloat = false;
+ bool isfloat = lstparams.isFloat();
if (use_minted) {
// Get float placement, language, caption, and
// label, then remove the relative options.
getVectorFromString(parameters, ",", false);
for (size_t i = 0; i < opts.size(); ++i) {
if (prefixIs(opts[i], "float")) {
- isfloat = true;
if (prefixIs(opts[i], "float="))
placement = opts[i].substr(6);
opts.erase(opts.begin() + i--);
language = opts[i].substr(9);
opts.erase(opts.begin() + i--);
} else if (prefixIs(opts[i], "caption=")) {
- isfloat = true;
caption = opts[i].substr(8);
opts.erase(opts.begin() + i--);
} else if (prefixIs(opts[i], "label=")) {
}
}
if (!label.empty()) {
- if (isfloat)
+ if (isfloat || !caption.empty())
label = trim(label, "{}");
else
opts.push_back("label=" + label);
if (!placement.empty())
os << '[' << placement << "]";
os << breakln;
+ } else if (use_minted && !caption.empty()) {
+ os << breakln << "\\lyxmintcaption[t]{" << caption;
+ if (!label.empty())
+ os << "\\label{" << label << "}";
+ os << "}\n";
}
os << (use_minted ? "\\inputminted" : "\\lstinputlisting");
if (!parameters.empty())
os << "[" << parameters << "]";
if (use_minted)
- os << '{' << language << '}';
+ os << '{' << ascii_lowercase(language) << '}';
os << '{' << incfile << '}';
if (use_minted && isfloat) {
if (!caption.empty())
return docstring();
// are we generating only some paragraphs, or all of them?
- bool const all_pars = !rp.dryrun ||
- (rp.par_begin == 0 &&
+ bool const all_pars = !rp.dryrun ||
+ (rp.par_begin == 0 &&
rp.par_end == (int)buffer().text().paragraphs().size());
-
+
OutputParams op = rp;
if (all_pars) {
op.par_begin = 0;
op.par_end = 0;
ibuf->writeLyXHTMLSource(xs.os(), op, Buffer::IncludedFile);
} else
- xs << XHTMLStream::ESCAPE_NONE
- << "<!-- Included file: "
- << from_utf8(included_file.absFileName())
- << XHTMLStream::ESCAPE_NONE
+ xs << XHTMLStream::ESCAPE_NONE
+ << "<!-- Included file: "
+ << from_utf8(included_file.absFileName())
+ << XHTMLStream::ESCAPE_NONE
<< " -->";
return docstring();
}
if (isVerbatim(params()))
features.require("verbatim");
else if (isListings(params())) {
- if (buffer().params().use_minted)
+ if (buffer().params().use_minted) {
features.require("minted");
- else
+ string const opts = to_utf8(params()["lstparams"]);
+ InsetListingsParams lstpars(opts);
+ if (!lstpars.isFloat() && contains(opts, "caption="))
+ features.require("lyxmintcaption");
+ } else
features.require("listings");
}
}
-void InsetInclude::collectBibKeys(InsetIterator const & /*di*/) const
+void InsetInclude::collectBibKeys(InsetIterator const & /*di*/, FileNameList & checkedFiles) const
{
Buffer * child = loadIfNeeded();
if (!child)
// But it'll have to do for now.
if (child == &buffer())
return;
- child->collectBibKeys();
+ child->collectBibKeys(checkedFiles);
}
}
}
-} // namespace anon
+} // namespace
void InsetInclude::addPreview(DocIterator const & /*inset_pos*/,
InsetListingsParams par(to_utf8(params()["lstparams"]));
par.addParam("label", "{" + to_utf8(new_label) + "}", true);
p["lstparams"] = from_utf8(par.params());
- setParams(p);
+ setParams(p);
}