Changeset 562


Ignore:
Timestamp:
06/19/14 16:10:33 (5 years ago)
Author:
jls17
Message:
  • moved code (for resolving field references in text-strings) from CARInside to its own class (CDocTextReferences) for later re-factoring
Location:
branches/work_311
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • branches/work_311/ARInside.cpp

    r561 r562  
    4545#include "doc/DocImageOverview.h" 
    4646#include "doc/DocCustomWorkflow.h" 
     47#include "doc/DocTextReferences.h" 
    4748 
    4849#include "output/ObjNotFound.h" 
     
    13301331} 
    13311332 
    1332 string CARInside::TextFindFields(string inText, string fieldSeparator, int schemaInsideId, int rootLevel, bool findKeywords, const CRefItem *refItem) 
     1333string CARInside::TextFindFields(const string &inText, string fieldSeparator, int schemaInsideId, int rootLevel, bool findKeywords, const CRefItem *refItem) 
    13331334{        
    1334         try 
    1335         { 
    1336                 if(inText.size() == 0) 
    1337                         return ""; 
    1338  
    1339                 CARSchema schema(schemaInsideId); 
    1340                 if (!schema.Exists()) 
    1341                         return inText; 
    1342  
    1343                 stringstream strmTmp; 
    1344  
    1345                 // check for special run-process commands 
    1346                 bool specialFound = false; 
    1347                 string::size_type cmdStartPos = inText.find("Application-"); 
    1348                 if (cmdStartPos != string::npos) 
    1349                 { 
    1350                         string::size_type nextSearchPos = cmdStartPos + 12; // add length("Application-") 
    1351                         specialFound = true; 
    1352  
    1353                         if (inText.compare(nextSearchPos, 17, "Copy-Field-Value ") == 0) 
    1354                         { 
    1355                                 strmTmp << processTwoFields("Application-Copy-Field-Value", inText, schemaInsideId, rootLevel, refItem); 
    1356                         } 
    1357                         else if (inText.compare(nextSearchPos, 13, "Delete-Entry ") == 0) 
    1358                         { 
    1359                                 CRefItem newRefItem(*refItem, REFM_DELETE_ENTRY_ACTION); 
    1360                                 strmTmp << processForm("Application-Delete-Entry", inText, schemaInsideId, rootLevel, (refItem == NULL ? refItem : &newRefItem)); 
    1361                         } 
    1362                         else if (inText.compare(nextSearchPos, 12, "Format-Qual ") == 0) 
    1363                         { 
    1364                                 strmTmp << processForm("Application-Format-Qual", inText, schemaInsideId, rootLevel, NULL); 
    1365                         } 
    1366                         else if (inText.compare(nextSearchPos, 19, "Format-Qual-Filter ") == 0) 
    1367                         { 
    1368                                 strmTmp << processForm("Application-Format-Qual-Filter", inText, schemaInsideId, rootLevel, NULL); 
    1369                         } 
    1370                         else if (inText.compare(nextSearchPos, 15, "Format-Qual-ID ") == 0) 
    1371                         { 
    1372                                 strmTmp << processForm("Application-Format-Qual-ID", inText, schemaInsideId, rootLevel, NULL); 
    1373                         } 
    1374                         else if (inText.compare(nextSearchPos, 14, "Format-Qual-L ") == 0) 
    1375                         { 
    1376                                 strmTmp << processForm("Application-Format-Qual-L", inText, schemaInsideId, rootLevel, NULL); 
    1377                         } 
    1378                         else if (inText.compare(nextSearchPos, 18, "Get-Approval-Join ") == 0) 
    1379                         { 
    1380                                 strmTmp << processForm("Application-Get-Approval-Join", inText, schemaInsideId, rootLevel, NULL); 
    1381                         } 
    1382                         else if (inText.compare(nextSearchPos, 19, "Get-Approval-Join2 ") == 0) 
    1383                         { 
    1384                                 strmTmp << processForm("Application-Get-Approval-Join2", inText, schemaInsideId, rootLevel, NULL); 
    1385                         } 
    1386                         else if (inText.compare(nextSearchPos, 16, "Get-DetSig-Join ") == 0) 
    1387                         { 
    1388                                 strmTmp << processForm("Application-Get-DetSig-Join", inText, schemaInsideId, rootLevel, NULL); 
    1389                         } 
    1390                         else if (inText.compare(nextSearchPos, 17, "Get-DetSig-Join2 ") == 0) 
    1391                         { 
    1392                                 strmTmp << processForm("Application-Get-DetSig-Join2", inText, schemaInsideId, rootLevel, NULL); 
    1393                         } 
    1394                         else if (inText.compare(nextSearchPos, 15, "Get-Form-Alias ") == 0) 
    1395                         { 
    1396                                 strmTmp << processForm("Application-Get-Form-Alias", inText, schemaInsideId, rootLevel, NULL); 
    1397                         } 
    1398                         else if (inText.compare(nextSearchPos, 17, "Get-Locale-VuiID ") == 0) 
    1399                         { 
    1400                                 strmTmp << processForm("Application-Get-Locale-VuiID", inText, schemaInsideId, rootLevel, NULL); 
    1401                         } 
    1402                         else if (inText.compare(nextSearchPos, 25, "Get-Next-Recurrence-Time ") == 0) 
    1403                         { 
    1404                                 strmTmp << processForm("Application-Get-Next-Recurrence-Time", inText, schemaInsideId, rootLevel, NULL); 
    1405                         } 
    1406                         else if (inText.compare(nextSearchPos, 17, "Map-Ids-To-Names ") == 0) 
    1407                         { 
    1408                                 strmTmp << processForm("Application-Map-Ids-To-Names", inText, schemaInsideId, rootLevel, NULL); 
    1409                         } 
    1410                         else if (inText.compare(nextSearchPos, 19, "Map-Ids-To-Names-L ") == 0) 
    1411                         { 
    1412                                 strmTmp << processForm("Application-Map-Ids-To-Names-L", inText, schemaInsideId, rootLevel, NULL); 
    1413                         } 
    1414                         else if (inText.compare(nextSearchPos, 17, "Map-Names-To-Ids ") == 0) 
    1415                         { 
    1416                                 strmTmp << processForm("Application-Map-Names-To-Ids", inText, schemaInsideId, rootLevel, NULL); 
    1417                         } 
    1418                         else if (inText.compare(nextSearchPos, 19, "Map-Names-To-Ids-L ") == 0) 
    1419                         { 
    1420                                 strmTmp << processForm("Application-Map-Names-To-Ids-L", inText, schemaInsideId, rootLevel, NULL); 
    1421                         } 
    1422                         else if (inText.compare(nextSearchPos, 11, "Parse-Qual ") == 0) 
    1423                         { 
    1424                                 strmTmp << processForm("Application-Parse-Qual", inText, schemaInsideId, rootLevel, NULL); 
    1425                         } 
    1426                         else if (inText.compare(nextSearchPos, 18, "Parse-Qual-Filter ") == 0) 
    1427                         { 
    1428                                 strmTmp << processForm("Application-Parse-Qual-Filter", inText, schemaInsideId, rootLevel, NULL); 
    1429                         } 
    1430                         else if (inText.compare(nextSearchPos, 13, "Parse-Qual-L ") == 0) 
    1431                         { 
    1432                                 strmTmp << processForm("Application-Parse-Qual-L", inText, schemaInsideId, rootLevel, NULL); 
    1433                         } 
    1434                         else if (inText.compare(nextSearchPos, 20, "Parse-Qual-SField-L ") == 0) 
    1435                         { 
    1436                                 strmTmp << processForm("Application-Parse-Qual-SField-L", inText, schemaInsideId, rootLevel, NULL); 
    1437                         } 
    1438                         else if (inText.compare(nextSearchPos, 17, "Parse-Val-SField ") == 0) 
    1439                         { 
    1440                                 strmTmp << processForm("Application-Parse-Val-SField", inText, schemaInsideId, rootLevel, NULL); 
    1441                         } 
    1442                         else if (inText.compare(nextSearchPos, 19, "Query-Delete-Entry ") == 0) 
    1443                         { 
    1444                                 CRefItem newRefItem(*refItem, REFM_DELETE_ENTRY_ACTION); 
    1445                                 strmTmp << processForm("Application-Query-Delete-Entry", inText, schemaInsideId, rootLevel, (refItem == NULL ? NULL : &newRefItem)); 
    1446                         } 
    1447                         else 
    1448                         { 
    1449                                 specialFound = false; 
    1450                         } 
    1451                 } 
    1452                  
    1453                 cmdStartPos = inText.find("PERFORM-ACTION-"); 
    1454                 if (cmdStartPos != string::npos) 
    1455                 { 
    1456                         string::size_type nextSearchPos = cmdStartPos + 15; // add length("PERFORM-ACTION-") 
    1457                         specialFound = true; 
    1458  
    1459                         if (inText.compare(nextSearchPos, 12, "ACTIVE-LINK ") == 0) 
    1460                         { 
    1461                                 strmTmp << processSecondParameter("PERFORM-ACTION-ACTIVE-LINK", inText, schemaInsideId, rootLevel, refItem); 
    1462                         } 
    1463                         else if (inText.compare(nextSearchPos, 15, "ADD-ATTACHMENT ") == 0) 
    1464                         { 
    1465                                 strmTmp << processOneField("PERFORM-ACTION-ADD-ATTACHMENT", inText, schemaInsideId, rootLevel, refItem); 
    1466                         } 
    1467                         else if (inText.compare(nextSearchPos, 18, "DELETE-ATTACHMENT ") == 0) 
    1468                         { 
    1469                                 strmTmp << processOneField("PERFORM-ACTION-DELETE-ATTACHMENT", inText, schemaInsideId, rootLevel, refItem); 
    1470                         } 
    1471                         else if (inText.compare(nextSearchPos, 16, "GET-FIELD-LABEL ") == 0) 
    1472                         { 
    1473                                 strmTmp << processOneField("PERFORM-ACTION-GET-FIELD-LABEL", inText, schemaInsideId, rootLevel, refItem); 
    1474                         } 
    1475                         else if (inText.compare(nextSearchPos, 15, "GET-PREFERENCE ") == 0) 
    1476                         { 
    1477                                 strmTmp << processOneField("PERFORM-ACTION-GET-PREFERENCE", inText, schemaInsideId, rootLevel, refItem); 
    1478                         } 
    1479                         else if (inText.compare(nextSearchPos, 28, "NAV-FIELD-SET-SELECTED-ITEM ") == 0) 
    1480                         { 
    1481                                 strmTmp << processOneField("PERFORM-ACTION-NAV-FIELD-SET-SELECTED-ITEM", inText, schemaInsideId, rootLevel, refItem); 
    1482                         } 
    1483                         else if (inText.compare(nextSearchPos, 16, "OPEN-ATTACHMENT ") == 0) 
    1484                         { 
    1485                                 strmTmp << processOneField("PERFORM-ACTION-OPEN-ATTACHMENT", inText, schemaInsideId, rootLevel, refItem); 
    1486                         } 
    1487                         else if (inText.compare(nextSearchPos, 16, "SAVE-ATTACHMENT ") == 0) 
    1488                         { 
    1489                                 strmTmp << processOneField("PERFORM-ACTION-SAVE-ATTACHMENT", inText, schemaInsideId, rootLevel, refItem); 
    1490                         } 
    1491                         else if (inText.compare(nextSearchPos, 15, "SET-PREFERENCE ") == 0) 
    1492                         { 
    1493                                 strmTmp << processOneField("PERFORM-ACTION-SET-PREFERENCE", inText, schemaInsideId, rootLevel, refItem); 
    1494                         } 
    1495                         else if (inText.compare(nextSearchPos, 12, "TABLE-CLEAR ") == 0) 
    1496                         { 
    1497                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-CLEAR", inText, schemaInsideId, rootLevel, refItem); 
    1498                         } 
    1499                         else if (inText.compare(nextSearchPos, 23, "TABLE-CLEAR-ROWCHANGED ") == 0) 
    1500                         { 
    1501                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-CLEAR-ROWCHANGED", inText, schemaInsideId, rootLevel, refItem); 
    1502                         } 
    1503                         else if (inText.compare(nextSearchPos, 18, "TABLE-DESELECTALL ") == 0) 
    1504                         { 
    1505                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-DESELECTALL", inText, schemaInsideId, rootLevel, refItem); 
    1506                         } 
    1507                         else if (inText.compare(nextSearchPos, 26, "TABLE-GET-SELECTED-COLUMN ") == 0) 
    1508                         { 
    1509                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-GET-SELECTED-COLUMN", inText, schemaInsideId, rootLevel, refItem); 
    1510                         } 
    1511                         else if (inText.compare(nextSearchPos, 23, "TABLE-IS-LEAF-SELECTED ") == 0) 
    1512                         { 
    1513                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-IS-LEAF-SELECTED", inText, schemaInsideId, rootLevel, refItem); 
    1514                         } 
    1515                         else if (inText.compare(nextSearchPos, 17, "TABLE-NEXT-CHUNK ") == 0) 
    1516                         { 
    1517                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-NEXT-CHUNK", inText, schemaInsideId, rootLevel, refItem); 
    1518                         } 
    1519                         else if (inText.compare(nextSearchPos, 17, "TABLE-PREV-CHUNK ") == 0) 
    1520                         { 
    1521                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-PREV-CHUNK", inText, schemaInsideId, rootLevel, refItem); 
    1522                         } 
    1523                         else if (inText.compare(nextSearchPos, 14, "TABLE-REFRESH ") == 0) 
    1524                         { 
    1525                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-REFRESH", inText, schemaInsideId, rootLevel, refItem); 
    1526                         } 
    1527                         else if (inText.compare(nextSearchPos, 13, "TABLE-REPORT ") == 0) 
    1528                         { 
    1529                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-REPORT", inText, schemaInsideId, rootLevel, refItem); 
    1530                         } 
    1531                         else if (inText.compare(nextSearchPos, 18, "TABLE-SELECT-NODE ") == 0) 
    1532                         { 
    1533                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-SELECT-NODE", inText, schemaInsideId, rootLevel, refItem); 
    1534                         } 
    1535                         else if (inText.compare(nextSearchPos, 16, "TABLE-SELECTALL ") == 0) 
    1536                         { 
    1537                                 strmTmp << processOneField("PERFORM-ACTION-TABLE-SELECTALL", inText, schemaInsideId, rootLevel, refItem); 
    1538                         } 
    1539                         else 
    1540                         { 
    1541                                 specialFound = false; 
    1542                         } 
    1543                 } 
    1544  
    1545                 //write the current string back to inText, then clear the stream for use with the application code 
    1546                 if (specialFound) 
    1547                 { 
    1548                         inText = strmTmp.str(); 
    1549                         strmTmp.clear(); 
    1550                         strmTmp.str(""); 
    1551                 } 
    1552  
    1553                 string::size_type curPos = 0; 
    1554                 string::size_type startPos = 0; 
    1555                 string::size_type maxLen = inText.length(); 
    1556                 string::size_type fieldIdPos = 0; 
    1557  
    1558                 char fieldId[20]; 
    1559                 char *enumId;    // points to the enum part of status history within fieldId later 
    1560                 char *usrOrTime; // points to the "user or time" part of status history within fieldId later 
    1561  
    1562                 while ((startPos = inText.find(fieldSeparator.at(0),curPos)) != std::string::npos) 
    1563                 { 
    1564                         ++startPos; 
    1565                         strmTmp << inText.substr(curPos,startPos - curPos); 
    1566                         curPos = startPos; 
    1567  
    1568                         // reset 
    1569                         fieldIdPos = 0;  
    1570                         fieldId[0] = 0; 
    1571                         enumId = NULL; 
    1572                         usrOrTime = NULL; 
    1573  
    1574                         for (curPos = startPos; curPos < maxLen; ++curPos) 
    1575                         { 
    1576                                 char currChar = inText.at(curPos); 
    1577                                 if (currChar == '-' && fieldIdPos != 0)   
    1578                                         break; // - is only allowed at the beginning 
    1579                                 if (currChar >= '0' && currChar <= '9' || currChar == '-' || currChar == '.') 
    1580                                 { 
    1581                                         if (fieldIdPos + 1 == 20) 
    1582                                                 break;  // max length .. that cant be a field 
    1583  
    1584                                         if (currChar != '.' && fieldIdPos > 1 && fieldId[fieldIdPos-1] == '.') 
    1585                                         { 
    1586                                                 fieldId[fieldIdPos-1] = 0; 
    1587                                                 if (enumId == NULL) 
    1588                                                         enumId = &fieldId[fieldIdPos]; 
    1589                                                 else if (usrOrTime == NULL) 
    1590                                                         usrOrTime = &fieldId[fieldIdPos]; 
    1591                                                 else 
    1592                                                         break; // uhh ohh 
    1593                                         } 
    1594                                         // copy it over 
    1595                                         fieldId[fieldIdPos++] = currChar; 
    1596                                         continue; 
    1597                                 } 
    1598                                 if (currChar == fieldSeparator.at(0)) 
    1599                                 { 
    1600                                         // end found 
    1601                                         fieldId[fieldIdPos] = 0; 
    1602  
    1603                                         if (fieldId[0] == 0) 
    1604                                                 break;  // two $$ .. someone must be dreaming about more money 
    1605  
    1606                                         int iFieldId = atoi(fieldId); 
    1607                                         if (iFieldId > 0) 
    1608                                         { 
    1609                                                 CARField field(schemaInsideId, iFieldId); 
    1610  
    1611                                                 if (!field.Exists()) 
    1612                                                 { 
    1613                                                         strmTmp << fieldId << "$"; 
    1614                                                         ++curPos; // skip the $ so it isnt found again 
    1615                                                         break; 
    1616                                                 } 
    1617  
    1618                                                 // now link to the field 
    1619                                                 strmTmp << URLLink(field, rootLevel); 
    1620                                                 if (refItem != NULL) 
    1621                                                         AddFieldReference(schemaInsideId, iFieldId, *refItem); 
    1622  
    1623                                                 // special handling for status history 
    1624                                                 if (iFieldId == 15) 
    1625                                                 { 
    1626                                                         if (enumId == NULL || usrOrTime == NULL) break; 
    1627  
    1628                                                         // resolve user or time attribute 
    1629                                                         int iUsrOrTime = atoi(usrOrTime); 
    1630                                                         const char* usrOrTimeStr = usrOrTime; 
    1631                                                         switch (iUsrOrTime) 
    1632                                                         { 
    1633                                                         case AR_STAT_HISTORY_USER: 
    1634                                                                 usrOrTimeStr = "USER"; 
    1635                                                                 break; 
    1636                                                         case AR_STAT_HISTORY_TIME: 
    1637                                                                 usrOrTimeStr = "TIME"; 
    1638                                                                 break; 
    1639                                                         } 
    1640  
    1641                                                         // handle status history 
    1642                                                         CARField fieldStatus(schemaInsideId,7); // get status field 
    1643                                                         string enumValue; 
    1644                                                         if (fieldStatus.Exists()) 
    1645                                                         { 
    1646                                                                 int iEnumId = atoi(enumId); 
    1647                                                                 enumValue = GetFieldEnumValue(schemaInsideId, fieldStatus.GetInsideId(), iEnumId); 
    1648                                                         } 
    1649  
    1650                                                         strmTmp << "."; 
    1651                                                         if (enumValue.empty()) 
    1652                                                                 strmTmp << enumId; 
    1653                                                         else 
    1654                                                                 strmTmp << enumValue; 
    1655                                                         strmTmp << "." << usrOrTimeStr; 
    1656                                                 } 
    1657                                                 strmTmp << "$"; 
    1658                                                 ++curPos; // skip the $ so it isnt found again 
    1659                                         } 
    1660                                         else if (fieldId[0] == '-' && iFieldId <= 0) 
    1661                                         { 
    1662                                                 // keyword handling 
    1663                                                 int iKeyword = abs(iFieldId); 
    1664                                                 strmTmp << CAREnum::Keyword(iKeyword) << "$"; 
    1665                                                 ++curPos; // skip the $ so it isnt found again 
    1666                                         } 
    1667                                         break; 
    1668                                 } 
    1669                                 break; 
    1670                         } 
    1671                         if (curPos < startPos) 
    1672                                 strmTmp << inText.substr(curPos,startPos - curPos); 
    1673                 } 
    1674                 if (curPos < maxLen) 
    1675                         strmTmp << inText.substr(curPos,maxLen - curPos); 
    1676  
    1677                 return strmTmp.str(); 
    1678         } 
    1679         catch(exception& e) 
    1680         { 
    1681                 cout << "EXCEPTION in TextFindField: " << e.what() << endl; 
    1682         } 
    1683  
    1684         return inText; 
     1335        CDocTextReferences textRefs; 
     1336        return textRefs.TextFindFields(inText, fieldSeparator, schemaInsideId, rootLevel, findKeywords, refItem); 
    16851337} 
    16861338 
     
    19531605} 
    19541606 
    1955 string CARInside::processOneField(const string& command, const string& inText, int schemaInsideId, int rootLevel, const CRefItem *refItem) 
    1956 { 
    1957         stringstream strmTmp; 
    1958         int fieldId = 0; 
    1959         size_t length = command.length()+1; 
    1960         size_t pos = inText.find(command); 
    1961  
    1962         //put the command into the stream 
    1963         strmTmp << inText.substr(0,(length+pos)); 
    1964         //get everything after the command 
    1965         string tmp = inText.substr(length+pos); 
    1966         //get position of next space 
    1967         pos = tmp.find(" "); 
    1968  
    1969         //set the fieldID = to the one we found 
    1970  
    1971         if (pos != std::string::npos) 
    1972                 fieldId = atoi(tmp.substr(0,pos).c_str()); 
    1973         else 
    1974                 fieldId = atoi(tmp.c_str()); 
    1975  
    1976         if (fieldId != std::string::npos && fieldId > 0) 
    1977                 strmTmp << refFieldID(fieldId, schemaInsideId, rootLevel, refItem); 
    1978  
    1979         if (pos != std::string::npos) 
    1980         { 
    1981                 tmp = tmp.substr(pos,tmp.length()); 
    1982                 strmTmp << tmp; 
    1983         } 
    1984  
    1985         return strmTmp.str(); 
    1986 } 
    1987 string CARInside::processTwoFields(const string& command, const string& inText, int schemaInsideId, int rootLevel, const CRefItem *refItem) 
    1988 { 
    1989         stringstream strmTmp; 
    1990         int fieldId = 0; 
    1991         size_t length = command.length()+1; 
    1992         size_t pos = inText.find(command); 
    1993  
    1994         //put the command into the stream 
    1995         strmTmp << inText.substr(0,(length+pos)); 
    1996         //get everything after the command 
    1997         string tmp = inText.substr(length+pos); 
    1998         if (tmp.find("$") == 0 && tmp.find("$") != std::string::npos) 
    1999         { 
    2000                 tmp = tmp.substr(1); 
    2001                 pos = tmp.find("$")+1; 
    2002                 strmTmp << "$" << tmp.substr(0,pos); 
    2003         } 
    2004         else 
    2005         { 
    2006                 pos = tmp.find(" "); 
    2007                 fieldId = atoi(tmp.substr(0,pos).c_str()); 
    2008                 strmTmp << refFieldID(fieldId, schemaInsideId, rootLevel, refItem); 
    2009         } 
    2010  
    2011         //put a space between the field ID's 
    2012         strmTmp << " "; 
    2013  
    2014         //get position of next space 
    2015         pos = tmp.find(" "); 
    2016         //get everything after the space 
    2017         tmp = tmp.substr(pos+1); 
    2018  
    2019         if (tmp.find("$") == 0 && tmp.find("$") != std::string::npos) 
    2020         { 
    2021                 strmTmp << tmp; 
    2022         } 
    2023         else 
    2024         { 
    2025                 fieldId = atoi(tmp.c_str()); 
    2026                 strmTmp << refFieldID(fieldId, schemaInsideId, rootLevel, refItem); 
    2027         } 
    2028  
    2029         return strmTmp.str(); 
    2030 } 
    2031 string CARInside::processForm(const string& command, const string& inText, int schemaInsideId, int rootLevel, const CRefItem *refItem) 
    2032 { 
    2033         stringstream strmTmp; 
    2034         string form = ""; 
    2035         size_t length = command.length()+1; 
    2036         size_t pos = inText.find(command); 
    2037  
    2038         //put the command into the stream 
    2039         strmTmp << inText.substr(0,(length+pos)); 
    2040         //get everything after the command 
    2041         string tmp = inText.substr(length+pos); 
    2042         //ok, we are at the first parameter, need to first find if it starts with a " 
    2043         if (tmp.substr(0,1) == "\"") 
    2044         { 
    2045                 strmTmp << "\""; 
    2046                 pos = tmp.find("\"",1); 
    2047                 form = tmp.substr(1,pos-1); 
    2048         } 
    2049         else 
    2050         { 
    2051                 //get position of next space 
    2052                 pos = tmp.find(" "); 
    2053                 form = tmp.substr(0,pos); 
    2054         } 
    2055         //generate link for form 
    2056         CARSchema schema(form); 
    2057         if (schema.Exists()) 
    2058         { 
    2059                 strmTmp << URLLink(schema, rootLevel, false); 
    2060                 if (refItem != NULL)  
    2061                 { 
    2062                         if (!schema.ReferenceExists(*refItem)) 
    2063                                 schema.AddReference(*refItem); 
    2064                 } 
    2065         } 
    2066         else 
    2067         { 
    2068                 // check, if $SCHEMA$ is used as form name. In this case we'll create a reference to the current schema 
    2069                 if (refItem != NULL && form.compare("$-5$") == 0) 
    2070                 { 
    2071                         CARSchema currentSchema(schemaInsideId); 
    2072                         if (currentSchema.Exists() && !currentSchema.ReferenceExists(*refItem)) 
    2073                         { 
    2074                                 currentSchema.AddReference(*refItem); 
    2075                         } 
    2076                 } 
    2077                 strmTmp << form; 
    2078         } 
    2079  
    2080         //write anything past the form to output 
    2081         strmTmp << tmp.substr(pos); 
    2082  
    2083         return strmTmp.str(); 
    2084 } 
    2085 string CARInside::processSecondParameter(const string& command, const string& inText, int schemaInsideId, int rootLevel, const CRefItem *refItem) 
    2086 { 
    2087         stringstream strmTmp; 
    2088         int fieldId = 0; 
    2089         size_t length = command.length()+1; 
    2090         size_t pos = inText.find(command); 
    2091  
    2092         //put the command into the stream 
    2093         strmTmp << inText.substr(0,(length+pos)); 
    2094         //get everything after the command 
    2095         string tmp = inText.substr(length+pos); 
    2096         //get position of next space 
    2097         pos = tmp.find(" "); 
    2098         //set the fieldID = to the one we found 
    2099         strmTmp << tmp.substr(0,pos); 
    2100         //put a space in there 
    2101         strmTmp << " "; 
    2102         //get position of next space 
    2103         pos = tmp.find(" "); 
    2104         //get everything after the space 
    2105         if (pos != std::string::npos) 
    2106         { 
    2107                 tmp = tmp.substr(pos); 
    2108                 //set the fieldID = to the one we found 
    2109                 fieldId = atoi(tmp.c_str()); 
    2110                 strmTmp << refFieldID(fieldId, schemaInsideId, rootLevel, refItem) << endl; 
    2111         } 
    2112  
    2113         return strmTmp.str(); 
    2114 } 
    2115  
    2116 string CARInside::refFieldID(int iFieldId, int schemaInsideId, int rootLevel, const CRefItem *refItem) 
    2117 { 
    2118         stringstream strmTmp; 
    2119  
    2120         //add the reference 
    2121         try { 
    2122                 CARField field(schemaInsideId, iFieldId); 
    2123                 if (field.Exists()) 
    2124                 { 
    2125                         strmTmp << URLLink(field, rootLevel); 
    2126                 } 
    2127                 else 
    2128                         strmTmp << iFieldId; 
    2129  
    2130                 // add reference 
    2131                 AddFieldReference(schemaInsideId, iFieldId, *refItem); 
    2132         } 
    2133         catch (...) { 
    2134                 cout << "Exception in refFieldID" << endl; 
    2135         } 
    2136  
    2137         return strmTmp.str(); 
    2138 } 
    2139  
    21401607#if AR_CURRENT_API_VERSION >= AR_API_VERSION_750 
    21411608int CARInside::LoadImages() 
  • branches/work_311/ARInside.h

    r561 r562  
    143143        void AddMenuReference(const string& menuName, const CRefItem& ref); 
    144144 
    145         string TextFindFields(string inText, string fieldSeparator, int schemaInsideId, int rootLevel, bool findKeywords, const CRefItem *refItem); 
     145        string TextFindFields(const string &inText, string fieldSeparator, int schemaInsideId, int rootLevel, bool findKeywords, const CRefItem *refItem); 
    146146        string XMLFindFields(string inText, int schemaInsideId, int rootLevel, const CRefItem *refItem); 
    147147 
     
    171171        void ParseVersionString(int xmlVersion); 
    172172 
    173         string processOneField(const string& command, const string& inText, int schemaInsideId, int rootLevel, const CRefItem *refItem); 
    174         string processTwoFields(const string& command, const string& inText, int schemaInsideId, int rootLevel, const CRefItem *refItem); 
    175         string processForm(const string& command, const string& inText, int schemaInsideId, int rootLevel, const CRefItem *refItem); 
    176         string processSecondParameter(const string& command, const string& inText, int schemaInsideId, int rootLevel, const CRefItem *refItem); 
    177         string refFieldID(int iFieldID, int schemaInsideId, int rootLevel, const CRefItem *refItem); 
    178  
    179173        bool WriteHTAccess(); 
    180174}; 
  • branches/work_311/ARInsideLib.vcproj

    r546 r562  
    972972                        <File 
    973973                                RelativePath=".\doc\DocSummaryInfo.h" 
     974                                > 
     975                        </File> 
     976                        <File 
     977                                RelativePath=".\doc\DocTextReferences.cpp" 
     978                                > 
     979                        </File> 
     980                        <File 
     981                                RelativePath=".\doc\DocTextReferences.h" 
    974982                                > 
    975983                        </File> 
  • branches/work_311/project.cmake/files.cmake

    r546 r562  
    8787 doc/DocSchemaDetails.cpp 
    8888 doc/DocSummaryInfo.cpp 
     89 doc/DocTextReferences.cpp 
    8990 doc/DocUserDetails.cpp 
    9091 doc/DocValidator.cpp 
     
    121122 doc/DocSchemaDetails.h 
    122123 doc/DocSummaryInfo.h 
     124 doc/DocTextReferences.h  
    123125 doc/DocUserDetails.h 
    124126 doc/DocValidator.h 
Note: See TracChangeset for help on using the changeset viewer.