#
# clang-format control file for the FLTK project.
#
# Copyright 2017-2022 by Bill Spitzak and others.
#
# This library is free software. Distribution and use rights are outlined in
# the file "COPYING" which should have been included with this file.  If this
# file is missing or damaged, see the license at:
#
#     https://www.fltk.org/COPYING.php
#
# Please see the following page on how to report bugs and issues:
#
#     https://www.fltk.org/bugs.php
#
#
# Important notes:
#
# This is a preliminary, experimental version of a clang-format control file.
# To use all options including embedded comments to switch formatting
# temporarily off and on in source files (see below) clang-format 3.6
# or later is required.
#
# DO NOT USE WITHOUT CHECKING THE RESULT OF FORMATTING FOR CORRECTNESS
# AND COMPATIBILITY WITH THE FLTK CMP!
# https://www.fltk.org/cmp.php#CODING_STANDARDS
#
# For more information about clang-format please refer to the online docs at:
# https://clang.llvm.org/docs/ClangFormat.html
# https://clang.llvm.org/docs/ClangFormatStyleOptions.html
#
# Embedded comments ("clang-format pragma's") in the source code:
#   // clang-format off
#   // clang-format on
#   /* clang-format off */
#   /* clang-format on */
# can be used to switch clang-format(ting) temporarily off in a source file.
# This is particularly useful for embedded pixmaps and other tables
# like menu arrays that are pre-formatted for better readability.

# The options used for FLTK are based on predefined style options of LLVM,
# which are also the default settings of clang-format.
# For a full list of LLVM settings please use
#   clang-format -style=llvm -dump-config

# FLTK settings (currently experimental).

BasedOnStyle:                                   LLVM

# The Language tag marks C++ options

# Language:                                     Cpp

# The following options override the LLVM style definitions, if set.

# Uncomment one of the following option lines if indenting with tabs
# shall be used. Note: tab spacing is still 8 columns, tabs are only
# used for indents of 8 columns or more.
#
# Option "Always" seems to fail counting columns: comments may not be
# adjusted as expected (as of clang-format 3.6 and 3.8).
# This applies only if "AlignTrailingComments: true" is also set (default).
#
# UseTab can be set to 'Never' (default) or 'ForIndentation' to avoid
# this annoying bug of clang-format.
#
# UseTab:                                       Always
UseTab:                                         Never

# Should we extend code lines beyond 80 columns ?
# Default: 80
ColumnLimit:                                    100

# The FLTK CMP requires that case labels are indented (LLVM: false)
IndentCaseLabels:                               true

# Should we keep two or more consecutive empty lines ?
# LLVM default is 1.

MaxEmptyLinesToKeep:                            2

# Present FLTK source code contains some short blocks and if statements
# in one line, but we should better make it consistent and NOT use the
# following "Allow..." statements (leave them commented out):
#
# LLVM default values:
#
# AllowShortBlocksOnASingleLine:                false
# AllowShortFunctionsOnASingleLine:             All
# AllowShortIfStatementsOnASingleLine:          false
# AllowShortLoopsOnASingleLine:                 false
#
# FLTK values:
# AllowShortBlocksOnASingleLine:                true
# AllowShortIfStatementsOnASingleLine:          true

# Short inline functions in header files are an exception to the above "rule":

AllowShortFunctionsOnASingleLine:               Inline

# The following is particularly useful for macros with continuation lines.
# LLVM default: AlignEscapedNewlinesLeft:       false

AlignEscapedNewlinesLeft:                       true

# Include files should be left as-is until we *know* we can
# sort them without bad side effects.
# LLVM default: true

SortIncludes:                                   false

# Multiple constructor initializers must be on consecutive lines.
# Note: this is NOT (always) true in current FLTK code!

BreakConstructorInitializersBeforeComma:        true

# Constructor initializers will be indented by 2 spaces.
# LLVM default: 4

ConstructorInitializerIndentWidth:              2

# Continuation lines (if automatically wrapped) may be indented differently.
# This does not apply to function call arguments which are aligned to the
# opening bracket.
# LLVM default: 4
# ContinuationIndentWidth:                      2

# Most of FLTK's code uses 'void *p' as opposed to 'void* p'.
# This is particularly useful in combined declarations like:
# int var, var2, *pv, **pp;
# Note: clang-format uses "Right" in such combined declarations anyway,
# so to be consistent the best setting appears to be "Right".
# clang-format can try to derive the setting from code in the file, but this
# is error-prone and can lead to inconsistent settings in different files.
# Note: this also applies to references like 'int &w, int &h', for instance
# in function parameter lists.

DerivePointerAlignment:                         false
PointerAlignment:                               Right
