diff --git a/model/Entry.py b/model/Entry.py
new file mode 100644
index 0000000..1689937
--- /dev/null
+++ b/model/Entry.py
@@ -0,0 +1,57 @@
+import re
+from Persistent import Persistent
+from model.Note import Note
+from controller.Html_nuker import Html_nuker
+
+
+class Entry( Persistent ):
+ def __setstate__(self, state):
+ self.__dict__.update(state)
+ self.__class__ = Note
+
+ """
+ An single textual wiki entry.
+ """
+ TITLE_PATTERN = re.compile( u"
(.*)
", flags = re.IGNORECASE )
+
+ def __init__( self, id, contents = None ):
+ """
+ Create a new entry with the given id and contents.
+
+ @type id: unicode
+ @param id: id of the entry
+ @type contents: unicode or NoneType
+ @param contents: initial contents of the entry (optional)
+ @rtype: Entry
+ @return: newly constructed entry
+ """
+ Persistent.__init__( self, id )
+ self.__title = None
+ self.__contents = None or ""
+
+ self.__set_contents( contents )
+
+ def __set_contents( self, contents ):
+ self.update_revision()
+ self.__contents = contents
+
+ # parse title out of the beginning of the contents
+ result = Entry.TITLE_PATTERN.search( contents )
+
+ if result:
+ self.__title = result.groups()[ 0 ]
+ self.__title = Html_nuker( allow_refs = True ).nuke( self.__title )
+ else:
+ self.__title = None
+
+ def to_dict( self ):
+ d = Persistent.to_dict( self )
+ d.update( dict(
+ contents = self.__contents,
+ title = self.__title,
+ ) )
+
+ return d
+
+ contents = property( lambda self: self.__contents, __set_contents )
+ title = property( lambda self: self.__title )