Rosetta Code/Fix code tags: Difference between revisions

m
→‎{{header|Wren}}: Changed to Wren S/H
m (→‎{{header|Java}}: Shorten lines in the list of languages)
m (→‎{{header|Wren}}: Changed to Wren S/H)
 
(38 intermediate revisions by 20 users not shown)
Line 1:
{{task|Text processing}}[[Category:Rosetta Code related]]
[[Category:Rosetta Code related]]
 
;; This task has been <em>revised</em> for the hosting change Rosetta Code has had in August 2022.
;; See the Python example for a new example to fit the revised task.
 
;Task:
Fix Rosetta Code deprecated code tags, with these rules:
<pre>
Change <lang %s> to <syntaxhighlight lang=%s>
Change </lang> to </syntaxhighlight>
Change <lang> to <syntaxhighlight lang=text>
</pre>
 
;Demonstrate the task on these examples:
<pre>Change <%s> to <lang %s>
<pre>
Change </%s> to </lang>
<lang AutoHotkey>; usage: > fixtags.ahk input.txt ouput.txt
Change <code %s> to <lang %s>
FileRead, text, %1%
Change </code> to </lang></pre>
langs = ada,awk,autohotkey,etc
slang = /lang
slang := "<" . slang . "/>"
Loop, Parse, langs, `,
{
tag1 = <%A_LoopField%>
tag2 = </%A_LoopField%>
text := RegExReplace(text, tag1, "<lang " . A_LoopField . ">")
text := RegExReplace(text, tag2, slang)
text := RegExReplace(text, "<code (.+?)>(.*?)</code>"
, "<lang $1>$2" . slang)
}
FileAppend, % text, %2%
</lang>
</pre>
<pre>
<lang perl>my @langs = qw(ada cpp-qt pascal lscript z80 visualprolog
html4strict cil objc asm progress teraterm hq9plus genero tsql
email pic16 tcl apt_sources io apache vhdl avisynth winbatch
vbnet ini scilab ocaml-brief sas actionscript3 qbasic perl bnf
cobol powershell php kixtart visualfoxpro mirc make javascript
cpp sdlbasic cadlisp php-brief rails verilog xml csharp
actionscript nsis bash typoscript freebasic dot applescript
haskell dos oracle8 cfdg glsl lotusscript mpasm latex sql klonec
ruby ocaml smarty python oracle11 caddcl robots groovy smalltalk
diff fortran cfm lua modula3 vb autoit java text scala
lotusformulas pixelbender reg _div whitespace providex asp css
lolcode lisp inno mysql plsql matlab oobas vim delphi xorg_conf
gml prolog bf per scheme mxml d basic4gl m68k gnuplot idl abap
intercal c_mac thinbasic java5 xpp boo klonecpp blitzbasic eiffel
povray c gettext);
 
my $text = join "", <STDIN>;
Usage:
my $slang="/lang";
for (@langs) {
$text =~ s|<$_>|<lang $_>|g;
$text =~ s|</$_>|<$slang>|g;
}
 
$text =~ s|<code (.+?)>(.*?)</code>|<lang $1>$2<$slang>|sg;
<pre>./convert.py < wikisource.txt > converted.txt</pre>
 
print $text;</lang>
</pre>
<pre>
<lang>HAI 1.3
 
I HAS A bottles ITZ 99 I HAS A plural ITZ "Z" I HAS A lyric ITZ "99 BOTTLZ OV BEER"
 
IM IN YR song
 
VISIBLE lyric " ON TEH WALL"
VISIBLE lyric
VISIBLE "TAEK 1 DOWN, PAZ IT AROUN"
bottles R DIFF OF bottles AN 1
NOT bottles, O RLY?
YA RLY, VISIBLE "NO MOAR BOTTLZ OV BEER ON TEH WALL", GTFO
OIC
BOTH SAEM bottles AN 1, O RLY?
YA RLY, plural R ""
OIC
lyric R SMOOSH bottles " BOTTL" plural " OV BEER" MKAY
VISIBLE lyric " ON TEH WALL:)"
IM OUTTA YR song
 
KTHXBYE</lang>
</pre>
<br><br>
 
=={{header|11l}}==
{{trans|Java}}
 
<syntaxhighlight lang="11l">V languages = [‘abap’, ‘actionscript’, ‘actionscript3’,
‘ada’, ‘apache’, ‘applescript’, ‘apt_sources’, ‘asm’, ‘asp’,
‘autoit’, ‘avisynth’, ‘bar’, ‘bash’, ‘basic4gl’, ‘bf’,
‘blitzbasic’, ‘bnf’, ‘boo’, ‘c’, ‘caddcl’, ‘cadlisp’, ‘cfdg’,
‘cfm’, ‘cil’, ‘c_mac’, ‘cobol’, ‘cpp’, ‘cpp-qt’, ‘csharp’, ‘css’,
‘d’, ‘delphi’, ‘diff’, ‘_div’, ‘dos’, ‘dot’, ‘eiffel’, ‘email’,
‘foo’, ‘fortran’, ‘freebasic’, ‘genero’, ‘gettext’, ‘glsl’, ‘gml’,
‘gnuplot’, ‘go’, ‘groovy’, ‘haskell’, ‘hq9plus’, ‘html4strict’,
‘idl’, ‘ini’, ‘inno’, ‘intercal’, ‘io’, ‘java’, ‘java5’,
‘javascript’, ‘kixtart’, ‘klonec’, ‘klonecpp’, ‘latex’, ‘lisp’,
‘lolcode’, ‘lotusformulas’, ‘lotusscript’, ‘lscript’, ‘lua’,
‘m68k’, ‘make’, ‘matlab’, ‘mirc’, ‘modula3’, ‘mpasm’, ‘mxml’,
‘mysql’, ‘nsis’, ‘objc’, ‘ocaml’, ‘ocaml-brief’, ‘oobas’,
‘oracle11’, ‘oracle8’, ‘pascal’, ‘per’, ‘perl’, ‘php’, ‘php-brief’,
‘pic16’, ‘pixelbender’, ‘plsql’, ‘povray’, ‘powershell’,
‘progress’, ‘prolog’, ‘providex’, ‘python’, ‘qbasic’, ‘rails’,
‘reg’, ‘robots’, ‘ruby’, ‘sas’, ‘scala’, ‘scheme’, ‘scilab’,
‘sdlbasic’, ‘smalltalk’, ‘smarty’, ‘sql’, ‘tcl’, ‘teraterm’,
‘text’, ‘thinbasic’, ‘tsql’, ‘typoscript’, ‘vb’, ‘vbnet’,
‘verilog’, ‘vhdl’, ‘vim’, ‘visualfoxpro’, ‘visualprolog’,
‘whitespace’, ‘winbatch’, ‘xml’, ‘xorg_conf’, ‘xpp’, ‘z80’]
 
V text =
‘Lorem ipsum <code foo>saepe audire</code> elaboraret ne quo, id equidem
atomorum inciderint usu. <foo>In sit inermis deleniti percipit</foo>,
ius ex tale civibus omittam. <barf>Vix ut doctus cetero invenire</barf>, his eu
altera electram. Tota adhuc altera te sea, <code bar>soluta appetere ut mel</bar>.
Quo quis graecis vivendo te, <baz>posse nullam lobortis ex usu</code>. Eam volumus perpetua
constituto id, mea an omittam fierent vituperatoribus.’
 
L(lang) languages
text = text.replace(‘<’lang‘>’, ‘<lang ’lang‘>’)
text = text.replace(‘</’lang‘>’, ‘</’""‘lang>’)
text = text.replace(‘<code ’lang‘>’, ‘<lang ’lang‘>’)
text = text.replace(‘</code>’, ‘</’""‘lang>’)
 
print(text)</syntaxhighlight>
 
{{out}}
<pre>
Lorem ipsum <lang foo>saepe audire</lang> elaboraret ne quo, id equidem
atomorum inciderint usu. <lang foo>In sit inermis deleniti percipit</lang>,
ius ex tale civibus omittam. <barf>Vix ut doctus cetero invenire</barf>, his eu
altera electram. Tota adhuc altera te sea, <lang bar>soluta appetere ut mel</lang>.
Quo quis graecis vivendo te, <baz>posse nullam lobortis ex usu</lang>. Eam volumus perpetua
constituto id, mea an omittam fierent vituperatoribus.
</pre>
 
=={{header|AutoHotkey}}==
<langsyntaxhighlight AutoHotkeylang="autohotkey">; usage: > fixtags.ahk input.txt ouput.txt
FileRead, text, %1%
langs = ada,awk,autohotkey,etc
Line 28 ⟶ 152:
}
FileAppend, % text, %2%
</syntaxhighlight>
</lang>
 
=={{header|D}}==
{{trans|Python}}
<langsyntaxhighlight lang="d">import std.stdio, std.regex, std.string, std.array;
import std.string: replace, split, format;
 
immutable langs = "_div abap actionscript actionscript3 ada apache
Line 72 ⟶ 195:
.fixTags
.writeln;
}</langsyntaxhighlight>
{{out}}
<pre>lorem ipsum <lang c>some c code</lang>dolor sit amet, <lang csharp>some csharp code</lang> consectetur adipisicing elit, <lang r> some r code </lang>sed do eiusmod tempor incididunt</pre>
=={{header|Delphi}}==
{{libheader| Winapi.Windows}}
{{libheader| System.SysUtils}}
{{libheader| System.Classes}}
{{libheader| System.RegularExpressions}}
{{Trans|Go}}
<syntaxhighlight lang="delphi">
program Fix_code_tags;
 
{$APPTYPE CONSOLE}
 
uses
Winapi.Windows,
System.SysUtils,
System.Classes,
System.RegularExpressions;
 
const
LANGS: array of string = ['abap', 'actionscript', 'actionscript3', 'ada',
'apache', 'applescript', 'apt_sources', 'asm', 'asp', 'autoit', 'avisynth',
'bash', 'basic4gl', 'bf', 'blitzbasic', 'bnf', 'boo', 'c', 'caddcl',
'cadlisp', 'cfdg', 'cfm', 'cil', 'c_mac', 'cobol', 'cpp', 'cpp-qt', 'csharp',
'css', 'd', 'delphi', 'diff', '_div', 'dos', 'dot', 'eiffel', 'email',
'fortran', 'freebasic', 'genero', 'gettext', 'glsl', 'gml', 'gnuplot', 'go',
'groovy', 'haskell', 'hq9plus', 'html4strict', 'idl', 'ini', 'inno',
'intercal', 'io', 'java', 'java5', 'javascript', 'kixtart', 'klonec',
'klonecpp', 'latex', 'lisp', 'lolcode', 'lotusformulas', 'lotusscript',
'lscript', 'lua', 'm68k', 'make', 'matlab', 'mirc', 'modula3', 'mpasm',
'mxml', 'mysql', 'nsis', 'objc', 'ocaml', 'ocaml-brief', 'oobas', 'oracle11',
'oracle8', 'pascal', 'per', 'perl', 'php', 'php-brief', 'pic16',
'pixelbender', 'plsql', 'povray', 'powershell', 'progress', 'prolog',
'providex', 'python', 'qbasic', 'rails', 'reg', 'robots', 'ruby', 'sas',
'scala', 'scheme', 'scilab', 'sdlbasic', 'smalltalk', 'smarty', 'sql', 'tcl',
'teraterm', 'text', 'thinbasic', 'tsql', 'typoscript', 'vb', 'vbnet',
'verilog', 'vhdl', 'vim', 'visualfoxpro', 'visualprolog', 'whitespace',
'winbatch', 'xml', 'xorg_conf', 'xpp', 'z80'];
 
procedure repl(const Match: TMatch; var code: ansistring);
 
procedure replace(_new: ansistring);
begin
code := StringReplace(code, Match.Value, '<' + _new + '>', [rfReplaceAll]);
end;
 
begin
if Match.Value = '/code' then
begin
replace('/lang');
exit;
end;
 
if Match.Value = '</code>' then
begin
replace('/lang');
exit;
end;
 
var mid := Lowercase(Trim(copy(Match.Value, 2, length(Match.Value) - 2)));
 
for var lg in LANGS do
begin
if mid = lg then
begin
replace(format('lang %s', [lg]));
exit;
end;
 
if mid[1] = '/' then
begin
replace('/lang');
exit;
end;
 
if (pos('code', mid) = 1) and (copy(mid, 6, length(mid) - 2) = lg) then
begin
replace(format('lang %s', [lg]));
exit;
end;
end;
end;
 
function Lang(input: ansistring): ansistring;
var
reg: Tregex;
match: TMatch;
begin
reg := TRegex.Create('<[^>]+>');
Result := input;
for match in reg.Matches(input) do
Repl(match, Result);
end;
 
function ReadAll: Ansistring;
var
Buffer: array[0..1000] of byte;
StdIn: TStream;
Count: Integer;
buf: Ansistring;
begin
StdIn := THandleStream.Create(GetStdHandle(STD_INPUT_HANDLE));
Result := '';
while True do
begin
Count := StdIn.Read(Buffer, 1000);
if Count = 0 then
Break;
SetLength(buf, Count);
CopyMemory(@buf[1], @Buffer[0], Count);
Result := Result + buf;
end;
StdIn.Free;
end;
 
procedure Fix();
var
input, output: ansistring;
begin
input := ReadAll;
output := Lang(input);
writeln(output);
end;
 
begin
Fix;
end.</syntaxhighlight>
 
=={{header|Erlang}}==
Commented away are 3 lines that would create a dict of the existing languages on Rosetta Code. Since the examples have 3 imaginary code tags, I replaced that code this way.
<syntaxhighlight lang="erlang">
<lang Erlang>
#! /usr/bin/env escript
-module( fix_code_tags ).
Line 117 ⟶ 365:
loop( eof, Acc ) -> lists:reverse( Acc );
loop( Line, Acc ) -> loop( io:get_line(""), [Line | Acc] ).
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 138 ⟶ 386:
=={{header|F_Sharp|F#}}==
While the ubiquitous loop over languages approach can be used, here we capture all tag variations to fix in one dotNet regex.
<langsyntaxhighlight lang="fsharp">open System
open System.Text.RegularExpressions
 
Line 167 ⟶ 415:
 
printfn "%s" (regexForOldLangSyntax.Replace(Console.In.ReadToEnd(), replaceEvaluator))
0</langsyntaxhighlight>
Output
<pre>&gt;Rosetta.exe
Line 177 ⟶ 425:
 
=={{header|Go}}==
<langsyntaxhighlight lang="go">package main
 
import "fmt"
Line 264 ⟶ 512:
 
return in
}</langsyntaxhighlight>
 
=={{header|J}}==
'''Solution:'''
<langsyntaxhighlight lang="j">require 'printf strings files'
 
langs=. <;._1 LF -.~ noun define NB. replace with real lang strings
foo bar
baz
)</langsyntaxhighlight>
<pre>patterns=. noun define
<%s>|<lang %s>|
Line 280 ⟶ 528:
</code>|</lang>|
)</pre>
<langsyntaxhighlight lang="j">fixCodeTags=: rplc&(, <;._2;._2 &> patterns vbsprintf _5]\ 5#langs)</langsyntaxhighlight>
 
'''Example Usage:'''
Line 300 ⟶ 548:
constituto id, mea an omittam fierent vituperatoribus.</pre>
Reading/writing file:
<langsyntaxhighlight lang="j"> 'converted.txt' fwrite~ fixCodeTags fread 'wikisource.txt'</langsyntaxhighlight>
 
=={{header|Java}}==
<langsyntaxhighlight lang="java">import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
Line 351 ⟶ 599:
String lang=languages[i];
line=line.replaceAll("<"+lang+">", "<lang "+lang+">");
line=line.replaceAll("</"+lang+">", "</"+lang+"lang>");
line=line.replaceAll("<code "+lang+">", "<lang "+lang+">");
line=line.replaceAll("</code>", "</"+"lang>");
Line 370 ⟶ 618:
}
}
</syntaxhighlight>
</lang>
 
Example:
Line 385 ⟶ 633:
user@ubuntu:~$ cat fix.out
Lorem ipsum <lang foo>saepe audire</lang> elaboraret ne quo, id equidem
atomorum inciderint usu. <lang foo>In sit inermis deleniti percipit</foolang>,
ius ex tale civibus omittam. <barf>Vix ut doctus cetero invenire</barf>, his eu
altera electram. Tota adhuc altera te sea, <lang bar>soluta appetere ut mel</barlang>.
Quo quis graecis vivendo te, <baz>posse nullam lobortis ex usu</lang>. Eam volumus perpetua
constituto id, mea an omittam fierent vituperatoribus.
Line 395 ⟶ 643:
=={{header|JavaScript}}==
{{works with|SpiderMonkey}}
<langsyntaxhighlight lang="javascript">var langs = ['foo', 'bar', 'baz']; // real list of langs goes here
var end_tag = '</'+'lang>';
 
Line 405 ⟶ 653:
.replace(new RegExp('</' + langs[i] + '>', 'gi'), end_tag);
print(line);
}</langsyntaxhighlight>
 
=={{header|Julia}}==
{{works with|Julia|0.6}}
{{trans|Python}}
 
<syntaxhighlight lang="julia">function fixtags(text::AbstractString)
langs = ["ada", "cpp-qt", "pascal", "lscript", "z80", "visualprolog",
"html4strict", "cil", "objc", "asm", "progress", "teraterm", "hq9plus",
"genero", "tsql", "email", "pic16", "tcl", "apt_sources", "io", "apache",
"vhdl", "avisynth", "winbatch", "vbnet", "ini", "scilab", "ocaml-brief",
"sas", "actionscript3", "qbasic", "perl", "bnf", "cobol", "powershell",
"php", "kixtart", "visualfoxpro", "mirc", "make", "javascript", "cpp",
"sdlbasic", "cadlisp", "php-brief", "rails", "verilog", "xml", "csharp",
"actionscript", "nsis", "bash", "typoscript", "freebasic", "dot",
"applescript", "haskell", "dos", "oracle8", "cfdg", "glsl", "lotusscript",
"mpasm", "latex", "sql", "klonec", "ruby", "ocaml", "smarty", "python",
"oracle11", "caddcl", "robots", "groovy", "smalltalk", "diff", "fortran",
"cfm", "lua", "modula3", "vb", "autoit", "java", "text", "scala",
"lotusformulas", "pixelbender", "reg", "_div", "whitespace", "providex",
"asp", "css", "lolcode", "lisp", "inno", "mysql", "plsql", "matlab",
"oobas", "vim", "delphi", "xorg_conf", "gml", "prolog", "bf", "per",
"scheme", "mxml", "d", "basic4gl", "m68k", "gnuplot", "idl", "abap",
"intercal", "c_mac", "thinbasic", "java5", "xpp", "boo", "klonecpp",
"blitzbasic", "eiffel", "povray", "c", "gettext"]
 
slang = "/lang"
code = "code"
 
for l in langs
text = replace(text, "<$l>","<lang $l>")
text = replace(text, "</$l>", "<$slang>")
end
 
text = replace(text, Regex("(?s)<$code (.+?)>(.*?)</$code>"), "<lang \\1>\\2<$slang>")
end
 
const txt = readstring(ARGS[1])
println(fixtags(txt))</syntaxhighlight>
 
=={{header|Lua}}==
<langsyntaxhighlight lang="lua">
--thanks, random python guy
langs = {'ada', 'cpp-qt', 'pascal', 'lscript', 'z80', 'visualprolog',
Line 438 ⟶ 724:
print(line)
end
</syntaxhighlight>
</lang>
 
=={{header|Maple}}==
<syntaxhighlight lang="maple">#Used <#/lang> to desensitize wiki
txt := FileTools[Text][ReadFile]("C:/Users/username/Desktop/text.txt"):
#langs should be a real list of programming languages
langs := ['foo', 'bar', 'baz', 'barf'];
for lan in langs do
txt := StringTools:-SubstituteAll(txt, cat("<", lan, ">"), cat ("<lang ", lan, ">")):
txt := StringTools:-SubstituteAll(txt, cat("</", lan, ">"), "<#/lang>"):
txt := StringTools:-SubstituteAll(txt, cat("<code ", lan, ">"), cat ("<lang ", lan, ">")):
txt := StringTools:-SubstituteAll(txt, "</code>", "<#/lang>"):
end do;
print(txt);</syntaxhighlight>
{{Out|Output}}
<pre>
"Lorem ipsum <lang foo>saepe audire</lang> elaboraret ne quo, id equidem
atomorum inciderint usu. <lang foo>In sit inermis deleniti percipit</lang>,
ius ex tale civibus omittam. <lang barf>Vix ut doctus cetero invenire</lang>, his eu
altera electram. Tota adhuc altera te sea, <lang bar>soluta appetere ut mel</lang>.
Quo quis graecis vivendo te, <lang baz>posse nullam lobortis ex usu</lang>. Eam volumus perpetua
constituto id, mea an omittam fierent vituperatoribus. "
</pre>
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<presyntaxhighlight lang="mathematica">StringReplace[Import["wikisource.txt"],
{"</"~~Shortest[__]~~">"->"</lang>",
("<code "|"<")~~Shortest[x__]~~">"->"<lang "~~ x~~">"}
]>>"converted.txt"</syntaxhighlight>
{{out}}
 
<pre>Lorem ipsum<lang foo>saepe audire</lang>elaboraret ne quo,id equidem
->conversion of sample text
Lorem ipsum<lang foo>saepe audire</lang>elaboraret ne quo,id equidem
atomorum inciderint usu. <lang foo>In sit inermis deleniti percipit</lang>,
ius ex tale civibus omittam. <lang barf>Vix ut doctus cetero invenire</lang>,
his eualtera electram.Tota adhuc altera te sea, <lang bar>soluta appetere ut mel</lang>.
Quo quis graecis vivendo te, <lang baz>posse nullam lobortis ex usu</lang>.
Eam volumus perpetua constituto id,mea an omittam fierent vituperatoribus</pre>
 
</pre>
=={{header|Nim}}==
{{trans|Python}}
<syntaxhighlight lang="nim">import re, strutils
 
const
Langs = ["ada", "cpp-qt", "pascal", "lscript", "z80", "visualprolog",
"html4strict", "cil", "objc", "asm", "progress", "teraterm", "hq9plus",
"genero", "tsql", "email", "pic16", "tcl", "apt_sources", "io", "apache",
"vhdl", "avisynth", "winbatch", "vbnet", "ini", "scilab", "ocaml-brief",
"sas", "actionscript3", "qbasic", "perl", "bnf", "cobol", "powershell",
"php", "kixtart", "visualfoxpro", "mirc", "make", "javascript", "cpp",
"sdlbasic", "cadlisp", "php-brief", "rails", "verilog", "xml", "csharp",
"actionscript", "nsis", "bash", "typoscript", "freebasic", "dot",
"applescript", "haskell", "dos", "oracle8", "cfdg", "glsl", "lotusscript",
"mpasm", "latex", "sql", "klonec", "ruby", "ocaml", "smarty", "python",
"oracle11", "caddcl", "robots", "groovy", "smalltalk", "diff", "fortran",
"cfm", "lua", "modula3", "vb", "autoit", "java", "text", "scala",
"lotusformulas", "pixelbender", "reg", "_div", "whitespace", "providex",
"asp", "css", "lolcode", "lisp", "inno", "mysql", "plsql", "matlab",
"oobas", "vim", "delphi", "xorg_conf", "gml", "prolog", "bf", "per",
"scheme", "mxml", "d", "basic4gl", "m68k", "gnuplot", "idl", "abap",
"intercal", "c_mac", "thinbasic", "java5", "xpp", "boo", "klonecpp",
"blitzbasic", "eiffel", "povray", "c", "gettext"]
 
var text = stdin.readAll()
 
for lang in Langs:
text = text.replace("<$#>" % lang, "<lang $#>" % lang)
text = text.replace("</$#>" % lang, "</lang>")
 
text = text.replacef(re"(?s)<code (.+?)>(.*?)</code>", r"<lang $1>$2</lang>")
 
stdout.write text</syntaxhighlight>
 
=={{header|OCaml}}==
<langsyntaxhighlight lang="ocaml">#load "str.cma"
 
let langs =
Line 464 ⟶ 804:
fortran fsharp haskell haxe j java javascript lisaac lisp logo lua m4 \
mathematica maxscript modula3 moo objc ocaml octave oz pascal perl \
perl6raku php pike pop11 powershell prolog python qbasic r rebol ruby \
scala scheme slate smalltalk tcl ti89b vbnet vedit"
 
Line 514 ⟶ 854:
List.fold_left (fun str lang ->
(repl4 lang (repl3 lang (repl2 lang (repl1 lang str))))
) (read_in stdin) langs)</langsyntaxhighlight>
 
(in the code the strings <nowiki></lang></nowiki> have been split in order to not confuse the wiki)
 
this line of code:
<langsyntaxhighlight lang="ocaml"> (repl4 lang (repl3 lang (repl2 lang (repl1 lang str))))</langsyntaxhighlight>
 
could also be written like this:
<langsyntaxhighlight lang="ocaml"> List.fold_right (fun repl -> repl lang) [repl1; repl2; repl3; repl4] str</langsyntaxhighlight>
 
 
Line 528 ⟶ 868:
 
=={{header|Perl}}==
<langsyntaxhighlight lang="perl">my @langs = qw(ada cpp-qt pascal lscript z80 visualprolog
html4strict cil objc asm progress teraterm hq9plus genero tsql
email pic16 tcl apt_sources io apache vhdl avisynth winbatch
Line 553 ⟶ 893:
$text =~ s|<code (.+?)>(.*?)</code>|<lang $1>$2<$slang>|sg;
 
print $text;</langsyntaxhighlight>
=={{header|Perl 6}}==
<lang perl6>my @langs = <
abap actionscript actionscript3 ada apache applescript apt_sources
asm asp autoit avisynth bash basic4gl bf blitzbasic bnf boo c caddcl
cadlisp cfdg cfm cil c_mac cobol cpp cpp-qt csharp css d delphi
diff _div dos dot eiffel email fortran freebasic genero gettext
glsl gml gnuplot groovy haskell hq9plus html4strict idl ini inno
intercal io java java5 javascript kixtart klonec klonecpp latex lisp
lolcode lotusformulas lotusscript lscript lua m68k make matlab mirc
modula3 mpasm mxml mysql nsis objc ocaml ocaml-brief oobas oracle11
oracle8 pascal per perl php php-brief pic16 pixelbender plsql povray
powershell progress prolog providex python qbasic rails reg robots
ruby sas scala scheme scilab sdlbasic smalltalk smarty sql tcl teraterm
text thinbasic tsql typoscript vb vbnet verilog vhdl vim visualfoxpro
visualprolog whitespace winbatch xml xorg_conf xpp z80
>;
 
=={{header|Phix}}==
$_ = slurp;
{{trans|D}}
 
<!--<syntaxhighlight lang="phix">(phixonline)-->
for @langs -> $l {
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
s:g [ '<' $l '>' ] = "<lang $l>";
<span style="color: #008080;">constant</span> <span style="color: #000000;">ltext</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">`_div abap actionscript actionscript3 ada apache
s:g [ '</' $l '>' ] = '</' ~ 'lang>';
applescript apt_sources asm asp autoit avisynth bash basic4gl bf
}
blitzbasic bnf boo c c_mac caddcl cadlisp cfdg cfm cil cobol cpp
 
