Rosetta Code/Find bare lang tags: Difference between revisions
m (removed perl artifact) |
(Restore AutoHotkey code by Crazyfirex, but disable Rosetta Code's syntax highlighter.) |
||
Line 26: | Line 26: | ||
For more extra credit, use the [http://rosettacode.org/mw/api.php Media Wiki API] to test actual RC tasks. |
For more extra credit, use the [http://rosettacode.org/mw/api.php Media Wiki API] to test actual RC tasks. |
||
=={{header|AutoHotkey}}== |
|||
''This code has no syntax highlighting, because Rosetta Code's highlighter fails with code that contains literal <nowiki></lang></nowiki> tags.'' |
|||
Stole RegEx Needle from Perl |
|||
<pre><nowiki>task = |
|||
( |
|||
Description |
|||
<lang>Pseudocode</lang> |
|||
=={{header|C}}== |
|||
<lang C>printf("Hello world!\n");</lang> |
|||
=={{header|Perl}}== |
|||
<lang>print "Hello world!\n"</lang> |
|||
) |
|||
lang := "no lanugage", out := Object(lang, 0), total := 0 |
|||
Loop Parse, task, `r`n |
|||
If RegExMatch(A_LoopField, "==\s*{{\s*header\s*\|\s*([^\s\}]+)\s*}}\s*==", $) |
|||
lang := $1, out[lang] := 0 |
|||
else if InStr(A_LoopField, "<lang>") |
|||
out[lang]++ |
|||
For lang, num in Out |
|||
If num |
|||
total++, str .= "`n" num " in " lang |
|||
MsgBox % clipboard := total " bare lang tags.`n" . str</nowiki></pre> |
|||
Output: |
|||
<pre>2 bare lang tags. |
|||
1 in no lanugage |
|||
1 in Perl</pre> |
|||
=={{header|Perl}}== |
=={{header|Perl}}== |
||
This is a simple implementation that does not attempt either extra credit. |
This is a simple implementation that does not attempt either extra credit. |
Revision as of 02:53, 14 September 2011
Find all <lang> tags without a language specified in the text of a page. Display counts by language section:
Description <lang>Pseudocode</lang> =={{header|C}}== <lang C>printf("Hello world!\n");</lang> =={{header|Perl}}== <lang>print "Hello world!\n"</lang>
should display something like
2 bare language tags. 1 in perl 1 in no language
For extra credit, allow multiple files to be read. Summarize all results by language:
5 bare language tags. 2 in c ([[Foo]], [[Bar]]) 1 in perl ([[Foo]]) 2 in no language ([[Baz]])
For more extra credit, use the Media Wiki API to test actual RC tasks.
AutoHotkey
This code has no syntax highlighting, because Rosetta Code's highlighter fails with code that contains literal </lang> tags.
Stole RegEx Needle from Perl
task = ( Description <lang>Pseudocode</lang> =={{header|C}}== <lang C>printf("Hello world!\n");</lang> =={{header|Perl}}== <lang>print "Hello world!\n"</lang> ) lang := "no lanugage", out := Object(lang, 0), total := 0 Loop Parse, task, `r`n If RegExMatch(A_LoopField, "==\s*{{\s*header\s*\|\s*([^\s\}]+)\s*}}\s*==", $) lang := $1, out[lang] := 0 else if InStr(A_LoopField, "<lang>") out[lang]++ For lang, num in Out If num total++, str .= "`n" num " in " lang MsgBox % clipboard := total " bare lang tags.`n" . str
Output:
2 bare lang tags. 1 in no lanugage 1 in Perl
Perl
This is a simple implementation that does not attempt either extra credit. <lang perl>my $lang = 'no language'; my $total = 0; my %blanks = (); while (<>) {
if (m/<lang>/) { if (exists $blanks{lc $lang}) { $blanks{lc $lang}++ } else { $blanks{lc $lang} = 1 } $total++ } elsif (m/==\s*Template:\s*header\s*\\s*==/) { $lang = lc $1 }
}
if ($total) { print "$total bare language tag" . ($total > 1 ? 's' : ) . ".\n\n"; while ( my ($k, $v) = each(%blanks) ) { print "$k in $v\n" } }</lang>