##########################################################################
#                                                                        #
#  This file is part of Frama-C.                                         #
#                                                                        #
#  Copyright (C) 2007-2024                                               #
#    CEA (Commissariat à l'énergie atomique et aux énergies              #
#         alternatives)                                                  #
#                                                                        #
#  you can redistribute it and/or modify it under the terms of the GNU   #
#  Lesser General Public License as published by the Free Software       #
#  Foundation, version 2.1.                                              #
#                                                                        #
#  It 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 Lesser General Public License for more details.                   #
#                                                                        #
#  See the GNU Lesser General Public License version 2.1                 #
#  for more details (enclosed in the file licenses/LGPLv2.1).            #
#                                                                        #
##########################################################################

# note: the skip directive requires a filename starting by ".*"

#############
# This file #
#############
| "headache_config.txt"      -> frame open:"#" line:"#" close:"#"

##################
# Objective Caml #
##################
| ".*\.mly"      -> frame open:"/*" line:"*" close:"*/"
| ".*\.ml[il4]?.*" -> frame open:"(*" line:"*" close:"*)"

############
# C source #
############
| ".*\.h"      -> frame open:"/*" line:"*" close:"*/"
| ".*\.i"      -> frame open:"/*" line:"*" close:"*/"
| ".*\.c"      -> frame open:"/*" line:"*" close:"*/"
| ".*\.ast"    -> frame open:"//" line:" " close:" "
| ".*\.cc"     -> frame open:"/*" line:"*" close:"*/"

#######
# Asm #
#######
| ".*\.S"      -> frame open:"/*" line:"*" close:"*/"

#############
# Configure #
#############
| ".*config\.h\.in" -> frame open:"/*"  line:"*" close:"*/"
| ".*configure\..*" -> frame open:"#"  line:"#" close:"#"

########
# Dune #
########
| "dune-project"  -> frame open:";;" line:";" close:";;"
| ".*dune-project" -> skip match:"(lang.*"
| "dune-workspace.*" -> frame open:";;" line:";" close:";;"
| ".*dune-workspace.*" -> skip match:"(lang.*"
| "dune"          -> frame open:";;" line:";" close:";;"

############
# Makefile #
############
| ".*makefile.*" -> frame open:"#"  line:"#" close:"#"
| ".*Make.*" -> frame open:"#"  line:"#" close:"#"
| ".*\.mk" -> frame open:"#"  line:"#" close:"#"

#################
# Shell scripts #
#################
| "autocomplete_frama-c" -> frame open: "#" line: "#" close: "#"
| "_frama-c" -> frame open: "#" line: "#" close: "#"
| ".*_frama-c" -> skip match:"#compdef.*"
| ".*\.sh" -> frame open:"#"  line:"#" close:"#"
| ".*\.sh" -> skip match:"#!.*"
| ".*\.sh.comp" -> frame open:"#"  line:"#" close:"#"
| ".*\.sh.comp" -> skip match:"#!.*"
| "frama-c" -> frame open:"#"  line:"#" close:"#"
| ".*frama-c" -> skip match:"#!.*"
| "frama-c-config" -> frame open:"#"  line:"#" close:"#"
| ".*frama-c-config" -> skip match:"#!.*"
| "frama-c-script" -> frame open:"#"  line:"#" close:"#"
| ".*frama-c-script" -> skip match:"#!.*"
| "frama-c-gui" -> frame open:"#"  line:"#" close:"#"
| ".*frama-c-gui" -> skip match:"#!.*"
| "frama-c-gui.byte" -> frame open:"#"  line:"#" close:"#"
| ".*frama-c-gui.byte" -> skip match:"#!.*"
| "frama-c.byte" -> frame open:"#"  line:"#" close:"#"
| ".*frama-c.byte" -> skip match:"#!.*"
| "frama-c.top" -> frame open:"#"  line:"#" close:"#"
| ".*frama-c.top" -> skip match:"#!.*"
| "frama-c.debug" -> frame open:"#"  line:"#" close:"#"
| ".*frama-c.debug" -> skip match:"#!.*"