cpp-qt csharp css d delphi diff dos dot eiffel email fortran
s:g [ '<code '(.+?) '>' (.*?) '</code>' ] = "<lang $0>{$1}</"~"lang>";
freebasic genero gettext glsl gml gnuplot groovy haskell hq9plus
 
html4strict idl ini inno intercal io java java5 javascript kixtart
.say;</lang>
klonec klonecpp latex lisp lolcode lotusformulas lotusscript
lscript lua m68k make matlab mirc modula3 mpasm mxml mysql nsis
objc ocaml ocaml-brief oobas oracle11 oracle8 pascal per perl php
php-brief pic16 pixelbender plsql povray powershell progress
prolog providex python qbasic r rails reg robots ruby sas scala
scheme scilab sdlbasic smalltalk smarty sql tcl teraterm text
thinbasic tsql typoscript vb vbnet verilog vhdl vim visualfoxpro
visualprolog whitespace winbatch xml xorg_conf xpp z80`</span><span style="color: #0000FF;">,</span>
<span style="color: #000000;">langs</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">split</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">substitute</span><span style="color: #0000FF;">(</span><span style="color: #000000;">ltext</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">" "</span><span style="color: #0000FF;">))</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">fix_tags</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: #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;">langs</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
<span style="color: #004080;">string</span> <span style="color: #000000;">lang</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">langs</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">],</span>
<span style="color: #000000;">openl</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"&lt;%s&gt;"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">lang</span><span style="color: #0000FF;">}),</span>
<span style="color: #000000;">openc</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"&lt;code %s&gt;"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">lang</span><span style="color: #0000FF;">}),</span>
<span style="color: #000000;">lopen</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"&lt;lang %s&gt;"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">lang</span><span style="color: #0000FF;">}),</span>
<span style="color: #000000;">closl</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"&lt;/%s&gt;"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">lang</span><span style="color: #0000FF;">}),</span>
<span style="color: #000000;">closc</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"&lt;/%s&gt;"</span><span style="color: #0000FF;">,{</span><span style="color: #008000;">"code"</span><span style="color: #0000FF;">}),</span>
<span style="color: #000000;">lclos</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"&lt;/%s&gt;"</span><span style="color: #0000FF;">,{</span><span style="color: #008000;">"lang"</span><span style="color: #0000FF;">})</span>
<span style="color: #000000;">text</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">substitute_all</span><span style="color: #0000FF;">(</span><span style="color: #000000;">text</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">openl</span><span style="color: #0000FF;">,</span><span style="color: #000000;">openc</span><span style="color: #0000FF;">,</span><span style="color: #000000;">closl</span><span style="color: #0000FF;">,</span><span style="color: #000000;">closc</span><span style="color: #0000FF;">},</span>
<span style="color: #0000FF;">{</span><span style="color: #000000;">lopen</span><span style="color: #0000FF;">,</span><span style="color: #000000;">lopen</span><span style="color: #0000FF;">,</span><span style="color: #000000;">lclos</span><span style="color: #0000FF;">,</span><span style="color: #000000;">lclos</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #008080;">return</span> <span style="color: #000000;">text</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">test</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"""
lorem ipsum &lt;c&gt;some c code&lt;/c&gt;dolor sit amet, &lt;csharp&gt;some
csharp code&lt;/csharp&gt; consectetur adipisicing elit, &lt;code r&gt;
some r code &lt;/code&gt;sed do eiusmod tempor incididunt
"""</span>
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">fix_tags</span><span style="color: #0000FF;">(</span><span style="color: #000000;">test</span><span style="color: #0000FF;">))</span>
<!--</syntaxhighlight>-->
{{out}}
<pre>
lorem ipsum <lang c>some c code</lang>dolor sit amet, <lang csharp>some
csharp code</lang> consectetur adipisicing elit, <lang r>
some r code </lang>sed do eiusmod tempor incididunt
</pre>
 
=={{header|PicoLisp}}==
<langsyntaxhighlight PicoLisplang="lisp">#!/usr/bin/picolisp /usr/lib/picolisp/lib.l
 
(let Lang '("ada" "awk" "c" "forth" "prolog" "python" "z80")
Line 596 ⟶ 958:
(prin "</lang") )
(T (prin "<" S)) ) ) ) ) )
(bye)</langsyntaxhighlight>
 
=={{header|PureBasic}}==
<langsyntaxhighlight PureBasiclang="basic">If Not OpenConsole()
End
ElseIf CountProgramParameters() <> 2
Line 637 ⟶ 1,000:
CloseFile(1)
EndIf
EndIf</langsyntaxhighlight>
 
=={{header|Python}}==
 
<syntaxhighlight lang =python># coding: utf-8
""" Rosetta Code task rosettacode.org/wiki/Rosetta_Code/Fix_code_tags """
 
from re import syssub
import re
 
testtexts = [
langs = ['ada', 'cpp-qt', 'pascal', 'lscript', 'z80', 'visualprolog',
"""<lang AutoHotkey>; usage: > fixtags.ahk input.txt ouput.txt
'html4strict', 'cil', 'objc', 'asm', 'progress', 'teraterm', 'hq9plus',
FileRead, text, %1%
'genero', 'tsql', 'email', 'pic16', 'tcl', 'apt_sources', 'io', 'apache',
langs = ada,awk,autohotkey,etc
'vhdl', 'avisynth', 'winbatch', 'vbnet', 'ini', 'scilab', 'ocaml-brief',
slang = /lang
'sas', 'actionscript3', 'qbasic', 'perl', 'bnf', 'cobol', 'powershell',
slang := "<" . slang . "/>"
'php', 'kixtart', 'visualfoxpro', 'mirc', 'make', 'javascript', 'cpp',
Loop, Parse, langs, `,
'sdlbasic', 'cadlisp', 'php-brief', 'rails', 'verilog', 'xml', 'csharp',
{
'actionscript', 'nsis', 'bash', 'typoscript', 'freebasic', 'dot',
tag1 = <%A_LoopField%>
'applescript', 'haskell', 'dos', 'oracle8', 'cfdg', 'glsl', 'lotusscript',
tag2 = </%A_LoopField%>
'mpasm', 'latex', 'sql', 'klonec', 'ruby', 'ocaml', 'smarty', 'python',
text := RegExReplace(text, tag1, "<lang " . A_LoopField . ">")
'oracle11', 'caddcl', 'robots', 'groovy', 'smalltalk', 'diff', 'fortran',
text := RegExReplace(text, tag2, slang)
'cfm', 'lua', 'modula3', 'vb', 'autoit', 'java', 'text', 'scala',
text := RegExReplace(text, "<code (.+?)>(.*?)</code>"
'lotusformulas', 'pixelbender', 'reg', '_div', 'whitespace', 'providex',
, "<lang $1>$2" . slang)
'asp', 'css', 'lolcode', 'lisp', 'inno', 'mysql', 'plsql', 'matlab',
}
'oobas', 'vim', 'delphi', 'xorg_conf', 'gml', 'prolog', 'bf', 'per',
FileAppend, % text, %2%
'scheme', 'mxml', 'd', 'basic4gl', 'm68k', 'gnuplot', 'idl', 'abap',
</lang>""",
'intercal', 'c_mac', 'thinbasic', 'java5', 'xpp', 'boo', 'klonecpp',
"""<lang perl>my @langs = qw(ada cpp-qt pascal lscript z80 visualprolog
'blitzbasic', 'eiffel', 'povray', 'c', 'gettext']
html4strict cil objc asm progress teraterm hq9plus genero tsql
email pic16 tcl apt_sources io apache vhdl avisynth winbatch
vbnet ini scilab ocaml-brief sas actionscript3 qbasic perl bnf
cobol powershell php kixtart visualfoxpro mirc make javascript
cpp sdlbasic cadlisp php-brief rails verilog xml csharp
actionscript nsis bash typoscript freebasic dot applescript
haskell dos oracle8 cfdg glsl lotusscript mpasm latex sql klonec
ruby ocaml smarty python oracle11 caddcl robots groovy smalltalk
diff fortran cfm lua modula3 vb autoit java text scala
lotusformulas pixelbender reg _div whitespace providex asp css
lolcode lisp inno mysql plsql matlab oobas vim delphi xorg_conf
gml prolog bf per scheme mxml d basic4gl m68k gnuplot idl abap
intercal c_mac thinbasic java5 xpp boo klonecpp blitzbasic eiffel
povray c gettext);
 
