Documentation ¶
Overview ¶
Package filecat categorizes file types -- it is the single, consolidated place where mimetypes and filetypes etc are managed in GoGi / GoKi.
This whole space is a bit of a heterogenous mess -- most file types we care about are not registered on the official iana registry, which seems mainly to have paid registrations in application/ category, and doesn't have any of the main programming languages etc.
The official Go std library support depends on different platform libraries and mac doesn't have one, so it has very limited support
So we sucked it up and made a full list of all the major file types that we really care about and also provide a broader category-level organization that is useful for functionally organizing / operating on files.
As fallback, we are using both of the go packages developed by others: github.com/gabriel-vasile/mimetype github.com/h2non/filetype (which constrained our package name to not be either of those two)
Index ¶
- Constants
- Variables
- func IsMatch(targ, typ Supported) bool
- func IsMatchList(targs []Supported, typ Supported) bool
- func MergeAvailMimes()
- func MimeFromFile(fname string) (mtype, ext string, err error)
- func MimeNoChar(mime string) string
- func MimeString(sup Supported) string
- func MimeSub(mime string) string
- func MimeTop(mime string) string
- type Cat
- type MimeType
- type Supported
- func (sup Supported) Cat() Cat
- func (i *Supported) FromString(s string) error
- func (kf Supported) MarshalJSON() ([]byte, error)
- func (ev Supported) MarshalText() ([]byte, error)
- func (i Supported) String() string
- func (kf *Supported) UnmarshalJSON(b []byte) error
- func (ev *Supported) UnmarshalText(b []byte) error
Constants ¶
const ( TextPlain = "text/plain" DataJson = "application/json" DataXml = "application/xml" DataCsv = "text/csv" )
These are the super high-frequency used mime types, to have very quick const level support
Variables ¶
var AvailMimes map[string]MimeType
AvailMimes is the full list (as a map from mimetype) of available defined mime types built from StdMimes (compiled in) and then CustomMimes can override
var CustomMimes []MimeType
CustomMimes can be set by other apps to contain custom mime types that go beyond what is in the standard ones, and can also redefine and override the standard one
var ExtMimeMap = map[string]string{}
ExtMimeMap is the map from extension to mime type, built from AvailMimes
var KiT_Cat = kit.Enums.AddEnum(CatN, kit.NotBitFlag, nil)
var KiT_Supported = kit.Enums.AddEnumAltLower(SupportedN, kit.NotBitFlag, nil, "")
var StdMimes = []MimeType{}/* 284 elements not displayed */
StdMimes is the full list of standard mime types compiled into our code various other maps etc are constructed from it. When there are multiple types associated with the same real type, pick one to be the canonical one and give it, and *only* it, the extensions!
var SupportedMimes map[Supported]MimeType
SupportedMimes maps from the support type into the MimeType info for each supported file type -- the supported MimeType may be just one of multiple that correspond to the supported type -- it should be first in list and have extensions defined
Functions ¶
func IsMatch ¶
IsMatch returns true if given file type matches target type, which could be any of the Any options
func IsMatchList ¶
IsMatchList returns true if given file type matches any of a list of targets if list is empty, then always returns true
func MergeAvailMimes ¶
func MergeAvailMimes()
MergeAvailMimes merges the StdMimes and CustomMimes into AvailMimes if CustomMimes is updated, then this should be called -- initially it just has StdMimes. It also builds the ExtMimeMap to map from extension to mime type and SupportedMimes map of supported file types onto their full mime type entry
func MimeFromFile ¶
MimeFromFile gets mime type from file, using Gabriel Vasile's mimetype package, mime.TypeByExtension, the chroma syntax highlighter, CustomExtMimeMap, and finally FileExtMimeMap. Use the mimetype package's extension mechanism to add further content-based matchers as needed, and set CustomExtMimeMap to your own map or call AddCustomExtMime for extension-based ones.
func MimeNoChar ¶
MimeNoChar returns the mime string without any charset encoding information, or anything else after a ;
func MimeString ¶
MimeString gives the string representation of the canonical mime type associated with given supported mime type.
Types ¶
type Cat ¶
type Cat int32
filecat.Cat is a functional category for files -- a broad functional categorization that can help decide what to do with the file.
It is computed in part from the mime type, but some types require other information.
No single categorization scheme is perfect, so any given use may require examination of the full mime type etc, but this provides a useful broad-scope categorization of file types.
const ( // Unknown is an unknown file category Unknown Cat = iota // Folder is a folder / directory Folder // Archive is a collection of files, e.g., zip tar Archive // Backup is a backup file (# ~ etc) Backup // Code is a programming language file Code // Doc is an editable word processing file including latex, markdown, html, css, etc Doc // Sheet is a spreadsheet file (.xls etc) Sheet // Data is some kind of data format (csv, json, database, etc) Data // Text is some other kind of text file Text // Image is an image (jpeg, png, svg, etc) *including* PDF Image // Model is a 3D model Model // Audio is an audio file Audio // Video is a video file Video // Font is a font file Font // Exe is a binary executable file (scripts go in Code) Exe // Bin is some other type of binary (object files, libraries, etc) Bin CatN )
func CatFromMime ¶
filecat.CatFromMime returns the file category based on the mime type -- not all Cats can be inferred from file types
func (*Cat) FromString ¶
func (Cat) MarshalJSON ¶
func (Cat) MarshalText ¶
map keys require text marshaling:
func (*Cat) UnmarshalJSON ¶
func (*Cat) UnmarshalText ¶
type MimeType ¶
type MimeType struct { Mime string `desc:"mimetype string: type/subtype"` Exts []string `desc:"file extensions associated with this file type"` Cat Cat `desc:"category of file"` Sup Supported `desc:"if supported, the name of the supported file type, else NoSupport"` }
MimeType contains all the information associated with a given mime type
type Supported ¶
type Supported int
filecat.Supported are file types that are specifically supported by GoGi and can be processed in one way or another, plus various others that we SHOULD be able to process at some point
const ( // NoSupport = a non-supported file type NoSupport Supported = iota // Any is used when selecting a file type, if any type is OK (including NoSupport) // see also AnySupported and the Any options for each category Any // AnySupported is used when selecting a file type, if any Supported // file type is OK (excludes NoSupport) -- see Any and Any options for each category AnySupported // Folder is a folder / directory AnyFolder // Archive is a collection of files, e.g., zip tar AnyArchive Multipart Tar Zip GZip SevenZ Xz BZip Dmg Shar // Backup files AnyBackup Trash // Code is a programming language file AnyCode Ada Bash Csh C // includes C++ CSharp D Diff Eiffel Erlang Forth Fortran FSharp Go Haskell Java JavaScript Lisp Lua Makefile Mathematica Matlab ObjC OCaml Pascal Perl Php Prolog Python R Ruby Rust Scala Tcl // Doc is an editable word processing file including latex, markdown, html, css, etc AnyDoc BibTeX TeX Texinfo Troff Html Css Markdown Rtf MSWord OpenText OpenPres MSPowerpoint EBook EPub // Sheet is a spreadsheet file (.xls etc) AnySheet MSExcel OpenSheet // Data is some kind of data format (csv, json, database, etc) AnyData Csv Json Xml Protobuf Ini Tsv Uri Color GoGi Yaml // Text is some other kind of text file AnyText PlainText // text/plain mimetype -- used for clipboard ICal VCal VCard // Image is an image (jpeg, png, svg, etc) *including* PDF AnyImage Pdf Postscript Gimp GraphVis Gif Jpeg Png Svg Tiff Pnm Pbm Pgm Ppm Xbm Xpm Bmp Heic Heif // Model is a 3D model AnyModel Vrml X3d // Audio is an audio file AnyAudio Aac Flac Mp3 Ogg Midi Wav // Video is a video file AnyVideo Mpeg Mp4 Mov Ogv Wmv Avi // Font is a font file AnyFont TrueType WebOpenFont // Exe is a binary executable file AnyExe // Bin is some other unrecognized binary type AnyBin SupportedN )
These are the supported file types, organized by category
func ExtSupported ¶
ExtSupported returns the supported type for given file extension, or NoSupport if not found or not a supported file type
func MimeSupported ¶
MimeSupported returns the supported type for given mime key, or NoSupport if not found or not a supported file type
func SupportedByName ¶
SupportedByName looks up supported file type by caps or lowercase name
func SupportedFromFile ¶
SupportedFromFile returns the supported type for given file, or NoSupport if not found or not a supported file type
func (*Supported) FromString ¶
func (Supported) MarshalJSON ¶
func (Supported) MarshalText ¶
map keys require text marshaling: