demo_multiline.pp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. program test_multiline;
  2. {$mode objfpc}{$H+}
  3. uses
  4. SysUtils, Classes, syntax.highlighter, syntax.javascript, syntax.htmlrender;
  5. var
  6. jsHighlighter: TJavaScriptSyntaxHighlighter;
  7. renderer: THtmlSyntaxRenderer;
  8. tokens: TSyntaxTokenArray;
  9. output: TStringList;
  10. jsCode: string;
  11. i: Integer;
  12. begin
  13. WriteLn('Testing Multiline JavaScript Rendering:');
  14. WriteLn('=======================================');
  15. jsCode := 'function test() {' + #10 + ' return "hello";' + #10 + '}';
  16. WriteLn('Original JavaScript:');
  17. WriteLn(jsCode);
  18. WriteLn;
  19. jsHighlighter := TJavaScriptSyntaxHighlighter.Create;
  20. renderer := THtmlSyntaxRenderer.Create;
  21. output := TStringList.Create;
  22. try
  23. tokens := jsHighlighter.Execute(jsCode);
  24. WriteLn('Tokens found: ', Length(tokens));
  25. for i := 0 to High(tokens) do begin
  26. WriteLn('Token ', i, ': "', StringReplace(tokens[i].Text, #10, '\n', [rfReplaceAll]), '" Kind: ', Ord(tokens[i].Kind));
  27. end;
  28. WriteLn;
  29. // Test default behavior
  30. renderer.Options := [];
  31. renderer.RenderTokens(tokens, output);
  32. WriteLn('Default Rendering (', output.Count, ' lines):');
  33. for i := 0 to output.Count - 1 do
  34. WriteLn('Line ', i, ': ', output[i]);
  35. WriteLn;
  36. // Test with hroPreserveLineStructure
  37. output.Clear;
  38. renderer.Options := [hroPreserveLineStructure];
  39. renderer.RenderTokens(tokens, output);
  40. WriteLn('Preserved Line Structure (', output.Count, ' lines):');
  41. for i := 0 to output.Count - 1 do
  42. WriteLn('Line ', i, ': ', output[i]);
  43. WriteLn;
  44. // Test with both options
  45. output.Clear;
  46. renderer.Options := [hroPreserveLineStructure, hroNoDefaultSpan];
  47. renderer.RenderTokens(tokens, output);
  48. WriteLn('Preserved + No Default Spans (', output.Count, ' lines):');
  49. for i := 0 to output.Count - 1 do
  50. WriteLn('Line ', i, ': ', output[i]);
  51. finally
  52. output.Free;
  53. renderer.Free;
  54. jsHighlighter.Free;
  55. end;
  56. WriteLn;
  57. WriteLn('Press Enter to exit.');
  58. ReadLn;
  59. end.