my $text = join "", <STDIN>;
slang = '/lang'
my $slang="/lang";
code='code'
for (@langs) {
$text =~ s|<$_>|<lang $_>|g;
$text =~ s|</$_>|<$slang>|g;
}
 
$text =~ s|<code (.+?)>(.*?)</code>|<lang $1>$2<$slang>|sg;
text = sys.stdin.read()
 
print $text;</lang>""",
for i in langs:
text = text.replace("<%s>" % i,"<lang %s>"HAI % i)1.3
text = text.replace("</%s>" % i, "<%s>" % slang)
 
I HAS A bottles ITZ 99 I HAS A plural ITZ "Z" I HAS A lyric ITZ "99 BOTTLZ OV BEER"
text = re.sub("(?s)<%s (.+?)>(.*?)</%s>"%(code,code), r"<lang \1>\2<%s>" % slang, text)
 
IM IN YR song
sys.stdout.write(text)
 
</lang>
VISIBLE lyric " ON TEH WALL"
VISIBLE lyric
VISIBLE "TAEK 1 DOWN, PAZ IT AROUN"
bottles R DIFF OF bottles AN 1
NOT bottles, O RLY?
YA RLY, VISIBLE "NO MOAR BOTTLZ OV BEER ON TEH WALL", GTFO
OIC
BOTH SAEM bottles AN 1, O RLY?
YA RLY, plural R ""
OIC
lyric R SMOOSH bottles " BOTTL" plural " OV BEER" MKAY
VISIBLE lyric " ON TEH WALL:)"
IM OUTTA YR song
 
KTHXBYE</lang>
"""]
 
