package org.eclipse.papyrus.designer.languages.c.codegen.doxygen

import static extension org.eclipse.papyrus.designer.languages.c.codegen.lib.commonScript.*
import org.eclipse.uml2.uml.Model
import org.eclipse.uml2.uml.Package

class doxyfileScript {
	def public static doxyfileScript(Model model) '''
		// This template is called by the main module file 
		#---------------------------------------------------------------------------
		# Project related configuration options
		#---------------------------------------------------------------------------
		PROJECT_NAME           = «model.genName»
		PROJECT_NUMBER         = 
		OUTPUT_DIRECTORY       = ./docs/
		CREATE_SUBDIRS         = NO
		OUTPUT_LANGUAGE        = English
		USE_WINDOWS_ENCODING   = NO
		BRIEF_MEMBER_DESC      = YES
		REPEAT_BRIEF           = YES
		ABBREVIATE_BRIEF       = 
		ALWAYS_DETAILED_SEC    = NO
		INLINE_INHERITED_MEMB  = NO
		FULL_PATH_NAMES        = NO
		STRIP_FROM_PATH        = 
		STRIP_FROM_INC_PATH    = 
		SHORT_NAMES            = NO
		JAVADOC_AUTOBRIEF      = NO
		MULTILINE_CPP_IS_BRIEF = NO
		DETAILS_AT_TOP         = NO
		INHERIT_DOCS           = YES
		SEPARATE_MEMBER_PAGES  = NO
		TAB_SIZE               = 4
		ALIASES                = 
		OPTIMIZE_OUTPUT_FOR_C  = YES
		OPTIMIZE_OUTPUT_JAVA   = NO
		BUILTIN_STL_SUPPORT    = NO
		DISTRIBUTE_GROUP_DOC   = NO
		SUBGROUPING            = YES
		#---------------------------------------------------------------------------
		# Build related configuration options
		#---------------------------------------------------------------------------
		EXTRACT_ALL            = YES
		EXTRACT_PRIVATE        = NO
		EXTRACT_STATIC         = NO
		EXTRACT_LOCAL_CLASSES  = YES
		EXTRACT_LOCAL_METHODS  = NO
		HIDE_UNDOC_MEMBERS     = YES
		HIDE_UNDOC_CLASSES     = YES
		HIDE_FRIEND_COMPOUNDS  = NO
		HIDE_IN_BODY_DOCS      = NO
		INTERNAL_DOCS          = NO
		CASE_SENSE_NAMES       = YES
		HIDE_SCOPE_NAMES       = NO
		SHOW_INCLUDE_FILES     = YES
		INLINE_INFO            = YES
		SORT_MEMBER_DOCS       = YES
		SORT_BRIEF_DOCS        = NO
		SORT_BY_SCOPE_NAME     = NO
		GENERATE_TODOLIST      = YES
		GENERATE_TESTLIST      = YES
		GENERATE_BUGLIST       = YES
		GENERATE_DEPRECATEDLIST= YES
		ENABLED_SECTIONS       = 
		MAX_INITIALIZER_LINES  = 30
		SHOW_USED_FILES        = YES
		SHOW_DIRECTORIES       = YES
		FILE_VERSION_FILTER    = 
		#---------------------------------------------------------------------------
		# configuration options related to warning and progress messages
		#---------------------------------------------------------------------------
		QUIET                  = NO
		WARNINGS               = YES
		WARN_IF_UNDOCUMENTED   = YES
		WARN_IF_DOC_ERROR      = YES
		WARN_NO_PARAMDOC       = NO
		WARN_FORMAT            = "$file:$line: $text"
		WARN_LOGFILE           = 
		#---------------------------------------------------------------------------
		# configuration options related to the input files
		#---------------------------------------------------------------------------
		INPUT                  = «model.genPackagePaths»
		FILE_PATTERNS          = *.c \
		                         *.h
		RECURSIVE              = YES
		EXCLUDE                = 
		EXCLUDE_SYMLINKS       = NO
		EXCLUDE_PATTERNS       = 
		EXAMPLE_PATH           = 
		EXAMPLE_PATTERNS       = 
		EXAMPLE_RECURSIVE      = NO
		IMAGE_PATH             = ./docs/pictures/
		INPUT_FILTER           = 
		FILTER_PATTERNS        = 
		FILTER_SOURCE_FILES    = NO
		#---------------------------------------------------------------------------
		# configuration options related to source browsing
		#---------------------------------------------------------------------------
		SOURCE_BROWSER         = YES
		INLINE_SOURCES         = YES
		STRIP_CODE_COMMENTS    = YES
		REFERENCED_BY_RELATION = YES
		REFERENCES_RELATION    = YES
		REFERENCES_LINK_SOURCE = YES
		USE_HTAGS              = NO
		VERBATIM_HEADERS       = YES
		#---------------------------------------------------------------------------
		# configuration options related to the alphabetical class index
		#---------------------------------------------------------------------------
		ALPHABETICAL_INDEX     = YES
		COLS_IN_ALPHA_INDEX    = 5
		IGNORE_PREFIX          = 
		#---------------------------------------------------------------------------
		# configuration options related to the HTML output
		#---------------------------------------------------------------------------
		GENERATE_HTML          = YES
		HTML_OUTPUT            = html
		HTML_FILE_EXTENSION    = .html
		HTML_HEADER            = 
		HTML_FOOTER            = 
		HTML_STYLESHEET        = 
		HTML_ALIGN_MEMBERS     = YES
		GENERATE_HTMLHELP      = NO
		CHM_FILE               = 
		HHC_LOCATION           = 
		GENERATE_CHI           = NO
		BINARY_TOC             = NO
		TOC_EXPAND             = NO
		DISABLE_INDEX          = NO
		ENUM_VALUES_PER_LINE   = 4
		GENERATE_TREEVIEW      = YES
		TREEVIEW_WIDTH         = 250
		#---------------------------------------------------------------------------
		# configuration options related to the LaTeX output
		#---------------------------------------------------------------------------
		GENERATE_LATEX         = NO
		LATEX_OUTPUT           = latex
		LATEX_CMD_NAME         = latex
		MAKEINDEX_CMD_NAME     = makeindex
		COMPACT_LATEX          = NO
		PAPER_TYPE             = a4wide
		EXTRA_PACKAGES         = 
		LATEX_HEADER           = 
		PDF_HYPERLINKS         = NO
		USE_PDFLATEX           = NO
		LATEX_BATCHMODE        = NO
		LATEX_HIDE_INDICES     = NO
		#---------------------------------------------------------------------------
		# configuration options related to the RTF output
		#---------------------------------------------------------------------------
		GENERATE_RTF           = NO
		RTF_OUTPUT             = rtf
		COMPACT_RTF            = NO
		RTF_HYPERLINKS         = NO
		RTF_STYLESHEET_FILE    = 
		RTF_EXTENSIONS_FILE    = 
		#---------------------------------------------------------------------------
		# configuration options related to the man page output
		#---------------------------------------------------------------------------
		GENERATE_MAN           = NO
		MAN_OUTPUT             = man
		MAN_EXTENSION          = .3
		MAN_LINKS              = NO
		#---------------------------------------------------------------------------
		# configuration options related to the XML output
		#---------------------------------------------------------------------------
		GENERATE_XML           = NO
		XML_OUTPUT             = xml
		XML_SCHEMA             = 
		XML_DTD                = 
		XML_PROGRAMLISTING     = YES
		#---------------------------------------------------------------------------
		# configuration options for the AutoGen Definitions output
		#---------------------------------------------------------------------------
		GENERATE_AUTOGEN_DEF   = NO
		#---------------------------------------------------------------------------
		# configuration options related to the Perl module output
		#---------------------------------------------------------------------------
		GENERATE_PERLMOD       = NO
		PERLMOD_LATEX          = NO
		PERLMOD_PRETTY         = YES
		PERLMOD_MAKEVAR_PREFIX = 
		#---------------------------------------------------------------------------
		# Configuration options related to the preprocessor   
		#---------------------------------------------------------------------------
		ENABLE_PREPROCESSING   = YES
		MACRO_EXPANSION        = NO
		EXPAND_ONLY_PREDEF     = NO
		SEARCH_INCLUDES        = YES
		INCLUDE_PATH           = 
		INCLUDE_FILE_PATTERNS  = 
		PREDEFINED             = 
		EXPAND_AS_DEFINED      = 
		SKIP_FUNCTION_MACROS   = YES
		#---------------------------------------------------------------------------
		# Configuration.additions related to external references   
		#---------------------------------------------------------------------------
		TAGFILES               = 
		GENERATE_TAGFILE       = 
		ALLEXTERNALS           = NO
		EXTERNAL_GROUPS        = YES
		PERL_PATH              = /usr/bin/perl
		#---------------------------------------------------------------------------
		# Configuration options related to the dot tool   
		#---------------------------------------------------------------------------
		CLASS_DIAGRAMS         = YES
		HIDE_UNDOC_RELATIONS   = YES
		HAVE_DOT               = YES
		CLASS_GRAPH            = YES
		COLLABORATION_GRAPH    = YES
		GROUP_GRAPHS           = YES
		UML_LOOK               = YES
		TEMPLATE_RELATIONS     = YES
		INCLUDE_GRAPH          = YES
		INCLUDED_BY_GRAPH      = YES
		CALL_GRAPH             = YES
		CALLER_GRAPH           = YES
		GRAPHICAL_HIERARCHY    = YES
		DIRECTORY_GRAPH        = YES
		DOT_IMAGE_FORMAT       = png
		DOT_PATH               = 
		DOTFILE_DIRS           = 
		MAX_DOT_GRAPH_WIDTH    = 1024
		MAX_DOT_GRAPH_HEIGHT   = 1024
		MAX_DOT_GRAPH_DEPTH    = 0
		DOT_TRANSPARENT        = NO
		DOT_MULTI_TARGETS      = NO
		GENERATE_LEGEND        = YES
		DOT_CLEANUP            = YES
		#---------------------------------------------------------------------------
		# Configuration.additions related to the search engine   
		#---------------------------------------------------------------------------
		SEARCHENGINE           = NO
	'''


	def public static genPackagePaths(Package pkg) '''
		«pkg.qualifiedName.replace(".", "/")»
	'''
}
