LCOV - code coverage report
Current view: top level - libreoffice/autodoc/source/parser_i/idl - distrib.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 85 102 83.3 %
Date: 2012-12-27 Functions: 19 21 90.5 %
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 <s2_luidl/distrib.hxx>
      22             : 
      23             : 
      24             : // NOT FULLY DECLARED SERVICES
      25             : #include <ary/doc/d_oldidldocu.hxx>
      26             : #include <parser/parserinfo.hxx>
      27             : #include <s2_luidl/tkp_uidl.hxx>
      28             : #include <s2_luidl/parsenv2.hxx>
      29             : #include <s2_luidl/tk_punct.hxx>
      30             : #include <s2_dsapi/docu_pe2.hxx>
      31             : #include <adc_cl.hxx>
      32             : #include <x_parse2.hxx>
      33             : 
      34             : 
      35             : 
      36             : const uintt C_nNO_TRY = uintt(-1);
      37             : 
      38             : 
      39             : namespace csi
      40             : {
      41             : namespace uidl
      42             : {
      43             : 
      44           3 : TokenDistributor::TokenDistributor( ary::Repository & io_rRepository,
      45             :                                     ParserInfo &      io_rParserInfo )
      46             :     :   pTokenSource(0),
      47             :         aDocumentation(io_rParserInfo),
      48           3 :         aProcessingData( io_rRepository, aDocumentation, io_rParserInfo )
      49             : {
      50           3 : }
      51             : 
      52           3 : TokenDistributor::~TokenDistributor()
      53             : {
      54           3 : }
      55             : 
      56             : void
      57      527003 : TokenDistributor::TradeToken()
      58             : {
      59      527003 :     bool bGoon = true;
      60     2739545 :     while (bGoon AND NOT aProcessingData.NextTokenExists())
      61             :     {
      62     1685540 :         bGoon = pTokenSource->GetNextToken();
      63             :     }
      64      527002 :     if (bGoon)
      65      526996 :         aProcessingData.ProcessCurToken();
      66      527001 : }
      67             : 
      68           3 : TokenDistributor::ProcessingData::ProcessingData(
      69             :                                         ary::Repository &   io_rRepository,
      70             :                                         Documentation &         i_rDocuProcessor,
      71             :                                         ParserInfo &            io_rParserInfo )
      72             :     :   // aEnvironments
      73             :         // aTokenQueue
      74             :         // itCurToken
      75             :         // aCurResult
      76             :         nTryCount(0),
      77             :         rRepository(io_rRepository),
      78             :         rParserInfo(io_rParserInfo),
      79             :         pDocuProcessor(&i_rDocuProcessor),
      80           3 :         bPublishedRecentlyOn(false)
      81             : {
      82           3 :     itCurToken = aTokenQueue.end();
      83           3 : }
      84             : 
      85           3 : TokenDistributor::ProcessingData::~ProcessingData()
      86             : {
      87           3 : }
      88             : 
      89             : void
      90           3 : TokenDistributor::ProcessingData::SetTopParseEnvironment( UnoIDL_PE & io_pTopParseEnvironment )
      91             : {
      92           3 :     csv::erase_container(aEnvironments);
      93           3 :     aEnvironments.push_back( EnvironmentInfo( &io_pTopParseEnvironment, 0 ) );
      94           3 :     io_pTopParseEnvironment.EstablishContacts(0,rRepository,aCurResult);
      95           3 : }
      96             : 
      97             : void
      98      442624 : TokenDistributor::ProcessingData::Receive( DYN csi::uidl::Token & let_drToken )
      99             : {
     100      442624 :     aTokenQueue.push_back( &let_drToken );
     101      442624 :     itCurToken = aTokenQueue.end()-1;
     102      442624 : }
     103             : 
     104             : void
     105      225744 : TokenDistributor::ProcessingData::Increment_CurLine()
     106             : {
     107      225744 :     rParserInfo.Increment_CurLine();
     108      225744 : }
     109             : 
     110             : void
     111      526996 : TokenDistributor::ProcessingData::ProcessCurToken()
     112             : {
     113             : 
     114      526996 : if (DEBUG_ShowTokens())
     115             : {
     116           0 :     Cout() << (*itCurToken)->Text() << Endl();
     117             : }
     118             : 
     119      526996 :     aCurResult.reset();
     120             : 
     121      526996 :     CurEnvironment().ProcessToken( CurToken() );
     122      526996 :     AcknowledgeResult();
     123      526995 : }
     124             : 
     125             : 
     126             : UnoIDL_PE &
     127      526996 : TokenDistributor::ProcessingData::CurEnvironment() const
     128             : {
     129             :     csv_assert(aEnvironments.size() > 0);
     130             :     csv_assert(aEnvironments.back().first != 0);
     131             : 
     132      526996 :     return *aEnvironments.back().first;
     133             : }
     134             : 
     135             : bool
     136     2212536 : TokenDistributor::ProcessingData::NextTokenExists() const
     137             : {
     138     2212536 :     return itCurToken != aTokenQueue.end();
     139             : }
     140             : 
     141             : void
     142      526996 : TokenDistributor::ProcessingData::AcknowledgeResult()
     143             : {
     144      526996 :     if (aCurResult.eDone == done)
     145      442623 :         ++itCurToken;
     146             : 
     147      526996 :     switch ( aCurResult.eStackAction )
     148             :     {
     149             :         case stay:
     150      413357 :                 if (aCurResult.eDone != done)
     151             :                 {
     152             :                     csv_assert(false);
     153             :                 }
     154      413357 :                 break;
     155             :         case push_sure:
     156       56820 :                 CurEnv().Leave(push_sure);
     157       56820 :                 aEnvironments.push_back( EnvironmentInfo(&PushEnv(), C_nNO_TRY) );
     158       56820 :                 PushEnv().Enter(push_sure);
     159       56820 :                 PushEnv().SetDocu(pDocuProcessor->ReleaseLastParsedDocu());
     160       56820 :                 if (bPublishedRecentlyOn)
     161             :                 {
     162        3018 :                     PushEnv().SetPublished();
     163        3018 :                     bPublishedRecentlyOn = false;
     164             :                 }
     165             : 
     166       56820 :                 break;
     167             :         case push_try:
     168           0 :                 Cout() << "TestInfo: Environment tried." << Endl();
     169           0 :                 CurEnv().Leave(push_try);
     170           0 :                 aEnvironments.push_back( EnvironmentInfo(&PushEnv(), CurTokenPosition()) );
     171           0 :                 nTryCount++;
     172           0 :                 PushEnv().Enter(push_try);
     173           0 :                 break;
     174             :         case pop_success:
     175       56818 :                 CurEnv().Leave(pop_success);
     176       56818 :                 if ( CurEnv_TriedTokenPosition() > 0 )
     177       56818 :                     DecrementTryCount();
     178       56818 :                 aEnvironments.pop_back();
     179       56818 :                 CurEnv().Enter(pop_success);
     180       56818 :                 break;
     181             :         case pop_failure:
     182             :         {
     183           1 :                 CurEnv().Leave(pop_failure);
     184           0 :                 if (aCurResult.eDone == done)
     185             :                 {
     186             :                     csv_assert(false);
     187             :                 }
     188             : 
     189           0 :                 if ( CurEnv_TriedTokenPosition() == C_nNO_TRY )
     190           0 :                     throw X_AutodocParser( X_AutodocParser::x_UnexpectedToken, (*itCurToken)->Text() );
     191             : 
     192           0 :                 itCurToken = aTokenQueue.begin() + CurEnv_TriedTokenPosition();
     193           0 :                 DecrementTryCount();
     194           0 :                 aEnvironments.pop_back();
     195           0 :                 CurEnv().Enter(pop_failure);
     196           0 :         }       break;
     197             :         default:
     198             :             csv_assert(false);
     199             :     }   // end switch(aCurResult.eStackAction)
     200      526995 : }
     201             : 
     202             : void
     203       56818 : TokenDistributor::ProcessingData::DecrementTryCount()
     204             : {
     205       56818 :     nTryCount--;
     206       56818 :     if (nTryCount == 0)
     207             :     {
     208           0 :         aTokenQueue.erase(aTokenQueue.begin(), itCurToken);
     209           0 :         itCurToken = aTokenQueue.begin();
     210             :     }
     211       56818 : }
     212             : 
     213           3 : TokenDistributor::
     214             : Documentation::Documentation(ParserInfo & io_rParserInfo)
     215           3 :     :   pDocuParseEnv(new csi::dsapi::SapiDocu_PE(io_rParserInfo)),
     216             :         rParserInfo(io_rParserInfo),
     217             :         pMostRecentDocu(0),
     218           6 :         bIsPassedFirstDocu(false)
     219             : {
     220           3 : }
     221             : 
     222           3 : TokenDistributor::
     223           3 : Documentation::~Documentation()
     224             : {
     225           3 : }
     226             : 
     227             : void
     228     1242909 : TokenDistributor::
     229             : Documentation::Receive( DYN csi::dsapi::Token & let_drToken )
     230             : {
     231             :     csv_assert(pDocuParseEnv);
     232             : 
     233     1242909 :     pDocuParseEnv->ProcessToken(let_drToken);
     234     1242909 :     if ( pDocuParseEnv->IsComplete() )
     235             :     {
     236       19907 :         pMostRecentDocu = pDocuParseEnv->ReleaseJustParsedDocu();
     237       19907 :         if (NOT bIsPassedFirstDocu)
     238             :         {
     239        4032 :             pMostRecentDocu = 0;            // Deletes the most recent docu.
     240        4032 :             bIsPassedFirstDocu = true;
     241             :         }
     242             :     }
     243     1242909 : }
     244             : 
     245             : void
     246      100476 : TokenDistributor::
     247             : Documentation::Increment_CurLine()
     248             : {
     249      100476 :     rParserInfo.Increment_CurLine();
     250      100476 : }
     251             : 
     252             : 
     253             : }   // namespace uidl
     254           3 : }   // namespace csi
     255             : 
     256             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10