in src/main/cpp/patternparser.cpp [334:392]
size_t PatternParser::finalizeConverter(
logchar c, const LogString& pattern, size_t i,
LogString& currentLiteral, const FormattingInfoPtr& formattingInfo,
const PatternMap& rules,
std::vector<PatternConverterPtr>& patternConverters,
std::vector<FormattingInfoPtr>& formattingInfos)
{
LogString convBuf;
i = extractConverter(c, pattern, i, convBuf, currentLiteral);
if (convBuf.empty())
{
LogLog::error(LOG4CXX_STR("Empty conversion specifier"));
patternConverters.push_back(
LiteralPatternConverter::newInstance(currentLiteral));
formattingInfos.push_back(FormattingInfo::getDefault());
}
else
{
LogString converterId(convBuf);
std::vector<LogString> options;
i = extractOptions(pattern, i, options);
PatternConverterPtr pc(
createConverter(
converterId, currentLiteral, rules, options));
if (pc == NULL)
{
LogString msg(LOG4CXX_STR("Unrecognized conversion specifier ["));
msg.append(converterId);
msg.append(LOG4CXX_STR("] in conversion pattern."));
LogLog::error(msg);
patternConverters.push_back(
LiteralPatternConverter::newInstance(currentLiteral));
formattingInfos.push_back(FormattingInfo::getDefault());
}
else
{
patternConverters.push_back(pc);
formattingInfos.push_back(formattingInfo);
if (currentLiteral.length() > 0)
{
patternConverters.push_back(
LiteralPatternConverter::newInstance(currentLiteral));
formattingInfos.push_back(FormattingInfo::getDefault());
}
}
}
if (!currentLiteral.empty())
{
currentLiteral.erase(currentLiteral.begin(), currentLiteral.end());
}
return i;
}