Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions include/jinja2cpp/error_info.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ enum class ErrorCode
TemplateNotFound,
TemplateNotParsed,
InvalidValueType,
InvalidTemplateName,
ExtensionDisabled,
TemplateEnvAbsent,
};

struct SourceLocation
Expand Down
2 changes: 1 addition & 1 deletion include/jinja2cpp/filesystem_handler.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ class RealFileSystem : public IFilesystemHandler

void SetRootFolder(std::string newRoot)
{
m_rootFolder = newRoot;
m_rootFolder = std::move(newRoot);
}

CharFileStreamPtr OpenStream(const std::string& name) const override;
Expand Down
11 changes: 10 additions & 1 deletion src/error_info.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,11 @@ void RenderErrorInfo(std::basic_ostream<CharT>& os, const ErrorInfoTpl<CharT>& e
os << UNIVERSAL_STR("Parse error");
break;
case ErrorCode::UnexpectedException:
os << UNIVERSAL_STR("Unexpected exception occurred during template processing");
{
auto& extraParams = errInfo.GetExtraParams();
os << UNIVERSAL_STR("Unexpected exception occurred during template processing. Exception: ") << extraParams[0];
break;
}
case ErrorCode::YetUnsupported:
os << UNIVERSAL_STR("This feature has not been supported yet");
break;
Expand Down Expand Up @@ -197,12 +200,18 @@ void RenderErrorInfo(std::basic_ostream<CharT>& os, const ErrorInfoTpl<CharT>& e
case ErrorCode::TemplateNotFound:
os << UNIVERSAL_STR("Template(s) not found: ") << errInfo.GetExtraParams()[0];
break;
case ErrorCode::InvalidTemplateName:
os << UNIVERSAL_STR("Invalid template name: ") << errInfo.GetExtraParams()[0];
break;
case ErrorCode::InvalidValueType:
os << UNIVERSAL_STR("Invalid value type");
break;
case ErrorCode::ExtensionDisabled:
os << UNIVERSAL_STR("Extension disabled");
break;
case ErrorCode::TemplateEnvAbsent:
os << UNIVERSAL_STR("Template environment doesn't set");
break;
}
os << std::endl << errInfo.GetLocationDescr();
}
Expand Down
8 changes: 4 additions & 4 deletions src/expression_evaluator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -181,9 +181,9 @@ InternalValue DictCreator::Evaluate(RenderContext& context)
return MapAdapter::CreateAdapter(std::move(result));;
}

ExpressionFilter::ExpressionFilter(std::string filterName, CallParams params)
ExpressionFilter::ExpressionFilter(const std::string& filterName, CallParams params)
{
m_filter = CreateFilter(std::move(filterName), std::move(params));
m_filter = CreateFilter(filterName, std::move(params));
if (!m_filter)
throw std::runtime_error("Can't find filter '" + filterName + "'");
}
Expand All @@ -196,10 +196,10 @@ InternalValue ExpressionFilter::Evaluate(const InternalValue& baseVal, RenderCon
return m_filter->Filter(baseVal, context);
}

IsExpression::IsExpression(ExpressionEvaluatorPtr<> value, std::string tester, CallParams params)
IsExpression::IsExpression(ExpressionEvaluatorPtr<> value, const std::string& tester, CallParams params)
: m_value(value)
{
m_tester = CreateTester(std::move(tester), std::move(params));
m_tester = CreateTester(tester, std::move(params));
if (!m_tester)
throw std::runtime_error("Can't find tester '" + tester + "'");
}
Expand Down
16 changes: 8 additions & 8 deletions src/expression_evaluator.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ struct ParsedArguments
std::unordered_map<std::string, ExpressionEvaluatorPtr<>> extraKwArgs;
std::vector<ExpressionEvaluatorPtr<>> extraPosArgs;

