1 // Really simple markdown parser
3 // Copyright (C) 2014 Thomas Geymayer <tomgey@gmail.com>
5 // This library is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU Library General Public
7 // License as published by the Free Software Foundation; either
8 // version 2 of the License, or (at your option) any later version.
10 // This library is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 // Library General Public License for more details.
15 // You should have received a copy of the GNU Library General Public
16 // License along with this library; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #include "SimpleMarkdown.hxx"
25 static bool isSpace(const char c)
27 return c == ' ' || c == '\t';
30 // Unordered list item
31 static bool isULItem(const char c)
33 return c == '*' || c == '+' || c == '-';
36 //----------------------------------------------------------------------------
37 std::string SimpleMarkdown::parse(const std::string& src)
43 bool line_empty = true;
45 for( std::string::const_iterator it = src.begin();
53 else if( *it == '\n' )
55 // Two or more whitespace at end of line -> line break
56 if( !line_empty && num_space >= 2 )
67 // Remove all new lines before first printable character
71 // Two or more new lines (aka. at least one empty line) -> new paragraph
72 if( num_newline >= 2 )
80 // Replace unordered list item markup at begin of line with bullet
81 // (TODO multilevel lists, indent multiple lines, etc.)
82 if( (line_empty || num_newline) && isULItem(*it) )
86 out.append("\xE2\x80\xA2");
90 // Collapse multiple whitespace
91 if( !line_empty && (num_space || num_newline) )
104 } // namespace simgear