jekyll 4.0.0.pre.alpha1 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +58 -17
  3. data/lib/jekyll.rb +5 -1
  4. data/lib/jekyll/cache.rb +71 -64
  5. data/lib/jekyll/cleaner.rb +5 -5
  6. data/lib/jekyll/collection.rb +6 -4
  7. data/lib/jekyll/command.rb +4 -2
  8. data/lib/jekyll/commands/new.rb +4 -4
  9. data/lib/jekyll/commands/serve.rb +9 -1
  10. data/lib/jekyll/commands/serve/servlet.rb +13 -14
  11. data/lib/jekyll/commands/serve/websockets.rb +1 -1
  12. data/lib/jekyll/configuration.rb +40 -129
  13. data/lib/jekyll/converters/identity.rb +2 -2
  14. data/lib/jekyll/converters/markdown/kramdown_parser.rb +70 -9
  15. data/lib/jekyll/convertible.rb +21 -20
  16. data/lib/jekyll/document.rb +56 -31
  17. data/lib/jekyll/drops/document_drop.rb +12 -0
  18. data/lib/jekyll/drops/drop.rb +14 -8
  19. data/lib/jekyll/drops/site_drop.rb +11 -1
  20. data/lib/jekyll/drops/url_drop.rb +52 -1
  21. data/lib/jekyll/entry_filter.rb +38 -44
  22. data/lib/jekyll/excerpt.rb +3 -3
  23. data/lib/jekyll/filters.rb +140 -22
  24. data/lib/jekyll/filters/url_filters.rb +41 -14
  25. data/lib/jekyll/frontmatter_defaults.rb +15 -20
  26. data/lib/jekyll/hooks.rb +2 -5
  27. data/lib/jekyll/inclusion.rb +32 -0
  28. data/lib/jekyll/liquid_renderer.rb +18 -15
  29. data/lib/jekyll/liquid_renderer/file.rb +10 -0
  30. data/lib/jekyll/liquid_renderer/table.rb +18 -61
  31. data/lib/jekyll/mime.types +53 -11
  32. data/lib/jekyll/page.rb +26 -2
  33. data/lib/jekyll/page_excerpt.rb +25 -0
  34. data/lib/jekyll/path_manager.rb +31 -0
  35. data/lib/jekyll/profiler.rb +58 -0
  36. data/lib/jekyll/reader.rb +4 -1
  37. data/lib/jekyll/readers/collection_reader.rb +1 -0
  38. data/lib/jekyll/readers/data_reader.rb +1 -0
  39. data/lib/jekyll/readers/layout_reader.rb +1 -0
  40. data/lib/jekyll/readers/page_reader.rb +5 -5
  41. data/lib/jekyll/readers/post_reader.rb +2 -1
  42. data/lib/jekyll/readers/static_file_reader.rb +3 -3
  43. data/lib/jekyll/readers/theme_assets_reader.rb +1 -0
  44. data/lib/jekyll/renderer.rb +9 -15
  45. data/lib/jekyll/site.rb +21 -12
  46. data/lib/jekyll/static_file.rb +15 -10
  47. data/lib/jekyll/tags/highlight.rb +2 -4
  48. data/lib/jekyll/tags/include.rb +67 -11
  49. data/lib/jekyll/tags/post_url.rb +8 -5
  50. data/lib/jekyll/theme.rb +19 -10
  51. data/lib/jekyll/url.rb +7 -3
  52. data/lib/jekyll/utils.rb +14 -18
  53. data/lib/jekyll/utils/platforms.rb +1 -1
  54. data/lib/jekyll/utils/win_tz.rb +1 -1
  55. data/lib/jekyll/version.rb +1 -1
  56. data/lib/theme_template/theme.gemspec.erb +1 -4
  57. metadata +33 -36
@@ -11,15 +11,16 @@ module Jekyll
11
11
  def absolute_url(input)
12
12
  return if input.nil?
13
13
 
14
- input = input.url if input.respond_to?(:url)
15
- return input if Addressable::URI.parse(input.to_s).absolute?
16
-
17
- site = @context.registers[:site]
18
- return relative_url(input) if site.config["url"].nil?
14
+ cache = if input.is_a?(String)
15
+ (@context.registers[:site].filter_cache[:absolute_url] ||= {})
16
+ else
17
+ (@context.registers[:cached_absolute_url] ||= {})
18
+ end
19
+ cache[input] ||= compute_absolute_url(input)
19
20
 
