tools/qdoc3/mangenerator.cpp
changeset 0 1918ee327afb
child 4 3b1da2848fc7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/qdoc3/mangenerator.cpp	Mon Jan 11 14:00:40 2010 +0000
@@ -0,0 +1,228 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*
+  mangenerator.cpp
+*/
+
+#include <qdatetime.h>
+#include <qregexp.h>
+
+#include "mangenerator.h"
+#include "node.h"
+#include "tree.h"
+
+QT_BEGIN_NAMESPACE
+
+ManGenerator::ManGenerator()
+{
+    date = QDate::currentDate().toString( "d MMMM yyyy" );
+}
+
+ManGenerator::~ManGenerator()
+{
+}
+
+QString ManGenerator::format()
+{
+    return "man";
+}
+
+int ManGenerator::generateAtom( const Atom *atom, const Node * /* relative */,
+				CodeMarker * /* marker */ )
+{
+#if 0
+    switch ( atom->type() ) {
+    case Atom::AbstractBegin:
+	break;
+    case Atom::AbstractEnd:
+	break;
+    case Atom::Alias:
+	break;
+    case Atom::AliasArg:
+	break;
+    case Atom::BaseName:
+	break;
+    case Atom::BriefBegin:
+	break;
+    case Atom::BriefEnd:
+	break;
+    case Atom::C:
+	break;
+    case Atom::CaptionBegin:
+	break;
+    case Atom::CaptionEnd:
+	break;
+    case Atom::CitationBegin:
+	break;
+    case Atom::CitationEnd:
+	break;
+    case Atom::Code:
+	break;
+    case Atom::FootnoteBegin:
+	break;
+    case Atom::FootnoteEnd:
+	break;
+    case Atom::FormatBegin:
+	break;
+    case Atom::FormatEnd:
+	break;
+    case Atom::GeneratedList:
+	break;
+    case Atom::Image:
+	break;
+    case Atom::ImageText:
+	break;
+    case Atom::Link:
+	break;
+    case Atom::LinkNode:
+	break;
+    case Atom::ListBegin:
+	break;
+    case Atom::ListItemNumber:
+	break;
+    case Atom::ListItemBegin:
+	out() << ".IP " << atom->string() << ".\n";
+	break;
+    case Atom::ListItemEnd:
+	break;
+    case Atom::ListEnd:
+	break;
+    case Atom::Nop:
+	break;
+    case Atom::ParaBegin:
+	out() << ".PP\n";
+	break;
+    case Atom::ParaEnd:
+	out() << "\n";
+	break;
+    case Atom::RawFormat:
+	break;
+    case Atom::RawString:
+	break;
+    case Atom::SectionBegin:
+	break;
+    case Atom::SectionEnd:
+	break;
+    case Atom::SectionHeadingBegin:
+	break;
+    case Atom::SectionHeadingEnd:
+	break;
+    case Atom::SidebarBegin:
+	break;
+    case Atom::SidebarEnd:
+	break;
+    case Atom::String:
+	out() << protectTextLine( atom->string() );
+	break;
+    case Atom::TableBegin:
+	break;
+    case Atom::TableEnd:
+	break;
+    case Atom::TableOfContents:
+	break;
+    case Atom::Target:
+	break;
+    case Atom::UnknownCommand:
+	;
+    }
+#endif
+    unknownAtom( atom );
+    return 0;
+}
+
+void ManGenerator::generateClassLikeNode( const InnerNode *classe,
+				      CodeMarker *marker )
+{
+    generateHeader( classe->name() );
+    out() << ".SH NAME\n"
+	  << classe->name() << "\n"
+          << ".SH SYNOPSYS\n";
+    generateBody( classe, marker );
+    generateFooter();
+}
+
+void ManGenerator::generateFakeNode( const FakeNode *fake, CodeMarker *marker )
+{
+    generateHeader( "foo" );
+    generateBody( fake, marker );
+    generateFooter();
+}
+
+QString ManGenerator::fileExtension(const Node * /* node */)
+{
+    return "3qt";
+}
+
+void ManGenerator::generateHeader( const QString& name )
+{
+    out() << ".TH " << protectArg( name )
+	  << " " << protectArg( "3qt" )
+	  << " " << protectArg( date )
+	  << " " << protectArg( "Nokia Corporation and/or its subsidiary(-ies)" )
+	  << " " << protectArg( "Qt Toolkit" ) << "\n";
+}
+
+void ManGenerator::generateFooter()
+{
+}
+
+QString ManGenerator::protectArg( const QString& str )
+{
+    for ( int i = 0; i < (int) str.length(); i++ ) {
+	if ( str[i] == ' ' || str[i].isSpace() ) {
+	    QString quoted = str;
+	    quoted.replace( "\"", "\"\"" );
+	    return "\"" + quoted + "\"";
+	}
+    }
+    return str;
+}
+
+QString ManGenerator::protectTextLine( const QString& str )
+{
+    QString t = str;
+    if ( t.startsWith(".") || t.startsWith("'") )
+	t.prepend( "\\&" );
+    return t;
+}
+
+QT_END_NAMESPACE