ExpressionEvaluatorPtr<> operator[](std::string name) const
ExpressionEvaluatorPtr<> operator[](const std::string& name) const
{
auto p = args.find(name);
if (p == args.end())
Expand All @@ -67,15 +67,15 @@ class FullExpressionEvaluator : public ExpressionEvaluatorBase
public:
void SetExpression(ExpressionEvaluatorPtr<Expression> expr)
{
m_expression = expr;
m_expression = std::move(expr);
}
void SetFilter(ExpressionEvaluatorPtr<ExpressionFilter> expr)
{
m_filter = expr;
m_filter = std::move(expr);
}
void SetTester(ExpressionEvaluatorPtr<IfExpression> expr)
{
m_tester = expr;
m_tester = std::move(expr);
}
InternalValue Evaluate(RenderContext& values) override;
void Render(OutStream &stream, RenderContext &values) override;
Expand Down Expand Up @@ -204,7 +204,7 @@ class IsExpression : public Expression

using TesterFactoryFn = std::function<std::shared_ptr<ITester> (CallParams params)>;

IsExpression(ExpressionEvaluatorPtr<> value, std::string tester, CallParams params);
IsExpression(ExpressionEvaluatorPtr<> value, const std::string& tester, CallParams params);
InternalValue Evaluate(RenderContext& context) override;

private:
Expand Down Expand Up @@ -293,12 +293,12 @@ class ExpressionFilter

using FilterFactoryFn = std::function<std::shared_ptr<IExpressionFilter> (CallParams params)>;

ExpressionFilter(std::string filterName, CallParams params);
ExpressionFilter(const std::string& filterName, CallParams params);

InternalValue Evaluate(const InternalValue& baseVal, RenderContext& context);
void SetParentFilter(std::shared_ptr<ExpressionFilter> parentFilter)
{
m_parentFilter = parentFilter;
m_parentFilter = std::move(parentFilter);
}
private:
std::shared_ptr<IExpressionFilter> m_filter;
Expand All @@ -322,7 +322,7 @@ class IfExpression

void SetAltValue(ExpressionEvaluatorPtr<> altValue)
{
m_altValue = altValue;
m_altValue = std::move(altValue);
}

private:
Expand Down
13 changes: 5 additions & 8 deletions src/expression_parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ auto ReplaceErrorIfPossible(T& result, const Token& pivotTok, ErrorCode newError
return result.get_unexpected();
}

ExpressionParser::ExpressionParser(const Settings& /* settings */)
ExpressionParser::ExpressionParser(const Settings& /* settings */, TemplateEnv* /* env */)
{

}
Expand Down Expand Up @@ -63,13 +63,10 @@ ExpressionParser::ParseResult<ExpressionEvaluatorPtr<FullExpressionEvaluator>> E

if (includeIfPart && lexer.EatIfEqual(Keyword::If))
{
if (includeIfPart)
{
auto ifExpr = ParseIfExpression(lexer);
if (!ifExpr)
return ifExpr.get_unexpected();
evaluator->SetTester(*ifExpr);
}
auto ifExpr = ParseIfExpression(lexer);
if (!ifExpr)
return ifExpr.get_unexpected();
evaluator->SetTester(*ifExpr);
}

saver.Commit();
Expand Down
2 changes: 1 addition & 1 deletion src/expression_parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class ExpressionParser
template<typename T>
using ParseResult = nonstd::expected<T, ParseError>;

ExpressionParser(const Settings& settings);
explicit ExpressionParser(const Settings& settings, TemplateEnv* env = nullptr);
ParseResult<RendererPtr> Parse(LexScanner& lexer);
ParseResult<ExpressionEvaluatorPtr<FullExpressionEvaluator>> ParseFullExpression(LexScanner& lexer, bool includeIfPart = true);
ParseResult<CallParams> ParseCallParams(LexScanner& lexer);
Expand Down
2 changes: 1 addition & 1 deletion src/filesystem_handler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ WCharFileStreamPtr MemoryFileSystem::OpenWStream(const std::string& name) const
}

