- From: Charles McCathieNevile <charles@w3.org>
- Date: Fri, 30 Jun 2000 01:11:06 -0400 (EDT)
- To: WAI ER group <w3c-wai-er-ig@w3.org>
Thought this might be of nterest - calendars are one of the tricky table-type
cases.
Cheers
Charles
--
Charles McCathieNevile mailto:charles@w3.org phone: +61 (0) 409 134 136
W3C Web Accessibility Initiative http://www.w3.org/WAI
Location: I-cubed, 110 Victoria Street, Carlton VIC 3053
Postal: GPO Box 2476V, Melbourne 3001, Australia
---------- Forwarded message ----------
Date: Thu, 29 Jun 2000 15:45:31 -0400 (EDT)
From: A. R. Vener <salt@aero-vision.com>
Reply-To: blinux-list@redhat.com
To: blinux-list@redhat.com
Subject: screen reader friendly output from cal command
Resent-Date: 29 Jun 2000 19:45:39 -0000
Resent-From: blinux-list@redhat.com
Resent-cc: recipient list not shown: ;
Hi list,
I wrote the following perl program to provide a nice
screen reader friendly output for the cal program.
I'm enclosing it here as is for the benefit of anyone who may want
it.
Rudy Vener
--------------------------cut here----------------------------------
#!/usr/local/bin/perl
# bcal - screen reader friendly cal front end
#
# Copyright June 2000 by Rudy Vener
#
# This program is made available under terms identical to those of
# the GNU Public License. Since the terms are readily available I
# will not repeat them here.
#
# Author: Rudy Vener
# Name: bcal - a calendar front end formatter for the Unix cal program
# Purpose: to reformat the output of the cal program into something meaningful
# to screen reader users and to provide additional constraints to allow
# customized reduction and formatting of the output.
#
# Modify the next line if needed, according to the location of your cal
# program.
$calcmd = "/usr/bin/cal";
@monthlist = ('january', 'february', 'march', 'april', 'may',
'june', 'july', 'august', 'september', 'october', 'november',
'december');
@ordlist = ( 'first1st','second2nd','third3rd','fourth4th','fifth5th');
@daylist = ('sunday', 'monday', 'tuesday', 'wednesday', 'thursday',
'friday', 'saturday');
%cal = {
'sunday' => '',
'monday' => '',
'tuesday' => '',
'wednesday' => '',
'thursday' => '',
'friday' => '',
'saturday' => ''
};
# first check for help option
if ($ARGV[0] eq "-?" or $ARGV[0] eq "-help" )
{
help_msg();
exit;
}
# parse the arguments
parse_args(@ARGV);
open (CAL,"$calcmd $month $year |") or die "Cannot execute the cal command\n";
# get and hold first two lines
$line1 = <CAL>;
$line2 = <CAL>;
$idx = 0;
# get the calendar dates formatted grid
while (<CAL>)
{
chomp $_;
$_ =~ s/ */ /g;
@days = reverse(split(" ",$_));
$line[$idx] = join(" ",@days);
$idx++;
}
close (CAL);
$linecount = $idx - 2;
# now reformat according to the day of the week
$idx = 0;
foreach $key (reverse(@daylist))
{
$dtmp = "";
foreach (@line)
{
@tmp = split(" ", $_);
$idx <= $#tmp and $dtmp = join(" ",($dtmp, $tmp[$idx]));
}
$cal{$key} = $dtmp;
$idx++;
}
# now print it out in a way that makes sense over a screen reader
# Here is where we use any constraining arguments to limit and format
# the output
foreach $day (@daylist)
{
if (defined $dayname and defined $ordval)
{
if (index($day, $dayname) == 0) {
@dates = split(" ",$cal{$day});
$ordval <= @dates or die "No $ordname $day in $monthlist[$month -1] $year\n";
print "$day $monthlist[$month - 1] $dates[$ordval - 1] \n";
}
}
elsif (defined $dayname)
{
index($day, $dayname) == 0 and print "$day $cal{$day} \n";
}
else
{
print "$day $cal{$day} \n";
}
}
exit;
sub parse_args()
{
local ($tmp);
foreach $arg (@_)
{
$tmp = $arg;
$tmp =~ y/A-Z/a-z/;
$tmp > 12 and $tmp <= 9999 and $year = $tmp;
if (length($tmp) > 2)
{
$idx = 1;
if (! defined $month) {
foreach (@monthlist) {
index($_,$tmp) == 0 and $month = $idx;
$idx++;
defined $month and last;
}
}
if (! defined $dayname) {
foreach (@daylist) {
index($_,$tmp) == 0 and $dayname = $_;
defined $dayname and last;
}
}
$idx = 1;
if (! defined $ordval) {
foreach (@ordlist) {
index($_,$tmp) >= 0 and $ordval = $idx and $ordname = $tmp;
$idx++;
defined $ordval and last;
}
}
}
}
# make up for missing arguments
defined $year or $getyr = `date "+\%Y"`;
defined $getyr and $getyr >= 1999 and $getyr <= 9999 and $year = $getyr;
defined $month or $getmonth = `date "+\%m"`;
defined $getmonth and $month = $getmonth * 1;
defined $year or die "Invalid year \n";
defined $month or die "Invalid month \n";
}
sub help_msg()
{
print "
Usage: bcal <arglist>
arglist may contain arguments in any order. Arguments
may include
month - either by name january to december or value from 1 to 12. Case
insensitive and only first three letter of the name are required.
year - numerical from 1 to 9999
day -- by name, limiting output to dates for that day. First three letter
of the name are required, case insensitive.
date ordination - from first to fifth by name or numerical abbreviation.
E.g. first, second, 3rd, 5th, etc.
examples:
bcal # with no arguments returns all dates for current month and year in
screen reader frendly format
bcal first thurs july 2001
returns: thursday july 6
";
}
---
Send your message for blinux-list to blinux-list@redhat.com
Blinux software archive at ftp://leb.net/pub/blinux
Blinux web page at http://leb.net/blinux
To unsubscribe send mail to blinux-list-request@redhat.com
with subject line: unsubscribe
Received on Friday, 30 June 2000 01:11:06 UTC