#############
# Git hooks #
#############
| "pre-commit" -> frame open:"#"  line:"#" close:"#"
| ".*pre-commit" -> skip multiline_match: "#!.*" multiline_match: "# -\*-.*"

###############
# Zsh scripts #
###############
| ".*\.zsh" -> frame open:"#"  line:"#" close:"#"
| ".*\.zsh" -> skip match:"#compdef .*"
| "_frama-c" -> frame open:"#"  line:"#" close:"#"
| ".*_frama-c" -> skip match:"#compdef .*"

################
# Perl scripts #
################
| ".*\.perl" -> frame open:"#"  line:"#" close:"#"
| ".*\.perl" -> skip match:"#!.*"
| "flamegraph.pl" -> frame open:"#"  line:"#" close:"#"
| ".*flamegraph.pl" -> skip match:"#!.*"
| "duplicates.pl" -> frame open:"#"  line:"#" close:"#"
| ".*duplicates.pl" -> skip match:"#!.*"

#########################
# MS-Windows Resources #
#########################
| ".*\.rc" -> frame open:"#"  line:"#" close:"#"

#############
# man pages #
#############
| ".*\.[1-9]" -> frame open:".\\\"" line: "-" close:""

#############
# Why files #
#############
| ".*\.why" -> frame open: "(*" line: "*" close: "*)"
| ".*\.why\.src" -> frame open: "(*" line: "*" close: "*)"

#############
# Alt-Ergo files #
#############
| ".*\.mlw" -> frame open: "(*" line: "*" close: "*)"

#############
# Coq files #
#############
| ".*\.v" -> frame open: "(*" line: "*" close: "*)"

#############
# WP files #
#############
| ".*\.driver" -> frame open: "/*" line: "*" close: "*/"

#####################
# Why3 driver files #
#####################
| ".*\.drv" -> frame open: "(*" line: "*" close: "*)"

#########
# LaTeX #
#########
| ".*\.tex" -> frame open: "%" line: "%" close: "%"
| ".*\.sty" -> frame open: "%" line: "%" close: "%"
| ".*\.bib" -> frame open: "%" line: "%" close: "%"

########
# HTML #
########
| ".*\.htm.*" -> frame open: "<!--" line: "-" close: "-->"

########
# XML #
########
| ".*\.xml" -> frame open: "<!--" line: "-" close: "-->"

#######
# DTD #
#######
| ".*\.dtd" -> frame open: "<!--" line: " " close: "-->"

#######
# XSL #
#######
| ".*\.xsl" -> frame open: "<!--" line: " " close: "-->"

#######
# CSS #
#######
| ".*\.css" -> frame open: "/*" line: "*" close: "*/"
# plug-in's ocamldoc introductions
| "intro_.*\.txt" -> frame open: "#*" line: "*" close: "#"

##########
# PROLOG #
##########
| ".*\.pl" -> frame open: "%" line: "%" close: "%"

##############
# Emacs Lisp #
##############
| ".*\.el" -> frame open: ";" line: ";" close:";"

##########
# Python #
##########

| ".*\.py" -> frame open: "#" line: "#" close:"#"
| ".*\.py" -> skip multiline_match: "#!.*" multiline_match: "# -\*-.*"

##############
# Misc files #
##############
| "make_release" -> frame open:"#"  line:"#" close:"#"
| "FAQ" -> frame open:"#"  line:"#" close:"#"

##############
# JavaScript files #
##############
| ".*\.js"  -> frame open:"/* "  line:"*" close:" */"
| ".*\.ts"  -> frame open:"/* "  line:"*" close:" */"
| ".*\.jsx" -> frame open:"/* "  line:"*" close:" */"
| ".*\.tsx" -> frame open:"/* "  line:"*" close:" */"
