diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..d24b5aa --- /dev/null +++ b/.clang-format @@ -0,0 +1,56 @@ +--- +Language: Cpp +AccessModifierOffset: -4 +ConstructorInitializerIndentWidth: 4 +AlignEscapedNewlinesLeft: false +AlignTrailingComments: false +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AlwaysBreakTemplateDeclarations: false +AlwaysBreakBeforeMultilineStrings: false +BreakBeforeBinaryOperators: true +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: true +BinPackParameters: true +ColumnLimit: 0 +ConstructorInitializerAllOnOneLineOrOnePerLine: false +DerivePointerAlignment: false +ExperimentalAutoDetectBinPacking: false +IndentCaseLabels: false +IndentWrappedFunctionNames: false +IndentFunctionDeclarationAfterType: false +MaxEmptyLinesToKeep: 1 +KeepEmptyLinesAtTheStartOfBlocks: true +NamespaceIndentation: Inner +ObjCSpaceAfterProperty: true +ObjCSpaceBeforeProtocolList: true +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakString: 1000 +PenaltyBreakFirstLessLess: 120 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Right +SpacesBeforeTrailingComments: 1 +Cpp11BracedListStyle: false +Standard: Cpp11 +IndentWidth: 4 +TabWidth: 8 +UseTab: Never +BreakBeforeBraces: Linux +SpacesInParentheses: false +SpacesInAngles: false +SpaceInEmptyParentheses: false +SpacesInCStyleCastParentheses: false +SpacesInContainerLiterals: true +SpaceBeforeAssignmentOperators: true +ContinuationIndentWidth: 4 +CommentPragmas: '^ IWYU pragma:' +ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] +SpaceBeforeParens: ControlStatements +DisableFormat: false +... + diff --git a/src/sdcv.cpp b/src/sdcv.cpp index fa88632..31136bf 100644 --- a/src/sdcv.cpp +++ b/src/sdcv.cpp @@ -19,17 +19,17 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include "config.h" #endif #include -#include -#include -#include #include +#include +#include +#include +#include #include #include -#include #include #include @@ -41,162 +41,162 @@ static const char gVersion[] = VERSION; -namespace { - static void free_str_array(gchar **arr) - { - gchar **p; +namespace +{ +static void free_str_array(gchar **arr) +{ + gchar **p; - for (p = arr; *p; ++p) - g_free(*p); - g_free(arr); - } + for (p = arr; *p; ++p) + g_free(*p); + g_free(arr); } -namespace glib { - typedef ResourceWrapper StrArr; +} +namespace glib +{ +typedef ResourceWrapper StrArr; } int main(int argc, char *argv[]) try { - setlocale(LC_ALL, ""); + setlocale(LC_ALL, ""); #if ENABLE_NLS - bindtextdomain("sdcv", + bindtextdomain("sdcv", //"./locale"//< for testing - GETTEXT_TRANSLATIONS_PATH//< should be - ); - textdomain("sdcv"); + GETTEXT_TRANSLATIONS_PATH //< should be + ); + textdomain("sdcv"); #endif - gboolean show_version = FALSE; - gboolean show_list_dicts = FALSE; - glib::StrArr use_dict_list; - gboolean non_interactive = FALSE; - gboolean utf8_output = FALSE; - gboolean utf8_input = FALSE; - glib::CharStr opt_data_dir; + gboolean show_version = FALSE; + gboolean show_list_dicts = FALSE; + glib::StrArr use_dict_list; + gboolean non_interactive = FALSE; + gboolean utf8_output = FALSE; + gboolean utf8_input = FALSE; + glib::CharStr opt_data_dir; gboolean colorize = FALSE; - const GOptionEntry entries[] = { - {"version", 'v', 0, G_OPTION_ARG_NONE, &show_version, - _("display version information and exit"), nullptr }, - {"list-dicts", 'l', 0, G_OPTION_ARG_NONE, &show_list_dicts, - _("display list of available dictionaries and exit"), nullptr}, - {"use-dict", 'u', 0, G_OPTION_ARG_STRING_ARRAY, get_addr(use_dict_list), - _("for search use only dictionary with this bookname"), - _("bookname")}, - {"non-interactive", 'n', 0, G_OPTION_ARG_NONE, &non_interactive, - _("for use in scripts"), nullptr}, - {"utf8-output", '0', 0, G_OPTION_ARG_NONE, &utf8_output, - _("output must be in utf8"), nullptr}, - {"utf8-input", '1', 0, G_OPTION_ARG_NONE, &utf8_input, - _("input of sdcv in utf8"), nullptr}, - {"data-dir", '2', 0, G_OPTION_ARG_STRING, get_addr(opt_data_dir), - _("use this directory as path to stardict data directory"), - _("path/to/dir")}, - {"color", 'c', 0, G_OPTION_ARG_NONE, &colorize, - _("colorize the output"), nullptr }, - { nullptr }, - }; + const GOptionEntry entries[] = { + { "version", 'v', 0, G_OPTION_ARG_NONE, &show_version, + _("display version information and exit"), nullptr }, + { "list-dicts", 'l', 0, G_OPTION_ARG_NONE, &show_list_dicts, + _("display list of available dictionaries and exit"), nullptr }, + { "use-dict", 'u', 0, G_OPTION_ARG_STRING_ARRAY, get_addr(use_dict_list), + _("for search use only dictionary with this bookname"), + _("bookname") }, + { "non-interactive", 'n', 0, G_OPTION_ARG_NONE, &non_interactive, + _("for use in scripts"), nullptr }, + { "utf8-output", '0', 0, G_OPTION_ARG_NONE, &utf8_output, + _("output must be in utf8"), nullptr }, + { "utf8-input", '1', 0, G_OPTION_ARG_NONE, &utf8_input, + _("input of sdcv in utf8"), nullptr }, + { "data-dir", '2', 0, G_OPTION_ARG_STRING, get_addr(opt_data_dir), + _("use this directory as path to stardict data directory"), + _("path/to/dir") }, + { "color", 'c', 0, G_OPTION_ARG_NONE, &colorize, + _("colorize the output"), nullptr }, + { nullptr }, + }; - glib::Error error; - GOptionContext *context = g_option_context_new(_(" words")); + glib::Error error; + GOptionContext *context = g_option_context_new(_(" words")); g_option_context_set_help_enabled(context, TRUE); g_option_context_add_main_entries(context, entries, nullptr); const gboolean parse_res = g_option_context_parse(context, &argc, &argv, get_addr(error)); g_option_context_free(context); if (!parse_res) { fprintf(stderr, _("Invalid command line arguments: %s\n"), - error->message); + error->message); return EXIT_FAILURE; } - if (show_version) { - printf(_("Console version of Stardict, version %s\n"), gVersion); - return EXIT_SUCCESS; - } + if (show_version) { + printf(_("Console version of Stardict, version %s\n"), gVersion); + return EXIT_SUCCESS; + } + const gchar *stardict_data_dir = g_getenv("STARDICT_DATA_DIR"); + std::string data_dir; + if (!opt_data_dir) { + if (stardict_data_dir) + data_dir = stardict_data_dir; + else + data_dir = "/usr/share/stardict/dic"; + } else { + data_dir = get_impl(opt_data_dir); + } - const gchar *stardict_data_dir = g_getenv("STARDICT_DATA_DIR"); - std::string data_dir; - if (!opt_data_dir) { - if (stardict_data_dir) - data_dir = stardict_data_dir; - else - data_dir = "/usr/share/stardict/dic"; - } else { - data_dir = get_impl(opt_data_dir); - } + const char *homedir = g_getenv("HOME"); + if (!homedir) + homedir = g_get_home_dir(); - const char *homedir = g_getenv ("HOME"); - if (!homedir) - homedir = g_get_home_dir (); - - const std::list dicts_dir_list = { + const std::list dicts_dir_list = { std::string(homedir) + G_DIR_SEPARATOR + ".stardict" + G_DIR_SEPARATOR + "dic", data_dir }; - if (show_list_dicts) { - printf(_("Dictionary's name Word count\n")); - std::list order_list, disable_list; - for_each_file(dicts_dir_list, ".ifo", order_list, - disable_list, [](const std::string& filename, bool) -> void { - DictInfo dict_info; - if (dict_info.load_from_ifo_file(filename, false)) { - const std::string bookname = utf8_to_locale_ign_err(dict_info.bookname); - printf("%s %d\n", bookname.c_str(), dict_info.wordcount); - } + if (show_list_dicts) { + printf(_("Dictionary's name Word count\n")); + std::list order_list, disable_list; + for_each_file(dicts_dir_list, ".ifo", order_list, + disable_list, [](const std::string &filename, bool) -> void { + DictInfo dict_info; + if (dict_info.load_from_ifo_file(filename, false)) { + const std::string bookname = utf8_to_locale_ign_err(dict_info.bookname); + printf("%s %d\n", bookname.c_str(), dict_info.wordcount); + } }); - - return EXIT_SUCCESS; - } - std::list disable_list; - - if (use_dict_list) { - std::list empty_list; + return EXIT_SUCCESS; + } - for_each_file(dicts_dir_list, ".ifo", empty_list, empty_list, - [&disable_list, &use_dict_list](const std::string& filename, bool) -> void { + std::list disable_list; + + if (use_dict_list) { + std::list empty_list; + + for_each_file(dicts_dir_list, ".ifo", empty_list, empty_list, + [&disable_list, &use_dict_list](const std::string &filename, bool) -> void { DictInfo dict_info; const bool load_ok = dict_info.load_from_ifo_file(filename, false); if (!load_ok) return; - + for (gchar **p = get_impl(use_dict_list); *p != nullptr; ++p) if (strcmp(*p, dict_info.bookname.c_str()) == 0) return; disable_list.push_back(dict_info.ifo_file_name); }); - } + } - const std::string conf_dir = std::string(g_get_home_dir()) + G_DIR_SEPARATOR + ".stardict"; - if (g_mkdir(conf_dir.c_str(), S_IRWXU) == -1 && errno!=EEXIST) - fprintf(stderr, _("g_mkdir failed: %s\n"), strerror(errno)); + const std::string conf_dir = std::string(g_get_home_dir()) + G_DIR_SEPARATOR + ".stardict"; + if (g_mkdir(conf_dir.c_str(), S_IRWXU) == -1 && errno != EEXIST) + fprintf(stderr, _("g_mkdir failed: %s\n"), strerror(errno)); - - Library lib(utf8_input, utf8_output, colorize); - std::list empty_list; - lib.load(dicts_dir_list, empty_list, disable_list); + Library lib(utf8_input, utf8_output, colorize); + std::list empty_list; + lib.load(dicts_dir_list, empty_list, disable_list); - std::unique_ptr io(create_readline_object()); - if (optind < argc) { - for(int i = optind; i < argc; ++i) - if (!lib.process_phrase(argv[i], *io, non_interactive)) - return EXIT_FAILURE; - } else if (!non_interactive) { + std::unique_ptr io(create_readline_object()); + if (optind < argc) { + for (int i = optind; i < argc; ++i) + if (!lib.process_phrase(argv[i], *io, non_interactive)) + return EXIT_FAILURE; + } else if (!non_interactive) { std::string phrase; - while (io->read(_("Enter word or phrase: "), phrase)) { - if (!lib.process_phrase(phrase.c_str(), *io)) - return EXIT_FAILURE; - phrase.clear(); - } + while (io->read(_("Enter word or phrase: "), phrase)) { + if (!lib.process_phrase(phrase.c_str(), *io)) + return EXIT_FAILURE; + phrase.clear(); + } - putchar('\n'); - } else - fprintf(stderr, _("There are no words/phrases to translate.\n")); - - return EXIT_SUCCESS; -} catch (const std::exception& ex) { + putchar('\n'); + } else { + fprintf(stderr, _("There are no words/phrases to translate.\n")); + } + return EXIT_SUCCESS; +} catch (const std::exception &ex) { fprintf(stderr, "Internal error: %s\n", ex.what()); exit(EXIT_FAILURE); }