Listings: Move \label{} outside of caption={}

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@23853 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Bo Peng 2008-03-20 16:04:22 +00:00
parent b7800ca8de
commit 8753847055

View File

@ -30,6 +30,8 @@
#include "support/docstream.h"
#include "support/lstrings.h"
#include <boost/regex.hpp>
#include <sstream>
using namespace std;
@ -37,6 +39,7 @@ using namespace lyx::support;
namespace lyx {
using boost::regex;
char const lstinline_delimiters[] =
"!*()-=+|;:'\"`,<.>/?QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm";
@ -276,7 +279,22 @@ docstring InsetListings::getCaption(OutputParams const & runparams) const
static_cast<InsetCaption *>(it->inset);
ins->getOptArg(ods, runparams);
ins->getArgument(ods, runparams);
return ods.str();
// the caption may contain \label{} but the listings
// package prefer caption={}, label={}
docstring cap = ods.str();
if (!contains(to_utf8(cap), "\\label{"))
return cap;
// convert from
// blah1\label{blah2} blah3
// to
// blah1 blah3},label={blah2
// to form options
// caption={blah1 blah3},label={blah2}
//
// NOTE that } is not allowed in blah2.
regex const reg("(.*)\\\\label\\{(.*?)\\}(.*)");
string const new_cap("\\1\\3},label={\\2");
return from_utf8(regex_replace(to_utf8(cap), reg, new_cap));
}
}
}