XML/Output: Difference between revisions

Added solution for Action!
(Added solution for Action!)
Line 198:
.include "../includeARM64.inc"
</lang>
 
=={{header|Action!}}==
<lang Action!>DEFINE PTR="CARD"
DEFINE CHARACTER_SIZE="4"
TYPE Character=[PTR name,remark]
 
PTR FUNC GetCharacterPointer(BYTE ARRAY d INT index)
RETURN (d+index*CHARACTER_SIZE)
 
PROC SetCharacter(BYTE ARRAY d INT index CHAR ARRAY n,r)
Character POINTER ch
 
ch=GetCharacterPointer(d,index)
ch.name=n
ch.remark=r
RETURN
 
PROC PrintEscaped(CHAR ARRAY s)
INT i
CHAR c
 
FOR i=1 TO s(0)
DO
c=s(i)
IF c='< THEN
Print("&lt;")
ELSEIF c='> THEN
Print("&gt;")
ELSEIF c='& THEN
Print("&amp;")
ELSE
Put(c)
FI
OD
RETURN
 
PROC OutputNode(CHAR ARRAY node,tagName,tagValue BYTE closing)
Put('<)
IF closing THEN Put('/) FI
Print(node)
IF tagName(0)>0 THEN
PrintF(" %S=""",tagName)
PrintEscaped(tagValue) Put('")
FI
Put('>)
RETURN
 
PROC OutputCharacter(Character POINTER ch)
CHAR ARRAY node="Character"
 
OutputNode(node,"name",ch.name,0)
PrintEscaped(ch.remark)
OutputNode(node,"","",1)
RETURN
 
PROC OutputCharacters(BYTE ARRAY d INT count)
CHAR ARRAY node="CharacterRemarks"
Character POINTER ch
INT i
 
OutputNode(node,"","",0) PutE()
FOR i=0 TO count-1
DO
ch=GetCharacterPointer(d,i)
OutputCharacter(ch) PutE()
OD
OutputNode(node,"","",1) PutE()
RETURN
 
PROC Main()
BYTE count=[3]
BYTE ARRAY d(12)
 
SetCharacter(d,0,"April","Bubbly: I'm > Tam and <= Emily")
SetCharacter(d,1,"Tam O'Shanter","Burns: ""When chapman billies leave the street ...""")
SetCharacter(d,2,"Emily","Short & shrift")
 
OutputCharacters(d,count)
RETURN</lang>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/XML_Output.png Screenshot from Atari 8-bit computer]
<pre>
<CharacterRemarks>
<Character name="April">Bubbly: I'm &gt; Tam and &lt;= Emily</Character>
<Character name="Tam O'Shanter">Burns:"When chapman billies leave the street ..."</Character>
<Character name="Emily">Short &amp; shrift</Character>
</CharacterRemarks>
</pre>
 
=={{header|Ada}}==
Anonymous user