Text between: Difference between revisions

m
→‎{{header|Phix}}: added syntax colouring the hard way
m (→‎{{header|REXX}}: added a comment.)
m (→‎{{header|Phix}}: added syntax colouring the hard way)
Line 1,850:
 
=={{header|Phix}}==
<!--<lang Phix>-->
<lang Phix>function text_between(string text, start_delimiter, end_delimiter)
<span style="color: #008080;">function</span> <span style="color: #000000;">text_between</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">text</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">start_delimiter</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">end_delimiter</span><span style="color: #0000FF;">)</span>
if start_delimiter!="start" then
<span style="color: #008080;">if</span> <span style="color: #000000;">start_delimiter</span><span style="color: #0000FF;">!=</span><span style="color: #008000;">"start"</span> <span style="color: #008080;">then</span>
integer k = match(start_delimiter,text)
<span style="color: #004080;">integer</span> <span style="color: #000000;">k</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">match</span><span style="color: #0000FF;">(</span><span style="color: #000000;">start_delimiter</span><span style="color: #0000FF;">,</span><span style="color: #000000;">text</span><span style="color: #0000FF;">)</span>
if k=0 then return "" end if
<span style="color: #008080;">if</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span> <span style="color: #008080;">return</span> <span style="color: #008000;">""</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
text = text[k+length(start_delimiter)..$]
<span style="color: #000000;">text</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">text</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">+</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">start_delimiter</span><span style="color: #0000FF;">)..$]</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
if end_delimiter!="end" then
<span style="color: #008080;">if</span> <span style="color: #000000;">end_delimiter</span><span style="color: #0000FF;">!=</span><span style="color: #008000;">"end"</span> <span style="color: #008080;">then</span>
integer k = match(end_delimiter,text)
<span style="color: #004080;">integer</span> <span style="color: #000000;">k</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">match</span><span style="color: #0000FF;">(</span><span style="color: #000000;">end_delimiter</span><span style="color: #0000FF;">,</span><span style="color: #000000;">text</span><span style="color: #0000FF;">)</span>
if k!=0 then
<span style="color: #008080;">if</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
text = text[1..k-1]
<span style="color: #000000;">text</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">text</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">..</span><span style="color: #000000;">k</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
return text
<span style="color: #008080;">return</span> <span style="color: #000000;">text</span>
end function
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
 
