LINUX.ORG.RU

История изменений

Исправление Jini, (текущая версия) :

Два варианта на Common Lisp:

HTML в виде скобок:

`(:html
   (:head
     (:title "Hello Kitty")
     (:meta :name ,(author *metadata*)
            :content "Not Sanrio Co., Ltd"))
   (:body
     (:h1 "Hello Kitty")
     (:p :class "official"
         "She is not a cat. She is a human girl."))
   ,(iter
      (repeat 3)
      (collect `(:p :class "emphasis"
                    "Her name is Kitty White.")))
   (:p :class "citation-needed"
       "We still don't know how she eats."))

и типа как в JSP, только круче:

#<%"
  <html>
    <head>
      <title>Hello Kitty</title>
      <meta name="<% (author *metadata*) %>" content="Not Sanrio Co., Ltd"/>
    </head>
    <body>
      <h1>Hello Kitty</h1>
      <p class="official">She is not a cat. She is a human girl.</p>
      <% (iter
           (repeat 3)
                    ; an ordinary string would work here too
           (collect #<%"<p class="emphasis">Her name is Kitty White.</p>"%>)) %>
      <p class="citation-needed">We still don't know how she eats.</p>
    </body>
  </html>
"%>

Реализация первого (конвертация списков такого формата в html) занимает 100 строк. Второй — 120 строк основного кода + 100 строк на вспомогательный класс, которым оборачивается входной поток, чтобы в него можно было обратно символы пихать (неограниченный unread-char). В обоих случаях в HTML можно вставлять какой угодно код с произвольной степенью рекурсии. Код пока можно посмотреть тут: http://jini-zh.org/tmp/lor/html.lisp

Исходная версия Jini, :

Два варианта на Common Lisp:

HTML в виде скобок:

`(:html
   (:head
     (:title "Hello Kitty")
     (:meta :name ,(author *metadata*)
            :content "Not Sanrio Co., Ltd"))
   (:body
     (:h1 "Hello Kitty")
     (:p :class "official"
         "She is not a cat. She is a human girl."))
   ,(iter
      (repeat 3)
      (collect `(:p :class "emphasis"
                    "Her name is Kitty White.")))
   (:p :class "citation-needed"
       "We still don't know how she eats."))

и типа как в JSP, только круче:

#<%"
  <html>
    <head>
      <title>Hello Kitty</title>
      <meta name=<% (author *metadata*) %> content="Not Sanrio Co., Ltd"/>
    </head>
    <body>
      <h1>Hello Kitty</h1>
      <p class="official">She is not a cat. She is a human girl.</p>
      <% (iter
           (repeat 3)
                    ; an ordinary string would work here too
           (collect #<%"<p class="emphasis">Her name is Kitty White.</p>"%>)) %>
      <p class="citation-needed">We still don't know how she eats.</p>
    </body>
  </html>
"%>

Реализация первого (конвертация списков такого формата в html) занимает 100 строк. Второй — 120 строк основного кода + 100 строк на вспомогательный класс, которым оборачивается входной поток, чтобы в него можно было обратно символы пихать (неограниченный unread-char). В обоих случаях в HTML можно вставлять какой угодно код с произвольной степенью рекурсии. Код пока можно посмотреть тут: http://jini-zh.org/tmp/lor/html.lisp