1#------------------------------------------------------------------------------ 2# $File: c-lang,v 1.32 2023/06/16 19:57:19 christos Exp $ 3# c-lang: file(1) magic for C and related languages programs 4# 5# The strength is to beat standard HTML 6 7# BCPL 80 search/8192 "libhdr" BCPL source text 9!:mime text/x-bcpl 100 search/8192 "LIBHDR" BCPL source text 11!:mime text/x-bcpl 12 13# C 14# Check for class if include is found, otherwise class is beaten by include because of lowered strength 150 search/8192 #include 16>0 regex \^#include C 17>>0 regex \^class[[:space:]]+ 18>>>&0 regex \\{[\.\*]\\}(;)?$ \b++ 19>>&0 clear x source text 20!:strength + 15 21!:mime text/x-c 220 search/8192 pragma 23>0 regex \^#[[:space:]]*pragma C source text 24!:mime text/x-c 250 search/8192 endif 26>0 regex \^#[[:space:]]*(if\|ifn)def 27>>&0 regex \^#[[:space:]]*endif$ C source text 28!:mime text/x-c 290 search/8192 define 30>0 regex \^#[[:space:]]*(if\|ifn)def 31>>&0 regex \^#[[:space:]]*define C source text 32!:mime text/x-c 330 search/8192 char 34>0 regex \^[[:space:]]*char(\ \\*|\\*)(.+)(=.*)?;[[:space:]]*$ C source text 35!:mime text/x-c 360 search/8192 double 37>0 regex \^[[:space:]]*double(\ \\*|\\*)(.+)(=.*)?;[[:space:]]*$ C source text 38!:mime text/x-c 390 search/8192 extern 40>0 regex \^[[:space:]]*extern[[:space:]]+ C source text 41!:mime text/x-c 420 search/8192 float 43>0 regex \^[[:space:]]*float(\ \\*|\\*)(.+)(=.*)?;[[:space:]]*$ C source text 44!:mime text/x-c 450 search/8192 struct 46>0 regex \^struct[[:space:]]+ C source text 47!:mime text/x-c 480 search/8192 union 49>0 regex \^union[[:space:]]+ C source text 50!:mime text/x-c 510 search/8192 main( 52>&0 search/64 String Java source text 53!:mime text/x-java 54>&0 default x 55>>&0 regex \\)[[:space:]]*\\{ C source text 56!:mime text/x-c 57 58# C++ 59# The strength of these rules is increased so they beat the C rules above 600 search/8192 namespace 61>0 regex \^namespace[[:space:]]+[_[:alpha:]]{1,30}[[:space:]]*\\{ C++ source text 62!:strength + 30 63!:mime text/x-c++ 64# using namespace [namespace] or using std::[lib] 650 search/8192 using 66>0 regex \^using[[:space:]]+(namespace\ )?std(::)?[[:alpha:]]*[[:space:]]*; C++ source text 67!:strength + 30 68!:mime text/x-c++ 690 search/8192 template 70>0 regex \^[[:space:]]*template[[:space:]]*<.*>[[:space:]]*$ C++ source text 71!:strength + 30 72!:mime text/x-c++ 730 search/8192 virtual 74>0 regex \^[[:space:]]*virtual[[:space:]]+.*[};][[:space:]]*$ C++ source text 75!:strength + 30 76!:mime text/x-c++ 77# But class alone is reduced to avoid beating php (Jens Schleusener) 780 search/8192 class 79>0 regex \^[[:space:]]*class[[:space:]]+[[:digit:][:alpha:]:_]+[[:space:]]*\\{(.*[\n]*)*\\}(;)?$ C++ source text 80!:strength + 13 81!:mime text/x-c++ 820 search/8192 public 83>0 regex \^[[:space:]]*public: C++ source text 84!:strength + 30 85!:mime text/x-c++ 860 search/8192 private 87>0 regex \^[[:space:]]*private: C++ source text 88!:strength + 30 89!:mime text/x-c++ 900 search/8192 protected 91>0 regex \^[[:space:]]*protected: C++ source text 92!:strength + 30 93!:mime text/x-c++ 94 95# Objective-C 960 search/8192 #import 97>0 regex \^#import[[:space:]]+["<] Objective-C source text 98!:strength + 25 99!:mime text/x-objective-c 100 101# From: Mikhail Teterin <mi@aldan.algebra.com> 1020 string cscope cscope reference data 103>7 string x version %.2s 104# We skip the path here, because it is often long (so file will 105# truncate it) and mostly redundant. 106# The inverted index functionality was added some time between 107# versions 11 and 15, so look for -q if version is above 14: 108>7 string >14 109>>10 search/100 \ -q\ with inverted index 110>10 search/100 \ -c\ text (non-compressed) 111