LCOV - code coverage report
Current view: top level - libreoffice/autodoc/source/parser_i/idl - pe_attri.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 103 120 85.8 %
Date: 2012-12-27 Functions: 17 19 89.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/pe_attri.hxx>
      22             : 
      23             : 
      24             : // NOT FULLY DEFINED SERVICES
      25             : #include <ary/idl/i_gate.hxx>
      26             : #include <ary/idl/i_attribute.hxx>
      27             : #include <ary/idl/i_service.hxx>
      28             : #include <ary/idl/ip_ce.hxx>
      29             : #include <ary/doc/d_oldidldocu.hxx>
      30             : #include <s2_luidl/pe_type2.hxx>
      31             : #include <s2_luidl/pe_vari2.hxx>
      32             : #include <s2_luidl/tk_keyw.hxx>
      33             : #include <s2_luidl/tk_ident.hxx>
      34             : #include <s2_luidl/tk_punct.hxx>
      35             : 
      36             : 
      37             : 
      38             : namespace csi
      39             : {
      40             : namespace uidl
      41             : {
      42             : 
      43             : 
      44             : 
      45           3 : PE_Attribute::PE_Attribute( const Ce_id & i_rCurOwner )
      46             :     :   eState(e_none),
      47             :         pCurOwner(&i_rCurOwner),
      48             :         pPE_Variable(0),
      49             :         pPE_Exception(0),
      50             :         pCurAttribute(0),
      51             :         nCurParsedType(0),
      52             :         sCurParsedName(),
      53             :         bReadOnly(false),
      54           3 :         bBound(false)
      55             : {
      56           3 :     pPE_Variable    = new PE_Variable(nCurParsedType, sCurParsedName);
      57           3 :     pPE_Exception   = new PE_Type(nCurParsedType);
      58           3 : }
      59             : 
      60             : void
      61           3 : PE_Attribute::EstablishContacts( UnoIDL_PE *                io_pParentPE,
      62             :                                  ary::Repository &      io_rRepository,
      63             :                                  TokenProcessing_Result &   o_rResult )
      64             : {
      65           3 :     UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
      66           3 :     pPE_Variable->EstablishContacts(this,io_rRepository,o_rResult);
      67           3 :     pPE_Exception->EstablishContacts(this,io_rRepository,o_rResult);
      68           3 : }
      69             : 
      70           6 : PE_Attribute::~PE_Attribute()
      71             : {
      72           6 : }
      73             : 
      74             : void
      75        3789 : PE_Attribute::ProcessToken( const Token & i_rToken )
      76             : {
      77        3789 :     i_rToken.Trigger(*this);
      78        3789 : }
      79             : 
      80             : void
      81         487 : PE_Attribute::Process_Identifier( const TokIdentifier & i_rToken )
      82             : {
      83         487 :     switch (eState)
      84             :     {
      85             :         case e_start:
      86         104 :             SetResult(not_done, push_sure, pPE_Variable.Ptr());
      87         104 :             eState = in_variable;
      88         104 :             break;
      89             :         case in_raise_std:
      90         190 :             if (strcmp(i_rToken.Text(),"get") == 0)
      91             :             {
      92          83 :                 SetResult(done, stay);
      93          83 :                 eState = in_get;
      94             :             }
      95         107 :             else if (strcmp(i_rToken.Text(),"set") == 0)
      96             :             {
      97         107 :                 SetResult(done, stay);
      98         107 :                 eState = in_set;
      99             :             }
     100             :             else
     101             :             {
     102           0 :                 SetResult(not_done, pop_failure);
     103           0 :                 eState = e_none;
     104             :             }
     105         190 :             break;
     106             :         case in_get:
     107             :         case in_set:
     108         193 :             SetResult(not_done, push_sure, pPE_Exception.Ptr());
     109         193 :             break;
     110             :         default:
     111           0 :             SetResult(not_done, pop_failure);
     112             :     }   // end switch
     113         487 : }
     114             : 
     115             : void
     116         280 : PE_Attribute::Process_Stereotype( const TokStereotype & i_rToken )
     117             : {
     118         280 :     if (eState != e_start)
     119             :     {
     120           0 :         SetResult(not_done, pop_failure);
     121           0 :         eState = e_none;
     122           0 :         return;
     123             :     }
     124             : 
     125         280 :     switch (i_rToken.Id())
     126             :     {
     127             :         case TokStereotype::ste_readonly:
     128         129 :             bReadOnly = true;
     129         129 :             break;
     130             :         case TokStereotype::ste_bound:
     131         151 :             bBound = true;
     132         151 :             break;
     133             :         default:
     134           0 :             SetResult(not_done, pop_failure);
     135           0 :             eState = e_none;
     136           0 :             return;
     137             :     }   // end switch
     138             : 
     139         280 :     SetResult(done, stay);
     140             : }
     141             : 
     142             : void
     143         513 : PE_Attribute::Process_MetaType( const TokMetaType & i_rToken )
     144             : {
     145         513 :     if (eState != e_start OR i_rToken.Id() != TokMetaType::mt_attribute)
     146             :     {
     147           0 :         SetResult(not_done, pop_failure);
     148           0 :         eState = e_none;
     149         513 :         return;
     150             :     }
     151             : 
     152         513 :     SetResult(done, stay);
     153             : }
     154             : 
     155             : void
     156        1599 : PE_Attribute::Process_Punctuation( const TokPunctuation & i_rToken )
     157             : {
     158        1599 :     switch (eState)
     159             :     {
     160             :         case e_start:
     161         280 :             SetResult(done, stay);
     162         280 :             break;
     163             :         case expect_end:
     164         626 :             switch(i_rToken.Id())
     165             :             {
     166             :                 case TokPunctuation::Semicolon:
     167         513 :                     SetResult(done, pop_success);
     168         513 :                     eState = e_none;
     169         513 :                     break;
     170             :                 case TokPunctuation::Comma:
     171           0 :                     SetResult(not_done, pop_failure);
     172           0 :                     Cerr() << "Autodoc does not support comma separated attributes, because those are discouraged by IDL policies." << Endl();
     173           0 :                     break;
     174             :                 case TokPunctuation::CurledBracketOpen:
     175         113 :                     SetResult(done, stay);
     176         113 :                     eState = in_raise_std;
     177         113 :                     break;
     178             :                 default:
     179           0 :                     SetResult(not_done, pop_failure);
     180             :             }   // end switch
     181         626 :             break;
     182             :         case in_raise_std:
     183         113 :             SetResult(done, stay);
     184         113 :             if (i_rToken.Id() == TokPunctuation::CurledBracketClose)
     185             :             {
     186         113 :                 eState = expect_end;
     187             :             }
     188         113 :             break;
     189             :         case in_get:
     190             :         case in_set:
     191         580 :             SetResult(done, stay);
     192         580 :             if (i_rToken.Id() == TokPunctuation::Semicolon)
     193             :             {
     194         190 :                 eState = in_raise_std;
     195             :             }
     196         580 :             break;
     197             :         default:
     198             :             csv_assert(false);
     199             :     }
     200        1599 : }
     201             : 
     202             : void
     203         190 : PE_Attribute::Process_Raises()
     204             : {
     205         190 :     if (eState == in_get OR eState == in_set)
     206             :     {
     207         190 :         SetResult(done, stay);
     208             :     }
     209             :     else
     210           0 :         SetResult(not_done, pop_failure);
     211         190 : }
     212             : 
     213             : void
     214         416 : PE_Attribute::Process_Default()
     215             : {
     216         416 :     if (eState == e_start)
     217             :     {
     218         409 :         SetResult(not_done, push_sure, pPE_Variable.Ptr());
     219         409 :         eState = in_variable;
     220             :     }
     221           7 :     else if (eState == in_get OR eState == in_set)
     222           7 :         SetResult(not_done, push_sure, pPE_Exception.Ptr());
     223             :     else
     224           0 :         SetResult(not_done, pop_failure);
     225         416 : }
     226             : 
     227             : void
     228         513 : PE_Attribute::InitData()
     229             : {
     230         513 :     eState = e_start;
     231             : 
     232         513 :     pCurAttribute = 0;
     233         513 :     nCurParsedType = 0;
     234         513 :     sCurParsedName = "";
     235         513 :     bReadOnly = false;
     236         513 :     bBound = false;
     237         513 : }
     238             : 
     239             : void
     240         513 : PE_Attribute::TransferData()
     241             : {
     242         513 :     eState = e_none;
     243         513 : }
     244             : 
     245             : void
     246         713 : PE_Attribute::ReceiveData()
     247             : {
     248         713 :     switch (eState)
     249             :     {
     250             :         case in_variable:
     251             :             csv_assert(pCurOwner->IsValid());
     252         513 :             pCurAttribute = &Gate().Ces().Store_Attribute(
     253             :                                                     *pCurOwner,
     254             :                                                     sCurParsedName,
     255             :                                                     nCurParsedType,
     256             :                                                     bReadOnly,
     257         513 :                                                     bBound );
     258         513 :             PassDocuAt(*pCurAttribute);
     259         513 :             nCurParsedType = 0;
     260         513 :             eState = expect_end;
     261         513 :             break;
     262             :         case in_get:
     263             :             csv_assert(pCurAttribute != 0);
     264          83 :             pCurAttribute->Add_GetException(nCurParsedType);
     265          83 :             nCurParsedType = 0;
     266          83 :             break;
     267             :         case in_set:
     268             :             csv_assert(pCurAttribute != 0);
     269         117 :             pCurAttribute->Add_SetException(nCurParsedType);
     270         117 :             nCurParsedType = 0;
     271         117 :             break;
     272             :         default:
     273             :             csv_assert(false);
     274             :     }   // end switch
     275         713 : }
     276             : 
     277             : 
     278             : UnoIDL_PE &
     279         304 : PE_Attribute::MyPE()
     280             : {
     281         304 :     return *this;
     282             : }
     283             : 
     284             : 
     285             : }   // namespace uidl
     286           3 : }   // namespace csi
     287             : 
     288             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10