mimetypes.nim 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072
  1. #
  2. #
  3. # Nim's Runtime Library
  4. # (c) Copyright 2012 Dominik Picheta
  5. #
  6. # See the file "copying.txt", included in this
  7. # distribution, for details about the copyright.
  8. #
  9. ## This module implements a mimetypes database
  10. runnableExamples:
  11. var m = newMimetypes()
  12. doAssert m.getMimetype("mp4") == "video/mp4"
  13. doAssert m.getExt("text/html") == "html"
  14. ## Values can be uppercase too.
  15. doAssert m.getMimetype("MP4") == "video/mp4"
  16. doAssert m.getExt("TEXT/HTML") == "html"
  17. ## If values are invalid then `default` is returned.
  18. doAssert m.getMimetype("INVALID") == "text/plain"
  19. doAssert m.getExt("INVALID/NONEXISTENT") == "txt"
  20. doAssert m.getMimetype("") == "text/plain"
  21. doAssert m.getExt("") == "txt"
  22. ## Register new Mimetypes.
  23. m.register(ext = "fakext", mimetype = "text/fakelang")
  24. doAssert m.getMimetype("fakext") == "text/fakelang"
  25. doAssert m.getMimetype("FaKeXT") == "text/fakelang"
  26. import std/tables
  27. from std/strutils import startsWith, toLowerAscii, strip
  28. when defined(nimPreviewSlimSystem):
  29. import std/assertions
  30. type
  31. MimeDB* = object
  32. mimes: OrderedTable[string, string]
  33. const mimes* = {
  34. "ez": "application/andrew-inset",
  35. "aw": "application/applixware",
  36. "atom": "application/atom+xml",
  37. "atomcat": "application/atomcat+xml",
  38. "atomsvc": "application/atomsvc+xml",
  39. "ccxml": "application/ccxml+xml",
  40. "cdmia": "application/cdmi-capability",
  41. "cdmic": "application/cdmi-container",
  42. "cdmid": "application/cdmi-domain",
  43. "cdmio": "application/cdmi-object",
  44. "cdmiq": "application/cdmi-queue",
  45. "cu": "application/cu-seeme",
  46. "davmount": "application/davmount+xml",
  47. "dbk": "application/docbook+xml",
  48. "dssc": "application/dssc+der",
  49. "xdssc": "application/dssc+xml",
  50. "ecma": "application/ecmascript",
  51. "emma": "application/emma+xml",
  52. "epub": "application/epub+zip",
  53. "exi": "application/exi",
  54. "pfr": "application/font-tdpfr",
  55. "gml": "application/gml+xml",
  56. "gpx": "application/gpx+xml",
  57. "gxf": "application/gxf",
  58. "stk": "application/hyperstudio",
  59. "ink": "application/inkml+xml",
  60. "inkml": "application/inkml+xml",
  61. "ipfix": "application/ipfix",
  62. "jar": "application/java-archive",
  63. "ser": "application/java-serialized-object",
  64. "class": "application/java-vm",
  65. "json": "application/json",
  66. "jsonml": "application/jsonml+json",
  67. "lostxml": "application/lost+xml",
  68. "hqx": "application/mac-binhex40",
  69. "cpt": "application/mac-compactpro",
  70. "mads": "application/mads+xml",
  71. "mrc": "application/marc",
  72. "mrcx": "application/marcxml+xml",
  73. "ma": "application/mathematica",
  74. "nb": "application/mathematica",
  75. "mb": "application/mathematica",
  76. "mathml": "application/mathml+xml",
  77. "mbox": "application/mbox",
  78. "mscml": "application/mediaservercontrol+xml",
  79. "metalink": "application/metalink+xml",
  80. "meta4": "application/metalink4+xml",
  81. "mets": "application/mets+xml",
  82. "mods": "application/mods+xml",
  83. "m21": "application/mp21",
  84. "mp21": "application/mp21",
  85. "mp4s": "application/mp4",
  86. "doc": "application/msword",
  87. "dot": "application/msword",
  88. "mxf": "application/mxf",
  89. "bin": "application/octet-stream",
  90. "dms": "application/octet-stream",
  91. "lrf": "application/octet-stream",
  92. "mar": "application/octet-stream",
  93. "so": "application/octet-stream",
  94. "dist": "application/octet-stream",
  95. "distz": "application/octet-stream",
  96. "pkg": "application/octet-stream",
  97. "bpk": "application/octet-stream",
  98. "dump": "application/octet-stream",
  99. "elc": "application/octet-stream",
  100. "deploy": "application/octet-stream",
  101. "oda": "application/oda",
  102. "opf": "application/oebps-package+xml",
  103. "ogx": "application/ogg",
  104. "omdoc": "application/omdoc+xml",
  105. "onetoc": "application/onenote",
  106. "onetoc2": "application/onenote",
  107. "onetmp": "application/onenote",
  108. "onepkg": "application/onenote",
  109. "oxps": "application/oxps",
  110. "xer": "application/patch-ops-error+xml",
  111. "pdf": "application/pdf",
  112. "pgp": "application/pgp-encrypted",
  113. "asc": "application/pgp-signature",
  114. "sig": "application/pgp-signature",
  115. "prf": "application/pics-rules",
  116. "p10": "application/pkcs10",
  117. "p7m": "application/pkcs7-mime",
  118. "p7c": "application/pkcs7-mime",
  119. "p7s": "application/pkcs7-signature",
  120. "p8": "application/pkcs8",
  121. "ac": "application/pkix-attr-cert",
  122. "cer": "application/pkix-cert",
  123. "crl": "application/pkix-crl",
  124. "pkipath": "application/pkix-pkipath",
  125. "pki": "application/pkixcmp",
  126. "pls": "application/pls+xml",
  127. "ai": "application/postscript",
  128. "eps": "application/postscript",
  129. "ps": "application/postscript",
  130. "cww": "application/prs.cww",
  131. "pskcxml": "application/pskc+xml",
  132. "rdf": "application/rdf+xml",
  133. "rif": "application/reginfo+xml",
  134. "rnc": "application/relax-ng-compact-syntax",
  135. "rl": "application/resource-lists+xml",
  136. "rld": "application/resource-lists-diff+xml",
  137. "rs": "application/rls-services+xml",
  138. "gbr": "application/rpki-ghostbusters",
  139. "mft": "application/rpki-manifest",
  140. "roa": "application/rpki-roa",
  141. "rsd": "application/rsd+xml",
  142. "rss": "application/rss+xml",
  143. "rtf": "application/rtf",
  144. "sbml": "application/sbml+xml",
  145. "scq": "application/scvp-cv-request",
  146. "scs": "application/scvp-cv-response",
  147. "spq": "application/scvp-vp-request",
  148. "spp": "application/scvp-vp-response",
  149. "sdp": "application/sdp",
  150. "setpay": "application/set-payment-initiation",
  151. "setreg": "application/set-registration-initiation",
  152. "shf": "application/shf+xml",
  153. "smi": "application/smil+xml",
  154. "smil": "application/smil+xml",
  155. "rq": "application/sparql-query",
  156. "srx": "application/sparql-results+xml",
  157. "gram": "application/srgs",
  158. "grxml": "application/srgs+xml",
  159. "sru": "application/sru+xml",
  160. "ssdl": "application/ssdl+xml",
  161. "ssml": "application/ssml+xml",
  162. "tei": "application/tei+xml",
  163. "teicorpus": "application/tei+xml",
  164. "tfi": "application/thraud+xml",
  165. "tsd": "application/timestamped-data",
  166. "plb": "application/vnd.3gpp.pic-bw-large",
  167. "psb": "application/vnd.3gpp.pic-bw-small",
  168. "pvb": "application/vnd.3gpp.pic-bw-var",
  169. "tcap": "application/vnd.3gpp2.tcap",
  170. "pwn": "application/vnd.3m.post-it-notes",
  171. "aso": "application/vnd.accpac.simply.aso",
  172. "imp": "application/vnd.accpac.simply.imp",
  173. "acu": "application/vnd.acucobol",
  174. "atc": "application/vnd.acucorp",
  175. "acutc": "application/vnd.acucorp",
  176. "air": "application/vnd.adobe.air-application-installer-package+zip",
  177. "fcdt": "application/vnd.adobe.formscentral.fcdt",
  178. "fxp": "application/vnd.adobe.fxp",
  179. "fxpl": "application/vnd.adobe.fxp",
  180. "xdp": "application/vnd.adobe.xdp+xml",
  181. "xfdf": "application/vnd.adobe.xfdf",
  182. "ahead": "application/vnd.ahead.space",
  183. "azf": "application/vnd.airzip.filesecure.azf",
  184. "azs": "application/vnd.airzip.filesecure.azs",
  185. "azw": "application/vnd.amazon.ebook",
  186. "acc": "application/vnd.americandynamics.acc",
  187. "ami": "application/vnd.amiga.ami",
  188. "apk": "application/vnd.android.package-archive",
  189. "cii": "application/vnd.anser-web-certificate-issue-initiation",
  190. "fti": "application/vnd.anser-web-funds-transfer-initiation",
  191. "atx": "application/vnd.antix.game-component",
  192. "mpkg": "application/vnd.apple.installer+xml",
  193. "m3u8": "application/vnd.apple.mpegurl",
  194. "swi": "application/vnd.aristanetworks.swi",
  195. "iota": "application/vnd.astraea-software.iota",
  196. "aep": "application/vnd.audiograph",
  197. "mpm": "application/vnd.blueice.multipass",
  198. "bmi": "application/vnd.bmi",
  199. "rep": "application/vnd.businessobjects",
  200. "cdxml": "application/vnd.chemdraw+xml",
  201. "mmd": "application/vnd.chipnuts.karaoke-mmd",
  202. "cdy": "application/vnd.cinderella",
  203. "cla": "application/vnd.claymore",
  204. "rp9": "application/vnd.cloanto.rp9",
  205. "c4g": "application/vnd.clonk.c4group",
  206. "c4d": "application/vnd.clonk.c4group",
  207. "c4f": "application/vnd.clonk.c4group",
  208. "c4p": "application/vnd.clonk.c4group",
  209. "c4u": "application/vnd.clonk.c4group",
  210. "c11amc": "application/vnd.cluetrust.cartomobile-config",
  211. "c11amz": "application/vnd.cluetrust.cartomobile-config-pkg",
  212. "csp": "application/vnd.commonspace",
  213. "cdbcmsg": "application/vnd.contact.cmsg",
  214. "cmc": "application/vnd.cosmocaller",
  215. "clkx": "application/vnd.crick.clicker",
  216. "clkk": "application/vnd.crick.clicker.keyboard",
  217. "clkp": "application/vnd.crick.clicker.palette",
  218. "clkt": "application/vnd.crick.clicker.template",
  219. "clkw": "application/vnd.crick.clicker.wordbank",
  220. "wbs": "application/vnd.criticaltools.wbs+xml",
  221. "pml": "application/vnd.ctc-posml",
  222. "ppd": "application/vnd.cups-ppd",
  223. "car": "application/vnd.curl.car",
  224. "pcurl": "application/vnd.curl.pcurl",
  225. "dart": "application/vnd.dart",
  226. "rdz": "application/vnd.data-vision.rdz",
  227. "uvf": "application/vnd.dece.data",
  228. "uvvf": "application/vnd.dece.data",
  229. "uvd": "application/vnd.dece.data",
  230. "uvvd": "application/vnd.dece.data",
  231. "uvt": "application/vnd.dece.ttml+xml",
  232. "uvvt": "application/vnd.dece.ttml+xml",
  233. "uvx": "application/vnd.dece.unspecified",
  234. "uvvx": "application/vnd.dece.unspecified",
  235. "uvz": "application/vnd.dece.zip",
  236. "uvvz": "application/vnd.dece.zip",
  237. "fe_launch": "application/vnd.denovo.fcselayout-link",
  238. "dna": "application/vnd.dna",
  239. "mlp": "application/vnd.dolby.mlp",
  240. "dpg": "application/vnd.dpgraph",
  241. "dfac": "application/vnd.dreamfactory",
  242. "kpxx": "application/vnd.ds-keypoint",
  243. "ait": "application/vnd.dvb.ait",
  244. "svc": "application/vnd.dvb.service",
  245. "geo": "application/vnd.dynageo",
  246. "mag": "application/vnd.ecowin.chart",
  247. "nml": "application/vnd.enliven",
  248. "esf": "application/vnd.epson.esf",
  249. "msf": "application/vnd.epson.msf",
  250. "qam": "application/vnd.epson.quickanime",
  251. "slt": "application/vnd.epson.salt",
  252. "ssf": "application/vnd.epson.ssf",
  253. "es3": "application/vnd.eszigno3+xml",
  254. "et3": "application/vnd.eszigno3+xml",
  255. "ez2": "application/vnd.ezpix-album",
  256. "ez3": "application/vnd.ezpix-package",
  257. "fdf": "application/vnd.fdf",
  258. "mseed": "application/vnd.fdsn.mseed",
  259. "seed": "application/vnd.fdsn.seed",
  260. "dataless": "application/vnd.fdsn.seed",
  261. "gph": "application/vnd.flographit",
  262. "ftc": "application/vnd.fluxtime.clip",
  263. "fm": "application/vnd.framemaker",
  264. "frame": "application/vnd.framemaker",
  265. "maker": "application/vnd.framemaker",
  266. "book": "application/vnd.framemaker",
  267. "fnc": "application/vnd.frogans.fnc",
  268. "ltf": "application/vnd.frogans.ltf",
  269. "fsc": "application/vnd.fsc.weblaunch",
  270. "oas": "application/vnd.fujitsu.oasys",
  271. "oa2": "application/vnd.fujitsu.oasys2",
  272. "oa3": "application/vnd.fujitsu.oasys3",
  273. "fg5": "application/vnd.fujitsu.oasysgp",
  274. "bh2": "application/vnd.fujitsu.oasysprs",
  275. "ddd": "application/vnd.fujixerox.ddd",
  276. "xdw": "application/vnd.fujixerox.docuworks",
  277. "xbd": "application/vnd.fujixerox.docuworks.binder",
  278. "fzs": "application/vnd.fuzzysheet",
  279. "txd": "application/vnd.genomatix.tuxedo",
  280. "ggb": "application/vnd.geogebra.file",
  281. "ggs": "application/vnd.geogebra.slides",
  282. "ggt": "application/vnd.geogebra.tool",
  283. "gex": "application/vnd.geometry-explorer",
  284. "gre": "application/vnd.geometry-explorer",
  285. "gxt": "application/vnd.geonext",
  286. "g2w": "application/vnd.geoplan",
  287. "g3w": "application/vnd.geospace",
  288. "gmx": "application/vnd.gmx",
  289. "kml": "application/vnd.google-earth.kml+xml",
  290. "kmz": "application/vnd.google-earth.kmz",
  291. "gqf": "application/vnd.grafeq",
  292. "gqs": "application/vnd.grafeq",
  293. "gac": "application/vnd.groove-account",
  294. "ghf": "application/vnd.groove-help",
  295. "gim": "application/vnd.groove-identity-message",
  296. "grv": "application/vnd.groove-injector",
  297. "gtm": "application/vnd.groove-tool-message",
  298. "tpl": "application/vnd.groove-tool-template",
  299. "vcg": "application/vnd.groove-vcard",
  300. "hal": "application/vnd.hal+xml",
  301. "zmm": "application/vnd.handheld-entertainment+xml",
  302. "hbci": "application/vnd.hbci",
  303. "les": "application/vnd.hhe.lesson-player",
  304. "hpgl": "application/vnd.hp-hpgl",
  305. "hpid": "application/vnd.hp-hpid",
  306. "hps": "application/vnd.hp-hps",
  307. "jlt": "application/vnd.hp-jlyt",
  308. "pcl": "application/vnd.hp-pcl",
  309. "pclxl": "application/vnd.hp-pclxl",
  310. "sfd-hdstx": "application/vnd.hydrostatix.sof-data",
  311. "mpy": "application/vnd.ibm.minipay",
  312. "afp": "application/vnd.ibm.modcap",
  313. "listafp": "application/vnd.ibm.modcap",
  314. "list3820": "application/vnd.ibm.modcap",
  315. "irm": "application/vnd.ibm.rights-management",
  316. "sc": "application/vnd.ibm.secure-container",
  317. "icc": "application/vnd.iccprofile",
  318. "icm": "application/vnd.iccprofile",
  319. "igl": "application/vnd.igloader",
  320. "ivp": "application/vnd.immervision-ivp",
  321. "ivu": "application/vnd.immervision-ivu",
  322. "igm": "application/vnd.insors.igm",
  323. "xpw": "application/vnd.intercon.formnet",
  324. "xpx": "application/vnd.intercon.formnet",
  325. "i2g": "application/vnd.intergeo",
  326. "qbo": "application/vnd.intu.qbo",
  327. "qfx": "application/vnd.intu.qfx",
  328. "rcprofile": "application/vnd.ipunplugged.rcprofile",
  329. "irp": "application/vnd.irepository.package+xml",
  330. "xpr": "application/vnd.is-xpr",
  331. "fcs": "application/vnd.isac.fcs",
  332. "jam": "application/vnd.jam",
  333. "rms": "application/vnd.jcp.javame.midlet-rms",
  334. "jisp": "application/vnd.jisp",
  335. "joda": "application/vnd.joost.joda-archive",
  336. "ktz": "application/vnd.kahootz",
  337. "ktr": "application/vnd.kahootz",
  338. "karbon": "application/vnd.kde.karbon",
  339. "chrt": "application/vnd.kde.kchart",
  340. "kfo": "application/vnd.kde.kformula",
  341. "flw": "application/vnd.kde.kivio",
  342. "kon": "application/vnd.kde.kontour",
  343. "kpr": "application/vnd.kde.kpresenter",
  344. "kpt": "application/vnd.kde.kpresenter",
  345. "ksp": "application/vnd.kde.kspread",
  346. "kwd": "application/vnd.kde.kword",
  347. "kwt": "application/vnd.kde.kword",
  348. "htke": "application/vnd.kenameaapp",
  349. "kia": "application/vnd.kidspiration",
  350. "kne": "application/vnd.kinar",
  351. "knp": "application/vnd.kinar",
  352. "skp": "application/vnd.koan",
  353. "skd": "application/vnd.koan",
  354. "skt": "application/vnd.koan",
  355. "skm": "application/vnd.koan",
  356. "sse": "application/vnd.kodak-descriptor",
  357. "lasxml": "application/vnd.las.las+xml",
  358. "lbd": "application/vnd.llamagraphics.life-balance.desktop",
  359. "lbe": "application/vnd.llamagraphics.life-balance.exchange+xml",
  360. "123": "application/vnd.lotus-1-2-3",
  361. "apr": "application/vnd.lotus-approach",
  362. "pre": "application/vnd.lotus-freelance",
  363. "nsf": "application/vnd.lotus-notes",
  364. "org": "application/vnd.lotus-organizer",
  365. "scm": "application/vnd.lotus-screencam",
  366. "lwp": "application/vnd.lotus-wordpro",
  367. "portpkg": "application/vnd.macports.portpkg",
  368. "mcd": "application/vnd.mcd",
  369. "mc1": "application/vnd.medcalcdata",
  370. "cdkey": "application/vnd.mediastation.cdkey",
  371. "mwf": "application/vnd.mfer",
  372. "mfm": "application/vnd.mfmp",
  373. "flo": "application/vnd.micrografx.flo",
  374. "igx": "application/vnd.micrografx.igx",
  375. "mif": "application/vnd.mif",
  376. "daf": "application/vnd.mobius.daf",
  377. "dis": "application/vnd.mobius.dis",
  378. "mbk": "application/vnd.mobius.mbk",
  379. "mqy": "application/vnd.mobius.mqy",
  380. "msl": "application/vnd.mobius.msl",
  381. "plc": "application/vnd.mobius.plc",
  382. "txf": "application/vnd.mobius.txf",
  383. "mpn": "application/vnd.mophun.application",
  384. "mpc": "application/vnd.mophun.certificate",
  385. "xul": "application/vnd.mozilla.xul+xml",
  386. "cil": "application/vnd.ms-artgalry",
  387. "cab": "application/vnd.ms-cab-compressed",
  388. "xls": "application/vnd.ms-excel",
  389. "xlm": "application/vnd.ms-excel",
  390. "xla": "application/vnd.ms-excel",
  391. "xlc": "application/vnd.ms-excel",
  392. "xlt": "application/vnd.ms-excel",
  393. "xlw": "application/vnd.ms-excel",
  394. "xlam": "application/vnd.ms-excel.addin.macroenabled.12",
  395. "xlsb": "application/vnd.ms-excel.sheet.binary.macroenabled.12",
  396. "xlsm": "application/vnd.ms-excel.sheet.macroenabled.12",
  397. "xltm": "application/vnd.ms-excel.template.macroenabled.12",
  398. "eot": "application/vnd.ms-fontobject",
  399. "chm": "application/vnd.ms-htmlhelp",
  400. "ims": "application/vnd.ms-ims",
  401. "lrm": "application/vnd.ms-lrm",
  402. "thmx": "application/vnd.ms-officetheme",
  403. "cat": "application/vnd.ms-pki.seccat",
  404. "stl": "application/vnd.ms-pki.stl",
  405. "ppt": "application/vnd.ms-powerpoint",
  406. "pps": "application/vnd.ms-powerpoint",
  407. "pot": "application/vnd.ms-powerpoint",
  408. "ppam": "application/vnd.ms-powerpoint.addin.macroenabled.12",
  409. "pptm": "application/vnd.ms-powerpoint.presentation.macroenabled.12",
  410. "sldm": "application/vnd.ms-powerpoint.slide.macroenabled.12",
  411. "ppsm": "application/vnd.ms-powerpoint.slideshow.macroenabled.12",
  412. "potm": "application/vnd.ms-powerpoint.template.macroenabled.12",
  413. "mpp": "application/vnd.ms-project",
  414. "mpt": "application/vnd.ms-project",
  415. "docm": "application/vnd.ms-word.document.macroenabled.12",
  416. "dotm": "application/vnd.ms-word.template.macroenabled.12",
  417. "wps": "application/vnd.ms-works",
  418. "wks": "application/vnd.ms-works",
  419. "wcm": "application/vnd.ms-works",
  420. "wdb": "application/vnd.ms-works",
  421. "wpl": "application/vnd.ms-wpl",
  422. "xps": "application/vnd.ms-xpsdocument",
  423. "mseq": "application/vnd.mseq",
  424. "mus": "application/vnd.musician",
  425. "msty": "application/vnd.muvee.style",
  426. "taglet": "application/vnd.mynfc",
  427. "nlu": "application/vnd.neurolanguage.nlu",
  428. "nim": "text/nim",
  429. "nimble": "text/nimble",
  430. "nimf": "text/nim",
  431. "nims": "text/nim",
  432. "ntf": "application/vnd.nitf",
  433. "nitf": "application/vnd.nitf",
  434. "nnd": "application/vnd.noblenet-directory",
  435. "nns": "application/vnd.noblenet-sealer",
  436. "nnw": "application/vnd.noblenet-web",
  437. "ngdat": "application/vnd.nokia.n-gage.data",
  438. "n-gage": "application/vnd.nokia.n-gage.symbian.install",
  439. "rpst": "application/vnd.nokia.radio-preset",
  440. "rpss": "application/vnd.nokia.radio-presets",
  441. "edm": "application/vnd.novadigm.edm",
  442. "edx": "application/vnd.novadigm.edx",
  443. "ext": "application/vnd.novadigm.ext",
  444. "odc": "application/vnd.oasis.opendocument.chart",
  445. "otc": "application/vnd.oasis.opendocument.chart-template",
  446. "odb": "application/vnd.oasis.opendocument.database",
  447. "odf": "application/vnd.oasis.opendocument.formula",
  448. "odft": "application/vnd.oasis.opendocument.formula-template",
  449. "odg": "application/vnd.oasis.opendocument.graphics",
  450. "otg": "application/vnd.oasis.opendocument.graphics-template",
  451. "odi": "application/vnd.oasis.opendocument.image",
  452. "oti": "application/vnd.oasis.opendocument.image-template",
  453. "odp": "application/vnd.oasis.opendocument.presentation",
  454. "otp": "application/vnd.oasis.opendocument.presentation-template",
  455. "ods": "application/vnd.oasis.opendocument.spreadsheet",
  456. "ots": "application/vnd.oasis.opendocument.spreadsheet-template",
  457. "odt": "application/vnd.oasis.opendocument.text",
  458. "odm": "application/vnd.oasis.opendocument.text-master",
  459. "ott": "application/vnd.oasis.opendocument.text-template",
  460. "oth": "application/vnd.oasis.opendocument.text-web",
  461. "xo": "application/vnd.olpc-sugar",
  462. "dd2": "application/vnd.oma.dd2+xml",
  463. "oxt": "application/vnd.openofficeorg.extension",
  464. "pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
  465. "sldx": "application/vnd.openxmlformats-officedocument.presentationml.slide",
  466. "ppsx": "application/vnd.openxmlformats-officedocument.presentationml.slideshow",
  467. "potx": "application/vnd.openxmlformats-officedocument.presentationml.template",
  468. "xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
  469. "xltx": "application/vnd.openxmlformats-officedocument.spreadsheetml.template",
  470. "docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  471. "dotx": "application/vnd.openxmlformats-officedocument.wordprocessingml.template",
  472. "mgp": "application/vnd.osgeo.mapguide.package",
  473. "dp": "application/vnd.osgi.dp",
  474. "esa": "application/vnd.osgi.subsystem",
  475. "pdb": "application/vnd.palm",
  476. "pqa": "application/vnd.palm",
  477. "oprc": "application/vnd.palm",
  478. "paw": "application/vnd.pawaafile",
  479. "str": "application/vnd.pg.format",
  480. "ei6": "application/vnd.pg.osasli",
  481. "efif": "application/vnd.picsel",
  482. "wg": "application/vnd.pmi.widget",
  483. "plf": "application/vnd.pocketlearn",
  484. "pbd": "application/vnd.powerbuilder6",
  485. "box": "application/vnd.previewsystems.box",
  486. "mgz": "application/vnd.proteus.magazine",
  487. "qps": "application/vnd.publishare-delta-tree",
  488. "ptid": "application/vnd.pvi.ptid1",
  489. "qxd": "application/vnd.quark.quarkxpress",
  490. "qxt": "application/vnd.quark.quarkxpress",
  491. "qwd": "application/vnd.quark.quarkxpress",
  492. "qwt": "application/vnd.quark.quarkxpress",
  493. "qxl": "application/vnd.quark.quarkxpress",
  494. "qxb": "application/vnd.quark.quarkxpress",
  495. "bed": "application/vnd.realvnc.bed",
  496. "mxl": "application/vnd.recordare.musicxml",
  497. "musicxml": "application/vnd.recordare.musicxml+xml",
  498. "cryptonote": "application/vnd.rig.cryptonote",
  499. "cod": "application/vnd.rim.cod",
  500. "rm": "application/vnd.rn-realmedia",
  501. "rmvb": "application/vnd.rn-realmedia-vbr",
  502. "link66": "application/vnd.route66.link66+xml",
  503. "st": "application/vnd.sailingtracker.track",
  504. "see": "application/vnd.seemail",
  505. "sema": "application/vnd.sema",
  506. "semd": "application/vnd.semd",
  507. "semf": "application/vnd.semf",
  508. "ifm": "application/vnd.shana.informed.formdata",
  509. "itp": "application/vnd.shana.informed.formtemplate",
  510. "iif": "application/vnd.shana.informed.interchange",
  511. "ipk": "application/vnd.shana.informed.package",
  512. "twd": "application/vnd.simtech-mindmapper",
  513. "twds": "application/vnd.simtech-mindmapper",
  514. "mmf": "application/vnd.smaf",
  515. "teacher": "application/vnd.smart.teacher",
  516. "sdkm": "application/vnd.solent.sdkm+xml",
  517. "sdkd": "application/vnd.solent.sdkm+xml",
  518. "dxp": "application/vnd.spotfire.dxp",
  519. "sfs": "application/vnd.spotfire.sfs",
  520. "sdc": "application/vnd.stardivision.calc",
  521. "sda": "application/vnd.stardivision.draw",
  522. "sdd": "application/vnd.stardivision.impress",
  523. "smf": "application/vnd.stardivision.math",
  524. "sdw": "application/vnd.stardivision.writer",
  525. "vor": "application/vnd.stardivision.writer",
  526. "sgl": "application/vnd.stardivision.writer-global",
  527. "smzip": "application/vnd.stepmania.package",
  528. "sm": "application/vnd.stepmania.stepchart",
  529. "sxc": "application/vnd.sun.xml.calc",
  530. "stc": "application/vnd.sun.xml.calc.template",
  531. "sxd": "application/vnd.sun.xml.draw",
  532. "std": "application/vnd.sun.xml.draw.template",
  533. "sxi": "application/vnd.sun.xml.impress",
  534. "sti": "application/vnd.sun.xml.impress.template",
  535. "sxm": "application/vnd.sun.xml.math",
  536. "sxw": "application/vnd.sun.xml.writer",
  537. "sxg": "application/vnd.sun.xml.writer.global",
  538. "stw": "application/vnd.sun.xml.writer.template",
  539. "sus": "application/vnd.sus-calendar",
  540. "susp": "application/vnd.sus-calendar",
  541. "svd": "application/vnd.svd",
  542. "sis": "application/vnd.symbian.install",
  543. "sisx": "application/vnd.symbian.install",
  544. "xsm": "application/vnd.syncml+xml",
  545. "bdm": "application/vnd.syncml.dm+wbxml",
  546. "xdm": "application/vnd.syncml.dm+xml",
  547. "tao": "application/vnd.tao.intent-module-archive",
  548. "pcap": "application/vnd.tcpdump.pcap",
  549. "cap": "application/vnd.tcpdump.pcap",
  550. "dmp": "application/vnd.tcpdump.pcap",
  551. "tmo": "application/vnd.tmobile-livetv",
  552. "tpt": "application/vnd.trid.tpt",
  553. "mxs": "application/vnd.triscape.mxs",
  554. "tra": "application/vnd.trueapp",
  555. "ufd": "application/vnd.ufdl",
  556. "ufdl": "application/vnd.ufdl",
  557. "utz": "application/vnd.uiq.theme",
  558. "umj": "application/vnd.umajin",
  559. "unityweb": "application/vnd.unity",
  560. "uoml": "application/vnd.uoml+xml",
  561. "vcx": "application/vnd.vcx",
  562. "vsd": "application/vnd.visio",
  563. "vst": "application/vnd.visio",
  564. "vss": "application/vnd.visio",
  565. "vsw": "application/vnd.visio",
  566. "vis": "application/vnd.visionary",
  567. "vsf": "application/vnd.vsf",
  568. "wbxml": "application/vnd.wap.wbxml",
  569. "wmlc": "application/vnd.wap.wmlc",
  570. "wmlsc": "application/vnd.wap.wmlscriptc",
  571. "wtb": "application/vnd.webturbo",
  572. "nbp": "application/vnd.wolfram.player",
  573. "wpd": "application/vnd.wordperfect",
  574. "wqd": "application/vnd.wqd",
  575. "stf": "application/vnd.wt.stf",
  576. "xar": "application/vnd.xara",
  577. "xfdl": "application/vnd.xfdl",
  578. "hvd": "application/vnd.yamaha.hv-dic",
  579. "hvs": "application/vnd.yamaha.hv-script",
  580. "hvp": "application/vnd.yamaha.hv-voice",
  581. "osf": "application/vnd.yamaha.openscoreformat",
  582. "osfpvg": "application/vnd.yamaha.openscoreformat.osfpvg+xml",
  583. "saf": "application/vnd.yamaha.smaf-audio",
  584. "spf": "application/vnd.yamaha.smaf-phrase",
  585. "cmp": "application/vnd.yellowriver-custom-menu",
  586. "zir": "application/vnd.zul",
  587. "zirz": "application/vnd.zul",
  588. "zaz": "application/vnd.zzazz.deck+xml",
  589. "vxml": "application/voicexml+xml",
  590. "wasm": "application/wasm",
  591. "wgt": "application/widget",
  592. "hlp": "application/winhlp",
  593. "wsdl": "application/wsdl+xml",
  594. "wspolicy": "application/wspolicy+xml",
  595. "7z": "application/x-7z-compressed",
  596. "abw": "application/x-abiword",
  597. "ace": "application/x-ace-compressed",
  598. "dmg": "application/x-apple-diskimage",
  599. "aab": "application/x-authorware-bin",
  600. "x32": "application/x-authorware-bin",
  601. "u32": "application/x-authorware-bin",
  602. "vox": "application/x-authorware-bin",
  603. "aam": "application/x-authorware-map",
  604. "aas": "application/x-authorware-seg",
  605. "bcpio": "application/x-bcpio",
  606. "torrent": "application/x-bittorrent",
  607. "blb": "application/x-blorb",
  608. "blorb": "application/x-blorb",
  609. "bz": "application/x-bzip",
  610. "bz2": "application/x-bzip2",
  611. "boz": "application/x-bzip2",
  612. "cbr": "application/x-cbr",
  613. "cba": "application/x-cbr",
  614. "cbt": "application/x-cbr",
  615. "cbz": "application/x-cbr",
  616. "cb7": "application/x-cbr",
  617. "vcd": "application/x-cdlink",
  618. "cfs": "application/x-cfs-compressed",
  619. "chat": "application/x-chat",
  620. "pgn": "application/x-chess-pgn",
  621. "nsc": "application/x-conference",
  622. "cpio": "application/x-cpio",
  623. "csh": "application/x-csh",
  624. "deb": "application/x-debian-package",
  625. "udeb": "application/x-debian-package",
  626. "dgc": "application/x-dgc-compressed",
  627. "dir": "application/x-director",
  628. "dcr": "application/x-director",
  629. "dxr": "application/x-director",
  630. "cst": "application/x-director",
  631. "cct": "application/x-director",
  632. "cxt": "application/x-director",
  633. "w3d": "application/x-director",
  634. "fgd": "application/x-director",
  635. "swa": "application/x-director",
  636. "wad": "application/x-doom",
  637. "ncx": "application/x-dtbncx+xml",
  638. "dtb": "application/x-dtbook+xml",
  639. "res": "application/x-dtbresource+xml",
  640. "dvi": "application/x-dvi",
  641. "evy": "application/x-envoy",
  642. "eva": "application/x-eva",
  643. "bdf": "application/x-font-bdf",
  644. "gsf": "application/x-font-ghostscript",
  645. "psf": "application/x-font-linux-psf",
  646. "pcf": "application/x-font-pcf",
  647. "snf": "application/x-font-snf",
  648. "pfa": "application/x-font-type1",
  649. "pfb": "application/x-font-type1",
  650. "pfm": "application/x-font-type1",
  651. "afm": "application/x-font-type1",
  652. "arc": "application/x-freearc",
  653. "spl": "application/x-futuresplash",
  654. "gca": "application/x-gca-compressed",
  655. "ulx": "application/x-glulx",
  656. "gnumeric": "application/x-gnumeric",
  657. "gramps": "application/x-gramps-xml",
  658. "gtar": "application/x-gtar",
  659. "hdf": "application/x-hdf",
  660. "install": "application/x-install-instructions",
  661. "iso": "application/x-iso9660-image",
  662. "jnlp": "application/x-java-jnlp-file",
  663. "latex": "application/x-latex",
  664. "lzh": "application/x-lzh-compressed",
  665. "lha": "application/x-lzh-compressed",
  666. "mie": "application/x-mie",
  667. "prc": "application/x-mobipocket-ebook",
  668. "mobi": "application/x-mobipocket-ebook",
  669. "application": "application/x-ms-application",
  670. "lnk": "application/x-ms-shortcut",
  671. "wmd": "application/x-ms-wmd",
  672. "wmz": "application/x-ms-wmz",
  673. "xbap": "application/x-ms-xbap",
  674. "mdb": "application/x-msaccess",
  675. "obd": "application/x-msbinder",
  676. "crd": "application/x-mscardfile",
  677. "clp": "application/x-msclip",
  678. "exe": "application/x-msdownload",
  679. "dll": "application/x-msdownload",
  680. "com": "application/x-msdownload",
  681. "bat": "application/x-msdownload",
  682. "msi": "application/x-msdownload",
  683. "mvb": "application/x-msmediaview",
  684. "m13": "application/x-msmediaview",
  685. "m14": "application/x-msmediaview",
  686. "wmf": "application/x-msmetafile",
  687. "wmz": "application/x-msmetafile",
  688. "emf": "application/x-msmetafile",
  689. "emz": "application/x-msmetafile",
  690. "mny": "application/x-msmoney",
  691. "pub": "application/x-mspublisher",
  692. "scd": "application/x-msschedule",
  693. "trm": "application/x-msterminal",
  694. "wri": "application/x-mswrite",
  695. "nc": "application/x-netcdf",
  696. "cdf": "application/x-netcdf",
  697. "nzb": "application/x-nzb",
  698. "p12": "application/x-pkcs12",
  699. "pfx": "application/x-pkcs12",
  700. "p7b": "application/x-pkcs7-certificates",
  701. "spc": "application/x-pkcs7-certificates",
  702. "p7r": "application/x-pkcs7-certreqresp",
  703. "rar": "application/x-rar-compressed",
  704. "ris": "application/x-research-info-systems",
  705. "sh": "application/x-sh",
  706. "shar": "application/x-shar",
  707. "swf": "application/x-shockwave-flash",
  708. "xap": "application/x-silverlight-app",
  709. "sql": "application/x-sql",
  710. "sit": "application/x-stuffit",
  711. "sitx": "application/x-stuffitx",
  712. "srt": "application/x-subrip",
  713. "sv4cpio": "application/x-sv4cpio",
  714. "sv4crc": "application/x-sv4crc",
  715. "t3": "application/x-t3vm-image",
  716. "gam": "application/x-tads",
  717. "tar": "application/x-tar",
  718. "tcl": "application/x-tcl",
  719. "tex": "application/x-tex",
  720. "tfm": "application/x-tex-tfm",
  721. "texinfo": "application/x-texinfo",
  722. "texi": "application/x-texinfo",
  723. "obj": "application/x-tgif",
  724. "ustar": "application/x-ustar",
  725. "src": "application/x-wais-source",
  726. "der": "application/x-x509-ca-cert",
  727. "crt": "application/x-x509-ca-cert",
  728. "fig": "application/x-xfig",
  729. "xlf": "application/x-xliff+xml",
  730. "xpi": "application/x-xpinstall",
  731. "xz": "application/x-xz",
  732. "z1": "application/x-zmachine",
  733. "z2": "application/x-zmachine",
  734. "z3": "application/x-zmachine",
  735. "z4": "application/x-zmachine",
  736. "z5": "application/x-zmachine",
  737. "z6": "application/x-zmachine",
  738. "z7": "application/x-zmachine",
  739. "z8": "application/x-zmachine",
  740. "xaml": "application/xaml+xml",
  741. "xdf": "application/xcap-diff+xml",
  742. "xenc": "application/xenc+xml",
  743. "xhtml": "application/xhtml+xml",
  744. "xht": "application/xhtml+xml",
  745. "xml": "application/xml",
  746. "xsl": "application/xml",
  747. "dtd": "application/xml-dtd",
  748. "xop": "application/xop+xml",
  749. "xpl": "application/xproc+xml",
  750. "xslt": "application/xslt+xml",
  751. "xspf": "application/xspf+xml",
  752. "mxml": "application/xv+xml",
  753. "xhvml": "application/xv+xml",
  754. "xvml": "application/xv+xml",
  755. "xvm": "application/xv+xml",
  756. "yang": "application/yang",
  757. "yin": "application/yin+xml",
  758. "zip": "application/zip",
  759. "adp": "audio/adpcm",
  760. "au": "audio/basic",
  761. "snd": "audio/basic",
  762. "mid": "audio/midi",
  763. "midi": "audio/midi",
  764. "kar": "audio/midi",
  765. "rmi": "audio/midi",
  766. "m4a": "audio/mp4",
  767. "mp4a": "audio/mp4",
  768. "mpga": "audio/mpeg",
  769. "mp2": "audio/mpeg",
  770. "mp2a": "audio/mpeg",
  771. "mp3": "audio/mpeg",
  772. "m2a": "audio/mpeg",
  773. "m3a": "audio/mpeg",
  774. "oga": "audio/ogg",
  775. "ogg": "audio/ogg",
  776. "spx": "audio/ogg",
  777. "opus": "audio/ogg",
  778. "s3m": "audio/s3m",
  779. "sil": "audio/silk",
  780. "uva": "audio/vnd.dece.audio",
  781. "uvva": "audio/vnd.dece.audio",
  782. "eol": "audio/vnd.digital-winds",
  783. "dra": "audio/vnd.dra",
  784. "dts": "audio/vnd.dts",
  785. "dtshd": "audio/vnd.dts.hd",
  786. "lvp": "audio/vnd.lucent.voice",
  787. "pya": "audio/vnd.ms-playready.media.pya",
  788. "ecelp4800": "audio/vnd.nuera.ecelp4800",
  789. "ecelp7470": "audio/vnd.nuera.ecelp7470",
  790. "ecelp9600": "audio/vnd.nuera.ecelp9600",
  791. "rip": "audio/vnd.rip",
  792. "weba": "audio/webm",
  793. "aac": "audio/x-aac",
  794. "aif": "audio/x-aiff",
  795. "aiff": "audio/x-aiff",
  796. "aifc": "audio/x-aiff",
  797. "caf": "audio/x-caf",
  798. "flac": "audio/x-flac",
  799. "mka": "audio/x-matroska",
  800. "m3u": "audio/x-mpegurl",
  801. "wax": "audio/x-ms-wax",
  802. "wma": "audio/x-ms-wma",
  803. "ram": "audio/x-pn-realaudio",
  804. "ra": "audio/x-pn-realaudio",
  805. "rmp": "audio/x-pn-realaudio-plugin",
  806. "wav": "audio/x-wav",
  807. "xm": "audio/xm",
  808. "cdx": "chemical/x-cdx",
  809. "cif": "chemical/x-cif",
  810. "cmdf": "chemical/x-cmdf",
  811. "cml": "chemical/x-cml",
  812. "csml": "chemical/x-csml",
  813. "xyz": "chemical/x-xyz",
  814. "ttc": "font/collection",
  815. "otf": "font/otf",
  816. "ttf": "font/ttf",
  817. "woff": "font/woff",
  818. "woff2": "font/woff2",
  819. "bmp": "image/bmp",
  820. "cgm": "image/cgm",
  821. "g3": "image/g3fax",
  822. "gif": "image/gif",
  823. "ief": "image/ief",
  824. "jpeg": "image/jpeg",
  825. "jpg": "image/jpeg",
  826. "jpe": "image/jpeg",
  827. "ktx": "image/ktx",
  828. "png": "image/png",
  829. "btif": "image/prs.btif",
  830. "sgi": "image/sgi",
  831. "svg": "image/svg+xml",
  832. "svgz": "image/svg+xml",
  833. "tiff": "image/tiff",
  834. "tif": "image/tiff",
  835. "psd": "image/vnd.adobe.photoshop",
  836. "uvi": "image/vnd.dece.graphic",
  837. "uvvi": "image/vnd.dece.graphic",
  838. "uvg": "image/vnd.dece.graphic",
  839. "uvvg": "image/vnd.dece.graphic",
  840. "djvu": "image/vnd.djvu",
  841. "djv": "image/vnd.djvu",
  842. "sub": "image/vnd.dvb.subtitle",
  843. "dwg": "image/vnd.dwg",
  844. "dxf": "image/vnd.dxf",
  845. "fbs": "image/vnd.fastbidsheet",
  846. "fpx": "image/vnd.fpx",
  847. "fst": "image/vnd.fst",
  848. "mmr": "image/vnd.fujixerox.edmics-mmr",
  849. "rlc": "image/vnd.fujixerox.edmics-rlc",
  850. "mdi": "image/vnd.ms-modi",
  851. "wdp": "image/vnd.ms-photo",
  852. "npx": "image/vnd.net-fpx",
  853. "wbmp": "image/vnd.wap.wbmp",
  854. "xif": "image/vnd.xiff",
  855. "webp": "image/webp",
  856. "3ds": "image/x-3ds",
  857. "ras": "image/x-cmu-raster",
  858. "cmx": "image/x-cmx",
  859. "fh": "image/x-freehand",
  860. "fhc": "image/x-freehand",
  861. "fh4": "image/x-freehand",
  862. "fh5": "image/x-freehand",
  863. "fh7": "image/x-freehand",
  864. "ico": "image/x-icon",
  865. "sid": "image/x-mrsid-image",
  866. "pcx": "image/x-pcx",
  867. "pic": "image/x-pict",
  868. "pct": "image/x-pict",
  869. "pnm": "image/x-portable-anymap",
  870. "pbm": "image/x-portable-bitmap",
  871. "pgm": "image/x-portable-graymap",
  872. "ppm": "image/x-portable-pixmap",
  873. "rgb": "image/x-rgb",
  874. "tga": "image/x-tga",
  875. "xbm": "image/x-xbitmap",
  876. "xpm": "image/x-xpixmap",
  877. "xwd": "image/x-xwindowdump",
  878. "eml": "message/rfc822",
  879. "mime": "message/rfc822",
  880. "igs": "model/iges",
  881. "iges": "model/iges",
  882. "msh": "model/mesh",
  883. "mesh": "model/mesh",
  884. "silo": "model/mesh",
  885. "dae": "model/vnd.collada+xml",
  886. "dwf": "model/vnd.dwf",
  887. "gdl": "model/vnd.gdl",
  888. "gtw": "model/vnd.gtw",
  889. "mts": "model/vnd.mts",
  890. "vtu": "model/vnd.vtu",
  891. "wrl": "model/vrml",
  892. "vrml": "model/vrml",
  893. "x3db": "model/x3d+binary",
  894. "x3dbz": "model/x3d+binary",
  895. "x3dv": "model/x3d+vrml",
  896. "x3dvz": "model/x3d+vrml",
  897. "x3d": "model/x3d+xml",
  898. "x3dz": "model/x3d+xml",
  899. "appcache": "text/cache-manifest",
  900. "ics": "text/calendar",
  901. "ifb": "text/calendar",
  902. "css": "text/css",
  903. "csv": "text/csv",
  904. "html": "text/html",
  905. "htm": "text/html",
  906. "js": "text/javascript",
  907. "mjs": "text/javascript",
  908. "n3": "text/n3",
  909. "txt": "text/plain",
  910. "text": "text/plain",
  911. "conf": "text/plain",
  912. "def": "text/plain",
  913. "list": "text/plain",
  914. "log": "text/plain",
  915. "in": "text/plain",
  916. "dsc": "text/prs.lines.tag",
  917. "rtx": "text/richtext",
  918. "sgml": "text/sgml",
  919. "sgm": "text/sgml",
  920. "tsv": "text/tab-separated-values",
  921. "t": "text/troff",
  922. "tr": "text/troff",
  923. "roff": "text/troff",
  924. "man": "text/troff",
  925. "me": "text/troff",
  926. "ms": "text/troff",
  927. "ttl": "text/turtle",
  928. "uri": "text/uri-list",
  929. "uris": "text/uri-list",
  930. "urls": "text/uri-list",
  931. "vcard": "text/vcard",
  932. "curl": "text/vnd.curl",
  933. "dcurl": "text/vnd.curl.dcurl",
  934. "mcurl": "text/vnd.curl.mcurl",
  935. "scurl": "text/vnd.curl.scurl",
  936. "sub": "text/vnd.dvb.subtitle",
  937. "fly": "text/vnd.fly",
  938. "flx": "text/vnd.fmi.flexstor",
  939. "gv": "text/vnd.graphviz",
  940. "3dml": "text/vnd.in3d.3dml",
  941. "spot": "text/vnd.in3d.spot",
  942. "jad": "text/vnd.sun.j2me.app-descriptor",
  943. "wml": "text/vnd.wap.wml",
  944. "wmls": "text/vnd.wap.wmlscript",
  945. "s": "text/x-asm",
  946. "asm": "text/x-asm",
  947. "c": "text/x-c",
  948. "cc": "text/x-c",
  949. "cxx": "text/x-c",
  950. "cpp": "text/x-c",
  951. "h": "text/x-c",
  952. "hh": "text/x-c",
  953. "dic": "text/x-c",
  954. "f": "text/x-fortran",
  955. "for": "text/x-fortran",
  956. "f77": "text/x-fortran",
  957. "f90": "text/x-fortran",
  958. "java": "text/x-java-source",
  959. "nfo": "text/x-nfo",
  960. "opml": "text/x-opml",
  961. "p": "text/x-pascal",
  962. "pas": "text/x-pascal",
  963. "etx": "text/x-setext",
  964. "sfv": "text/x-sfv",
  965. "uu": "text/x-uuencode",
  966. "vcs": "text/x-vcalendar",
  967. "vcf": "text/x-vcard",
  968. "3gp": "video/3gpp",
  969. "3g2": "video/3gpp2",
  970. "h261": "video/h261",
  971. "h263": "video/h263",
  972. "h264": "video/h264",
  973. "jpgv": "video/jpeg",
  974. "jpm": "video/jpm",
  975. "jpgm": "video/jpm",
  976. "mj2": "video/mj2",
  977. "mjp2": "video/mj2",
  978. "mp4": "video/mp4",
  979. "mp4v": "video/mp4",
  980. "mpg4": "video/mp4",
  981. "mpeg": "video/mpeg",
  982. "mpg": "video/mpeg",
  983. "mpe": "video/mpeg",
  984. "m1v": "video/mpeg",
  985. "m2v": "video/mpeg",
  986. "ogv": "video/ogg",
  987. "qt": "video/quicktime",
  988. "mov": "video/quicktime",
  989. "uvh": "video/vnd.dece.hd",
  990. "uvvh": "video/vnd.dece.hd",
  991. "uvm": "video/vnd.dece.mobile",
  992. "uvvm": "video/vnd.dece.mobile",
  993. "uvp": "video/vnd.dece.pd",
  994. "uvvp": "video/vnd.dece.pd",
  995. "uvs": "video/vnd.dece.sd",
  996. "uvvs": "video/vnd.dece.sd",
  997. "uvv": "video/vnd.dece.video",
  998. "uvvv": "video/vnd.dece.video",
  999. "dvb": "video/vnd.dvb.file",
  1000. "fvt": "video/vnd.fvt",
  1001. "mxu": "video/vnd.mpegurl",
  1002. "m4u": "video/vnd.mpegurl",
  1003. "pyv": "video/vnd.ms-playready.media.pyv",
  1004. "uvu": "video/vnd.uvvu.mp4",
  1005. "uvvu": "video/vnd.uvvu.mp4",
  1006. "viv": "video/vnd.vivo",
  1007. "webm": "video/webm",
  1008. "f4v": "video/x-f4v",
  1009. "fli": "video/x-fli",
  1010. "flv": "video/x-flv",
  1011. "m4v": "video/x-m4v",
  1012. "mkv": "video/x-matroska",
  1013. "mk3d": "video/x-matroska",
  1014. "mks": "video/x-matroska",
  1015. "mng": "video/x-mng",
  1016. "asf": "video/x-ms-asf",
  1017. "asx": "video/x-ms-asf",
  1018. "vob": "video/x-ms-vob",
  1019. "wm": "video/x-ms-wm",
  1020. "wmv": "video/x-ms-wmv",
  1021. "wmx": "video/x-ms-wmx",
  1022. "wvx": "video/x-ms-wvx",
  1023. "avi": "video/x-msvideo",
  1024. "movie": "video/x-sgi-movie",
  1025. "smv": "video/x-smv",
  1026. "ice": "x-conference/x-cooltalk",
  1027. }
  1028. func newMimetypes*(): MimeDB =
  1029. ## Creates a new Mimetypes database. The database will contain the most
  1030. ## common mimetypes.
  1031. {.cast(noSideEffect).}:
  1032. result = MimeDB(mimes: mimes.toOrderedTable())
  1033. func getMimetype*(mimedb: MimeDB, ext: string, default = "text/plain"): string =
  1034. ## Gets mimetype which corresponds to `ext`. Returns `default` if `ext`
  1035. ## could not be found. `ext` can start with an optional dot which is ignored.
  1036. ## `ext` is lowercased before querying `mimedb`.
  1037. if ext.startsWith("."):
  1038. result = mimedb.mimes.getOrDefault(ext.toLowerAscii.substr(1))
  1039. else:
  1040. result = mimedb.mimes.getOrDefault(ext.toLowerAscii())
  1041. if result == "":
  1042. return default
  1043. func getExt*(mimedb: MimeDB, mimetype: string, default = "txt"): string =
  1044. ## Gets extension which corresponds to `mimetype`. Returns `default` if
  1045. ## `mimetype` could not be found. Extensions are returned without the
  1046. ## leading dot. `mimetype` is lowercased before querying `mimedb`.
  1047. result = default
  1048. let mimeLowered = mimetype.toLowerAscii()
  1049. for e, m in mimedb.mimes:
  1050. if m == mimeLowered:
  1051. result = e
  1052. break
  1053. func register*(mimedb: var MimeDB, ext: string, mimetype: string) =
  1054. ## Adds `mimetype` to the `mimedb`.
  1055. ## `mimetype` and `ext` are lowercased before registering on `mimedb`.
  1056. assert ext.strip.len > 0, "ext argument can not be empty string"
  1057. assert mimetype.strip.len > 0, "mimetype argument can not be empty string"
  1058. {.noSideEffect.}:
  1059. mimedb.mimes[ext.toLowerAscii()] = mimetype.toLowerAscii()