Thanks for the feedback amadmonk, I appreciate it 
You actually gave me an idea with the lua thing, which is that executing lua directly from a node could be kinda usefull... As for the complaints about XAML, i think they were directed at my silly idea of doing stuff similar to the codeproject article and implement something like this:
Code:
<Main xmlns="clr-namespace:MarkupScript;assembly=MarkupScript">
<!-- This little script shows some basic usage -->
<Main.Variables>
<Variables>
<!-- Define some variables with and without default values -->
<Variable Name="UserInput"/>
<Variable Name="RandomNumber" Value="{Random 9}"/>
<Variable Name="InputPrompt" Value="Enter a number:"/>
<Variable Name="NumberOfGuesses" Value="0"/>
<!-- Define some expressions to show what they are usefull for. -->
<Expression Name="TooSmall" Value="{LessThan Left={Get UserInput}, Right={Get RandomNumber}}"/>
<Expression Name="Match" Value="{Equal Left={Get UserInput}, Right={Get RandomNumber}}"/>
</Variables>
</Main.Variables>
<!-- Define a simple function to get the users input since this is used twice -->
<Main.Functions>
<Functions>
<Function Name="GetInput">
<!-- Set the value of the UserInput variable by calling Input expression -->
<Set Variable="UserInput" Value="{Input Prompt={Get InputPrompt}}"/>
<Increment Variable="{Ref NumberOfGuesses}"/>
</Function>
</Functions>
</Main.Functions>
<!-- Output some text to the user -->
<Echo Text="I drew a number in the range of 0-9. Try to guess it!"/>
<Call Function="GetInput"/>
<!-- Loop while the user input does not match the random number. Match is a boolean expression (s.a.) -->
<While Condition="{Not Value={Get Match}}">
<!-- If we get here the number does not match. Output some text to the user -->
<Write Value="The number is too "/>
<Write Value="{Choice Condition={Get TooSmall}, Match=small, Else=large}"/>
<WriteLine Value=" Try it again!"/>
<Call Function="GetInput"/>
</While>
<WriteLine Value="Congratulations. You've got it!"/>
<Write Value="You did it with "/>
<Write Value="{Get NumberOfGuesses}"/>
<WriteLine Value=" guesses."/>
<Pause/>
</Main>
which i later edited out because it honestly was kinda stupid...
I don't think it's possible todo "inter-document references" without writing a class like this:
Code:
public class LoadSubTree:Contracts.ISingleChildNode
{
public LoadSubTree(string path)
{
_child = Root.LoadFromFile(path);
}
#region Implementation of INode
public bool Evaluate()
{
return Child.Evaluate();
}
public string Name { get; set; }
private string _type;
public string Type
{
get
{
if (string.IsNullOrEmpty(_type))
{
_type = GetType().Name;
}
return _type;
}
}
#endregion
#region Implementation of ISingleChildNode
private INode _child;
public INode Child
{
get { return _child; }
set { throw new InvalidOperationException("Child is loaded from file, DO NOT SET in XAML!"); }
}
#endregion
[ConstructorArgument("path")]
public string Path { get; set; }
}
And yes writing a designer for this should be fairly simple, I don't know with integrating it directly with the visual studio designer or blend though, It's most likely possible but could potentially lead to a lot of headaches, especially considering how bad the VS wpf designer is