for txt in testtexts:
text2 = sub(r'<lang\s+\"?([\w\d\s]+)\"?\s?>', r'<syntaxhighlight lang=\1>', txt)
text2 = sub(r'<lang\s*>', '<syntaxhighlight lang=text>', text2)
text2 = sub(r'</lang\s*>', '</syntax'+'highlight>', text2)
print(txt, '\n=>\n', text2)
 
</syntaxhighlight>{{out}}
<pre>
<lang AutoHotkey>; usage: > fixtags.ahk input.txt ouput.txt
FileRead, text, %1%
langs = ada,awk,autohotkey,etc
slang = /lang
slang := "<" . slang . "/>"
Loop, Parse, langs, `,
{
tag1 = <%A_LoopField%>
tag2 = </%A_LoopField%>
text := RegExReplace(text, tag1, "<lang " . A_LoopField . ">")
text := RegExReplace(text, tag2, slang)
text := RegExReplace(text, "<code (.+?)>(.*?)</code>"
, "<lang $1>$2" . slang)
}
FileAppend, % text, %2%
</lang>
=>
<syntaxhighlight lang=AutoHotkey>; usage: > fixtags.ahk input.txt ouput.txt
FileRead, text, %1%
langs = ada,awk,autohotkey,etc
slang = /lang
slang := "<" . slang . "/>"
Loop, Parse, langs, `,
{
tag1 = <%A_LoopField%>
tag2 = </%A_LoopField%>
text := RegExReplace(text, tag1, "<lang " . A_LoopField . ">")
text := RegExReplace(text, tag2, slang)
text := RegExReplace(text, "<code (.+?)>(.*?)</code>"
, "<lang $1>$2" . slang)
}
FileAppend, % text, %2%
</syntaxhighlight>
<lang perl>my @langs = qw(ada cpp-qt pascal lscript z80 visualprolog
html4strict cil objc asm progress teraterm hq9plus genero tsql
email pic16 tcl apt_sources io apache vhdl avisynth winbatch
vbnet ini scilab ocaml-brief sas actionscript3 qbasic perl bnf
cobol powershell php kixtart visualfoxpro mirc make javascript
cpp sdlbasic cadlisp php-brief rails verilog xml csharp
actionscript nsis bash typoscript freebasic dot applescript
haskell dos oracle8 cfdg glsl lotusscript mpasm latex sql klonec
ruby ocaml smarty python oracle11 caddcl robots groovy smalltalk
diff fortran cfm lua modula3 vb autoit java text scala
lotusformulas pixelbender reg _div whitespace providex asp css
lolcode lisp inno mysql plsql matlab oobas vim delphi xorg_conf
gml prolog bf per scheme mxml d basic4gl m68k gnuplot idl abap
intercal c_mac thinbasic java5 xpp boo klonecpp blitzbasic eiffel
povray c gettext);
 
