Common Lisp Package: CL-APPLE-PLIST

README:

cl-apple-plist

Encodes Common Lisp data structures in Apple property list XML format (.plist).

Released under a BSD style license.

Introduction

When building Apple IOS applications, it's convenient to use .plist files to store reference data.

About Property Lists

Rather than maintain plist files by hand or using Xcode, I've found it useful to create Lisp data structures as s-expressions and then use this library to export to .plist files.

Notes

Lists are encoded as array tags, number as integer or real and t and nil map to true and false respectively.

CL-USER> (encode-apple-plist (list "hello" "world" 1 2.89 t nil)) <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><array><string>hello</string><string>world</string><integer>1</integer><real>2.89</real><true/><false/></array></plist>  
NIL 

Hash tables become dict tags.

 CL-USER> (let ((h (make-hash-table))) (setf (gethash 1 h) "one") (encode-apple-plist h))  
 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>1</key><string>one</string></dict></plist>  
 NIL 

encode-apple-plist takes an optional stream argument, but encode-apple-plist-to-file(data filename) is a convenenience function that writes the plist to a file.

CL-USER> (encode-apple-plist-to-file ((list "1" "2") "myfile.plist"))  

Strings are HTML-encoded using the html-encode library.

There is currently no support for date tags, partly because Lisp dates are stored as integers rather than arecognizable date type. Ideas welcome.

There is currently no support for data tags. Ideas welcome.

Should BITs be mapped to true and false or 0 and 1?

Rob Blackwell

October 2011

FUNCTION

Public

ENCODE-APPLE-PLIST (OBJECT &OPTIONAL (STREAM T))

Encodes the given data structure in Apple plist XML format

ENCODE-APPLE-PLIST-TO-FILE (OBJECT FILENAME)

Encodes the given data structure in Apple plist XML format which is written to the given file

GENERIC-FUNCTION

Private

ENCODE-APPLE-PLIST-NODE (OBJECT &OPTIONAL STREAM)

Encodes the given object as a plist XML node