1 /*
2  * This file is part of the Code::Blocks IDE and licensed under the GNU General Public License, version 3
3  * http://www.gnu.org/licenses/gpl-3.0.html
4  *
5  * $Revision: 11443 $
6  * $Id: formattersettings.cpp 11443 2018-08-12 06:23:37Z ollydbg $
7  * $HeadURL: svn://svn.code.sf.net/p/codeblocks/code/branches/release-20.xx/src/plugins/astyle/formattersettings.cpp $
8  */
9 
10 #include <sdk.h>
11 #include "formattersettings.h"
12 #include "astylepredefinedstyles.h"
13 #include <configmanager.h>
14 
FormatterSettings()15 FormatterSettings::FormatterSettings()
16 {
17   //ctor
18 }
19 
~FormatterSettings()20 FormatterSettings::~FormatterSettings()
21 {
22   //dtor
23 }
24 
ApplyTo(astyle::ASFormatter & formatter)25 void FormatterSettings::ApplyTo(astyle::ASFormatter& formatter)
26 {
27   // NOTE: Keep this in sync with DlgFormatterSettings::ApplyTo
28   ConfigManager* cfg = Manager::Get()->GetConfigManager(_T("astyle"));
29 
30   int style = cfg->ReadInt(_T("/style"), 0);
31   switch (style)
32   {
33     case aspsAllman: // Allman (ANSI)
34       formatter.setFormattingStyle(astyle::STYLE_ALLMAN);
35       break;
36 
37     case aspsJava: // Java
38       formatter.setFormattingStyle(astyle::STYLE_JAVA);
39       break;
40 
41     case aspsKr: // K&R
42       formatter.setFormattingStyle(astyle::STYLE_KR);
43       break;
44 
45     case aspsStroustrup: // Stroustrup
46       formatter.setFormattingStyle(astyle::STYLE_STROUSTRUP);
47       break;
48 
49     case aspsWhitesmith: // Whitesmith
50       formatter.setFormattingStyle(astyle::STYLE_WHITESMITH);
51       break;
52 
53     case aspsVTK: // VTK
54       formatter.setFormattingStyle(astyle::STYLE_VTK);
55       break;
56 
57     case aspsRatliff: // Ratliff
58       formatter.setFormattingStyle(astyle::STYLE_RATLIFF);
59       break;
60 
61     case aspsGnu: // GNU
62       formatter.setFormattingStyle(astyle::STYLE_GNU);
63       break;
64 
65     case aspsLinux: // Linux
66       formatter.setFormattingStyle(astyle::STYLE_LINUX);
67       break;
68 
69     case aspsHorstmann: // Horstmann
70       formatter.setFormattingStyle(astyle::STYLE_HORSTMANN);
71       break;
72 
73     case asps1TBS: // 1TBS
74       formatter.setFormattingStyle(astyle::STYLE_1TBS);
75       break;
76 
77     case aspsGoogle: // Google
78       formatter.setFormattingStyle(astyle::STYLE_GOOGLE);
79       break;
80 
81     case aspsMozilla: // Mozilla
82       formatter.setFormattingStyle(astyle::STYLE_MOZILLA);
83       break;
84 
85     case aspsPico: // Pico
86       formatter.setFormattingStyle(astyle::STYLE_PICO);
87       break;
88 
89     case aspsLisp: // Lisp
90       formatter.setFormattingStyle(astyle::STYLE_LISP);
91       break;
92 
93     default: // Custom
94       break;
95   }
96 
97   formatter.setAttachClass(cfg->ReadBool(_T("/attach_classes")));
98   formatter.setAttachExternC(cfg->ReadBool(_T("/attach_extern_c")));
99   formatter.setAttachNamespace(cfg->ReadBool(_T("/attach_namespaces")));
100   formatter.setAttachInline(cfg->ReadBool(_T("/attach_inlines")));
101 
102   int spaceNum = cfg->ReadInt(_T("/indentation"), 4);
103   bool value = cfg->ReadBool(_T("/force_tabs"));
104   if (cfg->ReadBool(_T("/use_tabs")))
105     formatter.setTabIndentation(spaceNum, value);
106   else
107     formatter.setSpaceIndentation(spaceNum);
108 
109   int contNum = cfg->ReadInt(_T("/continuation"), 0);
110   if (contNum>0 && contNum<=4)
111     formatter.setContinuationIndentation(contNum);
112 
113   formatter.setCaseIndent(cfg->ReadBool(_T("/indent_case")));
114   formatter.setClassIndent(cfg->ReadBool(_T("/indent_classes")));
115   formatter.setLabelIndent(cfg->ReadBool(_T("/indent_labels")));
116   formatter.setModifierIndent(cfg->ReadBool(_T("/indent_modifiers")));
117   formatter.setNamespaceIndent(cfg->ReadBool(_T("/indent_namespaces")));
118   formatter.setSwitchIndent(cfg->ReadBool(_T("/indent_switches")));
119   formatter.setPreprocBlockIndent(cfg->ReadBool(_T("/indent_preproc_block")));
120   formatter.setPreprocDefineIndent(cfg->ReadBool(_T("/indent_preproc_define")));
121   formatter.setPreprocConditionalIndent(cfg->ReadBool(_T("/indent_preproc_cond")));
122   formatter.setIndentCol1CommentsMode(cfg->ReadBool(_T("/indent_col1_comments")));
123   formatter.setMinConditionalIndentOption(cfg->ReadInt(_T("/min_conditional_indent"), 2));
124   formatter.setMaxInStatementIndentLength(cfg->ReadInt(_T("/max_instatement_indent"), 40));
125 
126   formatter.setBreakClosingHeaderBracesMode(cfg->ReadBool(_T("/break_closing")));
127   formatter.setBreakElseIfsMode(cfg->ReadBool(_T("/break_elseifs")));
128   formatter.setAddBracketsMode(cfg->ReadBool(_T("/add_brackets")));
129   formatter.setAddOneLineBracketsMode(cfg->ReadBool(_T("/add_one_line_brackets")));
130   formatter.setRemoveBracketsMode(cfg->ReadBool(_T("/remove_brackets")));
131   formatter.setBreakOneLineBlocksMode(!cfg->ReadBool(_T("/keep_blocks")));
132   formatter.setBreakOneLineHeadersMode(cfg->ReadBool(_T("/keep_headers")));
133   formatter.setBreakOneLineStatementsMode(!cfg->ReadBool(_T("/keep_statements")));
134   formatter.setTabSpaceConversionMode(cfg->ReadBool(_T("/convert_tabs")));
135   formatter.setCloseTemplatesMode(cfg->ReadBool(_T("/close_templates")));
136   formatter.setStripCommentPrefix(cfg->ReadBool(_T("/remove_comment_prefix")));
137 
138   if (cfg->ReadBool(_T("/break_lines")))
139   {
140     formatter.setMaxCodeLength( wxAtoi(cfg->Read(_T("/max_line_length"))) );
141     formatter.setBreakAfterMode(cfg->ReadBool(_T("/break_after_mode")));
142   }
143   else
144     formatter.setMaxCodeLength(INT_MAX);
145 
146   formatter.setBreakBlocksMode(cfg->ReadBool(_T("/break_blocks")));
147   formatter.setBreakClosingHeaderBlocksMode(cfg->ReadBool(_T("/break_blocks_all")));
148   formatter.setOperatorPaddingMode(cfg->ReadBool(_T("/pad_operators")));
149   formatter.setParensOutsidePaddingMode(cfg->ReadBool(_T("/pad_parentheses_out")));
150   formatter.setParensInsidePaddingMode(cfg->ReadBool(_T("/pad_parentheses_in")));
151   formatter.setParensFirstPaddingMode(cfg->ReadBool(_T("/pad_first_paren_out")));
152   formatter.setParensHeaderPaddingMode(cfg->ReadBool(_T("/pad_header")));
153   formatter.setParensUnPaddingMode(cfg->ReadBool(_T("/unpad_parentheses")));
154   formatter.setCommaPaddingMode(cfg->ReadBool(_T("/pad_comma")));
155   formatter.setDeleteEmptyLinesMode(cfg->ReadBool(_T("/delete_empty_lines")));
156   formatter.setEmptyLineFill(cfg->ReadBool(_T("/fill_empty_lines")));
157 
158   wxString pointerAlign = cfg->Read(_T("/pointer_align"));
159   if      (pointerAlign == _T("Type"))
160     formatter.setPointerAlignment(astyle::PTR_ALIGN_TYPE);
161   else if (pointerAlign == _T("Middle"))
162     formatter.setPointerAlignment(astyle::PTR_ALIGN_MIDDLE);
163   else if (pointerAlign == _T("Name"))
164     formatter.setPointerAlignment(astyle::PTR_ALIGN_NAME);
165   else
166     formatter.setPointerAlignment(astyle::PTR_ALIGN_NONE);
167 
168   wxString referenceAlign = cfg->Read(_T("/reference_align"));
169   if      (referenceAlign == _T("Type"))
170     formatter.setReferenceAlignment(astyle::REF_ALIGN_TYPE);
171   else if (referenceAlign == _T("Middle"))
172     formatter.setReferenceAlignment(astyle::REF_ALIGN_MIDDLE);
173   else if (referenceAlign == _T("Name"))
174     formatter.setReferenceAlignment(astyle::REF_ALIGN_NAME);
175   else
176     formatter.setReferenceAlignment(astyle::REF_ALIGN_NONE);
177 }
178