20
- Addressable::URI.parse(
21
- site.config["url"].to_s + relative_url(input)
22
- ).normalize.to_s
21
+ # Duplicate cached string so that the cached value is never mutated by
22
+ # a subsequent filter.
23
+ cache[input].dup
23
24
  end
24
25
 
25
26
  # Produces a URL relative to the domain root based on site.baseurl
@@ -31,13 +32,16 @@ module Jekyll
31
32
  def relative_url(input)
32
33
  return if input.nil?
33
34
 
34
- input = input.url if input.respond_to?(:url)
35
- return input if Addressable::URI.parse(input.to_s).absolute?
35
+ cache = if input.is_a?(String)
36
+ (@context.registers[:site].filter_cache[:relative_url] ||= {})
37
+ else
38
+ (@context.registers[:cached_relative_url] ||= {})
39
+ end
40
+ cache[input] ||= compute_relative_url(input)
36
41
 
37
- parts = [sanitized_baseurl, input]
38
- Addressable::URI.parse(
39
- parts.compact.map { |part| ensure_leading_slash(part.to_s) }.join
40
- ).normalize.to_s
42
+ # Duplicate cached string so that the cached value is never mutated by
43
+ # a subsequent filter.
44
+ cache[input].dup
41
45
  end
42
46
 
43
47
  # Strips trailing `/index.html` from URLs to create pretty permalinks
@@ -53,6 +57,29 @@ module Jekyll
53
57
 
54
58
  private
55
59
 
60
+ def compute_absolute_url(input)
61
+ input = input.url if input.respond_to?(:url)
62
+ return input if Addressable::URI.parse(input.to_s).absolute?
63
+
64
+ site = @context.registers[:site]
65
+ site_url = site.config["url"]
66
+ return relative_url(input) if site_url.nil? || site_url == ""
67
+
68
+ Addressable::URI.parse(
69
+ site_url.to_s + relative_url(input)
70
+ ).normalize.to_s
71
+ end
72
+
73
+ def compute_relative_url(input)
74
+ input = input.url if input.respond_to?(:url)
75
+ return input if Addressable::URI.parse(input.to_s).absolute?
76
+
77
+ parts = [sanitized_baseurl, input]
78
+ Addressable::URI.parse(
79
+ parts.compact.map { |part| ensure_leading_slash(part.to_s) }.join
80
+ ).normalize.to_s
81
+ end
82
+
56
83
  def sanitized_baseurl
57
84
  site = @context.registers[:site]
58
85
  site.config["baseurl"].to_s.chomp("/")
@@ -10,11 +10,10 @@ module Jekyll
10
10
  # Initializes a new instance.
11
11
  def initialize(site)
12
12
  @site = site
13
- reset
14
13
  end
15
14
 
16
15
  def reset
17
- @glob_cache = {}
16
+ @glob_cache = {} if @glob_cache
18
17
  end
19
18
 
20
19
  def update_deprecated_types(set)
@@ -104,12 +103,12 @@ module Jekyll
104
103
  end
105
104
 
106
105
  def applies_path?(scope, path)
107
- return true if !scope.key?("path") || scope["path"].empty?
106
+ rel_scope_path = scope["path"]
107
+ return true if !rel_scope_path.is_a?(String) || rel_scope_path.empty?
108
108
 
109
- sanitized_path = Pathname.new(sanitize_path(path))
110
- rel_scope_path = Pathname.new(scope["path"])
109
+ sanitized_path = sanitize_path(path)
111
110
 
112
- if scope["path"].to_s.include?("*")
111
+ if rel_scope_path.include?("*")
113
112
  glob_scope(sanitized_path, rel_scope_path)
114
113
  else
115
114
  path_is_subpath?(sanitized_path, strip_collections_dir(rel_scope_path))
@@ -121,7 +120,7 @@ module Jekyll
121
120
  abs_scope_path = site_source.join(rel_scope_path).to_s
122
121
 