my $text = join "", <STDIN>;
my $slang="/lang";
for (@langs) {
$text =~ s|<$_>|<lang $_>|g;
$text =~ s|</$_>|<$slang>|g;
}
 
$text =~ s|<code (.+?)>(.*?)</code>|<lang $1>$2<$slang>|sg;
 
print $text;</lang>
=>
<syntaxhighlight lang="perl">my @langs = qw(ada cpp-qt pascal lscript z80 visualprolog
html4strict cil objc asm progress teraterm hq9plus genero tsql
email pic16 tcl apt_sources io apache vhdl avisynth winbatch
vbnet ini scilab ocaml-brief sas actionscript3 qbasic perl bnf
cobol powershell php kixtart visualfoxpro mirc make javascript
cpp sdlbasic cadlisp php-brief rails verilog xml csharp
actionscript nsis bash typoscript freebasic dot applescript
haskell dos oracle8 cfdg glsl lotusscript mpasm latex sql klonec
ruby ocaml smarty python oracle11 caddcl robots groovy smalltalk
diff fortran cfm lua modula3 vb autoit java text scala
lotusformulas pixelbender reg _div whitespace providex asp css
lolcode lisp inno mysql plsql matlab oobas vim delphi xorg_conf
gml prolog bf per scheme mxml d basic4gl m68k gnuplot idl abap
intercal c_mac thinbasic java5 xpp boo klonecpp blitzbasic eiffel
povray c gettext);
 
