From: Nala Ginrut <nalaginrut@gmail.com>
To: guile-devel <guile-devel@gnu.org>
Subject: [PATCH] add web/mime support
Date: Thu, 23 Feb 2012 22:53:21 +0800 [thread overview]
Message-ID: <CAPjoZocJ+wTK-26TtmiP59fDkn58qRkt+sYH_hojgH8Pzy4k9Q@mail.gmail.com> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 320 bytes --]
There's no mime support in Guile module, so I modified the mime code of my
project Ragnarok and format a patch.
It's easy to use:
(use-modules (web mime))
(define mime (make <mime>))
(mime:guess mime 'pdf)
==> application/pdf
(mime:guess mime 'php)
==> application/x-httpd-php
Maybe useful for some guys~
Any comments?
[-- Attachment #1.2: Type: text/html, Size: 456 bytes --]
[-- Attachment #2: 0001-add-module-web-mime.patch --]
[-- Type: text/x-patch, Size: 17956 bytes --]
From 8165e431af6beb493e41e7ea5858cd253cf09535 Mon Sep 17 00:00:00 2001
From: NalaGinrut <NalaGinrut@gmail.com>
Date: Thu, 23 Feb 2012 22:43:35 +0800
Subject: [PATCH] add module/web/mime
---
module/Makefile.am | 3 +-
module/web/mime.scm | 432 +++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 434 insertions(+), 1 deletions(-)
create mode 100644 module/web/mime.scm
diff --git a/module/Makefile.am b/module/Makefile.am
index 9c9d8ed..9dadd32 100644
--- a/module/Makefile.am
+++ b/module/Makefile.am
@@ -370,7 +370,8 @@ WEB_SOURCES = \
web/response.scm \
web/server.scm \
web/server/http.scm \
- web/uri.scm
+ web/uri.scm \
+ web/mime.scm
EXTRA_DIST += oop/ChangeLog-2008
diff --git a/module/web/mime.scm b/module/web/mime.scm
new file mode 100644
index 0000000..1aa86d5
--- /dev/null
+++ b/module/web/mime.scm
@@ -0,0 +1,432 @@
+;;; MIME support
+
+;; Copyright (C) 2011 Free Software Foundation, Inc.
+
+;; This library is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU Lesser General Public
+;; License as published by the Free Software Foundation; either
+;; version 3 of the License, or (at your option) any later version.
+;;
+;; This library is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;; Lesser General Public License for more details.
+;;
+;; You should have received a copy of the GNU Lesser General Public
+;; License along with this library; if not, write to the Free Software
+;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+;; 02110-1301 USA
+
+(define-module (web mime)
+ #:use-module (oop goops)
+ #:export (<mime> mime:guess))
+
+(define-class <mime> ()
+ (mime-types-table #:init-value (make-hash-table)
+ #:accessor mime:mime-types-table))
+
+(define-method (mime:guess (self <mime>) (what <symbol>))
+ (let ((mime-types-table (mime:mime-types-table self)))
+ (hash-ref mime-types-table what)))
+
+(define-method (mime:guess (self <mime>) (what <string>))
+ (let ((mime-types-table (mime:mime-types-table self)))
+ (hash-ref mime-types-table (string->symbol what))))
+
+;; NOTE: This *mime-type-list* was generated from /etc/mime.types automatically.
+;; So it looks strange but works.
+(define *mime-type-list*
+`(
+(application/andrew-inset (ez ))
+(application/annodex (anx ))
+(application/atom+xml (atom ))
+(application/atomcat+xml (atomcat ))
+(application/atomserv+xml (atomsrv ))
+(application/bbolin (lin ))
+(application/cap (cap pcap ))
+(application/cu-seeme (cu ))
+(application/davmount+xml (davmount ))
+(application/dsptype (tsp ))
+(application/ecmascript (es ))
+(application/futuresplash (spl ))
+(application/hta (hta ))
+(application/java-archive (jar ))
+(application/java-serialized-object (ser ))
+(application/java-vm (class ))
+(application/javascript (js ))
+(application/m3g (m3g ))
+(application/mac-binhex40 (hqx ))
+(application/mac-compactpro (cpt ))
+(application/mathematica (nb nbp ))
+(application/msaccess (mdb ))
+(application/msword (doc dot ))
+(application/mxf (mxf ))
+(application/octet-stream (bin ))
+(application/oda (oda ))
+(application/ogg (ogx ))
+(application/pdf (pdf ))
+(application/pgp-keys (key ))
+(application/pgp-signature (pgp ))
+(application/pics-rules (prf ))
+(application/postscript (ps ai eps epsi epsf eps2 eps3 ))
+(application/rar (rar ))
+(application/rdf+xml (rdf ))
+(application/rss+xml (rss ))
+(application/rtf (rtf ))
+(application/smil (smi smil ))
+(application/xhtml+xml (xhtml xht ))
+(application/xml (xml xsl xsd ))
+(application/xspf+xml (xspf ))
+(application/zip (zip ))
+(application/vnd.android.package-archive (apk ))
+(application/vnd.cinderella (cdy ))
+(application/vnd.google-earth.kml+xml (kml ))
+(application/vnd.google-earth.kmz (kmz ))
+(application/vnd.mozilla.xul+xml (xul ))
+(application/vnd.ms-excel (xls xlb xlt ))
+(application/vnd.ms-pki.seccat (cat ))
+(application/vnd.ms-pki.stl (stl ))
+(application/vnd.ms-powerpoint (ppt pps ))
+(application/vnd.oasis.opendocument.chart (odc ))
+(application/vnd.oasis.opendocument.database (odb ))
+(application/vnd.oasis.opendocument.formula (odf ))
+(application/vnd.oasis.opendocument.graphics (odg ))
+(application/vnd.oasis.opendocument.graphics-template (otg ))
+(application/vnd.oasis.opendocument.image (odi ))
+(application/vnd.oasis.opendocument.presentation (odp ))
+(application/vnd.oasis.opendocument.presentation-template (otp ))
+(application/vnd.oasis.opendocument.spreadsheet (ods ))
+(application/vnd.oasis.opendocument.spreadsheet-template (ots ))
+(application/vnd.oasis.opendocument.text (odt ))
+(application/vnd.oasis.opendocument.text-master (odm ))
+(application/vnd.oasis.opendocument.text-template (ott ))
+(application/vnd.oasis.opendocument.text-web (oth ))
+(application/vnd.openxmlformats-officedocument.spreadsheetml.sheet (xlsx ))
+(application/vnd.openxmlformats-officedocument.spreadsheetml.template (xltx ))
+(application/vnd.openxmlformats-officedocument.presentationml.presentation (pptx ))
+(application/vnd.openxmlformats-officedocument.presentationml.slideshow (ppsx ))
+(application/vnd.openxmlformats-officedocument.presentationml.template (potx ))
+(application/vnd.openxmlformats-officedocument.wordprocessingml.document (docx ))
+(application/vnd.openxmlformats-officedocument.wordprocessingml.template (dotx ))
+(application/vnd.rim.cod (cod ))
+(application/vnd.smaf (mmf ))
+(application/vnd.stardivision.calc (sdc ))
+(application/vnd.stardivision.chart (sds ))
+(application/vnd.stardivision.draw (sda ))
+(application/vnd.stardivision.impress (sdd ))
+(application/vnd.stardivision.math (sdf ))
+(application/vnd.stardivision.writer (sdw ))
+(application/vnd.stardivision.writer-global (sgl ))
+(application/vnd.sun.xml.calc (sxc ))
+(application/vnd.sun.xml.calc.template (stc ))
+(application/vnd.sun.xml.draw (sxd ))
+(application/vnd.sun.xml.draw.template (std ))
+(application/vnd.sun.xml.impress (sxi ))
+(application/vnd.sun.xml.impress.template (sti ))
+(application/vnd.sun.xml.math (sxm ))
+(application/vnd.sun.xml.writer (sxw ))
+(application/vnd.sun.xml.writer.global (sxg ))
+(application/vnd.sun.xml.writer.template (stw ))
+(application/vnd.symbian.install (sis ))
+(application/vnd.visio (vsd ))
+(application/vnd.wap.wbxml (wbxml ))
+(application/vnd.wap.wmlc (wmlc ))
+(application/vnd.wap.wmlscriptc (wmlsc ))
+(application/vnd.wordperfect (wpd ))
+(application/vnd.wordperfect5.1 (wp5 ))
+(application/x-123 (wk ))
+(application/x-7z-compressed (7z ))
+(application/x-abiword (abw ))
+(application/x-apple-diskimage (dmg ))
+(application/x-bcpio (bcpio ))
+(application/x-bittorrent (torrent ))
+(application/x-cab (cab ))
+(application/x-cbr (cbr ))
+(application/x-cbz (cbz ))
+(application/x-cdf (cdf cda ))
+(application/x-cdlink (vcd ))
+(application/x-chess-pgn (pgn ))
+(application/x-cpio (cpio ))
+(application/x-csh (csh ))
+(application/x-debian-package (deb udeb ))
+(application/x-director (dcr dir dxr ))
+(application/x-dms (dms ))
+(application/x-doom (wad ))
+(application/x-dvi (dvi ))
+(application/x-httpd-eruby (rhtml ))
+(application/x-font (pfa pfb gsf pcf pcf.Z ))
+(application/x-freemind (mm ))
+(application/x-futuresplash (spl ))
+(application/x-gnumeric (gnumeric ))
+(application/x-go-sgf (sgf ))
+(application/x-graphing-calculator (gcf ))
+(application/x-gtar (gtar tgz taz ))
+(application/x-hdf (hdf ))
+(application/x-httpd-php (phtml pht php ))
+(application/x-httpd-php-source (phps ))
+(application/x-httpd-php3 (php3 ))
+(application/x-httpd-php3-preprocessed (php3p ))
+(application/x-httpd-php4 (php4 ))
+(application/x-httpd-php5 (php5 ))
+(application/x-ica (ica ))
+(application/x-info (info ))
+(application/x-internet-signup (ins isp ))
+(application/x-iphone (iii ))
+(application/x-iso9660-image (iso ))
+(application/x-jam (jam ))
+(application/x-java-jnlp-file (jnlp ))
+(application/x-jmol (jmz ))
+(application/x-kchart (chrt ))
+(application/x-killustrator (kil ))
+(application/x-koan (skp skd skt skm ))
+(application/x-kpresenter (kpr kpt ))
+(application/x-kspread (ksp ))
+(application/x-kword (kwd kwt ))
+(application/x-latex (latex ))
+(application/x-lha (lha ))
+(application/x-lyx (lyx ))
+(application/x-lzh (lzh ))
+(application/x-lzx (lzx ))
+(application/x-maker (frm maker frame fm fb book fbdoc ))
+(application/x-mif (mif ))
+(application/x-ms-wmd (wmd ))
+(application/x-ms-wmz (wmz ))
+(application/x-msdos-program (com exe bat dll ))
+(application/x-msi (msi ))
+(application/x-netcdf (nc ))
+(application/x-ns-proxy-autoconfig (pac dat ))
+(application/x-nwc (nwc ))
+(application/x-object (o ))
+(application/x-oz-application (oza ))
+(application/x-pkcs7-certreqresp (p7r ))
+(application/x-pkcs7-crl (crl ))
+(application/x-python-code (pyc pyo ))
+(application/x-qgis (qgs shp shx ))
+(application/x-quicktimeplayer (qtl ))
+(application/x-redhat-package-manager (rpm ))
+(application/x-ruby (rb ))
+(application/x-sh (sh ))
+(application/x-shar (shar ))
+(application/x-shockwave-flash (swf swfl ))
+(application/x-silverlight (scr ))
+(application/x-stuffit (sit sitx ))
+(application/x-sv4cpio (sv4cpio ))
+(application/x-sv4crc (sv4crc ))
+(application/x-tar (tar ))
+(application/x-tcl (tcl ))
+(application/x-tex-gf (gf ))
+(application/x-tex-pk (pk ))
+(application/x-texinfo (texinfo texi ))
+(application/x-trash (~ % bak old sik ))
+(application/x-troff (t tr roff ))
+(application/x-troff-man (man ))
+(application/x-troff-me (me ))
+(application/x-troff-ms (ms ))
+(application/x-ustar (ustar ))
+(application/x-wais-source (src ))
+(application/x-wingz (wz ))
+(application/x-x509-ca-cert (crt ))
+(application/x-xcf (xcf ))
+(application/x-xfig (fig ))
+(application/x-xpinstall (xpi ))
+(audio/amr (amr ))
+(audio/amr-wb (awb ))
+(audio/amr (amr ))
+(audio/amr-wb (awb ))
+(audio/annodex (axa ))
+(audio/basic (au snd ))
+(audio/flac (flac ))
+(audio/midi (mid midi kar ))
+(audio/mpeg (mpga mpega mp2 mp3 m4a ))
+(audio/mpegurl (m3u ))
+(audio/ogg (oga ogg spx ))
+(audio/prs.sid (sid ))
+(audio/x-aiff (aif aiff aifc ))
+(audio/x-gsm (gsm ))
+(audio/x-mpegurl (m3u ))
+(audio/x-ms-wma (wma ))
+(audio/x-ms-wax (wax ))
+(audio/x-pn-realaudio (ra rm ram ))
+(audio/x-realaudio (ra ))
+(audio/x-scpls (pls ))
+(audio/x-sd2 (sd2 ))
+(audio/x-wav (wav ))
+(chemical/x-alchemy (alc ))
+(chemical/x-cache (cac cache ))
+(chemical/x-cache-csf (csf ))
+(chemical/x-cactvs-binary (cbin cascii ctab ))
+(chemical/x-cdx (cdx ))
+(chemical/x-cerius (cer ))
+(chemical/x-chem3d (c3d ))
+(chemical/x-chemdraw (chm ))
+(chemical/x-cif (cif ))
+(chemical/x-cmdf (cmdf ))
+(chemical/x-cml (cml ))
+(chemical/x-compass (cpa ))
+(chemical/x-crossfire (bsd ))
+(chemical/x-csml (csml csm ))
+(chemical/x-ctx (ctx ))
+(chemical/x-cxf (cxf cef ))
+(chemical/x-embl-dl-nucleotide (emb embl ))
+(chemical/x-galactic-spc (spc ))
+(chemical/x-gamess-input (inp gam gamin ))
+(chemical/x-gaussian-checkpoint (fch fchk ))
+(chemical/x-gaussian-cube (cub ))
+(chemical/x-gaussian-input (gau gjc gjf ))
+(chemical/x-gaussian-log (gal ))
+(chemical/x-gcg8-sequence (gcg ))
+(chemical/x-genbank (gen ))
+(chemical/x-hin (hin ))
+(chemical/x-isostar (istr ist ))
+(chemical/x-jcamp-dx (jdx dx ))
+(chemical/x-kinemage (kin ))
+(chemical/x-macmolecule (mcm ))
+(chemical/x-macromodel-input (mmd mmod ))
+(chemical/x-mdl-molfile (mol ))
+(chemical/x-mdl-rdfile (rd ))
+(chemical/x-mdl-rxnfile (rxn ))
+(chemical/x-mdl-sdfile (sd sdf ))
+(chemical/x-mdl-tgf (tgf ))
+(chemical/x-mmcif (mcif ))
+(chemical/x-mol2 (mol2 ))
+(chemical/x-molconn-Z (b ))
+(chemical/x-mopac-graph (gpt ))
+(chemical/x-mopac-input (mop mopcrt mpc zmt ))
+(chemical/x-mopac-out (moo ))
+(chemical/x-mopac-vib (mvb ))
+(chemical/x-ncbi-asn1 (asn ))
+(chemical/x-ncbi-asn1-ascii (prt ent ))
+(chemical/x-ncbi-asn1-binary (val aso ))
+(chemical/x-ncbi-asn1-spec (asn ))
+(chemical/x-pdb (pdb ent ))
+(chemical/x-rosdal (ros ))
+(chemical/x-swissprot (sw ))
+(chemical/x-vamas-iso14976 (vms ))
+(chemical/x-vmd (vmd ))
+(chemical/x-xtel (xtel ))
+(chemical/x-xyz (xyz ))
+(image/gif (gif ))
+(image/ief (ief ))
+(image/jpeg (jpeg jpg jpe ))
+(image/pcx (pcx ))
+(image/png (png ))
+(image/svg+xml (svg svgz ))
+(image/tiff (tiff tif ))
+(image/vnd.djvu (djvu djv ))
+(image/vnd.wap.wbmp (wbmp ))
+(image/x-canon-cr2 (cr2 ))
+(image/x-canon-crw (crw ))
+(image/x-cmu-raster (ras ))
+(image/x-coreldraw (cdr ))
+(image/x-coreldrawpattern (pat ))
+(image/x-coreldrawtemplate (cdt ))
+(image/x-corelphotopaint (cpt ))
+(image/x-epson-erf (erf ))
+(image/x-icon (ico ))
+(image/x-jg (art ))
+(image/x-jng (jng ))
+(image/x-ms-bmp (bmp ))
+(image/x-nikon-nef (nef ))
+(image/x-olympus-orf (orf ))
+(image/x-photoshop (psd ))
+(image/x-portable-anymap (pnm ))
+(image/x-portable-bitmap (pbm ))
+(image/x-portable-graymap (pgm ))
+(image/x-portable-pixmap (ppm ))
+(image/x-rgb (rgb ))
+(image/x-xbitmap (xbm ))
+(image/x-xpixmap (xpm ))
+(image/x-xwindowdump (xwd ))
+(message/rfc822 (eml ))
+(model/iges (igs iges ))
+(model/mesh (msh mesh silo ))
+(model/vrml (wrl vrml ))
+(model/x3d+vrml (x3dv ))
+(model/x3d+xml (x3d ))
+(model/x3d+binary (x3db ))
+(text/cache-manifest (manifest ))
+(text/calendar (ics icz ))
+(text/css (css ))
+(text/csv (csv ))
+(text/h323 (323 ))
+(text/html (html htm shtml ))
+(text/iuls (uls ))
+(text/mathml (mml ))
+(text/plain (asc txt text pot brf ))
+(text/richtext (rtx ))
+(text/scriptlet (sct wsc ))
+(text/texmacs (tm ts ))
+(text/tab-separated-values (tsv ))
+(text/vnd.sun.j2me.app-descriptor (jad ))
+(text/vnd.wap.wml (wml ))
+(text/vnd.wap.wmlscript (wmls ))
+(text/x-bibtex (bib ))
+(text/x-boo (boo ))
+(text/x-c++hdr (h++ hpp hxx hh ))
+(text/x-c++src (c++ cpp cxx cc ))
+(text/x-chdr (h ))
+(text/x-component (htc ))
+(text/x-csh (csh ))
+(text/x-csrc (c ))
+(text/x-dsrc (d ))
+(text/x-diff (diff patch ))
+(text/x-haskell (hs ))
+(text/x-java (java ))
+(text/x-literate-haskell (lhs ))
+(text/x-moc (moc ))
+(text/x-pascal (p pas ))
+(text/x-pcs-gcd (gcd ))
+(text/x-perl (pl pm ))
+(text/x-python (py ))
+(text/x-scala (scala ))
+(text/x-setext (etx ))
+(text/x-sh (sh ))
+(text/x-tcl (tcl tk ))
+(text/x-tex (tex ltx sty cls ))
+(text/x-vcalendar (vcs ))
+(text/x-vcard (vcf ))
+(video/3gpp (3gp ))
+(video/annodex (axv ))
+(video/dl (dl ))
+(video/dv (dif dv ))
+(video/fli (fli ))
+(video/gl (gl ))
+(video/mpeg (mpeg mpg mpe ))
+(video/mp4 (mp4 ))
+(video/quicktime (qt mov ))
+(video/ogg (ogv ))
+(video/vnd.mpegurl (mxu ))
+(video/x-flv (flv ))
+(video/x-la-asf (lsf lsx ))
+(video/x-mng (mng ))
+(video/x-ms-asf (asf asx ))
+(video/x-ms-wm (wm ))
+(video/x-ms-wmv (wmv ))
+(video/x-ms-wmx (wmx ))
+(video/x-ms-wvx (wvx ))
+(video/x-msvideo (avi ))
+(video/x-sgi-movie (movie ))
+(video/x-matroska (mpv mkv ))
+(x-conference/x-cooltalk (ice ))
+(x-epoc/x-sisx-app (sisx ))
+(x-world/x-vrml (vrm vrml wrl ))
+
+;; ragnarok mime extension
+(application/x-guile-tpl (gl scm))))
+
+(define-method (initialize (self <mime>) args)
+ (next-method)
+ (let ((mime-types-table (mime:mime-types-table self)))
+ ;; init mime type table
+ (for-each (lambda (x)
+ (let* ((mtype (car x)) (mimes (cadr x)))
+ (for-each (lambda (m)
+ (hash-set! mime-types-table
+ m
+ mtype))
+ mimes)))
+ *mime-type-list*)))
+
+
+
+
--
1.7.0.4
next reply other threads:[~2012-02-23 14:53 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-23 14:53 Nala Ginrut [this message]
2012-02-23 15:03 ` [PATCH] add web/mime support Catonano
2012-02-23 15:39 ` Nala Ginrut
2012-02-23 15:58 ` Catonano
2013-01-16 10:46 ` Andy Wingo
2013-01-16 11:06 ` Nala Ginrut
2013-01-17 8:17 ` Nala Ginrut
2013-01-17 10:06 ` Andy Wingo
2013-01-17 10:37 ` Nala Ginrut
2013-01-17 14:48 ` Andy Wingo
2013-02-06 13:13 ` Nala Ginrut
2013-02-10 1:41 ` Daniel Hartwig
2013-02-11 9:38 ` Nala Ginrut
2013-02-11 12:33 ` Daniel Hartwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAPjoZocJ+wTK-26TtmiP59fDkn58qRkt+sYH_hojgH8Pzy4k9Q@mail.gmail.com \
--to=nalaginrut@gmail.com \
--cc=guile-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).