123
122
  glob_cache(abs_scope_path).each do |scope_path|
124
- scope_path = Pathname.new(scope_path).relative_path_from(site_source)
123
+ scope_path = Pathname.new(scope_path).relative_path_from(site_source).to_s
125
124
  scope_path = strip_collections_dir(scope_path)
126
125
  Jekyll.logger.debug "Globbed Scope Path:", scope_path
127
126
  return true if path_is_subpath?(sanitized_path, scope_path)
@@ -130,20 +129,17 @@ module Jekyll
130
129
  end
131
130
 
132
131
  def glob_cache(path)
132
+ @glob_cache ||= {}
133
133
  @glob_cache[path] ||= Dir.glob(path)
134
134
  end
135
135
 
136
136
  def path_is_subpath?(path, parent_path)
137
- path.ascend do |ascended_path|
138
- return true if ascended_path.to_s == parent_path.to_s
139
- end
140
-
141
- false
137
+ path.start_with?(parent_path)
142
138
  end
143
139
 
144
140
  def strip_collections_dir(path)
145
141
  collections_dir = @site.config["collections_dir"]
146
- slashed_coll_dir = "#{collections_dir}/"
142
+ slashed_coll_dir = collections_dir.empty? ? "/" : "#{collections_dir}/"
147
143
  return path if collections_dir.empty? || !path.to_s.start_with?(slashed_coll_dir)
148
144
 
149
145
  path.sub(slashed_coll_dir, "")
@@ -179,7 +175,7 @@ module Jekyll
179
175
  # new_scope - the new scope hash
180
176
  #
181
177
  # Returns true if the new scope has precedence over the older
182
- # rubocop: disable PredicateName
178
+ # rubocop: disable Naming/PredicateName
183
179
  def has_precedence?(old_scope, new_scope)
184
180
  return true if old_scope.nil?
185
181
 
@@ -194,7 +190,7 @@ module Jekyll
194
190
  !old_scope.key? "type"
195
191
  end
196
192
  end
197
- # rubocop: enable PredicateName
193
+ # rubocop: enable Naming/PredicateName
198
194
 
199
195
  # Collects a list of sets that match the given path and type
200
196
  #
@@ -230,15 +226,14 @@ module Jekyll
230
226
  end.compact
231
227
  end
232
228
 
233
- # Sanitizes the given path by removing a leading and adding a trailing slash
234
-
235
- SANITIZATION_REGEX = %r!\A/|(?<=[^/])\z!.freeze
236
-
229
+ # Sanitizes the given path by removing a leading slash
237
230
  def sanitize_path(path)
238
231
  if path.nil? || path.empty?
239
232
  ""
233
+ elsif path.start_with?("/")
234
+ path.gsub(%r!\A/|(?<=[^/])\z!, "")
240
235
  else
241
- path.gsub(SANITIZATION_REGEX, "")
236
+ path
242
237
  end
243
238
  end
244
239
  end
@@ -91,11 +91,8 @@ module Jekyll
91
91
  # interface for Jekyll core components to trigger hooks
92
92
  def self.trigger(owner, event, *args)
93
93
  # proceed only if there are hooks to call
94
- return unless @registry[owner]
95
- return unless @registry[owner][event]
96
-
97
- # hooks to call for this owner and event
98
- hooks = @registry[owner][event]
94
+ hooks = @registry.dig(owner, event)
95
+ return if hooks.nil? || hooks.empty?
99
96
 
100
97
  # sort and call hooks according to priority and load order
101
98
  hooks.sort_by { |h| @hook_priority[h] }.each do |hook|
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ class Inclusion
5
+ attr_reader :site, :name, :path
6
+ private :site
7
+
8
+ def initialize(site, base, name)
9
+ @site = site
10
+ @name = name
11
+ @path = PathManager.join(base, name)
12
+ end
13
+
14
+ def render(context)
15
+ @template ||= site.liquid_renderer.file(path).parse(content)
16
+ @template.render!(context)
17
+ rescue Liquid::Error => e
18
+ e.template_name = path
19
+ e.markup_context = "included " if e.markup_context.nil?
20
+ raise e
21
+ end
22
+
23
+ def content
24
+ @content ||= File.read(path, **site.file_read_opts)
25
+ end
26
+
27
+ def inspect
28
+ "#{self.class} #{path.inspect}"
29
+ end
30
+ alias_method :to_s, :inspect
31
+ end
32
+ end
@@ -5,11 +5,6 @@ require_relative "liquid_renderer/table"
5
5
 
