#include "Language.h"
#include "MetricsInfo.h"
#include "output_latex.h"
+#include "output_xhtml.h"
#include "TextClass.h"
#include "support/debug.h"
char const lstinline_delimiters[] =
"!*()-=+|;:'\"`,<.>/?QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm";
-InsetListings::InsetListings(Buffer const & buf, InsetListingsParams const & par)
+InsetListings::InsetListings(Buffer * buf, InsetListingsParams const & par)
: InsetCollapsable(buf)
{
status_ = par.status();
}
-void InsetListings::updateLabels(ParIterator const & it)
+void InsetListings::updateLabels(ParIterator const & it, bool out)
{
Counters & cnts = buffer().masterBuffer()->params().documentClass().counters();
string const saveflt = cnts.current_float();
// Tell to captions what the current float is
cnts.current_float("listing");
- InsetCollapsable::updateLabels(it);
+ InsetCollapsable::updateLabels(it, out);
//reset afterwards
cnts.current_float(saveflt);
}
-docstring InsetListings::editMessage() const
-{
- return _("Opened Listing Inset");
-}
-
-
int InsetListings::latex(odocstream & os, OutputParams const & runparams) const
{
string param_string = params().params();
}
-docstring InsetListings::xhtml(odocstream & os, OutputParams const & rp) const
+docstring InsetListings::xhtml(XHTMLStream & os, OutputParams const & rp) const
{
- odocstringstream out;
+ odocstringstream ods;
+ XHTMLStream out(ods);
bool const isInline = params().isInline();
if (isInline)
- out << "<br />\n";
+ out << CompTag("br");
else {
- out << "<div class='float float-listings'>\n";
+ out << StartTag("div", "class='float float-listings'");
docstring caption = getCaptionHTML(rp);
if (!caption.empty())
- out << "<div class='float-caption'>" << caption << "</div>\n";
+ out << StartTag("div", "class='float-caption'")
+ << caption << EndTag("div");
}
- out << "<pre>\n";
+ out << StartTag("pre");
OutputParams newrp = rp;
- newrp.disable_captions = true;
+ newrp.html_disable_captions = true;
docstring def = InsetText::xhtml(out, newrp);
- out << "\n</pre>\n";
+ out << EndTag("pre");
if (isInline) {
- out << "<br />\n";
- os << out.str();
+ out << CompTag("br");
+ // escaping will already have been done
+ os << XHTMLStream::NextRaw() << ods.str();
} else {
- out << "</div>";
+ out << EndTag("div");
// In this case, this needs to be deferred, but we'll put it
// before anything the text itself deferred.
- def = out.str() + '\n' + def;
+ def = ods.str() + '\n' + def;
}
return def;
}
cur.bv().updateDialog("listings", params2string(params()));
break;
- case LFUN_TAB_INSERT: {
- bool const multi_par_selection = cur.selection() &&
- cur.selBegin().pit() != cur.selEnd().pit();
- if (multi_par_selection) {
- // If there is a multi-paragraph selection, a tab is inserted
- // at the beginning of each paragraph.
- cur.recordUndoSelection();
- pit_type const pit_end = cur.selEnd().pit();
- for (pit_type pit = cur.selBegin().pit(); pit <= pit_end; pit++) {
- paragraphs()[pit].insertChar(0, '\t',
- buffer().params().trackChanges);
- // Update the selection pos to make sure the selection does not
- // change as the inserted tab will increase the logical pos.
- if (cur.anchor_.pit() == pit)
- cur.anchor_.forwardPos();
- if (cur.pit() == pit)
- cur.forwardPos();
- }
- cur.finishUndo();
- } else {
- // Maybe we shouldn't allow tabs within a line, because they
- // are not (yet) aligned as one might do expect.
- FuncRequest cmd(LFUN_SELF_INSERT, from_ascii("\t"));
- dispatch(cur, cmd);
- }
- break;
- }
-
- case LFUN_TAB_DELETE:
- if (cur.selection()) {
- // If there is a selection, a tab (if present) is removed from
- // the beginning of each paragraph.
- cur.recordUndoSelection();
- pit_type const pit_end = cur.selEnd().pit();
- for (pit_type pit = cur.selBegin().pit(); pit <= pit_end; pit++) {
- Paragraph & par = paragraphs()[pit];
- if (par.getChar(0) == '\t') {
- if (cur.pit() == pit)
- cur.posBackward();
- if (cur.anchor_.pit() == pit && cur.anchor_.pos() > 0 )
- cur.anchor_.backwardPos();
-
- par.eraseChar(0, buffer().params().trackChanges);
- } else
- // If no tab was present, try to remove up to four spaces.
- for (int n_spaces = 0;
- par.getChar(0) == ' ' && n_spaces < 4; ++n_spaces) {
- if (cur.pit() == pit)
- cur.posBackward();
- if (cur.anchor_.pit() == pit && cur.anchor_.pos() > 0 )
- cur.anchor_.backwardPos();
-
- par.eraseChar(0, buffer().params().trackChanges);
- }
- }
- cur.finishUndo();
- } else {
- // If there is no selection, try to remove a tab or some spaces
- // before the position of the cursor.
- Paragraph & par = paragraphs()[cur.pit()];
- pos_type const pos = cur.pos();
-
- if (pos == 0)
- break;
-
- char_type const c = par.getChar(pos - 1);
- cur.recordUndo();
- if (c == '\t') {
- cur.posBackward();
- par.eraseChar(cur.pos(), buffer().params().trackChanges);
- } else
- for (int n_spaces = 0; cur.pos() > 0
- && par.getChar(cur.pos() - 1) == ' ' && n_spaces < 4;
- ++n_spaces) {
- cur.posBackward();
- par.eraseChar(cur.pos(), buffer().params().trackChanges);
- }
- cur.finishUndo();
- }
- break;
default:
InsetCollapsable::doDispatch(cur, cmd);
break;
case LFUN_CAPTION_INSERT:
status.setEnabled(!params().isInline());
return true;
- case LFUN_TAB_INSERT:
- case LFUN_TAB_DELETE:
- status.setEnabled(true);
- return true;
default:
return InsetCollapsable::getStatus(cur, cmd, status);
}