rubyfb 0.5.7 → 0.5.8

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,14 @@
1
+ v0.5.8 ==
2
+ Merge duplicated code in transaction.execute() and connection.execute()
3
+ Make #fetch() *always* return nil if #exhausted? - pilcrow/look-before-you-leap
4
+ Add Fb1.5 compatible arel adapter - at least to some extent
5
+ Some words of caution here - the Fb1.5 arel implementation will yield WRONG results with union selects
6
+ The Fb15 compatibility mode is turned on by setting Rubyfb::Options.fb15_compat = true in your initialization code
7
+ Pipe up field encoding into Ruby 1.9 strings - fix github issue #3
8
+ The mapping table from firebird to ruby character set names contains some common character sets,
9
+ but is far from complete. The mapping table can be extended/altered in your initializers like this:
10
+ Rubyfb::Options.charset_name_map['FIREBIRD_CHARSET_NAME']='RUBY_CHARSET_NAME'
11
+
1
12
  v0.5.7 ==
2
13
  arel-2.0.7 compatibility - use node.expr for limit/offset clauses
3
14
  activesupport-3.0.3+ compatibility require_library_or_gem location changed
data/Manifest CHANGED
@@ -45,14 +45,17 @@ ext/TypeMap.h
45
45
  ext/extconf.rb
46
46
  ext/rfbint.h
47
47
  ext/rfbsleep.h
48
+ ext/uncrustify.cfg
48
49
  lib/Connection.rb
49
50
  lib/ProcedureCall.rb
50
51
  lib/SQLType.rb
51
52
  lib/active_record/connection_adapters/rubyfb_adapter.rb
52
53
  lib/arel/visitors/rubyfb.rb
54
+ lib/arel/visitors/rubyfb_15compat.rb
53
55
  lib/mkdoc
54
56
  lib/rubyfb.rb
55
57
  lib/rubyfb_lib.so
58
+ lib/rubyfb_options.rb
56
59
  lib/src.rb
57
60
  mswin32fb/fbclient_mingw.def
58
61
  mswin32fb/fbclient_mingw.lib
data/Rakefile CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'echoe'
2
- e = Echoe.new('rubyfb', '0.5.7') do |p|
2
+ e = Echoe.new('rubyfb', '0.5.8') do |p|
3
3
  p.description = "Firebird SQL access library"
4
4
  p.url = "http://rubyforge.org/projects/rubyfb"
5
5
  p.author = "George Georgiev"
