123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527 |
- #
- #
- # Nim's Runtime Library
- # (c) Copyright 2012 Dominik Picheta
- #
- # See the file "copying.txt", included in this
- # distribution, for details about the copyright.
- #
- ## This module implements a mimetypes database
- import strtabs
- type
- MimeDB* = object
- mimes: StringTableRef
- const mimes* = {
- "ez": "application/andrew-inset",
- "anx": "application/annodex",
- "atom": "application/atom+xml",
- "atomcat": "application/atomcat+xml",
- "atomsrv": "application/atomserv+xml",
- "lin": "application/bbolin",
- "cap": "application/cap",
- "pcap": "application/cap",
- "cu": "application/cu-seeme",
- "davmount": "application/davmount+xml",
- "tsp": "application/dsptype",
- "es": "application/ecmascript",
- "spl": "application/futuresplash",
- "hta": "application/hta",
- "jar": "application/java-archive",
- "ser": "application/java-serialized-object",
- "class": "application/java-vm",
- "js": "application/javascript",
- "m3g": "application/m3g",
- "hqx": "application/mac-binhex40",
- "cpt": "application/mac-compactpro",
- "nb": "application/mathematica",
- "nbp": "application/mathematica",
- "mdb": "application/msaccess",
- "doc": "application/msword",
- "dot": "application/msword",
- "mxf": "application/mxf",
- "bin": "application/octet-stream",
- "oda": "application/oda",
- "ogx": "application/ogg",
- "pdf": "application/pdf",
- "key": "application/pgp-keys",
- "pgp": "application/pgp-signature",
- "prf": "application/pics-rules",
- "ps": "application/postscript",
- "ai": "application/postscript",
- "eps": "application/postscript",
- "epsi": "application/postscript",
- "epsf": "application/postscript",
- "eps2": "application/postscript",
- "eps3": "application/postscript",
- "rar": "application/rar",
- "rdf": "application/rdf+xml",
- "rss": "application/rss+xml",
- "rtf": "application/rtf",
- "smi": "application/smil",
- "smil": "application/smil",
- "xhtml": "application/xhtml+xml",
- "xht": "application/xhtml+xml",
- "xml": "application/xml",
- "xsl": "application/xml",
- "xsd": "application/xml",
- "xspf": "application/xspf+xml",
- "zip": "application/zip",
- "apk": "application/vnd.android.package-archive",
- "cdy": "application/vnd.cinderella",
- "kml": "application/vnd.google-earth.kml+xml",
- "kmz": "application/vnd.google-earth.kmz",
- "xul": "application/vnd.mozilla.xul+xml",
- "xls": "application/vnd.ms-excel",
- "xlb": "application/vnd.ms-excel",
- "xlt": "application/vnd.ms-excel",
- "cat": "application/vnd.ms-pki.seccat",
- "stl": "application/vnd.ms-pki.stl",
- "ppt": "application/vnd.ms-powerpoint",
- "pps": "application/vnd.ms-powerpoint",
- "xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
- "xltx": "application/vnd.openxmlformats-officedocument.spreadsheetml.template",
- "pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
- "ppsx": "application/vnd.openxmlformats-officedocument.presentationml.slideshow",
- "potx": "application/vnd.openxmlformats-officedocument.presentationml.template",
- "docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
- "dotx": "application/vnd.openxmlformats-officedocument.wordprocessingml.template",
- "cod": "application/vnd.rim.cod",
- "mmf": "application/vnd.smaf",
- "sis": "application/vnd.symbian.install",
- "vsd": "application/vnd.visio",
- "wbxml": "application/vnd.wap.wbxml",
- "wmlc": "application/vnd.wap.wmlc",
- "wmlsc": "application/vnd.wap.wmlscriptc",
- "wpd": "application/vnd.wordperfect",
- "wp5": "application/vnd.wordperfect5.1",
- "wk": "application/x-123",
- "7z": "application/x-7z-compressed",
- "abw": "application/x-abiword",
- "dmg": "application/x-apple-diskimage",
- "bcpio": "application/x-bcpio",
- "torrent": "application/x-bittorrent",
- "cab": "application/x-cab",
- "cbr": "application/x-cbr",
- "cbz": "application/x-cbz",
- "cdf": "application/x-cdf",
- "cda": "application/x-cdf",
- "vcd": "application/x-cdlink",
- "pgn": "application/x-chess-pgn",
- "cpio": "application/x-cpio",
- "csh": "application/x-csh",
- "deb": "application/x-debian-package",
- "udeb": "application/x-debian-package",
- "dcr": "application/x-director",
- "dir": "application/x-director",
- "dxr": "application/x-director",
- "dms": "application/x-dms",
- "wad": "application/x-doom",
- "dvi": "application/x-dvi",
- "rhtml": "application/x-httpd-eruby",
- "pfa": "application/x-font",
- "pfb": "application/x-font",
- "gsf": "application/x-font",
- "pcf": "application/x-font",
- "pcf.Z": "application/x-font",
- "mm": "application/x-freemind",
- "spl": "application/x-futuresplash",
- "gnumeric": "application/x-gnumeric",
- "sgf": "application/x-go-sgf",
- "gcf": "application/x-graphing-calculator",
- "gtar": "application/x-gtar",
- "tgz": "application/x-gtar",
- "taz": "application/x-gtar",
- "hdf": "application/x-hdf",
- "phtml": "application/x-httpd-php",
- "pht": "application/x-httpd-php",
- "php": "application/x-httpd-php",
- "phps": "application/x-httpd-php-source",
- "php3": "application/x-httpd-php3",
- "php3p": "application/x-httpd-php3-preprocessed",
- "php4": "application/x-httpd-php4",
- "php5": "application/x-httpd-php5",
- "ica": "application/x-ica",
- "info": "application/x-info",
- "ins": "application/x-internet-signup",
- "isp": "application/x-internet-signup",
- "iii": "application/x-iphone",
- "iso": "application/x-iso9660-image",
- "jam": "application/x-jam",
- "jnlp": "application/x-java-jnlp-file",
- "jmz": "application/x-jmol",
- "chrt": "application/x-kchart",
- "kil": "application/x-killustrator",
- "skp": "application/x-koan",
- "skd": "application/x-koan",
- "skt": "application/x-koan",
- "skm": "application/x-koan",
- "kpr": "application/x-kpresenter",
- "kpt": "application/x-kpresenter",
- "ksp": "application/x-kspread",
- "kwd": "application/x-kword",
- "kwt": "application/x-kword",
- "latex": "application/x-latex",
- "lha": "application/x-lha",
- "lyx": "application/x-lyx",
- "lzh": "application/x-lzh",
- "lzx": "application/x-lzx",
- "frm": "application/x-maker",
- "maker": "application/x-maker",
- "frame": "application/x-maker",
- "fm": "application/x-maker",
- "fb": "application/x-maker",
- "book": "application/x-maker",
- "fbdoc": "application/x-maker",
- "mif": "application/x-mif",
- "wmd": "application/x-ms-wmd",
- "wmz": "application/x-ms-wmz",
- "com": "application/x-msdos-program",
- "exe": "application/x-msdos-program",
- "bat": "application/x-msdos-program",
- "dll": "application/x-msdos-program",
- "msi": "application/x-msi",
- "nc": "application/x-netcdf",
- "pac": "application/x-ns-proxy-autoconfig",
- "dat": "application/x-ns-proxy-autoconfig",
- "nwc": "application/x-nwc",
- "o": "application/x-object",
- "oza": "application/x-oz-application",
- "p7r": "application/x-pkcs7-certreqresp",
- "crl": "application/x-pkcs7-crl",
- "pyc": "application/x-python-code",
- "pyo": "application/x-python-code",
- "qgs": "application/x-qgis",
- "shp": "application/x-qgis",
- "shx": "application/x-qgis",
- "qtl": "application/x-quicktimeplayer",
- "rpm": "application/x-redhat-package-manager",
- "rb": "application/x-ruby",
- "sh": "application/x-sh",
- "shar": "application/x-shar",
- "swf": "application/x-shockwave-flash",
- "swfl": "application/x-shockwave-flash",
- "scr": "application/x-silverlight",
- "sit": "application/x-stuffit",
- "sitx": "application/x-stuffit",
- "sv4cpio": "application/x-sv4cpio",
- "sv4crc": "application/x-sv4crc",
- "tar": "application/x-tar",
- "tcl": "application/x-tcl",
- "gf": "application/x-tex-gf",
- "pk": "application/x-tex-pk",
- "texinfo": "application/x-texinfo",
- "texi": "application/x-texinfo",
- "~": "application/x-trash",
- "%": "application/x-trash",
- "bak": "application/x-trash",
- "old": "application/x-trash",
- "sik": "application/x-trash",
- "t": "application/x-troff",
- "tr": "application/x-troff",
- "roff": "application/x-troff",
- "man": "application/x-troff-man",
- "me": "application/x-troff-me",
- "ms": "application/x-troff-ms",
- "ustar": "application/x-ustar",
- "src": "application/x-wais-source",
- "wz": "application/x-wingz",
- "crt": "application/x-x509-ca-cert",
- "xcf": "application/x-xcf",
- "fig": "application/x-xfig",
- "xpi": "application/x-xpinstall",
- "wasm": "application/wasm",
- "amr": "audio/amr",
- "awb": "audio/amr-wb",
- "amr": "audio/amr",
- "awb": "audio/amr-wb",
- "axa": "audio/annodex",
- "au": "audio/basic",
- "snd": "audio/basic",
- "flac": "audio/flac",
- "mid": "audio/midi",
- "midi": "audio/midi",
- "kar": "audio/midi",
- "mpga": "audio/mpeg",
- "mpega": "audio/mpeg",
- "mp2": "audio/mpeg",
- "mp3": "audio/mpeg",
- "m4a": "audio/mpeg",
- "m3u": "audio/mpegurl",
- "oga": "audio/ogg",
- "ogg": "audio/ogg",
- "spx": "audio/ogg",
- "sid": "audio/prs.sid",
- "aif": "audio/x-aiff",
- "aiff": "audio/x-aiff",
- "aifc": "audio/x-aiff",
- "gsm": "audio/x-gsm",
- "m3u": "audio/x-mpegurl",
- "wma": "audio/x-ms-wma",
- "wax": "audio/x-ms-wax",
- "ra": "audio/x-pn-realaudio",
- "rm": "audio/x-pn-realaudio",
- "ram": "audio/x-pn-realaudio",
- "ra": "audio/x-realaudio",
- "pls": "audio/x-scpls",
- "sd2": "audio/x-sd2",
- "wav": "audio/x-wav",
- "alc": "chemical/x-alchemy",
- "cac": "chemical/x-cache",
- "cache": "chemical/x-cache",
- "csf": "chemical/x-cache-csf",
- "cbin": "chemical/x-cactvs-binary",
- "cascii": "chemical/x-cactvs-binary",
- "ctab": "chemical/x-cactvs-binary",
- "cdx": "chemical/x-cdx",
- "cer": "chemical/x-cerius",
- "c3d": "chemical/x-chem3d",
- "chm": "chemical/x-chemdraw",
- "cif": "chemical/x-cif",
- "cmdf": "chemical/x-cmdf",
- "cml": "chemical/x-cml",
- "cpa": "chemical/x-compass",
- "bsd": "chemical/x-crossfire",
- "csml": "chemical/x-csml",
- "csm": "chemical/x-csml",
- "ctx": "chemical/x-ctx",
- "cxf": "chemical/x-cxf",
- "cef": "chemical/x-cxf",
- "smi": "#chemical/x-daylight-smiles",
- "emb": "chemical/x-embl-dl-nucleotide",
- "embl": "chemical/x-embl-dl-nucleotide",
- "spc": "chemical/x-galactic-spc",
- "inp": "chemical/x-gamess-input",
- "gam": "chemical/x-gamess-input",
- "gamin": "chemical/x-gamess-input",
- "fch": "chemical/x-gaussian-checkpoint",
- "fchk": "chemical/x-gaussian-checkpoint",
- "cub": "chemical/x-gaussian-cube",
- "gau": "chemical/x-gaussian-input",
- "gjc": "chemical/x-gaussian-input",
- "gjf": "chemical/x-gaussian-input",
- "gal": "chemical/x-gaussian-log",
- "gcg": "chemical/x-gcg8-sequence",
- "gen": "chemical/x-genbank",
- "hin": "chemical/x-hin",
- "istr": "chemical/x-isostar",
- "ist": "chemical/x-isostar",
- "jdx": "chemical/x-jcamp-dx",
- "dx": "chemical/x-jcamp-dx",
- "kin": "chemical/x-kinemage",
- "mcm": "chemical/x-macmolecule",
- "mmd": "chemical/x-macromodel-input",
- "mmod": "chemical/x-macromodel-input",
- "mol": "chemical/x-mdl-molfile",
- "rd": "chemical/x-mdl-rdfile",
- "rxn": "chemical/x-mdl-rxnfile",
- "sd": "chemical/x-mdl-sdfile",
- "sdf": "chemical/x-mdl-sdfile",
- "tgf": "chemical/x-mdl-tgf",
- "mif": "#chemical/x-mif",
- "mcif": "chemical/x-mmcif",
- "mol2": "chemical/x-mol2",
- "b": "chemical/x-molconn-Z",
- "gpt": "chemical/x-mopac-graph",
- "mop": "chemical/x-mopac-input",
- "mopcrt": "chemical/x-mopac-input",
- "mpc": "chemical/x-mopac-input",
- "zmt": "chemical/x-mopac-input",
- "moo": "chemical/x-mopac-out",
- "mvb": "chemical/x-mopac-vib",
- "asn": "chemical/x-ncbi-asn1",
- "prt": "chemical/x-ncbi-asn1-ascii",
- "ent": "chemical/x-ncbi-asn1-ascii",
- "val": "chemical/x-ncbi-asn1-binary",
- "aso": "chemical/x-ncbi-asn1-binary",
- "asn": "chemical/x-ncbi-asn1-spec",
- "pdb": "chemical/x-pdb",
- "ent": "chemical/x-pdb",
- "ros": "chemical/x-rosdal",
- "sw": "chemical/x-swissprot",
- "vms": "chemical/x-vamas-iso14976",
- "vmd": "chemical/x-vmd",
- "xtel": "chemical/x-xtel",
- "xyz": "chemical/x-xyz",
- "gif": "image/gif",
- "ief": "image/ief",
- "jpeg": "image/jpeg",
- "jpg": "image/jpeg",
- "jpe": "image/jpeg",
- "pcx": "image/pcx",
- "png": "image/png",
- "svg": "image/svg+xml",
- "svgz": "image/svg+xml",
- "tiff": "image/tiff",
- "tif": "image/tiff",
- "djvu": "image/vnd.djvu",
- "djv": "image/vnd.djvu",
- "wbmp": "image/vnd.wap.wbmp",
- "cr2": "image/x-canon-cr2",
- "crw": "image/x-canon-crw",
- "ras": "image/x-cmu-raster",
- "cdr": "image/x-coreldraw",
- "pat": "image/x-coreldrawpattern",
- "cdt": "image/x-coreldrawtemplate",
- "cpt": "image/x-corelphotopaint",
- "erf": "image/x-epson-erf",
- "ico": "image/x-icon",
- "art": "image/x-jg",
- "jng": "image/x-jng",
- "bmp": "image/x-ms-bmp",
- "nef": "image/x-nikon-nef",
- "orf": "image/x-olympus-orf",
- "psd": "image/x-photoshop",
- "pnm": "image/x-portable-anymap",
- "pbm": "image/x-portable-bitmap",
- "pgm": "image/x-portable-graymap",
- "ppm": "image/x-portable-pixmap",
- "rgb": "image/x-rgb",
- "xbm": "image/x-xbitmap",
- "xpm": "image/x-xpixmap",
- "xwd": "image/x-xwindowdump",
- "eml": "message/rfc822",
- "igs": "model/iges",
- "iges": "model/iges",
- "msh": "model/mesh",
- "mesh": "model/mesh",
- "silo": "model/mesh",
- "wrl": "model/vrml",
- "vrml": "model/vrml",
- "x3dv": "model/x3d+vrml",
- "x3d": "model/x3d+xml",
- "x3db": "model/x3d+binary",
- "manifest": "text/cache-manifest",
- "ics": "text/calendar",
- "icz": "text/calendar",
- "css": "text/css",
- "csv": "text/csv",
- "323": "text/h323",
- "html": "text/html",
- "htm": "text/html",
- "shtml": "text/html",
- "uls": "text/iuls",
- "mml": "text/mathml",
- "asc": "text/plain",
- "txt": "text/plain",
- "text": "text/plain",
- "pot": "text/plain",
- "brf": "text/plain",
- "rtx": "text/richtext",
- "sct": "text/scriptlet",
- "wsc": "text/scriptlet",
- "tm": "text/texmacs",
- "ts": "text/texmacs",
- "tsv": "text/tab-separated-values",
- "jad": "text/vnd.sun.j2me.app-descriptor",
- "wml": "text/vnd.wap.wml",
- "wmls": "text/vnd.wap.wmlscript",
- "bib": "text/x-bibtex",
- "boo": "text/x-boo",
- "h++": "text/x-c++hdr",
- "hpp": "text/x-c++hdr",
- "hxx": "text/x-c++hdr",
- "hh": "text/x-c++hdr",
- "c++": "text/x-c++src",
- "cpp": "text/x-c++src",
- "cxx": "text/x-c++src",
- "cc": "text/x-c++src",
- "h": "text/x-chdr",
- "htc": "text/x-component",
- "csh": "text/x-csh",
- "c": "text/x-csrc",
- "d": "text/x-dsrc",
- "diff": "text/x-diff",
- "patch": "text/x-diff",
- "hs": "text/x-haskell",
- "java": "text/x-java",
- "lhs": "text/x-literate-haskell",
- "moc": "text/x-moc",
- "p": "text/x-pascal",
- "pas": "text/x-pascal",
- "gcd": "text/x-pcs-gcd",
- "pl": "text/x-perl",
- "pm": "text/x-perl",
- "py": "text/x-python",
- "scala": "text/x-scala",
- "etx": "text/x-setext",
- "sh": "text/x-sh",
- "tcl": "text/x-tcl",
- "tk": "text/x-tcl",
- "tex": "text/x-tex",
- "ltx": "text/x-tex",
- "sty": "text/x-tex",
- "cls": "text/x-tex",
- "vcs": "text/x-vcalendar",
- "vcf": "text/x-vcard",
- "3gp": "video/3gpp",
- "axv": "video/annodex",
- "dl": "video/dl",
- "dif": "video/dv",
- "dv": "video/dv",
- "fli": "video/fli",
- "gl": "video/gl",
- "mpeg": "video/mpeg",
- "mpg": "video/mpeg",
- "mpe": "video/mpeg",
- "mp4": "video/mp4",
- "qt": "video/quicktime",
- "mov": "video/quicktime",
- "ogv": "video/ogg",
- "mxu": "video/vnd.mpegurl",
- "flv": "video/x-flv",
- "lsf": "video/x-la-asf",
- "lsx": "video/x-la-asf",
- "mng": "video/x-mng",
- "asf": "video/x-ms-asf",
- "asx": "video/x-ms-asf",
- "wm": "video/x-ms-wm",
- "wmv": "video/x-ms-wmv",
- "wmx": "video/x-ms-wmx",
- "wvx": "video/x-ms-wvx",
- "avi": "video/x-msvideo",
- "movie": "video/x-sgi-movie",
- "mpv": "video/x-matroska",
- "mkv": "video/x-matroska",
- "ice": "x-conference/x-cooltalk",
- "sisx": "x-epoc/x-sisx-app",
- "vrm": "x-world/x-vrml",
- "vrml": "x-world/x-vrml",
- "wrl": "x-world/x-vrml"}
- from strutils import startsWith
- proc newMimetypes*(): MimeDB =
- ## Creates a new Mimetypes database. The database will contain the most
- ## common mimetypes.
- result.mimes = mimes.newStringTable()
- proc getMimetype*(mimedb: MimeDB, ext: string, default = "text/plain"): string =
- ## Gets mimetype which corresponds to ``ext``. Returns ``default`` if ``ext``
- ## could not be found. ``ext`` can start with an optional dot which is ignored.
- if ext.startsWith("."):
- result = mimedb.mimes.getOrDefault(ext.substr(1))
- else:
- result = mimedb.mimes.getOrDefault(ext)
- if result == "":
- return default
- proc getExt*(mimedb: MimeDB, mimetype: string, default = "txt"): string =
- ## Gets extension which corresponds to ``mimetype``. Returns ``default`` if
- ## ``mimetype`` could not be found. Extensions are returned without the
- ## leading dot.
- result = default
- for e, m in mimedb.mimes:
- if m == mimetype:
- result = e
- proc register*(mimedb: var MimeDB, ext: string, mimetype: string) =
- ## Adds ``mimetype`` to the ``mimedb``.
- mimedb.mimes[ext] = mimetype
- when isMainModule:
- var m = newMimetypes()
- assert m.getMimetype("mp4") == "video/mp4"
- assert m.getExt("text/html") == "html"
|