首页 > 其他分享 >Common Lisp 批量处理生成HTML网页

Common Lisp 批量处理生成HTML网页

时间:2023-05-20 10:11:51浏览次数:30  
标签:key format Lisp alist html HTML Common file pointer

在组织磁盘文件的时候,想到HTML web的超级链接对知识有帮助,利用书籍《 Practical Common Lisp》中的可移植的文件系统库 。

实现了遍历e盘的图像文件夹,生成多个网页文件,并收集所有的html后缀文件生成超链接。

知识点:HTML编辑,文件系统遍历,Common Lisp 宏

代码如下:

 

(defparameter *metas-alist* '(("keywords" . "前端开发,后端开发" )
                                ("description" . "Web技术" )
                                ("author" . "mklp.麦克雷帕" )
                                ("copyright" . "版权所有,侵权必究。" )))
(defparameter *lines-alist* '(("h3"  . "诗一首")
                                ("p"  . "月光光,照亮归家的道路。")
                                ("p" . "路漫漫,永远的逆水行舟。")))
(defparameter *links-alist* '(("home.html" . "Home Pages")
                              ("https://home.cnblogs.com/u/mklp/" . "My blogs")))
(defparameter *file-pointer* nil)                    
;;; 参考 Practical Common Lisp可移植的文件系统库

(defun picture-p (file)
  (or (file-type-p file "jpg")
  (file-type-p file "jpeg")
  (file-type-p file "png")))
(defmacro one-line-html (key<> str<>)
        `(format *file-pointer* "<~(~A~)>~A</~(~A~)>~%" ',key<> ,str<> ',key<>))
(defmacro with-lines-html (key<> &rest body<>)
        `(progn (format *file-pointer* "~&<~(~A~)>~%" ',key<>)
        ,@body<>
        (format *file-pointer* "~&</~(~A~)>~%" ',key<>)))
(defmacro lines-html-alist (alist<>)
        `(loop for (key<> . str<>) in ,alist<>
                do (format *file-pointer* "<~A>~A</~A>~%" key<> str<> key<>)))
(defmacro metas-html-alist (alist<>)
        `(loop for (name<> . content<>) in ,alist<>
                do (format *file-pointer* "<meta name=~S content=~S/>~%" name<> content<>)))
(defmacro links-html-alist (alist<>)
        `(loop for (link<> . title<>) in ,alist<>
                do (format *file-pointer* "<a href=~S>~%<b>~A~%</b>~%</a>" link<> title<>)))

(defmacro html-page-output (file<> title<> &rest body<>)
`(with-open-file (out (format nil "~(~A~).html" ,file<>)
                            :direction :output
                            :if-does-not-exist :create
                            :if-exists :supersede)
(setf *file-pointer*  out)
(format *file-pointer* "<!DOCTYPE html>~%")
(with-lines-html "html"
        (with-lines-html "head"
                (one-line-html "title" ,title<>)
                (format *file-pointer*        "~&<meta charset=~S>~%"        "utf-8")
                (metas-html-alist     *metas-alist*))
        (with-lines-html "body"
                (one-line-html "h1" "Contents")
                ,@body<>
                (one-line-html "h1" "Others Useful Links")
                (links-html-alist   *links-alist*)
                (lines-html-alist    *lines-alist*)))
)
)
(defun html-file-ouput (file<> )
  (html-page-output file<> file<> (walk-directory (format nil "e:/look/picture/~(~A~)/" file<>)
                   (lambda (xx) (format *file-pointer* "~%    <img src=~S alt=~S title=~S width=~S />~% " (namestring xx) (namestring xx) (namestring xx) "900"))
                   :test #'picture-p))
)

(walk-directory "e:/look/picture/"
                   (lambda (xx) (html-file-ouput (pathname-name (pathname-as-file xx))))
                   :directories T
                   :test #'directory-pathname-p)
 

 

标签:key,format,Lisp,alist,html,HTML,Common,file,pointer
From: https://www.cnblogs.com/mklp/p/17416769.html

相关文章

  • HTML和CSS实现京东首页
    HTML代码基本结构<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!</title><metaname="description"content="京东JD......
  • php第三方库:用simple_html_dom解析html(php)
    一,第三方库的地址:https://github.com/voku/simple_html_dom二,安装库:simple_html_dom:1,安装[lhdop@blogparsehtml]$composerrequirevoku/simple_html_domInfofromhttps://repo.packagist.org:#StandWithUkraine…2,安装完成后查看安装成功的文件:[lhdop@blog......
  • html和css
    Web第一天一、html和CSS1.B/S软件的结构JavaSE:C/SClientServerB/SBrowserServer2.前段开发流程3.网页的组成部分页面由三部分组成!分别是内容(结构)、表现、行为。内容(结构),是我们在页面中可以看到的数据。我们称之为内容。一般内容我们使用html技术来展示。表现,......
  • HTML 简介
    网页我们接下来是进行的网页开发,这里首先介绍下网页的相关概念:什么是网页?网页是指在因特网根据一定的规则,使用HTML等制作的用于展示特定内容相关的网页集合。网页是网站中的一"页",通常是HTML格式的文件,它要通过浏览器来阅读。网页是构成网站的基本元素,它通常由图片、......
  • html基础
    一、div样式1、style设置css样式(扩展了解style标签)2、align设置div盒子内的内容居中、居左、居右3、id 引人外部对应#(井号)选择符号样式4、class 引人外部对应.(句号)选择符号样式5、title设置div(标题)鼠标经过时显示文字(扩展了解 title标签)3、id案例<!DOCTYPEhtml......
  • html+css重点内容
    复习yuanhtml1.web组成html-结构层css-表现层js-行为交互2.html:标签元素标记分类:单标签:<标签名:属性=“属性值”属性=“属性值”>/加不加都可以 双标签:<标签名:属性=“属性值”></标签名> 常用单标签:brhrimginput 常用双标签:divph6-h1spana3.元素类型: ......
  • Postman+Newman生成HTML接口测试报告
    NewMan是官方提供的专门用于posman进行自动化的命令行工具环境配置:Node.js:Newman是基于Node.js,所以安装NewMan之前需要保证本地有安装Node.jsNewMan:npminewman-g,安装成功后输入newman-v来检查版本,显示出版本即表示安装成功html格式报告的插件:npminstall-gnewman......
  • HTML属性 分为两种Property 固有属性Attribute 自定义属性
    HTML属性 分为两种Property固有属性Attribute自定义属性。固有属性就是浏览器给默认给html标签绑定上的属性。 操作固有属性固有属性可以通过对象.属性名这样方式来设置和获取值。什么是自定义属性自定义属性就是用户自己定义,在固有属性列表中没有的属性。获取自定义......
  • Html中使用jquery通过Ajax请求WebService接口以及跨域问题解决
    场景VS2019新建WebService/Web服务/asmx并通过IIS实现发布和调用:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130743584在上面实现发布WebService的基础上,怎样在html中通过jquery对接口发起请求和解析数据。注:博客:https://blog.csdn.net/badao_liumang_qiz......
  • IDEA/WEBSTORM配置静态的html,提供给同一局域网访问
    配置端口和勾选不信任的链接 配置Deployment 最重要的一步:重启IDE访问配置的链接即可,可以把localhost改成本机的ip,供同一局域网的人使用了。 ......