data/ext/Blob.c CHANGED
@@ -179,10 +179,8 @@ static VALUE eachBlobSegment(VALUE self) {
179
179
  * @param table The name of the table containing the blob being opened.
180
180
  * @param column The name of the column in the table that contains the
181
181
  * blob.
182
- * @param connection A pointer to the connection to be used in accessing the
183
- * blob.
184
- * @param transaction A pointer to the transaction to be used in accessing
185
- * the blob.
182
+ * @param connection The connection to be used in accessing the blob.
183
+ * @param transaction The transaction to be used in accessing the blob.
186
184
  *
187
185
  * @return A pointer to an allocated and opened BlobHandle structure.
188
186
  *
@@ -190,8 +188,13 @@ static VALUE eachBlobSegment(VALUE self) {
190
188
  BlobHandle *openBlob(ISC_QUAD blobId,
191
189
  char *table,
192
190
  char *column,
193
- isc_db_handle *connection,
194
- isc_tr_handle *transaction) {
191
+ VALUE connection,
192
+ VALUE transaction) {
193
+ ConnectionHandle *cHandle = NULL;
194
+ TransactionHandle *tHandle = NULL;
195
+ Data_Get_Struct(connection, ConnectionHandle, cHandle);
196
+ Data_Get_Struct(transaction, TransactionHandle, tHandle);
197
+
195
198
  BlobHandle *blob = ALLOC(BlobHandle);
196
199
 
197
200
  if(blob != NULL) {
@@ -202,7 +205,7 @@ BlobHandle *openBlob(ISC_QUAD blobId,
202
205
  isc_blob_default_desc(&blob->description,
203
206
  (unsigned char *)table,
204
207
  (unsigned char *)column);
205
- if(isc_open_blob2(status, connection, transaction, &blob->handle, &blobId,
208
+ if(isc_open_blob2(status, &cHandle->handle, &tHandle->handle, &blob->handle, &blobId,
206
209
  0, NULL) == 0) {
207
210
  char items[] = {isc_info_blob_num_segments,
208
211
  isc_info_blob_total_length},
data/ext/Blob.h CHANGED
@@ -39,6 +39,8 @@
39
39
  #include "ruby.h"
40
40
  #define RUBY_H_INCLUDED
41
41
  #endif
42
+ #include "Connection.h"
43
+ #include "Transaction.h"
42
44
 
43
45
  /* Type definitions. */
44
46
  typedef struct {
@@ -55,8 +57,8 @@ extern VALUE cBlob;
55
57
  BlobHandle *openBlob(ISC_QUAD,
56
58
  char *,
57
59
  char *,
58
- isc_db_handle *,
59
- isc_tr_handle *);
60
+ VALUE,
61
+ VALUE);
60
62
  void Init_Blob(VALUE);
61
63
  void blobFree(void *);
62
64
  VALUE initializeBlob(VALUE);
data/ext/Connection.c CHANGED
@@ -143,7 +143,8 @@ static VALUE initializeConnection(int argc, VALUE *argv, VALUE self) {
143
143
  rb_iv_set(self, "@database", argv[0]);
144
144
  rb_iv_set(self, "@user", user);
145
145
  rb_iv_set(self, "@transactions", rb_ary_new());
146
-
146
+ rb_funcall(self, rb_intern("init_m17n"), 0);
147
+
147
148
  return(self);
148
149
  }
149
150
 
@@ -299,30 +300,10 @@ static VALUE connectionToString(VALUE self) {
299
300
  * non-query statement.
300
301
  *
301
302
  */
302
- static VALUE executeOnConnection(VALUE self, VALUE sql, VALUE transaction) {
303
- VALUE results = Qnil,
304
- statement = rb_statement_new(self, transaction, sql, INT2FIX(3));
305
-
306
- results = rb_execute_statement(statement);
307
- if(results != Qnil && rb_obj_is_kind_of(results, rb_cInteger) == Qfalse) {
308
- if(rb_block_given_p()) {
309
- VALUE row = rb_funcall(results, rb_intern("fetch"), 0),
310
- last = Qnil;
311
-
312
- while(row != Qnil) {
313
- last = rb_yield(row);
314
- row = rb_funcall(results, rb_intern("fetch"), 0);
315
- }
316
- rb_funcall(results, rb_intern("close"), 0);
317
- results = last;
318
- }
319
- }
320
- rb_statement_close(statement);
321
-
322
- return(results);
303
+ static VALUE executeOnConnection(VALUE self, VALUE sql, VALUE transaction) {
304
+ return rb_execute_sql(self, transaction, sql);
323
305
  }
324
306
 
325
-
326
307
  /**
327
308
  * This function provides the execute_immediate method for the Connection class.
328
309
  *
data/ext/ResultSet.c CHANGED
@@ -240,7 +240,7 @@ VALUE fetchResultSetEntry(VALUE self) {
240
240
  value;
241
241
 
242
242
  Data_Get_Struct(self, ResultsHandle, results);
243
- if(results->handle != 0) {
243
+ if(results->handle != 0 && !results->exhausted) {
244
244
  VALUE array,number;
245
245
  value = results->procedure_output_fetch_state;
246
246
  if(value < 0) {
data/ext/Statement.c CHANGED
@@ -621,6 +621,40 @@ VALUE rb_execute_statement_for(VALUE statement, VALUE parameters) {
621
621
  }
622
622
 
623
623
 
624
+ /**
625
+ * This function provides a programmatic way of executing a SQL
626
+ * within transaction
627
+ *
628
+ * @param connection A reference to the connection object.
629
+ * @param transaction A reference to the transaction object.
630
+ * @param sql SQL text.
631
+ *
632
+ * @return A reference to the results of executing the statement.
633
+ *
634
+ */
635
+ VALUE rb_execute_sql(VALUE connection, VALUE transaction, VALUE sql) {
636
+ VALUE results = Qnil,
637
+ statement = rb_statement_new(connection, transaction, sql, INT2FIX(3));
638
+
639
+ results = rb_execute_statement(statement);
640
+ if(results != Qnil && rb_obj_is_kind_of(results, rb_cInteger) == Qfalse) {
641
+ if(rb_block_given_p()) {
642
+ VALUE row = rb_funcall(results, rb_intern("fetch"), 0),
643
+ last = Qnil;
644
+
645
+ while(row != Qnil) {
646
+ last = rb_yield(row);
647
+ row = rb_funcall(results, rb_intern("fetch"), 0);
648
+ }
649
+ rb_funcall(results, rb_intern("close"), 0);
650
+ results = last;
651
+ }
652
+ }
653
+ rb_statement_close(statement);
654
+
655
+ return(results);
656
+ }
657
+
624
658
  /**
625
659
  * This method retrieves the type information for a Statement object.
626
660
  *
data/ext/Statement.h CHANGED
@@ -53,6 +53,7 @@ void execute(isc_tr_handle *, isc_stmt_handle *, short, XSQLDA *,
53
53
  VALUE rb_statement_new(VALUE, VALUE, VALUE, VALUE);
54
54
  VALUE rb_execute_statement(VALUE);
55
55
  VALUE rb_execute_statement_for(VALUE, VALUE);
56
+ VALUE rb_execute_sql(VALUE, VALUE, VALUE);
56
57
  VALUE rb_get_statement_type(VALUE);
57
58
  void rb_statement_close(VALUE);
58
59
  void statementFree(void *);
data/ext/Transaction.c CHANGED
@@ -306,25 +306,7 @@ static VALUE executeOnTransaction(VALUE self, VALUE sql) {
306
306
  }
307
307
 
308
308
  connection = rb_ary_entry(list, 0);
309
- statement = rb_statement_new(connection, self, sql, INT2FIX(3));
310
- results = rb_execute_statement(statement);
311
-
312
- if(results != Qnil && rb_obj_is_kind_of(results, rb_cInteger) == Qfalse) {
313
- if(rb_block_given_p()) {
314
- VALUE row = rb_funcall(results, rb_intern("fetch"), 0),
315
- last = Qnil;
316
-
317
- while(row != Qnil) {
318
- last = rb_yield(row);
319
- row = rb_funcall(results, rb_intern("fetch"), 0);
320
- }
321
- rb_funcall(results, rb_intern("close"), 0);
322
- results = last;
323
- }
324
- }
325
- rb_statement_close(statement);
326
-
327
- return(results);
309
+ return rb_execute_sql(connection, self, sql);
328
310
  }
329
311
 
330
312
 
data/ext/TypeMap.c CHANGED
@@ -57,22 +57,46 @@ void populateTimeField(VALUE, XSQLVAR *);
57
57
  void populateTimestampField(VALUE, XSQLVAR *);
58
58
 
59
59
 
60
+ /**
61
+ * This function converts a sql data into ruby string
62
+ * respecting data encoding
63
+ *
64
+ * @param connection The connection object relating to the data
65
+ * @param sqlsubtype SQL subtype of the field (fot character types - used to hold encoding information)
66
+ * @param data A pointer to the sql data
67
+ * @param length Length of the sql data
68
+ *
69
+ * @return A Ruby String object with correct encoding
70
+ *
71
+ */
72
+ VALUE createString(VALUE connection, short sqlsubtype, const char *data, short length) {
73
+ VALUE value = Qnil;
74
+ if (length >= 0) {
75
+ char *array = ALLOC_N(char, length + 1);
76
+ memcpy(array, data, length);
77
+ array[length] = 0;
78
+ value = rb_str_new2(array);
79
+ free(array);
80
+ value = rb_funcall(connection, rb_intern("force_encoding"), 2, value, INT2FIX(sqlsubtype));
81
+ }
82
+ return value;
83
+ }
84
+
60
85
  /**
61
86
  * This function converts a single XSQLVAR entry to a Ruby VALUE type.
62
87
  *
63
88
  * @param entry A pointer to the SQLVAR type containing the data to be
64
89
  * converted.
65
- * @param database A pointer to the database handle relating to the data.
66
- * @param transaction A pointer to the transaction handle relating to the
67
- * data.
90
+ * @param connection The connection object relating to the data.
91
+ * @param transaction The transaction handle relating to the data.
68
92
  *
69
93
  * @return A Ruby type for the XSQLVAR entry. The actual type will depend on
70
94
  * the field type referenced.
71
95
  *
72
96
  */
73
97
  VALUE toValue(XSQLVAR *entry,
74
- isc_db_handle *database,
75
- isc_tr_handle *transaction) {
98
+ VALUE connection,
99
+ VALUE transaction) {
76
100
  VALUE value = rb_ary_new();
77
101
 
78
102
  /* Check for NULL values. */
@@ -98,7 +122,7 @@ VALUE toValue(XSQLVAR *entry,
98
122
  memset(table, 0, 256);
99
123
  memcpy(column, entry->sqlname, entry->sqlname_length);
100
124
  memcpy(table, entry->relname, entry->relname_length);
101
- blob = openBlob(*(ISC_QUAD *)entry->sqldata, column, table, database,
125
+ blob = openBlob(*(ISC_QUAD *)entry->sqldata, column, table, connection,
102
126
  transaction);
103
127
  working = Data_Wrap_Struct(cBlob, NULL, blobFree, blob);
104
128
  rb_ary_push(value, initializeBlob(working));
@@ -166,14 +190,8 @@ VALUE toValue(XSQLVAR *entry,
166
190
  break;
167
191
 
168
192
  case SQL_TEXT: /* Type: CHAR */
169
- array = ALLOC_N(char, entry->sqllen + 1);
170
- if(array != NULL) {
171
- memset(array, 0, entry->sqllen + 1);
172
- memcpy(array, entry->sqldata, entry->sqllen);
173
- rb_ary_push(value, rb_str_new2(array));
174
- rb_ary_push(value, getColumnType(entry));
175
- free(array);
176
- }
193
+ rb_ary_push(value, createString(connection, entry->sqlsubtype, entry->sqldata, entry->sqllen));
194
+ rb_ary_push(value, getColumnType(entry));
177
195
  break;
178
196
 
179
197
  case SQL_TYPE_TIME: /* Type: TIME */
@@ -193,16 +211,8 @@ VALUE toValue(XSQLVAR *entry,
193
211
 
194
212
  case SQL_VARYING:
195
213
  memcpy(&length, entry->sqldata, 2);
196
- if(length >= 0) {
197
- array = ALLOC_N(char, length + 1);
198
- if(array != NULL) {
199
- memset(array, 0, length + 1);
200
- memcpy(array, &entry->sqldata[2], length);
201
- rb_ary_push(value, rb_str_new2(array));
202
- rb_ary_push(value, getColumnType(entry));
203
- free(array);
204
- }
205
- }
214
+ rb_ary_push(value, createString(connection, entry->sqlsubtype, &entry->sqldata[2], length));
215
+ rb_ary_push(value, getColumnType(entry));
206
216
  break;
207
217
 
208
218
  default:
@@ -233,17 +243,13 @@ VALUE toArray(VALUE results) {
233
243
  transaction = rb_iv_get(results, "@transaction"),
234
244
  connection = rb_iv_get(results, "@connection");
235
245
  XSQLVAR *entry = NULL;
236
- ConnectionHandle *cHandle = NULL;
237
246
  ResultsHandle *rHandle = NULL;
238
- TransactionHandle *tHandle = NULL;
239
247
  int i;
240
248
 
241
- Data_Get_Struct(connection, ConnectionHandle, cHandle);
242
249
  Data_Get_Struct(results, ResultsHandle, rHandle);
243
- Data_Get_Struct(transaction, TransactionHandle, tHandle);
244
250
  entry = rHandle->output->sqlvar;
245
251
  for(i = 0; i < rHandle->output->sqln; i++, entry++) {
246
- VALUE value = toValue(entry, &cHandle->handle, &tHandle->handle);
252
+ VALUE value = toValue(entry, connection, transaction);
247
253
 
248
254
  rb_ary_push(array, value);
249
255
  }
data/ext/TypeMap.h CHANGED
@@ -40,7 +40,6 @@
40
40
  #endif
41
41
 
42
42
  /* Function prototypes. */
43
- VALUE toValue(XSQLVAR *, isc_db_handle *, isc_tr_handle *);
44
43
  VALUE toArray(VALUE);
45
44
  void setParameters(XSQLDA *, VALUE, VALUE);
46
45
  VALUE getModule(const char *);
@@ -0,0 +1,1298 @@
1
+ # Uncrustify 0.55
2
+
3
+ #
4
+ # General options
5
+ #
6
+
7
+ # The type of line endings
8
+ newlines = auto # auto/lf/crlf/cr
9
+
10
+ # The original size of tabs in the input
11
+ input_tab_size = 8 # number
12
+
13
+ # The size of tabs in the output (only used if align_with_tabs=true)
14
+ output_tab_size = 2 # number
15
+
16
+ # The ASCII value of the string escape char, usually 92 (\) or 94 (^). (Pawn)
17
+ string_escape_char = 92 # number
18
+
19
+ # Alternate string escape char for Pawn. Only works right before the quote char.
20
+ string_escape_char2 = 0 # number
21
+
22
+ #
23
+ # Indenting
24
+ #
25
+
26
+ # The number of columns to indent per level.
27
+ # Usually 2, 3, 4, or 8.
28
+ indent_columns = 2 # number
29
+
30
+ # How to use tabs when indenting code
31
+ # 0=spaces only
32
+ # 1=indent with tabs, align with spaces
33
+ # 2=indent and align with tabs
34
+ indent_with_tabs = 0 # number
35
+
36
+ # Whether to indent strings broken by '\' so that they line up
37
+ indent_align_string = true # false/true
38
+
39
+ # The number of spaces to indent multi-line XML strings.
40
+ # Requires indent_align_string=True
41
+ indent_xml_string = 0 # number
42
+
43
+ # Spaces to indent '{' from level
44
+ indent_brace = 0 # number
45
+
46
+ # Whether braces are indented to the body level
47
+ indent_braces = false # false/true
48
+
49
+ # Disabled indenting function braces if indent_braces is true
50
+ indent_braces_no_func = false # false/true
51
+
52
+ # Indent based on the size of the brace parent, i.e. 'if' => 3 spaces, 'for' => 4 spaces, etc.
53
+ indent_brace_parent = false # false/true
54
+
55
+ # Whether the 'namespace' body is indented
56
+ indent_namespace = true # false/true
57
+
58
+ # The number of spaces to indent a namespace block
59
+ indent_namespace_level = 0 # number
60
+
61
+ # If the body of the namespace is longer than this number, it won't be indented.
62
+ # Requires indent_namespace=true. Default=0 (no limit)
63
+ indent_namespace_limit = 0 # number
64
+
65
+ # Whether the 'extern "C"' body is indented
66
+ indent_extern = false # false/true
67
+
68
+ # Whether the 'class' body is indented
69
+ indent_class = false # false/true
70
+
71
+ # Whether to indent the stuff after a leading class colon
72
+ indent_class_colon = false # false/true
73
+
74
+ # False=treat 'else\nif' as 'else if' for indenting purposes
75
+ # True=indent the 'if' one level
76
+ indent_else_if = false # false/true
77
+
78
+ # Amount to indent variable declarations after a open brace. neg=relative, pos=absolute
79
+ indent_var_def_blk = 0 # number
80
+
81
+ # True: indent continued function call parameters one indent level
82
+ # False: align parameters under the open paren
83
+ indent_func_call_param = false # false/true
84
+
85
+ # Same as indent_func_call_param, but for function defs
86
+ indent_func_def_param = false # false/true
87
+
88
+ # Same as indent_func_call_param, but for function protos
89
+ indent_func_proto_param = false # false/true
90
+
91
+ # Same as indent_func_call_param, but for class declarations
92
+ indent_func_class_param = false # false/true
93
+
94
+ # Same as indent_func_call_param, but for class variable constructors
95
+ indent_func_ctor_var_param = false # false/true
96
+
97
+ # Same as indent_func_call_param, but for templates
98
+ indent_template_param = false # false/true
99
+
100
+ # Double the indent for indent_func_xxx_param options
101
+ indent_func_param_double = false # false/true
102
+
103
+ # Indentation column for standalone 'const' function decl/proto qualifier
104
+ indent_func_const = 0 # number
105
+
106
+ # Indentation column for standalone 'throw' function decl/proto qualifier
107
+ indent_func_throw = 0 # number
108
+
109
+ # The number of spaces to indent a continued '->' or '.'
110
+ # Usually set to 0, 1, or indent_columns.
111
+ indent_member = 0 # number
112
+
113
+ # Spaces to indent single line ('//') comments on lines before code
114
+ indent_sing_line_comments = 0 # number
115
+
116
+ # If set, will indent trailing single line ('//') comments relative
117
+ # to the code instead of trying to keep the same absolute column
118
+ indent_relative_single_line_comments = false # false/true
119
+
120
+ # Spaces to indent 'case' from 'switch'
121
+ # Usually 0 or indent_columns.
122
+ indent_switch_case = 0 # number
123
+
124
+ # Spaces to shift the 'case' line, without affecting any other lines
125
+ # Usually 0.
126
+ indent_case_shift = 0 # number
127
+
128
+ # Spaces to indent '{' from 'case'.
129
+ # By default, the brace will appear under the 'c' in case.
130
+ # Usually set to 0 or indent_columns.
131
+ indent_case_brace = 0 # number
132
+
133
+ # Whether to indent comments found in first column
134
+ indent_col1_comment = false # false/true
135
+
136
+ # How to indent goto labels
137
+ # >0 : absolute column where 1 is the leftmost column
138
+ # <=0 : subtract from brace indent
139
+ indent_label = 1 # number
140
+
141
+ # Same as indent_label, but for access specifiers that are followed by a colon
142
+ indent_access_spec = 1 # number
143
+
144
+ # Indent the code after an access specifier by one level.
145
+ # If set, this option forces 'indent_access_spec=0'
146
+ indent_access_spec_body = false # false/true
147
+
148
+ # If an open paren is followed by a newline, indent the next line so that it lines up after the open paren (not recommended)
149
+ indent_paren_nl = false # false/true
150
+
151
+ # Controls the indent of a close paren after a newline.
152
+ # 0: Indent to body level
153
+ # 1: Align under the open paren
154
+ # 2: Indent to the brace level
155
+ indent_paren_close = 1 # number
156
+
157
+ # Controls the indent of a comma when inside a paren.If TRUE, aligns under the open paren
158
+ indent_comma_paren = false # false/true
159
+
160
+ # Controls the indent of a BOOL operator when inside a paren.If TRUE, aligns under the open paren
161
+ indent_bool_paren = false # false/true
162
+
163
+ # If an open square is followed by a newline, indent the next line so that it lines up after the open square (not recommended)
164
+ indent_square_nl = false # false/true
165
+
166
+ # Don't change the relative indent of ESQL/C 'EXEC SQL' bodies
167
+ indent_preserve_sql = false # false/true
168
+
169
+ # Align continued statements at the '='. Default=True
170
+ # If FALSE or the '=' is followed by a newline, the next line is indent one tab.
171
+ indent_align_assign = true # false/true
172
+
173
+ #
174
+ # Spacing options
175
+ #
176
+
177
+ # Add or remove space around arithmetic operator '+', '-', '/', '*', etc
178
+ sp_arith = ignore # ignore/add/remove/force
179
+
180
+ # Add or remove space around assignment operator '=', '+=', etc
181
+ sp_assign = ignore # ignore/add/remove/force
182
+
183
+ # Add or remove space before assignment operator '=', '+=', etc. Overrides sp_assign.
184
+ sp_before_assign = ignore # ignore/add/remove/force
185
+
186
+ # Add or remove space after assignment operator '=', '+=', etc. Overrides sp_assign.
187
+ sp_after_assign = ignore # ignore/add/remove/force
188
+
189
+ # Add or remove space around assignment '=' in enum
190
+ sp_enum_assign = ignore # ignore/add/remove/force
191
+
192
+ # Add or remove space before assignment '=' in enum. Overrides sp_enum_assign.
193
+ sp_enum_before_assign = ignore # ignore/add/remove/force
194
+
195
+ # Add or remove space after assignment '=' in enum. Overrides sp_enum_assign.
196
+ sp_enum_after_assign = ignore # ignore/add/remove/force
197
+
198
+ # Add or remove space around preprocessor '##' concatenation operator. Default=Add
199
+ sp_pp_concat = add # ignore/add/remove/force
200
+
201
+ # Add or remove space after preprocessor '#' stringify operator. Default=Add
202
+ sp_pp_stringify = add # ignore/add/remove/force
203
+
204
+ # Add or remove space around boolean operators '&&' and '||'
205
+ sp_bool = ignore # ignore/add/remove/force
206
+
207
+ # Add or remove space around compare operator '<', '>', '==', etc
208
+ sp_compare = ignore # ignore/add/remove/force
209
+
210
+ # Add or remove space inside '(' and ')'
211
+ sp_inside_paren = ignore # ignore/add/remove/force
212
+
213
+ # Add or remove space between nested parens
214
+ sp_paren_paren = ignore # ignore/add/remove/force
215
+
216
+ # Whether to balance spaces inside nested parens
217
+ sp_balance_nested_parens = false # false/true
218
+
219
+ # Add or remove space between ')' and '{'
220
+ sp_paren_brace = force # ignore/add/remove/force
221
+
222
+ # Add or remove space before pointer star '*'
223
+ sp_before_ptr_star = ignore # ignore/add/remove/force
224
+
225
+ # Add or remove space before pointer star '*' that isn't followed by a variable name
226
+ # If set to 'ignore', sp_before_ptr_star is used instead.
227
+ sp_before_unnamed_ptr_star = ignore # ignore/add/remove/force
228
+
229
+ # Add or remove space between pointer stars '*'
230
+ sp_between_ptr_star = ignore # ignore/add/remove/force
231
+
232
+ # Add or remove space after pointer star '*', if followed by a word.
233
+ sp_after_ptr_star = ignore # ignore/add/remove/force
234
+
235
+ # Add or remove space after a pointer star '*', if followed by a func proto/def.
236
+ sp_after_ptr_star_func = ignore # ignore/add/remove/force
237
+
238
+ # Add or remove space before a pointer star '*', if followed by a func proto/def.
239
+ sp_before_ptr_star_func = ignore # ignore/add/remove/force
240
+
241
+ # Add or remove space before a reference sign '&'
242
+ sp_before_byref = ignore # ignore/add/remove/force
243
+
244
+ # Add or remove space before a reference sign '&' that isn't followed by a variable name
245
+ # If set to 'ignore', sp_before_byref is used instead.
246
+ sp_before_unnamed_byref = ignore # ignore/add/remove/force
247
+
248
+ # Add or remove space after reference sign '&', if followed by a word.
249
+ sp_after_byref = ignore # ignore/add/remove/force
250
+
251
+ # Add or remove space after a reference sign '&', if followed by a func proto/def.
252
+ sp_after_byref_func = ignore # ignore/add/remove/force
253
+
254
+ # Add or remove space before a reference sign '&', if followed by a func proto/def.
255
+ sp_before_byref_func = ignore # ignore/add/remove/force
256
+
257
+ # Add or remove space between type and word. Default=Force
258
+ sp_after_type = force # ignore/add/remove/force
259
+
260
+ # Add or remove space in 'template <' vs 'template<'.
261
+ # If set to ignore, sp_before_angle is used.
262
+ sp_template_angle = ignore # ignore/add/remove/force
263
+
264
+ # Add or remove space before '<>'
265
+ sp_before_angle = ignore # ignore/add/remove/force
266
+
267
+ # Add or remove space inside '<' and '>'
268
+ sp_inside_angle = ignore # ignore/add/remove/force
269
+
270
+ # Add or remove space after '<>'
271
+ sp_after_angle = ignore # ignore/add/remove/force
272
+
273
+ # Add or remove space between '<>' and '(' as found in 'new List<byte>();'
274
+ sp_angle_paren = ignore # ignore/add/remove/force
275
+
276
+ # Add or remove space between '<>' and a word as in 'List<byte> m;'
277
+ sp_angle_word = ignore # ignore/add/remove/force
278
+
279
+ # Add or remove space before '(' of 'if', 'for', 'switch', and 'while'
280
+ sp_before_sparen = ignore # ignore/add/remove/force
281
+
282
+ # Add or remove space inside if-condition '(' and ')'
283
+ sp_inside_sparen = ignore # ignore/add/remove/force
284
+
285
+ # Add or remove space before if-condition ')'. Overrides sp_inside_sparen.
286
+ sp_inside_sparen_close = ignore # ignore/add/remove/force
287
+
288
+ # Add or remove space after ')' of 'if', 'for', 'switch', and 'while'
289
+ sp_after_sparen = ignore # ignore/add/remove/force
290
+
291
+ # Add or remove space between ')' and '{' of 'if', 'for', 'switch', and 'while'
292
+ sp_sparen_brace = force # ignore/add/remove/force
293
+
294
+ # Add or remove space between 'invariant' and '(' in the D language.
295
+ sp_invariant_paren = ignore # ignore/add/remove/force
296
+
297
+ # Add or remove space after the ')' in 'invariant (C) c' in the D language.
298
+ sp_after_invariant_paren = ignore # ignore/add/remove/force
299
+
300
+ # Add or remove space before empty statement ';' on 'if', 'for' and 'while'
301
+ sp_special_semi = ignore # ignore/add/remove/force
302
+
303
+ # Add or remove space before ';'. Default=Remove
304
+ sp_before_semi = remove # ignore/add/remove/force
305
+
306
+ # Add or remove space before ';' in non-empty 'for' statements
307
+ sp_before_semi_for = ignore # ignore/add/remove/force
308
+
309
+ # Add or remove space before a semicolon of an empty part of a for statement.
310
+ sp_before_semi_for_empty = ignore # ignore/add/remove/force
311
+
312
+ # Add or remove space after ';', except when followed by a comment. Default=Add
313
+ sp_after_semi = add # ignore/add/remove/force
314
+
315
+ # Add or remove space after ';' in non-empty 'for' statements. Default=Force
316
+ sp_after_semi_for = force # ignore/add/remove/force
317
+
318
+ # Add or remove space after the final semicolon of an empty part of a for statement: for ( ; ; <here> ).
319
+ sp_after_semi_for_empty = ignore # ignore/add/remove/force
320
+
321
+ # Add or remove space before '[' (except '[]')
322
+ sp_before_square = ignore # ignore/add/remove/force
323
+
324
+ # Add or remove space before '[]'
325
+ sp_before_squares = ignore # ignore/add/remove/force
326
+
327
+ # Add or remove space inside '[' and ']'
328
+ sp_inside_square = ignore # ignore/add/remove/force
329
+
330
+ # Add or remove space after ','
331
+ sp_after_comma = ignore # ignore/add/remove/force
332
+
333
+ # Add or remove space before ','
334
+ sp_before_comma = remove # ignore/add/remove/force
335
+
336
+ # Add or remove space before the variadic '...' when preceded by a non-punctuator
337
+ sp_before_ellipsis = ignore # ignore/add/remove/force
338
+
339
+ # Add or remove space after class ':'
340
+ sp_after_class_colon = ignore # ignore/add/remove/force
341
+
342
+ # Add or remove space before class ':'
343
+ sp_before_class_colon = ignore # ignore/add/remove/force
344
+
345
+ # Add or remove space before case ':'. Default=Remove
346
+ sp_before_case_colon = remove # ignore/add/remove/force
347
+
348
+ # Add or remove space between 'operator' and operator sign
349
+ sp_after_operator = ignore # ignore/add/remove/force
350
+
351
+ # Add or remove space between the operator symbol and the open paren, as in 'operator ++('
352
+ sp_after_operator_sym = ignore # ignore/add/remove/force
353
+
354
+ # Add or remove space after C/D cast, i.e. 'cast(int)a' vs 'cast(int) a' or '(int)a' vs '(int) a'
355
+ sp_after_cast = ignore # ignore/add/remove/force
356
+
357
+ # Add or remove spaces inside cast parens
358
+ sp_inside_paren_cast = ignore # ignore/add/remove/force
359
+
360
+ # Add or remove space between the type and open paren in a C++ cast, i.e. 'int(exp)' vs 'int (exp)'
361
+ sp_cpp_cast_paren = ignore # ignore/add/remove/force
362
+
363
+ # Add or remove space between 'sizeof' and '('
364
+ sp_sizeof_paren = ignore # ignore/add/remove/force
365
+
366
+ # Add or remove space after the tag keyword (Pawn)
367
+ sp_after_tag = ignore # ignore/add/remove/force
368
+
369
+ # Add or remove space inside enum '{' and '}'
370
+ sp_inside_braces_enum = ignore # ignore/add/remove/force
371
+
372
+ # Add or remove space inside struct/union '{' and '}'
373
+ sp_inside_braces_struct = ignore # ignore/add/remove/force
374
+
375
+ # Add or remove space inside '{' and '}'
376
+ sp_inside_braces = ignore # ignore/add/remove/force
377
+
378
+ # Add or remove space inside '{}'
379
+ sp_inside_braces_empty = ignore # ignore/add/remove/force
380
+
381
+ # Add or remove space between return type and function name
382
+ # A minimum of 1 is forced except for pointer return types.
383
+ sp_type_func = ignore # ignore/add/remove/force
384
+
385
+ # Add or remove space between function name and '(' on function declaration
386
+ sp_func_proto_paren = ignore # ignore/add/remove/force
387
+
388
+ # Add or remove space between function name and '(' on function definition
389
+ sp_func_def_paren = ignore # ignore/add/remove/force
390
+
391
+ # Add or remove space inside empty function '()'
392
+ sp_inside_fparens = ignore # ignore/add/remove/force
393
+
394
+ # Add or remove space inside function '(' and ')'
395
+ sp_inside_fparen = ignore # ignore/add/remove/force
396
+
397
+ # Add or remove space between ']' and '(' when part of a function call.
398
+ sp_square_fparen = ignore # ignore/add/remove/force
399
+
400
+ # Add or remove space between ')' and '{' of function
401
+ sp_fparen_brace = force # ignore/add/remove/force
402
+
403
+ # Add or remove space between function name and '(' on function calls
404
+ sp_func_call_paren = ignore # ignore/add/remove/force
405
+
406
+ # Add or remove space between the user function name and '(' on function calls
407
+ # You need to set a keyword to be a user function, like this: 'set func_call_user _' in the config file.
408
+ sp_func_call_user_paren = ignore # ignore/add/remove/force
409
+
410
+ # Add or remove space between a constructor/destructor and the open paren
411
+ sp_func_class_paren = ignore # ignore/add/remove/force
412
+
413
+ # Add or remove space between 'return' and '('
414
+ sp_return_paren = ignore # ignore/add/remove/force
415
+
416
+ # Add or remove space between '__attribute__' and '('
417
+ sp_attribute_paren = ignore # ignore/add/remove/force
418
+
419
+ # Add or remove space between 'defined' and '(' in '#if defined (FOO)'
420
+ sp_defined_paren = ignore # ignore/add/remove/force
421
+
422
+ # Add or remove space between 'throw' and '(' in 'throw (something)'
423
+ sp_throw_paren = ignore # ignore/add/remove/force
424
+
425
+ # Add or remove space between macro and value
426
+ sp_macro = ignore # ignore/add/remove/force
427
+
428
+ # Add or remove space between macro function ')' and value
429
+ sp_macro_func = ignore # ignore/add/remove/force
430
+
431
+ # Add or remove space between 'else' and '{' if on the same line
432
+ sp_else_brace = force # ignore/add/remove/force
433
+
434
+ # Add or remove space between '}' and 'else' if on the same line
435
+ sp_brace_else = force # ignore/add/remove/force
436
+
437
+ # Add or remove space between '}' and the name of a typedef on the same line
438
+ sp_brace_typedef = force # ignore/add/remove/force
439
+
440
+ # Add or remove space between 'catch' and '{' if on the same line
441
+ sp_catch_brace = force # ignore/add/remove/force
442
+
443
+ # Add or remove space between '}' and 'catch' if on the same line
444
+ sp_brace_catch = force # ignore/add/remove/force
445
+
446
+ # Add or remove space between 'finally' and '{' if on the same line
447
+ sp_finally_brace = force # ignore/add/remove/force
448
+
449
+ # Add or remove space between '}' and 'finally' if on the same line
450
+ sp_brace_finally = force # ignore/add/remove/force
451
+
452
+ # Add or remove space between 'try' and '{' if on the same line
453
+ sp_try_brace = force # ignore/add/remove/force
454
+
455
+ # Add or remove space between get/set and '{' if on the same line
456
+ sp_getset_brace = ignore # ignore/add/remove/force
457
+
458
+ # Add or remove space before the '::' operator
459
+ sp_before_dc = ignore # ignore/add/remove/force
460
+
461
+ # Add or remove space after the '::' operator
462
+ sp_after_dc = ignore # ignore/add/remove/force
463
+
464
+ # Add or remove around the D named array initializer ':' operator
465
+ sp_d_array_colon = ignore # ignore/add/remove/force
466
+
467
+ # Add or remove space after the '!' (not) operator. Default=Remove
468
+ sp_not = remove # ignore/add/remove/force
469
+
470
+ # Add or remove space after the '~' (invert) operator. Default=Remove
471
+ sp_inv = remove # ignore/add/remove/force
472
+
473
+ # Add or remove space after the '&' (address-of) operator. Default=Remove
474
+ # This does not affect the spacing after a '&' that is part of a type.
475
+ sp_addr = remove # ignore/add/remove/force
476
+
477
+ # Add or remove space around the '.' or '->' operators. Default=Remove
478
+ sp_member = remove # ignore/add/remove/force
479
+
480
+ # Add or remove space after the '*' (dereference) operator. Default=Remove
481
+ # This does not affect the spacing after a '*' that is part of a type.
482
+ sp_deref = remove # ignore/add/remove/force
483
+
484
+ # Add or remove space after '+' or '-', as in 'x = -5' or 'y = +7'. Default=Remove
485
+ sp_sign = remove # ignore/add/remove/force
486
+
487
+ # Add or remove space before or after '++' and '--', as in '(--x)' or 'y++;'. Default=Remove
488
+ sp_incdec = remove # ignore/add/remove/force
489
+
490
+ # Add or remove space before a backslash-newline at the end of a line. Default=Add
491
+ sp_before_nl_cont = add # ignore/add/remove/force
492
+
493
+ # Add or remove space after the scope '+' or '-', as in '-(void) foo;' or '+(int) bar;'
494
+ sp_after_oc_scope = ignore # ignore/add/remove/force
495
+
496
+ # Add or remove space after the colon in message specs
497
+ # '-(int) f:(int) x;' vs '-(int) f: (int) x;'
498
+ sp_after_oc_colon = ignore # ignore/add/remove/force
499
+
500
+ # Add or remove space before the colon in message specs
501
+ # '-(int) f: (int) x;' vs '-(int) f : (int) x;'
502
+ sp_before_oc_colon = ignore # ignore/add/remove/force
503
+
504
+ # Add or remove space after the colon in message specs
505
+ # '[object setValue:1];' vs '[object setValue: 1];'
506
+ sp_after_send_oc_colon = ignore # ignore/add/remove/force
507
+
508
+ # Add or remove space before the colon in message specs
509
+ # '[object setValue:1];' vs '[object setValue :1];'
510
+ sp_before_send_oc_colon = ignore # ignore/add/remove/force
511
+
512
+ # Add or remove space after the (type) in message specs
513
+ # '-(int)f: (int) x;' vs '-(int)f: (int)x;'
514
+ sp_after_oc_type = ignore # ignore/add/remove/force
515
+
516
+ # Add or remove space after the first (type) in message specs
517
+ # '-(int) f:(int)x;' vs '-(int)f:(int)x;'
518
+ sp_after_oc_return_type = ignore # ignore/add/remove/force
519
+
520
+ # Add or remove space between '@selector' and '('
521
+ # '@selector(msgName).' vs '@selector (msgName)'
522
+ sp_after_oc_at_sel = ignore # ignore/add/remove/force
523
+
524
+ # Add or remove space before a block pointer caret
525
+ # '^int (int arg){...}' vs. ' ^int (int arg){...}'
526
+ sp_before_oc_block_caret = ignore # ignore/add/remove/force
527
+
528
+ # Add or remove space after a block pointer caret
529
+ # '^int (int arg){...}' vs. '^ int (int arg){...}'
530
+ sp_after_oc_block_caret = ignore # ignore/add/remove/force
531
+
532
+ # Add or remove space around the ':' in 'b ? t : f'
533
+ sp_cond_colon = ignore # ignore/add/remove/force
534
+
535
+ # Add or remove space around the '?' in 'b ? t : f'
536
+ sp_cond_question = ignore # ignore/add/remove/force
537
+
538
+ # Fix the spacing between 'case' and the label. Only 'ignore' and 'force' make sense here.
539
+ sp_case_label = ignore # ignore/add/remove/force
540
+
541
+ # Control the space around the D '..' operator.
542
+ sp_range = ignore # ignore/add/remove/force
543
+
544
+ # Control the space after the opening of a C++ comment '// A' vs '//A'
545
+ sp_cmt_cpp_start = ignore # ignore/add/remove/force
546
+
547
+ # Controls the spaces between #else or #endif and a trailing comment
548
+ sp_endif_cmt = ignore # ignore/add/remove/force
549
+
550
+ #
551
+ # Code alignment (not left column spaces/tabs)
552
+ #
553
+
554
+ # Whether to keep non-indenting tabs
555
+ align_keep_tabs = false # false/true
556
+
557
+ # Whether to use tabs for aligning
558
+ align_with_tabs = false # false/true
559
+
560
+ # Whether to bump out to the next tab when aligning
561
+ align_on_tabstop = false # false/true
562
+
563
+ # Whether to left-align numbers
564
+ align_number_left = false # false/true
565
+
566
+ # Align variable definitions in prototypes and functions
567
+ align_func_params = false # false/true
568
+
569
+ # Align parameters in single-line functions that have the same name.
570
+ # The function names must already be aligned with each other.
571
+ align_same_func_call_params = false # false/true
572
+
573
+ # The span for aligning variable definitions (0=don't align)
574
+ align_var_def_span = 0 # number
575
+
576
+ # How to align the star in variable definitions.
577
+ # 0=Part of the type 'void * foo;'
578
+ # 1=Part of the variable 'void *foo;'
579
+ # 2=Dangling 'void *foo;'
580
+ align_var_def_star_style = 0 # number
581
+
582
+ # How to align the '&' in variable definitions.
583
+ # 0=Part of the type
584
+ # 1=Part of the variable
585
+ # 2=Dangling
586
+ align_var_def_amp_style = 0 # number
587
+
588
+ # The threshold for aligning variable definitions (0=no limit)
589
+ align_var_def_thresh = 0 # number
590
+
591
+ # The gap for aligning variable definitions
592
+ align_var_def_gap = 0 # number
593
+
594
+ # Whether to align the colon in struct bit fields
595
+ align_var_def_colon = false # false/true
596
+
597
+ # Whether to align any attribute after the variable name
598
+ align_var_def_attribute = false # false/true
599
+
600
+ # Whether to align inline struct/enum/union variable definitions
601
+ align_var_def_inline = false # false/true
602
+
603
+ # The span for aligning on '=' in assignments (0=don't align)
604
+ align_assign_span = 0 # number
605
+
606
+ # The threshold for aligning on '=' in assignments (0=no limit)
607
+ align_assign_thresh = 0 # number
608
+
609
+ # The span for aligning on '=' in enums (0=don't align)
610
+ align_enum_equ_span = 0 # number
611
+
612
+ # The threshold for aligning on '=' in enums (0=no limit)
613
+ align_enum_equ_thresh = 0 # number
614
+
615
+ # The span for aligning struct/union (0=don't align)
616
+ align_var_struct_span = 0 # number
617
+
618
+ # The threshold for aligning struct/union member definitions (0=no limit)
619
+ align_var_struct_thresh = 0 # number
620
+
621
+ # The gap for aligning struct/union member definitions
622
+ align_var_struct_gap = 0 # number
623
+
624
+ # The span for aligning struct initializer values (0=don't align)
625
+ align_struct_init_span = 0 # number
626
+
627
+ # The minimum space between the type and the synonym of a typedef
628
+ align_typedef_gap = 0 # number
629
+
630
+ # The span for aligning single-line typedefs (0=don't align)
631
+ align_typedef_span = 0 # number
632
+
633
+ # How to align typedef'd functions with other typedefs
634
+ # 0: Don't mix them at all
635
+ # 1: align the open paren with the types
636
+ # 2: align the function type name with the other type names
637
+ align_typedef_func = 0 # number
638
+
639
+ # Controls the positioning of the '*' in typedefs. Just try it.
640
+ # 0: Align on typedef type, ignore '*'
641
+ # 1: The '*' is part of type name: typedef int *pint;
642
+ # 2: The '*' is part of the type, but dangling: typedef int *pint;
643
+ align_typedef_star_style = 0 # number
644
+
645
+ # Controls the positioning of the '&' in typedefs. Just try it.
646
+ # 0: Align on typedef type, ignore '&'
647
+ # 1: The '&' is part of type name: typedef int &pint;
648
+ # 2: The '&' is part of the type, but dangling: typedef int &pint;
649
+ align_typedef_amp_style = 0 # number
650
+
651
+ # The span for aligning comments that end lines (0=don't align)
652
+ align_right_cmt_span = 0 # number
653
+
654
+ # If aligning comments, mix with comments after '}' and #endif with less than 3 spaces before the comment
655
+ align_right_cmt_mix = false # false/true
656
+
657
+ # If a trailing comment is more than this number of columns away from the text it follows,
658
+ # it will qualify for being aligned.
659
+ align_right_cmt_gap = 0 # number
660
+
661
+ # Align trailing comment at or beyond column N; 'pulls in' comments as a bonus side effect (0=ignore)
662
+ align_right_cmt_at_col = 0 # number
663
+
664
+ # The span for aligning function prototypes (0=don't align)
665
+ align_func_proto_span = 0 # number
666
+
667
+ # Minimum gap between the return type and the function name.
668
+ align_func_proto_gap = 0 # number
669
+
670
+ # Align function protos on the 'operator' keyword instead of what follows
671
+ align_on_operator = false # false/true
672
+
673
+ # Whether to mix aligning prototype and variable declarations.
674
+ # If true, align_var_def_XXX options are used instead of align_func_proto_XXX options.
675
+ align_mix_var_proto = false # false/true
676
+
677
+ # Align single-line functions with function prototypes, uses align_func_proto_span
678
+ align_single_line_func = false # false/true
679
+
680
+ # Aligning the open brace of single-line functions.
681
+ # Requires align_single_line_func=true, uses align_func_proto_span
682
+ align_single_line_brace = false # false/true
683
+
684
+ # Gap for align_single_line_brace.
685
+ align_single_line_brace_gap = 0 # number
686
+
687
+ # The span for aligning ObjC msg spec (0=don't align)
688
+ align_oc_msg_spec_span = 0 # number
689
+
690
+ # Whether to align macros wrapped with a backslash and a newline.
691
+ # This will not work right if the macro contains a multi-line comment.
692
+ align_nl_cont = false # false/true
693
+
694
+ # The minimum space between label and value of a preprocessor define
695
+ align_pp_define_gap = 0 # number
696
+
697
+ # The span for aligning on '#define' bodies (0=don't align)
698
+ align_pp_define_span = 0 # number
699
+
700
+ # Align lines that start with '<<' with previous '<<'. Default=true
701
+ align_left_shift = true # false/true
702
+
703
+ # Span for aligning parameters in an Obj-C message call on the ':' (0=don't align)
704
+ align_oc_msg_colon_span = 0 # number
705
+
706
+ #
707
+ # Newline adding and removing options
708
+ #
709
+
710
+ # Whether to collapse empty blocks between '{' and '}'
711
+ nl_collapse_empty_body = false # false/true
712
+
713
+ # Don't split one-line braced assignments - 'foo_t f = { 1, 2 };'
714
+ nl_assign_leave_one_liners = false # false/true
715
+
716
+ # Don't split one-line braced statements inside a class xx { } body
717
+ nl_class_leave_one_liners = false # false/true
718
+
719
+ # Don't split one-line enums: 'enum foo { BAR = 15 };'
720
+ nl_enum_leave_one_liners = false # false/true
721
+
722
+ # Don't split one-line get or set functions
723
+ nl_getset_leave_one_liners = false # false/true
724
+
725
+ # Don't split one-line function definitions - 'int foo() { return 0; }'
726
+ nl_func_leave_one_liners = false # false/true
727
+
728
+ # Don't split one-line if/else statements - 'if(a) b++;'
729
+ nl_if_leave_one_liners = false # false/true
730
+
731
+ # Add or remove newlines at the start of the file
732
+ nl_start_of_file = ignore # ignore/add/remove/force
733
+
734
+ # The number of newlines at the start of the file (only used if nl_start_of_file is 'add' or 'force'
735
+ nl_start_of_file_min = 0 # number
736
+
737
+ # Add or remove newline at the end of the file
738
+ nl_end_of_file = ignore # ignore/add/remove/force
739
+
740
+ # The number of newlines at the end of the file (only used if nl_end_of_file is 'add' or 'force')
741
+ nl_end_of_file_min = 0 # number
742
+
743
+ # Add or remove newline between '=' and '{'
744
+ nl_assign_brace = ignore # ignore/add/remove/force
745
+
746
+ # Add or remove newline between '=' and '[' (D only)
747
+ nl_assign_square = ignore # ignore/add/remove/force
748
+
749
+ # Add or remove newline after '= [' (D only). Will also affect the newline before the ']'
750
+ nl_after_square_assign = ignore # ignore/add/remove/force
751
+
752
+ # The number of newlines after a block of variable definitions
753
+ nl_func_var_def_blk = 0 # number
754
+
755
+ # Add or remove newline between a function call's ')' and '{', as in:
756
+ # list_for_each(item, &list) { }
757
+ nl_fcall_brace = remove # ignore/add/remove/force
758
+
759
+ # Add or remove newline between 'enum' and '{'
760
+ nl_enum_brace = remove # ignore/add/remove/force
761
+
762
+ # Add or remove newline between 'struct and '{'
763
+ nl_struct_brace = remove # ignore/add/remove/force
764
+
765
+ # Add or remove newline between 'union' and '{'
766
+ nl_union_brace = remove # ignore/add/remove/force
767
+
768
+ # Add or remove newline between 'if' and '{'
769
+ nl_if_brace = remove # ignore/add/remove/force
770
+
771
+ # Add or remove newline between '}' and 'else'
772
+ nl_brace_else = remove # ignore/add/remove/force
773
+
774
+ # Add or remove newline between 'else if' and '{'
775
+ # If set to ignore, nl_if_brace is used instead
776
+ nl_elseif_brace = remove # ignore/add/remove/force
777
+
778
+ # Add or remove newline between 'else' and '{'
779
+ nl_else_brace = remove # ignore/add/remove/force
780
+
781
+ # Add or remove newline between 'else' and 'if'
782
+ nl_else_if = remove # ignore/add/remove/force
783
+
784
+ # Add or remove newline between '}' and 'finally'
785
+ nl_brace_finally = remove # ignore/add/remove/force
786
+
787
+ # Add or remove newline between 'finally' and '{'
788
+ nl_finally_brace = remove # ignore/add/remove/force
789
+
790
+ # Add or remove newline between 'try' and '{'
791
+ nl_try_brace = remove # ignore/add/remove/force
792
+
793
+ # Add or remove newline between get/set and '{'
794
+ nl_getset_brace = remove # ignore/add/remove/force
795
+
796
+ # Add or remove newline between 'for' and '{'
797
+ nl_for_brace = remove # ignore/add/remove/force
798
+
799
+ # Add or remove newline between 'catch' and '{'
800
+ nl_catch_brace = remove # ignore/add/remove/force
801
+
802
+ # Add or remove newline between '}' and 'catch'
803
+ nl_brace_catch = remove # ignore/add/remove/force
804
+
805
+ # Add or remove newline between 'while' and '{'
806
+ nl_while_brace = remove # ignore/add/remove/force
807
+
808
+ # Add or remove newline between two open or close braces.
809
+ # Due to general newline/brace handling, REMOVE may not work.
810
+ nl_brace_brace = ignore # ignore/add/remove/force
811
+
812
+ # Add or remove newline between 'do' and '{'
813
+ nl_do_brace = remove # ignore/add/remove/force
814
+
815
+ # Add or remove newline between '}' and 'while' of 'do' statement
816
+ nl_brace_while = remove # ignore/add/remove/force
817
+
818
+ # Add or remove newline between 'switch' and '{'
819
+ nl_switch_brace = remove # ignore/add/remove/force
820
+
821
+ # Add a newline between ')' and '{' if the ')' is on a different line than the if/for/etc.
822
+ # Overrides nl_for_brace, nl_if_brace, nl_switch_brace, nl_while_switch, and nl_catch_brace.
823
+ nl_multi_line_cond = false # false/true
824
+
825
+ # Force a newline in a define after the macro name for multi-line defines.
826
+ nl_multi_line_define = false # false/true
827
+
828
+ # Whether to put a newline before 'case' statement
829
+ nl_before_case = false # false/true
830
+
831
+ # Add or remove newline between ')' and 'throw'
832
+ nl_before_throw = ignore # ignore/add/remove/force
833
+
834
+ # Whether to put a newline after 'case' statement
835
+ nl_after_case = false # false/true
836
+
837
+ # Newline between namespace and {
838
+ nl_namespace_brace = remove # ignore/add/remove/force
839
+
840
+ # Add or remove newline between 'template<>' and whatever follows.
841
+ nl_template_class = ignore # ignore/add/remove/force
842
+
843
+ # Add or remove newline between 'class' and '{'
844
+ nl_class_brace = remove # ignore/add/remove/force
845
+
846
+ # Add or remove newline after each ',' in the constructor member initialization
847
+ nl_class_init_args = ignore # ignore/add/remove/force
848
+
849
+ # Add or remove newline between return type and function name in a function definition
850
+ nl_func_type_name = ignore # ignore/add/remove/force
851
+
852
+ # Add or remove newline between return type and function name inside a class {}
853
+ # Uses nl_func_type_name or nl_func_proto_type_name if set to ignore.
854
+ nl_func_type_name_class = ignore # ignore/add/remove/force
855
+
856
+ # Add or remove newline between function scope and name in a definition
857
+ # Controls the newline after '::' in 'void A::f() { }'
858
+ nl_func_scope_name = ignore # ignore/add/remove/force
859
+
860
+ # Add or remove newline between return type and function name in a prototype
861
+ nl_func_proto_type_name = ignore # ignore/add/remove/force
862
+
863
+ # Add or remove newline between a function name and the opening '('
864
+ nl_func_paren = ignore # ignore/add/remove/force
865
+
866
+ # Add or remove newline after '(' in a function declaration
867
+ nl_func_decl_start = ignore # ignore/add/remove/force
868
+
869
+ # Overrides nl_func_decl_start when there is only one paramter.
870
+ nl_func_decl_start_single = ignore # ignore/add/remove/force
871
+
872
+ # Add or remove newline after each ',' in a function declaration
873
+ nl_func_decl_args = ignore # ignore/add/remove/force
874
+
875
+ # Add or remove newline before the ')' in a function declaration
876
+ nl_func_decl_end = ignore # ignore/add/remove/force
877
+
878
+ # Overrides nl_func_decl_end when there is only one paramter.
879
+ nl_func_decl_end_single = ignore # ignore/add/remove/force
880
+
881
+ # Add or remove newline between '()' in a function declaration.
882
+ nl_func_decl_empty = ignore # ignore/add/remove/force
883
+
884
+ # Add or remove newline between function signature and '{'
885
+ nl_fdef_brace = remove # ignore/add/remove/force
886
+
887
+ # Whether to put a newline after 'return' statement
888
+ nl_after_return = false # false/true
889
+
890
+ # Add or remove a newline between the return keyword and return expression.
891
+ nl_return_expr = ignore # ignore/add/remove/force
892
+
893
+ # Whether to put a newline after semicolons, except in 'for' statements
894
+ nl_after_semicolon = false # false/true
895
+
896
+ # Whether to put a newline after brace open.
897
+ # This also adds a newline before the matching brace close.
898
+ nl_after_brace_open = false # false/true
899
+
900
+ # If nl_after_brace_open and nl_after_brace_open_cmt are true, a newline is
901
+ # placed between the open brace and a trailing single-line comment.
902
+ nl_after_brace_open_cmt = false # false/true
903
+
904
+ # Whether to put a newline after a virtual brace open with a non-empty body.
905
+ # These occur in un-braced if/while/do/for statement bodies.
906
+ nl_after_vbrace_open = false # false/true
907
+
908
+ # Whether to put a newline after a virtual brace open with an empty body.
909
+ # These occur in un-braced if/while/do/for statement bodies.
910
+ nl_after_vbrace_open_empty = false # false/true
911
+
912
+ # Whether to put a newline after a brace close.
913
+ # Does not apply if followed by a necessary ';'.
914
+ nl_after_brace_close = false # false/true
915
+
916
+ # Whether to alter newlines in '#define' macros
917
+ nl_define_macro = false # false/true
918
+
919
+ # Whether to not put blanks after '#ifxx', '#elxx', or before '#endif'
920
+ nl_squeeze_ifdef = false # false/true
921
+
922
+ # Add or remove newline before 'if'
923
+ nl_before_if = ignore # ignore/add/remove/force
924
+
925
+ # Add or remove newline after 'if'
926
+ nl_after_if = ignore # ignore/add/remove/force
927
+
928
+ # Add or remove newline before 'for'
929
+ nl_before_for = ignore # ignore/add/remove/force
930
+
931
+ # Add or remove newline after 'for'
932
+ nl_after_for = ignore # ignore/add/remove/force
933
+
934
+ # Add or remove newline before 'while'
935
+ nl_before_while = ignore # ignore/add/remove/force
936
+
937
+ # Add or remove newline after 'while'
938
+ nl_after_while = ignore # ignore/add/remove/force
939
+
940
+ # Add or remove newline before 'switch'
941
+ nl_before_switch = ignore # ignore/add/remove/force
942
+
943
+ # Add or remove newline after 'switch'
944
+ nl_after_switch = ignore # ignore/add/remove/force
945
+
946
+ # Add or remove newline before 'do'
947
+ nl_before_do = ignore # ignore/add/remove/force
948
+
949
+ # Add or remove newline after 'do'
950
+ nl_after_do = ignore # ignore/add/remove/force
951
+
952
+ # Whether to double-space commented-entries in struct/enum
953
+ nl_ds_struct_enum_cmt = false # false/true
954
+
955
+ # Whether to double-space before the close brace of a struct/union/enum
956
+ nl_ds_struct_enum_close_brace = false # false/true
957
+
958
+ # Add or remove a newline around a class colon.
959
+ # Related to pos_class_colon, nl_class_init_args, and pos_comma.
960
+ nl_class_colon = ignore # ignore/add/remove/force
961
+
962
+ # Change simple unbraced if statements into a one-liner
963
+ # 'if(b)\n i++;' => 'if(b) i++;'
964
+ nl_create_if_one_liner = false # false/true
965
+
966
+ # Change simple unbraced for statements into a one-liner
967
+ # 'for (i=0;i<5;i++)\n foo(i);' => 'for (i=0;i<5;i++) foo(i);'
968
+ nl_create_for_one_liner = false # false/true
969
+
970
+ # Change simple unbraced while statements into a one-liner
971
+ # 'while (i<5)\n foo(i++);' => 'while (i<5) foo(i++);'
972
+ nl_create_while_one_liner = false # false/true
973
+
974
+ #
975
+ # Positioning options
976
+ #
977
+
978
+ # The position of arithmetic operators in wrapped expressions
979
+ pos_arith = ignore # ignore/lead/trail
980
+
981
+ # The position of assignment in wrapped expressions.
982
+ # Do not affect '=' followed by '{'
983
+ pos_assign = ignore # ignore/lead/trail
984
+
985
+ # The position of boolean operators in wrapped expressions
986
+ pos_bool = ignore # ignore/lead/trail
987
+
988
+ # The position of comparison operators in wrapped expressions
989
+ pos_compare = ignore # ignore/lead/trail
990
+
991
+ # The position of conditional (b ? t : f) operators in wrapped expressions
992
+ pos_conditional = ignore # ignore/lead/trail
993
+
994
+ # The position of the comma in wrapped expressions
995
+ pos_comma = ignore # ignore/lead/trail
996
+
997
+ # The position of the comma in the constructor initialization list
998
+ pos_class_comma = ignore # ignore/lead/trail
999
+
1000
+ # The position of colons between constructor and member initialization
1001
+ pos_class_colon = ignore # ignore/lead/trail
1002
+
1003
+ #
1004
+ # Line Splitting options
1005
+ #
1006
+
1007
+ # Try to limit code width to N number of columns
1008
+ code_width = 0 # number
1009
+
1010
+ # Whether to fully split long 'for' statements at semi-colons
1011
+ ls_for_split_full = false # false/true
1012
+
1013
+ # Whether to fully split long function protos/calls at commas
1014
+ ls_func_split_full = false # false/true
1015
+
1016
+ #
1017
+ # Blank line options
1018
+ #
1019
+
1020
+ # The maximum consecutive newlines
1021
+ nl_max = 0 # number
1022
+
1023
+ # The number of newlines after a function prototype, if followed by another function prototype
1024
+ nl_after_func_proto = 0 # number
1025
+
1026
+ # The number of newlines after a function prototype, if not followed by another function prototype
1027
+ nl_after_func_proto_group = 0 # number
1028
+
1029
+ # The number of newlines after '}' of a multi-line function body
1030
+ nl_after_func_body = 0 # number
1031
+
1032
+ # The number of newlines after '}' of a single line function body
1033
+ nl_after_func_body_one_liner = 0 # number
1034
+
1035
+ # The minimum number of newlines before a multi-line comment.
1036
+ # Doesn't apply if after a brace open or another multi-line comment.
1037
+ nl_before_block_comment = 0 # number
1038
+
1039
+ # The minimum number of newlines before a single-line C comment.
1040
+ # Doesn't apply if after a brace open or other single-line C comments.
1041
+ nl_before_c_comment = 0 # number
1042
+
1043
+ # The minimum number of newlines before a CPP comment.
1044
+ # Doesn't apply if after a brace open or other CPP comments.
1045
+ nl_before_cpp_comment = 0 # number
1046
+
1047
+ # Whether to force a newline after a mulit-line comment.
1048
+ nl_after_multiline_comment = false # false/true
1049
+
1050
+ # The number of newlines before a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label.
1051
+ # Will not change the newline count if after a brace open.
1052
+ # 0 = No change.
1053
+ nl_before_access_spec = 0 # number
1054
+
1055
+ # The number of newlines after a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label.
1056
+ # 0 = No change.
1057
+ nl_after_access_spec = 0 # number
1058
+
1059
+ # The number of newlines between a function def and the function comment.
1060
+ # 0 = No change.
1061
+ nl_comment_func_def = 0 # number
1062
+
1063
+ # The number of newlines after a try-catch-finally block that isn't followed by a brace close.
1064
+ # 0 = No change.
1065
+ nl_after_try_catch_finally = 0 # number
1066
+
1067
+ # The number of newlines before and after a property, indexer or event decl.
1068
+ # 0 = No change.
1069
+ nl_around_cs_property = 0 # number
1070
+
1071
+ # The number of newlines between the get/set/add/remove handlers in C#.
1072
+ # 0 = No change.
1073
+ nl_between_get_set = 0 # number
1074
+
1075
+ # Whether to remove blank lines after '{'
1076
+ eat_blanks_after_open_brace = false # false/true
1077
+
1078
+ # Whether to remove blank lines before '}'
1079
+ eat_blanks_before_close_brace = false # false/true
1080
+
1081
+ #
1082
+ # Code modifying options (non-whitespace)
1083
+ #
1084
+
1085
+ # Add or remove braces on single-line 'do' statement
1086
+ mod_full_brace_do = ignore # ignore/add/remove/force
1087
+
1088
+ # Add or remove braces on single-line 'for' statement
1089
+ mod_full_brace_for = ignore # ignore/add/remove/force
1090
+
1091
+ # Add or remove braces on single-line function definitions. (Pawn)
1092
+ mod_full_brace_function = ignore # ignore/add/remove/force
1093
+
1094
+ # Add or remove braces on single-line 'if' statement. Will not remove the braces if they contain an 'else'.
1095
+ mod_full_brace_if = ignore # ignore/add/remove/force
1096
+
1097
+ # Make all if/elseif/else statements in a chain be braced or not. Overrides mod_full_brace_if.
1098
+ # If any must be braced, they are all braced. If all can be unbraced, then the braces are removed.
1099
+ mod_full_brace_if_chain = false # false/true
1100
+
1101
+ # Don't remove braces around statements that span N newlines
1102
+ mod_full_brace_nl = 0 # number
1103
+
1104
+ # Add or remove braces on single-line 'while' statement
1105
+ mod_full_brace_while = ignore # ignore/add/remove/force
1106
+
1107
+ # Add or remove unnecessary paren on 'return' statement
1108
+ mod_paren_on_return = ignore # ignore/add/remove/force
1109
+
1110
+ # Whether to change optional semicolons to real semicolons
1111
+ mod_pawn_semicolon = false # false/true
1112
+
1113
+ # Add parens on 'while' and 'if' statement around bools
1114
+ mod_full_paren_if_bool = false # false/true
1115
+
1116
+ # Whether to remove superfluous semicolons
1117
+ mod_remove_extra_semicolon = false # false/true
1118
+
1119
+ # If a function body exceeds the specified number of newlines and doesn't have a comment after
1120
+ # the close brace, a comment will be added.
1121
+ mod_add_long_function_closebrace_comment = 0 # number
1122
+
1123
+ # If a switch body exceeds the specified number of newlines and doesn't have a comment after
1124
+ # the close brace, a comment will be added.
1125
+ mod_add_long_switch_closebrace_comment = 0 # number
1126
+
1127
+ # If an #ifdef body exceeds the specified number of newlines and doesn't have a comment after
1128
+ # the #else, a comment will be added.
1129
+ mod_add_long_ifdef_endif_comment = 0 # number
1130
+
1131
+ # If an #ifdef or #else body exceeds the specified number of newlines and doesn't have a comment after
1132
+ # the #endif, a comment will be added.
1133
+ mod_add_long_ifdef_else_comment = 0 # number
1134
+
1135
+ # If TRUE, will sort consecutive single-line 'import' statements [Java, D]
1136
+ mod_sort_import = false # false/true
1137
+
1138
+ # If TRUE, will sort consecutive single-line 'using' statements [C#]
1139
+ mod_sort_using = false # false/true
1140
+
1141
+ # If TRUE, will sort consecutive single-line '#include' statements [C/C++] and '#import' statements [Obj-C]
1142
+ # This is generally a bad idea, as it may break your code.
1143
+ mod_sort_include = false # false/true
1144
+
1145
+ # If TRUE, it will move a 'break' that appears after a fully braced 'case' before the close brace.
1146
+ mod_move_case_break = false # false/true
1147
+
1148
+ # Will add or remove the braces around a fully braced case statement.
1149
+ # Will only remove the braces if there are no variable declarations in the block.
1150
+ mod_case_brace = ignore # ignore/add/remove/force
1151
+
1152
+ # If TRUE, it will remove a void 'return;' that appears as the last statement in a function.
1153
+ mod_remove_empty_return = false # false/true
1154
+
1155
+ #
1156
+ # Comment modifications
1157
+ #
1158
+
1159
+ # Try to wrap comments at cmt_width columns
1160
+ cmt_width = 0 # number
1161
+
1162
+ # Set the comment reflow mode (default: 0)
1163
+ # 0: no reflowing (apart from the line wrapping due to cmt_width)
1164
+ # 1: no touching at all
1165
+ # 2: full reflow
1166
+ cmt_reflow_mode = 0 # number
1167
+
1168
+ # If false, disable all multi-line comment changes, including cmt_width and leading chars.
1169
+ # Default is true.
1170
+ cmt_indent_multi = true # false/true
1171
+
1172
+ # Whether to group c-comments that look like they are in a block
1173
+ cmt_c_group = false # false/true
1174
+
1175
+ # Whether to put an empty '/*' on the first line of the combined c-comment
1176
+ cmt_c_nl_start = false # false/true
1177
+
1178
+ # Whether to put a newline before the closing '*/' of the combined c-comment
1179
+ cmt_c_nl_end = false # false/true
1180
+
1181
+ # Whether to group cpp-comments that look like they are in a block
1182
+ cmt_cpp_group = false # false/true
1183
+
1184
+ # Whether to put an empty '/*' on the first line of the combined cpp-comment
1185
+ cmt_cpp_nl_start = false # false/true
1186
+
1187
+ # Whether to put a newline before the closing '*/' of the combined cpp-comment
1188
+ cmt_cpp_nl_end = false # false/true
1189
+
1190
+ # Whether to change cpp-comments into c-comments
1191
+ cmt_cpp_to_c = false # false/true
1192
+
1193
+ # Whether to put a star on subsequent comment lines
1194
+ cmt_star_cont = false # false/true
1195
+
1196
+ # The number of spaces to insert at the start of subsequent comment lines
1197
+ cmt_sp_before_star_cont = 0 # number
1198
+
1199
+ # The number of spaces to insert after the star on subsequent comment lines
1200
+ cmt_sp_after_star_cont = 0 # number
1201
+
1202
+ # For multi-line comments with a '*' lead, remove leading spaces if the first and last lines of
1203
+ # the comment are the same length. Default=True
1204
+ cmt_multi_check_last = true # false/true
1205
+
1206
+ # The filename that contains text to insert at the head of a file if the file doesn't start with a C/C++ comment.
1207
+ # Will substitute $(filename) with the current file's name.
1208
+ cmt_insert_file_header = "" # string
1209
+
1210
+ # The filename that contains text to insert at the end of a file if the file doesn't end with a C/C++ comment.
1211
+ # Will substitute $(filename) with the current file's name.
1212
+ cmt_insert_file_footer = "" # string
1213
+
1214
+ # The filename that contains text to insert before a function implementation if the function isn't preceded with a C/C++ comment.
1215
+ # Will substitute $(function) with the function name and $(javaparam) with the javadoc @param and @return stuff.
1216
+ # Will also substitute $(fclass) with the class name: void CFoo::Bar() { ... }
1217
+ cmt_insert_func_header = "" # string
1218
+
1219
+ # The filename that contains text to insert before a class if the class isn't preceded with a C/C++ comment.
1220
+ # Will substitute $(class) with the class name.
1221
+ cmt_insert_class_header = "" # string
1222
+
1223
+ # If a preprocessor is encountered when stepping backwards from a function name, then
1224
+ # this option decides whether the comment should be inserted.
1225
+ # Affects cmt_insert_func_header and cmt_insert_class_header.
1226
+ cmt_insert_before_preproc = false # false/true
1227
+
1228
+ #
1229
+ # Preprocessor options
1230
+ #
1231
+
1232
+ # Control indent of preprocessors inside #if blocks at brace level 0
1233
+ pp_indent = ignore # ignore/add/remove/force
1234
+
1235
+ # Whether to indent #if/#else/#endif at the brace level (true) or from column 1 (false)
1236
+ pp_indent_at_level = false # false/true
1237
+
1238
+ # If pp_indent_at_level=false, specifies the number of columns to indent per level. Default=1.
1239
+ pp_indent_count = 1 # number
1240
+
1241
+ # Add or remove space after # based on pp_level of #if blocks
1242
+ pp_space = ignore # ignore/add/remove/force
1243
+
1244
+ # Sets the number of spaces added with pp_space
1245
+ pp_space_count = 0 # number
1246
+
1247
+ # The indent for #region and #endregion in C# and '#pragma region' in C/C++
1248
+ pp_indent_region = 0 # number
1249
+
1250
+ # Whether to indent the code between #region and #endregion
1251
+ pp_region_indent_code = false # false/true
1252
+
1253
+ # If pp_indent_at_level=true, sets the indent for #if, #else, and #endif when not at file-level
1254
+ pp_indent_if = 0 # number
1255
+
1256
+ # Control whether to indent the code between #if, #else and #endif when not at file-level
1257
+ pp_if_indent_code = false # false/true
1258
+
1259
+ # Whether to indent '#define' at the brace level (true) or from column 1 (false)
1260
+ pp_define_at_level = false # false/true
1261
+
1262
+ # You can force a token to be a type with the 'type' option.
1263
+ # Example:
1264
+ # type myfoo1 myfoo2
1265
+ #
1266
+ # You can create custom macro-based indentation using macro-open,
1267
+ # macro-else and macro-close.
1268
+ # Example:
1269
+ # macro-open BEGIN_TEMPLATE_MESSAGE_MAP
1270
+ # macro-open BEGIN_MESSAGE_MAP
1271
+ # macro-close END_MESSAGE_MAP
1272
+ #
1273
+ # You can assign any keyword to any type with the set option.
1274
+ # set func_call_user _ N_
1275
+ #
1276
+ # The full syntax description of all custom definition config entries
1277
+ # is shown below:
1278
+ #
1279
+ # define custom tokens as:
1280
+ # - embed whitespace in token using '' escape character, or
1281
+ # put token in quotes
1282
+ # - these: ' " and ` are recognized as quote delimiters
1283
+ #
1284
+ # type token1 token2 token3 ...
1285
+ # ^ optionally specify multiple tokens on a single line
1286
+ # define def_token output_token
1287
+ # ^ output_token is optional, then NULL is assumed
1288
+ # macro-open token
1289
+ # macro-close token
1290
+ # macro-else token
1291
+ # set id token1 token2 ...
1292
+ # ^ optionally specify multiple tokens on a single line
1293
+ # ^ id is one of the names in token_enum.h sans the CT_ prefix,
1294
+ # e.g. PP_PRAGMA
1295
+ #
1296
+ # all tokens are separated by any mix of ',' commas, '=' equal signs
1297
+ # and whitespace (space, tab)
1298
+ #