Changeset 568


Ignore:
Timestamp:
07/02/14 12:36:08 (5 years ago)
Author:
jls17
Message:
  • extracted methods replaceAllSpecials and replaceAllFields from TextFindFields?
Location:
branches/work_311/doc
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/work_311/doc/DocTextReferences.cpp

    r567 r568  
    4141                        return inText; 
    4242 
    43                 stringstream strmTmp; 
    44  
    45                 // check for special run-process commands 
    46                 bool specialFound = false; 
    47                 string::size_type cmdStartPos = inText.find("Application-"); 
    48                 if (cmdStartPos != string::npos) 
    49                 { 
    50                         string::size_type nextSearchPos = cmdStartPos + 12; // add length("Application-") 
    51                         specialFound = true; 
    52  
    53                         if (inText.compare(nextSearchPos, 17, "Copy-Field-Value ") == 0) 
     43                replaceAllSpecials(); 
     44                replaceAllFields(); 
     45        } 
     46        catch(exception& e) 
     47        { 
     48                cout << "EXCEPTION in TextFindField: " << e.what() << endl; 
     49        } 
     50 
     51        return inText; 
     52} 
     53 
     54void CDocTextReferences::replaceAllSpecials() 
     55{ 
     56        stringstream strmTmp; 
     57 
     58        // check for special run-process commands 
     59        bool specialFound = false; 
     60        string::size_type cmdStartPos = inText.find("Application-"); 
     61        if (cmdStartPos != string::npos) 
     62        { 
     63                string::size_type nextSearchPos = cmdStartPos + 12; // add length("Application-") 
     64                specialFound = true; 
     65 
     66                if (inText.compare(nextSearchPos, 17, "Copy-Field-Value ") == 0) 
     67                { 
     68                        strmTmp << processTwoFields("Application-Copy-Field-Value"); 
     69                } 
     70                else if (inText.compare(nextSearchPos, 13, "Delete-Entry ") == 0) 
     71                { 
     72                        CRefItem newRefItem(*refItem, REFM_DELETE_ENTRY_ACTION); 
     73                        strmTmp << processForm("Application-Delete-Entry", (refItem == NULL ? refItem : &newRefItem)); 
     74                } 
     75                else if (inText.compare(nextSearchPos, 12, "Format-Qual ") == 0) 
     76                { 
     77                        strmTmp << processForm("Application-Format-Qual"); 
     78                } 
     79                else if (inText.compare(nextSearchPos, 19, "Format-Qual-Filter ") == 0) 
     80                { 
     81                        strmTmp << processForm("Application-Format-Qual-Filter"); 
     82                } 
     83                else if (inText.compare(nextSearchPos, 15, "Format-Qual-ID ") == 0) 
     84                { 
     85                        strmTmp << processForm("Application-Format-Qual-ID"); 
     86                } 
     87                else if (inText.compare(nextSearchPos, 14, "Format-Qual-L ") == 0) 
     88                { 
     89                        strmTmp << processForm("Application-Format-Qual-L"); 
     90                } 
     91                else if (inText.compare(nextSearchPos, 18, "Get-Approval-Join ") == 0) 
     92                { 
     93                        strmTmp << processForm("Application-Get-Approval-Join"); 
     94                } 
     95                else if (inText.compare(nextSearchPos, 19, "Get-Approval-Join2 ") == 0) 
     96                { 
     97                        strmTmp << processForm("Application-Get-Approval-Join2"); 
     98                } 
     99                else if (inText.compare(nextSearchPos, 16, "Get-DetSig-Join ") == 0) 
     100                { 
     101                        strmTmp << processForm("Application-Get-DetSig-Join"); 
     102                } 
     103                else if (inText.compare(nextSearchPos, 17, "Get-DetSig-Join2 ") == 0) 
     104                { 
     105                        strmTmp << processForm("Application-Get-DetSig-Join2"); 
     106                } 
     107                else if (inText.compare(nextSearchPos, 15, "Get-Form-Alias ") == 0) 
     108                { 
     109                        strmTmp << processForm("Application-Get-Form-Alias"); 
     110                } 
     111                else if (inText.compare(nextSearchPos, 17, "Get-Locale-VuiID ") == 0) 
     112                { 
     113                        strmTmp << processForm("Application-Get-Locale-VuiID"); 
     114                } 
     115                else if (inText.compare(nextSearchPos, 25, "Get-Next-Recurrence-Time ") == 0) 
     116                { 
     117                        strmTmp << processForm("Application-Get-Next-Recurrence-Time"); 
     118                } 
     119                else if (inText.compare(nextSearchPos, 17, "Map-Ids-To-Names ") == 0) 
     120                { 
     121                        strmTmp << processForm("Application-Map-Ids-To-Names"); 
     122                } 
     123                else if (inText.compare(nextSearchPos, 19, "Map-Ids-To-Names-L ") == 0) 
     124                { 
     125                        strmTmp << processForm("Application-Map-Ids-To-Names-L"); 
     126                } 
     127                else if (inText.compare(nextSearchPos, 17, "Map-Names-To-Ids ") == 0) 
     128                { 
     129                        strmTmp << processForm("Application-Map-Names-To-Ids"); 
     130                } 
     131                else if (inText.compare(nextSearchPos, 19, "Map-Names-To-Ids-L ") == 0) 
     132                { 
     133                        strmTmp << processForm("Application-Map-Names-To-Ids-L"); 
     134                } 
     135                else if (inText.compare(nextSearchPos, 11, "Parse-Qual ") == 0) 
     136                { 
     137                        strmTmp << processForm("Application-Parse-Qual"); 
     138                } 
     139                else if (inText.compare(nextSearchPos, 18, "Parse-Qual-Filter ") == 0) 
     140                { 
     141                        strmTmp << processForm("Application-Parse-Qual-Filter"); 
     142                } 
     143                else if (inText.compare(nextSearchPos, 13, "Parse-Qual-L ") == 0) 
     144                { 
     145                        strmTmp << processForm("Application-Parse-Qual-L"); 
     146                } 
     147                else if (inText.compare(nextSearchPos, 20, "Parse-Qual-SField-L ") == 0) 
     148                { 
     149                        strmTmp << processForm("Application-Parse-Qual-SField-L"); 
     150                } 
     151                else if (inText.compare(nextSearchPos, 17, "Parse-Val-SField ") == 0) 
     152                { 
     153                        strmTmp << processForm("Application-Parse-Val-SField"); 
     154                } 
     155                else if (inText.compare(nextSearchPos, 19, "Query-Delete-Entry ") == 0) 
     156                { 
     157                        CRefItem newRefItem(*refItem, REFM_DELETE_ENTRY_ACTION); 
     158                        strmTmp << processForm("Application-Query-Delete-Entry", (refItem == NULL ? NULL : &newRefItem)); 
     159                } 
     160                else 
     161                { 
     162                        specialFound = false; 
     163                } 
     164        } 
     165         
     166        cmdStartPos = inText.find("PERFORM-ACTION-"); 
     167        if (cmdStartPos != string::npos) 
     168        { 
     169                string::size_type nextSearchPos = cmdStartPos + 15; // add length("PERFORM-ACTION-") 
     170                specialFound = true; 
     171 
     172                if (inText.compare(nextSearchPos, 12, "ACTIVE-LINK ") == 0) 
     173                { 
     174                        strmTmp << processSecondParameter("PERFORM-ACTION-ACTIVE-LINK"); 
     175                } 
     176                else if (inText.compare(nextSearchPos, 15, "ADD-ATTACHMENT ") == 0) 
     177                { 
     178                        strmTmp << processOneField("PERFORM-ACTION-ADD-ATTACHMENT"); 
     179                } 
     180                else if (inText.compare(nextSearchPos, 18, "DELETE-ATTACHMENT ") == 0) 
     181                { 
     182                        strmTmp << processOneField("PERFORM-ACTION-DELETE-ATTACHMENT"); 
     183                } 
     184                else if (inText.compare(nextSearchPos, 16, "GET-FIELD-LABEL ") == 0) 
     185                { 
     186                        strmTmp << processOneField("PERFORM-ACTION-GET-FIELD-LABEL"); 
     187                } 
     188                else if (inText.compare(nextSearchPos, 15, "GET-PREFERENCE ") == 0) 
     189                { 
     190                        strmTmp << processOneField("PERFORM-ACTION-GET-PREFERENCE"); 
     191                } 
     192                else if (inText.compare(nextSearchPos, 28, "NAV-FIELD-SET-SELECTED-ITEM ") == 0) 
     193                { 
     194                        strmTmp << processOneField("PERFORM-ACTION-NAV-FIELD-SET-SELECTED-ITEM"); 
     195                } 
     196                else if (inText.compare(nextSearchPos, 16, "OPEN-ATTACHMENT ") == 0) 
     197                { 
     198                        strmTmp << processOneField("PERFORM-ACTION-OPEN-ATTACHMENT"); 
     199                } 
     200                else if (inText.compare(nextSearchPos, 16, "SAVE-ATTACHMENT ") == 0) 
     201                { 
     202                        strmTmp << processOneField("PERFORM-ACTION-SAVE-ATTACHMENT"); 
     203                } 
     204                else if (inText.compare(nextSearchPos, 15, "SET-PREFERENCE ") == 0) 
     205                { 
     206                        strmTmp << processOneField("PERFORM-ACTION-SET-PREFERENCE"); 
     207                } 
     208                else if (inText.compare(nextSearchPos, 12, "TABLE-CLEAR ") == 0) 
     209                { 
     210                        strmTmp << processOneField("PERFORM-ACTION-TABLE-CLEAR"); 
     211                } 
     212                else if (inText.compare(nextSearchPos, 23, "TABLE-CLEAR-ROWCHANGED ") == 0) 
     213                { 
     214                        strmTmp << processOneField("PERFORM-ACTION-TABLE-CLEAR-ROWCHANGED"); 
     215                } 
     216                else if (inText.compare(nextSearchPos, 18, "TABLE-DESELECTALL ") == 0) 
     217                { 
     218                        strmTmp << processOneField("PERFORM-ACTION-TABLE-DESELECTALL"); 
     219                } 
     220                else if (inText.compare(nextSearchPos, 26, "TABLE-GET-SELECTED-COLUMN ") == 0) 
     221                { 
     222                        strmTmp << processOneField("PERFORM-ACTION-TABLE-GET-SELECTED-COLUMN"); 
     223                } 
     224                else if (inText.compare(nextSearchPos, 23, "TABLE-IS-LEAF-SELECTED ") == 0) 
     225                { 
     226                        strmTmp << processOneField("PERFORM-ACTION-TABLE-IS-LEAF-SELECTED"); 
     227                } 
     228                else if (inText.compare(nextSearchPos, 17, "TABLE-NEXT-CHUNK ") == 0) 
     229                { 
     230                        strmTmp << processOneField("PERFORM-ACTION-TABLE-NEXT-CHUNK"); 
     231                } 
     232                else if (inText.compare(nextSearchPos, 17, "TABLE-PREV-CHUNK ") == 0) 
     233                { 
     234                        strmTmp << processOneField("PERFORM-ACTION-TABLE-PREV-CHUNK"); 
     235                } 
     236                else if (inText.compare(nextSearchPos, 14, "TABLE-REFRESH ") == 0) 
     237                { 
     238                        strmTmp << processOneField("PERFORM-ACTION-TABLE-REFRESH"); 
     239                } 
     240                else if (inText.compare(nextSearchPos, 13, "TABLE-REPORT ") == 0) 
     241                { 
     242                        strmTmp << processOneField("PERFORM-ACTION-TABLE-REPORT"); 
     243                } 
     244                else if (inText.compare(nextSearchPos, 18, "TABLE-SELECT-NODE ") == 0) 
     245                { 
     246                        strmTmp << processOneField("PERFORM-ACTION-TABLE-SELECT-NODE"); 
     247                } 
     248                else if (inText.compare(nextSearchPos, 16, "TABLE-SELECTALL ") == 0) 
     249                { 
     250                        strmTmp << processOneField("PERFORM-ACTION-TABLE-SELECTALL"); 
     251                } 
     252                else 
     253                { 
     254                        specialFound = false; 
     255                } 
     256        } 
     257 
     258        //write the current string back to inText, then clear the stream for use with the application code 
     259        if (specialFound) 
     260        { 
     261                inText = strmTmp.str(); 
     262        } 
     263} 
     264 
     265void CDocTextReferences::replaceAllFields() 
     266{ 
     267        stringstream strmTmp; 
     268        string::size_type curPos = 0; 
     269        string::size_type startPos = 0; 
     270        string::size_type maxLen = inText.length(); 
     271        string::size_type fieldIdPos = 0; 
     272 
     273        char fieldId[20]; 
     274        char *enumId;    // points to the enum part of status history within fieldId later 
     275        char *usrOrTime; // points to the "user or time" part of status history within fieldId later 
     276 
     277        while ((startPos = inText.find(fieldSeparator.at(0),curPos)) != std::string::npos) 
     278        { 
     279                ++startPos; 
     280                strmTmp << inText.substr(curPos,startPos - curPos); 
     281                curPos = startPos; 
     282 
     283                // reset 
     284                fieldIdPos = 0;  
     285                fieldId[0] = 0; 
     286                enumId = NULL; 
     287                usrOrTime = NULL; 
     288 
     289                for (curPos = startPos; curPos < maxLen; ++curPos) 
     290                { 
     291                        char currChar = inText.at(curPos); 
     292                        if (currChar == '-' && fieldIdPos != 0)   
     293                                break; // - is only allowed at the beginning 
     294                        if (currChar >= '0' && currChar <= '9' || currChar == '-' || currChar == '.') 
    54295                        { 
    55                                 strmTmp << processTwoFields("Application-Copy-Field-Value"); 
     296                                if (fieldIdPos + 1 == 20) 
     297                                        break;  // max length .. that cant be a field 
     298 
     299                                if (currChar != '.' && fieldIdPos > 1 && fieldId[fieldIdPos-1] == '.') 
     300                                { 
     301                                        fieldId[fieldIdPos-1] = 0; 
     302                                        if (enumId == NULL) 
     303                                                enumId = &fieldId[fieldIdPos]; 
     304                                        else if (usrOrTime == NULL) 
     305                                                usrOrTime = &fieldId[fieldIdPos]; 
     306                                        else 
     307                                                break; // uhh ohh 
     308                                } 
     309                                // copy it over 
     310                                fieldId[fieldIdPos++] = currChar; 
     311                                continue; 
    56312                        } 
    57                         else if (inText.compare(nextSearchPos, 13, "Delete-Entry ") == 0) 
     313                        if (currChar == fieldSeparator.at(0)) 
    58314                        { 
    59                                 CRefItem newRefItem(*refItem, REFM_DELETE_ENTRY_ACTION); 
    60                                 strmTmp << processForm("Application-Delete-Entry", (refItem == NULL ? refItem : &newRefItem)); 
    61                         } 
    62                         else if (inText.compare(nextSearchPos, 12, "Format-Qual ") == 0) 
    63                         { 
    64                                 strmTmp << processForm("Application-Format-Qual"); 
    65                         } 
    66                         else if (inText.compare(nextSearchPos, 19, "Format-Qual-Filter ") == 0) 
    67                         { 
    68                                 strmTmp << processForm("Application-Format-Qual-Filter"); 
    69                         } 
    70                         else if (inText.compare(nextSearchPos, 15, "Format-Qual-ID ") == 0) 
    71                         { 
    72                                 strmTmp << processForm("Application-Format-Qual-ID"); 
    73                         } 
    74                         else if (inText.compare(nextSearchPos, 14, "Format-Qual-L ") == 0) 
    75                         { 
    76                                 strmTmp << processForm("Application-Format-Qual-L"); 
    77                         } 
    78                         else if (inText.compare(nextSearchPos, 18, "Get-Approval-Join ") == 0) 
    79                         { 
    80                                 strmTmp << processForm("Application-Get-Approval-Join"); 
    81                         } 
    82                         else if (inText.compare(nextSearchPos, 19, "Get-Approval-Join2 ") == 0) 
    83                         { 
    84                                 strmTmp << processForm("Application-Get-Approval-Join2"); 
    85                         } 
    86                         else if (inText.compare(nextSearchPos, 16, "Get-DetSig-Join ") == 0) 
    87                         { 
    88                                 strmTmp << processForm("Application-Get-DetSig-Join"); 
    89                         } 
    90                         else if (inText.compare(nextSearchPos, 17, "Get-DetSig-Join2 ") == 0) 
    91                         { 
    92                                 strmTmp << processForm("Application-Get-DetSig-Join2"); 
    93                         } 
    94                         else if (inText.compare(nextSearchPos, 15, "Get-Form-Alias ") == 0) 
    95                         { 
    96                                 strmTmp << processForm("Application-Get-Form-Alias"); 
    97                         } 
    98                         else if (inText.compare(nextSearchPos, 17, "Get-Locale-VuiID ") == 0) 
    99                         { 
    100                                 strmTmp << processForm("Application-Get-Locale-VuiID"); 
    101                         } 
    102                         else if (inText.compare(nextSearchPos, 25, "Get-Next-Recurrence-Time ") == 0) 
    103                         { 
    104                                 strmTmp << processForm("Application-Get-Next-Recurrence-Time"); 
    105                         } 
    106                         else if (inText.compare(nextSearchPos, 17, "Map-Ids-To-Names ") == 0) 
    107                         { 
    108                                 strmTmp << processForm("Application-Map-Ids-To-Names"); 
    109                         } 
    110                         else if (inText.compare(nextSearchPos, 19, "Map-Ids-To-Names-L ") == 0) 
    111                         { 
    112                                 strmTmp << processForm("Application-Map-Ids-To-Names-L"); 
    113                         } 
    114                         else if (inText.compare(nextSearchPos, 17, "Map-Names-To-Ids ") == 0) 
    115                         { 
    116                                 strmTmp << processForm("Application-Map-Names-To-Ids"); 
    117                         } 
    118                         else if (inText.compare(nextSearchPos, 19, "Map-Names-To-Ids-L ") == 0) 
    119                         { 
    120                                 strmTmp << processForm("Application-Map-Names-To-Ids-L"); 
    121                         } 
    122                         else if (inText.compare(nextSearchPos, 11, "Parse-Qual ") == 0) 
    123                         { 
    124                                 strmTmp << processForm("Application-Parse-Qual"); 
    125                         } 
    126                         else if (inText.compare(nextSearchPos, 18, "Parse-Qual-Filter ") == 0) 
    127                         { 
    128                                 strmTmp << processForm("Application-Parse-Qual-Filter"); 
    129                         } 
    130                         else if (inText.compare(nextSearchPos, 13, "Parse-Qual-L ") == 0) 
    131                         { 
    132                                 strmTmp << processForm("Application-Parse-Qual-L"); 
    133                         } 
    134                         else if (inText.compare(nextSearchPos, 20, "Parse-Qual-SField-L ") == 0) 
    135                         { 
    136                                 strmTmp << processForm("Application-Parse-Qual-SField-L"); 
    137                         } 
    138                         else if (inText.compare(nextSearchPos, 17, "Parse-Val-SField ") == 0) 
    139                         { 
    140                                 strmTmp << processForm("Application-Parse-Val-SField"); 
    141                         } 
    142                         else if (inText.compare(nextSearchPos, 19, "Query-Delete-Entry ") == 0) 
    143                         { 
    144                                 CRefItem newRefItem(*refItem, REFM_DELETE_ENTRY_ACTION); 
    145                                 strmTmp << processForm("Application-Query-Delete-Entry", (refItem == NULL ? NULL : &newRefItem)); 
    146                         } 
    147                         else 
    148                         { 
    149                                 specialFound = false; 
    150                         } 
    151                 } 
    152                  
    153                 cmdStartPos = inText.find("PERFORM-ACTION-"); 
    154                 if (cmdStartPos != string::npos) 
    155                 { 
    156                         string::size_type nextSearchPos = cmdStartPos + 15; // add length("PERFORM-ACTION-") 
    157                         specialFound = true; 
    158  
    159                         if (inText.compare(nextSearchPos, 12, "ACTIVE-LINK ") == 0) 
    160                         { 
    161                                 strmTmp << processSecondParameter("PERFORM-ACTION-ACTIVE-LINK"); 
    162                         } 
    163                         else if (inText.compare(nextSearchPos, 15, "ADD-ATTACHMENT ") == 0) 
    164                         { 
    165                                 strmTmp << processOneField("PERFORM-ACTION-ADD-ATTACHMENT"); 
    166                         } 
    167                         else if (inText.compare(nextSearchPos, 18, "DELETE-ATTACHMENT ") == 0) 
    168                         { 
    169                                 strmTmp << processOneField("PERFORM-ACTION-DELETE-ATTACHMENT"); 
    170                         } 
    171                         else if (inText.compare(nextSearchPos, 16, "GET-FIELD-LABEL ") == 0) 
    172                         { 
    173                                 strmTmp << processOneField("PERFORM-ACTION-GET-FIELD-LABEL"); 
    174                         } 
    175                         else if (inText.compare(nextSearchPos, 15, "GET-PREFERENCE ") == 0) 
    176                         { 
    177                                 strmTmp << processOneField("PERFORM-ACTION-GET-PREFERENCE"); 
    178                         } 
    179                         else if (inText.compare(nextSearchPos, 28, "NAV-FIELD-SET-SELECTED-ITEM ") == 0) 
    180                         { 
    181                                 strmTmp << processOneField("PERFORM-ACTION-NAV-FIELD-SET-SELECTED-ITEM"); 
    182                         } 
    183                         else if (inText.compare(nextSearchPos, 16, "OPEN-ATTACHMENT ") == 0) 
    184                         { 
    185                                 strmTmp << processOneField("PERFORM-ACTION-OPEN-ATTACHMENT"); 
    186                         } 
    187                         else if (inText.compare(nextSearchPos, 16, "SAVE-ATTACHMENT ") == 0) 
    188                         { 
    189                                 strmTmp << processOneField("PERFORM-ACTION-SAVE-ATTACHMENT"); 
    190                         } 
    191                         else if (inText.compare(nextSearchPos, 15, "SET-PREFERENCE ") == 0) 
    192                         { 
    193                                 strmTmp << processOneField("PERFORM-ACTION-SET-PREFERENCE"); 
    194                         } 
    195                         else if (inText.compare(nextSearchPos, 12, "TABLE-CLEAR ") == 0) 
    196                         { 
    197                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-CLEAR"); 
    198                         } 
    199                         else if (inText.compare(nextSearchPos, 23, "TABLE-CLEAR-ROWCHANGED ") == 0) 
    200                         { 
    201                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-CLEAR-ROWCHANGED"); 
    202                         } 
    203                         else if (inText.compare(nextSearchPos, 18, "TABLE-DESELECTALL ") == 0) 
    204                         { 
    205                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-DESELECTALL"); 
    206                         } 
    207                         else if (inText.compare(nextSearchPos, 26, "TABLE-GET-SELECTED-COLUMN ") == 0) 
    208                         { 
    209                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-GET-SELECTED-COLUMN"); 
    210                         } 
    211                         else if (inText.compare(nextSearchPos, 23, "TABLE-IS-LEAF-SELECTED ") == 0) 
    212                         { 
    213                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-IS-LEAF-SELECTED"); 
    214                         } 
    215                         else if (inText.compare(nextSearchPos, 17, "TABLE-NEXT-CHUNK ") == 0) 
    216                         { 
    217                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-NEXT-CHUNK"); 
    218                         } 
    219                         else if (inText.compare(nextSearchPos, 17, "TABLE-PREV-CHUNK ") == 0) 
    220                         { 
    221                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-PREV-CHUNK"); 
    222                         } 
    223                         else if (inText.compare(nextSearchPos, 14, "TABLE-REFRESH ") == 0) 
    224                         { 
    225                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-REFRESH"); 
    226                         } 
    227                         else if (inText.compare(nextSearchPos, 13, "TABLE-REPORT ") == 0) 
    228                         { 
    229                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-REPORT"); 
    230                         } 
    231                         else if (inText.compare(nextSearchPos, 18, "TABLE-SELECT-NODE ") == 0) 
    232                         { 
    233                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-SELECT-NODE"); 
    234                         } 
    235                         else if (inText.compare(nextSearchPos, 16, "TABLE-SELECTALL ") == 0) 
    236                         { 
    237                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-SELECTALL"); 
    238                         } 
    239                         else 
    240                         { 
    241                                 specialFound = false; 
    242                         } 
    243                 } 
    244  
    245                 //write the current string back to inText, then clear the stream for use with the application code 
    246                 if (specialFound) 
    247                 { 
    248                         inText = strmTmp.str(); 
    249                         strmTmp.clear(); 
    250                         strmTmp.str(""); 
    251                 } 
    252  
    253                 string::size_type curPos = 0; 
    254                 string::size_type startPos = 0; 
    255                 string::size_type maxLen = inText.length(); 
    256                 string::size_type fieldIdPos = 0; 
    257  
    258                 char fieldId[20]; 
    259                 char *enumId;    // points to the enum part of status history within fieldId later 
    260                 char *usrOrTime; // points to the "user or time" part of status history within fieldId later 
    261  
    262                 while ((startPos = inText.find(fieldSeparator.at(0),curPos)) != std::string::npos) 
    263                 { 
    264                         ++startPos; 
    265                         strmTmp << inText.substr(curPos,startPos - curPos); 
    266                         curPos = startPos; 
    267  
    268                         // reset 
    269                         fieldIdPos = 0;  
    270                         fieldId[0] = 0; 
    271                         enumId = NULL; 
    272                         usrOrTime = NULL; 
    273  
    274                         for (curPos = startPos; curPos < maxLen; ++curPos) 
    275                         { 
    276                                 char currChar = inText.at(curPos); 
    277                                 if (currChar == '-' && fieldIdPos != 0)   
    278                                         break; // - is only allowed at the beginning 
    279                                 if (currChar >= '0' && currChar <= '9' || currChar == '-' || currChar == '.') 
     315                                // end found 
     316                                fieldId[fieldIdPos] = 0; 
     317 
     318                                if (fieldId[0] == 0) 
     319                                        break;  // two $$ .. someone must be dreaming about more money 
     320 
     321                                int iFieldId = atoi(fieldId); 
     322                                if (iFieldId > 0) 
    280323                                { 
    281                                         if (fieldIdPos + 1 == 20) 
    282                                                 break;  // max length .. that cant be a field 
    283  
    284                                         if (currChar != '.' && fieldIdPos > 1 && fieldId[fieldIdPos-1] == '.') 
     324                                        CARField field(schemaInsideId, iFieldId); 
     325 
     326                                        if (!field.Exists()) 
    285327                                        { 
    286                                                 fieldId[fieldIdPos-1] = 0; 
    287                                                 if (enumId == NULL) 
    288                                                         enumId = &fieldId[fieldIdPos]; 
    289                                                 else if (usrOrTime == NULL) 
    290                                                         usrOrTime = &fieldId[fieldIdPos]; 
    291                                                 else 
    292                                                         break; // uhh ohh 
     328                                                strmTmp << fieldId << "$"; 
     329                                                ++curPos; // skip the $ so it isnt found again 
     330                                                break; 
    293331                                        } 
    294                                         // copy it over 
    295                                         fieldId[fieldIdPos++] = currChar; 
    296                                         continue; 
    297                                 } 
    298                                 if (currChar == fieldSeparator.at(0)) 
    299                                 { 
    300                                         // end found 
    301                                         fieldId[fieldIdPos] = 0; 
    302  
    303                                         if (fieldId[0] == 0) 
    304                                                 break;  // two $$ .. someone must be dreaming about more money 
    305  
    306                                         int iFieldId = atoi(fieldId); 
    307                                         if (iFieldId > 0) 
     332 
     333                                        // now link to the field 
     334                                        strmTmp << URLLink(field, rootLevel); 
     335                                        if (refItem != NULL) 
     336                                                pInside->AddFieldReference(schemaInsideId, iFieldId, *refItem); 
     337 
     338                                        // special handling for status history 
     339                                        if (iFieldId == 15) 
    308340                                        { 
    309                                                 CARField field(schemaInsideId, iFieldId); 
    310  
    311                                                 if (!field.Exists()) 
     341                                                if (enumId == NULL || usrOrTime == NULL) break; 
     342 
     343                                                // resolve user or time attribute 
     344                                                int iUsrOrTime = atoi(usrOrTime); 
     345                                                const char* usrOrTimeStr = usrOrTime; 
     346                                                switch (iUsrOrTime) 
    312347                                                { 
    313                                                         strmTmp << fieldId << "$"; 
    314                                                         ++curPos; // skip the $ so it isnt found again 
     348                                                case AR_STAT_HISTORY_USER: 
     349                                                        usrOrTimeStr = "USER"; 
     350                                                        break; 
     351                                                case AR_STAT_HISTORY_TIME: 
     352                                                        usrOrTimeStr = "TIME"; 
    315353                                                        break; 
    316354                                                } 
    317355 
    318                                                 // now link to the field 
    319                                                 strmTmp << URLLink(field, rootLevel); 
    320                                                 if (refItem != NULL) 
    321                                                         pInside->AddFieldReference(schemaInsideId, iFieldId, *refItem); 
    322  
    323                                                 // special handling for status history 
    324                                                 if (iFieldId == 15) 
     356                                                // handle status history 
     357                                                CARField fieldStatus(schemaInsideId,7); // get status field 
     358                                                string enumValue; 
     359                                                if (fieldStatus.Exists()) 
    325360                                                { 
    326                                                         if (enumId == NULL || usrOrTime == NULL) break; 
    327  
    328                                                         // resolve user or time attribute 
    329                                                         int iUsrOrTime = atoi(usrOrTime); 
    330                                                         const char* usrOrTimeStr = usrOrTime; 
    331                                                         switch (iUsrOrTime) 
    332                                                         { 
    333                                                         case AR_STAT_HISTORY_USER: 
    334                                                                 usrOrTimeStr = "USER"; 
    335                                                                 break; 
    336                                                         case AR_STAT_HISTORY_TIME: 
    337                                                                 usrOrTimeStr = "TIME"; 
    338                                                                 break; 
    339                                                         } 
    340  
    341                                                         // handle status history 
    342                                                         CARField fieldStatus(schemaInsideId,7); // get status field 
    343                                                         string enumValue; 
    344                                                         if (fieldStatus.Exists()) 
    345                                                         { 
    346                                                                 int iEnumId = atoi(enumId); 
    347                                                                 enumValue = pInside->GetFieldEnumValue(schemaInsideId, fieldStatus.GetInsideId(), iEnumId); 
    348                                                         } 
    349  
    350                                                         strmTmp << "."; 
    351                                                         if (enumValue.empty()) 
    352                                                                 strmTmp << enumId; 
    353                                                         else 
    354                                                                 strmTmp << enumValue; 
    355                                                         strmTmp << "." << usrOrTimeStr; 
     361                                                        int iEnumId = atoi(enumId); 
     362                                                        enumValue = pInside->GetFieldEnumValue(schemaInsideId, fieldStatus.GetInsideId(), iEnumId); 
    356363                                                } 
    357                                                 strmTmp << "$"; 
    358                                                 ++curPos; // skip the $ so it isnt found again 
     364 
     365                                                strmTmp << "."; 
     366                                                if (enumValue.empty()) 
     367                                                        strmTmp << enumId; 
     368                                                else 
     369                                                        strmTmp << enumValue; 
     370                                                strmTmp << "." << usrOrTimeStr; 
    359371                                        } 
    360                                         else if (fieldId[0] == '-' && iFieldId <= 0) 
    361                                         { 
    362                                                 // keyword handling 
    363                                                 int iKeyword = abs(iFieldId); 
    364                                                 strmTmp << CAREnum::Keyword(iKeyword) << "$"; 
    365                                                 ++curPos; // skip the $ so it isnt found again 
    366                                         } 
    367                                         break; 
     372                                        strmTmp << "$"; 
     373                                        ++curPos; // skip the $ so it isnt found again 
     374                                } 
     375                                else if (fieldId[0] == '-' && iFieldId <= 0) 
     376                                { 
     377                                        // keyword handling 
     378                                        int iKeyword = abs(iFieldId); 
     379                                        strmTmp << CAREnum::Keyword(iKeyword) << "$"; 
     380                                        ++curPos; // skip the $ so it isnt found again 
    368381                                } 
    369382                                break; 
    370383                        } 
    371                         if (curPos < startPos) 
    372                                 strmTmp << inText.substr(curPos,startPos - curPos); 
    373                 } 
    374                 if (curPos < maxLen) 
    375                         strmTmp << inText.substr(curPos,maxLen - curPos); 
    376  
    377                 return strmTmp.str(); 
    378         } 
    379         catch(exception& e) 
    380         { 
    381                 cout << "EXCEPTION in TextFindField: " << e.what() << endl; 
    382         } 
    383  
    384         return inText; 
     384                        break; 
     385                } 
     386                if (curPos < startPos) 
     387                        strmTmp << inText.substr(curPos,startPos - curPos); 
     388        } 
     389        if (curPos < maxLen) 
     390                strmTmp << inText.substr(curPos,maxLen - curPos); 
     391 
     392        inText = strmTmp.str(); 
    385393} 
    386394 
  • branches/work_311/doc/DocTextReferences.h

    r567 r568  
    4545        string processSecondParameter(const string& command); 
    4646 
     47        void replaceAllSpecials(); 
     48        void replaceAllFields(); 
     49 
    4750protected: /* this is protected to overwrite methods in subclasses for testing support */ 
    4851        virtual string refFieldID(int iFieldID); 
Note: See TracChangeset for help on using the changeset viewer.