         inline-string (.replace source-string re-nl (pref :new-line-string-replacer))
         max-inline-string-size (+ (pref :string-prefix-limit) (pref :string-postfix-limit))]
     (if (<= (count inline-string) max-inline-string-size)
-      (template (pref :span) (pref :string-style) (str dq inline-string dq))
-      (let [abbreviated-string-template (template (pref :span) (pref :string-style) (str dq (abbreviate-long-string inline-string) dq))
+      (template :span :string-style (str dq inline-string dq))
+      (let [abbreviated-string-template (template :span :string-style (str dq (abbreviate-long-string inline-string) dq))
             string-with-nl-markers (.replace source-string re-nl (str (pref :new-line-string-replacer) "\n"))
-            body-template (template (pref :ol) (pref :standard-ol-style)
-                            (template (pref :li) (pref :standard-li-style)
-                              (template (pref :span) (pref :string-style) (str dq string-with-nl-markers dq))))]
+            body-template (template :ol :standard-ol-style
+                            (template :li :standard-li-style
+                              (template :span :string-style (str dq string-with-nl-markers dq))))]
         (reference (surrogate source-string abbreviated-string-template true body-template))))))
 
 (defn bool? [value]


(defn wrap-group-in-reference-if-needed [group obj]
  (if (abbreviated? group)
    #js [(reference (surrogate obj (.concat (template (pref :span) "") group)))]
    group))

; default printer implementation can do this:

   (js-obj
     (pref :surrogate-key) true
     "target" object
     "header" (template :span :cljs-style header)
     "hasBody" has-body
     "bodyTemplate" body-template)))

(defn index-template [value]
  (template :span :index-style value :line-index-separator))

(defn number-template [value]
  (if (integer? value)
    (template :span :integer-style value)
    (template :span :float-style value)))

(defn abbreviate-long-string [string]
  (str
