string : WOString {
  value = value;
  escapeHTML = escapeHTML;
  valueWhenEmpty = valueWhenEmpty;
}
stringWithFormatter : WOString {
  value = value;
  formatter = ^formatter;
  escapeHTML = escapeHTML;
  valueWhenEmpty = valueWhenEmpty;
}
stringWithNumberformat : WOString {
  value = value;
  escapeHTML = escapeHTML;
  numberformat = ^numberformat;
  valueWhenEmpty = valueWhenEmpty;
}
stringWithDateformat : WOString {
  value = value;
  escapeHTML = escapeHTML;
  dateformat = ^dateformat;
  valueWhenEmpty = valueWhenEmpty;
}

hasDateformat : WOConditional {
	condition = ^dateformat;
}
hasNumberformat : WOConditional {
	condition = ^numberformat;
}
hasFormatter : WOConditional {
	condition = ^formatter;
}
hasNotNumberformat : WOConditional {
	condition = hasFormatter;
	negate = true;
}