diff options
Diffstat (limited to 'parts/astyle/astyle_adaptor.cpp')
-rw-r--r-- | parts/astyle/astyle_adaptor.cpp | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/parts/astyle/astyle_adaptor.cpp b/parts/astyle/astyle_adaptor.cpp new file mode 100644 index 00000000..124da96e --- /dev/null +++ b/parts/astyle/astyle_adaptor.cpp @@ -0,0 +1,270 @@ +#include "astyle_adaptor.h" + +#include "astyle_widget.h" + +#include <string> + +#include <qradiobutton.h> +#include <qspinbox.h> +#include <qcheckbox.h> +#include <kdebug.h> +#include <kapplication.h> +#include <kconfig.h> + + + +ASStringIterator::ASStringIterator(const QString &text) + : ASSourceIterator(), _content(text) +{ + _is = new QTextStream(&_content, IO_ReadOnly); +} + + +ASStringIterator::~ASStringIterator() +{ + delete _is; +} + + +bool ASStringIterator::hasMoreLines() const +{ + return !_is->eof(); +} + + +string ASStringIterator::nextLine() +{ + return _is->readLine().utf8().data(); +} + + +KDevFormatter::KDevFormatter(const QMap<QString, QVariant>& options) +{ +// for ( QMap<QString, QVariant>::ConstIterator iter = options.begin();iter != options.end();iter++ ) +// { +// kdDebug ( 9009 ) << "format: " << iter.key() << "=" << iter.data() << endl; +// } + + setCStyle(); + + // style + QString s = options["FStyle"].toString(); + if ( predefinedStyle( s ) ) + { + return; + } + + // fill + int wsCount = options["FillCount"].toInt(); + if (options["Fill"].toString() == "Tabs") + { + setTabIndentation(wsCount, options["FillForce"].toBool() ); + m_indentString = "\t"; + } else + { + setSpaceIndentation(wsCount); + m_indentString = ""; + m_indentString.fill(' ', wsCount); + } + + setTabSpaceConversionMode(options["FillForce"].toBool()); + setEmptyLineFill(options["Fill_EmptyLines"].toBool()); + + // indent + setSwitchIndent(options["IndentSwitches"].toBool()); + setClassIndent(options["IndentClasses"].toBool()); + setCaseIndent(options["IndentCases"].toBool()); + setBracketIndent(options["IndentBrackets"].toBool()); + setNamespaceIndent(options["IndentNamespaces"].toBool()); + setLabelIndent(options["IndentLabels"].toBool()); + setBlockIndent(options["IndentBlocks"].toBool()); + setPreprocessorIndent(options["IndentPreprocessors"].toBool()); + + // continuation + setMaxInStatementIndentLength(options["MaxStatement"].toInt()); + if (options["MinConditional"].toInt() != -1) + setMinConditionalIndentLength(options["MinConditional"].toInt()); + + // brackets + s = options["Brackets"].toString(); + if (s == "Break") + setBracketFormatMode(astyle::BREAK_MODE); + else if (s == "Attach") + setBracketFormatMode(astyle::ATTACH_MODE); + else if (s == "Linux") + setBracketFormatMode(astyle::BDAC_MODE); + else + setBracketFormatMode(astyle::NONE_MODE); + + setBreakClosingHeaderBracketsMode(options["BracketsCloseHeaders"].toBool()); + // blocks + setBreakBlocksMode(options["BlockBreak"].toBool()); + if (options["BlockBreakAll"].toBool()){ + setBreakBlocksMode(true); + setBreakClosingHeaderBlocksMode(true); + } + setBreakElseIfsMode(options["BlockIfElse"].toBool()); + + // padding + setOperatorPaddingMode(options["PadOperators"].toBool()); + setParensInsidePaddingMode(options["PadParenthesesIn"].toBool()); + setParensOutsidePaddingMode(options["PadParenthesesOut"].toBool()); + setParensUnPaddingMode(options["PadParenthesesUn"].toBool()); + + // oneliner + setBreakOneLineBlocksMode(!options["KeepBlocks"].toBool()); + setSingleStatementsMode(!options["KeepStatements"].toBool()); +} + +KDevFormatter::KDevFormatter( AStyleWidget * widget ) +{ + setCStyle(); + + if ( widget->Style_ANSI->isChecked() ) + { + predefinedStyle( "ANSI" ); + return; + } + if ( widget->Style_GNU->isChecked() ) + { + predefinedStyle( "GNU" ); + return; + } + if ( widget->Style_JAVA->isChecked() ) + { + predefinedStyle( "JAVA" ); + return; + } + if ( widget->Style_KR->isChecked() ) + { + predefinedStyle( "KR" ); + return; + } + if ( widget->Style_Linux->isChecked() ) + { + predefinedStyle( "Linux" ); + return; + } + + // fill + if ( widget->Fill_Tabs->isChecked() ) + { + setTabIndentation(widget->Fill_TabCount->value(), widget->Fill_ForceTabs->isChecked()); + m_indentString = "\t"; + } + else + { + setSpaceIndentation( widget->Fill_SpaceCount->value() ); + m_indentString = ""; + m_indentString.fill(' ', widget->Fill_SpaceCount->value()); + } + + setTabSpaceConversionMode(widget->Fill_ConvertTabs->isChecked()); + setEmptyLineFill(widget->Fill_EmptyLines->isChecked()); + + // indent + setSwitchIndent( widget->Indent_Switches->isChecked() ); + setClassIndent( widget->Indent_Classes->isChecked() ); + setCaseIndent( widget->Indent_Cases->isChecked() ); + setBracketIndent( widget->Indent_Brackets->isChecked() ); + setNamespaceIndent( widget->Indent_Namespaces->isChecked() ); + setLabelIndent( widget->Indent_Labels->isChecked() ); + setBlockIndent( widget->Indent_Blocks->isChecked()); + setPreprocessorIndent(widget->Indent_Preprocessors->isChecked()); + + // continuation + setMaxInStatementIndentLength( widget->Continue_MaxStatement->value() ); + setMinConditionalIndentLength( widget->Continue_MinConditional->value() ); + + // brackets + if ( widget->Brackets_Break->isChecked() ) + { + setBracketFormatMode( astyle::BREAK_MODE ); + } + else if ( widget->Brackets_Attach->isChecked() ) + { + setBracketFormatMode( astyle::ATTACH_MODE ); + } + else if ( widget->Brackets_Linux->isChecked()) + { + setBracketFormatMode( astyle::BDAC_MODE ); + } + else{ + setBracketFormatMode( astyle::NONE_MODE ); + } + + setBreakClosingHeaderBracketsMode( widget->Brackets_CloseHeaders->isChecked()); + + // blocks + setBreakBlocksMode(widget->Block_Break->isChecked()); + if (widget->Block_BreakAll->isChecked()){ + setBreakBlocksMode(true); + setBreakClosingHeaderBlocksMode(true); + } + setBreakElseIfsMode(widget->Block_IfElse->isChecked()); + + // padding + setOperatorPaddingMode( widget->Pad_Operators->isChecked() ); + + setParensInsidePaddingMode( widget->Pad_ParenthesesIn->isChecked() ); + setParensOutsidePaddingMode( widget->Pad_ParenthesesOut->isChecked() ); + setParensUnPaddingMode( widget->Pad_ParenthesesUn->isChecked() ); + + // oneliner + setBreakOneLineBlocksMode( !widget->Keep_Blocks->isChecked() ); + setSingleStatementsMode( !widget->Keep_Statements->isChecked() ); +} + +bool KDevFormatter::predefinedStyle( const QString & style ) +{ + if (style == "ANSI") + { + setBracketIndent(false); + setSpaceIndentation(4); + setBracketFormatMode(astyle::BREAK_MODE); + setClassIndent(false); + setSwitchIndent(false); + setNamespaceIndent(false); + return true; + } + if (style == "KR") + { + setBracketIndent(false); + setSpaceIndentation(4); + setBracketFormatMode(astyle::ATTACH_MODE); + setClassIndent(false); + setSwitchIndent(false); + setNamespaceIndent(false); + return true; + } + if (style == "Linux") + { + setBracketIndent(false); + setSpaceIndentation(8); + setBracketFormatMode(astyle::BDAC_MODE); + setClassIndent(false); + setSwitchIndent(false); + setNamespaceIndent(false); + return true; + } + if (style == "GNU") + { + setBlockIndent(true); + setSpaceIndentation(2); + setBracketFormatMode(astyle::BREAK_MODE); + setClassIndent(false); + setSwitchIndent(false); + setNamespaceIndent(false); + return true; + } + if (style == "JAVA") + { + setJavaStyle(); + setBracketIndent(false); + setSpaceIndentation(4); + setBracketFormatMode(astyle::ATTACH_MODE); + setSwitchIndent(false); + return true; + } + return false; +} |