-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathCompiledMessageHandler.cs
More file actions
71 lines (59 loc) · 2.3 KB
/
CompiledMessageHandler.cs
File metadata and controls
71 lines (59 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
using System;
using System.Xml.Xsl;
namespace XsltDebugger.DebugAdapter;
/// <summary>
/// Handles xsl:message events from XslCompiledTransform.
/// Provides message capture and debug variable parsing similar to SaxonMessageListener.
/// </summary>
internal sealed class CompiledMessageHandler
{
/// <summary>
/// Event handler for XsltMessageEncountered events.
/// Call this method by subscribing to XsltArgumentList.XsltMessageEncountered.
/// </summary>
public void OnMessageEncountered(object sender, XsltMessageEncounteredEventArgs e)
{
var messageText = e.Message ?? string.Empty;
var prefix = "[xsl:message]";
if (!string.IsNullOrEmpty(messageText))
{
XsltEngineManager.NotifyOutput($"{prefix} {messageText}");
// Parse debug messages in format: [DBG] variableName value
TryParseDebugMessage(messageText);
}
else
{
XsltEngineManager.NotifyOutput(prefix);
}
}
private static void TryParseDebugMessage(string messageText)
{
// Expected format: "[DBG] variableName value"
// or sequence format: "[DBG] variableName value" (from xsl:message select="('[DBG]', 'varName', string($var))")
if (string.IsNullOrWhiteSpace(messageText))
{
return;
}
var trimmed = messageText.Trim();
// Handle sequence format: "[DBG] variableName value"
if (trimmed.StartsWith("[DBG]", StringComparison.OrdinalIgnoreCase))
{
// Remove "[DBG]" prefix
var content = trimmed.Substring(5).Trim();
// Split into variable name and value
// Expected: "variableName value"
var parts = content.Split(new[] { ' ' }, 2, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length >= 1)
{
var varName = parts[0].Trim();
var varValue = parts.Length >= 2 ? parts[1].Trim() : string.Empty;
// Add to Variables dictionary
XsltEngineManager.Variables[varName] = varValue;
if (XsltEngineManager.IsLogEnabled)
{
XsltEngineManager.NotifyOutput($"[debug] Captured variable: ${varName} = {varValue}");
}
}
}
}
}