summaryrefslogtreecommitdiffstats
path: root/parts/astyle/astyle_adaptor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'parts/astyle/astyle_adaptor.cpp')
-rw-r--r--parts/astyle/astyle_adaptor.cpp270
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;
+}