constant tests = {
<span style="color: #008080;">constant</span> <span style="color: #000000;">tests</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span>
{"Hello Rosetta Code world","Hello "," world","Rosetta Code"},
<span style="color: #0000FF;">{</span><span style="color: #008000;">"Hello Rosetta Code world"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Hello "</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" world"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Rosetta Code"</span><span style="color: #0000FF;">},</span>
{"Hello Rosetta Code world","start"," world","Hello Rosetta Code"},
<span style="color: #0000FF;">{</span><span style="color: #008000;">"Hello Rosetta Code world"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"start"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" world"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Hello Rosetta Code"</span><span style="color: #0000FF;">},</span>
{"Hello Rosetta Code world","Hello ","end","Rosetta Code world"},
<span style="color: #0000FF;">{</span><span style="color: #008000;">"Hello Rosetta Code world"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Hello "</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"end"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Rosetta Code world"</span><span style="color: #0000FF;">},</span>
{"</div><div style=\"french\">bonjour</div>","<div style=\"french\">","</div>","bonjour"},
<span style="color: #0000FF;">{</span><span style="color: #008000;">"&lt;/div&gt;&lt;div style=\"french\"&gt;bonjour&lt;/div&gt;"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"&lt;div style=\"french\"&gt;"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"&lt;/div&gt;"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"bonjour"</span><span style="color: #0000FF;">},</span>
{"<text>Hello <span>Rosetta Code</span> world</text><table style=\"myTable\">","<text>","<table>",
<span style="color: #0000FF;">{</span><span style="color: #008000;">"&lt;text&gt;Hello &lt;span&gt;Rosetta Code&lt;/span&gt; world&lt;/text&gt;&lt;table style=\"myTable\"&gt;"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"&lt;text&gt;"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"&lt;table&gt;"</span><span style="color: #0000FF;">,</span>
"Hello <span>Rosetta Code</span> world</text><table style=\"myTable\">"},
<span style="color: #008000;">"Hello &lt;span&gt;Rosetta Code&lt;/span&gt; world&lt;/text&gt;&lt;table style=\"myTable\"&gt;"</span><span style="color: #0000FF;">},</span>
{"<table style=\"myTable\"><tr><td>hello world</td></tr></table>","<table>","</table>",""},
<span style="color: #0000FF;">{</span><span style="color: #008000;">"&lt;table style=\"myTable\"&gt;&lt;tr&gt;&lt;td&gt;hello world&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"&lt;table&gt;"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"&lt;/table&gt;"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">""</span><span style="color: #0000FF;">},</span>
{"The quick brown fox jumps over the lazy other fox","quick "," fox","brown"},
<span style="color: #0000FF;">{</span><span style="color: #008000;">"The quick brown fox jumps over the lazy other fox"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"quick "</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" fox"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"brown"</span><span style="color: #0000FF;">},</span>
{"One fish two fish red fish blue fish","fish "," red","two fish"},
<span style="color: #0000FF;">{</span><span style="color: #008000;">"One fish two fish red fish blue fish"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"fish "</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" red"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"two fish"</span><span style="color: #0000FF;">},</span>
{"FooBarBazFooBuxQuux","Foo","Foo","BarBaz"},
<span style="color: #0000FF;">{</span><span style="color: #008000;">"FooBarBazFooBuxQuux"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Foo"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Foo"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"BarBaz"</span><span style="color: #0000FF;">},</span>
{"Hello Rosetta Code world","start","end","Hello Rosetta Code world"}}
<span style="color: #0000FF;">{</span><span style="color: #008000;">"Hello Rosetta Code world"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"start"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"end"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Hello Rosetta Code world"</span><span style="color: #0000FF;">}}</span>
 
constant fmt = """
<span style="color: #008080;">constant</span> <span style="color: #000000;">fmt</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"""
Text: "%s"
Start delimiter Text: "%s"
End Start delimiter: "%s"
Output End delimiter: "%s"
Expect Output: "%s" ***ERROR***
Expect: "%s" ***ERROR***
 
"""
"""</span>
 
for i=1 to length(tests) do
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tests</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
string {text,start_delimiter,end_delimiter,expected} = tests[i],
<span style="color: #004080;">string</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">text</span><span style="color: #0000FF;">,</span><span style="color: #000000;">start_delimiter</span><span style="color: #0000FF;">,</span><span style="color: #000000;">end_delimiter</span><span style="color: #0000FF;">,</span><span style="color: #000000;">expected</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">tests</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">],</span>
actual = text_between(text,start_delimiter,end_delimiter)
<span style="color: #000000;">actual</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">text_between</span><span style="color: #0000FF;">(</span><span style="color: #000000;">text</span><span style="color: #0000FF;">,</span><span style="color: #000000;">start_delimiter</span><span style="color: #0000FF;">,</span><span style="color: #000000;">end_delimiter</span><span style="color: #0000FF;">)</span>
if actual!=expected then
<span style="color: #008080;">if</span> <span style="color: #000000;">actual</span><span style="color: #0000FF;">!=</span><span style="color: #000000;">expected</span> <span style="color: #008080;">then</span>
printf(1,fmt,{text,start_delimiter,end_delimiter,actual,expected})
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">fmt</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">text</span><span style="color: #0000FF;">,</span><span style="color: #000000;">start_delimiter</span><span style="color: #0000FF;">,</span><span style="color: #000000;">end_delimiter</span><span style="color: #0000FF;">,</span><span style="color: #000000;">actual</span><span style="color: #0000FF;">,</span><span style="color: #000000;">expected</span><span style="color: #0000FF;">})</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end for</lang>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
end for<!--</lang>-->
{{out}}
All tests pass, so no output.
7,830

edits