From cdc73526a80de2120df7aa44f7dc820df6de789d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Tue, 21 Dec 2021 09:39:05 +0100 Subject: [PATCH] media: Add PDF MIME type --- media/mediaType.go | 5 +- media/mediaType_test.go | 13 ++- media/testdata/resource.pdf | 198 ++++++++++++++++++++++++++++++++++++ 3 files changed, 208 insertions(+), 8 deletions(-) create mode 100644 media/testdata/resource.pdf diff --git a/media/mediaType.go b/media/mediaType.go index 0bdeb6db7..18af666d5 100644 --- a/media/mediaType.go +++ b/media/mediaType.go @@ -169,7 +169,6 @@ func (m Type) IsText() bool { switch m.SubType { case "javascript", "json", "rss", "xml", "svg", TOMLType.SubType, YAMLType.SubType: return true - } return false } @@ -239,6 +238,9 @@ var ( TrueTypeFontType = newMediaType("font", "ttf", []string{"ttf"}) OpenTypeFontType = newMediaType("font", "otf", []string{"otf"}) + // Common document types + PDFType = newMediaType("application", "pdf", []string{"pdf"}) + // Common video types AVIType = newMediaType("video", "x-msvideo", []string{"avi"}) MPEGType = newMediaType("video", "mpeg", []string{"mpg", "mpeg"}) @@ -282,6 +284,7 @@ var DefaultTypes = Types{ GPPType, OpenTypeFontType, TrueTypeFontType, + PDFType, } func init() { diff --git a/media/mediaType_test.go b/media/mediaType_test.go index f3a06e8ed..8c739813d 100644 --- a/media/mediaType_test.go +++ b/media/mediaType_test.go @@ -51,6 +51,7 @@ func TestDefaultTypes(t *testing.T) { {XMLType, "application", "xml", "xml", "application/xml", "application/xml"}, {TOMLType, "application", "toml", "toml", "application/toml", "application/toml"}, {YAMLType, "application", "yaml", "yaml", "application/yaml", "application/yaml"}, + {PDFType, "application", "pdf", "pdf", "application/pdf", "application/pdf"}, {TrueTypeFontType, "font", "ttf", "ttf", "font/ttf", "font/ttf"}, {OpenTypeFontType, "font", "otf", "otf", "font/otf", "font/otf"}, } { @@ -62,7 +63,7 @@ func TestDefaultTypes(t *testing.T) { } - c.Assert(len(DefaultTypes), qt.Equals, 30) + c.Assert(len(DefaultTypes), qt.Equals, 31) } func TestGetByType(t *testing.T) { @@ -118,7 +119,8 @@ func TestGetFirstBySuffix(t *testing.T) { c.Assert(found, qt.Equals, true) c.Assert(f, qt.Equals, SuffixInfo{ Suffix: suffix, - FullSuffix: "." + suffix}) + FullSuffix: "." + suffix, + }) c.Assert(t, qt.Equals, expectedType) } @@ -126,7 +128,6 @@ func TestGetFirstBySuffix(t *testing.T) { check("json", JSONType) check("geojson", geoJSON) check("gjson", geoJSON) - } func TestFromTypeString(t *testing.T) { @@ -150,7 +151,6 @@ func TestFromTypeString(t *testing.T) { c.Assert(err, qt.IsNil) c.Assert(f, qt.Equals, Type{MainType: "text", SubType: "xml", mimeSuffix: ""}) - } func TestFromStringAndExt(t *testing.T) { @@ -178,7 +178,6 @@ func TestFromExtensionMultipleSuffixes(t *testing.T) { c.Assert(found, qt.Equals, true) c.Assert(ftp.String(), qt.Equals, "image/svg+xml") c.Assert(found, qt.Equals, true) - } func TestFromContent(t *testing.T) { @@ -189,7 +188,8 @@ func TestFromContent(t *testing.T) { mtypes := DefaultTypes for _, filename := range files { - c.Run(filepath.Base(filename), func(c *qt.C) { + name := filepath.Base(filename) + c.Run(name, func(c *qt.C) { content, err := ioutil.ReadFile(filename) c.Assert(err, qt.IsNil) ext := strings.TrimPrefix(paths.Ext(filename), ".") @@ -252,7 +252,6 @@ func TestDecodeTypes(t *testing.T) { _, found = tt.GetByType("application/hugo+hg") c.Assert(found, qt.Equals, true) - }, }, { diff --git a/media/testdata/resource.pdf b/media/testdata/resource.pdf new file mode 100644 index 000000000..c0e31a076 --- /dev/null +++ b/media/testdata/resource.pdf @@ -0,0 +1,198 @@ +%PDF-1.3 +%âãÏÓ + +1 0 obj +<< +/Type /Catalog +/Outlines 2 0 R +/Pages 3 0 R +>> +endobj + +2 0 obj +<< +/Type /Outlines +/Count 0 +>> +endobj + +3 0 obj +<< +/Type /Pages +/Count 2 +/Kids [ 4 0 R 6 0 R ] +>> +endobj + +4 0 obj +<< +/Type /Page +/Parent 3 0 R +/Resources << +/Font << +/F1 9 0 R +>> +/ProcSet 8 0 R +>> +/MediaBox [0 0 612.0000 792.0000] +/Contents 5 0 R +>> +endobj + +5 0 obj +<< /Length 1074 >> +stream +2 J +BT +0 0 0 rg +/F1 0027 Tf +57.3750 722.2800 Td +( A Simple PDF File ) Tj +ET +BT +/F1 0010 Tf +69.2500 688.6080 Td +( This is a small demonstration .pdf file - ) Tj +ET +BT +/F1 0010 Tf +69.2500 664.7040 Td +( just for use in the Virtual Mechanics tutorials. More text. And more ) Tj +ET +BT +/F1 0010 Tf +69.2500 652.7520 Td +( text. And more text. And more text. And more text. ) Tj +ET +BT +/F1 0010 Tf +69.2500 628.8480 Td +( And more text. And more text. And more text. And more text. And more ) Tj +ET +BT +/F1 0010 Tf +69.2500 616.8960 Td +( text. And more text. Boring, zzzzz. And more text. And more text. And ) Tj +ET +BT +/F1 0010 Tf +69.2500 604.9440 Td +( more text. And more text. And more text. And more text. And more text. ) Tj +ET +BT +/F1 0010 Tf +69.2500 592.9920 Td +( And more text. And more text. ) Tj +ET +BT +/F1 0010 Tf +69.2500 569.0880 Td +( And more text. And more text. And more text. And more text. And more ) Tj +ET +BT +/F1 0010 Tf +69.2500 557.1360 Td +( text. And more text. And more text. Even more. Continued on page 2 ...) Tj +ET +endstream +endobj + +6 0 obj +<< +/Type /Page +/Parent 3 0 R +/Resources << +/Font << +/F1 9 0 R +>> +/ProcSet 8 0 R +>> +/MediaBox [0 0 612.0000 792.0000] +/Contents 7 0 R +>> +endobj + +7 0 obj +<< /Length 676 >> +stream +2 J +BT +0 0 0 rg +/F1 0027 Tf +57.3750 722.2800 Td +( Simple PDF File 2 ) Tj +ET +BT +/F1 0010 Tf +69.2500 688.6080 Td +( ...continued from page 1. Yet more text. And more text. And more text. ) Tj +ET +BT +/F1 0010 Tf +69.2500 676.6560 Td +( And more text. And more text. And more text. And more text. And more ) Tj +ET +BT +/F1 0010 Tf +69.2500 664.7040 Td +( text. Oh, how boring typing this stuff. But not as boring as watching ) Tj +ET +BT +/F1 0010 Tf +69.2500 652.7520 Td +( paint dry. And more text. And more text. And more text. And more text. ) Tj +ET +BT +/F1 0010 Tf +69.2500 640.8000 Td +( Boring. More, a little more text. The end, and just as well. ) Tj +ET +endstream +endobj + +8 0 obj +[/PDF /Text] +endobj + +9 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F1 +/BaseFont /Helvetica +/Encoding /WinAnsiEncoding +>> +endobj + +10 0 obj +<< +/Creator (Rave \(http://www.nevrona.com/rave\)) +/Producer (Nevrona Designs) +/CreationDate (D:20060301072826) +>> +endobj + +xref +0 11 +0000000000 65535 f +0000000019 00000 n +0000000093 00000 n +0000000147 00000 n +0000000222 00000 n +0000000390 00000 n +0000001522 00000 n +0000001690 00000 n +0000002423 00000 n +0000002456 00000 n +0000002574 00000 n + +trailer +<< +/Size 11 +/Root 1 0 R +/Info 10 0 R +>> + +startxref +2714 +%%EOF