gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r18035 - in gnunet-java: src/org/gnunet/util test/org/gnune


From: gnunet
Subject: [GNUnet-SVN] r18035 - in gnunet-java: src/org/gnunet/util test/org/gnunet/util/resources
Date: Mon, 7 Nov 2011 02:50:56 +0100

Author: dold
Date: 2011-11-07 02:50:56 +0100 (Mon, 07 Nov 2011)
New Revision: 18035

Modified:
   gnunet-java/src/org/gnunet/util/Configuration.java
   gnunet-java/test/org/gnunet/util/resources/gnunet.config-1
Log:
config parser

Modified: gnunet-java/src/org/gnunet/util/Configuration.java
===================================================================
--- gnunet-java/src/org/gnunet/util/Configuration.java  2011-11-07 00:36:12 UTC 
(rev 18034)
+++ gnunet-java/src/org/gnunet/util/Configuration.java  2011-11-07 01:50:56 UTC 
(rev 18035)
@@ -2,6 +2,7 @@
 
 import java.io.BufferedReader;
 import java.io.DataInputStream;
+import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -9,6 +10,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Scanner;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -23,18 +25,19 @@
 public class Configuration {
     private static final Logger logger = LoggerFactory
             .getLogger(Configuration.class);
-    
-    
+
     private static Pattern section = Pattern.compile("\\[(.*?)\\]");
     private static Pattern tag = Pattern.compile("(.*?) =( ?.*?)");
+    private static Pattern comment = Pattern.compile("\\s*[%#].*\n?");
+    private static Pattern delim = Pattern.compile("\\s*\\n\\s*");
 
-    public Map<String,Map<String, String>> sections;
+    public Map<String, Map<String, String>> sections;
 
     /**
      * Start with an empty configuration.
      */
     public Configuration() {
-        sections = new HashMap<String, Map<String,String>>();
+        sections = new HashMap<String, Map<String, String>>();
     }
 
     /**
@@ -43,56 +46,31 @@
      * 
      * @param filename
      *            name of the configuration file
-     * @throws FileNotFoundException 
+     * @throws FileNotFoundException
      */
     public void parse(String filename) throws FileNotFoundException {
-        DataInputStream in = new DataInputStream(new 
FileInputStream(filename));
-        BufferedReader br = new BufferedReader(new InputStreamReader(in));
-        
+        Scanner sc = new Scanner(new File(filename)).useDelimiter(delim);
+
         String current_section = "";
-        
+
         while (true) {
-            String line;
-            try {
-                line = br.readLine();
-            } catch (IOException e) {
-                logger.warn("error parsing file", e);
+            if (sc.hasNext(comment)) {
+                sc.next(comment);
+            } else if (sc.hasNext(section)) {
+                sc.next(section);
+                System.out.println(sc.match().groupCount());
+                current_section = sc.match().group(1).trim();
+            } else if (sc.hasNext(tag)) {
+                sc.next(tag);
+                String option = sc.match().group(1).trim();
+                String value = sc.match().group(2).trim();
+                setValueString(current_section, option, value);
+            } else if (!sc.hasNext()) {
                 break;
+            } else {
+                logger.warn("skipped unreadable configuration line");
+                sc.next();
             }
-            if (line == null) {
-                break;
-            }
-            line = line.trim();
-            if (line.length() == 0) {
-                continue;
-            }
-            if (line.charAt(0) == '#' || line.charAt(0) == '%') {
-                continue;
-            }
-            
-            Matcher m;
-            
-            m = section.matcher(line);
-            if (m.matches()) {
-                current_section = m.group(1);
-                continue;
-            }
-            
-            m = tag.matcher(line);
-            if (m.matches()) {
-                String option = m.group(1).trim();
-                String value = m.group(2).trim();
-                if (value.length() != 0 && value.charAt(0) == '"') {
-                    int last = value.lastIndexOf('"', 1);
-                    if (last == -1) {
-                        logger.warn("error parsing file: incorrect quoting");
-                        continue;
-                    }
-                    value = value.substring(1, last).trim();
-                }
-                setValueString(current_section, option, value);
-            }
-            
         }
     }
 
@@ -132,17 +110,18 @@
      * Write only configuration entries that have been changed to configuration
      * file.
      * 
-     * @param cfgNew new configuration
+     * @param cfgNew
+     *            new configuration
      * 
-     * @param filename where to write the configuration diff between default 
and
-     * new
+     * @param filename
+     *            where to write the configuration diff between default and new
      */
     public void writeDiffs(Configuration cfgNew, String filename) {
         throw new UnsupportedOperationException();
     }
 
     public void setValueString(String section, String option, String value) {
-        Map<String,String> table = sections.get(section);
+        Map<String, String> table = sections.get(section);
         if (table == null) {
             table = new HashMap<String, String>();
             sections.put(section, table);

Modified: gnunet-java/test/org/gnunet/util/resources/gnunet.config-1
===================================================================
--- gnunet-java/test/org/gnunet/util/resources/gnunet.config-1  2011-11-07 
00:36:12 UTC (rev 18034)
+++ gnunet-java/test/org/gnunet/util/resources/gnunet.config-1  2011-11-07 
01:50:56 UTC (rev 18035)
@@ -1,3 +1,4 @@
+%asd
 [foo]
 %asdf
 # foo
@@ -4,6 +5,5 @@
    # foo
 bar = baz
 bla = xd
-spam =
-
-
+[bla]
+spam =
\ No newline at end of file




reply via email to

[Prev in Thread] Current Thread [Next in Thread]