1*78bc99aaSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*78bc99aaSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*78bc99aaSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*78bc99aaSAndrew Rist * distributed with this work for additional information 6*78bc99aaSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*78bc99aaSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*78bc99aaSAndrew Rist * "License"); you may not use this file except in compliance 9*78bc99aaSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*78bc99aaSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*78bc99aaSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*78bc99aaSAndrew Rist * software distributed under the License is distributed on an 15*78bc99aaSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*78bc99aaSAndrew Rist * KIND, either express or implied. See the License for the 17*78bc99aaSAndrew Rist * specific language governing permissions and limitations 18*78bc99aaSAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*78bc99aaSAndrew Rist *************************************************************/ 21cdf0e10cSrcweir 22cdf0e10cSrcweir #include <precomp.h> 23cdf0e10cSrcweir #include <adoc/docu_pe.hxx> 24cdf0e10cSrcweir 25cdf0e10cSrcweir 26cdf0e10cSrcweir // NOT FULLY DEFINED SERVICES 27cdf0e10cSrcweir #include <ary/doc/d_oldcppdocu.hxx> 28cdf0e10cSrcweir #include <ary/info/ci_attag.hxx> 29cdf0e10cSrcweir #include <ary/info/ci_text.hxx> 30cdf0e10cSrcweir #include <adoc/adoc_tok.hxx> 31cdf0e10cSrcweir #include <adoc/tk_attag.hxx> 32cdf0e10cSrcweir #include <adoc/tk_docw.hxx> 33cdf0e10cSrcweir 34cdf0e10cSrcweir 35cdf0e10cSrcweir namespace adoc 36cdf0e10cSrcweir { 37cdf0e10cSrcweir 38cdf0e10cSrcweir 39cdf0e10cSrcweir inline bool 40cdf0e10cSrcweir Adoc_PE::UsesHtmlInDocuText() 41cdf0e10cSrcweir { 42cdf0e10cSrcweir return bUsesHtmlInDocuText; 43cdf0e10cSrcweir } 44cdf0e10cSrcweir 45cdf0e10cSrcweir 46cdf0e10cSrcweir 47cdf0e10cSrcweir 48cdf0e10cSrcweir Adoc_PE::Adoc_PE() 49cdf0e10cSrcweir : pCurDocu(0), 50cdf0e10cSrcweir pCurAtTag(0), 51cdf0e10cSrcweir nLineCountInDocu(0), 52cdf0e10cSrcweir nCurSpecialMeaningTokens(0), 53cdf0e10cSrcweir nCurSubtractFromLineStart(0), 54cdf0e10cSrcweir eCurTagState(ts_new), 55cdf0e10cSrcweir eDocuState(ds_wait_for_short), 56cdf0e10cSrcweir bIsComplete(false), 57cdf0e10cSrcweir bUsesHtmlInDocuText(false) 58cdf0e10cSrcweir { 59cdf0e10cSrcweir } 60cdf0e10cSrcweir 61cdf0e10cSrcweir Adoc_PE::~Adoc_PE() 62cdf0e10cSrcweir { 63cdf0e10cSrcweir } 64cdf0e10cSrcweir 65cdf0e10cSrcweir void 66cdf0e10cSrcweir Adoc_PE::Hdl_at_std( const Tok_at_std & i_rTok ) 67cdf0e10cSrcweir { 68cdf0e10cSrcweir InstallAtTag( 69cdf0e10cSrcweir CurDocu().Create_StdTag(i_rTok.Id()) ); 70cdf0e10cSrcweir } 71cdf0e10cSrcweir 72cdf0e10cSrcweir void 73cdf0e10cSrcweir Adoc_PE::Hdl_at_base( const Tok_at_base & ) 74cdf0e10cSrcweir { 75cdf0e10cSrcweir InstallAtTag( 76cdf0e10cSrcweir CurDocu().CheckIn_BaseTag() ); 77cdf0e10cSrcweir } 78cdf0e10cSrcweir 79cdf0e10cSrcweir void 80cdf0e10cSrcweir Adoc_PE::Hdl_at_exception( const Tok_at_exception & ) 81cdf0e10cSrcweir { 82cdf0e10cSrcweir InstallAtTag( 83cdf0e10cSrcweir CurDocu().CheckIn_ExceptionTag() ); 84cdf0e10cSrcweir } 85cdf0e10cSrcweir 86cdf0e10cSrcweir void 87cdf0e10cSrcweir Adoc_PE::Hdl_at_impl( const Tok_at_impl & ) 88cdf0e10cSrcweir { 89cdf0e10cSrcweir InstallAtTag( 90cdf0e10cSrcweir CurDocu().Create_ImplementsTag() ); 91cdf0e10cSrcweir } 92cdf0e10cSrcweir 93cdf0e10cSrcweir void 94cdf0e10cSrcweir Adoc_PE::Hdl_at_key( const Tok_at_key & ) 95cdf0e10cSrcweir { 96cdf0e10cSrcweir InstallAtTag( 97cdf0e10cSrcweir CurDocu().Create_KeywordTag() ); 98cdf0e10cSrcweir } 99cdf0e10cSrcweir 100cdf0e10cSrcweir void 101cdf0e10cSrcweir Adoc_PE::Hdl_at_param( const Tok_at_param & ) 102cdf0e10cSrcweir { 103cdf0e10cSrcweir InstallAtTag( 104cdf0e10cSrcweir CurDocu().CheckIn_ParameterTag() ); 105cdf0e10cSrcweir } 106cdf0e10cSrcweir 107cdf0e10cSrcweir void 108cdf0e10cSrcweir Adoc_PE::Hdl_at_see( const Tok_at_see & ) 109cdf0e10cSrcweir { 110cdf0e10cSrcweir InstallAtTag( 111cdf0e10cSrcweir CurDocu().CheckIn_SeeTag() ); 112cdf0e10cSrcweir } 113cdf0e10cSrcweir 114cdf0e10cSrcweir void 115cdf0e10cSrcweir Adoc_PE::Hdl_at_template( const Tok_at_template & ) 116cdf0e10cSrcweir { 117cdf0e10cSrcweir InstallAtTag( 118cdf0e10cSrcweir CurDocu().CheckIn_TemplateTag() ); 119cdf0e10cSrcweir } 120cdf0e10cSrcweir 121cdf0e10cSrcweir void 122cdf0e10cSrcweir Adoc_PE::Hdl_at_interface( const Tok_at_interface & ) 123cdf0e10cSrcweir { 124cdf0e10cSrcweir CurDocu().Set_Interface(); 125cdf0e10cSrcweir } 126cdf0e10cSrcweir 127cdf0e10cSrcweir void 128cdf0e10cSrcweir Adoc_PE::Hdl_at_internal( const Tok_at_internal & ) 129cdf0e10cSrcweir { 130cdf0e10cSrcweir CurDocu().Set_Internal(); 131cdf0e10cSrcweir } 132cdf0e10cSrcweir 133cdf0e10cSrcweir void 134cdf0e10cSrcweir Adoc_PE::Hdl_at_obsolete( const Tok_at_obsolete & ) 135cdf0e10cSrcweir { 136cdf0e10cSrcweir CurDocu().Set_Obsolete(); 137cdf0e10cSrcweir } 138cdf0e10cSrcweir 139cdf0e10cSrcweir void 140cdf0e10cSrcweir Adoc_PE::Hdl_at_module( const Tok_at_module & ) 141cdf0e10cSrcweir { 142cdf0e10cSrcweir // KORR_FUTURE 143cdf0e10cSrcweir 144cdf0e10cSrcweir // pCurAtTag = CurDocu().Assign2_ModuleTag(); 145cdf0e10cSrcweir // nCurSpecialMeaningTokens = pCurAtTag->NrOfSpecialMeaningTokens(); 146cdf0e10cSrcweir } 147cdf0e10cSrcweir 148cdf0e10cSrcweir void 149cdf0e10cSrcweir Adoc_PE::Hdl_at_file( const Tok_at_file & ) 150cdf0e10cSrcweir { 151cdf0e10cSrcweir // KORR_FUTURE 152cdf0e10cSrcweir 153cdf0e10cSrcweir // pCurAtTag = CurDocu().Assign2_FileTag(); 154cdf0e10cSrcweir // nCurSpecialMeaningTokens = pCurAtTag->NrOfSpecialMeaningTokens(); 155cdf0e10cSrcweir } 156cdf0e10cSrcweir 157cdf0e10cSrcweir void 158cdf0e10cSrcweir Adoc_PE::Hdl_at_gloss( const Tok_at_gloss & ) 159cdf0e10cSrcweir { 160cdf0e10cSrcweir // KORR_FUTURE 161cdf0e10cSrcweir 162cdf0e10cSrcweir // Create_GlossaryEntry(); 163cdf0e10cSrcweir } 164cdf0e10cSrcweir 165cdf0e10cSrcweir void 166cdf0e10cSrcweir Adoc_PE::Hdl_at_global( const Tok_at_global & ) 167cdf0e10cSrcweir { 168cdf0e10cSrcweir // KORR_FUTURE 169cdf0e10cSrcweir // Create_GlobalTextComponent(); 170cdf0e10cSrcweir } 171cdf0e10cSrcweir 172cdf0e10cSrcweir void 173cdf0e10cSrcweir Adoc_PE::Hdl_at_include( const Tok_at_include & ) 174cdf0e10cSrcweir { 175cdf0e10cSrcweir // KORR_FUTURE 176cdf0e10cSrcweir } 177cdf0e10cSrcweir 178cdf0e10cSrcweir void 179cdf0e10cSrcweir Adoc_PE::Hdl_at_label( const Tok_at_label & ) 180cdf0e10cSrcweir { 181cdf0e10cSrcweir InstallAtTag( 182cdf0e10cSrcweir CurDocu().Create_LabelTag() ); 183cdf0e10cSrcweir } 184cdf0e10cSrcweir 185cdf0e10cSrcweir void 186cdf0e10cSrcweir Adoc_PE::Hdl_at_since( const Tok_at_since & ) 187cdf0e10cSrcweir { 188cdf0e10cSrcweir InstallAtTag( 189cdf0e10cSrcweir CurDocu().Create_SinceTag() ); 190cdf0e10cSrcweir } 191cdf0e10cSrcweir 192cdf0e10cSrcweir void 193cdf0e10cSrcweir Adoc_PE::Hdl_at_HTML( const Tok_at_HTML & ) 194cdf0e10cSrcweir { 195cdf0e10cSrcweir bUsesHtmlInDocuText = true; 196cdf0e10cSrcweir } 197cdf0e10cSrcweir 198cdf0e10cSrcweir void 199cdf0e10cSrcweir Adoc_PE::Hdl_at_NOHTML( const Tok_at_NOHTML & ) 200cdf0e10cSrcweir { 201cdf0e10cSrcweir bUsesHtmlInDocuText = false; 202cdf0e10cSrcweir } 203cdf0e10cSrcweir 204cdf0e10cSrcweir void 205cdf0e10cSrcweir Adoc_PE::Hdl_DocWord( const Tok_DocWord & i_rTok ) 206cdf0e10cSrcweir { 207cdf0e10cSrcweir bool bIsSpecial = false; 208cdf0e10cSrcweir if ( nCurSpecialMeaningTokens > 0 ) 209cdf0e10cSrcweir { 210cdf0e10cSrcweir bIsSpecial = CurAtTag().Add_SpecialMeaningToken( 211cdf0e10cSrcweir i_rTok.Text(), 212cdf0e10cSrcweir CurAtTag().NrOfSpecialMeaningTokens() 213cdf0e10cSrcweir - (--nCurSpecialMeaningTokens) ); 214cdf0e10cSrcweir } 215cdf0e10cSrcweir 216cdf0e10cSrcweir if ( NOT bIsSpecial ) 217cdf0e10cSrcweir { 218cdf0e10cSrcweir if ( eDocuState == ds_wait_for_short OR eDocuState == ds_1newline_after_short ) 219cdf0e10cSrcweir eDocuState = ds_in_short; 220cdf0e10cSrcweir if (nLineCountInDocu == 0) 221cdf0e10cSrcweir nLineCountInDocu = 1; 222cdf0e10cSrcweir 223cdf0e10cSrcweir uintt nLength = i_rTok.Length(); 224cdf0e10cSrcweir if ( nLength > 2 ) 225cdf0e10cSrcweir { 226cdf0e10cSrcweir bool bMaybeGlobalLink = strncmp( "::", i_rTok.Text(), 2 ) == 0; 227cdf0e10cSrcweir bool bMayBeFunction = *(i_rTok.Text() + nLength - 2) == '(' 228cdf0e10cSrcweir AND *(i_rTok.Text() + nLength - 1) == ')'; 229cdf0e10cSrcweir if ( bMaybeGlobalLink OR bMayBeFunction ) 230cdf0e10cSrcweir { 231cdf0e10cSrcweir CurAtTag().Add_PotentialLink( i_rTok.Text(), 232cdf0e10cSrcweir bMaybeGlobalLink, 233cdf0e10cSrcweir bMayBeFunction ); 234cdf0e10cSrcweir return; 235cdf0e10cSrcweir } 236cdf0e10cSrcweir } 237cdf0e10cSrcweir 238cdf0e10cSrcweir CurAtTag().Add_Token( i_rTok.Text() ); 239cdf0e10cSrcweir eCurTagState = ts_std; 240cdf0e10cSrcweir } 241cdf0e10cSrcweir } 242cdf0e10cSrcweir 243cdf0e10cSrcweir void 244cdf0e10cSrcweir Adoc_PE::Hdl_Whitespace( const Tok_Whitespace & i_rTok ) 245cdf0e10cSrcweir { 246cdf0e10cSrcweir if ( eCurTagState == ts_std ) 247cdf0e10cSrcweir { 248cdf0e10cSrcweir 249cdf0e10cSrcweir CurAtTag().Add_Whitespace(i_rTok.Size()); 250cdf0e10cSrcweir } 251cdf0e10cSrcweir } 252cdf0e10cSrcweir 253cdf0e10cSrcweir void 254cdf0e10cSrcweir Adoc_PE::Hdl_LineStart( const Tok_LineStart & i_rTok ) 255cdf0e10cSrcweir { 256cdf0e10cSrcweir if ( pCurAtTag == 0 ) 257cdf0e10cSrcweir return; 258cdf0e10cSrcweir 259cdf0e10cSrcweir if ( nLineCountInDocu == 2 ) 260cdf0e10cSrcweir { 261cdf0e10cSrcweir nCurSubtractFromLineStart = i_rTok.Size(); 262cdf0e10cSrcweir eCurTagState = ts_std; 263cdf0e10cSrcweir } 264cdf0e10cSrcweir else if ( nLineCountInDocu > 2 ) 265cdf0e10cSrcweir { 266cdf0e10cSrcweir if ( i_rTok.Size() > nCurSubtractFromLineStart ) 267cdf0e10cSrcweir { 268cdf0e10cSrcweir CurAtTag().Add_Whitespace( i_rTok.Size() 269cdf0e10cSrcweir - nCurSubtractFromLineStart ); 270cdf0e10cSrcweir } 271cdf0e10cSrcweir // else do nothing, because there is no whitespace. 272cdf0e10cSrcweir } 273cdf0e10cSrcweir } 274cdf0e10cSrcweir 275cdf0e10cSrcweir void 276cdf0e10cSrcweir Adoc_PE::Hdl_Eol( const Tok_Eol & ) 277cdf0e10cSrcweir { 278cdf0e10cSrcweir if ( pCurAtTag == 0 ) 279cdf0e10cSrcweir return; 280cdf0e10cSrcweir 281cdf0e10cSrcweir nLineCountInDocu++; 282cdf0e10cSrcweir 283cdf0e10cSrcweir if ( nCurSpecialMeaningTokens == 0 ) 284cdf0e10cSrcweir { 285cdf0e10cSrcweir CurAtTag().Add_Eol(); 286cdf0e10cSrcweir 287cdf0e10cSrcweir switch ( eDocuState ) 288cdf0e10cSrcweir { 289cdf0e10cSrcweir case ds_wait_for_short: break; 290cdf0e10cSrcweir case ds_in_short: if ( nLineCountInDocu < 4 ) 291cdf0e10cSrcweir eDocuState = ds_1newline_after_short; 292cdf0e10cSrcweir else 293cdf0e10cSrcweir { 294cdf0e10cSrcweir RenameCurShortTag(); 295cdf0e10cSrcweir eDocuState = ds_in_descr; 296cdf0e10cSrcweir } 297cdf0e10cSrcweir break; 298cdf0e10cSrcweir case ds_1newline_after_short: FinishCurShortTag(); 299cdf0e10cSrcweir eDocuState = ds_in_descr; 300cdf0e10cSrcweir break; 301cdf0e10cSrcweir default: 302cdf0e10cSrcweir ; // Do noting. 303cdf0e10cSrcweir } 304cdf0e10cSrcweir } 305cdf0e10cSrcweir else 306cdf0e10cSrcweir { 307cdf0e10cSrcweir nCurSpecialMeaningTokens = 0; 308cdf0e10cSrcweir } 309cdf0e10cSrcweir 310cdf0e10cSrcweir 311cdf0e10cSrcweir } 312cdf0e10cSrcweir 313cdf0e10cSrcweir void 314cdf0e10cSrcweir Adoc_PE::Hdl_EoDocu( const Tok_EoDocu & ) 315cdf0e10cSrcweir { 316cdf0e10cSrcweir bIsComplete = true; 317cdf0e10cSrcweir } 318cdf0e10cSrcweir 319cdf0e10cSrcweir DYN ary::doc::OldCppDocu * 320cdf0e10cSrcweir Adoc_PE::ReleaseJustParsedDocu() 321cdf0e10cSrcweir { 322cdf0e10cSrcweir pCurAtTag = 0; 323cdf0e10cSrcweir nLineCountInDocu = 0; 324cdf0e10cSrcweir nCurSpecialMeaningTokens = 0; 325cdf0e10cSrcweir nCurSubtractFromLineStart = 0; 326cdf0e10cSrcweir eCurTagState = ts_new; 327cdf0e10cSrcweir eDocuState = ds_wait_for_short; 328cdf0e10cSrcweir bIsComplete = false; 329cdf0e10cSrcweir return pCurDocu.Release(); 330cdf0e10cSrcweir } 331cdf0e10cSrcweir 332cdf0e10cSrcweir void 333cdf0e10cSrcweir Adoc_PE::InstallAtTag( DYN ary::info::AtTag * let_dpTag, 334cdf0e10cSrcweir bool i_bImplicit ) 335cdf0e10cSrcweir { 336cdf0e10cSrcweir pCurAtTag = let_dpTag; 337cdf0e10cSrcweir if ( pCurAtTag != 0 ) 338cdf0e10cSrcweir { 339cdf0e10cSrcweir nCurSpecialMeaningTokens = pCurAtTag->NrOfSpecialMeaningTokens(); 340cdf0e10cSrcweir pCurAtTag->Set_HtmlUseInDocuText( bUsesHtmlInDocuText ); 341cdf0e10cSrcweir } 342cdf0e10cSrcweir 343cdf0e10cSrcweir eCurTagState = ts_new; 344cdf0e10cSrcweir if ( NOT i_bImplicit ) 345cdf0e10cSrcweir eDocuState = ds_std; 346cdf0e10cSrcweir } 347cdf0e10cSrcweir 348cdf0e10cSrcweir ary::doc::OldCppDocu & 349cdf0e10cSrcweir Adoc_PE::CurDocu() 350cdf0e10cSrcweir { 351cdf0e10cSrcweir if (NOT pCurDocu) 352cdf0e10cSrcweir pCurDocu = new ary::doc::OldCppDocu; 353cdf0e10cSrcweir return *pCurDocu; 354cdf0e10cSrcweir } 355cdf0e10cSrcweir 356cdf0e10cSrcweir ary::info::AtTag & 357cdf0e10cSrcweir Adoc_PE::CurAtTag() 358cdf0e10cSrcweir { 359cdf0e10cSrcweir if (NOT pCurAtTag) 360cdf0e10cSrcweir { 361cdf0e10cSrcweir if ( int(eDocuState) < int(ds_in_descr) ) 362cdf0e10cSrcweir { 363cdf0e10cSrcweir InstallAtTag( 364cdf0e10cSrcweir CurDocu().Create_StdTag(ary::info::atid_short), 365cdf0e10cSrcweir true ); 366cdf0e10cSrcweir } 367cdf0e10cSrcweir else 368cdf0e10cSrcweir { 369cdf0e10cSrcweir InstallAtTag( 370cdf0e10cSrcweir CurDocu().Create_StdTag(ary::info::atid_descr), 371cdf0e10cSrcweir true ); 372cdf0e10cSrcweir } 373cdf0e10cSrcweir } 374cdf0e10cSrcweir return *pCurAtTag; 375cdf0e10cSrcweir } 376cdf0e10cSrcweir 377cdf0e10cSrcweir void 378cdf0e10cSrcweir Adoc_PE::RenameCurShortTag() 379cdf0e10cSrcweir { 380cdf0e10cSrcweir CurDocu().Replace_AtShort_By_AtDescr(); 381cdf0e10cSrcweir } 382cdf0e10cSrcweir 383cdf0e10cSrcweir void 384cdf0e10cSrcweir Adoc_PE::FinishCurShortTag() 385cdf0e10cSrcweir { 386cdf0e10cSrcweir InstallAtTag( 387cdf0e10cSrcweir CurDocu().Create_StdTag(ary::info::atid_descr), 388cdf0e10cSrcweir true ); 389cdf0e10cSrcweir } 390cdf0e10cSrcweir 391cdf0e10cSrcweir 392cdf0e10cSrcweir } // namespace adoc 393cdf0e10cSrcweir 394cdf0e10cSrcweir 395cdf0e10cSrcweir 396cdf0e10cSrcweir 397cdf0e10cSrcweir 398