diff options
Diffstat (limited to 'debian/uncrustify-trinity/uncrustify-trinity-0.76.0/src/universalindentgui.cpp')
-rw-r--r-- | debian/uncrustify-trinity/uncrustify-trinity-0.76.0/src/universalindentgui.cpp | 372 |
1 files changed, 372 insertions, 0 deletions
diff --git a/debian/uncrustify-trinity/uncrustify-trinity-0.76.0/src/universalindentgui.cpp b/debian/uncrustify-trinity/uncrustify-trinity-0.76.0/src/universalindentgui.cpp new file mode 100644 index 00000000..12c66b5c --- /dev/null +++ b/debian/uncrustify-trinity/uncrustify-trinity-0.76.0/src/universalindentgui.cpp @@ -0,0 +1,372 @@ +/** + * @file universalindentgui.cpp + * Exports the config file for UniversalIndentGUI + * + * @author Ben Gardner + * @author Guy Maurel since version 0.62 for uncrustify4Qt + * October 2015, 2016 + * @license GPL v2+ + */ +#include "universalindentgui.h" + +#include "error_types.h" +#include "log_rules.h" +#include "prototypes.h" +#include "unc_ctype.h" +#include "uncrustify.h" +#include "uncrustify_version.h" + +#include <cstdio> +#include <vector> + + +constexpr static auto LCURRENT = LOTHER; + +using namespace std; + + +std::vector<uncrustify::OptionGroup *> get_option_groups() +{ + std::vector<uncrustify::OptionGroup *> groups; + size_t i = 0; + + while (auto *const g = uncrustify::get_option_group(i)) + { + groups.push_back(g); + ++i; + } + return(groups); +} + + +void print_option_choices(FILE *pfile, uncrustify::GenericOption *option, + char const *key = "Choices") +{ + fprintf(pfile, "%s=", key); + + for (auto c = option->possibleValues(); *c; ++c) + { + fprintf(pfile, "%s=%s%c", option->name(), *c, c[1] ? '|' : '\n'); + } +} + + +void print_universal_indent_cfg(FILE *pfile) +{ + const char *p_name; + char ch = '='; + const auto &groups = get_option_groups(); + size_t idx; + +#if defined (DEBUG) && !defined (WIN32) + vector<size_t> allGroups; + allGroups.reserve(16); + // first run to get the first option number of each group/category + size_t optionNumber = 0; + bool firstOptionNumberSet = false; + + for (idx = 0; idx < groups.size(); ++idx) + { + const auto *p_grp = groups[idx]; + + for (auto *const option : p_grp->options) + { + UNUSED(option); + + if (!firstOptionNumberSet) + { + allGroups[idx] = optionNumber; + firstOptionNumberSet = true; + } + optionNumber++; + } // for (auto *const option : p_grp->options) + + firstOptionNumberSet = false; + } // end of first run + +//#else +// UNUSED(allGroups); +#endif // DEBUG + + // second run + // Dump the header and the categories + fprintf(pfile, "[header]\n"); + + // Add all the categories + //const auto &groups = get_option_groups(); + ch = '='; + + fprintf(pfile, "categories"); + idx = 0; +#if defined (DEBUG) && !defined (WIN32) + optionNumber = 0; +#endif // DEBUG + + for (auto *const g : groups) + { + fputc(ch, pfile); + ch = '|'; + +#if defined (DEBUG) && !defined (WIN32) + fprintf(pfile, "(%zu)", allGroups[idx]); +#endif // DEBUG + + // Write description, stripping leading and trailing newlines + for (auto dc = g->description + 1; *(dc + 1); ++dc) + { + fputc(*dc, pfile); + } + + idx++; + } + + fprintf(pfile, "\n"); + + fprintf(pfile, + "cfgFileParameterEnding=cr\n" + "configFilename=uncrustify.cfg\n"); + + + // Add all the recognized file extensions + ch = '='; + int fileIdx = 0; + fprintf(pfile, "fileTypes"); + + while ((p_name = get_file_extension(fileIdx)) != nullptr) + { + fprintf(pfile, "%c*%s", ch, p_name); + ch = '|'; + } + fprintf(pfile, "\n"); + + // Add the rest of the constant file header + fprintf(pfile, + "indenterFileName=uncrustify\n" + "indenterName=Uncrustify (C, C++, C#, ObjectiveC, D, Java, Pawn, VALA)\n" + "inputFileName=indentinput\n" + "inputFileParameter=\"-f \"\n" + "manual=http://uncrustify.sourceforge.net/config.txt\n" + "outputFileName=indentoutput\n" + "outputFileParameter=\"-o \"\n" + "stringparaminquotes=false\n" + "parameterOrder=ipo\n" + "showHelpParameter=-h\n" + "stringparaminquotes=false\n" + "useCfgFileParameter=\"-c \"\n"); + + fprintf(pfile, "version=%s\n", UNCRUSTIFY_VERSION); + + ch = '='; + + // Now add each option + for (idx = 0; idx < groups.size(); ++idx) + { + const auto *p_grp = groups[idx]; + + for (auto *const option : p_grp->options) + { + /* + * Create a better readable name from the options name + * by replacing '_' by a space and use some upper case characters. + */ + char *optionNameReadable = new char[strlen(option->name()) + 1]; + strcpy(optionNameReadable, option->name()); + + bool was_space = true; + + for (char *character = optionNameReadable; *character != 0; character++) + { + if (*character == '_') + { + *character = ' '; + was_space = true; + } + else if (was_space) + { + *character = unc_toupper(*character); + was_space = false; + } + } + + fprintf(pfile, "\n[%s]\n", optionNameReadable); + fprintf(pfile, "Category=%zu\n", idx); +#if defined (DEBUG) && !defined (WIN32) + fprintf(pfile, "Description=\"<html>(%zu)", optionNumber); +#else // DEBUG + fprintf(pfile, "Description=\"<html>"); +#endif // DEBUG + + // Skip first character, which is always a newline + const char *tmp = option->description() + 1; + ch = 0; + + // Output the description which may contain forbidden chars, skipping + // the last character which is always an extra newline + while ( *tmp != 0 + && *(tmp + 1) != 0) + { + switch (*tmp) + { + case '<': + fputs("<", pfile); + break; + + case '>': + fputs(">", pfile); + break; + + case '&': + fputs("&", pfile); + break; + + case '\n': + fputs("<br/>", pfile); + break; + + default: + fputc(*tmp, pfile); + } + tmp++; + } + const auto ds = option->defaultStr(); + + if (!ds.empty()) + { + fprintf(pfile, "<br/><br/>Default: %s", ds.c_str()); + } + fprintf(pfile, "</html>\"\n"); + + // Handle some options independent of their type and most by their type. + log_rule_B("indent_with_tabs"); + + if (option == &uncrustify::options::indent_with_tabs) + { + // Indenting with tabs selector becomes a multiple selector and not + // only a number. Also it is by default enabled. + fprintf(pfile, "Enabled=true\n"); + fprintf(pfile, "EditorType=multiple\n"); + fprintf(pfile, "Choices=\"%s=0|%s=1|%s=2\"\n", + option->name(), option->name(), option->name()); +#if defined (DEBUG) && !defined (WIN32) + fprintf(pfile, "ChoicesReadable=\"(%zu)Spaces only|(%zu)Indent with tabs, align with spaces|(%zu)Indent and align with tabs\"\n", + optionNumber, optionNumber, optionNumber); +#else // DEBUG + fprintf(pfile, "ChoicesReadable=\"Spaces only|Indent with tabs, align with spaces|Indent and align with tabs\"\n"); +#endif // DEBUG + fprintf(pfile, "ValueDefault=%s\n", option->str().c_str()); + } + else + { + // All not specially handled options are created only dependent by + // their type. + fprintf(pfile, "Enabled=false\n"); + + switch (option->type()) + { + case uncrustify::OT_BOOL: + fprintf(pfile, "EditorType=boolean\n"); + print_option_choices(pfile, option, "TrueFalse"); + fprintf(pfile, "ValueDefault=%s\n", option->str().c_str()); + break; + + case uncrustify::OT_IARF: + fprintf(pfile, "EditorType=multiple\n"); + print_option_choices(pfile, option); +#if defined (DEBUG) && !defined (WIN32) + fprintf(pfile, "ChoicesReadable=\"(%zu)Ignore %s|(%zu)Add %s|(%zu)Remove %s|(%zu)Force %s\"\n", + optionNumber, optionNameReadable, + optionNumber, optionNameReadable, + optionNumber, optionNameReadable, + optionNumber, optionNameReadable); +#else // DEBUG + // 0 1 2 3 + fprintf(pfile, "ChoicesReadable=\"Ignore %s|Add %s|Remove %s|Force %s\"\n", + optionNameReadable, optionNameReadable, optionNameReadable, optionNameReadable); +#endif // DEBUG + fprintf(pfile, "ValueDefault=%s\n", option->str().c_str()); + break; + + case uncrustify::OT_NUM: + fprintf(pfile, "EditorType=numeric\n"); + fprintf(pfile, "CallName=\"%s=\"\n", option->name()); + fprintf(pfile, "MinVal=%s\n", option->minStr().c_str()); + fprintf(pfile, "MaxVal=%s\n", option->maxStr().c_str()); + fprintf(pfile, "ValueDefault=%s\n", option->str().c_str()); + break; + + case uncrustify::OT_UNUM: + fprintf(pfile, "EditorType=numeric\n"); + fprintf(pfile, "CallName=\"%s=\"\n", option->name()); + fprintf(pfile, "MinVal=%s\n", option->minStr().c_str()); + fprintf(pfile, "MaxVal=%s\n", option->maxStr().c_str()); + fprintf(pfile, "ValueDefault=%s\n", option->str().c_str()); + break; + + case uncrustify::OT_LINEEND: + fprintf(pfile, "EditorType=multiple\n"); + print_option_choices(pfile, option); +#if defined (DEBUG) && !defined (WIN32) + fprintf(pfile, "ChoicesReadable=\"(%zu)Newlines Unix|(%zu)Newlines Win|(%zu)Newlines Mac|(%zu)Newlines Auto\"\n", + optionNumber, optionNumber, optionNumber, optionNumber); +#else // DEBUG + fprintf(pfile, "ChoicesReadable=\"Newlines Unix|Newlines Win|Newlines Mac|Newlines Auto\"\n"); +#endif // DEBUG + fprintf(pfile, "ValueDefault=%s\n", option->str().c_str()); + break; + + case uncrustify::OT_TOKENPOS: + fprintf(pfile, "EditorType=multiple\n"); + // Issue #2300-a + print_option_choices(pfile, option); +#if defined (DEBUG) && !defined (WIN32) + fprintf(pfile, "ChoicesReadable=\"(%zu)Ignore %s|(%zu)Break %s|(%zu)Force %s|(%zu)Lead %s|(%zu)Trail %s|", + optionNumber, optionNameReadable, + optionNumber, optionNameReadable, + optionNumber, optionNameReadable, + optionNumber, optionNameReadable, + optionNumber, optionNameReadable); +#else // DEBUG + // 0 1 2 4 8 + fprintf(pfile, "ChoicesReadable=\"Ignore %s|Break %s|Force %s|Lead %s|Trail %s|", + optionNameReadable, optionNameReadable, optionNameReadable, + optionNameReadable, optionNameReadable); +#endif // DEBUG + // 16 5 6 9 10 +#if defined (DEBUG) && !defined (WIN32) + fprintf(pfile, "(%zu)Join %s|(%zu)Lead Break %s|(%zu)Lead Force %s|(%zu)Trail Break %s|(%zu)Trail Force %s\"\n", + optionNumber, optionNameReadable, + optionNumber, optionNameReadable, + optionNumber, optionNameReadable, + optionNumber, optionNameReadable, + optionNumber, optionNameReadable); +#else // DEBUG + fprintf(pfile, "Join %s|Lead Break %s|Lead Force %s|Trail Break %s|Trail Force %s\"\n", + optionNameReadable, optionNameReadable, optionNameReadable, + optionNameReadable, optionNameReadable); +#endif // DEBUG + fprintf(pfile, "ValueDefault=%s\n", option->str().c_str()); + break; + + case uncrustify::OT_STRING: + { + fprintf(pfile, "CallName=%s=\n", option->name()); + fprintf(pfile, "EditorType=string\n"); + fprintf(pfile, "ValueDefault=%s\n", option->str().c_str()); + break; + } + + default: + fprintf(stderr, "FATAL: Illegal option type %d for '%s'\n", + static_cast<int>(option->type()), option->name()); + log_flush(true); + exit(EX_SOFTWARE); + break; + } // switch + } +#if defined (DEBUG) && !defined (WIN32) + optionNumber++; +#endif // DEBUG + delete[] optionNameReadable; + } // for (auto *const option : p_grp->options) + } +} // print_universal_indent_cfg |