demo_html.pp 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. program test_html;
  2. {$mode objfpc}{$H+}
  3. uses
  4. SysUtils, Classes, syntax.highlighter, syntax.html;
  5. procedure TestHtmlBasicTags;
  6. var
  7. highlighter: THtmlSyntaxHighlighter;
  8. tokens: TSyntaxTokenArray;
  9. i: Integer;
  10. htmlCode: string;
  11. begin
  12. WriteLn('Testing HTML Basic Tags:');
  13. WriteLn('=======================');
  14. htmlCode := '<html><head><title>Test</title></head><body><p>Hello</p></body></html>';
  15. highlighter := THtmlSyntaxHighlighter.Create;
  16. try
  17. tokens := highlighter.Execute(htmlCode);
  18. WriteLn('HTML: ', htmlCode);
  19. WriteLn('Tokens (', Length(tokens), '):');
  20. for i := 0 to High(tokens) do begin
  21. if Trim(tokens[i].Text) <> '' then
  22. WriteLn(' "', tokens[i].Text, '" - Kind: ', Ord(tokens[i].Kind),
  23. ' (', tokens[i].Kind, ') - Category: ', tokens[i].CategoriesAsString);
  24. end;
  25. finally
  26. highlighter.Free;
  27. end;
  28. WriteLn;
  29. end;
  30. procedure TestHtmlAttributes;
  31. var
  32. highlighter: THtmlSyntaxHighlighter;
  33. tokens: TSyntaxTokenArray;
  34. i: Integer;
  35. htmlCode: string;
  36. begin
  37. WriteLn('Testing HTML Attributes:');
  38. WriteLn('=======================');
  39. htmlCode := '<div class="container" id="main" style="color: red;">Content</div>';
  40. highlighter := THtmlSyntaxHighlighter.Create;
  41. try
  42. tokens := highlighter.Execute(htmlCode);
  43. WriteLn('HTML: ', htmlCode);
  44. WriteLn('Tokens (', Length(tokens), '):');
  45. for i := 0 to High(tokens) do begin
  46. if Trim(tokens[i].Text) <> '' then
  47. WriteLn(' "', tokens[i].Text, '" - Kind: ', Ord(tokens[i].Kind),
  48. ' (', tokens[i].Kind, ') - Category: ', tokens[i].CategoriesAsString);
  49. end;
  50. finally
  51. highlighter.Free;
  52. end;
  53. WriteLn;
  54. end;
  55. procedure TestHtmlComments;
  56. var
  57. highlighter: THtmlSyntaxHighlighter;
  58. tokens: TSyntaxTokenArray;
  59. i: Integer;
  60. htmlCode: string;
  61. begin
  62. WriteLn('Testing HTML Comments:');
  63. WriteLn('=====================');
  64. htmlCode := '<!-- This is a comment --><p>Text</p>';
  65. highlighter := THtmlSyntaxHighlighter.Create;
  66. try
  67. tokens := highlighter.Execute(htmlCode);
  68. WriteLn('HTML: ', htmlCode);
  69. WriteLn('Tokens (', Length(tokens), '):');
  70. for i := 0 to High(tokens) do begin
  71. if Trim(tokens[i].Text) <> '' then
  72. WriteLn(' "', tokens[i].Text, '" - Kind: ', Ord(tokens[i].Kind),
  73. ' (', tokens[i].Kind, ') - Category: ', tokens[i].CategoriesAsString);
  74. end;
  75. finally
  76. highlighter.Free;
  77. end;
  78. WriteLn;
  79. end;
  80. procedure TestHtmlEntities;
  81. var
  82. highlighter: THtmlSyntaxHighlighter;
  83. tokens: TSyntaxTokenArray;
  84. i: Integer;
  85. htmlCode: string;
  86. begin
  87. WriteLn('Testing HTML Entities:');
  88. WriteLn('=====================');
  89. htmlCode := '<p>&lt;div&gt; &amp; &quot;test&quot; &#123; &#x41;</p>';
  90. highlighter := THtmlSyntaxHighlighter.Create;
  91. try
  92. tokens := highlighter.Execute(htmlCode);
  93. WriteLn('HTML: ', htmlCode);
  94. WriteLn('Tokens (', Length(tokens), '):');
  95. for i := 0 to High(tokens) do begin
  96. if Trim(tokens[i].Text) <> '' then
  97. WriteLn(' "', tokens[i].Text, '" - Kind: ', Ord(tokens[i].Kind),
  98. ' (', tokens[i].Kind, ') - Category: ', tokens[i].CategoriesAsString);
  99. end;
  100. finally
  101. highlighter.Free;
  102. end;
  103. WriteLn;
  104. end;
  105. procedure TestHtmlEmbeddedCss;
  106. var
  107. highlighter: THtmlSyntaxHighlighter;
  108. tokens: TSyntaxTokenArray;
  109. i: Integer;
  110. htmlCode: string;
  111. begin
  112. WriteLn('Testing HTML Embedded CSS:');
  113. WriteLn('==========================');
  114. htmlCode := '<style>body { color: red; font-size: 16px; }</style>';
  115. highlighter := THtmlSyntaxHighlighter.Create;
  116. try
  117. tokens := highlighter.Execute(htmlCode);
  118. WriteLn('HTML: ', htmlCode);
  119. WriteLn('Tokens (', Length(tokens), '):');
  120. for i := 0 to High(tokens) do begin
  121. if Trim(tokens[i].Text) <> '' then
  122. WriteLn(' "', tokens[i].Text, '" - Kind: ', Ord(tokens[i].Kind),
  123. ' (', tokens[i].Kind, ') - Category: ', tokens[i].CategoriesAsString);
  124. end;
  125. finally
  126. highlighter.Free;
  127. end;
  128. WriteLn;
  129. end;
  130. procedure TestHtmlEmbeddedJavaScript;
  131. var
  132. highlighter: THtmlSyntaxHighlighter;
  133. tokens: TSyntaxTokenArray;
  134. i: Integer;
  135. htmlCode: string;
  136. begin
  137. WriteLn('Testing HTML Embedded JavaScript:');
  138. WriteLn('=================================');
  139. htmlCode := '<script>function test() { console.log("hello"); }</script>';
  140. highlighter := THtmlSyntaxHighlighter.Create;
  141. try
  142. tokens := highlighter.Execute(htmlCode);
  143. WriteLn('HTML: ', htmlCode);
  144. WriteLn('Tokens (', Length(tokens), '):');
  145. for i := 0 to High(tokens) do begin
  146. if Trim(tokens[i].Text) <> '' then
  147. WriteLn(' "', tokens[i].Text, '" - Kind: ', Ord(tokens[i].Kind),
  148. ' (', tokens[i].Kind, ') - Category: ', tokens[i].CategoriesAsString);
  149. end;
  150. finally
  151. highlighter.Free;
  152. end;
  153. WriteLn;
  154. end;
  155. procedure TestHtmlDoctype;
  156. var
  157. highlighter: THtmlSyntaxHighlighter;
  158. tokens: TSyntaxTokenArray;
  159. i: Integer;
  160. htmlCode: string;
  161. begin
  162. WriteLn('Testing HTML DOCTYPE:');
  163. WriteLn('====================');
  164. htmlCode := '<!DOCTYPE html><html><head></head></html>';
  165. highlighter := THtmlSyntaxHighlighter.Create;
  166. try
  167. tokens := highlighter.Execute(htmlCode);
  168. WriteLn('HTML: ', htmlCode);
  169. WriteLn('Tokens (', Length(tokens), '):');
  170. for i := 0 to High(tokens) do begin
  171. if Trim(tokens[i].Text) <> '' then
  172. WriteLn(' "', tokens[i].Text, '" - Kind: ', Ord(tokens[i].Kind),
  173. ' (', tokens[i].Kind, ') - Category: ', tokens[i].CategoriesAsString);
  174. end;
  175. finally
  176. highlighter.Free;
  177. end;
  178. WriteLn;
  179. end;
  180. procedure TestCategorySystem;
  181. var
  182. categories: TStringList;
  183. htmlCategoryID: Integer;
  184. i: Integer;
  185. begin
  186. WriteLn('Testing Category System for HTML:');
  187. WriteLn('=================================');
  188. htmlCategoryID := TSyntaxHighlighter.RegisterCategory('HTML');
  189. WriteLn('HTML category ID: ', htmlCategoryID);
  190. categories := TStringList.Create;
  191. try
  192. TSyntaxHighlighter.GetRegisteredCategories(categories);
  193. WriteLn('All registered categories:');
  194. for i := 0 to categories.Count - 1 do
  195. WriteLn(' ', categories[i], ' = ', PtrInt(categories.Objects[i]));
  196. finally
  197. categories.Free;
  198. end;
  199. WriteLn;
  200. end;
  201. begin
  202. WriteLn('HTML Syntax Highlighter Test');
  203. WriteLn('============================');
  204. WriteLn;
  205. TestCategorySystem;
  206. TestHtmlBasicTags;
  207. TestHtmlAttributes;
  208. TestHtmlComments;
  209. TestHtmlEntities;
  210. TestHtmlEmbeddedCss;
  211. TestHtmlEmbeddedJavaScript;
  212. TestHtmlDoctype;
  213. WriteLn('Test completed. Press Enter to exit.');
  214. ReadLn;
  215. end.