aboutsummaryrefslogtreecommitdiff
path: root/butl/string-parser.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'butl/string-parser.cxx')
-rw-r--r--butl/string-parser.cxx132
1 files changed, 0 insertions, 132 deletions
diff --git a/butl/string-parser.cxx b/butl/string-parser.cxx
deleted file mode 100644
index 9228d66..0000000
--- a/butl/string-parser.cxx
+++ /dev/null
@@ -1,132 +0,0 @@
-// file : butl/string-parser.cxx -*- C++ -*-
-// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
-// license : MIT; see accompanying LICENSE file
-
-#include <butl/string-parser>
-
-#include <utility> // move()
-
-using namespace std;
-
-namespace butl
-{
- // Utility functions
- //
- inline static bool
- space (char c) noexcept
- {
- return c == ' ' || c == '\t';
- }
-
- // string_parser
- //
- vector<pair<string, size_t>> string_parser::
- parse_quoted_position (const string& s, bool unquote)
- {
- vector<pair<string, size_t>> r;
- for (auto b (s.begin ()), i (b), e (s.end ()); i != e; )
- {
- for (; i != e && space (*i); ++i) ; // Skip spaces.
-
- if (i == e) // No more strings.
- break;
-
- string s;
- char quoting ('\0'); // Current quoting mode, can be used as bool.
- size_t pos (i - b); // String position.
-
- for (; i != e; ++i)
- {
- char c (*i);
-
- if (!quoting)
- {
- if (space (c)) // End of string.
- break;
-
- if (c == '"' || c == '\'') // Begin of quoted substring.
- {
- quoting = c;
-
- if (!unquote)
- s += c;
-
- continue;
- }
- }
- else if (c == quoting) // End of quoted substring.
- {
- quoting = '\0';
-
- if (!unquote)
- s += c;
-
- continue;
- }
-
- s += c;
- }
-
- if (quoting)
- throw invalid_string (i - b, "unterminated quoted string");
-
- r.emplace_back (move (s), pos);
- }
-
- return r;
- }
-
- vector<string> string_parser::
- parse_quoted (const string& s, bool unquote)
- {
- vector<pair<string, size_t>> sp (parse_quoted_position (s, unquote));
-
- vector<string> r;
- r.reserve (sp.size ());
- for (auto& s: sp)
- r.emplace_back (move (s.first));
-
- return r;
- }
-
- string string_parser::
- unquote (const string& s)
- {
- string r;
- char quoting ('\0'); // Current quoting mode, can be used as bool.
-
- for (auto i (s.begin ()), e (s.end ()); i != e; ++i)
- {
- char c (*i);
-
- if (!quoting)
- {
- if (c == '"' || c == '\'') // Begin of quoted substring.
- {
- quoting = c;
- continue;
- }
- }
- else if (c == quoting) // End of quoted substring.
- {
- quoting = '\0';
- continue;
- }
-
- r += c;
- }
-
- return r;
- }
-
- vector<string> string_parser::
- unquote (const vector<string>& v)
- {
- vector<string> r;
- r.reserve (v.size ());
- for (auto& s: v)
- r.emplace_back (unquote (s));
-
- return r;
- }
-}