Rosetta Code/Find bare lang tags: Difference between revisions
Content added Content deleted
m (removed broken C (not a real solution, but an artifact of the AutoHotkey)) |
m (removed perl artifact) |
||
Line 27: | Line 27: | ||
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|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</lang> |
|||
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 23:49, 13 September 2011
Rosetta Code/Find bare lang tags is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
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.
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>