Rosetta Code/Fix code tags: Difference between revisions

From Rosetta Code
Content added Content deleted
m (→‎{{header|Python}}: I guess it's easier to go back to reading entire file then)
Line 54: Line 54:
=={{header|Python}}==
=={{header|Python}}==


Syntax highlighting does not work, because <nowiki></lang></nowiki> is inside the code.
'''Very poor solution, but syntax highlighting is now working, and <nowiki><code>text</code></nowiki> bug is solved.'''


<lang python>
'''Very poor solution, but <nowiki><code>inline text</code></nowiki> bug solved.'''
# coding: utf-8

<pre># coding: utf-8


import sys
import sys
import re
import re

lt, gt = "<",">"


langs = ['ada', 'cpp-qt', 'pascal', 'lscript', 'z80', 'visualprolog',
langs = ['ada', 'cpp-qt', 'pascal', 'lscript', 'z80', 'visualprolog',
Line 85: Line 86:


for i in langs:
for i in langs:
text = text.replace("<%s>" % i,"<lang %s>" % i)
text = text.replace("%s" % lt+i+gt,"%slang %s" % (lt,i+gt))
text = text.replace("</%s>" % i, "</lang>")
text = text.replace("%s/%s" % (lt,i+gt), "%s/lang%s" % (lt,gt))


text = re.sub("(?s)<code (.+?)>(.*?)</code>", r"<lang \1>\2</lang>", text)
text = re.sub("(?s)%scode (.+?)>(.*?)%s/code%s" % (lt,lt,gt), r"%slang \1%s\2%s/lang%s" % (lt,gt,lt,gt), text)


sys.stdout.write(text)
sys.stdout.write(text)
</pre>
</lang>

'''Bug not solved version:'''

<pre>
# coding: utf-8

import sys
import re

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']

for line in sys.stdin:
for i in langs:
line = line.replace("<%s>" % i,"<lang %s>" % i)
line = line.replace("</%s>" % i, "</lang>")
line = re.sub("<code (.*?)>", r"<lang \1>", line)
line = line.replace("</code>","</lang>")
sys.stdout.write(line)
</pre>

Revision as of 18:51, 1 February 2009

Task
Rosetta Code/Fix code tags
You are encouraged to solve this task according to the task description, using any language you may know.

Fix Rosetta Code deprecated code tags, with these rules:

Change <%s> to <lang %s>
Change </%s> to </lang>
Change <code %s> to <lang %s>
Change </code> to </lang>

Usage:

cat wikisource.txt | ./convert.py > converted.txt

IMPORTANT NOTICE: Don't forget to check the results, as code tags used for inline text (<code>foo</code>) get broken (<code>foo</lang>).

Perl

<lang perl>

  1. coding: utf-8

my @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');

my $slang = '\lang';

while (<STDIN>) {

   foreach my $i (@langs) {
       s|<$i>|<lang $i>|g;
       s|</$i>|<$slang>|g;
   }
   
   s||<lang \1>|g;
   s||<$slang>|g;
   
   print;

} </lang>

Python

Very poor solution, but syntax highlighting is now working, and <code>text</code> bug is solved.

<lang python>

  1. coding: utf-8

import sys import re

lt, gt = "<",">"

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']

text = sys.stdin.read()

for i in langs:

   text = text.replace("%s" % lt+i+gt,"%slang %s" % (lt,i+gt))
   text = text.replace("%s/%s" % (lt,i+gt), "%s/lang%s" % (lt,gt))

text = re.sub("(?s)%scode (.+?)>(.*?)%s/code%s" % (lt,lt,gt), r"%slang \1%s\2%s/lang%s" % (lt,gt,lt,gt), text)

sys.stdout.write(text) </lang>