Text.h 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688
  1. #pragma once
  2. #include <functional>
  3. #include <sstream>
  4. #include "Reader.h"
  5. #include "ReferenceCounter.h"
  6. namespace Framework
  7. {
  8. namespace Regex
  9. {
  10. class Result;
  11. class RegexConfig;
  12. } // namespace Regex
  13. class DynamicBuffer : public std::stringbuf
  14. {
  15. private:
  16. std::function<int(std::stringbuf&)> onAppend;
  17. public:
  18. DLLEXPORT DynamicBuffer(std::function<int(std::stringbuf&)> onAppend);
  19. DLLEXPORT virtual int sync() override;
  20. };
  21. class FlushingOStream : public std::ostream
  22. {
  23. private:
  24. std::function<void()> onDestroy;
  25. public:
  26. DLLEXPORT FlushingOStream(
  27. DynamicBuffer* buffer, std::function<void()> onDestroy = []() {});
  28. DLLEXPORT FlushingOStream(const Framework::FlushingOStream& stream);
  29. DLLEXPORT ~FlushingOStream();
  30. };
  31. //! Ein ersatz für String
  32. class Text : public virtual ReferenceCounter
  33. {
  34. private:
  35. char* txt;
  36. int length;
  37. char suchGBeg;
  38. char suchGEnd;
  39. int precision;
  40. DynamicBuffer* stringWriter;
  41. DLLEXPORT Text(char* txt, int l);
  42. public:
  43. //! Erstellt ein neues Text Objekt mit dem Wert ""
  44. DLLEXPORT Text();
  45. //! Erstellt ein neues Text Objekt indem der Wert aus (txt) kopiert wird
  46. //! \param txt Der Text, der kopiert werden soll
  47. DLLEXPORT Text(const Text& txt);
  48. //! Erstellt ein neues Text Objekt indem der Wert aus (txt) kopiert wird
  49. //! \param txt Die Zeichenkette, die kopiert werden soll
  50. DLLEXPORT Text(const char* txt);
  51. //! Erstellt ein neues Text Objekt indem ein Abschnitt aus (txt) kopiert
  52. //! wird \param txt Die Zeichenkette, aus der ein Abschnitt die kopiert
  53. //! werden soll \param offset Startposition ab der kopiert werden soll
  54. //! \param length Anzahl der zeichen die kopiert werden sollen
  55. DLLEXPORT Text(const char* txt, int offset, int length);
  56. //! Erstellt ein neues Text Objekt mit einer zahl als text
  57. //! \param zahl Die Zahl, die im Text sein soll
  58. DLLEXPORT Text(int zahl);
  59. //! Erstellt ein neues Text Objekt mit einer zahl als text
  60. //! \param num Die Zahl, die im Text sein soll
  61. DLLEXPORT Text(double num);
  62. //! Erstellt ein neues Text Objekt mit einer zahl als text
  63. //! \param num Die Zahl, die im Text sein soll
  64. DLLEXPORT Text(float num);
  65. //! Löscht den Text
  66. DLLEXPORT ~Text();
  67. private:
  68. DLLEXPORT void setTextZ(char* t, int l);
  69. public:
  70. //! Wandelt alle buchstaben in großbuchstaben um
  71. DLLEXPORT void toUpperCase();
  72. //! Wandelt alle buchstaben in kleinbuchstaben um
  73. DLLEXPORT void toLowerCase();
  74. //! Legt die Suchgrenzen fest, die von den Suchfunktionen verwendet
  75. //! werden. \param gBeg Das Zeichen, bei dem die Suche beginnen soll
  76. //! \param gEnd Das Zeichen, bei dem die Suche enden soll
  77. DLLEXPORT void setSuchGrenzen(char gBeg, char gEnd);
  78. //! Setzt den Text, den das Zeichnung speichert
  79. //! \param t Eine Zeichenkette, deren Inhalt kopiert wird
  80. DLLEXPORT void setText(const char* t);
  81. //! Setzt den Text, den das Zeichnung speichert
  82. //! \param t Eine Zeichenkette, deren Inhalt kopiert wird
  83. //! \param l Die Länge des Textes, der aus (t) kopiert werden soll
  84. DLLEXPORT void setText(const char* t, int l);
  85. //! Setzt den Text, den das Zeichnung speichert
  86. //! \param t Das TextZeichnung, dessen Inahlt kopiert werden soll
  87. DLLEXPORT void setText(const Text& t);
  88. //! Hängt die übergebene Zahl als Hex Text (0-F) ans Ende des Textes an.
  89. //! \param num Die Zahl, die ins Hex System umgewandelt und angehängt
  90. //! werden soll
  91. DLLEXPORT void appendHex(char num);
  92. //! Hängt die übergebene Zahl als Hex Text (0-F) ans Ende des Textes an.
  93. //! \param num Die Zahl, die ins Hex System umgewandelt und angehängt
  94. //! werden soll
  95. DLLEXPORT void appendHex(short num);
  96. //! Hängt die übergebene Zahl als Hex Text (0-F) ans Ende des Textes an.
  97. //! \param num Die Zahl, die ins Hex System umgewandelt und angehängt
  98. //! werden soll
  99. DLLEXPORT void appendHex(int num);
  100. //! Hängt die übergebene Zahl als Hex Text (0-F) ans Ende des Textes an.
  101. //! \param num Die Zahl, die ins Hex System umgewandelt und angehängt
  102. //! werden soll
  103. DLLEXPORT void appendHex(__int64 num);
  104. //! Fügt den übergebenen Buchtaben der Zeichenkette hinzu
  105. //! \param c Der Buchstabe, der angehängt werden soll
  106. DLLEXPORT void append(char c);
  107. //! Hängt die übergebene Zeichenkette ans Ende des Textes an
  108. //! \param t Die Zeichenkette, deren Kopie ans Ende des Textes angehängt
  109. //! werden soll
  110. DLLEXPORT void append(const char* t);
  111. //! Hängt einen Teil der übergebenen Zeichenkette ans Ende des Textes an
  112. //! \param t Die Zeichenkette, deren Kopie angehängt werden soll
  113. //! \param l Die Länge des Textabschnittes der angehängt werden soll
  114. DLLEXPORT void append(const char* t, int l);
  115. //! Hängt den Inhalt des eines Textes ans Ende des Textes an
  116. //! \param t Der Text, dessen Kopie ans Ende des Textes angehängt werden
  117. //! soll
  118. DLLEXPORT void append(const Text& t);
  119. //! Hängt eine Zahl ans Ende Des Textes an
  120. //! \param num Die Zahl, die in einen Text umgewandelt und am Ende
  121. //! angehängt werden soll
  122. DLLEXPORT void append(int num);
  123. //! Hängt eine Zahl ans Ende Des Textes an
  124. //! \param num Die Zahl, die in einen Text umgewandelt und am Ende
  125. //! angehängt werden soll
  126. DLLEXPORT void append(__int64 num);
  127. //! Hängt eine Zahl ohne Vorzeichenbit am Ende des Textes an
  128. //! \param num Die Zahl, die in einen Text umgewandelt und am Ende
  129. //! angehängt werden soll
  130. DLLEXPORT void append(unsigned int num);
  131. //! Hängt eine Kommazahl am Ende des Textes an
  132. //! \param num Die Kommazahl, die am Ende des Textes angehängt werden
  133. //! soll
  134. DLLEXPORT void append(double num);
  135. //! Hängt eine Kommazahl am Ende des Textes an
  136. //! \param num Die Kommazahl, die am Ende des Textes angehängt werden
  137. //! soll
  138. DLLEXPORT void append(float num);
  139. //! Gibt einen ostream zurück, der alle ausgaben an diesen Text anhängt
  140. DLLEXPORT FlushingOStream append();
  141. //! Fügt an einer Bestimmten Stelle ein Zeichen in den Text ein
  142. //! \param p Die position im Text bei der das Zeichen eingefügt werden
  143. //! soll \param c Das Zeichen, das eingefügt werden soll
  144. DLLEXPORT void insert(int p, char c);
  145. //! Fügt an einer Bestimmten Stelle im Text eine Zeichenkette ein
  146. //! \param p Die position im Text bei der die Zeichenkette eingefügt
  147. //! werden soll \param t Die Zeichenkette, deren Kopie an eingefügt
  148. //! werden soll
  149. DLLEXPORT void insert(int p, const char* t);
  150. //! Fügt an einer Bestimmten Stelle im Text eine Zeichenkette ein
  151. //! \param p Die position im Text bei der die Zeichenkette eingefügt
  152. //! werden soll \param t Die Zeichenkette, deren Kopie an eingefügt
  153. //! werden soll \param len Die Länge des Textes, der eingefügt werden
  154. //! soll
  155. DLLEXPORT void insert(int p, const char* t, int len);
  156. //! Fügt den Inhalt eines Textes an einer Bestimmten Stelle im Text ein
  157. //! \param p Die Position im Text, bei der der inhalt des Textest
  158. //! eingefügt werden soll \param t Der Text, dessen Kopie an der Stelle
  159. //! eingefügt werden soll
  160. DLLEXPORT void insert(int p, const Text& t);
  161. // replaces all regular expression occurences by a static string
  162. // \param regex The regular expression to search for
  163. // \param replacement The string to replace the occurences with
  164. // \param config The configuration for the regular expression
  165. DLLEXPORT void regexReplace(const char* regex,
  166. const char* replacement,
  167. Regex::RegexConfig* config = 0);
  168. // replaces all regular expression occurences with a result of a
  169. // specified replacement function string \param regex The regular
  170. // expression to search for \param replacementFunction a function that
  171. // is called with the result of the regular expression and should return
  172. // the replacement string \param config The configuration for the
  173. // regular expression
  174. DLLEXPORT void regexReplace(const char* regex,
  175. std::function<Text(Regex::Result&)> replacementFunction,
  176. Regex::RegexConfig* config = 0);
  177. //! Ersetzt einen bestimmten Textabschnitt mit einer anderen
  178. //! Zeichenkette
  179. //! \param p1 Die Startposition des zu ersetzenden Textabschnittes
  180. //! \param p2 Die Endposition des zu ersetzenden Textabschnittes
  181. //! \param t Die Zeichenkette, die an die entsprechende Stelle kopiert
  182. //! werden soll Beispiel: ( "Hallo Welt" ).ersetzen( 2, 5, "lt" );
  183. //! ergibt: "Halt Welt"
  184. DLLEXPORT void ersetzen(int p1, int p2, const char* t);
  185. //! Ersetzt einen bestimmten Textabschnitt mit einer anderen
  186. //! Zeichenkette
  187. //! \param p1 Die Startposition des zu ersetzenden Textabschnittes
  188. //! \param p2 Die Endposition des zu ersetzenden Textabschnittes
  189. //! \param t Die Zeichenkette, die an die entsprechende Stelle kopiert
  190. //! \param len Die Länge des Textes, der an die entsprechende Stelle
  191. //! kopiert werden soll
  192. //! werden soll Beispiel: ( "Hallo Welt" ).ersetzen( 2, 5, "lt", 2 );
  193. //! ergibt: "Halt Welt"
  194. DLLEXPORT void ersetzen(int p1, int p2, const char* t, int len);
  195. //! Ersetzt einen bestimmten Textabschnitt mit dem Inhalt eines anderen
  196. //! Textes
  197. //! p1: Die Startposition des zu ersetzenden Textabschnittes
  198. //! p2: Die Endposition des zu ersetzenden Textabschnittes
  199. //! \param t Der Text, dessen Inhalt an die entsprechende Stelle kopiert
  200. //! werden soll Beispiel: ( "Hallo Welt" ).ersetzen( 2, 5, new Text(
  201. //! "lt" ) ); ergibt: "Halt Welt"
  202. DLLEXPORT void ersetzen(int p1, int p2, const Text& t);
  203. //! Sucht und erstetzt jedes Vorkommen eines bestimmten Buchstaben durch
  204. //! einen anderen
  205. //! c1: Der Buchstabe der ersetzt werden soll
  206. //! c2: Der Buchstabe, durch den der Andere ersetzt werden soll
  207. DLLEXPORT void ersetzen(char c1, char c2);
  208. //! Sucht und erstetzt jedes Vorkommen einer bestimmten Zeichenkette
  209. //! durch eine andere
  210. //! t1: Die Zeichenkette, die ersetzt werden soll
  211. //! t2: Die Zeichenkette, durch welche die Andere ersetzt werden soll
  212. DLLEXPORT void ersetzen(const char* t1, const char* t2);
  213. //! Sucht und erstetzt jedes Vorkommen einer bestimmten Zeichenkette
  214. //! durch eine andere
  215. //! \param t1 Die Zeichenkette, die ersetzt werden soll
  216. //! \param t2 Die Zeichenkette, durch welche die Andere ersetzen soll
  217. //! \param len1 Die Länge der Zeichenkette, die ersetzt werden soll
  218. //! \param len2 Die Länge der Zeichenkette, durch welche die Andere
  219. //! ersetzen soll
  220. DLLEXPORT void ersetzen(
  221. const char* t1, int len1, const char* t2, int len2);
  222. //! Sucht und erstetzt jedes Vorkommen des Inhalts eines Textes durch
  223. //! eine andere Zeichenkette
  224. //! t1: Der Text, dessen Inhalt gesucht und ersetzt wird
  225. //! t2: Die Zeichenkette, durch welche das Vorkommen des Textes ersetzt
  226. //! werden soll
  227. DLLEXPORT void ersetzen(const Text& t1, const char* t2);
  228. //! Sucht und erstetzt jedes Vorkommen einer Zeichenkette durch den
  229. //! Inhalt eines Textes
  230. //! t1: Die Zeichenkette, die ersetzt werden soll
  231. //! t2: Der Text, dessen Inhalt das Vorkommen der Zeichenkette
  232. //! ersetzten soll
  233. DLLEXPORT void ersetzen(const char* t1, const Text& t2);
  234. //! Sucht und erstetzt jedes Vorkommen des Inhalts eines Textes durch
  235. //! den Inhalt eines anderen Textes
  236. //! t1: Der Text, dessen Vorkommen ersetzt werden sollen
  237. //! t2: Der Text, dessen Inhalt das Vorkommen der Zeichenkette
  238. //! ersetzten soll
  239. DLLEXPORT void ersetzen(const Text& t1, const Text& t2);
  240. //! Ersetzt das i-te auftreten eines bestimmten Buchstaben mit einem
  241. //! anderen Buchstaben \param i Das wie vielte Auftreten des Buchstabens
  242. //! ersetzt werden soll
  243. //! c1: Der Buchstabe, dessen i-tes Auftreten erstetzt werden soll
  244. //! c2: Der Buchstabe, der das i-te Auftreten des anderen Buchstabens
  245. //! ersetzen soll
  246. DLLEXPORT void ersetzen(int i, char c1, char c2);
  247. //! Ersetzt das i-te auftreten einer bestimmten Zeichenkette mit einer
  248. //! anderen Zeichenkette \param i Das wie vielte Auftreten der
  249. //! Zeichenkette ersetzt werden soll
  250. //! c1: Die Zeichenkette, dessen i-tes Auftreten erstetzt werden soll
  251. //! c2: Die Zeichenkette, die das i-te Auftreten der anderen
  252. //! Zeichenkette ersetzen soll
  253. DLLEXPORT void ersetzen(int i, const char* t1, const char* t2);
  254. //! Ersetzt das i-te auftreten einer bestimmten Zeichenkette mit einer
  255. //! anderen Zeichenkette
  256. //! \param i Das wie vielte Auftreten der
  257. //! Zeichenkette ersetzt werden soll
  258. //! \param c1 Die Zeichenkette, dessen i-tes Auftreten erstetzt werden
  259. //! soll
  260. //! \param c2 Die Zeichenkette, die das i-te Auftreten der anderen
  261. //! \param len1 Die Länge der Zeichenkette, die ersetzt werden soll
  262. //! \param len2 Die Länge der Zeichenkette, durch welche die Andere
  263. //! Zeichenkette ersetzen soll
  264. DLLEXPORT void ersetzen(
  265. int i, const char* t1, int len1, const char* t2, int len2);
  266. //! Ersetzt das i-te auftreten des Inhalts eines Textes mit einer
  267. //! Zeichenkette \param i Das wie vielte Auftreten des Textes ersetzt
  268. //! werden soll
  269. //! c1: Der Text, dessen i-tes Auftreten erstetzt werden soll
  270. //! c2: Die Zeichenkette, die das i-te Auftreten des Textes ersetzen
  271. //! soll
  272. DLLEXPORT void ersetzen(int i, const Text& t1, const char* t2);
  273. //! Ersetzt das i-te auftreten einer bestimmten Zeichenkette mit dem
  274. //! Inhalt eines Textes \param i Das wie vielte Auftreten der
  275. //! Zeichenkette ersetzt werden soll
  276. //! c1: Die Zeichenkette, dessen i-tes Auftreten erstetzt werden soll
  277. //! c2: Der Text, dessen Inhalt das i-te Auftreten der Zeichenkette
  278. //! ersetzen soll
  279. DLLEXPORT void ersetzen(int i, const char* t1, const Text& t2);
  280. //! Ersetzt das i-te auftreten eines bestimmten Textes mit dem Inhalt
  281. //! eines anderen Textes \param i Das wie vielte Auftreten des Textes
  282. //! ersetzt werden soll
  283. //! c1: Der Text, dessen i-tes Auftreten erstetzt werden soll
  284. //! c2: Der Text, dessen Inhalt das i-te Auftreten des anderen Textes
  285. //! ersetzen soll
  286. DLLEXPORT void ersetzen(int i, const Text& t1, const Text& t2);
  287. //! Löscht den bisherigen Text und erzeugt einen Text, der aus einem
  288. //! Bestimten Buchstaben besteht, mit einer bestimmten Länge \param c
  289. //! Der Buchstabe, aus dem der Text bestehen soll \param length Die
  290. //! Länge des Textes
  291. DLLEXPORT void fillText(char c, int length);
  292. //! Löscht ein Bestimmtes Zeichen aus dem Text
  293. //! \param p Die Position des zu löschenden Zeichens
  294. DLLEXPORT void remove(int p);
  295. //! Löscht einen Bestimmten Textabschnitt
  296. //! p1: Die Startposition des zu löschenden Abschnittes
  297. //! p2: Die Endposition des zu löschenden Abschnittes (Das Zeichen bei
  298. //! p2 bleibt erhalten)
  299. DLLEXPORT void remove(int p1, int p2);
  300. //! Löscht jedes Vorkommen eines bestimmten Buchsaben
  301. //! \param c Der Buchstabe, dessen Vorkommen gelöscht werden soll
  302. DLLEXPORT void remove(char c);
  303. //! Löscht jedes Vorkommen einer bestimmten Zeichenkette
  304. //! \param t Die Zeichenkette, deren Vorkommen entfernt werden sollen
  305. DLLEXPORT void remove(const char* t);
  306. //! Löscht jedes Vorkommen einer bestimmten Zeichenkette
  307. //! \param t Die Zeichenkette, deren Vorkommen entfernt werden sollen
  308. //! \param len Die Länge der Zeichenkette, die gelöscht werden soll
  309. DLLEXPORT void remove(const char* t, int len);
  310. //! Löscht jedes Vorkommen des Inhalts eines Textes
  311. //! \param t Der text, dessen Inhalt gelöscht werden soll
  312. DLLEXPORT void remove(const Text& t);
  313. //! Löscht das i-te Vorkommen eines bestimmten Buchstaben
  314. //! \param i Das wie vielte Vorkommen des Buchstabens gelöscht werden
  315. //! soll \param c Der Buchstabe, dessen i-tes Vorkommen gelöscht werden
  316. //! soll
  317. DLLEXPORT void remove(int i, char c);
  318. //! Löscht das i-te Vorkommen einer bestimmten Zechenkette
  319. //! \param i Das wie vielte Vorkommen der Zeichenkette gelöscht werden
  320. //! soll \param t Die Zeichenkette, dessen i-tes Vorkommen gelöscht
  321. //! werden soll
  322. DLLEXPORT void remove(int i, const char* t);
  323. //! Löscht das i-te Vorkommen einer bestimmten Zechenkette
  324. //! \param i Das wie vielte Vorkommen der Zeichenkette gelöscht werden
  325. //! soll
  326. //! \param t Die Zeichenkette, dessen i-tes Vorkommen gelöscht werden
  327. //! soll
  328. //! \pram len Die Länge der Zeichenkette, die gelöscht werden soll
  329. DLLEXPORT void remove(int i, const char* t, int len);
  330. //! Löscht das i-te Vorkommen eines bestimmten Textinhaltes
  331. //! \param i Das wie vielte Vorkommen des Textinhaltes gelöscht werden
  332. //! soll \param t Der Text, dessen i-tes Vorkommen gelöscht werden soll
  333. DLLEXPORT void remove(int i, const Text& t);
  334. //! Löscht alle ' ', '\n', '\r', '\t' bis zu einem anderen buchstaben
  335. //! \param pos Die Position des ersten zeichens
  336. //! \return the number of removed characters
  337. DLLEXPORT int removeWhitespaceAfter(int pos);
  338. //! Löscht alle ' ', '\n', '\r', '\t' bis zu einem anderen buchstaben
  339. //! \param pos Die Position des ersten zeichens (beginnt bei pos-1)
  340. //! \return the number of removed characters
  341. DLLEXPORT int removeWhitespaceBefore(int pos);
  342. //! Setzt die Anzahl der Nachkommastellen beim Anhängen von Kommazahlen
  343. //! \param p Die Anzahl der Stellen nach dem Komma
  344. DLLEXPORT void setPrecision(int p);
  345. //! Gibt die Länge des Textes zurück
  346. DLLEXPORT int getLength() const;
  347. //! Ermittelt die neue Curserposition nachdem Drücken der 'Links'
  348. //! Pfeiltaste \param pos Die alte Curserposition
  349. DLLEXPORT int getLKick(int pos) const;
  350. //! Ermittelt die neue Curserposition nachdem Drücken der 'Oben'
  351. //! Pfeiltaste \param pos Die alte Curserposition
  352. DLLEXPORT int getOKick(int pos) const;
  353. //! Ermittelt die neue Curserposition nachdem Drücken der 'Rechts'
  354. //! Pfeiltaste \param pos Die alte Curserposition
  355. DLLEXPORT int getRKick(int pos) const;
  356. //! Ermittelt die neue Curserposition nachdem Drücken der 'Unten'
  357. //! Pfeiltaste \param pos Die alte Curserposition
  358. DLLEXPORT int getUKick(int pos) const;
  359. //! Überprüft, ob im Text der Inhalt eines anderen Textes vorkommt
  360. //! \param t Der Text, nach dessen Inhalt gesucht werden soll
  361. //! \return (true), wenn der Inhalt des Textes vorkommt. (false) sonnst
  362. DLLEXPORT bool hat(const Text& t) const;
  363. //! Überprüft, ob im Text eine bestimmte Zeichenkette vorkommt
  364. //! \param t Die Zeichenkette, nach der gesucht werden soll
  365. //! \return (true), wenn die Zeichenkette vorkommt. (false) sonnst
  366. DLLEXPORT bool hat(const char* t) const;
  367. //! Überprüft, ob im Text eine bestimmte Zeichenkette vorkommt
  368. //! \param t Die Zeichenkette, nach der gesucht werden soll
  369. //! \param len Die Länge der Zeichenkette, die gesucht werden soll
  370. //! \return (true), wenn die Zeichenkette vorkommt. (false) sonnst
  371. DLLEXPORT bool hat(const char* t, int len) const;
  372. //! Überprüft, ob im Text eine bestimmte Zeichenkette vorkommt
  373. //! \param searchStartIndex Der index ab dem gesucht werden soll
  374. //! \param t Die Zeichenkette, nach der gesucht werden soll
  375. //! \return (true), wenn die Zeichenkette vorkommt. (false) sonnst
  376. DLLEXPORT bool hat(int searchStartIndex, const char* t) const;
  377. //! Überprüft, ob im Text eine bestimmte Zeichenkette vorkommt
  378. //! \param searchStartIndex Der index ab dem gesucht werden soll
  379. //! \param t Die Zeichenkette, nach der gesucht werden soll
  380. //! \param len Die Länge der Zeichenkette, die gesucht werden soll
  381. //! \return (true), wenn die Zeichenkette vorkommt. (false) sonnst
  382. DLLEXPORT bool hat(int searchStartIndex, const char* t, int len) const;
  383. //! Überprüft, ob im Text der Inhalt eines anderen Textes vorkommt
  384. //! \param t Der Text, nach dessen Inhalt gesucht werden soll
  385. //! \return (true), wenn der Inhalt des Textes vorkommt. (false) sonnst
  386. //! \param pos die position an der die zeichenkette im string beginnen
  387. //! soll
  388. DLLEXPORT bool hatAt(int pos, const Text& t) const;
  389. //! Überprüft, ob im Text eine bestimmte Zeichenkette vorkommt
  390. //! \param t Die Zeichenkette, nach der gesucht werden soll
  391. //! \return (true), wenn die Zeichenkette vorkommt. (false) sonnst
  392. //! \param pos die position an der die zeichenkette im string beginnen
  393. //! soll
  394. DLLEXPORT bool hatAt(int pos, const char* t) const;
  395. //! Überprüft, ob im Text eine bestimmte Zeichenkette vorkommt
  396. //! \param t Die Zeichenkette, nach der gesucht werden soll
  397. //! \param len Die Länge der Zeichenkette, die gesucht werden soll
  398. //! \return (true), wenn die Zeichenkette vorkommt. (false) sonnst
  399. //! \param pos die position an der die zeichenkette im string beginnen
  400. //! soll
  401. DLLEXPORT bool hatAt(int pos, const char* t, int len) const;
  402. //! Überprüft, ob im Text ein bestimmtes Zeichen vorkommt
  403. //! \param c Das Zeichen, nach dem gesucht werden soll
  404. //! \return (true), wenn das Zeichen vorkommt. (false) sonnst
  405. DLLEXPORT bool hat(char c) const;
  406. //! Überprft, ob der Text den selben Inhalt wie eine Zeichenkette hat
  407. //! \param t Die Zeichenkette, die verglichen werden soll
  408. //! \return (true), wenn der Inhalt des Textes gleich der Zeichenkette
  409. //! ist. (false) sonst
  410. DLLEXPORT bool istGleich(const char* t) const;
  411. //! Überprft, ob der Text den selben Inhalt wie eine Zeichenkette hat
  412. //! \param t Die Zeichenkette, die verglichen werden soll
  413. //! \param len Die Länge der Zeichenkette, die verglichen werden soll
  414. //! \return (true), wenn der Inhalt des Textes gleich der Zeichenkette
  415. //! ist. (false) sonst
  416. DLLEXPORT bool istGleich(const char* t, int len) const;
  417. //! Überprft, ob der Text den selben Inhalt wie ein anderer Text hat
  418. //! \param t Der Text, dessen Inhalt verglichen werden soll
  419. //! \return (true), wenn die Inhalte der Texte übereinstimmen. (false)
  420. //! sonst
  421. DLLEXPORT bool istGleich(const Text& t) const;
  422. //! Gibt den Inhalt des Textes als Zeichenkette zurück
  423. DLLEXPORT const char* getText() const;
  424. //! Zählt, wie oft ein bestimmter Buchstabe im Text vorkomt
  425. //! \param c Der Buchstabe, der gezählt werden soll
  426. //! \return Die Anzahl des Buchstabens im Text
  427. DLLEXPORT int anzahlVon(char c) const;
  428. //! Zählt, wie oft eine bestimmte Zeichenkette im Text vorkommt
  429. //! \param t Die Zeichenkette, die gezählt werden soll
  430. //! \return Die Anzahl der Zeichenkette im Text
  431. DLLEXPORT int anzahlVon(const char* t) const;
  432. //! Zählt, wie oft eine bestimmte Zeichenkette im Text vorkommt
  433. //! \param t Die Zeichenkette, die gezählt werden soll
  434. //! \param len Die Länge der Zeichenkette, die gezählt werden soll
  435. //! \return Die Anzahl der Zeichenkette im Text
  436. DLLEXPORT int anzahlVon(const char* t, int len) const;
  437. //! Zählt, wie oft der Inhalt eines Textest im Text vorkommt
  438. //! \param t Der Text, dessen Inhalt gezählt werden soll
  439. //! \return Die Anzahl des Textinhaltes im Text
  440. DLLEXPORT int anzahlVon(const Text& t) const;
  441. //! Gibt die erste Position eines bestimmten Buchstabens im Text zurück
  442. //! \param c Der Buchstabe, der gefunden werden soll
  443. //! \return Die Position des ersten Vorkommens des Buchstabens
  444. DLLEXPORT int positionVon(char c) const;
  445. //! Gibt die erste Position einer bestimmten Zeichenkette im Text zurück
  446. //! \param t Die Zeichenkette, die gefunden werden soll
  447. //! \return Die Position des ersten Vorkommens der Zeichenkette
  448. DLLEXPORT int positionVon(const char* t) const;
  449. //! Gibt die erste Position einer bestimmten Zeichenkette im Text zurück
  450. //! \param len Die Länge der Zeichenkette, die gefunden werden soll
  451. //! \param t Die Zeichenkette, die gefunden werden soll
  452. //! \return Die Position des ersten Vorkommens der Zeichenkette
  453. DLLEXPORT int positionVon(int len, const char* t) const;
  454. //! Gibt die erste Position einer bestimmten Zeichenkette im Text zurück
  455. //! \param searchStart Index ab dem gesucht werden soll
  456. //! \param t Die Zeichenkette, die gefunden werden soll
  457. //! \return Die Position des ersten Vorkommens der Zeichenkette
  458. DLLEXPORT int positionVon(
  459. int searchStart, const char* t, int len) const;
  460. //! Gibt die erste Position eines Textinhaltes im Text zurück
  461. //! \param t Der Text, dessen Inhalt gefunden werden soll
  462. //! \return Die Position des ersten Vorkommens des Textinhaltes
  463. DLLEXPORT int positionVon(const Text& t) const;
  464. //! Gibt die i-te Position eines bestimmten Buchstabens im Text zurück
  465. //! \param c Der Buchstabe, der gefunden werden soll
  466. //! \param i Das wievielte Vorkommen gefunden werden soll
  467. //! \return Die Position des i-ten Vorkommens des Buchstabens
  468. DLLEXPORT int positionVon(char c, int i) const;
  469. //! Gibt die i-te Position einer bestimmten Zeichenkette im Text zurück
  470. //! \param t Die Zeichenkette, die gefunden werden soll
  471. //! \param i Das wievielte Vorkommen gefunden werden soll
  472. //! \return Die Position des i-ten Vorkommens der Zeichenkette
  473. DLLEXPORT int positionVon(const char* t, int i) const;
  474. //! Gibt die i-te Position einer bestimmten Zeichenkette im Text zurück
  475. //! \param t Die Zeichenkette, die gefunden werden soll
  476. //! \param len Die Länge der Zeichenkette, die gefunden werden soll
  477. //! \param i Das wievielte Vorkommen gefunden werden soll
  478. //! \return Die Position des i-ten Vorkommens der Zeichenkette
  479. DLLEXPORT int positionVon(int i, int len, const char* t) const;
  480. //! Gibt die i-te Position eines Textinhaltes im Text zurück
  481. //! \param t Der Text, dessen Inhalt gefunden werden soll
  482. //! \param i Das wievielte Vorkommen gefunden werden soll
  483. //! \return Die Position des i-ten Vorkommens des Textinhaltes
  484. DLLEXPORT int positionVon(const Text& t, int i) const;
  485. //! Gibt einen Text zurück, der eine Kopie eines bestimmten
  486. //! Textabschnittes enthält
  487. //! p1: Die Startposition des Textabschnittes
  488. //! p2: Die Endposition des Textabschnittes (nicht enthalten)
  489. DLLEXPORT Text* getTeilText(int p1, int p2) const;
  490. //! Gibt einen Text zurück, der eine Kopie eines bestimmten
  491. //! Textabschnittes enthält
  492. //! p1: Die Startposition des Textabschnittes (Der Textabschnitt geht
  493. //! bis ans Ende des Textes)
  494. DLLEXPORT Text* getTeilText(int p) const;
  495. //! berechnet den Hash code des textes
  496. DLLEXPORT int hashCode() const;
  497. //! Hängt eine Zahl ans Ende des Textes an
  498. DLLEXPORT Text& operator+=(const int num);
  499. //! Hängt eine Zahl ans Ende des Textes an
  500. DLLEXPORT Text& operator+=(const __int64 num);
  501. //! Hängt eine Kommazahl ans Ende des Textes an
  502. DLLEXPORT Text& operator+=(const double num);
  503. //! Hängt eine Kommazahl ans Ende des Textes an
  504. DLLEXPORT Text& operator+=(const float num);
  505. //! Hängt eine Zeichenkette ans Ende des Textes an
  506. DLLEXPORT Text& operator+=(const char* txt);
  507. //! Hängt eine Kopie des Inhalts eines Textes ans Ende des Textes an
  508. DLLEXPORT Text& operator+=(const Text& txt);
  509. //! Setzt den Inhalt des Textes gleich einer Zahl
  510. DLLEXPORT Text& operator=(const int num);
  511. //! Setzt den Inhalt des Textes gleich einer Kommazahl
  512. DLLEXPORT Text& operator=(const double num);
  513. //! Setzt den Inhalt des Textes gleich einer Kommazahl
  514. DLLEXPORT Text& operator=(const float num);
  515. //! Setzt den Inahlt des Textes gleich einer Zeichenkette
  516. DLLEXPORT Text& operator=(const char* txt);
  517. //! Setzt den Inhalt des Textes gleich einer Kopie des Inhalts eines
  518. //! anderen Textes
  519. DLLEXPORT Text& operator=(const Text& txt);
  520. //! Gibt den Inhalt des Textes als Zeichenkette zurück
  521. DLLEXPORT operator const char*() const;
  522. //! Konviertiert den Inhalt des Textes zu einer Zahl
  523. DLLEXPORT explicit operator int() const;
  524. //! Konviertiert den Inhalt des Textes zu einer Zahl
  525. DLLEXPORT explicit operator __int64() const;
  526. //! Konviertiert den Inhalt des Textes zu einer Kommazahl
  527. DLLEXPORT explicit operator double() const;
  528. //! Konviertiert den Inhalt des Textes zu einer Kommazahl
  529. DLLEXPORT explicit operator float() const;
  530. //! Prüft, ob der Inhalt des Textes nach alphabetischer Ordnung später
  531. //! kommt als der Inhalt eines anderen Textes
  532. DLLEXPORT bool operator>(Text& t) const;
  533. //! Prüft, ob der Inhalt des Textes nach alphabetischer Ordnung früher
  534. //! kommt als der Inhalt eines anderen Textes
  535. DLLEXPORT bool operator<(Text& t) const;
  536. //! Erstellt einen neuen Text bestehend aus diesem und t2
  537. DLLEXPORT Text operator+(const Text& t2) const;
  538. //! Erstellt einen neuen Text bestehend aus diesem und t2
  539. DLLEXPORT Text operator+(const char* t2) const;
  540. //! Erstellt einen neuen Text bestehend aus diesem und num
  541. DLLEXPORT Text operator+(const int num) const;
  542. //! Erstellt einen neuen Text bestehend aus diesem und num
  543. DLLEXPORT Text operator+(const __int64 num) const;
  544. //! Erstellt einen neuen Text bestehend aus diesem und num
  545. DLLEXPORT Text operator+(const double num) const;
  546. //! Erstellt einen neuen Text bestehend aus diesem und num
  547. DLLEXPORT Text operator+(const float num) const;
  548. //! Prüft ob der Text mit dem anderen Text übereinstimmt
  549. DLLEXPORT bool operator==(const Text& right) const;
  550. };
  551. class TextReader : public Reader,
  552. public virtual ReferenceCounter
  553. {
  554. private:
  555. Text* txt;
  556. __int64 lPos;
  557. public:
  558. //! Konstructor
  559. //! \param txt Der Text der gelesen werden soll. Er wird nicht kopiert
  560. //! sondern direkt gelesen.
  561. DLLEXPORT TextReader(Text* txt);
  562. //! Destructor
  563. DLLEXPORT virtual ~TextReader();
  564. //! Setzt die Position des Bytes, das als nächstes gelesen werden soll
  565. //! \param pos Der Index des Bytes
  566. //! \param ende 1, wenn der Index vom ende des Textes zählt. 0, wenn der
  567. //! Index vom Beginn des Textes zählt
  568. DLLEXPORT void setLPosition(__int64 pos, bool ende) override;
  569. //! Ließt aus der Datei
  570. //! \param bytes Ein Array, der mit Bytes aus dem Text gefüllt werden
  571. //! soll \param len Wie viele Bytes aus dem Text gelesen werden sollen
  572. DLLEXPORT void lese(char* bytes, int len) override;
  573. //! Ließt die nächste zeile des Textes ein
  574. //! \return Die gelesene Zeile als Text mit zeilenumbruch
  575. DLLEXPORT Text* leseZeile() override;
  576. //! Prüft, ob die Resource vollständig gelesen wurde
  577. //! return 1, wenn die Resource vollständig gelesen wurde. 0, sonst
  578. DLLEXPORT bool istEnde() const override;
  579. //! Gibt den Index des Bytes aus dem Text zurück, welches als nächstes
  580. //! gelesen werden würde return -1, falls ein Fehler aufgetreten ist.
  581. //! Sonst die Position des Lesezeigers
  582. DLLEXPORT __int64 getLPosition() const override;
  583. //! Gibt die Anzahl der zu lesenden Bytes zurück
  584. DLLEXPORT __int64 getSize() const override;
  585. };
  586. //! Durchsucht eine Zeichenkette nach dem num-ten Vorkommen eines bestimmten
  587. //! Buchstabens \param string Die zu durchsuchende Zeichenkette \param c Der
  588. //! zu suchende Buchstabe \param num Das wievielte Vorkommen des Buchtaben
  589. //! gefunden werden soll \return (-1), wenn es kein num-tes Vorkommen des
  590. //! Buchstaben gibt. Sonst die Position des num-ten Vorkommens in der
  591. //! Zeichenkette
  592. DLLEXPORT int stringPositionVonChar(const char* string,
  593. char c,
  594. int num); //! sucht die position des num-ten c-s in string, -1 bei nicht
  595. //! gefunden
  596. //! Durchsucht eine Zeichenkette nach einer Anderen Zeichenkette
  597. //! \param string Die zu durchsuchende Zeichenkette
  598. //! \param suche Die Zeichenkette, nach der gesucht werden soll
  599. //! \param sBegPos Die Position, ab der die Suche begonnen werden soll
  600. //! \return Die Position, an der die zu suchende Zeichenkette erstmals
  601. //! gefunden wurde. (-1) Wenn nichts gefunden wurde.
  602. DLLEXPORT int stringPositionVonString(
  603. const char* string, char* suche, int sBegPos);
  604. //! Kopiert eine bestimmte Zeichenkette in die Zwischenablage des
  605. //! Betriebssystems \param txt Die Zeichenkette, die kopiert werden soll
  606. DLLEXPORT void TextKopieren(const char* txt);
  607. //! Ermittelt, ob in der Zwischenablage des Betriebssystems eine
  608. //! Zeichenkette steht. \return Die Zeichenkette aus der Zwischenablage.
  609. //! Wenn keine Zeichenkette kopiert wurde, wird eine lehre Zeichenkette
  610. //! zurückgegeben.
  611. DLLEXPORT const char* TextInsert();
  612. //! Wandelt einen bestimmten schreibbaren Buchstaben in einen Groß- oder
  613. //! Kleinbuchstaben um \param c Der Buchstabe, der umgewandelt werden soll
  614. //! \param groß Wenn (true), so wird der Buchstabe in einen Großbuchstaben
  615. //! umgewandelt. Wenn (false), wird er in einen Kleinbuchstaben umgewandelt.
  616. //! \return Den umgewandelten Buchstaben
  617. DLLEXPORT char smallOrBig(char c, bool big);
  618. //! Ermittelt, ob ein Buchstabe ein schreibbares Zeichen ist
  619. //! \param zeichen Der Buchstabe, der geprüft werden soll
  620. //! \return (true), wenn der Buchstabe gezeichnet werden kann. (false)
  621. //! sonnst
  622. DLLEXPORT bool istSchreibbar(unsigned char zeichen);
  623. //! Konvertiert eine Zahl aus einer Zeichenkette in belibiger Basis zu einer
  624. //! Zahl \param c Die Zeichenkette, in der Die Zahl steht \param system Die
  625. //! Basis der Zahl \return Die Zahl, die im Text stand
  626. DLLEXPORT unsigned int TextZuInt(const char* c, int system);
  627. //! Konvertiert eine Zahl aus einer Zeichenkette in belibiger Basis zu einer
  628. //! Zahl \param c Die Zeichenkette, in der Die Zahl steht
  629. //! c_ende: Wird duch die Funktion gesetzt und darf 0 sein. Zeigt auf das
  630. //! nächste Zeichen in der Zeichenkette, das nach der Zah steht
  631. //! \param system Die Basis der Zahl
  632. //! \return Die Zahl, die im Text stand
  633. DLLEXPORT unsigned int TextZuInt(const char* c, char** c_ende, int system);
  634. //! Konvertiert eine Zahl aus einer Zeichenkette in belibiger Basis zu einer
  635. //! Zahl \param c Die Zeichenkette, in der Die Zahl steht \param system Die
  636. //! Basis der Zahl \return Die Zahl, die im Text stand
  637. DLLEXPORT unsigned __int64 TextZuInt64(const char* c, int system);
  638. //! Konvertiert eine Zahl aus einer Zeichenkette in belibiger Basis zu einer
  639. //! Zahl \param c Die Zeichenkette, in der Die Zahl steht
  640. //! c_ende: Wird duch die Funktion gesetzt und darf 0 sein. Zeigt auf das
  641. //! nächste Zeichen in der Zeichenkette, das nach der Zah steht
  642. //! \param system Die Basis der Zahl
  643. //! \return Die Zahl, die im Text stand
  644. DLLEXPORT unsigned __int64 TextZuInt64(
  645. const char* c, char** c_ende, int system);
  646. //! Konvertiert eine Zeichenkette zu einem Double
  647. //! \param c Die Zeichenkette, die konvertiert werden soll
  648. //! \return Das double, was in der Zeichenkette stand
  649. DLLEXPORT double TextZuDouble(const char* c);
  650. //! Konvertiert eine Zeichenkette zu einem Float
  651. //! \param c Die Zeichenkette, die konvertiert werden soll
  652. //! \return Das float, was in der Zeichenkette stand
  653. DLLEXPORT float TextZuFloat(const char* c);
  654. //! Konvertiert eine Zeichenkette zu einem Double
  655. //! \param c Die Zeichenkette, die konvertiert werden soll
  656. //! c_ende: Wird duch die Funktion gesetzt und darf 0 sein. Ein Zeiger auf
  657. //! das nächste Zeichen nach dem Double in der Zeichenkette
  658. //! \return Das double, was in der Zeichenkette stand
  659. DLLEXPORT double TextZuDouble(const char* c, char** c_ende);
  660. //! Konvertiert eine Zeichenkette zu einem float
  661. //! \param c Die Zeichenkette, die konvertiert werden soll
  662. //! c_ende: Wird duch die Funktion gesetzt und darf 0 sein. Ein Zeiger auf
  663. //! das nächste Zeichen nach dem float in der Zeichenkette
  664. //! \return Das float, was in der Zeichenkette stand
  665. DLLEXPORT float TextZuFloat(const char* c, char** c_ende);
  666. //! Ermittelt die Länge einer bestimmten Zeichenkette
  667. //! \param txt Die Zeichenkette, deren Länge ermittelt werden soll
  668. //! \return Die Länge der Zeichenkette
  669. DLLEXPORT int textLength(const char* txt);
  670. } // namespace Framework