RealFileSystem::RealFileSystem(std::string rootFolder)
: m_rootFolder(rootFolder)
: m_rootFolder(std::move(rootFolder))
{

}
Expand Down
6 changes: 2 additions & 4 deletions src/filters.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -537,10 +537,8 @@ SequenceAccessor::SequenceAccessor(FilterParams params, SequenceAccessor::Mode m
case LengthMode:
break;
case MaxItemMode:
ParseParams({{"case_sensitive", false, InternalValue(false)}, {"attribute", false}}, params);
break;
case MinItemMode:
ParseParams({{"case_sensitive", false, InternalValue(false)}, {"attribute", false}}, params);
case MinItemMode:
ParseParams({{"case_sensitive", false, InternalValue(false)}, {"attribute", false}}, params);
break;
case RandomMode:
case ReverseMode:
Expand Down
4 changes: 2 additions & 2 deletions src/function_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class FunctionBase
public:
protected:
bool ParseParams(const std::initializer_list<ArgumentInfo>& argsInfo, const CallParams& params);
InternalValue GetArgumentValue(std::string argName, RenderContext& context, InternalValue defVal = InternalValue());
InternalValue GetArgumentValue(const std::string& argName, RenderContext& context, InternalValue defVal = InternalValue());

protected:
ParsedArguments m_args;
Expand All @@ -26,7 +26,7 @@ inline bool FunctionBase::ParseParams(const std::initializer_list<ArgumentInfo>&
return result;
}

inline InternalValue FunctionBase::GetArgumentValue(std::string argName, RenderContext& context, InternalValue defVal)
inline InternalValue FunctionBase::GetArgumentValue(const std::string& argName, RenderContext& context, InternalValue defVal)
{
auto argExpr = m_args[argName];
return argExpr ? argExpr->Evaluate(context) : std::move(defVal);
Expand Down
2 changes: 1 addition & 1 deletion src/internal_value.h
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ class ListAdapter
InternalValueList ToValueList() const;
GenericList CreateGenericList() const
{
if (m_accessorProvider && m_accessorProvider)
if (m_accessorProvider && m_accessorProvider())
return m_accessorProvider()->CreateGenericList();

return GenericList();
Expand Down
9 changes: 5 additions & 4 deletions src/lexertk.h
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,8 @@ namespace lexertk

token()
: type(e_none),
position(std::numeric_limits<std::size_t>::max())
position(std::numeric_limits<std::size_t>::max()),
length(0)
{}

void clear()
Expand Down Expand Up @@ -498,7 +499,7 @@ namespace lexertk
s_end_ = 0;
token_list_.clear();
token_itr_ = token_list_.end();
store_token_itr_ = token_list_.end();
store_token_itr_ = token_itr_;
}

inline bool process(const std::basic_string<CharT>& str)
Expand Down Expand Up @@ -542,7 +543,7 @@ namespace lexertk
inline void begin()
{
token_itr_ = token_list_.begin();
store_token_itr_ = token_list_.begin();
store_token_itr_ = token_itr_;
}

inline void store()
Expand Down Expand Up @@ -867,7 +868,7 @@ namespace lexertk
if (endChar == *s_itr_)
break;
}
else if (escaped)
else
escaped = false;

++s_itr_;
Expand Down
27 changes: 21 additions & 6 deletions src/statements.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -363,13 +363,28 @@ void IncludeStatement::Render(OutStream& os, RenderContext& values)
auto doRender = [this, &values, &os](auto&& name) -> bool
{
auto tpl = values.GetRendererCallback()->LoadTemplate(name);
auto renderer = VisitTemplateImpl<RendererPtr>(tpl, false, [this](auto tplPtr) {
return CreateTemplateRenderer<IncludedTemplateRenderer>(tplPtr, m_withContext);
});
if (renderer)

try
{
auto renderer = VisitTemplateImpl<RendererPtr>(tpl, true, [this](auto tplPtr) {
return CreateTemplateRenderer<IncludedTemplateRenderer>(tplPtr, m_withContext);
});

if (renderer)
{
renderer->Render(os, values);
return true;
}
}
catch (const ErrorInfoTpl<char>& err)
{
if (err.GetCode() != ErrorCode::FileNotFound)
throw;
}
catch (const ErrorInfoTpl<wchar_t>& err)
{
renderer->Render(os, values);
return true;
if (err.GetCode() != ErrorCode::FileNotFound)
throw;
}

return false;
Expand Down
22 changes: 11 additions & 11 deletions src/statements.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,12 @@ class ForStatement : public Statement

void SetMainBody(RendererPtr renderer)
{
m_mainBody = renderer;
m_mainBody = std::move(renderer);
}

void SetElseBody(RendererPtr renderer)
{
m_elseBody = renderer;
m_elseBody = std::move(renderer);
}

void Render(OutStream& os, RenderContext& values) override;
Expand Down Expand Up @@ -80,7 +80,7 @@ class IfStatement : public Statement

void SetMainBody(RendererPtr renderer)
{
m_mainBody = renderer;
m_mainBody = std::move(renderer);
}

void AddElseBranch(StatementPtr<ElseBranchStatement> branch)
Expand Down Expand Up @@ -110,7 +110,7 @@ class ElseBranchStatement : public Statement
bool ShouldRender(RenderContext& values) const;
void SetMainBody(RendererPtr renderer)
{
m_mainBody = renderer;
m_mainBody = std::move(renderer);
}
void Render(OutStream& os, RenderContext& values) override;

Expand All @@ -131,7 +131,7 @@ class SetStatement : public Statement

void SetAssignmentExpr(ExpressionEvaluatorPtr<> expr)
{
m_expr = expr;
m_expr = std::move(expr);
}
void Render(OutStream& os, RenderContext& values) override;

Expand All @@ -153,7 +153,7 @@ class ParentBlockStatement : public Statement

void SetMainBody(RendererPtr renderer)
{
m_mainBody = renderer;
m_mainBody = std::move(renderer);
}
void Render(OutStream &os, RenderContext &values) override;

Expand All @@ -177,7 +177,7 @@ class BlockStatement : public Statement

void SetMainBody(RendererPtr renderer)
{
m_mainBody = renderer;
m_mainBody = std::move(renderer);
}
void Render(OutStream &os, RenderContext &values) override;

Expand Down Expand Up @@ -223,7 +223,7 @@ class IncludeStatement : public Statement

void SetIncludeNamesExpr(ExpressionEvaluatorPtr<> expr)
{
m_expr = expr;
m_expr = std::move(expr);
}

void Render(OutStream& os, RenderContext& values) override;
Expand All @@ -244,7 +244,7 @@ class ImportStatement : public Statement

void SetImportNameExpr(ExpressionEvaluatorPtr<> expr)
{
m_nameExpr = expr;
m_nameExpr = std::move(expr);
}

void SetNamespace(std::string name)
Expand Down Expand Up @@ -283,7 +283,7 @@ class MacroStatement : public Statement

void SetMainBody(RendererPtr renderer)
{
m_mainBody = renderer;
m_mainBody = std::move(renderer);
}

void Render(OutStream &os, RenderContext &values) override;
Expand Down Expand Up @@ -347,7 +347,7 @@ class WithStatement : public Statement
}
void SetMainBody(RendererPtr renderer)
{
m_mainBody = renderer;
m_mainBody = std::move(renderer);
}

void Render(OutStream &os, RenderContext &values) override;
Expand Down
2 changes: 1 addition & 1 deletion src/template_env.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ auto LoadTemplateImpl(TemplateEnv* env, std::string fileName, const T& filesyste
auto stream = Functions::LoadFile(fileName, fh.handler.get());
if (stream)
{
auto res = tpl.Load(*stream);
auto res = tpl.Load(*stream, fileName);
if (!res)
return ResultType(res.get_unexpected());

Expand Down
Loading