Browse Source

Load MIME type mappings from embedded CSV resource instead of hardcoding (removes false positives from mutation testing)

Marcin Ziąbek 2 months ago
parent
commit
829f13ef21

+ 19 - 553
Source/QuestPDF/Qpdf/MimeHelper.cs

@@ -1,561 +1,27 @@
+using System;
 using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
 
 namespace QuestPDF.Qpdf;
 
 static class MimeHelper
 {
-    public static readonly IReadOnlyDictionary<string, string> FileExtensionToMimeConversionTable = new Dictionary<string, string>
+    public static readonly IReadOnlyDictionary<string, string> FileExtensionToMimeConversionTable = LoadMimeMapping();
+
+    private static IReadOnlyDictionary<string, string> LoadMimeMapping()
     {
-        ["3dmf"] = "x-world/x-3dmf",
-        ["3dm"] = "x-world/x-3dmf",
-        ["3g2"] = "video/3gpp2",
-        ["3gp"] = "video/3gpp",
-        ["7z"] = "application/x-7z-compressed",
-        ["aab"] = "application/x-authorware-bin",
-        ["aac"] = "audio/aac",
-        ["aam"] = "application/x-authorware-map",
-        ["aas"] = "application/x-authorware-seg",
-        ["abc"] = "text/vnd.abc",
-        ["acgi"] = "text/html",
-        ["acx"] = "application/internet-property-stream",
-        ["afl"] = "video/animaflex",
-        ["ai"] = "application/postscript",
-        ["aif"] = "audio/aiff",
-        ["aifc"] = "audio/aiff",
-        ["aiff"] = "audio/aiff",
-        ["aim"] = "application/x-aim",
-        ["aip"] = "text/x-audiosoft-intra",
-        ["ani"] = "application/x-navi-animation",
-        ["aos"] = "application/x-nokia-9000-communicator-add-on-software",
-        ["appcache"] = "text/cache-manifest",
-        ["application"] = "application/x-ms-application",
-        ["aps"] = "application/mime",
-        ["art"] = "image/x-jg",
-        ["asf"] = "video/x-ms-asf",
-        ["asm"] = "text/x-asm",
-        ["asp"] = "text/asp",
-        ["asr"] = "video/x-ms-asf",
-        ["asx"] = "application/x-mplayer2",
-        ["atom"] = "application/atom+xml",
-        ["au"] = "audio/x-au",
-        ["avi"] = "video/avi",
-        ["avs"] = "video/avs-video",
-        ["axs"] = "application/olescript",
-        ["bas"] = "text/plain",
-        ["bcpio"] = "application/x-bcpio",
-        ["bin"] = "application/octet-stream",
-        ["bm"] = "image/bmp",
-        ["bmp"] = "image/bmp",
-        ["boo"] = "application/book",
-        ["book"] = "application/book",
-        ["boz"] = "application/x-bzip2",
-        ["bsh"] = "application/x-bsh",
-        ["bz2"] = "application/x-bzip2",
-        ["bz"] = "application/x-bzip",
-        ["cat"] = "application/vnd.ms-pki.seccat",
-        ["ccad"] = "application/clariscad",
-        ["cco"] = "application/x-cocoa",
-        ["cc"] = "text/plain",
-        ["cdf"] = "application/cdf",
-        ["cer"] = "application/pkix-cert",
-        ["cha"] = "application/x-chat",
-        ["chat"] = "application/x-chat",
-        ["class"] = "application/x-java-applet",
-        ["clp"] = "application/x-msclip",
-        ["cmx"] = "image/x-cmx",
-        ["cod"] = "image/cis-cod",
-        ["coffee"] = "text/x-coffeescript",
-        ["conf"] = "text/plain",
-        ["cpio"] = "application/x-cpio",
-        ["cpp"] = "text/plain",
-        ["cpt"] = "application/x-cpt",
-        ["crd"] = "application/x-mscardfile",
-        ["crl"] = "application/pkix-crl",
-        ["crt"] = "application/pkix-cert",
-        ["csh"] = "application/x-csh",
-        ["css"] = "text/css",
-        ["c"] = "text/plain",
-        ["c++"] = "text/plain",
-        ["cxx"] = "text/plain",
-        ["dart"] = "application/dart",
-        ["dcr"] = "application/x-director",
-        ["deb"] = "application/x-deb",
-        ["deepv"] = "application/x-deepv",
-        ["def"] = "text/plain",
-        ["deploy"] = "application/octet-stream",
-        ["der"] = "application/x-x509-ca-cert",
-        ["dib"] = "image/bmp",
-        ["dif"] = "video/x-dv",
-        ["dir"] = "application/x-director",
-        ["disco"] = "text/xml",
-        ["dll"] = "application/x-msdownload",
-        ["dl"] = "video/dl",
-        ["doc"] = "application/msword",
-        ["docm"] = "application/vnd.ms-word.document.macroEnabled.12",
-        ["docx"] = "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
-        ["dot"] = "application/msword",
-        ["dotm"] = "application/vnd.ms-word.template.macroEnabled.12",
-        ["dotx"] = "application/vnd.openxmlformats-officedocument.wordprocessingml.template",
-        ["dp"] = "application/commonground",
-        ["drw"] = "application/drafting",
-        ["dtd"] = "application/xml-dtd",
-        ["dvi"] = "application/x-dvi",
-        ["dv"] = "video/x-dv",
-        ["dwf"] = "drawing/x-dwf (old)",
-        ["dwg"] = "application/acad",
-        ["dxf"] = "application/dxf",
-        ["dxr"] = "application/x-director",
-        ["elc"] = "application/x-elc",
-        ["el"] = "text/x-script.elisp",
-        ["eml"] = "message/rfc822",
-        ["eot"] = "application/vnd.bw-fontobject",
-        ["eps"] = "application/postscript",
-        ["es"] = "application/x-esrehber",
-        ["etx"] = "text/x-setext",
-        ["evy"] = "application/envoy",
-        ["exe"] = "application/octet-stream",
-        ["f77"] = "text/plain",
-        ["f90"] = "text/plain",
-        ["fdf"] = "application/vnd.fdf",
-        ["fif"] = "image/fif",
-        ["flac"] = "audio/x-flac",
-        ["fli"] = "video/fli",
-        ["flo"] = "image/florian",
-        ["flr"] = "x-world/x-vrml",
-        ["flx"] = "text/vnd.fmi.flexstor",
-        ["fmf"] = "video/x-atomic3d-feature",
-        ["for"] = "text/plain",
-        ["fpx"] = "image/vnd.fpx",
-        ["frl"] = "application/freeloader",
-        ["f"] = "text/plain",
-        ["funk"] = "audio/make",
-        ["g3"] = "image/g3fax",
-        ["gif"] = "image/gif",
-        ["gl"] = "video/gl",
-        ["gsd"] = "audio/x-gsm",
-        ["gsm"] = "audio/x-gsm",
-        ["gsp"] = "application/x-gsp",
-        ["gss"] = "application/x-gss",
-        ["gtar"] = "application/x-gtar",
-        ["g"] = "text/plain",
-        ["gz"] = "application/x-gzip",
-        ["gzip"] = "application/x-gzip",
-        ["hdf"] = "application/x-hdf",
-        ["help"] = "application/x-helpfile",
-        ["hgl"] = "application/vnd.hp-HPGL",
-        ["hh"] = "text/plain",
-        ["hlb"] = "text/x-script",
-        ["hlp"] = "application/x-helpfile",
-        ["hpg"] = "application/vnd.hp-HPGL",
-        ["hpgl"] = "application/vnd.hp-HPGL",
-        ["hqx"] = "application/binhex",
-        ["hta"] = "application/hta",
-        ["htc"] = "text/x-component",
-        ["h"] = "text/plain",
-        ["htmls"] = "text/html",
-        ["html"] = "text/html",
-        ["htm"] = "text/html",
-        ["htt"] = "text/webviewhtml",
-        ["htx"] = "text/html",
-        ["ice"] = "x-conference/x-cooltalk",
-        ["ico"] = "image/x-icon",
-        ["ics"] = "text/calendar",
-        ["idc"] = "text/plain",
-        ["ief"] = "image/ief",
-        ["iefs"] = "image/ief",
-        ["iges"] = "application/iges",
-        ["igs"] = "application/iges",
-        ["iii"] = "application/x-iphone",
-        ["ima"] = "application/x-ima",
-        ["imap"] = "application/x-httpd-imap",
-        ["inf"] = "application/inf",
-        ["ins"] = "application/x-internett-signup",
-        ["ip"] = "application/x-ip2",
-        ["isp"] = "application/x-internet-signup",
-        ["isu"] = "video/x-isvideo",
-        ["it"] = "audio/it",
-        ["iv"] = "application/x-inventor",
-        ["ivf"] = "video/x-ivf",
-        ["ivr"] = "i-world/i-vrml",
-        ["ivy"] = "application/x-livescreen",
-        ["jam"] = "audio/x-jam",
-        ["jar"] = "application/java-archive",
-        ["java"] = "text/plain",
-        ["jav"] = "text/plain",
-        ["jcm"] = "application/x-java-commerce",
-        ["jfif"] = "image/jpeg",
-        ["jfif--tbnl"] = "image/jpeg",
-        ["jpeg"] = "image/jpeg",
-        ["jpe"] = "image/jpeg",
-        ["jpg"] = "image/jpeg",
-        ["jps"] = "image/x-jps",
-        ["js"] = "application/javascript",
-        ["json"] = "application/json",
-        ["jut"] = "image/jutvision",
-        ["kar"] = "audio/midi",
-        ["ksh"] = "text/x-script.ksh",
-        ["la"] = "audio/nspaudio",
-        ["lam"] = "audio/x-liveaudio",
-        ["latex"] = "application/x-latex",
-        ["list"] = "text/plain",
-        ["lma"] = "audio/nspaudio",
-        ["log"] = "text/plain",
-        ["lsp"] = "application/x-lisp",
-        ["lst"] = "text/plain",
-        ["lsx"] = "text/x-la-asf",
-        ["ltx"] = "application/x-latex",
-        ["m13"] = "application/x-msmediaview",
-        ["m14"] = "application/x-msmediaview",
-        ["m1v"] = "video/mpeg",
-        ["m2a"] = "audio/mpeg",
-        ["m2v"] = "video/mpeg",
-        ["m3u"] = "audio/x-mpequrl",
-        ["m4a"] = "audio/mp4",
-        ["m4v"] = "video/mp4",
-        ["man"] = "application/x-troff-man",
-        ["manifest"] = "application/x-ms-manifest",
-        ["map"] = "application/x-navimap",
-        ["mar"] = "text/plain",
-        ["mbd"] = "application/mbedlet",
-        ["mc$"] = "application/x-magic-cap-package-1.0",
-        ["mcd"] = "application/mcad",
-        ["mcf"] = "image/vasa",
-        ["mcp"] = "application/netmc",
-        ["mdb"] = "application/x-msaccess",
-        ["mesh"] = "model/mesh",
-        ["me"] = "application/x-troff-me",
-        ["mid"] = "audio/midi",
-        ["midi"] = "audio/midi",
-        ["mif"] = "application/x-mif",
-        ["mjf"] = "audio/x-vnd.AudioExplosion.MjuiceMediaFile",
-        ["mjpg"] = "video/x-motion-jpeg",
-        ["mm"] = "application/base64",
-        ["mme"] = "application/base64",
-        ["mny"] = "application/x-msmoney",
-        ["mod"] = "audio/mod",
-        ["mov"] = "video/quicktime",
-        ["movie"] = "video/x-sgi-movie",
-        ["mp2"] = "video/mpeg",
-        ["mp3"] = "audio/mpeg",
-        ["mp4"] = "video/mp4",
-        ["mp4a"] = "audio/mp4",
-        ["mp4v"] = "video/mp4",
-        ["mpa"] = "audio/mpeg",
-        ["mpc"] = "application/x-project",
-        ["mpeg"] = "video/mpeg",
-        ["mpe"] = "video/mpeg",
-        ["mpga"] = "audio/mpeg",
-        ["mpg"] = "video/mpeg",
-        ["mpp"] = "application/vnd.ms-project",
-        ["mpt"] = "application/x-project",
-        ["mpv2"] = "video/mpeg",
-        ["mpv"] = "application/x-project",
-        ["mpx"] = "application/x-project",
-        ["mrc"] = "application/marc",
-        ["ms"] = "application/x-troff-ms",
-        ["msh"] = "model/mesh",
-        ["m"] = "text/plain",
-        ["mvb"] = "application/x-msmediaview",
-        ["mv"] = "video/x-sgi-movie",
-        ["my"] = "audio/make",
-        ["mzz"] = "application/x-vnd.AudioExplosion.mzz",
-        ["nap"] = "image/naplps",
-        ["naplps"] = "image/naplps",
-        ["nc"] = "application/x-netcdf",
-        ["ncm"] = "application/vnd.nokia.configuration-message",
-        ["niff"] = "image/x-niff",
-        ["nif"] = "image/x-niff",
-        ["nix"] = "application/x-mix-transfer",
-        ["nsc"] = "application/x-conference",
-        ["nvd"] = "application/x-navidoc",
-        ["nws"] = "message/rfc822",
-        ["oda"] = "application/oda",
-        ["ods"] = "application/oleobject",
-        ["oga"] = "audio/ogg",
-        ["ogg"] = "audio/ogg",
-        ["ogv"] = "video/ogg",
-        ["ogx"] = "application/ogg",
-        ["omc"] = "application/x-omc",
-        ["omcd"] = "application/x-omcdatamaker",
-        ["omcr"] = "application/x-omcregerator",
-        ["opus"] = "audio/ogg",
-        ["oxps"] = "application/oxps",
-        ["p10"] = "application/pkcs10",
-        ["p12"] = "application/pkcs-12",
-        ["p7a"] = "application/x-pkcs7-signature",
-        ["p7b"] = "application/x-pkcs7-certificates",
-        ["p7c"] = "application/pkcs7-mime",
-        ["p7m"] = "application/pkcs7-mime",
-        ["p7r"] = "application/x-pkcs7-certreqresp",
-        ["p7s"] = "application/pkcs7-signature",
-        ["part"] = "application/pro_eng",
-        ["pas"] = "text/pascal",
-        ["pbm"] = "image/x-portable-bitmap",
-        ["pcl"] = "application/x-pcl",
-        ["pct"] = "image/x-pict",
-        ["pcx"] = "image/x-pcx",
-        ["pdb"] = "chemical/x-pdb",
-        ["pdf"] = "application/pdf",
-        ["pfunk"] = "audio/make",
-        ["pfx"] = "application/x-pkcs12",
-        ["pgm"] = "image/x-portable-graymap",
-        ["pic"] = "image/pict",
-        ["pict"] = "image/pict",
-        ["pkg"] = "application/x-newton-compatible-pkg",
-        ["pko"] = "application/vnd.ms-pki.pko",
-        ["pl"] = "text/plain",
-        ["plx"] = "application/x-PiXCLscript",
-        ["pm4"] = "application/x-pagemaker",
-        ["pm5"] = "application/x-pagemaker",
-        ["pma"] = "application/x-perfmon",
-        ["pmc"] = "application/x-perfmon",
-        ["pm"] = "image/x-xpixmap",
-        ["pml"] = "application/x-perfmon",
-        ["pmr"] = "application/x-perfmon",
-        ["pmw"] = "application/x-perfmon",
-        ["png"] = "image/png",
-        ["pnm"] = "application/x-portable-anymap",
-        ["pot"] = "application/vnd.ms-powerpoint",
-        ["potm"] = "application/vnd.ms-powerpoint.template.macroEnabled.12",
-        ["potx"] = "application/vnd.openxmlformats-officedocument.presentationml.template",
-        ["pov"] = "model/x-pov",
-        ["ppa"] = "application/vnd.ms-powerpoint",
-        ["ppam"] = "application/vnd.ms-powerpoint.addin.macroEnabled.12",
-        ["ppm"] = "image/x-portable-pixmap",
-        ["pps"] = "application/vnd.ms-powerpoint",
-        ["ppsm"] = "application/vnd.ms-powerpoint.slideshow.macroEnabled.12",
-        ["ppsx"] = "application/vnd.openxmlformats-officedocument.presentationml.slideshow",
-        ["ppt"] = "application/vnd.ms-powerpoint",
-        ["pptm"] = "application/vnd.ms-powerpoint.presentation.macroEnabled.12",
-        ["pptx"] = "application/vnd.openxmlformats-officedocument.presentationml.presentation",
-        ["ppz"] = "application/mspowerpoint",
-        ["pre"] = "application/x-freelance",
-        ["prf"] = "application/pics-rules",
-        ["prt"] = "application/pro_eng",
-        ["ps"] = "application/postscript",
-        ["p"] = "text/x-pascal",
-        ["pub"] = "application/x-mspublisher",
-        ["pvu"] = "paleovu/x-pv",
-        ["pwz"] = "application/vnd.ms-powerpoint",
-        ["pyc"] = "applicaiton/x-bytecode.python",
-        ["py"] = "text/x-script.phyton",
-        ["qcp"] = "audio/vnd.qcelp",
-        ["qd3d"] = "x-world/x-3dmf",
-        ["qd3"] = "x-world/x-3dmf",
-        ["qif"] = "image/x-quicktime",
-        ["qtc"] = "video/x-qtc",
-        ["qtif"] = "image/x-quicktime",
-        ["qti"] = "image/x-quicktime",
-        ["qt"] = "video/quicktime",
-        ["ra"] = "audio/x-pn-realaudio",
-        ["ram"] = "audio/x-pn-realaudio",
-        ["ras"] = "application/x-cmu-raster",
-        ["rast"] = "image/cmu-raster",
-        ["rexx"] = "text/x-script.rexx",
-        ["rf"] = "image/vnd.rn-realflash",
-        ["rgb"] = "image/x-rgb",
-        ["rm"] = "application/vnd.rn-realmedia",
-        ["rmi"] = "audio/mid",
-        ["rmm"] = "audio/x-pn-realaudio",
-        ["rmp"] = "audio/x-pn-realaudio",
-        ["rng"] = "application/ringing-tones",
-        ["rnx"] = "application/vnd.rn-realplayer",
-        ["roff"] = "application/x-troff",
-        ["rp"] = "image/vnd.rn-realpix",
-        ["rpm"] = "audio/x-pn-realaudio-plugin",
-        ["rss"] = "application/rss+xml",
-        ["rtf"] = "text/richtext",
-        ["rt"] = "text/richtext",
-        ["rtx"] = "text/richtext",
-        ["rv"] = "video/vnd.rn-realvideo",
-        ["s3m"] = "audio/s3m",
-        ["sbk"] = "application/x-tbook",
-        ["scd"] = "application/x-msschedule",
-        ["scm"] = "application/x-lotusscreencam",
-        ["sct"] = "text/scriptlet",
-        ["sdml"] = "text/plain",
-        ["sdp"] = "application/sdp",
-        ["sdr"] = "application/sounder",
-        ["sea"] = "application/sea",
-        ["set"] = "application/set",
-        ["setpay"] = "application/set-payment-initiation",
-        ["setreg"] = "application/set-registration-initiation",
-        ["sgml"] = "text/sgml",
-        ["sgm"] = "text/sgml",
-        ["shar"] = "application/x-bsh",
-        ["sh"] = "text/x-script.sh",
-        ["shtml"] = "text/html",
-        ["sid"] = "audio/x-psid",
-        ["silo"] = "model/mesh",
-        ["sit"] = "application/x-sit",
-        ["skd"] = "application/x-koan",
-        ["skm"] = "application/x-koan",
-        ["skp"] = "application/x-koan",
-        ["skt"] = "application/x-koan",
-        ["sl"] = "application/x-seelogo",
-        ["smi"] = "application/smil",
-        ["smil"] = "application/smil",
-        ["snd"] = "audio/basic",
-        ["sol"] = "application/solids",
-        ["spc"] = "application/x-pkcs7-certificates",
-        ["spl"] = "application/futuresplash",
-        ["spr"] = "application/x-sprite",
-        ["sprite"] = "application/x-sprite",
-        ["spx"] = "audio/ogg",
-        ["src"] = "application/x-wais-source",
-        ["ssi"] = "text/x-server-parsed-html",
-        ["ssm"] = "application/streamingmedia",
-        ["sst"] = "application/vnd.ms-pki.certstore",
-        ["step"] = "application/step",
-        ["s"] = "text/x-asm",
-        ["stl"] = "application/sla",
-        ["stm"] = "text/html",
-        ["stp"] = "application/step",
-        ["sv4cpio"] = "application/x-sv4cpio",
-        ["sv4crc"] = "application/x-sv4crc",
-        ["svf"] = "image/x-dwg",
-        ["svg"] = "image/svg+xml",
-        ["svr"] = "application/x-world",
-        ["swf"] = "application/x-shockwave-flash",
-        ["talk"] = "text/x-speech",
-        ["t"] = "application/x-troff",
-        ["tar"] = "application/x-tar",
-        ["tbk"] = "application/toolbook",
-        ["tcl"] = "text/x-script.tcl",
-        ["tcsh"] = "text/x-script.tcsh",
-        ["tex"] = "application/x-tex",
-        ["texi"] = "application/x-texinfo",
-        ["texinfo"] = "application/x-texinfo",
-        ["text"] = "text/plain",
-        ["tgz"] = "application/x-compressed",
-        ["tiff"] = "image/tiff",
-        ["tif"] = "image/tiff",
-        ["tr"] = "application/x-troff",
-        ["trm"] = "application/x-msterminal",
-        ["ts"] = "text/x-typescript",
-        ["tsi"] = "audio/tsp-audio",
-        ["tsp"] = "audio/tsplayer",
-        ["tsv"] = "text/tab-separated-values",
-        ["ttf"] = "application/x-font-ttf",
-        ["turbot"] = "image/florian",
-        ["txt"] = "text/plain",
-        ["uil"] = "text/x-uil",
-        ["uls"] = "text/iuls",
-        ["unis"] = "text/uri-list",
-        ["uni"] = "text/uri-list",
-        ["unv"] = "application/i-deas",
-        ["uris"] = "text/uri-list",
-        ["uri"] = "text/uri-list",
-        ["ustar"] = "multipart/x-ustar",
-        ["uue"] = "text/x-uuencode",
-        ["uu"] = "text/x-uuencode",
-        ["vcd"] = "application/x-cdlink",
-        ["vcf"] = "text/vcard",
-        ["vcard"] = "text/vcard",
-        ["vcs"] = "text/x-vCalendar",
-        ["vda"] = "application/vda",
-        ["vdo"] = "video/vdo",
-        ["vew"] = "application/groupwise",
-        ["vivo"] = "video/vivo",
-        ["viv"] = "video/vivo",
-        ["vmd"] = "application/vocaltec-media-desc",
-        ["vmf"] = "application/vocaltec-media-file",
-        ["voc"] = "audio/voc",
-        ["vos"] = "video/vosaic",
-        ["vox"] = "audio/voxware",
-        ["vqe"] = "audio/x-twinvq-plugin",
-        ["vqf"] = "audio/x-twinvq",
-        ["vql"] = "audio/x-twinvq-plugin",
-        ["vrml"] = "application/x-vrml",
-        ["vrt"] = "x-world/x-vrt",
-        ["vsd"] = "application/x-visio",
-        ["vst"] = "application/x-visio",
-        ["vsw"] = "application/x-visio",
-        ["w60"] = "application/wordperfect6.0",
-        ["w61"] = "application/wordperfect6.1",
-        ["w6w"] = "application/msword",
-        ["wav"] = "audio/wav",
-        ["wb1"] = "application/x-qpro",
-        ["wbmp"] = "image/vnd.wap.wbmp",
-        ["wcm"] = "application/vnd.ms-works",
-        ["wdb"] = "application/vnd.ms-works",
-        ["web"] = "application/vnd.xara",
-        ["webm"] = "video/webm",
-        ["wiz"] = "application/msword",
-        ["wk1"] = "application/x-123",
-        ["wks"] = "application/vnd.ms-works",
-        ["wmf"] = "windows/metafile",
-        ["wmlc"] = "application/vnd.wap.wmlc",
-        ["wmlsc"] = "application/vnd.wap.wmlscriptc",
-        ["wmls"] = "text/vnd.wap.wmlscript",
-        ["wml"] = "text/vnd.wap.wml",
-        ["wmp"] = "video/x-ms-wmp",
-        ["wmv"] = "video/x-ms-wmv",
-        ["wmx"] = "video/x-ms-wmx",
-        ["woff"] = "application/x-woff",
-        ["word"] = "application/msword",
-        ["wp5"] = "application/wordperfect",
-        ["wp6"] = "application/wordperfect",
-        ["wp"] = "application/wordperfect",
-        ["wpd"] = "application/wordperfect",
-        ["wps"] = "application/vnd.ms-works",
-        ["wq1"] = "application/x-lotus",
-        ["wri"] = "application/mswrite",
-        ["wrl"] = "application/x-world",
-        ["wrz"] = "model/vrml",
-        ["wsc"] = "text/scriplet",
-        ["wsdl"] = "text/xml",
-        ["wsrc"] = "application/x-wais-source",
-        ["wtk"] = "application/x-wintalk",
-        ["wvx"] = "video/x-ms-wvx",
-        ["x3d"] = "model/x3d+xml",
-        ["x3db"] = "model/x3d+fastinfoset",
-        ["x3dv"] = "model/x3d-vrml",
-        ["xaf"] = "x-world/x-vrml",
-        ["xaml"] = "application/xaml+xml",
-        ["xap"] = "application/x-silverlight-app",
-        ["xbap"] = "application/x-ms-xbap",
-        ["xbm"] = "image/x-xbitmap",
-        ["xdr"] = "video/x-amt-demorun",
-        ["xgz"] = "xgl/drawing",
-        ["xht"] = "application/xhtml+xml",
-        ["xhtml"] = "application/xhtml+xml",
-        ["xif"] = "image/vnd.xiff",
-        ["xla"] = "application/vnd.ms-excel",
-        ["xlam"] = "application/vnd.ms-excel.addin.macroEnabled.12",
-        ["xl"] = "application/excel",
-        ["xlb"] = "application/excel",
-        ["xlc"] = "application/excel",
-        ["xld"] = "application/excel",
-        ["xlk"] = "application/excel",
-        ["xll"] = "application/excel",
-        ["xlm"] = "application/excel",
-        ["xls"] = "application/vnd.ms-excel",
-        ["xlsb"] = "application/vnd.ms-excel.sheet.binary.macroEnabled.12",
-        ["xlsm"] = "application/vnd.ms-excel.sheet.macroEnabled.12",
-        ["xlsx"] = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
-        ["xlt"] = "application/vnd.ms-excel",
-        ["xltm"] = "application/vnd.ms-excel.template.macroEnabled.12",
-        ["xltx"] = "application/vnd.openxmlformats-officedocument.spreadsheetml.template",
-        ["xlv"] = "application/excel",
-        ["xlw"] = "application/excel",
-        ["xm"] = "audio/xm",
-        ["xml"] = "text/xml",
-        ["xmz"] = "xgl/movie",
-        ["xof"] = "x-world/x-vrml",
-        ["xpi"] = "application/x-xpinstall",
-        ["xpix"] = "application/x-vnd.ls-xpix",
-        ["xpm"] = "image/xpm",
-        ["xps"] = "application/vnd.ms-xpsdocument",
-        ["x-png"] = "image/png",
-        ["xsd"] = "text/xml",
-        ["xsl"] = "text/xml",
-        ["xslt"] = "text/xml",
-        ["xsr"] = "video/x-amt-showrun",
-        ["xwd"] = "image/x-xwd",
-        ["xyz"] = "chemical/x-pdb",
-        ["z"] = "application/x-compressed",
-        ["zip"] = "application/zip",
-        ["zsh"] = "text/x-script.zsh"
-    };
+        using var stream = Assembly
+            .GetExecutingAssembly()
+            .GetManifestResourceStream("QuestPDF.Resources.MimeTypes.csv");
+        
+        using var streamReader = new StreamReader(stream);
+        var text = streamReader.ReadToEnd();
+
+        return text
+            .Split('\n')
+            .Select(x => x.Split(','))
+            .ToDictionary(x => x.First(), x => x.Last());
+    }
 }

