PDA

Просмотр полной версии : [Вопрос] Табуляция



verteich
16.04.2020, 15:52
Есть подобный код:
ShowRegisterDialog(playerid, rstate)
{
switch(rstate)
{
case 1: ShowGrandRegiserDialog(playerid);
case 2: ShowPlayerDialogEx(playerid,1,2,Language[33][lang],Language[34][lang],Language[6][lang],Language[7][lang]);
case 3: ShowPlayerDialogEx(playerid,1,2,Language[35][lang],Language[36][lang],Language[6][lang],Language[7][lang]);
case 4: ShowPlayerDialogEx(playerid,1,2,Language[37][lang],Language[38][lang],Language[6][lang],Language[7][lang]);
case 5: ShowPlayerDialogEx(playerid,1,1,Language[39][lang],Language[40][lang],Language[6][lang],Language[7][lang]);
default: return false;
}
return true;
}
Как его можно автоматически выровнить лесенкой? Пробывал TextFX, он ничего не делает с этим, к сожалению.

SteveStage
16.04.2020, 16:17
А тут ничего выделять лесенкой и не надо, надо просто оттабулировать все case и default в switch.
Выделяете все case и default, нажимаете Tab (в тр), и вуаля:

ShowRegisterDialog(playerid, rstate)
{
switch(rstate)
{
case 1: ShowGrandRegiserDialog(playerid);
case 2: ShowPlayerDialogEx(playerid,1,2,Language[33][lang],Language[34][lang],Language[6][lang],Language[7][lang]);
case 3: ShowPlayerDialogEx(playerid,1,2,Language[35][lang],Language[36][lang],Language[6][lang],Language[7][lang]);
case 4: ShowPlayerDialogEx(playerid,1,2,Language[37][lang],Language[38][lang],Language[6][lang],Language[7][lang]);
case 5: ShowPlayerDialogEx(playerid,1,1,Language[39][lang],Language[40][lang],Language[6][lang],Language[7][lang]);
default: return false;
}
return true;
}

И числа в Language и ShowPlayerDialogEx - магические числа (https://ru.wikipedia.org/wiki/Магическое_число_(программирование)), советовал бы от них избавляться.

tnc
16.04.2020, 18:10
Можно использовать uncrustify (http://uncrustify.sourceforge.net/). Конфиг для allman-style:


#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# Allman style
#

# indent using tabs
output_tab_size = 4
indent_columns = output_tab_size
indent_with_tabs = 1

# indent case
indent_switch_case = indent_columns
indent_case_brace = 0

# newlines
newlines = lf
nl_after_semicolon = true
nl_start_of_file = remove
nl_end_of_file = force
nl_end_of_file_min = 1

# spaces
sp_return_paren = force # "return (1);" vs "return(1);"
sp_sizeof_paren = force # "sizeof (int)" vs "sizeof(int)"
sp_assign = force
sp_arith = force
sp_bool = force
sp_compare = force
sp_after_comma = force
sp_case_label = force
sp_else_brace = force
sp_brace_else = force
sp_func_call_paren = force # "foo (" vs "foo("
sp_func_proto_paren = force # "int foo ();" vs "int foo();"
sp_before_ptr_star = force
sp_after_ptr_star_qualifier = force # "const char * const" vs. "const char *const"
sp_after_ptr_star = remove
sp_between_ptr_star = remove # "**var" vs "* *var"
sp_inside_paren = remove # "( 1 )" vs "(1)"
sp_inside_fparen = remove # "( 1 )" vs "(1)" - functions
sp_inside_sparen = remove # "( 1 )" vs "(1)" - if/for/etc
sp_after_cast = force # "(int) a" vs "(int)a"
sp_func_call_user_paren = remove # For gettext, "_()" vs. "_ ()"
set func_call_user _ N_ C_ # Needed for sp_after_cast
sp_before_semi = remove
sp_paren_paren = remove # Space between (( and ))

eat_blanks_before_close_brace = true
eat_blanks_after_open_brace = true

# Allman style for curly braces
nl_assign_brace = force
nl_enum_brace = force
nl_union_brace = force
nl_struct_brace = force
nl_class_brace = force
nl_do_brace = force
nl_if_brace = force
nl_for_brace = force
nl_else_brace = force
nl_elseif_brace = force
nl_while_brace = force
nl_switch_brace = force
nl_before_case = false
nl_fcall_brace = force
nl_fdef_brace = force
nl_brace_else = force
nl_brace_while = force
nl_case_colon_brace = force
nl_after_brace_open = true


# Code modifying options (non-whitespace)
mod_full_brace_do = force
mod_full_brace_for = force
mod_full_brace_function = force
mod_full_brace_if = force
mod_full_brace_while = force
mod_case_brace = force

# Align
align_func_params = true
align_single_line_func = true
align_var_def_star_style = 2

# one liners
nl_func_leave_one_liners = true
nl_enum_leave_one_liners = true
nl_assign_leave_one_liners = true

# Comments
cmt_cpp_to_c = true # "/* */" vs. "//"
cmt_convert_tab_to_spaces = true
#cmt_reflow_mode = 2 # Full reflow (seems doesn't work quite well, it doesn't reorder the comments)
#cmt_width = 80 # Line width
cmt_star_cont = true # Whether to put a star on subsequent comment lines
cmt_sp_after_star_cont = 1 # The number of spaces to insert after the star on subsequent comment lines
cmt_c_nl_start = false # false/true
cmt_c_nl_end = true # false/true
# For multi-line comments with a '*' lead, remove leading spaces if the first and last lines of
# the comment are the same length. Default=True
cmt_multi_check_last = false

# Encoding
utf8_bom = remove
utf8_force = true


Использовать так:



.\uncrustify.exe -c .\cfg\allman.cfg -f .\test.p -o out.p



Выход от табулятора:


https://i.imgur.com/PC7fXnO.png