2 Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 #include <locked_sstream.h>
28 using boost::optional;
30 /** @param s A string.
31 * @return true if the string contains only space, newline or tab characters, or is empty.
34 sub::empty_or_white_space (string s)
36 for (size_t i = 0; i < s.length(); ++i) {
37 if (s[i] != ' ' && s[i] != '\n' && s[i] != '\t') {
46 sub::get_line_stringstream (locked_stringstream* str)
49 return optional<string> ();
58 sub::get_line_file (FILE* f)
61 char* r = fgets (buffer, sizeof (buffer), f);
63 return optional<string> ();
66 return string (buffer);
70 sub::remove_unicode_bom (optional<string>& line)
73 line->length() >= 3 &&
74 static_cast<unsigned char> (line.get()[0]) == 0xef &&
75 static_cast<unsigned char> (line.get()[1]) == 0xbb &&
76 static_cast<unsigned char> (line.get()[2]) == 0xbf
79 /* Skip Unicode byte order mark */
80 line = line->substr (3);