Rosetta Code/Find bare lang tags: Difference between revisions

From Rosetta Code
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>