Bonjour Zryip,
Starting from your very nice script, I am modifying it so that I
obtain one month per line.
I managed to get the days of weeks repeated five times separated by
tab in the first line of the field (with tab stops in it)
I suppressed carriage returns and I added "tab" between weeks.
Not too difficult up to now :-)
Not completed yet (currently I am getting one month nearly as I
expected.
While doing trials, I just noticed that, when pFirstDayWeek is
"Monday", if the first day of a month is actually "sunday" then there
is a flaw: the "1" is set up under "monday" instead of "sunday" while
"2" is at its right place (second line).
I got that for example when trying "1/0810" (August 2010)
This does not happen with pFirstDayWeek = "Sunday" (I tried for months
beginning a saturday).
I must confess that I did not study your script deeply
(I just made few local modifications to quicky obtain a month with an
aligned format instead of a table.
So you likely will see faster than me how to fix that issue ;-))
Anyway, thanks a lot for your improvement of the Richard'script; I
particularly appreciate the possibililty to choose between Sunday and
Monday as the first day of week. Thanks to your script I am sure I
will get the format I am expecting.
Best regards from Grenoble
André
Le 27 févr. 10 à 01:12, zryip theSlug a écrit :
2010/2/26 Richard Gaskin <[email protected]>:
FWIW, here's a a function I pulled out of my archives which is a
sort of
variant of Cal in native RevTalk, making a single month from a date
passed
to it. I'll leave it as an exercise to the user to make a year out
of it if
needed.
One of the nice things about RevTalk is that the weekDayNames and
monthNames
functions return values in the current system's local language, so
this is
localized without having to do anything.
I confess that I have missed these two valuables functions.
Interestingly, without the overhead involved in going to shell it's
about 20
times faster on my machine than calling shell("cal").
It's instant on my machine. So with your script I could back in
time? 8-)
However as far I have understood it seems that the property
useSystemDate set to true is necessary to obtain values according with
the local language.
Plus, a second difficulty exists: the week don't starts necessary a
Sunday but a Monday.
So I try to improve the Richard's solution like this:
function Cal pDate, pFirstDayWeek
set useSystemDate to true
-- Returns a plain-text calendar representation of
-- the month the date specified in pDate is in.
-- If no month is provided it uses the current
-- month. Month and day names use the user's current
-- system settings.
--
-- Use current date as default:
if pDate is empty then put the date into pDate
if pFirstDayWeek is empty then put "Sunday" into pFirstDayWeek
-- Verify date is valid:
convert pDate to dateitems
if the result is not empty then return "Error: "& the result
--
put empty into tCal
--
-- Make month/year header:
put item 1 of pDate into tYear
put item 2 of pDate into tMonthNumber
put line (tMonthNumber) of the monthNames into tMonth
put tMonth && tYear into tHeader
-- Center it:
repeat for ( (20 - len(tHeader)) div 2)
put " " after tCal
end repeat
put tHeader &cr after tCal
--
-- Make day names header:
put weekdayNamesList(pFirstDayWeek) into tWeekdayNames
repeat for each line tDay in tWeekdayNames
put char 1 to 2 of tDay &" " after tCal
end repeat
put cr after tCal
--
-- Pad beginning with empty days:
put createDate(tYear,tMonthNumber,1) into tStartDay -- create a
date in the system's local language
convert tStartDay to dateitems
if (pFirstDayWeek is "Monday") then
repeat for (last item of tStartDay - 2)
put " " after tCal
end repeat
else
repeat for (last item of tStartDay - 1)
put " " after tCal
end repeat
end if
put createDate(tYear,tMonthNumber,1) into tStartDay -- create a
date in the system's local language
-- Walk through 31 days, stopping when we reach a
-- number not valid for the month we're doing:
repeat with i = 1 to dayOf(addToDate(tStartDay,0,1,-1))
-- the end value is the number of days in the month. To
obtain the last date of a month, add 1 month and subtract one
-- day to the first day of a month
-- Get day number:
put createDate(tYear,tMonthNumber,i) into tDate
convert tDate to dateitems
if the result is not empty then exit repeat
put item 3 of tDate into tDayNum
--
-- Pad it and add it:
if len(i) = 1 then put " " before i
put i &" " after tCal
--
-- Go to next line if we're at the end of the week:
if last item of tDate = lastDayOfWeek(pFirstDayWeek) then put cr
after tCal
end repeat
--
-- Pad empty lines at end for uniform appearance
-- when using multiple calendars in a field:
repeat for (8-the number of lines of tCal)
put cr after tCal
end repeat
--
-- Send it to the caller:
return tCal
end Cal
function weekdayNamesList pFirstDay
set useSystemDate to true
put the abbr weekdayNames into tWeekdayNames
if pFirstDay is "Monday" then
put cr&first line of tWeekdayNames after tWeekdayNames
delete first line of tWeekdayNames
end if
return tWeekdayNames
end weekdayNamesList
function lastDayOfWeek pFirstDay
if pFirstDay is "Monday" then
return 1
else
return 7
end if
end lastDayOfWeek
function firstDayInMonth pStartDate
-- Return the first day in a month
set useSystemDate to true
convert pStartDate to dateitems
put 1 into item 3 of pStartDate
convert pStartDate to short date
return pStartDate
end firstDayInMonth
function createDate pTheYear,pTheMonth,pTheDay
local tDateItems
set useSystemDate to true
put pTheYear,pTheMonth,pTheDay,0,0,0,0 into tDateItems
convert tDateItems from dateItems to short date
return tDateItems
end createDate
function addToDate pStartDate,pAddToYear,pAddToMonth,pAddToDay
-- Allows you to manipulate a date in a single pass
set useSystemDate to true
convert pStartDate to dateitems
add pAddToYear to item 1 of pStartDate
add pAddToMonth to item 2 of pStartDate
add pAddToDay to item 3 of pStartDate
convert pStartDate to short date
return pStartDate
end addToDate
function dayOf pStartDate
set useSystemDate to true
convert pStartDate to dateitems
return item 3 of pStartDate
end dayOf
If some members of the list could validate this script in their own
language? 8-)
-> If your weeks starts a Monday call the function like this:
set useSystemDate to true
put cal(the date,"Monday") into fld "myField"
-> If your weeks starts a Sunday simply use:
set useSystemDate to true
put cal() into fld "myField"
Regards,
--
-Zryip TheSlug- wish you the best! 8)
http://www.aslugontheroad.co.cc
_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your
subscription preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution
_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution