void SpacelessNode::render( OutputStream *stream, Context *c ) const { QString output; QTextStream textStream( &output ); QSharedPointer<OutputStream> temp = stream->clone( &textStream ); m_nodeList.render( temp.data(), c ); ( *stream ) << markSafe( stripSpacesBetweenTags( output.trimmed() ) ); }
SafeString BlockNode::getSuper() const { if ( m_context->renderContext()->contains( BLOCK_CONTEXT_KEY ) ) { QVariant &variant = m_context->renderContext()->data( BLOCK_CONTEXT_KEY ); const BlockContext blockContext = variant.value<BlockContext>(); BlockNode *block = blockContext.getBlock( m_name ); if ( block ) { QString superContent; QTextStream superTextStream( &superContent ); QSharedPointer<OutputStream> superStream = m_stream->clone( &superTextStream ); const_cast<BlockNode*>( this )->render( superStream.data(), m_context ); return markSafe( superContent ); } } return SafeString(); }
QVariant PlainTextFilter::doFilter(const QVariant& input, const QVariant& argument, bool autoescape) const { QTextDocument *document = qobject_cast<QTextDocument*>(input.value<QObject*>()); if (!document) return QString(); AudioPlainTextBuilder *builder = new AudioPlainTextBuilder(); Grantlee::MarkupDirector *director = new AudioTextDocumentDirector(builder); director->processDocument(document); QString result = builder->getResult(); delete director; delete builder; return markSafe(result); }
QVariant JoinFilter::doFilter( const QVariant& input, const QVariant &argument, bool autoescape ) const { QVariantList varList = MetaType::toVariantList( input ); QListIterator<QVariant> i( varList ); QString ret; while ( i.hasNext() ) { QVariant var = i.next(); Grantlee::SafeString s = getSafeString( var ); if ( autoescape ) s = conditionalEscape( s ); ret.append( s ); if ( i.hasNext() ) { SafeString argString = getSafeString( argument ); ret.append( conditionalEscape( argString ) ); } } return markSafe( ret ); }
QVariant JoinFilter::doFilter(const QVariant &input, const QVariant &argument, bool autoescape) const { if (!input.canConvert<QVariantList>()) return QVariant(); auto iter = input.value<QSequentialIterable>(); QString ret; for (auto it = iter.begin(); it != iter.end(); ++it) { const auto var = *it; auto s = getSafeString(var); if (autoescape) s = conditionalEscape(s); ret.append(s); if ((it + 1) != iter.end()) { auto argString = getSafeString(argument); ret.append(conditionalEscape(argString)); } } return markSafe(ret); }