6
6
  module Jekyll
7
7
  class LiquidRenderer
8
- extend Forwardable
9
-
10
- private def_delegator :@site, :in_source_dir, :source_dir
11
- private def_delegator :@site, :in_theme_dir, :theme_dir
12
-
13
8
  def initialize(site)
14
9
  @site = site
15
10
  Liquid::Template.error_mode = @site.config["liquid"]["error_mode"].to_sym
@@ -22,13 +17,7 @@ module Jekyll
22
17
  end
23
18
 
24
19
  def file(filename)
25
- filename.match(filename_regex)
26
- filename =
27
- if Regexp.last_match(1) == theme_dir("")
28
- ::File.join(::File.basename(Regexp.last_match(1)), Regexp.last_match(2))
29
- else
30
- Regexp.last_match(2)
31
- end
20
+ filename = normalize_path(filename)
32
21
  LiquidRenderer::File.new(self, filename).tap do
33
22
  @stats[filename] ||= new_profile_hash
34
23
  end
@@ -64,9 +53,23 @@ module Jekyll
64
53
 
65
54
  private
66
55
 
67
- def filename_regex
68
- @filename_regex ||= begin
69
- %r!\A(#{Regexp.escape(source_dir)}/|#{Regexp.escape(theme_dir.to_s)}/|/*)(.*)!i
56
+ def normalize_path(filename)
57
+ @normalize_path ||= {}
58
+ @normalize_path[filename] ||= begin
59
+ theme_dir = @site.theme&.root
60
+ case filename
61
+ when %r!\A(#{Regexp.escape(@site.source)}/)(?<rest>.*)!io
62
+ Regexp.last_match(:rest)
63
+ when %r!(/gems/.*)*/gems/(?<dirname>[^/]+)(?<rest>.*)!,
64
+ %r!(?<dirname>[^/]+/lib)(?<rest>.*)!
65
+ "#{Regexp.last_match(:dirname)}#{Regexp.last_match(:rest)}"
66
+ when theme_dir && %r!\A#{Regexp.escape(theme_dir)}/(?<rest>.*)!io
67
+ PathManager.join(@site.theme.basename, Regexp.last_match(:rest))
68
+ when %r!\A/(.*)!
69
+ Regexp.last_match(1)
70
+ else
71
+ filename
72
+ end
70
73
  end
71
74
  end
72
75
 
@@ -18,6 +18,8 @@ module Jekyll
18
18
  end
19
19
 
20
20
  def render(*args)
21
+ reset_template_assigns
22
+
21
23
  measure_time do
22
24
  measure_bytes do
23
25
  measure_counts do
@@ -29,6 +31,8 @@ module Jekyll
29
31
 
30
32
  # This method simply 'rethrows any error' before attempting to render the template.
31
33
  def render!(*args)
34
+ reset_template_assigns
35
+
32
36
  measure_time do
33
37
  measure_bytes do
34
38
  measure_counts do
@@ -44,6 +48,12 @@ module Jekyll
44
48
 
45
49
  private
46
50
 
51
+ # clear assigns to `Liquid::Template` instance prior to rendering since
52
+ # `Liquid::Template` instances are cached in Jekyll 4.
53
+ def reset_template_assigns
54
+ @template.instance_assigns.clear
55
+ end
56
+
47
57
  def measure_counts
48
58
  @renderer.increment_count(@filename)
49
59
  yield
@@ -3,81 +3,28 @@
3
3
  module Jekyll
4
4
  class LiquidRenderer
5
5
  class Table
6
+ GAUGES = [:count, :bytes, :time].freeze
7
+
6
8
  def initialize(stats)
7
9
  @stats = stats
8
10
  end
9
11
 
10
12
  def to_s(num_of_rows = 50)
11
- data = data_for_table(num_of_rows)
12
- widths = table_widths(data)
13
- generate_table(data, widths)
13
+ Jekyll::Profiler.tabulate(data_for_table(num_of_rows))
14
14
  end
15
15
 
16
16
  private
17
17
 
18
- def generate_table(data, widths)
19
- str = +"\n"
20
-
21
- table_head = data.shift
22
- str << generate_row(table_head, widths)
23
- str << generate_table_head_border(table_head, widths)
24
-
25
- data.each do |row_data|
26
- str << generate_row(row_data, widths)
27
- end
28
-
29
- str << "\n"
30
- str
31
- end
32
-
33
- def generate_table_head_border(row_data, widths)
34
- str = +""
35
-
36
- row_data.each_index do |cell_index|
37
- str << "-" * widths[cell_index]
38
- str << "-+-" unless cell_index == row_data.length - 1
39
- end
40
-
41
- str << "\n"
42
- str
43
- end
44
-
45
- def generate_row(row_data, widths)
46
- str = +""
47
-
48
- row_data.each_with_index do |cell_data, cell_index|
49
- str << if cell_index.zero?
50
- cell_data.ljust(widths[cell_index], " ")
51
- else
52
- cell_data.rjust(widths[cell_index], " ")
53
- end
54
-
55
- str << " | " unless cell_index == row_data.length - 1
56
- end
57
-
58
- str << "\n"
59
- str
60
- end
61
-
62
- def table_widths(data)
63
- widths = []
64
-
65
- data.each do |row|
66
- row.each_with_index do |cell, index|
67
- widths[index] = [cell.length, widths[index]].compact.max
68
- end
69
- end
70
-
71
- widths
72
- end
73
-
18
+ # rubocop:disable Metrics/AbcSize
74
19
  def data_for_table(num_of_rows)
75
20
  sorted = @stats.sort_by { |_, file_stats| -file_stats[:time] }
76
21
  sorted = sorted.slice(0, num_of_rows)
77
22
 
78
- table = [%w(Filename Count Bytes Time)]
23
+ table = [header_labels]
24
+ totals = Hash.new { |hash, key| hash[key] = 0 }
79
25
 
80
26
  sorted.each do |filename, file_stats|
27
+ GAUGES.each { |gauge| totals[gauge] += file_stats[gauge] }
81
28
  row = []
82
29
  row << filename
83
30
  row << file_stats[:count].to_s
@@ -86,7 +33,17 @@ module Jekyll
86
33
  table << row
87
34
  end
88
35
 
89
- table
36
+ footer = []
37
+ footer << "TOTAL (for #{sorted.size} files)"
38
+ footer << totals[:count].to_s
39
+ footer << format_bytes(totals[:bytes])
40
+ footer << format("%.3f", totals[:time])
41
+ table << footer
42
+ end
43
+ # rubocop:enable Metrics/AbcSize
44
+
45
+ def header_labels
46
+ GAUGES.map { |gauge| gauge.to_s.capitalize }.unshift("Filename")
90
47
  end
91
48
 
92
49
  def format_bytes(bytes)
@@ -19,18 +19,17 @@ application/davmount+xml davmou
19
19
  application/docbook+xml dbk
20
20
  application/dssc+der dssc
21
21
  application/dssc+xml xdssc
22
- application/ecmascript ecma
22
+ application/ecmascript ecma es
23
23
  application/emma+xml emma
24
24
  application/epub+zip epub
25
25
  application/exi exi
26
26
  application/font-tdpfr pfr
27
- application/font-woff woff
28
- application/font-woff2 woff2
29
27
  application/geo+json geojson
30
28
  application/gml+xml gml
31
29
  application/gpx+xml gpx
32
30
  application/gxf gxf
33
31
  application/gzip gz
32
+ application/hjson hjson
34
33
  application/hyperstudio stk
35
34
  application/inkml+xml ink inkml
36
35
  application/ipfix ipfix
@@ -61,6 +60,8 @@ application/mp21 m21 mp
61
60
  application/mp4 mp4s m4p
62
61
  application/msword doc dot
63
62
  application/mxf mxf
63
+ application/n-quads nq
64
+ application/n-triples nt
64
65
  application/octet-stream bin dms lrf mar so dist distz pkg bpk dump elc deploy exe dll deb dmg iso img msi msp msm buffer
65
66
  application/oda oda
66
67
  application/oebps-package+xml opf
@@ -86,7 +87,8 @@ application/pls+xml pls
86
87
  application/postscript ai eps ps
87
88
  application/prs.cww cww
88
89
  application/pskc+xml pskcxml
89
- application/rdf+xml rdf
90
+ application/raml+yaml raml
91
+ application/rdf+xml rdf owl
90
92
  application/reginfo+xml rif
91
93
  application/relax-ng-compact-syntax rnc
92
94
  application/resource-lists+xml rl
@@ -107,6 +109,7 @@ application/sdp sdp
107
109
  application/set-payment-initiation setpay
108
110
  application/set-registration-initiation setreg
109
111
  application/shf+xml shf
112
+ application/sieve siv sieve
110
113
  application/smil+xml smi smil
111
114
  application/sparql-query rq
112
115
  application/sparql-results+xml srx
@@ -143,7 +146,10 @@ application/vnd.anser-web-certificate-issue-initiation cii
143
146
  application/vnd.anser-web-funds-transfer-initiation fti
144
147
  application/vnd.antix.game-component atx
145
148
  application/vnd.apple.installer+xml mpkg
149
+ application/vnd.apple.keynote keynote
146
150
  application/vnd.apple.mpegurl m3u8
151
+ application/vnd.apple.numbers numbers
152
+ application/vnd.apple.pages pages
147
153
  application/vnd.apple.pkpass pkpass
148
154
  application/vnd.aristanetworks.swi swi
149
155
  application/vnd.astraea-software.iota iota
@@ -154,6 +160,7 @@ application/vnd.businessobjects rep
154
160
  application/vnd.chemdraw+xml cdxml
155
161
  application/vnd.chipnuts.karaoke-mmd mmd
156
162
  application/vnd.cinderella cdy
163
+ application/vnd.citationstyles.style+xml csl
157
164
  application/vnd.claymore cla
158
165
  application/vnd.cloanto.rp9 rp9
159
166
  application/vnd.clonk.c4group c4g c4d c4f c4p c4u
@@ -482,6 +489,7 @@ application/vnd.yellowriver-custom-menu cmp
482
489
  application/vnd.zul zir zirz
483
490
  application/vnd.zzazz.deck+xml zaz
484
491
  application/voicexml+xml vxml
492
+ application/wasm wasm
485
493
  application/widget wgt
486
494
  application/winhlp hlp
487
495
  application/wsdl+xml wsdl
@@ -521,10 +529,8 @@ application/x-eva eva
521
529
  application/x-font-bdf bdf
522
530
  application/x-font-ghostscript gsf
523
531
  application/x-font-linux-psf psf
524
- application/x-font-otf otf
525
532
  application/x-font-pcf pcf
526
533
  application/x-font-snf snf
527
- application/x-font-ttf ttf ttc
528
534
  application/x-font-type1 pfa pfb pfm afm
529
535
  application/x-freearc arc
530
536
  application/x-futuresplash spl
@@ -661,20 +667,41 @@ chemical/x-cmdf cmdf
661
667
  chemical/x-cml cml
662
668
  chemical/x-csml csml
663
669
  chemical/x-xyz xyz
670
+ font/collection ttc
671
+ font/otf otf
672
+ font/ttf ttf
673
+ font/woff woff
674
+ font/woff2 woff2
675
+ image/aces exr
664
676
  image/apng apng
665
677
  image/bmp bmp
666
678
  image/cgm cgm
679
+ image/dicom-rle drle
680
+ image/fits fits
667
681
  image/g3fax g3
668
682
  image/gif gif
683
+ image/heic heic
684
+ image/heic-sequence heics
685
+ image/heif heif
686
+ image/heif-sequence heifs
669
687
  image/ief ief
688
+ image/jls jls
689
+ image/jp2 jp2 jpg2
670
690
  image/jpeg jpeg jpg jpe
691
+ image/jpm jpm
692
+ image/jpx jpx jpf
693
+ image/jxr jxr
671
694
  image/ktx ktx
672
695
  image/png png
673
696
  image/prs.btif btif
697
+ image/prs.pti pti
674
698
  image/sgi sgi
675
699
  image/svg+xml svg svgz
676
- image/tiff tiff tif
700
+ image/t38 t38
701
+ image/tiff tif tiff
702
+ image/tiff-fx tfx
677
703
  image/vnd.adobe.photoshop psd
704
+ image/vnd.airzip.accelerator.azv azv
678
705
  image/vnd.dece.graphic uvi uvvi uvg uvvg
679
706
  image/vnd.djvu djvu djv
680
707
  image/vnd.dvb.subtitle sub
@@ -685,20 +712,22 @@ image/vnd.fpx fpx
685
712
  image/vnd.fst fst
686
713
  image/vnd.fujixerox.edmics-mmr mmr
687
714
  image/vnd.fujixerox.edmics-rlc rlc
715
+ image/vnd.microsoft.icon ico
688
716
  image/vnd.ms-modi mdi
689
717
  image/vnd.ms-photo wdp
690
718
  image/vnd.net-fpx npx
719
+ image/vnd.tencent.tap tap
720
+ image/vnd.valve.source.texture vtf
691
721
  image/vnd.wap.wbmp wbmp
692
722
  image/vnd.xiff xif
723
+ image/vnd.zbrush.pcx pcx
693
724
  image/webp webp
694
725
  image/x-3ds 3ds
695
726
  image/x-cmu-raster ras
696
727
  image/x-cmx cmx
697
728
  image/x-freehand fh fhc fh4 fh5 fh7
698
- image/x-icon ico
699
729
  image/x-jng jng
700
730
  image/x-mrsid-image sid
701
- image/x-pcx pcx
702
731
  image/x-pict pic pct
703
732
  image/x-portable-anymap pnm
704
733
  image/x-portable-bitmap pbm
@@ -709,7 +738,14 @@ image/x-tga tga
709
738
  image/x-xbitmap xbm
710
739
  image/x-xpixmap xpm
711
740
  image/x-xwindowdump xwd
741
+ message/disposition-notification disposition-notification
742
+ message/global u8msg
743
+ message/global-delivery-status u8dsn
744
+ message/global-disposition-notification u8mdn
745
+ message/global-headers u8hdr
712
746
  message/rfc822 eml mime
747
+ message/vnd.wfa.wsc wsc
748
+ model/3mf 3mf
713
749
  model/gltf+json gltf
714
750
  model/gltf-binary glb
715
751
  model/iges igs iges
@@ -719,6 +755,11 @@ model/vnd.dwf dwf
719
755
  model/vnd.gdl gdl
720
756
  model/vnd.gtw gtw
721
757
  model/vnd.mts mts
758
+ model/vnd.opengex ogex
759
+ model/vnd.parasolid.transmit.binary x_b
760
+ model/vnd.parasolid.transmit.text x_t
761
+ model/vnd.usdz+zip usdz
762
+ model/vnd.valve.source.compiled-map bsp
722
763
  model/vnd.vtu vtu
723
764
  model/vrml wrl vrml
724
765
  model/x3d+binary x3db x3dbz
@@ -729,18 +770,19 @@ text/calendar ics if
729
770
  text/coffeescript coffee litcoffee
730
771
  text/css css
731
772
  text/csv csv
732
- text/hjson hjson
733
773
  text/html html htm shtml
734
774
  text/jade jade
735
775
  text/jsx jsx
736
776
  text/less less
737
777
  text/markdown markdown md
738
778
  text/mathml mml
779
+ text/mdx mdx
739
780
  text/n3 n3
740
781
  text/plain txt text conf def list log in ini
741
782
  text/prs.lines.tag dsc
742
783
  text/richtext rtx
743
784
  text/sgml sgml sgm
785
+ text/shex shex
744
786
  text/slim slim slm
745
787
  text/stylus stylus styl
746
788
  text/tab-separated-values tsv
@@ -788,7 +830,7 @@ video/h261 h261
788
830
  video/h263 h263
789
831
  video/h264 h264
790
832
  video/jpeg jpgv
791
- video/jpm jpm jpgm
833
+ video/jpm jpgm
792
834
  video/mj2 mj2 mjp2
793
835
  video/mp2t ts
794
836
  video/mp4 mp4 mp4v mpg4