#include "InsetListings.h"
#include "InsetCaption.h"
+#include "Buffer.h"
+#include "BufferParams.h"
+#include "Counters.h"
#include "Language.h"
#include "gettext.h"
#include "DispatchResult.h"
using support::contains;
using support::subst;
-using std::auto_ptr;
using std::istringstream;
using std::ostream;
using std::ostringstream;
using std::string;
-char const lstinline_delimiters[] = "!*()-=+|;:'\"`,<.>/?QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm";
+char const lstinline_delimiters[] =
+ "!*()-=+|;:'\"`,<.>/?QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm";
void InsetListings::init()
{
font.decSize();
font.setColor(Color::none);
setLabelFont(font);
- text_.current_font.setLanguage(latex_language);
- text_.real_current_font.setLanguage(latex_language);
+ // FIXME: what to do with those?
+ //text_.current_font.setLanguage(latex_language);
+ //text_.real_current_font.setLanguage(latex_language);
}
}
-auto_ptr<Inset> InsetListings::doClone() const
+Inset * InsetListings::clone() const
{
- return auto_ptr<Inset>(new InsetListings(*this));
+ return new InsetListings(*this);
}
}
+void InsetListings::updateLabels(Buffer const & buf, ParIterator const & it)
+{
+ Counters & cnts = buf.params().getTextClass().counters();
+ string const saveflt = cnts.current_float();
+
+ // Tell to captions what the current float is
+ cnts.current_float("listing");
+
+ InsetCollapsable::updateLabels(buf, it);
+
+ //reset afterwards
+ cnts.current_float(saveflt);
+}
+
+
void InsetListings::write(Buffer const & buf, ostream & os) const
{
os << "listings" << "\n";
int InsetListings::latex(Buffer const & buf, odocstream & os,
OutputParams const & runparams) const
{
- string param_string = params().params(",", true);
+ string param_string = params().params();
// NOTE: I use {} to quote text, which is an experimental feature
// of the listings package (see page 25 of the manual)
int lines = 0;
- bool lstinline = params().isInline();
+ bool isInline = params().isInline();
// get the paragraphs. We can not output them directly to given odocstream
// because we can not yet determine the delimiter character of \lstinline
docstring code;
++par;
// for the inline case, if there are multiple paragraphs
// they are simply joined. Otherwise, expect latex errors.
- if (par != end && !lstinline && !captionline) {
+ if (par != end && !isInline && !captionline) {
code += "\n";
++lines;
}
}
- char const * delimiter;
- if (lstinline) {
- for (delimiter = lstinline_delimiters; delimiter != '\0'; ++delimiter)
+ if (isInline) {
+ char const * delimiter = lstinline_delimiters;
+ for (; delimiter != '\0'; ++delimiter)
if (!contains(code, *delimiter))
break;
- // this code piece contains all possible special character? !!!
+ // This code piece contains all possible special character? !!!
// Replace ! with a warning message and use ! as delimiter.
if (*delimiter == '\0') {
code = subst(code, from_ascii("!"), from_ascii(" WARNING: no lstline delimiter can be used "));
os << "\\lstinline" << *delimiter;
else
os << "\\lstinline[" << from_ascii(param_string) << "]" << *delimiter;
+ os << code
+ << *delimiter;
} else {
docstring const caption = getCaption(buf, runparams);
if (param_string.empty() && caption.empty())
os << from_utf8(param_string) << "]\n";
}
lines += 4;
- }
- os << code;
- if (lstinline)
- os << *delimiter;
- else {
- os << "\n\\end{lstlisting}\n\\endgroup\n";
+ os << code
+ << "\n\\end{lstlisting}\n\\endgroup\n";
lines += 3;
}
}
-bool InsetListings::metrics(MetricsInfo & mi, Dimension & dim) const
+void InsetListings::metrics(MetricsInfo & mi, Dimension & dim) const
{
Font tmpfont = mi.base.font;
getDrawFont(mi.base.font);
mi.base.font.realize(tmpfont);
InsetCollapsable::metrics(mi, dim);
mi.base.font = tmpfont;
- bool const changed = dim_ != dim;
- dim_ = dim;
- return changed;
}