#
# Base MIME types file for CUPS.
#
# DO NOT EDIT THIS FILE, AS IT IS OVERWRITTEN WHEN YOU INSTALL NEW
# VERSIONS OF CUPS.  Instead, create a "local.types" file that
# reflects your local configuration changes.
#
# Copyright © 2007-2017 by Apple Inc.
# Copyright © 1997-2007 by Easy Software Products.
#
# Licensed under Apache License v2.0.  See the file "LICENSE" for more
# information.
#

########################################################################
#
# Format of Lines:
#
#   super/type rules
#
# "rules" can be any combination of:
#
#   ( expr )				Parenthesis for expression grouping
#   +					Logical AND
#   , or whitespace			Logical OR
#   !					Logical NOT
#   match("pattern")			Pattern match on filename
#   extension				Pattern match on "*.extension"
#   ascii(offset,length)		True if bytes are valid printable ASCII
#					(CR, NL, TAB, BS, 32-126)
#   priority(number)                    Sets priority of type (0=lowest,
#                                       100=default, 200=highest)
#   printable(offset,length)		True if bytes are printable 8-bit chars
#					(CR, NL, TAB, BS, 32-126, 128-254)
#   regex(offset,"regex")		True if bytes match regular expression
#   string(offset,"string")		True if bytes are identical to string
#   istring(offset,"string")		True if bytes are identical to
#                                       case-insensitive string
#   char(offset,value)			True if byte is identical
#   short(offset,value)			True if 16-bit integer is identical
#   int(offset,value)			True if 32-bit integer is identical
#   locale("string")                    True if current locale matches string
#   contains(offset,range,"string")	True if the range contains the string
#
# General Notes:
#
#   MIME type names are case-insensitive.  Internally they are converted
#   to lowercase.  Multiple occurrences of a type will cause the provided
#   rules to be appended to the existing definition.  If two types use the same
#   rules to resolve a type and have the same priority, e.g. "doc" extension for
#   "text/bar" and "text/foo", the returned type will be the first type as
#   sorted in alphanumerically ascending order without regard to case.  Thus,
#   the "text/bar" type will match the "doc" extension first unless the
#   "text/foo" type has specified a higher priority.
#
#   The "printable" rule differs from the "ascii" rule in that it also
#   accepts 8-bit characters in the range 128-255.
#
#   String constants must be surrounded by "" if they contain whitespace.
#   To insert binary data into a string, use the <hex> notation.
#

########################################################################
#
# Application-generated files...
#

#application/msword		doc string(0,<D0CF11E0A1B11AE1>)
application/pdf			pdf regex(0,^[\n\r]*%PDF)
application/postscript		ai eps ps string(0,%!) string(0,<04>%!) \
				contains(0,128,<1B>%-12345X) + \
				(contains(0,4096,"LANGUAGE=POSTSCRIPT") \
				 contains(0,4096,"LANGUAGE = Postscript") \
				 contains(0,4096,"LANGUAGE = PostScript") \
				 contains(0,4096,"LANGUAGE = POSTSCRIPT") \
				 (contains(0,4096,<0a>%!) + \
				  !contains(0,4096,"ENTER LANGUAGE")))


########################################################################
#
# Image files...
#

image/gif			gif string(0,GIF87a) string(0,GIF89a)
image/png			png string(0,<89>PNG)
image/jpeg			jpeg jpg jpe string(0,<FFD8FF>) +\
				(char(3,0xe0) char(3,0xe1) char(3,0xe2) char(3,0xe3)\
				 char(3,0xe4) char(3,0xe5) char(3,0xe6) char(3,0xe7)\
				 char(3,0xe8) char(3,0xe9) char(3,0xea) char(3,0xeb)\
				 char(3,0xec) char(3,0xed) char(3,0xee) char(3,0xef))
image/pwg-raster		string(0,"RaS2") + string(4,PwgRaster<00>) priority(150)
image/tiff			tiff tif string(0,MM<002A>) string(0,II<2A00>)
image/x-photocd			pcd string(2048,PCD_IPI)
image/x-portable-anymap		pnm
image/x-portable-bitmap		pbm string(0,P1) string(0,P4)
image/x-portable-graymap	pgm string(0,P2) string(0,P5)
image/x-portable-pixmap		ppm string(0,P3) string(0,P6)
image/x-sgi-rgb			rgb sgi bw icon short(0,474)
image/x-xbitmap			xbm
image/x-xpixmap			xpm ascii(0,1024) + string(3,"XPM")
#image/x-xwindowdump		xwd string(4,<00000007>)
image/x-sun-raster		ras string(0,<59a66a95>)

#image/fpx			fpx
image/urf			urf string(0,UNIRAST<00>)
image/x-alias			pix short(8,8) short(8,24)
image/x-bitmap			bmp string(0,BM) + !printable(2,14)
image/x-icon			ico

########################################################################
#
# Text files...
#

application/x-cshell		csh printable(0,1024) + string(0,#!) +\
				(contains(2,80,/csh) contains(2,80,/tcsh))
application/x-perl		pl printable(0,1024) + string(0,#!) +\
				contains(2,80,/perl)
application/x-shell		sh printable(0,1024) + string(0,#!) +\
				(contains(2,80,/bash) contains(2,80,/ksh)\
				 contains(2,80,/sh) contains(2,80,/zsh))
application/x-csource		c cxx cpp cc C h hpp \
				printable(0,1024) + ! css + \
				(string(0,/*) string(0,//) \
				 string(0,#include) contains(0,1024,<0a>#include) \
				 string(0,#define) contains(0,1024,<0a>#define))
text/html			html htm printable(0,1024) +\
				(istring(0,"<HTML>") istring(0,"<!DOCTYPE"))
text/plain			txt printable(0,1024)
text/css			css


########################################################################
#
# RSS feed type...
#

application/rss+xml		rss


########################################################################
#
# CUPS-specific types...
#

application/vnd.cups-banner	string(0,'#CUPS-BANNER')
application/vnd.cups-command	string(0,'#CUPS-COMMAND')
application/vnd.cups-pdf
application/vnd.cups-postscript
application/vnd.cups-ppd	ppd string(0,"*PPD-Adobe:")
application/vnd.cups-raster	string(0,"RaSt") string(0,"tSaR") \
				(string(0,"RaS2") + !string(4,PwgRaster<00>)) string(0,"2SaR") \
				string(0,"RaS3") string(0,"3SaR")
application/vnd.cups-raw	(string(0,<1B>E) + !string(2,<1B>%0B)) \
				string(0,<1B>@) \
				(contains(0,128,<1B>%-12345X) + \
				 (contains(0,4096,"LANGUAGE=PCL") \
				  contains(0,4096,"LANGUAGE = PCL")))

########################################################################
#
# Raw print file support...
#
# Comment the following type to prevent raw file printing.
#

application/octet-stream
