Navigation Menu

Skip to content

Commit

Permalink
Re-included write-e-map.
Browse files Browse the repository at this point in the history
  • Loading branch information
MayDaniel committed Jun 21, 2010
1 parent 7dfdf60 commit bdd79e1
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 5 deletions.
4 changes: 2 additions & 2 deletions foo.bar
@@ -1,6 +1,6 @@
# Comment, line 1 # Comment, line 1
# Comment, line 2 # Comment, line 2


:c = {:d 4, :e 5}
:b = [2 3]
:a = 1 :a = 1
:b = [2 3]
:c = {:d 4, :e 5}
25 changes: 22 additions & 3 deletions src/clj_ini/core.clj
Expand Up @@ -8,14 +8,33 @@
[name] [name]
(when-not (.exists (File. name)) (.createNewFile (File. name))) name) (when-not (.exists (File. name)) (.createNewFile (File. name))) name)


(defn read-map (defn clean-file
[name]
(spit (create-file name) ""))

(defn read-map
"Constructs a Clojure hash-map from write-map dump. Creates the file "Constructs a Clojure hash-map from write-map dump. Creates the file
if it does not exist." if it does not exist."
[file] [file]
(let [contents (read-lines (create-file file)) (let [contents (read-lines (create-file file))
file-map (remove #(not (includes? % \=)) contents)] file-map (remove #(not (includes? % \=)) contents)
meta-comments (take-while #(= (first %) \#) contents)]
(if (empty? file-map) {} (if (empty? file-map) {}
(loop [lines file-map acc {}] (loop [lines file-map acc {}]
(if (empty? lines) acc (if (empty? lines) (with-meta acc {:comments meta-comments})
(let [x (re-split #" = " (first lines) 2)] (let [x (re-split #" = " (first lines) 2)]
(recur (rest lines) (assoc acc (read-string (first x)) (read-string (second x)))))))))) (recur (rest lines) (assoc acc (read-string (first x)) (read-string (second x))))))))))

(defn write-map
"Writes a (merge (read-map file) map) to a file, and takes optional comments metadata
to include in the dump."
[file map]
(let [contents (read-map (create-file file))]
(clean-file file)
(if-let [meta-comments (:comments (meta map))]
(do
(doseq [line meta-comments]
(append-spit file (str "# " line \newline)))
(append-spit file \newline)))
(doseq [kv (merge contents map)]
(append-spit file (str (key kv) " = " (val kv) \newline)))))

0 comments on commit bdd79e1

Please sign in to comment.