/* * This file is a part of Winix * and is distributed under the 2-Clause BSD licence. * Author: Tomasz Sowa */ /* * Copyright (c) 2008-2014, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * */ #ifndef headerfile_winix_core_bbcodeparser #define headerfile_winix_core_bbcodeparser #include "htmlfilter.h" namespace Winix { class BBCODEParser : public HTMLFilter { struct Tags { const wchar_t * bbcode; const wchar_t * html_tag; const wchar_t * html_argument; // with closing '>' bool inline_tag; }; /* virtual methods (from HTMLFilter class) */ virtual void Init(); virtual void Uninit(); virtual bool IsOpeningTagMark(); virtual bool IsOpeningCommentaryTagMark(); virtual bool IsClosingTagMark(); virtual bool IsClosingXmlSimpleTagMark(); virtual bool IsValidCharForName(int c); virtual void CheckExceptions(); virtual bool SkipCommentaryTagIfExists(); virtual bool PutOpeningTag(); virtual void PutClosingTag(const wchar_t * tag); virtual void PutNormalText(const wchar_t * str, const wchar_t * end); virtual void ReadNormalTextSkipWhite(const wchar_t * & start, const wchar_t * & last_non_white); /* others */ bool Equal(const wchar_t * str1, const wchar_t * str2); void PutHtmlArgument1(const wchar_t * arg_start, const wchar_t * arg_end, bool has_u); void PutHtmlArgument2(const Tags * tag, bool has_u); void PutHtmlArgument(const Tags * tag, const wchar_t * arg_start, const wchar_t * arg_end); void PutOpeningTagFromEzc(); void PutOpeningTagFromBBCode(const Tags * tag); const Tags * FindTag(const wchar_t * tag); const Tags * FindTag(const std::wstring & tag); void PrintArgumentCheckQuotes(const wchar_t * & start, const wchar_t * & end); void PrintEscape(int c, bool change_quote = false); void PrintEncode(int c); void PrintEscape(const wchar_t * start, const wchar_t * end, bool change_quote = false); void PrintEncode(const wchar_t * start, const wchar_t * end); void PrintArgumentEncode(const wchar_t * start, const wchar_t * end); void PrintArgumentEscape(const wchar_t * start, const wchar_t * end); void PutClosingTag(const Tags * tag); void CheckOpeningTag(const Tags * tag, const wchar_t * tag_name, bool & condition); void CheckOpeningTag(const Tags * tag); void TrimWhiteWithNewLines(const wchar_t * & start, const wchar_t * & end); bool has_open_ol_tag; // has open html
    tag bool has_open_ul_tag; // has open html