00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <algorithm>
00027 #include <mpcl/text/html/table.hh>
00028 #include <mpcl/text/html/table_row.hh>
00029
00030
00031
00032
00033
00034
00035 mpcl::text::html::TTable::
00036 TTable ( const char* pkcIDENTIFIER ,
00037 const char* pkcCAPTION ,
00038 const char* pkcALIGN ) :
00039 mpcl::text::html::TContainer (pkcIDENTIFIER)
00040 {
00041
00042 tAttributeMap ["class-identifier"] = "table";
00043 tAttributeMap.bind ("caption", pkcCAPTION);
00044 tAttributeMap.bind ("halign", pkcALIGN);
00045 tAttributeMap.bind ("width", "");
00046 tAttributeMap.bind ("border", "");
00047 tAttributeMap.bind ("cellspacing", "");
00048 tAttributeMap.bind ("cellpadding", "");
00049 tAttributeMap.bind ("bgcolor", "");
00050 gIsQualified = true;
00051
00052 }
00053
00054
00055
00056
00057
00058
00059 mpcl::text::html::QTTag mpcl::text::html::TTable::
00060 findOrInsertTag (const TString& rkyIDENTIFIER)
00061 {
00062
00063 TStringToTagMap::iterator I;
00064 bool gHasMoreIdentifiers;
00065
00066
00067
00068
00069 TContainer* ptContainer;
00070 QTTag qtRow;
00071 QTTag qtTag;
00072 TString yFirstIdentifierPart;
00073 TString yLastIdentifierPart;
00074 std::size_t zOffset;
00075
00076 zOffset = rkyIDENTIFIER.find (kcIdentifierSeparator);
00077 gHasMoreIdentifiers = ( TString::npos != zOffset );
00078 if ( !gHasMoreIdentifiers )
00079 {
00080 yFirstIdentifierPart = rkyIDENTIFIER;
00081 }
00082 else
00083 {
00084 yFirstIdentifierPart = rkyIDENTIFIER.substr (0, zOffset);
00085 yLastIdentifierPart = rkyIDENTIFIER.substr (zOffset + 1);
00086 }
00087
00088
00089
00090
00091 I = tStringToTagMap.find (rkyIDENTIFIER);
00092 if ( I != tStringToTagMap.end() )
00093 {
00094 if ( !gHasMoreIdentifiers )
00095 {
00096 qtTag = I->second;
00097 }
00098 else
00099 {
00100
00101
00102
00103
00104 ptContainer = I->second.dynamicCast<TContainer*>();
00105 qtTag = ptContainer->findOrInsertTag (yLastIdentifierPart);
00106 }
00107 }
00108 else if ( isDynamiclyLoadable() && !gHasMoreIdentifiers )
00109 {
00110
00111
00112
00113 qtRow = new TTableRow();
00114 qtRow->attribute ("identifier") = rkyIDENTIFIER;
00115 insert (qtRow);
00116 qtTag = qtRow;
00117 }
00118 if ( !qtTag )
00119 {
00120 TString yMessage = Format ("there is no tag called '%s'", rkyIDENTIFIER.c_str());
00121
00122 throw TConstraintException (yMessage, __FILE__, __LINE__);
00123 }
00124 return qtTag;
00125
00126 }