Jelajahi Sumber

2009-03-08 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

	Parse options in -i list using OptionParser.
	* src/UriListParser.cc
	* src/UriListParser.h
Tatsuhiro Tsujikawa 16 tahun lalu
induk
melakukan
f4da71fc6d
3 mengubah file dengan 25 tambahan dan 7 penghapusan
  1. 6 0
      ChangeLog
  2. 14 7
      src/UriListParser.cc
  3. 5 0
      src/UriListParser.h

+ 6 - 0
ChangeLog

@@ -1,3 +1,9 @@
+2009-03-08  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
+
+	Parse options in -i list using OptionParser.
+	* src/UriListParser.cc
+	* src/UriListParser.h
+	
 2009-03-08  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 
 	Don't reset URI in retry to avoid additional round trips because

+ 14 - 7
src/UriListParser.cc

@@ -35,26 +35,33 @@
 #include "UriListParser.h"
 
 #include <istream>
+#include <sstream>
 
 #include "Util.h"
 #include "Option.h"
+#include "OptionHandlerFactory.h"
+#include "OptionHandler.h"
 
 namespace aria2 {
 
-UriListParser::UriListParser(std::istream& in):_in(in) {}
+UriListParser::UriListParser(std::istream& in):_in(in)
+{
+  _optparser.setOptionHandlers(OptionHandlerFactory::createOptionHandlers());
+}
 
 UriListParser::~UriListParser() {}
 
-static void getOptions(Option& op, std::string& line, std::istream& in)
+void UriListParser::getOptions(Option& op)
 {
-  while(getline(in, line)) {
-    if(Util::startsWith(line, " ")) {
-      std::pair<std::string, std::string> p = Util::split(line, "=");
-      op.put(p.first, p.second);
+  std::stringstream ss;
+  while(getline(_in, _line)) {
+    if(Util::startsWith(_line, " ")) {
+      ss << _line << "\n";
     } else {
       break;
     }
   }
+  _optparser.parse(op, ss);
 }
 
 void UriListParser::parseNext(std::deque<std::string>& uris, Option& op)
@@ -68,7 +75,7 @@ void UriListParser::parseNext(std::deque<std::string>& uris, Option& op)
   do {
     if(!Util::trim(_line).empty()) {
       Util::slice(uris, _line, '\t', true);
-      getOptions(op, _line, _in);
+      getOptions(op);
       return;
     }
   } while(getline(_in, _line));

+ 5 - 0
src/UriListParser.h

@@ -42,6 +42,7 @@
 #include <iosfwd>
 
 #include "Option.h"
+#include "OptionParser.h"
 
 namespace aria2 {
 
@@ -49,7 +50,11 @@ class UriListParser {
 private:
   std::istream& _in;
 
+  OptionParser _optparser;
+
   std::string _line;
+
+  void getOptions(Option& op);
 public:
   UriListParser(std::istream& in);