my $text = join "", <STDIN>;
my $slang="/lang";
for (@langs) {
$text =~ s|<$_>|<lang $_>|g;
$text =~ s|</$_>|<$slang>|g;
}
 
$text =~ s|<code (.+?)>(.*?)</code>|<lang $1>$2<$slang>|sg;
 
print $text;</syntaxhighlight>
<lang>HAI 1.3
 
I HAS A bottles ITZ 99 I HAS A plural ITZ "Z" I HAS A lyric ITZ "99 BOTTLZ OV BEER"
 
IM IN YR song
 
VISIBLE lyric " ON TEH WALL"
VISIBLE lyric
VISIBLE "TAEK 1 DOWN, PAZ IT AROUN"
bottles R DIFF OF bottles AN 1
NOT bottles, O RLY?
YA RLY, VISIBLE "NO MOAR BOTTLZ OV BEER ON TEH WALL", GTFO
OIC
BOTH SAEM bottles AN 1, O RLY?
YA RLY, plural R ""
OIC
lyric R SMOOSH bottles " BOTTL" plural " OV BEER" MKAY
VISIBLE lyric " ON TEH WALL:)"
IM OUTTA YR song
 
KTHXBYE</lang>
=>
<syntaxhighlight lang="text">HAI 1.3
 
I HAS A bottles ITZ 99 I HAS A plural ITZ "Z" I HAS A lyric ITZ "99 BOTTLZ OV BEER"
 
IM IN YR song
 
VISIBLE lyric " ON TEH WALL"
VISIBLE lyric
VISIBLE "TAEK 1 DOWN, PAZ IT AROUN"
bottles R DIFF OF bottles AN 1
NOT bottles, O RLY?
YA RLY, VISIBLE "NO MOAR BOTTLZ OV BEER ON TEH WALL", GTFO
OIC
BOTH SAEM bottles AN 1, O RLY?
YA RLY, plural R ""
OIC
lyric R SMOOSH bottles " BOTTL" plural " OV BEER" MKAY
VISIBLE lyric " ON TEH WALL:)"
IM OUTTA YR song
 
KTHXBYE</syntaxhighlight>
</pre>
 
=={{header|R}}==
Note that the instances of ##### are to stop the wiki getting confused. Please remove them before running the code.
<syntaxhighlight lang="r">
<lang R>
fixtags <- function(page)
{
Line 696 ⟶ 1,232:
consectetur adipisicing elit,<code r>some r code</code>sed do eiusmod tempor incididunt"
fixtags(page)
</syntaxhighlight>
</lang>
 
=={{header|Racket}}==
 
<langsyntaxhighlight lang="racket">
#lang racket
 
Line 721 ⟶ 1,257:
[else all]))
(loop)))
</syntaxhighlight>
</lang>
 
=={{header|REXXRaku}}==
(formerly Perl 6)
<lang rexx>/*REXX program fixes (changes) depreciated code tags with newer tags.*/
<syntaxhighlight lang="raku" line>my @langs = <
@ = '<' /*ensure RC doesn't get confused.*/
abap actionscript actionscript3 ada apache applescript apt_sources
old. = /*define a default value for OLD.*/
asm asp autoit avisynth bash basic4gl bf blitzbasic bnf boo c caddcl
old.1 = @'%s>' ; new.1 = @'lang %s>'
cadlisp cfdg cfm cil c_mac cobol cpp cpp-qt csharp css d delphi
old.2 = @'/%s>' ; new.2 = @'/lang>'
diff _div dos dot eiffel email fortran freebasic genero gettext
old.3 = @'code %s>' ; new.3 = @'lang %s>'
glsl gml gnuplot groovy haskell hq9plus html4strict idl ini inno
old.4 = @'/code>' ; new.4 = @'/lang>'
intercal io java java5 javascript kixtart klonec klonecpp latex lisp
lolcode lotusformulas lotusscript lscript lua m68k make matlab mirc
modula3 mpasm mxml mysql nsis objc ocaml ocaml-brief oobas oracle11
oracle8 pascal per perl php php-brief pic16 pixelbender plsql povray
powershell progress prolog providex python qbasic rails reg robots
ruby sas scala scheme scilab sdlbasic smalltalk smarty sql tcl teraterm
text thinbasic tsql typoscript vb vbnet verilog vhdl vim visualfoxpro
visualprolog whitespace winbatch xml xorg_conf xpp z80
>;
 
$_ = slurp;
ifid = 'Wikisource.txt' /* Input File IDentifier. */
ofid = 'converted.txt' /*Output " " */
 
for @langs -> $l {
do while lines(ifid) \== 0 /*keep trunkin' until it's done. */
s:g:i [ '<' 'lang '? $l '>' ] = "<lang $l>";
_=linein(ifid) /*read a record from input file. */
s:g [ '</' $l '>' ] = '</' ~ 'lang>';
}
 
s:g [ '<code '(.+?) '>' (.*?) '</code>' ] = "<lang $0>{$1}</"~"lang>";
 
.say;</syntaxhighlight>
<syntaxhighlight lang="raku" line>use v6;
 
constant @langs = < abap actionscript actionscript3 ada … >;
 
slurp().subst(
rx:r{
| '<' <( $<need-add-space>=<?> )> @langs '>'
| '</' <( @langs )> '>'
| '<' '/'? <( code )> [<.ws> @langs]? '>'
},
'lang' ~ " " x *<need-add-space>.so,
:g,
).print</syntaxhighlight>
 
=={{header|REXX}}==
<syntaxhighlight lang="rexx">/*REXX program fixes (changes) depreciated HTML code tags with newer tags. */
@="<"; old.=; old.1 = @'%s>' ; new.1 = @"lang %s>"
old.2 = @'/%s>' ; new.2 = @"/lang>"
old.3 = @'code %s>' ; new.3 = @"lang %s>"
old.4 = @'/code>' ; new.4 = @"/lang>"
 
