LCOV - code coverage report
Current view: top level - libreoffice/autodoc/source/exes/adc_uni - adc_cl.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 69 145 47.6 %
Date: 2012-12-27 Functions: 14 20 70.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <precomp.h>
      21             : #include <adc_cl.hxx>
      22             : 
      23             : 
      24             : // NOT FULLY DEFINED SERVICES
      25             : #include <algorithm>
      26             : #include <cosv/x.hxx>
      27             : #include <cosv/file.hxx>
      28             : #include <cosv/tpl/tpltools.hxx>
      29             : #include <ary/ary.hxx>
      30             : #include <tools/tkpchars.hxx>
      31             : #include <adc_msg.hxx>
      32             : #include "adc_cmds.hxx"
      33             : #include "adc_cmd_parse.hxx"
      34             : #include "cmd_sincedata.hxx"
      35             : 
      36             : 
      37             : namespace autodoc
      38             : {
      39             : 
      40             : CommandLine * CommandLine::pTheInstance_ = 0;
      41             : 
      42             : const char * const C_sUserGuide =
      43             : "\n\n\n"
      44             : "               General Use of Autodoc\n"
      45             : "               ----------------------\n"
      46             : "\n"
      47             : "   Example for IDL:\n"
      48             : "\n"
      49             : "   -html <OutputDirectory> -name \"UDK 3.x anything\" -lg idl\n"
      50             : "         -t <SourceDir1> <SourceDir2>\n"
      51             : "\n"
      52             : "   Instead of or in addition to -t may be\n"
      53             : "   used -d (no subdirectories) or -f (just one file). There can\n"
      54             : "   be multiple arguments after each of these options (-t -d -f).\n"
      55             : "\n"
      56             : "\n"
      57             : "           Replacing @since Tag Content\n"
      58             : "           ----------------------------\n"
      59             : "\n"
      60             : "   You can give a transformation file to replace\n"
      61             : "   entries in @since tags by different entries.\n"
      62             : "   This file is given by the option\n"
      63             : "       -sincefile <TransformationFilePath>\n"
      64             : "   This option has to appear between the -html and the -lg option.\n"
      65             : "   Example:\n"
      66             : "   -html <OutputDirectory> -sincefile replacesince.txt\n"
      67             : "       -name \"UDK 3.x anything\" -lg idl -t <SourceDir>\n"
      68             : "\n"
      69             : "\n";
      70             : 
      71           1 : CommandLine::CommandLine()
      72             :     :   nDebugStyle(0),
      73           1 :         pSinceTransformator(new command::SinceTagTransformationData),
      74             :         aCommands(),
      75             :         bInitOk(false),
      76             :         pCommand_CreateHtml(0),
      77           1 :         pReposy( & ary::Repository::Create_() ),
      78           3 :         bIdl(false)
      79             : {
      80             :     csv_assert(pTheInstance_ == 0);
      81           1 :     pTheInstance_ = this;
      82           1 : }
      83             : 
      84           2 : CommandLine::~CommandLine()
      85             : {
      86           1 :     csv::erase_container_of_heap_ptrs(aCommands);
      87           1 :     pTheInstance_ = 0;
      88           1 : }
      89             : 
      90             : int
      91           1 : CommandLine::Run() const
      92             : {
      93           1 :     Cout() << "\nAutodoc version 2.2.5"
      94           1 :            << "\n---------------------"
      95           2 :            << "\n" << Endl();
      96             : 
      97             :     bool
      98           1 :         ok = true;
      99          12 :     for ( CommandList::const_iterator it = aCommands.begin();
     100           9 :           ok AND it != aCommands.end();
     101             :           ++it )
     102             :     {
     103           2 :         ok = (*it)->Run();
     104             :     }
     105             : 
     106           1 :     if (pCommand_CreateHtml != 0)
     107             :     {
     108           1 :         StreamStr aDiagnosticMessagesFile(700);
     109             :         aDiagnosticMessagesFile
     110           1 :             << pCommand_CreateHtml->OutputDir()
     111           2 :             << csv::ploc::Delimiter()
     112           1 :             << "Autodoc_DiagnosticMessages.txt";
     113           1 :         TheMessages().WriteFile(aDiagnosticMessagesFile.c_str());
     114             :     }
     115             : 
     116           1 :     return ok ? 0 : 1;
     117             : }
     118             : 
     119             : CommandLine &
     120    11960968 : CommandLine::Get_()
     121             : {
     122             :     csv_assert(pTheInstance_ != 0);
     123    11960968 :     return *pTheInstance_;
     124             : }
     125             : 
     126             : bool
     127        2584 : CommandLine::DoesTransform_SinceTag() const
     128             : {
     129        2584 :     return pSinceTransformator->DoesTransform();
     130             : }
     131             : 
     132             : //bool
     133             : //CommandLine::Strip_SinceTagText( String & io_sSinceTagValue ) const
     134             : //{
     135             : //    return pSinceTransformator->StripSinceTagText(io_sSinceTagValue);
     136             : //}
     137             : 
     138             : const String &
     139         413 : CommandLine::DisplayOf_SinceTagValue( const String & i_sVersionNumber ) const
     140             : {
     141         413 :     return pSinceTransformator->DisplayOf(i_sVersionNumber);
     142             : }
     143             : 
     144             : void
     145           1 : CommandLine::do_Init( int                 argc,
     146             :                       char *              argv[] )
     147             : {
     148             :   try
     149             :   {
     150           1 :     bInitOk = false;
     151           1 :     StringVector    aParameters;
     152             : 
     153           1 :     char * * itpEnd = &argv[0] + argc;
     154          13 :     for ( char * * itp = &argv[1]; itp != itpEnd; ++itp )
     155             :     {
     156          12 :          if ( strncmp(*itp, "-I:", 3) != 0 )
     157          12 :             aParameters.push_back(String(*itp));
     158             :         else
     159           0 :             load_IncludedCommands(aParameters, (*itp)+3);
     160             :     }
     161             : 
     162           1 :     StringVector::const_iterator itEnd = aParameters.end();
     163           4 :     for ( StringVector::const_iterator it = aParameters.begin();
     164             :           it != itEnd;
     165             :         )
     166             :     {
     167           2 :         if ( *it == command::C_opt_Verbose )
     168           0 :             do_clVerbose(it,itEnd);
     169           5 :         else if ( *it == command::C_opt_LangAll
     170           2 :                   OR *it == command::C_opt_Name
     171           1 :                   OR *it == command::C_opt_DevmanFile )
     172           1 :             do_clParse(it,itEnd);
     173           1 :         else if (*it == command::C_opt_CreateHtml)
     174           1 :             do_clCreateHtml(it,itEnd);
     175           0 :         else if (*it == command::C_opt_SinceFile)
     176           0 :             do_clSinceFile(it,itEnd);
     177           0 :         else if (*it == command::C_opt_ExternNamespace)
     178             :         {
     179           0 :             sExternNamespace = *(++it);
     180           0 :             ++it;
     181           0 :             if ( strncmp(sExternNamespace.c_str(), "::", 2) != 0)
     182             :             {
     183             :                  throw command::X_CommandLine(
     184             :                         "-extnsp needs an absolute qualified namespace, starting with \"::\"."
     185           0 :                         );
     186             :             }
     187             :         }
     188           0 :         else if (*it == command::C_opt_ExternRoot)
     189             :         {
     190           0 :             ++it;
     191           0 :             StreamLock sl(1000);
     192           0 :             if ( csv::compare(*it, 0, "http://", 7) != 0 )
     193             :             {
     194           0 :                 sl() << "http://" << *it;
     195             :             }
     196           0 :             if ( *(sl().end()-1) != '/')
     197           0 :                 sl() << '/';
     198           0 :             sExternRoot = sl().c_str();
     199             : 
     200           0 :             ++it;
     201             :         }
     202             : //        else if (*it == command::C_opt_CreateXml)
     203             : //            do_clCreateXml(it,itEnd);
     204             : //        else if (command::C_opt_Load)
     205             : //            do_clLoad(it,itEnd);
     206             : //        else if (*it == command::C_opt_Save)
     207             : //            do_clSave(it,itEnd);
     208           0 :         else if (*it == "-h" OR *it == "-?" OR *it == "?")
     209             :             // Leads to displaying help, because bInitOk stays on false.
     210           1 :              return;
     211           0 :         else if ( *it == command::C_opt_Parse )
     212             :             // Only for backwards compatibility.
     213             :             //   Just ignore "-parse".
     214           0 :             ++it;
     215             :         else
     216             :         {
     217           0 :             StreamLock sl(200);
     218             :              throw command::X_CommandLine(
     219           0 :                             sl() << "Unknown commandline option \""
     220           0 :                                  << *it
     221           0 :                                  << "\"."
     222           0 :                                  << c_str );
     223             :         }
     224             :     }   // end for
     225           1 :     sort_Commands();
     226             : 
     227           1 :     bInitOk = true;
     228             : 
     229             :   }   // end try
     230           0 :   catch ( command::X_CommandLine & xxx )
     231             :   {
     232           0 :     xxx.Report( Cerr() );
     233             :   }
     234           0 :   catch ( csv::Exception & xxx )
     235             :   {
     236           0 :     xxx.GetInfo( Cerr() );
     237             :   }
     238             : }
     239             : 
     240             : void
     241           0 : CommandLine::do_PrintUse() const
     242             : {
     243           0 :     Cout() << C_sUserGuide << Endl();
     244           0 : }
     245             : 
     246             : bool
     247           1 : CommandLine::inq_CheckParameters() const
     248             : {
     249           1 :     if (NOT bInitOk OR aCommands.empty())
     250           0 :         return false;
     251           1 :     return true;
     252             : }
     253             : 
     254             : void
     255           0 : CommandLine::load_IncludedCommands( StringVector &      out,
     256             :                                     const char *        i_filePath )
     257             : {
     258             :     CharacterSource
     259           0 :         aIncludedCommands;
     260             :     csv::File
     261           0 :         aFile(i_filePath, csv::CFM_READ);
     262           0 :     if (NOT aFile.open())
     263             :     {
     264           0 :          Cerr() << "Command include file \""
     265           0 :                << i_filePath
     266           0 :                << "\" not found."
     267           0 :                << Endl();
     268           0 :         throw command::X_CommandLine("Invalid file in option -I:<command-file>.");
     269             :     }
     270           0 :     aIncludedCommands.LoadText(aFile);
     271           0 :     aFile.close();
     272             : 
     273           0 :     bool bInToken = false;
     274           0 :     StreamLock aTransmit(200);
     275           0 :     for ( ; NOT aIncludedCommands.IsFinished(); aIncludedCommands.MoveOn() )
     276             :     {
     277           0 :         if (bInToken)
     278             :         {
     279           0 :             if (aIncludedCommands.CurChar() <= 32)
     280             :             {
     281             :                 const char *
     282           0 :                     pToken = aIncludedCommands.CutToken();
     283           0 :                 bInToken = false;
     284             : 
     285           0 :                  if ( strncmp(pToken, "-I:", 3) != 0 )
     286             :                  {
     287           0 :                      aTransmit().seekp(0);
     288           0 :                      aTransmit() << pToken;
     289           0 :                      aTransmit().replace_all('\\', *csv::ploc::Delimiter());
     290           0 :                      aTransmit().replace_all('/', *csv::ploc::Delimiter());
     291           0 :                     out.push_back(String(aTransmit().c_str()));
     292             :                  }
     293             :                 else
     294           0 :                     load_IncludedCommands(out, pToken+3);
     295             :             }
     296             :         }
     297             :         else
     298             :         {
     299           0 :             if (aIncludedCommands.CurChar() > 32)
     300             :             {
     301           0 :                 aIncludedCommands.CutToken();
     302           0 :                 bInToken = true;
     303             :             }
     304             :         }   // endif (bInToken) else
     305             : 
     306           0 :     }   // end while()
     307           0 : }
     308             : 
     309             : namespace
     310             : {
     311             : inline int
     312           0 : v_nr(StringVector::const_iterator it)
     313             : {
     314           0 :      return int( *(*it).c_str() ) - int('0');
     315             : }
     316             : }   // anonymous namespace
     317             : 
     318             : void
     319           0 : CommandLine::do_clVerbose(  opt_iter &          it,
     320             :                             opt_iter            itEnd )
     321             : {
     322           0 :     ++it;
     323           0 :     if ( it == itEnd ? true : v_nr(it) < 0 OR v_nr(it) > 7 )
     324           0 :         throw command::X_CommandLine( "Missing or invalid number in -v option." );
     325           0 :     nDebugStyle = v_nr(it);
     326           0 :     ++it;
     327           0 : }
     328             : 
     329             : void
     330           1 : CommandLine::do_clParse( opt_iter &          it,
     331             :                          opt_iter            itEnd )
     332             : {
     333             :     command::Command *
     334           1 :         pCmd_Parse = new command::Parse;
     335           1 :     pCmd_Parse->Init(it, itEnd);
     336           1 :     aCommands.push_back(pCmd_Parse);
     337           1 : }
     338             : 
     339             : void
     340           1 : CommandLine::do_clCreateHtml( opt_iter &          it,
     341             :                               opt_iter            itEnd )
     342             : {
     343           1 :     pCommand_CreateHtml = new command::CreateHtml;
     344           1 :     pCommand_CreateHtml->Init(it, itEnd);
     345           1 :     aCommands.push_back(pCommand_CreateHtml);
     346           1 : }
     347             : 
     348             : void
     349           0 : CommandLine::do_clSinceFile( opt_iter &          it,
     350             :                              opt_iter            itEnd )
     351             : {
     352           0 :     pSinceTransformator->Init(it, itEnd);
     353           0 : }
     354             : 
     355             : 
     356             : namespace
     357             : {
     358             : 
     359             : struct Less_RunningRank
     360             : {
     361           1 :     bool                operator()(
     362             :                             const command::Command * const &
     363             :                                                 i1,
     364             :                             const command::Command * const &
     365             :                                                 i2 ) const
     366           1 :                         { return i1->RunningRank() < i2->RunningRank(); }
     367             : };
     368             : 
     369             : }   // anonymous namespace
     370             : 
     371             : 
     372             : 
     373             : void
     374           1 : CommandLine::sort_Commands()
     375             : {
     376             :     std::sort( aCommands.begin(),
     377             :                aCommands.end(),
     378           1 :                Less_RunningRank() );
     379           1 : }
     380             : 
     381           3 : }   // namespace autodoc
     382             : 
     383             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10