EvEmu  0.8.4
11 September 2021
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Seperator.cpp
Go to the documentation of this file.
1 /*
2  ------------------------------------------------------------------------------------
3  LICENSE:
4  ------------------------------------------------------------------------------------
5  This file is part of EVEmu: EVE Online Server Emulator
6  Copyright 2006 - 2021 The EVEmu Team
7  For the latest information visit https://evemu.dev
8  ------------------------------------------------------------------------------------
9  This program is free software; you can redistribute it and/or modify it under
10  the terms of the GNU Lesser General Public License as published by the Free Software
11  Foundation; either version 2 of the License, or (at your option) any later
12  version.
13 
14  This program is distributed in the hope that it will be useful, but WITHOUT
15  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16  FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
17 
18  You should have received a copy of the GNU Lesser General Public License along with
19  this program; if not, write to the Free Software Foundation, Inc., 59 Temple
20  Place - Suite 330, Boston, MA 02111-1307, USA, or go to
21  http://www.gnu.org/copyleft/lesser.txt.
22  ------------------------------------------------------------------------------------
23  Author: Zhur, Bloody.Rabbit
24 */
25 
26 #include "eve-core.h"
27 
28 #include "log/LogNew.h"
29 #include "utils/Seperator.h"
30 
31 /************************************************************************/
32 /* Seperator */
33 /************************************************************************/
34 Seperator::Seperator( const char* str, const char* divs, const char* quotes )
35 {
36  bool inQuote = false, isDiv = false, isQuote = false;
37  std::string* cur(nullptr);
38 
39  for (size_t len = strlen( str ); len > 0; ++str, --len ) {
40  const char c = *str;
41  isDiv = (strchr(divs, c) != NULL);
42  isQuote = (strchr( quotes, c) != NULL);
43 
44  if (!inQuote) {
45  if (NULL == cur) {
46  if (!isDiv) {
47  mArgs.push_back( "" );
48  cur = &mArgs.back();
49 
50  if (isQuote)
51  inQuote = true;
52  else
53  cur->push_back( c );
54  }
55  } else {
56  if (isDiv)
57  cur = NULL;
58  else
59  cur->push_back( c );
60  }
61  } else {
62  if (NULL != cur) {
63  if (isQuote)
64  cur = NULL;
65  else
66  cur->push_back( c );
67  } else {
68  if (isDiv)
69  inQuote = false;
70  else
71  sLog.Error( "Seperator", "Invalid input." );
72  }
73  }
74  }
75 }
76 
#define sLog
Evaluates to a NewLog instance.
Definition: LogNew.h:250
std::vector< std::string > mArgs
Definition: Seperator.h:50
Seperator(const char *str, const char *divs=" \t", const char *quotes="\"\'")
Definition: Seperator.cpp:34