# -*- coding:utf-8 -*-
# Copyright (C)  2006 Libresoft
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Library General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# Authors : Gregorio Robles <grex@gsyc.escet.urjc.es>
# Authors : Germán Póo-Caamaño <gpoo@gnome.org>
#
# This QEMU version is a cut-down version of what originally shipped
# in the gitdm sample-config directory.
#
# This file contains associations parameters regarding filetypes
# (documentation, develompent, multimedia, images...)
#
# format:
# filetype <type> <regex> [<comment>]
#
# Order:
#   The list should keep an order, so filetypes can be counted properly.
#   ie. we want ltmain.sh -> 'build' instead of 'code'.
#
#   If there is an filetype which is not in order but has values, it will
#   be added at the end.
#
order build,interface,tests,code,documentation,devel-doc,blobs

#
#
# Code files (headers and the like included
# (most common languages first
#
filetype code \.c$	# C
filetype code \.inc.c$	# C
filetype code \.C$	# C++
filetype code \.cpp$	# C++
filetype code \.c\+\+$	# C++
filetype code \.cxx$	# C++
filetype code \.cc$	# C++
filetype code \.h$	# C or C++ header
filetype code \.hh$	# C++ header
filetype code \.hpp$	# C++ header
filetype code \.hxx$	# C++ header
filetype code \.sh$	# Shell
filetype code \.pl$	# Perl
filetype code \.py$	# Python
filetype code \.s$	# Assembly
filetype code \.S$	# Assembly
filetype code \.asm$	# Assembly
filetype code \.awk$	# awk
filetype code ^common$  # script fragements
filetype code ^common.*$  # script fragements
filetype code (qom|qmp)-\w+$  # python script fragments

#
# Interface/api files
#
filetype interface \.json$   # json
filetype interface \.hx$     # documented options

#
# Test related blobs (unfortunately we can't filter out test code)
#
filetype tests \.hex$
filetype tests \d{2,3}$     # test data 00-999
filetype tests ^[A-Z]{4}$   # ACPI test data
filetype tests ^[A-Z]{4}\.*$   # ACPI test data
filetype tests \.out$
filetype tests \.out\.nocache$
filetype tests \.err$
filetype tests \.exit$      # bad-if-FOO.exit etc
filetype tests \.decode$
filetype tests \.yml$        # travis/shippable config

#
# Development documentation files (for hacking generally)
#
filetype devel-doc ^readme.*$
filetype devel-doc ^changelog.*
filetype devel-doc ^hacking.*$
filetype devel-doc ^licen(s|c)e.*$
filetype devel-doc ^copying.*$
filetype devel-doc ^MAINTAINERS$
filetype devel-doc ^BSD-2-Clause$
filetype devel-doc ^BSD-3-Clause$
filetype devel-doc ^GPL-2.0$
filetype devel-doc \.txt$
filetype devel-doc \.rst$
filetype devel-doc \.texi$
filetype devel-doc \.pod$

#
# Building, compiling, and configuration admin files
#
filetype build configure.*$
filetype build Makefile$
filetype build Makefile\.*$
filetype build config$
filetype build conf$
filetype build \.cfg$
filetype build \.mk$
filetype build \.mak$
filetype build \.docker$
filetype build \.pre$
filetype build ^.gitignore$
filetype build ^.gitmodules$
filetype build ^.gitpublish$
filetype build ^.mailmap$
filetype build ^.dir-locals.el$
filetype build ^.editorconfig$
filetype build ^.exrc$
filetype build ^.gdbinit$
filetype build \.cocci$         # Coccinelle semantic patches

#
# Misc blobs
#
filetype blobs \.bin$
filetype blobs \.dtb$
filetype blobs \.dts$
filetype blobs \.rom$
filetype blobs \.img$
filetype blobs \.ndrv$
filetype blobs \.bmp$
filetype blobs \.svg$
filetype blobs ^pi_10.com$


#
# Documentation files
#
filetype documentation \.html$
filetype documentation \.txt$
filetype documentation \.texi$
filetype documentation \.po$            # translation files
