
/***************************************************************************
 *                                                                         *
 *   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 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

/*  This code generated by: 
 *      Author : thomas
 *      Date   : Mon Jun 23 2003
 */


#include <kdebug.h>

#include <qregexp.h>

#include "javacodedocumentation.h"
#include "javaclassifiercodedocument.h"
#include "javacodegenerationpolicy.h"

// Constructors/Destructors
//  

JavaCodeDocumentation::JavaCodeDocumentation ( JavaClassifierCodeDocument * doc, const QString & text ) 
    : CodeComment ((CodeDocument*) doc, text)
{

}

JavaCodeDocumentation::~JavaCodeDocumentation ( ) { }

//  
// Methods
//  


// Accessor methods
//  

// Other methods
//  

/**
 * Save the XMI representation of this object
 */
void JavaCodeDocumentation::saveToXMI ( QDomDocument & doc, QDomElement & root ) {
	QDomElement blockElement = doc.createElement( "javacodedocumentation" );
	setAttributesOnNode(doc, blockElement); // as we added no additional fields to this class we may
						// just use parent TextBlock method
	root.appendChild( blockElement );
}

/**
 * @return	QString
 */
QString JavaCodeDocumentation::toString ( ) 
{

	QString output = "";

	// simple output method
	if(getWriteOutText())
	{
		bool useDoubleDashOutput = true;

		// need to figure out output type from java policy
		JavaCodeGenerationPolicy * p = ((JavaClassifierCodeDocument*)getParentDocument())->getJavaPolicy();
		if(p->getCommentStyle() == JavaCodeGenerationPolicy::SlashStar)
			useDoubleDashOutput = false;

		QString indent = getIndentationString();
		QString endLine = getNewLineEndingChars();
		QString body = getText();
		if(useDoubleDashOutput) 
		{
			if(!body.isEmpty())
				output.append(formatMultiLineText (body, indent +"// ", endLine));
		} else {
			output.append(indent+"/**"+endLine);
			output.append(formatMultiLineText (body, indent +" * ", endLine));
			output.append(indent+" */"+endLine);
		}
	}

	return output; 
}

QString JavaCodeDocumentation::getNewEditorLine ( int amount ) 
{
	JavaCodeGenerationPolicy * p = ((JavaClassifierCodeDocument*)getParentDocument())->getJavaPolicy();
	if(p->getCommentStyle() == JavaCodeGenerationPolicy::SlashStar)
		return getIndentationString(amount) + " * ";
	else
		return getIndentationString(amount) + "// ";
}

int JavaCodeDocumentation::firstEditableLine() {
	JavaCodeGenerationPolicy * p = ((JavaClassifierCodeDocument*)getParentDocument())->getJavaPolicy();
	if(p->getCommentStyle() == JavaCodeGenerationPolicy::SlashStar)
		return 1; 
	return 0; 
}

int JavaCodeDocumentation::lastEditableLine() { 
	JavaCodeGenerationPolicy * p = ((JavaClassifierCodeDocument*)getParentDocument())->getJavaPolicy();
	if(p->getCommentStyle() == JavaCodeGenerationPolicy::SlashStar)
	{
		return -1; // very last line is NOT editable
	}
	return 0;
}

/** UnFormat a long text string. Typically, this means removing
 *  the indentaion (linePrefix) and/or newline chars from each line.
 */
QString JavaCodeDocumentation::unformatText ( const QString & text , const QString & indent) 
{

	QString mytext = TextBlock::unformatText(text, indent);
	JavaCodeGenerationPolicy * p = ((JavaClassifierCodeDocument*)getParentDocument())->getJavaPolicy();
	// remove leading or trailing comment stuff
	mytext.remove(QRegExp("^"+indent));
	if(p->getCommentStyle() == JavaCodeGenerationPolicy::SlashStar)
	{
		mytext.remove(QRegExp("^\\/\\*\\*\\s*\n?"));
		mytext.remove(QRegExp("\\s*\\*\\/\\s*\n?$"));
		mytext.remove(QRegExp("^\\s*\\*\\s*"));
	} else
		mytext.remove(QRegExp("^\\/\\/\\s*"));

	return mytext;
}


#include "javacodedocumentation.moc"