+ 3 - 0
Source/QuestPDF/QuestPDF.csproj

@@ -74,5 +74,8 @@
         </None>
         
         <None Include="Resources\Description.md" Pack="true" PackagePath="README.md" />
+
+        <EmbeddedResource Include="Resources/MimeTypes.csv" />
+        <EmbeddedResource Include="Resources/LatinWords.txt" />
     </ItemGroup>
 </Project>

+ 382 - 0
Source/QuestPDF/Resources/MimeTypes.csv

@@ -0,0 +1,382 @@
+323,text/h323
+3g2,video/3gpp2
+3gp2,video/3gpp2
+3gp,video/3gpp
+3gpp,video/3gpp
+aac,audio/aac
+aaf,application/octet-stream
+aca,application/octet-stream
+accdb,application/msaccess
+accde,application/msaccess
+accdt,application/msaccess
+acx,application/internet-property-stream
+adt,audio/vnd.dlna.adts
+adts,audio/vnd.dlna.adts
+afm,application/octet-stream
+ai,application/postscript
+aif,audio/x-aiff
+aifc,audio/aiff
+aiff,audio/aiff
+appcache,text/cache-manifest
+application,application/x-ms-application
+art,image/x-jg
+asd,application/octet-stream
+asf,video/x-ms-asf
+asi,application/octet-stream
+asm,text/plain
+asr,video/x-ms-asf
+asx,video/x-ms-asf
+atom,application/atom+xml
+au,audio/basic
+avi,video/x-msvideo
+avif,image/avif
+axs,application/olescript
+bas,text/plain
+bcpio,application/x-bcpio
+bin,application/octet-stream
+bmp,image/bmp
+c,text/plain
+cab,application/vnd.ms-cab-compressed
+calx,application/vnd.ms-office.calx
+cat,application/vnd.ms-pki.seccat
+cdf,application/x-cdf
+chm,application/octet-stream
+class,application/x-java-applet
+clp,application/x-msclip
+cmx,image/x-cmx
+cnf,text/plain
+cod,image/cis-cod
+cpio,application/x-cpio
+cpp,text/plain
+crd,application/x-mscardfile
+crl,application/pkix-crl
+crt,application/x-x509-ca-cert
+csh,application/x-csh
+css,text/css
+csv,text/csv
+cur,application/octet-stream
+dcr,application/x-director
+deploy,application/octet-stream
+der,application/x-x509-ca-cert
+dib,image/bmp
+dir,application/x-director
+disco,text/xml
+dlm,text/dlm
+doc,application/msword
+docm,application/vnd.ms-word.document.macroEnabled.12
+docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document
+dot,application/msword
+dotm,application/vnd.ms-word.template.macroEnabled.12
+dotx,application/vnd.openxmlformats-officedocument.wordprocessingml.template
+dsp,application/octet-stream
+dtd,text/xml
+dvi,application/x-dvi
+dvr-ms,video/x-ms-dvr
+dwf,drawing/x-dwf
+dwp,application/octet-stream
+dxr,application/x-director
+eml,message/rfc822
+emz,application/octet-stream
+eot,application/vnd.ms-fontobject
+eps,application/postscript
+etx,text/x-setext
+evy,application/envoy
+exe,application/vnd.microsoft.portable-executable
+fdf,application/vnd.fdf
+fif,application/fractals
+fla,application/octet-stream
+flr,x-world/x-vrml
+flv,video/x-flv
+gif,image/gif
+gtar,application/x-gtar
+gz,application/x-gzip
+h,text/plain
+hdf,application/x-hdf
+hdml,text/x-hdml
+hhc,application/x-oleobject
+hhk,application/octet-stream
+hhp,application/octet-stream
+hlp,application/winhlp
+hqx,application/mac-binhex40
+hta,application/hta
+htc,text/x-component
+htm,text/html
+html,text/html
+htt,text/webviewhtml
+hxt,text/html
+ical,text/calendar
+icalendar,text/calendar
+ico,image/x-icon
+ics,text/calendar
+ief,image/ief
+ifb,text/calendar
+iii,application/x-iphone
+inf,application/octet-stream
+ins,application/x-internet-signup
+isp,application/x-internet-signup
+IVF,video/x-ivf
+jar,application/java-archive
+java,application/octet-stream
+jck,application/liquidmotion
+jcz,application/liquidmotion
+jfif,image/pjpeg
+jpb,application/octet-stream
+jpe,image/jpeg
+jpeg,image/jpeg
+jpg,image/jpeg
+js,text/javascript
+json,application/json
+jsx,text/jscript
+latex,application/x-latex
+lit,application/x-ms-reader
+lpk,application/octet-stream
+lsf,video/x-la-asf
+lsx,video/x-la-asf
+lzh,application/octet-stream
+m13,application/x-msmediaview
+m14,application/x-msmediaview
+m1v,video/mpeg
+m2ts,video/vnd.dlna.mpeg-tts
+m3u,audio/x-mpegurl
+m4a,audio/mp4
+m4v,video/mp4
+man,application/x-troff-man
+manifest,application/x-ms-manifest
+map,text/plain
+markdown,text/markdown
+md,text/markdown
+mdb,application/x-msaccess
+mdp,application/octet-stream
+me,application/x-troff-me
+mht,message/rfc822
+mhtml,message/rfc822
+mid,audio/mid
+midi,audio/mid
+mix,application/octet-stream
+mjs,text/javascript
+mmf,application/x-smaf
+mno,text/xml
+mny,application/x-msmoney
+mov,video/quicktime
+movie,video/x-sgi-movie
+mp2,video/mpeg
+mp3,audio/mpeg
+mp4,video/mp4
+mp4v,video/mp4
+mpa,video/mpeg
+mpe,video/mpeg
+mpeg,video/mpeg
+mpg,video/mpeg
+mpp,application/vnd.ms-project
+mpv2,video/mpeg
+ms,application/x-troff-ms
+msi,application/octet-stream
+mso,application/octet-stream
+mvb,application/x-msmediaview
+mvc,application/x-miva-compiled
+nc,application/x-netcdf
+nsc,video/x-ms-asf
+nws,message/rfc822
+ocx,application/octet-stream
+oda,application/oda
+odc,text/x-ms-odc
+ods,application/oleobject
+oga,audio/ogg
+ogg,video/ogg
+ogv,video/ogg
+ogx,application/ogg
+one,application/onenote
+onea,application/onenote
+onetoc,application/onenote
+onetoc2,application/onenote
+onetmp,application/onenote
+onepkg,application/onenote
+osdx,application/opensearchdescription+xml
+otf,font/otf
+p10,application/pkcs10
+p12,application/x-pkcs12
+p7b,application/x-pkcs7-certificates
+p7c,application/pkcs7-mime
+p7m,application/pkcs7-mime
+p7r,application/x-pkcs7-certreqresp
+p7s,application/pkcs7-signature
+pbm,image/x-portable-bitmap
+pcx,application/octet-stream
+pcz,application/octet-stream
+pdf,application/pdf
+pfb,application/octet-stream
+pfm,application/octet-stream
+pfx,application/x-pkcs12
+pgm,image/x-portable-graymap
+pko,application/vnd.ms-pki.pko
+pma,application/x-perfmon
+pmc,application/x-perfmon
+pml,application/x-perfmon
+pmr,application/x-perfmon
+pmw,application/x-perfmon
+png,image/png
+pnm,image/x-portable-anymap
+pnz,image/png
+pot,application/vnd.ms-powerpoint
+potm,application/vnd.ms-powerpoint.template.macroEnabled.12
+potx,application/vnd.openxmlformats-officedocument.presentationml.template
+ppam,application/vnd.ms-powerpoint.addin.macroEnabled.12
+ppm,image/x-portable-pixmap
+pps,application/vnd.ms-powerpoint
+ppsm,application/vnd.ms-powerpoint.slideshow.macroEnabled.12
+ppsx,application/vnd.openxmlformats-officedocument.presentationml.slideshow
+ppt,application/vnd.ms-powerpoint
+pptm,application/vnd.ms-powerpoint.presentation.macroEnabled.12
+pptx,application/vnd.openxmlformats-officedocument.presentationml.presentation
+prf,application/pics-rules
+prm,application/octet-stream
+prx,application/octet-stream
+ps,application/postscript
+psd,application/octet-stream
+psm,application/octet-stream
+psp,application/octet-stream
+pub,application/x-mspublisher
+qt,video/quicktime
+qtl,application/x-quicktimeplayer
+qxd,application/octet-stream
+ra,audio/x-pn-realaudio
+ram,audio/x-pn-realaudio
+rar,application/octet-stream
+ras,image/x-cmu-raster
+rf,image/vnd.rn-realflash
+rgb,image/x-rgb
+rm,application/vnd.rn-realmedia
+rmi,audio/mid
+roff,application/x-troff
+rpm,audio/x-pn-realaudio-plugin
+rtf,application/rtf
+rtx,text/richtext
+scd,application/x-msschedule
+sct,text/scriptlet
+sea,application/octet-stream
+setpay,application/set-payment-initiation
+setreg,application/set-registration-initiation
+sgml,text/sgml
+sh,application/x-sh
+shar,application/x-shar
+sit,application/x-stuffit
+sldm,application/vnd.ms-powerpoint.slide.macroEnabled.12
+sldx,application/vnd.openxmlformats-officedocument.presentationml.slide
+smd,audio/x-smd
+smi,application/octet-stream
+smx,audio/x-smd
+smz,audio/x-smd
+snd,audio/basic
+snp,application/octet-stream
+spc,application/x-pkcs7-certificates
+spl,application/futuresplash
+spx,audio/ogg
+src,application/x-wais-source
+ssm,application/streamingmedia
+sst,application/vnd.ms-pki.certstore
+stl,application/vnd.ms-pki.stl
+sv4cpio,application/x-sv4cpio
+sv4crc,application/x-sv4crc
+svg,image/svg+xml
+svgz,image/svg+xml
+swf,application/x-shockwave-flash
+t,application/x-troff
+tar,application/x-tar
+tcl,application/x-tcl
+tex,application/x-tex
+texi,application/x-texinfo
+texinfo,application/x-texinfo
+tgz,application/x-compressed
+thmx,application/vnd.ms-officetheme
+thn,application/octet-stream
+tif,image/tiff
+tiff,image/tiff
+toc,application/octet-stream
+tr,application/x-troff
+trm,application/x-msterminal
+ts,video/vnd.dlna.mpeg-tts
+tsv,text/tab-separated-values
+ttc,application/x-font-ttf
+ttf,application/x-font-ttf
+tts,video/vnd.dlna.mpeg-tts
+txt,text/plain
+u32,application/octet-stream
+uls,text/iuls
+ustar,application/x-ustar
+vbs,text/vbscript
+vcf,text/x-vcard
+vcs,text/plain
+vdx,application/vnd.ms-visio.viewer
+vml,text/xml
+vsd,application/vnd.visio
+vss,application/vnd.visio
+vst,application/vnd.visio
+vsto,application/x-ms-vsto
+vsw,application/vnd.visio
+vsx,application/vnd.visio
+vtx,application/vnd.visio
+wasm,application/wasm
+wav,audio/wav
+wax,audio/x-ms-wax
+wbmp,image/vnd.wap.wbmp
+wcm,application/vnd.ms-works
+wdb,application/vnd.ms-works
+webm,video/webm
+webmanifest,application/manifest+json
+webp,image/webp
+wks,application/vnd.ms-works
+wm,video/x-ms-wm
+wma,audio/x-ms-wma
+wmd,application/x-ms-wmd
+wmf,application/x-msmetafile
+wml,text/vnd.wap.wml
+wmlc,application/vnd.wap.wmlc
+wmls,text/vnd.wap.wmlscript
+wmlsc,application/vnd.wap.wmlscriptc
+wmp,video/x-ms-wmp
+wmv,video/x-ms-wmv
+wmx,video/x-ms-wmx
+wmz,application/x-ms-wmz
+woff,application/font-woff
+woff2,font/woff2
+wps,application/vnd.ms-works
+wri,application/x-mswrite
+wrl,x-world/x-vrml
+wrz,x-world/x-vrml
+wsdl,text/xml
+wtv,video/x-ms-wtv
+wvx,video/x-ms-wvx
+x,application/directx
+xaf,x-world/x-vrml
+xaml,application/xaml+xml
+xap,application/x-silverlight-app
+xbap,application/x-ms-xbap
+xbm,image/x-xbitmap
+xdr,text/plain
+xht,application/xhtml+xml
+xhtml,application/xhtml+xml
+xla,application/vnd.ms-excel
+xlam,application/vnd.ms-excel.addin.macroEnabled.12
+xlc,application/vnd.ms-excel
+xlm,application/vnd.ms-excel
+xls,application/vnd.ms-excel
+xlsb,application/vnd.ms-excel.sheet.binary.macroEnabled.12
+xlsm,application/vnd.ms-excel.sheet.macroEnabled.12
+xlsx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
+xlt,application/vnd.ms-excel
+xltm,application/vnd.ms-excel.template.macroEnabled.12
+xltx,application/vnd.openxmlformats-officedocument.spreadsheetml.template
+xlw,application/vnd.ms-excel
+xml,text/xml
+xof,x-world/x-vrml
+xpm,image/x-xpixmap
+xps,application/vnd.ms-xpsdocument
+xsd,text/xml
+xsf,text/xml
+xsl,text/xml
+xslt,text/xml
+xsn,application/octet-stream
+xtp,application/octet-stream
+xwd,image/x-xwindowdump
+z,application/x-compress
+zip,application/x-zip-compressed