htmlfontify: Data Structures

 
 2.4 Data Structures
 ===================
 
 Some of the (informal) data structures used in Htmlfontify are detailed
 here:
 
 ‘hfy-style-assoc’
 
      An assoc representing/describing an Emacs face.  Properties may be
      repeated, in which case later properties should be treated as if
      they were inherited from a “parent” font.  (For some properties,
      only the first encountered value is of any importance, for others
      the values might be cumulative, and for others they might be
      cumulative in a complex way.)
 
      Some examples:
 
           (hfy-face-to-style 'default) =>
 
             (("background"      . "rgb(0, 0, 0)"      )
              ("color"           . "rgb(255, 255, 255)")
              ("font-style"      . "normal"            )
              ("font-weight"     . "500"               )
              ("font-stretch"    . "normal"            )
              ("font-family"     . "misc-fixed"        )
              ("font-size"       . "13pt"              )
              ("text-decoration" . "none"              ))
 
           (hfy-face-to-style 'Info-title-3-face) =>
 
             (("font-weight"     . "700"        )
              ("font-family"     . "helv"       )
              ("font-size"       . "120%"       )
              ("text-decoration" . "none")      )
 
 ‘hfy-sheet-assoc’
 
      An assoc with elements of the form ‘(face-name style-name .
      style-string)’.  The actual stylesheet for each page is derived
      from one of these.
 
           ((default       "default" . "{ background: black; color: white}")
            (font-lock-string-face "string"  . "{ color: rgb(64,224,208) }"))
 
 ‘hfy-facemap-assoc’
 
      An assoc of ‘(point . FACE-SYMBOL)’ or ‘(point . defface attribute
      list)’ and ‘(point . end)’ elements, in descending order of point
      value (i.e., from the file’s end to its beginning).  The map is in
      reverse order because inserting a ‘<style>’ tag (or any other
      string) at POINT invalidates the map for all entries with a greater
      value of point.  By traversing the map from greatest to least
      POINT, we still invalidate the map as we go, but only those points
      we have already dealt with (and therefore no longer care about)
      will be invalid at any time.
 
           ((64820 . end)
            (64744 . font-lock-comment-face)
            (64736 . end)
            (64722 . font-lock-string-face)
            (64630 . end)
            (64623 . font-lock-string-face)
            (64449 . end)
            ;; Big similar section elided.  You get the idea.
            (5459 . end)
            (5431 . (:inherit font-lock-keyword-face :background "7e7e7e"))
            (5431 . end)
            (4285 . font-lock-constant-face)
            (4285 . end)
            (4221 . font-lock-comment-face)
            (4221 . end)
            (4197 . font-lock-constant-face)
            (4197 . end)
            (1 . font-lock-comment-face))