demo_htmlrender.pp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. program test_htmlrender;
  2. {$mode objfpc}{$H+}
  3. uses
  4. SysUtils, Classes, syntax.highlighter, syntax.javascript, syntax.css,
  5. syntax.html, syntax.htmlrender;
  6. procedure TestJavaScriptRendering;
  7. var
  8. jsHighlighter: TJavaScriptSyntaxHighlighter;
  9. renderer: THtmlSyntaxRenderer;
  10. tokens: TSyntaxTokenArray;
  11. output: TStringList;
  12. jsCode: string;
  13. i: Integer;
  14. begin
  15. WriteLn('Testing JavaScript HTML Rendering:');
  16. WriteLn('==================================');
  17. jsCode := 'function test() { return "hello"; }';
  18. jsHighlighter := TJavaScriptSyntaxHighlighter.Create;
  19. renderer := THtmlSyntaxRenderer.Create;
  20. output := TStringList.Create;
  21. try
  22. tokens := jsHighlighter.Execute(jsCode);
  23. WriteLn('Original JavaScript: ', jsCode);
  24. WriteLn;
  25. renderer.RenderTokens(tokens, output);
  26. WriteLn('Rendered HTML:');
  27. for i := 0 to output.Count - 1 do
  28. WriteLn(output[i]);
  29. finally
  30. output.Free;
  31. renderer.Free;
  32. jsHighlighter.Free;
  33. end;
  34. WriteLn;
  35. WriteLn;
  36. end;
  37. procedure TestCssRendering;
  38. var
  39. cssHighlighter: TCssSyntaxHighlighter;
  40. renderer: THtmlSyntaxRenderer;
  41. tokens: TSyntaxTokenArray;
  42. output: TStringList;
  43. cssCode: string;
  44. i: Integer;
  45. begin
  46. WriteLn('Testing CSS HTML Rendering:');
  47. WriteLn('===========================');
  48. cssCode := 'body { color: #FF0000; font-size: 16px; }';
  49. cssHighlighter := TCssSyntaxHighlighter.Create;
  50. renderer := THtmlSyntaxRenderer.Create;
  51. output := TStringList.Create;
  52. try
  53. tokens := cssHighlighter.Execute(cssCode);
  54. WriteLn('Original CSS: ', cssCode);
  55. WriteLn;
  56. renderer.RenderTokens(tokens, output);
  57. WriteLn('Rendered HTML:');
  58. for i := 0 to output.Count - 1 do
  59. WriteLn(output[i]);
  60. finally
  61. output.Free;
  62. renderer.Free;
  63. cssHighlighter.Free;
  64. end;
  65. WriteLn;
  66. WriteLn;
  67. end;
  68. procedure TestHtmlRendering;
  69. var
  70. htmlHighlighter: THtmlSyntaxHighlighter;
  71. renderer: THtmlSyntaxRenderer;
  72. tokens: TSyntaxTokenArray;
  73. output: TStringList;
  74. htmlCode: string;
  75. i: Integer;
  76. begin
  77. WriteLn('Testing HTML HTML Rendering:');
  78. WriteLn('============================');
  79. htmlCode := '<div class="container">&lt;Hello&gt;</div>';
  80. htmlHighlighter := THtmlSyntaxHighlighter.Create;
  81. renderer := THtmlSyntaxRenderer.Create;
  82. output := TStringList.Create;
  83. try
  84. tokens := htmlHighlighter.Execute(htmlCode);
  85. WriteLn('Original HTML: ', htmlCode);
  86. WriteLn;
  87. renderer.RenderTokens(tokens, output);
  88. WriteLn('Rendered HTML:');
  89. for i := 0 to output.Count - 1 do
  90. WriteLn(output[i]);
  91. finally
  92. output.Free;
  93. renderer.Free;
  94. htmlHighlighter.Free;
  95. end;
  96. WriteLn;
  97. WriteLn;
  98. end;
  99. procedure TestEmbeddedHtmlRendering;
  100. var
  101. htmlHighlighter: THtmlSyntaxHighlighter;
  102. renderer: THtmlSyntaxRenderer;
  103. tokens: TSyntaxTokenArray;
  104. output: TStringList;
  105. htmlCode: string;
  106. i: Integer;
  107. begin
  108. WriteLn('Testing Embedded HTML Rendering:');
  109. WriteLn('================================');
  110. htmlCode := '<style>body { color: red; }</style><script>alert("test");</script>';
  111. htmlHighlighter := THtmlSyntaxHighlighter.Create;
  112. renderer := THtmlSyntaxRenderer.Create;
  113. output := TStringList.Create;
  114. try
  115. tokens := htmlHighlighter.Execute(htmlCode);
  116. WriteLn('Original HTML: ', htmlCode);
  117. WriteLn;
  118. renderer.RenderTokens(tokens, output);
  119. WriteLn('Rendered HTML:');
  120. for i := 0 to output.Count - 1 do
  121. WriteLn(output[i]);
  122. finally
  123. output.Free;
  124. renderer.Free;
  125. htmlHighlighter.Free;
  126. end;
  127. WriteLn;
  128. WriteLn;
  129. end;
  130. procedure TestStringOutput;
  131. var
  132. jsHighlighter: TJavaScriptSyntaxHighlighter;
  133. renderer: THtmlSyntaxRenderer;
  134. tokens: TSyntaxTokenArray;
  135. output: string;
  136. jsCode: string;
  137. begin
  138. WriteLn('Testing String Output:');
  139. WriteLn('=====================');
  140. jsCode := 'var x = 42;';
  141. jsHighlighter := TJavaScriptSyntaxHighlighter.Create;
  142. renderer := THtmlSyntaxRenderer.Create;
  143. try
  144. tokens := jsHighlighter.Execute(jsCode);
  145. WriteLn('Original JavaScript: ', jsCode);
  146. WriteLn;
  147. renderer.RenderTokensToString(tokens, output);
  148. WriteLn('Rendered HTML (single string):');
  149. WriteLn(output);
  150. finally
  151. renderer.Free;
  152. jsHighlighter.Free;
  153. end;
  154. WriteLn;
  155. WriteLn;
  156. end;
  157. procedure TestSpecialCharacters;
  158. var
  159. jsHighlighter: TJavaScriptSyntaxHighlighter;
  160. renderer: THtmlSyntaxRenderer;
  161. tokens: TSyntaxTokenArray;
  162. output: TStringList;
  163. jsCode: string;
  164. i: Integer;
  165. begin
  166. WriteLn('Testing Special Character Escaping:');
  167. WriteLn('===================================');
  168. jsCode := 'var html = "<div>\"Hello & Welcome\"</div>";';
  169. jsHighlighter := TJavaScriptSyntaxHighlighter.Create;
  170. renderer := THtmlSyntaxRenderer.Create;
  171. output := TStringList.Create;
  172. try
  173. tokens := jsHighlighter.Execute(jsCode);
  174. WriteLn('Original JavaScript: ', jsCode);
  175. WriteLn;
  176. renderer.RenderTokens(tokens, output);
  177. WriteLn('Rendered HTML (with escaping):');
  178. for i := 0 to output.Count - 1 do
  179. WriteLn(output[i]);
  180. finally
  181. output.Free;
  182. renderer.Free;
  183. jsHighlighter.Free;
  184. end;
  185. WriteLn;
  186. WriteLn;
  187. end;
  188. begin
  189. WriteLn('HTML Syntax Renderer Test');
  190. WriteLn('=========================');
  191. WriteLn;
  192. TestJavaScriptRendering;
  193. TestCssRendering;
  194. TestHtmlRendering;
  195. TestEmbeddedHtmlRendering;
  196. TestStringOutput;
  197. TestSpecialCharacters;
  198. WriteLn('Test completed. Press Enter to exit.');
  199. ReadLn;
  200. end.