$Src";} method tcl_code {Src} {::return "
$Src";} method basefont {Size} {::return "
$Src
\n"]; } method images {} { ::return [::array get _images]; } method img {sargs} { /* { attributes dynsrc Explorer only for some kind of dynamic loading of movies. lowsrc Netscape only for preloading at lower resolution. alt Alternative text the browser can display. Browsers may also display this when mouse is over graphic. Up to 1024 characters. longdesc url of objject containing a long description. align left,right,top,middle,bottom .width .height Kludge Alert: The formatter must know if the target is chtml so that img file paths can be manipulated accordingly. 2.11.4 Added the .base64 argument. If this argument exists then the image is the value of the argument in base64 and must be put to a temporary file for actual use. */ } ::set rwb1_debug 0; ::if {$rwb1_debug} {::puts "rwb1_debug,img,1000.0,sargs==$sargs";} ::if {$rwb1_debug} {::puts "rwb1_debug,img,1000.1,src==[::sargs::get $sargs .src]";} ::if {$rwb1_debug} {::puts "rwb1_debug,img,1000.2,page_file_path==[::sargs::get $_sargs .page_file_path]";} ::qw::try { ::if {[::sargs::exists $sargs .base64]} { ::set FileName [::sargs::get $sargs .base64.filename]; ::set CipherText [::sargs::get $sargs .base64.data]; ::set PlainText [::base64::decode $CipherText]; ::set File [::file join [::qw::fileutil::temporary_directory] $FileName]; ::set Handle [::open $File w+]; ::fconfigure $Handle -translation binary; ::puts -nonewline $Handle $PlainText; ::close $Handle; ::sargs::var::set sargs .src $File; ::sargs::var::unset sargs .base64; } ::set Result "1} { ::append Result "[lrange $args 0 [::expr [::llength $args]-2]]" ::set args [::lrange $args end end] } ::set args [::subst $args]; ::set args [list_to_string $args]; ::append Result ">[::lindex $args 0]
\n" return $Result; } */ } # method p1 {Src} {::return [put [paragraph [::subst $Src]]];} # method p {Src} {::return [paragraph [::subst $Src]];} method p {Src} { ::return [::subst -nobackslashes "$Src
\n"]; } # method p {Src} {::return [paragraph [::subst [::string trim $Src]]];} method code {Src} { ::return [::subst "$Src\n"];
}
method div {args} {
/* {
Usage: tagged_block .block_tag_list block_tag_nv2 {...body...}
Note that the body is a single argument but the preceding arguments form
a sargs structure. We do this for compatibility with other commands.
The args, mainly the .block_tag_list is passed to a callback in the
compiler. We did it this way so could piggy back on the compiler and not
have to pass additional argumants (say the callback) to the formatter.
*/ }
::set rwb1_debug 0;
::if {$rwb1_debug} {::puts "rwb1_debug,div,1000.0,args==\n$args";}
::if {$rwb1_debug} {::puts "rwb1_debug,div,1000.0,_sargs==\n$_sargs";}
::set Body [::lindex $args end];
::set args [::lrange $args 0 end-1];
::if {[::llength $args]!=0} {
::if {[::sargs::is_primitive $args]} {
::qw::throw "div - invalid structured arguments \"$args\"";
}
::if {$rwb1_debug} {::puts "rwb1_debug,div,1000.1";}
::sargs::marshal;
::if {$rwb1_debug} {::puts "rwb1_debug,div,1000.2";}
/* {
Perform the callback through the compiler. Note that we append the
body which is probably overkill and we do it with a field name to
make sure it is a properly formatter structure.
*/ }
::set IsHit [$_compiler chtml_block_tags_hit $sargs .body $Body];
::if {!$IsHit} {
::if {$rwb1_debug} {::puts "rwb1_debug,div,1000.4";}
::return "";
}
::if {$rwb1_debug} {::puts "rwb1_debug,div,1000.5";}
}
::return [::subst -nobackslashes "$Src\n"]; ::return "
$Src\n"; } method qw_code1 {Src} { ::set SrcLineList [::split $Src "\n"]; ::set DstLineList ::foreach SrcLine $LineList { ::set DstLine ""; ::set i 0; ::while {$i<[::string length $SrcLine]} { ::set Char [::string index $SrcLine $i]; ::incr i; ::if {$Char eq "\t"} { ::append DstLine " "; ::continue; } ::append DstLine [::string range $SrcLine $i end]; ::break; } } ::return $DstLine; ::set Src [::string trim $Src]; ::set Src [::string map {\r ""} $Src]; ::set Src [::string map {\n "
$Src\n"]; ::return "
$Src\n"; } method qw_code_numbered {Src} { /* { Like code method but numbers the lines, starting at 1. Leading tabs are first replaced with 4 chars each. Then we overwrite the number of spaces necessary for the number. */ } ::set Src [::string trimright $Src]; ::set Src [::string map [::list "\r" ""] $Src]; ::set Src1 [::string map [::list "\\\n" "\\n"] $Src]; ::set LineList [::split $Src1 "\n"]; ::set Result ""; # ::set LineList [::split $Src "\n"]; ::set LineNumber 1; ::foreach SrcLine $LineList { ::if {$LineNumber==1&&[::string trim $SrcLine] eq ""} { ::continue; } ::set SrcLine [::string trimright $SrcLine]; # Get rid of possible cr's. ::if {[::string index $SrcLine end] eq "\\"} { /* { Lots of source code contains line continuations and replacing them with \ seems to be the best way to deal with them. */ } ::set SrcLine [::lreplace $SrcLine end end "\"]; } ::set Prefix " "; ::set Length [::string length $SrcLine]; ::for {::set i 0} {$i<$Length} {::incr i} { ::set Char [::string index $SrcLine $i]; ::switch -- $Char { "\t" { ::append Prefix " "; } " " { ::append Prefix " "; ::continue; } default { ::break; } } } ::set DstLine [::string range $SrcLine $i end]; ::set LineNumberLength [::string length $LineNumber]; ::set Prefix [::string replace $Prefix 0 [::expr {$LineNumberLength-1}] $LineNumber]; # ::set Prefix "$LineNumber[::string range $Prefix $LineNumberLength end]"; ::append Result "${Prefix}${DstLine}
$Result\n"; ::return $Result; } method paragraphs {Src} { ::set Result ""; foreach Arg $Src { ::append Result [paragraph $Arg]; } return $Result; } # -------------------------------------------------------- # list methods # -------------------------------------------------------- method bullets {args} {::return [::eval bullets1 $args];} method numbered {args} {::return [::eval numbered1 $args];} method definitions {args} {::return [::eval definitions1 $args];} /* { method bullets {args} {::return [::eval bullets1 [::subst $args]];} method numbered {args} {::return [::eval numbered1 [::subst $args]];} method definitions {args} {::return [::eval definitions1 [::subst $args]];} */ } /* { method listOrdered {args} {::return [$_formatter listOrdered $args];} method listUnordered {args} {::return [$_formatter listUnordered $args];} */ } /* { method ol {args} { ::set Result "
This should link to a page in the old help chm.
*/ } /* { Example in manual.qw_help to link to another page within manual. See the [link .id 150220040811161430 {[bold "Executive Summary"]}] for a brief overview. Example in error help to link to page in manual.chm (link is wrapped in list item). [li {[link .chm $::qw_manual_file .id 314120050422104251 {More on Versions and Updating}]}] The major difference is that the error help is dynamic and can find the chm file. Link Problem: Suppose a workshop chm includes a page from the manual that links to a another page that is in the manual but not the workshop. What we do is check whether the target page is a hit on the tags, and if it isn't then we do not attempt the link. If we could figure out the target chm file we could attempt the link but we still will not know what directory it will be in on a user machine. If we happen to know that the target page is also included in the workshop then we could link to that page in the workshop. This might actually work, but to do so we will have to manage the includes. The link to a page looks like: ...body... The link to bookmark 314120091231235959 within a page looks like: ...body... */ } ::qw::try { ::set s_args [::lrange $args 0 end-1]; ::set Body [::lindex $args end]; ::set TargetPageId [::sargs::get $s_args .id]; ::if {$TargetPageId eq ""} { ::qw::throw \ .text "qw::html::link - no .id argument." \ .error_id 314120170213110440 \ ; } ::set ThisPageId [qw_s_args .id]; ::set Compiler [qw_s_args .chtml.compiler]; ::if {$Compiler ne "" && ![::sargs::exists $s_args .chm]} { /* { We check to ensure the target page exists. However, if .chm is specified then the page is in another file and we cannot check. For example, we are linking from an error message into the manual. */ } ::set Page [$Compiler chtml_page_from_id $s_args]; ::if {$Page eq ""} { /* { The target page does not exist. */ } ::qw::throw "Help page \"$ThisPageId\" attempted to link to non-existing page \"$TargetPageId\"."; } ::if {![$Compiler chtml_page_tags_hit $Page]} { /* { We found the page but it is not a hit on the tags. We put out a a warning and return the text, but the link is disabled. */ } ::qw::warning 314120050519084214 "Help page \"$ThisPageId\" linked to page \"$TargetPageId\" that is not a hit on the tags."; ::return [::subst $Body]; } } ::if {$::qw::control(browser_help)} { #2.31.0 ::set Result "" ::append Result [::subst $Body]; ::append Result "" ::return $Result; } "" { ::append Result "$TargetPageId.htm"; ::if {[::sargs::get $s_args .bookmark] ne ""} { ::append Result "#[::sargs::get $s_args .bookmark]"; } ::append Result ">" ::append Result [::subst $Body]; ::append Result "" ::return $Result; } default { ::qw::throw \ .text "Couldn't link to page in invalid file \"$Chm\"." \ ; } } } else { ::set Result "" ::append Result [::subst $Body]; ::append Result "" #mk:@MSITStore:D:\Nv\demo_inv\nv2.dat\manual.chm::/314120050228112651.htm ::return $Result; } } catch Exception { ::qw::throw [::qw::exception::parent $Exception "Encountered error in link with args $args"]; } } method link_2_30_3 {args} { #ms-its:c:/rwb20_help_chm/nv2.chm::/314120040421124256.htm#314120040828145116 /* {This should link to a page in the old help chm.
*/ } /* { Example in manual.qw_help to link to another page within manual. See the [link .id 150220040811161430 {[bold "Executive Summary"]}] for a brief overview. Example in error help to link to page in manual.chm (link is wrapped in list item). [li {[link .chm $::qw_manual_file .id 314120050422104251 {More on Versions and Updating}]}] The major difference is that the error help is dynamic and can find the chm file. Link Problem: Suppose a workshop chm includes a page from the manual that links to a another page that is in the manual but not the workshop. What we do is check whether the target page is a hit on the tags, and if it isn't then we do not attempt the link. If we could figure out the target chm file we could attempt the link but we still will not know what directory it will be in on a user machine. If we happen to know that the target page is also included in the workshop then we could link to that page in the workshop. This might actually work, but to do so we will have to manage the includes. The link to a page looks like: ...body... The link to bookmark 314120091231235959 within a page looks like: ...body... */ } ::qw::try { ::set s_args [::lrange $args 0 end-1]; ::set Body [::lindex $args end]; ::set TargetId [::sargs::get $s_args .id]; ::if {$TargetId eq ""} { ::qw::throw "Expected an \".id\"."; } ::set ThisPageId [qw_s_args .id]; ::set Compiler [qw_s_args .chtml.compiler]; ::if {$Compiler ne "" && ![::sargs::exists $s_args .chm]} { /* { We check to ensure the target page exists. However, if .chm is specified then the page is in another file and we cannot check. For example, we are linking from an error message into the manual. */ } ::set Page [$Compiler chtml_page_from_id $s_args]; ::if {$Page eq ""} { /* { The target page does not exist. */ } ::qw::throw "Help page \"$ThisPageId\" attempted to link to non-existing page \"$TargetId\"."; } ::if {![$Compiler chtml_page_tags_hit $Page]} { /* { We found the page but it is not a hit on the tags. We put out a a warning and return the text, but the link is disabled. */ } ::qw::warning 314120050519084214 "Help page \"$ThisPageId\" linked to page \"$TargetId\" that is not a hit on the tags."; ::return [::subst $Body]; } } ::set Result "" ::append Result [::subst $Body]; ::append Result "" #mk:@MSITStore:D:\Nv\demo_inv\nv2.dat\manual.chm::/314120050228112651.htm ::return $Result; } catch Exception { ::qw::throw [::qw::exception::parent $Exception "Encountered error in link with args $args"]; } } method link_2.30.3 {args} { #ms-its:c:/rwb20_help_chm/nv2.chm::/314120040421124256.htm#314120040828145116 /* {This should link to a page in the old help chm.
*/ } /* { Example in manual.qw_help to link to another page within manual. See the [link .id 150220040811161430 {[bold "Executive Summary"]}] for a brief overview. Example in error help to link to page in manual.chm (link is wrapped in list item). [li {[link .chm $::qw_manual_file .id 314120050422104251 {More on Versions and Updating}]}] The major difference is that the error help is dynamic and can find the chm file. Link Problem: Suppose a workshop chm includes a page from the manual that links to a another page that is in the manual but not the workshop. What we do is check whether the target page is a hit on the tags, and if it isn't then we do not attempt the link. If we could figure out the target chm file we could attempt the link but we still will not know what directory it will be in on a user machine. If we happen to know that the target page is also included in the workshop then we could link to that page in the workshop. This might actually work, but to do so we will have to manage the includes. The link to a page looks like: ...body... The link to bookmark 314120091231235959 within a page looks like: ...body... */ } ::qw::try { ::set s_args [::lrange $args 0 end-1]; ::set Body [::lindex $args end]; ::set TargetId [::sargs::get $s_args .id]; ::if {$TargetId eq ""} { ::qw::throw "Expected an \".id\"."; } ::set ThisPageId [qw_s_args .id]; ::set Compiler [qw_s_args .chtml.compiler]; ::if {$Compiler ne "" && ![::sargs::exists $s_args .chm]} { /* { We check to ensure the target page exists. However, if .chm is specified then the page is in another file and we cannot check. For example, we are linking from an error message into the manual. */ } ::set Page [$Compiler chtml_page_from_id $s_args]; ::if {$Page eq ""} { /* { The target page does not exist. */ } ::qw::throw "Help page \"$ThisPageId\" attempted to link to non-existing page \"$TargetId\"."; } ::if {![$Compiler chtml_page_tags_hit $Page]} { /* { We found the page but it is not a hit on the tags. We put out a a warning and return the text, but the link is disabled. */ } ::qw::warning 314120050519084214 "Help page \"$ThisPageId\" linked to page \"$TargetId\" that is not a hit on the tags."; ::return [::subst $Body]; } } ::set Result "" ::append Result [::subst $Body]; ::append Result "" #mk:@MSITStore:D:\Nv\demo_inv\nv2.dat\manual.chm::/314120050228112651.htm ::return $Result; } catch Exception { ::qw::throw [::qw::exception::parent $Exception "Encountered error in link with args $args"]; } } /* { method link {args} { ::qw::try { ::set s_args [::lrange $args 0 end-1]; ::set Body [::lindex $args end]; ::if {[::sargs::get $s_args .id] eq ""} { ::qw::throw "Expected an \".id\"."; } ::append Result "" ::append Result [::subst $Body]; ::append Result "" ::return $Result; } catch Exception { ::qw::throw [::qw::exception::parent $Exception "Encountered error in link with args $args"]; } } */ } method bookmark {args} { ::qw::try { ::set Body ""; ::if {[::expr {[::llength $args]%2}]} { /* { If odd args then body is last arg and first even-numbered args are the s_args. */ } ::set Body [::lindex $args end]; ::set args [::lrange $args 0 end-1]; } ::qw::s_args_marshal; # ::set s_args [::lrange $args 0 end-1]; # ::set Body [::lindex $args end]; ::if {[::sargs::get $s_args .id] eq ""} { ::qw::throw "Expected an \".id\"."; } ::append Result "" ::append Result [::subst $Body]; ::append Result "" ::return $Result; } catch Exception { ::qw::throw [::qw::exception::parent $Exception "Encountered error in bookmark with args $args"]; } } method qw_include_file {args} { /* { Motivation: Areas like backing up are very similar if not identical in various manuals. So we want one copy of this common code. (1) Including a singlw page. (2) Including a page sub-structure. (3) Including text within a page. (4) Links */ } } method qw_include {args} { #ms-its:c:/cpp/manual/manual_nv2.chm::/314120040421124256.htm#314120040828145116 /* {This should link to a page in the old help chm.
*/ } /* { We want to get the body of another page and render it in-line. What I would like to do is get the other page now and render it in this context. That would eliminate the need to actually process the page. But it has to be in the overall help structure. Motivation: We want to create a workshop manual that "includes" page from the user manual and does not require us to process the user manual. One way we can do this is to render the user manual but not eject its pages, based on tags. If it is necessary to render the included page then we have to process it and simply not Problem: If the included page has links to other pages that are not going to be produced, we will have dangling links. Solution (1) Produce the user and workshop manuals together. The link in the workshop will still link to the manual. (2) "unlink" all dangling links. */ } ::qw::try { /* { ::if {[::string first tag_workshop [qw_s_args .tags]]<0} { ::puts "_s_args==[::sargs::format .structure $_s_args]" ::puts "qw_s_args .tags==[qw_s_args .tags]" ::qw::bug 314120050713154627 "Encountered qw_include in non-workshop page with title [qw_s_args .title]." } */ } ::set s_args $args; ::set Id [::sargs::get $s_args .id]; ::if {$Id eq ""} { ::qw::throw "Encountered empty .id."; } ::set Compiler [qw_s_args .chtml.compiler]; ::if {$Compiler eq ""} { ::qw::throw "Called qw_include without a compiler."; } ::set Page [$Compiler chtml_page_from_id $s_args]; ::if {$Page eq ""} { ::qw::throw "Could not find page with id \"$Id\"."; } ::set Body [::sargs::get $Page .body]; ::set Result [::subst $Body]; ::return $Result; } catch Exception { ::qw::throw [::qw::exception::parent $Exception "Encountered error in qw_include with args $args"]; } } method font_tag {args} { ::set Result ""; ::set Font [::sargs::get $args .font]; ::if {$Font eq ""} {::return $Result;} ::if {[::sargs::get $Font .size] ne ""} { ::append Result " font-size: [::sargs::get $Font .size]"; } ::if {[::sargs::get $Font .style] ne ""} { ::append Result " font-style: [::sargs::get $Font .style]"; } ::if {[::sargs::get $Font .family] ne ""} { ::append Result " font-family: [::sargs::get $Font .family]"; } ::if {[::sargs::get $Font .weight] ne ""} { ::append Result " font-weight: [::sargs::get $Font .weight]"; } } method common_table_attributes {s_args} { ::set Result ""; ::if {[::sargs::get $s_args .width] ne ""} { ::append Result " width=\"[::sargs::get $s_args .width]\""; } ::if {[::sargs::get $s_args .height] ne ""} { ::append Result " height=\"[::sargs::get $s_args .height]\""; } ::if {[::sargs::get $s_args .align] ne ""} { ::switch -- [::sargs::get $s_args .align] { center - char - top - bottom - left - right { } default { ::qw::throw "Could not recognize .align value \"[::sargs::get $s_args .align]\"."; } } ::append Result " align=\"[::sargs::get $s_args .align]\""; } ::return $Result; } method table {args} { /* { .border { .cellspacing .cellpadding } .width .height */ } ::set Tag table; ::qw::try { ::set Body [::lindex $args end]; # ::set Attributes [::lrange $args 0 end-1]; ::eval ::sargs::var::set Attributes [::lrange $args 0 end-1]; if {$Attributes ne "" && [::sargs::is_primitive $Attributes]} { ::qw::throw "Expected a well-formed list of name/value pairs."; } ::set Result "<$Tag"; ::set Border [::sargs::get $Attributes .border]; ::append Result " border"; ::set CellSpacing 0; ::set CellPadding 5; ::if {$Border ne ""} { ::if {[::sargs::get $Border .width] ne ""} { ::append Result "=[::sargs::get $Border .width]"; } ::if {[::sargs::get $Border .cellspacing] ne ""} { ::set CellSpacing [::sargs::integer_get $Border .cellspacing]; } ::if {[::sargs::get $Border .cellpadding] ne ""} { ::set CellPadding [::sargs::integer_get $Border .cellpadding]; } } ::append Result " cellspacing=\"$CellSpacing\""; ::append Result " cellpadding=\"$CellPadding\""; ::append Result [common_table_attributes $Attributes]; ::append Result ">\n"; ::append Result [list_to_string [::subst $Body]]; ::append Result "$Tag>\n"; ::return $Result; } catch Exception { ::qw::throw [::qw::exception::parent $Exception "Encountered error in $Tag method with args \"$args\"."]; } } method th {args} { /* { table row tag .width .height */ } ::set Tag th; ::qw::try { ::set Body [::lindex $args end]; ::set Attributes [::lrange $args 0 end-1]; ::set Result "<$Tag"; if {$Attributes ne "" && [::sargs::is_primitive $Attributes]} { ::qw::throw "Expected a well-formed list of name/value pairs."; } /* { ::if {[::sargs::get $Attributes .colspan] ne ""} { ::append Result " colspan=\"[::sargs::get $Attributes .colspan]\""; } ::if {[::sargs::get $Attributes .rowspan] ne ""} { ::append Result " rowspan=\"[::sargs::get $Attributes .rowspan]\""; } ::if {[::sargs::get $Attributes .valign] ne ""} { ::append Result " valign=\"[::sargs::get $Attributes .valign]\""; } */ } ::append Result [common_table_attributes $Attributes]; ::if {[::sargs::get $Attributes .rowspan] ne ""} { ::append Result " rowspan=\"[::sargs::get $Attributes .rowspan]\""; } ::if {[::sargs::get $Attributes .colspan] ne ""} { ::append Result " colspan=\"[::sargs::get $Attributes .colspan]\""; } ::if {[::sargs::get $Attributes .valign] ne ""} { ::append Result " valign=\"[::sargs::get $Attributes .valign]\""; } ::append Result ">\n"; ::append Result [list_to_string [::subst $Body]]; ::append Result "$Tag>\n"; ::return $Result; } catch Exception { ::qw::throw [::qw::exception::parent $Exception "Encountered error in $Tag method with args \"$args\"."]; } } method tr {args} { /* { table row tag .width .height */ } ::set Tag tr; ::qw::try { ::set Body [::lindex $args end]; ::set Attributes [::lrange $args 0 end-1]; if {$Attributes ne "" && [::sargs::is_primitive $Attributes]} { ::qw::throw "Expected a well-formed list of name/value pairs."; } ::set Result "<$Tag"; ::append Result [common_table_attributes $Attributes]; ::if {[::sargs::get $Attributes .rowspan] ne ""} { ::append Result " rowspan=\"[::sargs::get $Attributes .rowspan]\""; } ::if {[::sargs::get $Attributes .colspan] ne ""} { ::append Result " colspan=\"[::sargs::get $Attributes .colspan]\""; } ::if {[::sargs::get $Attributes .valign] ne ""} { ::append Result " valign=\"[::sargs::get $Attributes .valign]\""; } ::append Result ">\n"; ::append Result [list_to_string [::subst $Body]]; ::append Result "$Tag>\n"; ::return $Result; } catch Exception { ::qw::throw [::qw::exception::parent $Exception "Encountered error in $Tag method with args \"$args\"."]; } } method td {args} { /* { table cell ??? tag .width .height */ } ::set Tag td; ::qw::try { ::set Body [::lindex $args end]; ::set Attributes [::lrange $args 0 end-1]; if {$Attributes ne "" && [::sargs::is_primitive $Attributes]} { ::qw::throw "Expected a well-formed list of name/value pairs."; } ::set Result "<$Tag"; ::append Result [common_table_attributes $Attributes]; ::if {[::sargs::get $Attributes .rowspan] ne ""} { ::append Result " rowspan=\"[::sargs::get $Attributes .rowspan]\""; } ::if {[::sargs::get $Attributes .colspan] ne ""} { ::append Result " colspan=\"[::sargs::get $Attributes .colspan]\""; } ::if {[::sargs::get $Attributes .valign] ne ""} { ::append Result " valign=\"[::sargs::get $Attributes .valign]\""; } ::if {[::sargs::get $Attributes .align] ne ""} { ::switch -- [::sargs::get $Attributes .align] { center - char - top - bottom - left - right { } default { ::qw::throw "Could not recognize .align value \"[::sargs::get $Attributes .align]\"."; } } ::append Result " align=\"[::sargs::get $Attributes .align]\""; } ::append Result ">\n"; ::append Result [list_to_string [::subst $Body]]; /* { By adding a
|
Format |
Examples |
|
mm/dd?/yy? |
02/26/04 or 02/26 |
|
monthname dd ?,yy? |
February 26, 04 or Feb 26, 04 or Feb 26 |
|
dd monthname ?yy? |
26 February 04 or 26 Feb or 26 Feb |
|
day, dd monthname yy |
Thursday, 26 February 04 or Thu, 26 Feb 04 |
|
?CC?yymmdd |
20040226 or 040226 |
|
?CC?yy-mm-dd |
2004-02-26 or 04-02-26 |
|
dd-monthname-?CC?yy |
26-February-2004 or 26-Feb-04 |