\usemodule[scite]
\setupxml
 [entities=yes]


\startluacode

function warn( ... )
  texio.write_nl("-----> " .. string.format(...))
end

local function mpLabelString( xmlLabelString)
  -- Returns a string where each " is replaced by a METAPOST compatible result, except for outer double quotes"
  rep = {
      [1] = { "\"", "\"&ditto&\""   },
      -- DOESN'T WORK: [2] = { "\\", "\\\\" },
  }
  local tmpString = string.formatters( "%!tex!", xmlLabelString)
  warn( "STRING.FORMAT XML \"%s\"", xmlLabelString)
  warn( "STRING.FORMAT TeX-ed \"%s\"", tmpString)
  warn( "STRING.FORMAT Replaced \"%s\"", lpeg.replacer(rep):match(tmpString))
  return lpeg.replacer(rep):match(tmpString)
end

function warnAndConTeXt( ...)
  warn( ...)
  context( ...)
end

function moduledata.test( filename)
  local labelString
  context( "The string to typeset is:\\par\\type-{Label} \"a\" [Text]!-")
  context( "\\par The attempts are:")
  context( "\\par1. \\type-Label Text-")
  context( "\\par2. \\type-Label [Text]!-")
  context( "\\par3. \\type-Label \"a\" [Text]!-")
  context( "\\par4. \\type-{Label} [Text]!-")
  context( "\\par5. \\type-{Label} \"a\" [Text]!-")
  context.startMPpage { instance = "doublefun" }
  context( "picture pic;")
  labelString = "1. Label Text OK"
  warnAndConTeXt( "pic := Foo( 0, 0, 150, 50, \"%s\");", mpLabelString( labelString))
  labelString = "2. Label [Text]! OK"
  warnAndConTeXt( "pic := Foo( 0, -75, 150, 50, \"%s\");", mpLabelString( labelString))
  labelString = "3. Label \"a\" [Text]! OK"
  warnAndConTeXt( "pic := Foo( 0, -150, 150, 50, \"%s\");", mpLabelString( labelString))
  labelString = "4. {Label} [Text]! MISSING curly braces"
  warnAndConTeXt( "pic := Foo( 0, -225, 150, 50, \"%s\");", mpLabelString( labelString))
  labelString = "5. {Label} \"a\" [Text]! MISSING curly braces"
  warnAndConTeXt( "pic := Foo( 0, -300, 150, 50, \"%s\");", mpLabelString( labelString))
  context( "drawdot (0,0) withpen pencircle scaled 4 withcolor red;")
  context.stopMPpage()
end
\stopluacode

\usemodule[article-basic]
%\enabletrackers[metapost.tracingall,metapost.lua,metapost.runs,metapost.textexts,metapost.scrintersectionPoints,metapost.runs,metapost.graphics,metapost.terminal]

\starttext

\definefontfamily[mainface][rm][Optima]
\setupbodyfont[mainface,10pt]

\startMPinclusions[+]{doublefun}

\stopMPinclusions

\startMPdefinitions{doublefun}
vardef makeTeXLabel( expr w, h, name) =
  show "NAME makeTeXLabel:", name;
  save p; picture p ;
  save s; string s;
  s := "\framed{" & name & "}"; % Curly braces will be missing. I need this to work.
  % s := "\type-" & name & "-"; % Curly braces are displayed, but this must become a vbox in the end, so can't use it
  show "SCAN:", s;
  p := textext( s);
  p
enddef;

vardef Foo( expr xpos, ypos, width, height, str) =
  show "NAME Foo:", str; % Backslashes are already gone here
  save pic; picture pic;
  pic := makeTeXLabel( width, height, str) shifted (xpos, ypos);
  draw pic;
  pic
enddef;

\stopMPdefinitions

\ctxlua{moduledata.test("My ArchiMate Model Export BES.xml")}
\typefile[option=TEX]{test11.tex}

\stoptext
