Text.h 32 KB

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