Basic biblical tools.
[librarian.git] / src / librarian / elements / base.py
index 060449c..2d656ae 100644 (file)
@@ -37,7 +37,9 @@ class WLElement(etree.ElementBase):
     EPUB_ATTR = {}
     EPUB_CLASS = None
     EPUB_START_CHUNK = False
-   
+
+    FB2_TAG = None
+
     CAN_HAVE_TEXT = True
     STRIP = False
     NUMBERING = None
@@ -133,7 +135,8 @@ class WLElement(etree.ElementBase):
 
         return text
 
-    def _build_inner(self, builder, build_method):
+    def build_inner(self, builder):
+        build_method = builder.build_method_fn
         child_count = len(self)
         if self.CAN_HAVE_TEXT and self.text:
             text = self.normalize_text(self.text, builder)
@@ -166,18 +169,18 @@ class WLElement(etree.ElementBase):
     def txt_after_child(self, builder, child_count):
         pass
 
-    def _txt_build_inner(self, builder):
-        self._build_inner(builder, 'txt_build')
+    def txt_build_inner(self, builder):
+        self.build_inner(builder)
 
     def txt_build(self, builder):
         builder.push_margin(self.TXT_TOP_MARGIN)
         builder.push_text(self.TXT_PREFIX, True)
-        self._txt_build_inner(builder)
+        self.txt_build_inner(builder)
         builder.push_text(self.TXT_SUFFIX, True)
         builder.push_margin(self.TXT_BOTTOM_MARGIN)
 
-    def _html_build_inner(self, builder):
-        self._build_inner(builder, 'html_build')
+    def html_build_inner(self, builder):
+        self.build_inner(builder)
 
     def get_html_attr(self, builder):
         attr = self.HTML_ATTR.copy()
@@ -204,12 +207,31 @@ class WLElement(etree.ElementBase):
                 self.get_html_attr(builder),
             )
 
-        self._html_build_inner(builder)
+        self.html_build_inner(builder)
         if self.HTML_TAG:
             builder.end_element()
 
-    def _epub_build_inner(self, builder):
-        self._build_inner(builder, 'epub_build')
+    def fb2_build(self, builder):
+        if self.SECTION_PRECEDENCE:
+            builder.start_section(self.SECTION_PRECEDENCE)
+            builder.start_element('title')
+            builder.start_element('p')
+
+        if self.FB2_TAG:
+            builder.start_element(
+                self.FB2_TAG,
+                #self.get_fb2_attr(builder),
+            )
+
+        self.build_inner(builder)
+        if self.FB2_TAG:
+            builder.end_element()
+        if self.SECTION_PRECEDENCE:
+            builder.end_element()
+            builder.end_element()
+
+    def epub_build_inner(self, builder):
+        self.build_inner(builder)
 
     def get_epub_attr(self, builder):
         attr = self.EPUB_ATTR.copy()
@@ -255,7 +277,7 @@ class WLElement(etree.ElementBase):
                 attr
             )
 
-        self._epub_build_inner(builder)
+        self.epub_build_inner(builder)
         if self.EPUB_TAG:
             builder.end_element()
 
@@ -354,16 +376,16 @@ class WLElement(etree.ElementBase):
             prefix = 'f' # default numbering prefix
         return prefix
 
-    def assign_id(self, builder):
+    def assign_id(self, document):
         numbering = self.numbering
         if numbering:
-            number = str(builder.counters[numbering])
+            number = str(document.counters[numbering])
             self.attrib['_id'] = self.id_prefix + number
-            builder.counters[numbering] += 1
+            document.counters[numbering] += 1
 
             if numbering == 'main':
-                self.attrib['_visible_numbering'] = str(builder.counters['_visible'])
-                builder.counters['_visible'] += 1
+                self.attrib['_visible_numbering'] = str(document.counters['_visible'])
+                document.counters['_visible'] += 1
 
             if numbering == 'fn':
                 self.attrib['_visible_numbering'] = number