سؤال

أنا جديد نسبيا في عباءة وعذراء HTML / Compojure كاملة. أحاول استخدام Compojure لإنشاء صفحات ثابتة من HTML باستخدام دالة مماثلة لهذا:

(defn fake-write-html
  [dir args]
  (let [file (str dir *file-separator* *index-file*)
        my-html (html
                  (doctype :html4)
                  [:html
                   [:head
                    [:title "Docs and Dirs:"]]
                   [:body
                    [:div
                     [:h2 "A nice title"]]
                    [:div
                     [:ul
                      [:li "One"]
                      [:li "Two"]]]]])]
    (clojure.contrib.duck-streams/spit file my-html)))

الوظيفة تكتب فقط HTML إلى ملف. (ال args الوسيطة غير ذي صلة هنا. فقط هناك لضمان التحويلات المثالة والتشغيل في برنامجي.)

أشار "عبادة البرمجة" إلى أن المكالمة إلى html ستنتج الدالة تنسيق HTML - خطوط متعددة مع المسافة البادئة. كل ما أحصل عليه هو نوع DOC كما هو متوقع تليها جميع أتش تي أم أل على سطر واحد. أتش تي أم أل لا يجد أي مشاكل مع محتوى ملف الإخراج. يخرج كخط واحد إذا كنت println في العمود أيضا.

هل هناك شيء آخر مطلوب للحصول على إخراج مهيأ؟

هل كانت مفيدة؟

المحلول

كان تنسيق إخراج HTML في Compojure إزالتها لأسباب الأداء والتعقيد. وبعد للحصول على إخراج منسق، سيتعين عليك كتابة دالة الطابعة الخاصة بك.

عادة ما أخرج HTML كما يرى Compojure مناسبا واستخدم Firebug لعرضه يعيش في متصفحي. سوف يعرض Firebug أنه منسق بشكل جيد بغض النظر عما إذا كان كل شيء في سطر واحد أم لا. هذا يعمل بشكل جيد بما فيه الكفاية معظم الوقت. إذا كنت بحاجة إلى تسلسل هذا HTML في نموذج قابل للقراءة، فيمكنك الاحتفاظ به كمواقف عباءة وسريبات وسريعة وتسلسلها بهذه الطريقة.

نصائح أخرى

على الرغم من أن إجابة براين أشارتني إلى Firebug، فإن تمكين تصحيح الأخطاء التي أردتها، كنت فقط على أن أتركها وحدها. متابعة مؤشر Kwertii إلى JTIDY، قمت بتضمين التعليمات البرمجية التالية في برنامجي.

تعديل: مبسط الكود إلى حد ما

(ns net.dneclark.someprogram
  (:gen-class)
  ...
  (:import (org.w3c.tidy Tidy))
      )

  ...

(defn configure-pretty-printer
  "Configure the pretty-printer (an instance of a JTidy Tidy class) to
generate output the way we want -- formatted and without sending warnings.
Return the configured pretty-printer."
  []
  (doto (new Tidy)
    (.setSmartIndent true)
    (.setTrimEmptyElements true)
    (.setShowWarnings false)
    (.setQuiet true)))

(defn pretty-print-html
  "Pretty-print the html and return it as a string."
  [html]
  (let [swrtr (new StringWriter)]
    (.parse (configure-pretty-printer) (new StringReader (str html)) swrtr)
    (str swrtr)))

أضفت JTIDY-R938.JAR إلى مشروعي (NetBeans باستخدام البرنامج المساعد Encrowjure) واستوردته. تحكي وظيفة التكوين المحلل المحلل من تنسيق HTML ومسافة بادئة وتخطي التحذيرات. يتم الآن تنسيق قيمة الإرجاع من وظيفة الطابعة الجميلة بشكل جيد ما إذا كنت أفتحها باستخدام Firebug أو محرر نصوص بسيط.

هناك طن من أتش تي أم أل طابعات جميلة المتاحة ل Java, ، بلا حد سري جيتي, ، ميناء جافا من أتش تي أم أل. وبعد يمكنك بسهولة إطعام إخراج Clojure من خلال هذه المكتبة برمجيا والحصول على ظهر HTML بادئة وتمويل بدقة.

تتوفر HTML LITY أيضا كبرنامج لسطر الأوامر ل UNIX إذا كنت تهتم بالطريق - يمكنك فقط توجيه توجيه HTML من خلاله مثل أي برنامج شل آخر.

ما سبق لا يعمل بالنسبة لي. لقد غيرت هذا قليلا.

أضف هذا [JTIDY "4AUG2000R7-DEV"] إلى project.clj

(:use clojure.core)
(:import (org.w3c.tidy Tidy))
(:import (java.io ByteArrayInputStream ByteArrayOutputStream)))



(defn configure-pretty-printer
 "Configure the pretty-printer (an instance of a JTidy Tidy class) to
generate output the way we want -- formatted and without sending warnings.
 Return the configured pretty-printer."
[]
(doto (new Tidy)
(.setSmartIndent true)
;(.setTrimEmptyElements true)
(.setShowWarnings false)
(.setQuiet true)))

(defn pretty-print-html
  "Pretty-print the html and return it as a string."
 [html]
(let [swrtr ( ByteArrayOutputStream.)]
  (.parse (configure-pretty-printer) (ByteArrayInputStream. (.getBytes (str html)))  swrtr)
(str swrtr)))

إذا كان أي شخص لا يزال يبحث في هذا الاستعلام، فأنت بحاجة إلى حازوق مكتبة. إذا تم تنسيقات HTML من بنية بيانات عباءة العباءة الموضحة.

لذا


(require '[hiccup.core :refer [html]])

(defn fake-write-html
  [dir args]
  (let [file (str dir *file-separator* *index-file*)
        my-html (html
                  [:html
                   [:head
                    [:title "Docs and Dirs:"]]
                   [:body
                    [:div
                     [:h2 "A nice title"]]
                    [:div
                     [:ul
                      [:li "One"]
                      [:li "Two"]]]]])]
    (clojure.contrib.duck-streams/spit file my-html)))

سوف تعمل بالضبط مثل الملصق الأصلي المقصود. ينصح بشدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top