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
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef INC_SML_DOCCODES_H
00037 #define INC_SML_DOCCODES_H
00038
00039 #ifndef INC_MI32_MISTRING_H
00040 #include <mi32/mistring.h>
00041 #endif
00042
00043 #ifndef INC_SML_USAGE_H
00044 #include <sml/usage.h>
00045 #endif
00046
00047 class XMLNODE;
00048 class MISTATUSCONTEXT;
00049
00050 namespace SML {
00051 class SYMBOL;
00052 class CONTEXT;
00053 class FUNC;
00054 class CLASS;
00055
00056
00067 class DOCCODES {
00068 public:
00069
00070 enum CLASS {
00071 CLASS_Normal = 0,
00072 CLASS_FuncGroupDiv,
00073 CLASS_ItemNameDiv,
00074 CLASS_Prototype,
00075 CLASS_ShortDesc,
00076 CLASS_BoldDiv,
00077 CLASS_Warning,
00078 CLASS_Inheritance
00079 };
00080
00081 DOCCODES (
00082 ) :
00083 m_IndentLevel(0)
00084 {
00085 }
00086
00087 virtual ~DOCCODES() {};
00088
00089
00090 #undef StartDoc
00091 #undef EndDoc
00092 virtual void Clear() = 0;
00093 virtual void StartDoc(const char* ) {}
00094 virtual void EndDoc() {}
00095 virtual void StartBold() {};
00096 virtual void EndBold() {};
00097 virtual void StartItalic() {};
00098 virtual void EndItalic() {};
00099 virtual void StartLine();
00100 virtual void EndLine() { Append("\n"); }
00101 virtual void BlankLine() { Append("\n"); }
00102 virtual void StartIndent() { ++m_IndentLevel; }
00103 virtual void EndIndent() {if (m_IndentLevel) --m_IndentLevel; }
00104 virtual void StartCodeFont() {};
00105 virtual void EndCodeFont() {};
00106 virtual void InsertHRule() {}
00107
00108 virtual void StartMainHead() { StartTitle(); }
00109 virtual void EndMainHead() { EndTitle(); }
00110 virtual void StartSectionHead() { StartBold(); }
00111 virtual void EndSectionHead() { EndBold(); }
00112 virtual void StartNormalFont() { }
00113 virtual void EndNormalFont() { }
00114 virtual void StartCodeBlock() { StartCodeFont(); }
00115 virtual void EndCodeBlock() { EndCodeFont(); }
00116 virtual void StartKeyword() { SetTextColorBlue(); StartCodeFont(); }
00117 virtual void EndKeyword() { EndCodeFont(); SetTextColorNormal(); }
00118 virtual void StartWarning() { StartItalic(); SetTextColorRed(); }
00119 virtual void EndWarning() { SetTextColorNormal(); EndItalic(); }
00120
00121 virtual bool IsHTML() { return false; }
00122
00123 virtual void Append(const char*);
00124 virtual void Append(const MIUNICODE*) = 0;
00125 virtual void StartDiv(CLASS) {}
00126 virtual void EndDiv() {}
00127 virtual void StartPrototypeDiv() {}
00128 virtual void EndPrototypeDiv() {}
00129 virtual void AppendHyperLink(const char* , const MIUNICODE* text) { Append(text);}
00130 virtual void AppendHyperAnchor(const char* ) {}
00131 void AppendML(const MISTRING& str, bool bIndent = false);
00132 void AppendMsg(TEXTID);
00133 void AppendRes(const char *str);
00134
00135 DOCCODES& operator+=(const char* text) {
00136 Append(text);
00137 return *this;
00138 }
00139
00140 DOCCODES& operator+=(const MIUNICODE* text) {
00141 Append(text);
00142 return *this;
00143 }
00144
00145 virtual void SetTextColorRed() {}
00146 virtual void SetTextColorGreen() {}
00147 virtual void SetTextColorBlue() {}
00148 virtual void SetTextColorNormal() {}
00149 virtual void StartTitle() { StartBold(); }
00150 virtual void EndTitle() { StartBold(); }
00151
00152 private:
00153 #ifndef GENERATING_DOXYGEN_OUTPUT
00154 int m_IndentLevel;
00155 #endif // GENERATING_DOXYGEN_OUTPUT
00156 };
00157
00158
00162 class DOCCODES_MISTRING : public DOCCODES {
00163 public:
00164 DOCCODES_MISTRING();
00165 virtual ~DOCCODES_MISTRING() {}
00166 virtual void Clear() { m_str.Clear(); }
00167 virtual void Append(const MIUNICODE* str) { m_str += str; }
00168 virtual void Append(const char* str) { m_str += str; }
00169 const MISTRING& GetStr() const { return m_str; }
00170 private:
00171 #ifndef GENERATING_DOXYGEN_OUTPUT
00172 MISTRING m_str;
00173 #endif // GENERATING_DOXYGEN_OUTPUT
00174 };
00175
00176
00178 class DOCCODES_ANSI : public DOCCODES_MISTRING {
00179 public:
00180 DOCCODES_ANSI() {}
00181 virtual ~DOCCODES_ANSI() {}
00182 virtual void StartTitle();
00183 virtual void EndTitle();
00184 virtual void StartBold();
00185 virtual void EndBold();
00186 virtual void StartItalic();
00187 virtual void EndItalic();
00188 virtual void SetTextColorRed();
00189 virtual void SetTextColorGreen();
00190 virtual void SetTextColorBlue();
00191 virtual void SetTextColorNormal();
00192 virtual void InsertHRule();
00193 virtual void AppendHyperLink(const char* href, const MIUNICODE* text);
00194 virtual void AppendHyperAnchor(const char* name);
00195 };
00196
00197
00199 class DOCCODES_HTML : public DOCCODES_MISTRING {
00200 public:
00201 DOCCODES_HTML() {}
00202 virtual ~DOCCODES_HTML() {}
00203 virtual void StartDoc(const char* title);
00204 virtual void EndDoc();
00205 virtual void StartTitle();
00206 virtual void EndTitle();
00207 virtual void StartBold();
00208 virtual void EndBold();
00209 virtual void StartItalic();
00210 virtual void EndItalic();
00211 virtual void SetTextColorRed();
00212 virtual void SetTextColorGreen();
00213 virtual void SetTextColorBlue();
00214 virtual void SetTextColorNormal();
00215 virtual void StartLine();
00216 virtual void EndLine();
00217 virtual void BlankLine();
00218 virtual void StartIndent();
00219 virtual void EndIndent();
00220 virtual void StartCodeFont();
00221 virtual void EndCodeFont();
00222 virtual void StartCodeBlock();
00223 virtual void EndCodeBlock();
00224 virtual void InsertHRule();
00225 virtual void StartDiv(CLASS);
00226 virtual void EndDiv();
00227 virtual void StartPrototypeDiv();
00228 virtual void EndPrototypeDiv();
00229 virtual void StartMainHead();
00230 virtual void EndMainHead();
00231 virtual void StartWarning();
00232 virtual void EndWarning();
00233 virtual bool IsHTML() { return true; }
00234 virtual void AppendHyperLink(const char* href, const MIUNICODE* text);
00235 virtual void AppendHyperAnchor(const char* name);
00236 virtual void StartSectionHead();
00237 virtual void EndSectionHead();
00238 };
00239
00240
00241
00242 void BackgroundReadSMLDOCS();
00243
00244 XMLNODE* GetSMLDOCS(bool bInBackground = false);
00245
00254 int GetFuncDoc (
00255 CONTEXT* context,
00256 USAGE Usage,
00257 const SYMBOL *sym,
00258 DOCCODES& codes,
00259 bool bShortForm = false
00260 );
00261
00266 int GetFuncExample (
00267 CONTEXT* context,
00268 const SYMBOL *sym,
00269 MISTRING& mistr
00270 );
00271
00276 bool GetFuncDesc (
00277 CONTEXT* context,
00278 const FUNC *smlfunc,
00279 MISTRING& mistr
00280 );
00281
00286 bool GetClassDesc (
00287 CONTEXT* context,
00288 const MISTRING& ClassName,
00289 MISTRING& mistr
00290 );
00291
00300 int GetClassDoc (
00301 CONTEXT* context,
00302 const CLASS *Class,
00303 DOCCODES& codes,
00304 bool bInsert = false,
00305 USAGE usage = USAGE_Undefined
00306 );
00307
00308
00310 int GetKeywordDoc (
00311 const char* keyword,
00312 DOCCODES& codes
00313 );
00314
00316 bool GetKeywordDesc (
00317 const char* keyword,
00318 MISTRING& desc
00319 );
00320
00322 int GetExampleDoc (
00323 const MISTRING& name,
00324 DOCCODES& codes
00325 );
00326
00328 int GetExampleDoc (
00329 XMLNODE* node,
00330 DOCCODES& codes
00331 );
00332
00334 int GetOperatorDoc (
00335 const char* op,
00336 DOCCODES& codes
00337 );
00338
00340 bool GetOperatorDesc (
00341 const char* op,
00342 MISTRING& desc
00343 );
00344
00347 const char* const* GetKeywordList();
00351 const char* const* GetOperatorList();
00352
00353 int SearchDocs (
00354 CONTEXT* context,
00355 const MISTRING& SearchStr,
00356 DOCCODES& doc,
00357 MISTATUSCONTEXT& StatusContext
00358 );
00359
00360 ERRVALUE UpdateDocs (
00361 const FILEPATH& docspath,
00362 SML::CONTEXT *context
00363 );
00364
00365 }
00366
00367 #define BackgroundReadSMLDOCS SML::BackgroundReadSMLDOCS
00368 #define SML_GetSMLDOCS SML::GetSMLDOCS
00369 #define SML_GetFuncDoc SML::GetFuncDoc
00370 #define SML_GetFuncExample SML::GetFuncExample
00371 #define SML_GetFuncDesc SML::GetFuncDesc
00372 #define SML_GetClassDesc SML::GetClassDesc
00373 #define SML_GetClassDoc SML::GetClassDoc
00374 #define SML_GetKeywordDoc SML::GetKeywordDoc
00375 #define SML_GetKeywordDesc SML::GetKeywordDesc
00376 #define SML_GetExampleDoc SML::GetExampleDoc
00377 #define SML_GetExampleDoc SML::GetExampleDoc
00378 #define SML_GetOperatorDoc SML::GetOperatorDoc
00379 #define SML_GetOperatorDesc SML::GetOperatorDesc
00380 #define SML_GetKeywordList SML::GetKeywordList
00381 #define SML_GetOperatorList SML::GetOperatorList
00382
00383 #endif // INC_SML_DOCCODES_H
00384
00385