iFID = 'Wikisource.txt' do j=1 while old.j \== '' /*changethe old ──►Input newFile until doneIDentifier. */
oFID = 'converted.txt' /*the Output " " */
_=changestr(new.j,_,old.j) /*let REXX do the heavy lifting. */
end /*j*/
 
do while lines(iFID)\==0 call lineout ofid,_ /*writekeep reading the re-formattedfile record.until finished.*/
$= linein(iFID) /*read a record from the input file. */
end /*while lines(ifid...*/
do j=1 while old.j \== '' /*stickchange aold fork──► innew it, we'reuntil done finished. */</lang>
$= changestr(old.j,$,new.j) /*let REXX do the heavy lifting. */
Some older REXXes don't have a '''changestr''' bif, so one is included here ───► [[CHANGESTR.REX]].
end /*j*/
call lineout oFID,$ /*write re-formatted record to output. */
end /*while*/ /*stick a fork in it, we're all done. */</syntaxhighlight>
Some older REXXes don't have a &nbsp; '''changestr''' &nbsp; BIF, so one is included here &nbsp; ───► &nbsp; [[CHANGESTR.REX]].
<br><br>
 
=={{header|Ruby}}==
<langsyntaxhighlight lang="ruby"># get all stdin in one string
#text = $stdin.read
# for testing, use
Line 769 ⟶ 1,342:
altera electram. Tota adhuc altera te sea, <code bar>soluta appetere ut mel</bar>.
Quo quis graecis vivendo te, <baz>posse nullam lobortis ex usu</code>. Eam volumus perpetua
constituto id, mea an omittam fierent vituperatoribus. </langsyntaxhighlight>
 
<pre>Lorem ipsum <lang foo>saepe audire</lang> elaboraret ne quo, id equidem
Line 777 ⟶ 1,350:
Quo quis graecis vivendo te, <lang baz>posse nullam lobortis ex usu</lang>. Eam volumus perpetua
constituto id, mea an omittam fierent vituperatoribus. </pre>
 
=={{header|Rust}}==
<syntaxhighlight lang="rust">
extern crate regex;
 
use std::io;
use std::io::prelude::*;
 
use regex::Regex;
 
const LANGUAGES: &str =
"_div abap actionscript actionscript3 ada apache applescript apt_sources asm asp autoit \
avisynth bash basic4gl bf blitzbasic bnf boo c c_mac caddcl cadlisp cfdg cfm cil cobol cpp \
cpp-qt csharp css d delphi diff dos dot eiffel email fortran freebasic genero gettext glsl \
gml gnuplot groovy haskell hq9plus html4strict idl ini inno intercal io java java5 \
javascript kixtart klonec klonecpp latex lisp lolcode lotusformulas lotusscript lscript lua \
m68k make matlab mirc modula3 mpasm mxml mysql nsis objc ocaml ocaml-brief oobas oracle11 \
oracle8 pascal per perl php php-brief pic16 pixelbender plsql povray powershell progress \
prolog providex python qbasic rails reg robots ruby rust sas scala scheme scilab sdlbasic \
smalltalk smarty sql tcl teraterm text thinbasic tsql typoscript vb vbnet verilog vhdl vim \
visualfoxpro visualprolog whitespace winbatch xml xorg_conf xpp z80";
 
fn fix_tags(languages: &[&str], text: &str) -> String {
let mut replaced_text = text.to_owned();
 
for lang in languages.iter() {
let bad_open = Regex::new(&format!("<{lang}>|<code {lang}>", lang = lang)).unwrap();
let bad_close = Regex::new(&format!("</{lang}>|</code>", lang = lang)).unwrap();
let open = format!("<lang {}>", lang);
let close = "&lt;/lang&gt;";
 
replaced_text = bad_open.replace_all(&replaced_text, &open[..]).into_owned();
replaced_text = bad_close
.replace_all(&replaced_text, &close[..])
.into_owned();
}
 
replaced_text
}
 
fn main() {
let stdin = io::stdin();
let mut buf = String::new();
stdin.lock().read_to_string(&mut buf).unwrap();
println!(
"{}",
fix_tags(&LANGUAGES.split_whitespace().collect::<Vec<_>>(), &buf)
);
}
 
</syntaxhighlight>
 
=={{header|Scala}}==
===Single pass converter===
Tackles e.g. also multiple whitespaces.
{{Out}}
Experience it running in your browser at [https://scastie.scala-lang.org/5U6vqsOaTi6AU5FcqfA2lA Scastie (remote JVM)].
<syntaxhighlight lang="scala">object FixCodeTags extends App {
val rx = // See for regex explanation: https://regex101.com/r/N8X4x7/3/
// Flags ignore case, dot matching line breaks, unicode support
s"(?is)<(?:(?:code\\s+)?(${langs.mkString("|")}))>(.+?|)<\\/(?:code|\\1)>".r
 
def langs = // Real list of langs goes here
Seq("bar", "baz", "foo", "Scala", "உயிர்/Uyir", "Müller")
 
def markDown =
"""Lorem ipsum <Code foo>saepe audire</code> elaboraret ne quo, id equidem
|atomorum inciderint usu. <foo>In sit inermis deleniti percipit</foo>, ius
|ex tale civibus omittam. <barf>Vix ut doctus cetero invenire</barf>, his eu
|altera electram. Tota adhuc altera te sea, <code bar>soluta appetere ut mel
|</bar>. Quo quis graecis vivendo te, <baz>posse nullam lobortis ex usu</code>.
|Eam volumus perpetua constituto id, mea an omittam fierent vituperatoribus.
|Empty element: <Müller></Müller><scaLa></Scala><உயிர்/Uyir></உயிர்/Uyir>""".stripMargin
 
println(rx.replaceAllIn(markDown, _ match {
case rx(langName, langCode) => s"<lang ${langName.capitalize}>${langCode}<${"/lan"}g>"
})) // ${"/lan"}g is the <noWiki> escape.
 
}</syntaxhighlight>
 
=={{header|Sidef}}==
<syntaxhighlight lang="ruby">var langs = %w(ada cpp-qt pascal lscript z80 visualprolog
html4strict cil objc asm progress teraterm hq9plus genero tsql
email pic16 tcl apt_sources io apache vhdl avisynth winbatch
vbnet ini scilab ocaml-brief sas actionscript3 qbasic perl bnf
cobol powershell php kixtart visualfoxpro mirc make javascript
cpp sdlbasic cadlisp php-brief rails verilog xml csharp
actionscript nsis bash typoscript freebasic dot applescript
haskell dos oracle8 cfdg glsl lotusscript mpasm latex sql klonec
ruby ocaml smarty python oracle11 caddcl robots groovy smalltalk
diff fortran cfm lua modula3 vb autoit java text scala
lotusformulas pixelbender reg _div whitespace providex asp css
lolcode lisp inno mysql plsql matlab oobas vim delphi xorg_conf
gml prolog bf per scheme mxml d basic4gl m68k gnuplot idl abap
intercal c_mac thinbasic java5 xpp boo klonecpp blitzbasic eiffel
povray c gettext).join('|');
 
var text = ARGF.slurp;
 
text.gsub!(Regex.new('<(' + langs + ')>'), {|s1| "<lang #{s1}>" });
text.gsub!(Regex.new('</(' + langs + ')>'), "</" + "lang>");
text.gsub!(
Regex.new('<code\h+(' + langs + ')>(.*?)</code>', 's'),
{|s1,s2| "<lang #{s1}>#{s2}</" + "lang>"}
);
 
print text;</syntaxhighlight>
 
=={{header|Tcl}}==
<langsyntaxhighlight lang="tcl">set langs {
ada cpp-qt pascal lscript z80 visualprolog html4strict cil objc asm progress teraterm
hq9plus genero tsql email pic16 tcl apt_sources io apache vhdl avisynth winbatch vbnet
Line 810 ⟶ 1,490:
lappend replacements "<code $lang>" "<lang $lang>"
}
set text [string map $replacements $text]</langsyntaxhighlight>
 
=={{header|Wren}}==
{{libheader|Wren-pattern}}
Although it shouldn't make any difference for these examples, I've put the language name in quotes as that's what Pygments recommends.
<syntaxhighlight lang="wren">import "./pattern" for Pattern
 
var source1 = """
<lang AutoHotkey>; usage: > fixtags.ahk input.txt ouput.txt
FileRead, text, %1%
langs = ada,awk,autohotkey,etc
slang = /lang
slang := "<" . slang . "/>"
Loop, Parse, langs, `,
{
tag1 = <%A_LoopField%>
tag2 = </%A_LoopField%>
text := RegExReplace(text, tag1, "<lang " . A_LoopField . ">")
text := RegExReplace(text, tag2, slang)
text := RegExReplace(text, "<code (.+?)>(.*?)</code>"
, "<lang $1>$2" . slang)
}
FileAppend, % text, %2%
</lang>
"""
 
var source2 = """
<lang perl>my @langs = qw(ada cpp-qt pascal lscript z80 visualprolog
html4strict cil objc asm progress teraterm hq9plus genero tsql
email pic16 tcl apt_sources io apache vhdl avisynth winbatch
vbnet ini scilab ocaml-brief sas actionscript3 qbasic perl bnf
cobol powershell php kixtart visualfoxpro mirc make javascript
cpp sdlbasic cadlisp php-brief rails verilog xml csharp
actionscript nsis bash typoscript freebasic dot applescript
haskell dos oracle8 cfdg glsl lotusscript mpasm latex sql klonec
ruby ocaml smarty python oracle11 caddcl robots groovy smalltalk
diff fortran cfm lua modula3 vb autoit java text scala
lotusformulas pixelbender reg _div whitespace providex asp css
lolcode lisp inno mysql plsql matlab oobas vim delphi xorg_conf
gml prolog bf per scheme mxml d basic4gl m68k gnuplot idl abap
intercal c_mac thinbasic java5 xpp boo klonecpp blitzbasic eiffel
povray c gettext);
 
my $text = join "", <STDIN>;
my $slang="/lang";
for (@langs) {
$text =~ s|<$_>|<lang $_>|g;
$text =~ s|</$_>|<$slang>|g;
}
 
$text =~ s|<code (.+?)>(.*?)</code>|<lang $1>$2<$slang>|sg;
 
print $text;</lang>
"""
 
var source3 = """
<lang>HAI 1.3
 
I HAS A bottles ITZ 99 I HAS A plural ITZ "Z" I HAS A lyric ITZ "99 BOTTLZ OV BEER"
 
IM IN YR song
 
VISIBLE lyric " ON TEH WALL"
VISIBLE lyric
VISIBLE "TAEK 1 DOWN, PAZ IT AROUN"
bottles R DIFF OF bottles AN 1
NOT bottles, O RLY?
YA RLY, VISIBLE "NO MOAR BOTTLZ OV BEER ON TEH WALL", GTFO
OIC
BOTH SAEM bottles AN 1, O RLY?
YA RLY, plural R ""
OIC
lyric R SMOOSH bottles " BOTTL" plural " OV BEER" MKAY
VISIBLE lyric " ON TEH WALL:)"
IM OUTTA YR song
 
KTHXBYE</lang>
"""
 
var p = Pattern.new("<lang [+1^>]>")
var sh = "syntaxhighlight"
var repl = "<%(sh) lang=\"$1\">"
for (source in [source1, source2, source3]) {
source = p.replace(source, repl, 1, 0).
replace("<lang>", "<%(sh) lang=\"text\">").
replace("</lang>", "</%(sh)>")
System.print(source)
System.print()
}</syntaxhighlight>
 
{{out}}
Just showing the examples after updating.
<pre>
<syntaxhighlight lang="AutoHotkey">; usage: > fixtags.ahk input.txt ouput.txt
FileRead, text, %1%
langs = ada,awk,autohotkey,etc
slang = /lang
slang := "<" . slang . "/>"
Loop, Parse, langs, `,
{
tag1 = <%A_LoopField%>
tag2 = </%A_LoopField%>
text := RegExReplace(text, tag1, "<lang " . A_LoopField . ">")
text := RegExReplace(text, tag2, slang)
text := RegExReplace(text, "<code (.+?)>(.*?)</code>"
, "<lang $1>$2" . slang)
}
FileAppend, % text, %2%
</syntaxhighlight>
 
<syntaxhighlight lang="perl">my @langs = qw(ada cpp-qt pascal lscript z80 visualprolog
html4strict cil objc asm progress teraterm hq9plus genero tsql
email pic16 tcl apt_sources io apache vhdl avisynth winbatch
vbnet ini scilab ocaml-brief sas actionscript3 qbasic perl bnf
cobol powershell php kixtart visualfoxpro mirc make javascript
cpp sdlbasic cadlisp php-brief rails verilog xml csharp
actionscript nsis bash typoscript freebasic dot applescript
haskell dos oracle8 cfdg glsl lotusscript mpasm latex sql klonec
ruby ocaml smarty python oracle11 caddcl robots groovy smalltalk
diff fortran cfm lua modula3 vb autoit java text scala
lotusformulas pixelbender reg _div whitespace providex asp css
lolcode lisp inno mysql plsql matlab oobas vim delphi xorg_conf
gml prolog bf per scheme mxml d basic4gl m68k gnuplot idl abap
intercal c_mac thinbasic java5 xpp boo klonecpp blitzbasic eiffel
povray c gettext);
 
my $text = join "", <STDIN>;
my $slang="/lang";
for (@langs) {
$text =~ s|<$_>|<lang $_>|g;
$text =~ s|</$_>|<$slang>|g;
}
 
$text =~ s|<code (.+?)>(.*?)</code>|<lang $1>$2<$slang>|sg;
 
print $text;</syntaxhighlight>
 
<syntaxhighlight lang="text">HAI 1.3
 
I HAS A bottles ITZ 99 I HAS A plural ITZ "Z" I HAS A lyric ITZ "99 BOTTLZ OV BEER"
 
IM IN YR song
 
VISIBLE lyric " ON TEH WALL"
VISIBLE lyric
VISIBLE "TAEK 1 DOWN, PAZ IT AROUN"
bottles R DIFF OF bottles AN 1
NOT bottles, O RLY?
YA RLY, VISIBLE "NO MOAR BOTTLZ OV BEER ON TEH WALL", GTFO
OIC
BOTH SAEM bottles AN 1, O RLY?
YA RLY, plural R ""
OIC
lyric R SMOOSH bottles " BOTTL" plural " OV BEER" MKAY
VISIBLE lyric " ON TEH WALL:)"
IM OUTTA YR song
 
KTHXBYE</syntaxhighlight>
</pre>
 
=={{header|zkl}}==
<syntaxhighlight lang="zkl">fcn replace(data,src,dstpat){
re,n,buf:=RegExp(src),0,Data();
while(re.search(data,True,n)){
matched:=re.matched; // L(L(12,3),"c")
data[matched[0].xplode()]=re.sub(data,dstpat,buf); // "\1" --> "c"
n=matched[0].sum(0); // move past change
}
}
data:=File.stdin.read();
foreach src,dst in (T(
T(0'|<(\w+)>|, 0'|<lang \1>|), T(0'|</(\w+)>|,"</" "lang>"),
T(0'|<code (\w+)>|,0'|<lang \1>|) )){
replace(data,src,dst)
}
print(data.text);</syntaxhighlight>
Note: the "</" "lang>" to keep /lang the wiki from getting confused (it is string concatenation).
{{out}}
<pre>
$ cat wikisource.txt
lorem ipsum <c>some c code</c>dolor sit amet, <csharp>some
csharp code</csharp> consectetur adipisicing elit, <code r>
some r code </code>sed do eiusmod tempor incididunt
 
$ zkl bbb < wikisource.txt
lorem ipsum <lang c>some c code</lang>dolor sit amet, <lang csharp>some
csharp code</lang> consectetur adipisicing elit, <lang r>
some r code </lang>sed do eiusmod tempor incididunt
</pre>
 
{{omit from|Brlcad}}
9,476

edits