From 0a0deba91e2cb115e1be09b09cc265ac93755696 Mon Sep 17 00:00:00 2001 From: Alexander Bernardi Date: Sun, 26 Feb 2023 15:27:23 +0100 Subject: [PATCH 1/7] working example Needs further tests --- milDate.sty | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 88 insertions(+), 2 deletions(-) diff --git a/milDate.sty b/milDate.sty index 1c14f32..2befacf 100644 --- a/milDate.sty +++ b/milDate.sty @@ -35,6 +35,8 @@ \int_new:N \__mildate_time_hour_int \int_new:N \__mildate_time_minute_int \tl_new:N \__mildate_date_month_tl +\int_new:N \__mildate_timezone_int +\tl_new:N \__mildate_timezone_tl % Date: Clean delimiters and make simple Validation \cs_new_protected:Npn \__mildate_date_parse:n #1 { @@ -133,6 +135,68 @@ } } +%----------------------------------------------------------------- +% Time zone NATO code according to UTC +\cs_new_protected:Npn \__mildate_timezone_nato:n #1 { + \tl_set:Nx \__mildate_timezone_tl { + \int_case:nnF { #1 } + { + { -12 } { Y } + { -11 } { X } + { -10 } { W } + { -9 } { V } + { -8 } { U } + { -7 } { T } + { -6 } { S } + { -5 } { R } + { -4 } { Q } + { -3 } { P } + { -2 } { O } + { -1 } { N } + { 0 } { Z } + { 1 } { A } + { 2 } { B } + { 3 } { C } + { 4 } { D } + { 5 } { E } + { 6 } { F } + { 7 } { G } + { 8 } { H } + { 9 } { I } + { 10 } { K } + { 11 } { L } + { 12 } { M } + } { ??? } + } + %\__mildate_timezone_tl +} +\cs_generate_variant:Nn \__mildate_timezone_nato:n { V } + +% Time zone abbreviations and their offset to UTC +\cs_new_protected:Npn \__mildate_timezone_abbrev:n #1 { + \int_set:Nn \__mildate_timezone_int { + \str_case:nnF { #1 } + { + { PST } { -8 } % Pacific Standard Time + { PDT } { -7 } % Pacific Daylight Time + { CST } { -6 } % Central Standard Time + { MDT } { -6 } % Mountain Daylight Time + { CDT } { -5 } % Central Daylight Time + { EST } { -5 } % Eastern Standard Time + { GMT } { 0 } % Greenwich Mean Time + { UTC } { 0 } % Universal Time Coordinated + { WET } { 0 } % Western European Time + { CET } { +1 } % Central European Time + { WEST } { +1 } % Western European Summer Time + { CEST } { +2 } % Central European Summer Time + { EET } { +2 } % Eastern European Time + { EEST } { +3 } % Eastern European Summer Time + { TRT } { +3 } % Turkey Time + } { 13 } + } +} +\cs_generate_variant:Nn \__mildate_timezone_abbrev:n { x } + % Fill up integers to two digits \tl_new:N \pad_output_tl \cs_new_protected:Npn \__mildate_padinteger:n #1 { @@ -160,6 +224,27 @@ { \text_uppercase:n { \__mildate_date_month_tl } } } +\seq_new:N \l__mildate_timezone_seq +\cs_new_protected:Npn \__mildate_parse_timezone:n #1 { + \IfValueT {#1} { + \regex_match:nnT { \A [a-i|k-z|A-I|K-Z] \Z } { #1 } + { #1 } + \regex_match:nnT { \A UTC[+-][0-9]{1,2} \Z } { #1 } + { + \regex_extract_once:nnN { UTC([+-][0-9]{1,2}) } { #1 } \__mildate_timezone_seq + \__mildate_timezone_nato:n {\seq_item:Nn \__mildate_timezone_seq {2} } + \__mildate_timezone_tl + } + \regex_match:nnT { \A [a-zA-Z]{2,5} \Z } { #1 } + { + \regex_extract_once:nnN { \A ([a-zA-Z]{2,5}) \Z } { #1 } \__mildate_timezone_seq + \__mildate_timezone_abbrev:x { \seq_item:Nn \__mildate_timezone_seq {2} } + \__mildate_timezone_nato:V \__mildate_timezone_int + \__mildate_timezone_tl + } + } +} + % Set time in military format \NewDocumentCommand\milTime{mo} { \group_begin: @@ -172,7 +257,8 @@ %% minutedefault \__mildate_padinteger:n { \__mildate_time_minute_int } %% timezone - \IfValueT {#2}{\regex_match:nnTF { [a-i|k-z|A-I|K-Z] } { #2 } {#2} {?} } + %\IfValueT {#2}{\regex_match:nnTF { [a-i|k-z|A-I|K-Z] } { #2 } {#2} {?} } + \IfValueT {#2} { \__mildate_parse_timezone:n {#2} } \group_end: } @@ -219,7 +305,7 @@ % insert time \IfNoValueTF {#2} { \milTime{#3}{ \l__mildate_default_timezone_tl} } - {\milTime{#3}[#2] } + { \milTime{#3}[#2] } \kern\l__mildate_kern_dim %% month \__mildate_month_string:n { \__mildate_date_month_int } From 490e515b3cbbc65f1b46a7a31822b30de6f1c512 Mon Sep 17 00:00:00 2001 From: Alexander Bernardi Date: Sun, 26 Feb 2023 17:22:28 +0100 Subject: [PATCH 2/7] added all official and most used timezone abbrev --- milDate.sty | 230 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 229 insertions(+), 1 deletion(-) diff --git a/milDate.sty b/milDate.sty index 2befacf..68c8da1 100644 --- a/milDate.sty +++ b/milDate.sty @@ -177,22 +177,250 @@ \int_set:Nn \__mildate_timezone_int { \str_case:nnF { #1 } { + { BIT } { -12 } % Baker Island Time + { IDLW } { -12 } % International Day Line West time zone + % + { NUT } { -11 } % Niue Time + { SST } { -11 } % Samoa Standard Time + % + { CKT } { -10 } % Cook Island Time + { HST } { -10 } % Hawaii–Aleutian Standard Time + { SDT } { -10 } % Samoa Daylight Time + { TAHT } { -10 } % Tahiti Time + % + %{ MART } { -19.5 } % Marquesas Islands Time + %{ MIT } { -19.5 } % Marquesas Islands Time + % + { AKST } { -9 } % Alaska Standard Time + { GAMT } { -9 } % Gambier Islands Time + { GIT } { -9 } % Gambier Island Time + { HDT } { -9 } % Hawaii–Aleutian Daylight Time + % + { AKDT } { -8 } % Alaska Daylight Time + { CIST } { -8 } % Clipperton Island Standard Time + { HDT } { -8 } % Hawaii–Aleutian Daylight Time { PST } { -8 } % Pacific Standard Time + % + { MST } { -7 } % Mountain Standard Time { PDT } { -7 } % Pacific Daylight Time + % { CST } { -6 } % Central Standard Time + { EAST } { -6 } % Easter Island Standard Time + { GALT } { -6 } % Galápagos Time { MDT } { -6 } % Mountain Daylight Time + % + { ACT } { -5 } % Acre Time { CDT } { -5 } % Central Daylight Time + { COT } { -5 } % Colombia Time + { CST } { -5 } % Cuba Standard Time + { EASST }{ -5 } % Easter Island Summer Time + { ECT } { -5 } % Ecuador Time { EST } { -5 } % Eastern Standard Time + { PET } { -5 } % Peru Time + % + { AMT } { -4 } % Amazon Time + { AST } { -4 } % Atlantic Standard Time + { BOT } { -4 } % Bolivia Time + { CDT } { -4 } % Cuba Daylight Time + { CLT } { -4 } % Chile Standard Time + { COST } { -4 } % Colombia Summer Time + { ECT } { -4 } % Eastern Caribbean Time + { EDT } { -4 } % Eastern Daylight Time + { FKT } { -4 } % Falkland Islands Time + { GYT } { -4 } % Guyana Time + { PYT } { -4 } % Paraguay Time + { VET } { -4 } % Venezuelan Standard Time + % + %{ NST } { -3.5 } % Newfoundland Standard Time + %{ NT } { -3.5 } % Newfoundland Time + % + { ADT } { -3 } % Atlantic Daylight Time + { AMST } { -3 } % Amazon Summer Time + { ART } { -3 } % Argentina Time + { BRT } { -3 } % Brasília Time + { CLST } { -3 } % Chile Summer Time + { FKST } { -3 } % Falkland Islands Summer Time + { GFT } { -3 } % French Guiana Time + { PMST } { -3 } % Saint Pierre and Miquelon Standard Time + { PYST } { -3 } % Paraguay Summer Time + { ROTT } { -3 } % Rothera Research Station Time + { SRT } { -3 } % Suriname Time + { UYT } { -3 } % Uruguay Standard Time + { WGT } { -3 } % West Greenland Time + % + %{ NDT } { -2.5 } % Newfoundland Daylight Time + % + { BRST } { -2 } % Brasília Summer Time + { FNT } { -2 } % Fernando de Noronha Time + { GST } { -2 } % South Georgia and the South Sandwich Islands Time + { PMDT } { -2 } % Saint Pierre and Miquelon Daylight Time + { UYST } { -2 } % Uruguay Summer Time + { WGST } { -2 } % West Greenland Summer Time + % + { AZOT } { -1 } % Azores Standard Time + { CVT } { -1 } % Cape Verde Time + { EGT } { -1 } % Eastern Greenland Time + % + { AZOST }{ 0 } % Azores Summer Time + { EGST } { 0 } % Eastern Greenland Summer Time { GMT } { 0 } % Greenwich Mean Time { UTC } { 0 } % Universal Time Coordinated { WET } { 0 } % Western European Time + % + { BST } { +1 } % British Summer Time { CET } { +1 } % Central European Time + { DFT } { +1 } % Central European Time + { IST } { +1 } % Irish Standard Time + { MET } { +1 } % Middle European Time + { WAT } { +1 } % West Africa Time { WEST } { +1 } % Western European Summer Time + % + { CAT } { +2 } % Central Africa Time { CEST } { +2 } % Central European Summer Time { EET } { +2 } % Eastern European Time + { HAEC } { +2 } % Heure Avancée d'Europe Centrale + { IST } { +2 } % Israel Standard Time + { KALT } { +2 } % Kaliningrad Time + { MEST } { +2 } % Middle European Summer Time + { SAST } { +2 } % South African Standard Time + { WAST } { +2 } % West Africa Summer Time + % + { AST } { +3 } % Arabia Standard Time + { EAT } { +3 } % East Africa Time { EEST } { +3 } % Eastern European Summer Time + { FET } { +3 } % Further-eastern European Time + { IDT } { +3 } % Israel Daylight Time + { IOT } { +3 } % Indian Ocean Time + { MSK } { +3 } % Moscow Time + { SYOT } { +3 } % Showa Station Time { TRT } { +3 } % Turkey Time - } { 13 } + { VOLT } { +3 } % Volgograd Time + % + %{ IRST } { +3.5 } % Iran Standard Time + % + { AMT } { +4 } % Armenia Time + { AZT } { +4 } % Azerbaijan Time + { GET } { +4 } % Georgia Standard Time + { GST } { +4 } % Gulf Standard Time + { MUT } { +4 } % Mauritius Time + { RET } { +4 } % Réunion Time + { SAMT } { +4 } % Samara Time + { SCT } { +4 } % Seychelles Time + % + { AFT } { +4.5 } % Afghanistan Time + { IRDT } { +4.5 } % Iran Daylight Time + % + { AQTT } { +5 } % Aqtobe Time + { HMT } { +5 } % Heard and McDonald Islands Time + { MAWT } { +5 } % Mawson Station Time + { MVT } { +5 } % Maldives Time + { ORAT } { +5 } % Oral Time + { PKT } { +5 } % Pakistan Standard Time + { TFT } { +5 } % French Southern and Antarctic Time + { TJT } { +5 } % Tajikistan Time + { TMT } { +5 } % Turkmenistan Time + { UZT } { +5 } % Uzbekistan Time + { YEKT } { +5 } % Yekaterinburg Time + % + { IST } { +5.5 } % Indian Standard Time + { SLST } { +5.5 } % Sri Lanka Standard Time + { NPT } { +5.75 } % Nepal Time + % + { ALMT } { +6 } % Alma-Ata Time + { BIOT } { +6 } % British Indian Ocean Time + { BST } { +6 } % Bangladesh Standard Time + { BTT } { +6 } % Bhutan Time + { KGT } { +6 } % Kyrgyzstan Time + { OMST } { +6 } % Omsk Time + { VOST } { +6 } % Vostok Station Time + % + %{ CCT } { +6.5 } % Cocos Islands Time + %{ MMT } { +6.5 } % Myanmar Standard Time + % + { CXT } { +7 } % Christmas Island Time + { DAVT } { +7 } % Davis Time + { HOVT } { +7 } % Hovd Time + { ICT } { +7 } % Indochina Time + { KRAT } { +7 } % Krasnoyarsk Time + { NOVT } { +7 } % Novosibirsk Time + { THA } { +7 } % Thailand Standard Time + { WIB } { +7 } % Western Indonesian Time + % + { AWST } { +8 } % Australian Western Standard Time + { BNT } { +8 } % Brunei Time + { CHOT } { +8 } % Choibalsan Standard Time + { CST } { +8 } % China Standard Time + { HKT } { +8 } % Hong Kong Time + { HOVST }{ +8 } % Hovd Summer Time + { IRKT } { +8 } % Irkutsk Time + { MST } { +8 } % Malaysia Standard Time + { MYT } { +8 } % Malaysia Time + { PHT } { +8 } % Philippine Time + { PHST } { +8 } % Philippine Standard Time + { SGT } { +8 } % Singapore Time + { SST } { +8 } % Singapore Standard Time + { ULAT } { +8 } % Ulaanbaatar Standard Time + { WITA } { +8 } % Central Indonesia Time + { WST } { +8 } % Western Standard Time + % + %{ ACWST }{ +8.75 } % Australian Central Western Standard Time + %{ CWST } { +8.75 } % Central Western Standard Time + % + { CHOST }{ +9 } % Choibalsan Summer Time + { JST } { +9 } % Japan Standard Time + { KST } { +9 } % Korea Standard Time + { PWT } { +9 } % Palau Time + { TLT } { +9 } % Timor Leste Time + { ULAST }{ +9 } % Ulaanbaatar Summer Time + { WIT } { +9 } % Eastern Indonesian Time + { YAKT } { +9 } % Yakutsk Time + % + { ACST } { +9.5 } % Australian Central Standard Time + % + { AEST } { +10 } % Australian Eastern Standard Time + { CHST } { +10 } % Chamorro Standard Time + { CHUT } { +10 } % Chuuk Time + { DDUT } { +10 } % Dumont d'Urville Time + { PGT } { +10 } % Papua New Guinea Time + { VLAT } { +10 } % Vladivostok Time + % + %{ ACDT } { +10.5 } % Australian Central Daylight Saving Time + %{ LHST } { +10.5 } % Lord Howe Standard Time + % + { AEDT } { +11 } % Australian Eastern Daylight Saving Time + { BST } { +11 } % Bougainville Standard Time + { KOST } { +11 } % Kosrae Time + { LHST } { +11 } % Lord Howe Summer Time + { MIST } { +11 } % Macquarie Island Station Time + { NCT } { +11 } % New Caledonia Time + { NFT } { +11 } % Norfolk Island Time + { PONT } { +11 } % Pohnpei Standard Time + { SAKT } { +11 } % Sakhalin Island Time + { SBT } { +11 } % Solomon Islands Time + { SRET } { +11 } % Srednekolymsk Time + { VUT } { +11 } % Vanuatu Time + % + { ANAT } { +12 } % Anadyr Time + { FJT } { +12 } % Fiji Time + { GILT } { +12 } % Gilbert Island Time + { MAGT } { +12 } % Magadan Time + { MHT } { +12 } % Marshall Islands Time + { NZST } { +12 } % New Zealand Standard Time + { PETT } { +12 } % Kamchatka Time + { TVT } { +12 } % Tuvalu Time + { WAKT } { +12 } % Wake Island Time + % + %{ CHAST }{ +12.75 } % Chatham Standard Time + % + { NZDT } { +13 } % New Zealand Daylight Time + { PHOT } { +13 } % Phoenix Island Time + { TKT } { +13 } % Tokelau Time + { TOT } { +13 } % Tonga Time + % + %{ NZDT } { +13.75 } % Chatham Daylight Time + % + { LINT } { +14 } % Line Islands Time + } { 20 } } } \cs_generate_variant:Nn \__mildate_timezone_abbrev:n { x } From 70e2d3b5ae29f12889285284e2ec0ab889dd8cde Mon Sep 17 00:00:00 2001 From: Alexander Bernardi Date: Mon, 27 Feb 2023 13:50:18 +0100 Subject: [PATCH 3/7] still buggy change offset of abbrev to utc format --- milDate.sty | 95 +++++++++++++++++++++++++++++++++++++++-------------- milDate.tex | 21 ++++++++++++ 2 files changed, 91 insertions(+), 25 deletions(-) diff --git a/milDate.sty b/milDate.sty index 68c8da1..4000902 100644 --- a/milDate.sty +++ b/milDate.sty @@ -35,7 +35,7 @@ \int_new:N \__mildate_time_hour_int \int_new:N \__mildate_time_minute_int \tl_new:N \__mildate_date_month_tl -\int_new:N \__mildate_timezone_int +\fp_new:N \__mildate_timezone_fp \tl_new:N \__mildate_timezone_tl % Date: Clean delimiters and make simple Validation @@ -137,9 +137,22 @@ %----------------------------------------------------------------- % Time zone NATO code according to UTC + +\tl_const:Nn \c__mildate_star_tl { * } +\tl_const:Nn \c__mildate_dagger_tl { $^{◆}$ } +\tl_const:Nn \c__mildate_cross_tl { $^{†}$ } + +\int_new:N \__integer_int +\fp_new:N \__fractional_fp \cs_new_protected:Npn \__mildate_timezone_nato:n #1 { + < #1 > + % Get integer part of decimal number + \int_set:Nn \__integer_int { \fp_eval:n { floor((#1),0) } } + % Get fractional part of decimal number + \fp_set:Nn \__fractional_fp { \fp_eval:n { #1 - \__integer_int } } + % Set NATO code according to integer part [-12;+14] \tl_set:Nx \__mildate_timezone_tl { - \int_case:nnF { #1 } + \int_case:nnF { \__integer_int } { { -12 } { Y } { -11 } { X } @@ -165,16 +178,34 @@ { 9 } { I } { 10 } { K } { 11 } { L } - { 12 } { M } + { 12 } { M } + { 13 } { M } % already west of the date line + { 14 } { M } % already west of the date line } { ??? } } - %\__mildate_timezone_tl + | \__mildate_timezone_tl | + i \int_use:N \__integer_int | + f \fp_use:N \__fractional_fp | + % UTC hours above 12 (date line) or odd minutes + \fp_compare:nT { \__integer_int > 12 | \__fractional_fp > 0.0 } + { + ODD| + % UTC west of dateline but full hour + \fp_compare:nT { \__fractional_fp == 0.0 } + { \c__mildate_cross_tl | } + % all UTC up to 30 minutes + \fp_compare:nT { \__fractional_fp > 0.0 & \__fractional_fp <= 0.5 } + { \c__mildate_star_tl | } + % all UTC more than 30 minutes + \fp_compare:nT { \__fractional_fp > 0.5 & \__fractional_fp < 1.0 } + { \c__mildate_dagger_tl | } + } } \cs_generate_variant:Nn \__mildate_timezone_nato:n { V } % Time zone abbreviations and their offset to UTC \cs_new_protected:Npn \__mildate_timezone_abbrev:n #1 { - \int_set:Nn \__mildate_timezone_int { + \fp_set:Nn \__mildate_timezone_fp { \str_case:nnF { #1 } { { BIT } { -12 } % Baker Island Time @@ -188,8 +219,8 @@ { SDT } { -10 } % Samoa Daylight Time { TAHT } { -10 } % Tahiti Time % - %{ MART } { -19.5 } % Marquesas Islands Time - %{ MIT } { -19.5 } % Marquesas Islands Time + { MART } { -19.5 } % Marquesas Islands Time + { MIT } { -19.5 } % Marquesas Islands Time % { AKST } { -9 } % Alaska Standard Time { GAMT } { -9 } % Gambier Islands Time @@ -231,8 +262,8 @@ { PYT } { -4 } % Paraguay Time { VET } { -4 } % Venezuelan Standard Time % - %{ NST } { -3.5 } % Newfoundland Standard Time - %{ NT } { -3.5 } % Newfoundland Time + { NST } { -3.5 } % Newfoundland Standard Time + { NT } { -3.5 } % Newfoundland Time % { ADT } { -3 } % Atlantic Daylight Time { AMST } { -3 } % Amazon Summer Time @@ -248,7 +279,7 @@ { UYT } { -3 } % Uruguay Standard Time { WGT } { -3 } % West Greenland Time % - %{ NDT } { -2.5 } % Newfoundland Daylight Time + { NDT } { -2.5 } % Newfoundland Daylight Time % { BRST } { -2 } % Brasília Summer Time { FNT } { -2 } % Fernando de Noronha Time @@ -296,7 +327,7 @@ { TRT } { +3 } % Turkey Time { VOLT } { +3 } % Volgograd Time % - %{ IRST } { +3.5 } % Iran Standard Time + { IRST } { +3.5 } % Iran Standard Time % { AMT } { +4 } % Armenia Time { AZT } { +4 } % Azerbaijan Time @@ -334,8 +365,8 @@ { OMST } { +6 } % Omsk Time { VOST } { +6 } % Vostok Station Time % - %{ CCT } { +6.5 } % Cocos Islands Time - %{ MMT } { +6.5 } % Myanmar Standard Time + { CCT } { +6.5 } % Cocos Islands Time + { MMT } { +6.5 } % Myanmar Standard Time % { CXT } { +7 } % Christmas Island Time { DAVT } { +7 } % Davis Time @@ -363,8 +394,8 @@ { WITA } { +8 } % Central Indonesia Time { WST } { +8 } % Western Standard Time % - %{ ACWST }{ +8.75 } % Australian Central Western Standard Time - %{ CWST } { +8.75 } % Central Western Standard Time + { ACWST }{ +8.75 } % Australian Central Western Standard Time + { CWST } { +8.75 } % Central Western Standard Time % { CHOST }{ +9 } % Choibalsan Summer Time { JST } { +9 } % Japan Standard Time @@ -384,8 +415,8 @@ { PGT } { +10 } % Papua New Guinea Time { VLAT } { +10 } % Vladivostok Time % - %{ ACDT } { +10.5 } % Australian Central Daylight Saving Time - %{ LHST } { +10.5 } % Lord Howe Standard Time + { ACDT } { +10.5 } % Australian Central Daylight Saving Time + { LHST } { +10.5 } % Lord Howe Standard Time % { AEDT } { +11 } % Australian Eastern Daylight Saving Time { BST } { +11 } % Bougainville Standard Time @@ -410,14 +441,14 @@ { TVT } { +12 } % Tuvalu Time { WAKT } { +12 } % Wake Island Time % - %{ CHAST }{ +12.75 } % Chatham Standard Time + { CHAST } { +12.75 } % Chatham Standard Time % { NZDT } { +13 } % New Zealand Daylight Time { PHOT } { +13 } % Phoenix Island Time { TKT } { +13 } % Tokelau Time { TOT } { +13 } % Tonga Time % - %{ NZDT } { +13.75 } % Chatham Daylight Time + { NZDT } { +13.75 } % Chatham Daylight Time % { LINT } { +14 } % Line Islands Time } { 20 } @@ -452,23 +483,37 @@ { \text_uppercase:n { \__mildate_date_month_tl } } } +\cs_generate_variant:Nn \tl_tail:n { x } +\cs_generate_variant:Nn \tl_if_empty:nTF { x } + \seq_new:N \l__mildate_timezone_seq \cs_new_protected:Npn \__mildate_parse_timezone:n #1 { \IfValueT {#1} { + % NATO Code \regex_match:nnT { \A [a-i|k-z|A-I|K-Z] \Z } { #1 } { #1 } - \regex_match:nnT { \A UTC[+-][0-9]{1,2} \Z } { #1 } + % UTC offset + \regex_match:nnT { \A UTC[+-][0-9]{1,2}(:[0-9]{2})? \Z } { #1 } { - \regex_extract_once:nnN { UTC([+-][0-9]{1,2}) } { #1 } \__mildate_timezone_seq - \__mildate_timezone_nato:n {\seq_item:Nn \__mildate_timezone_seq {2} } - \__mildate_timezone_tl + \regex_extract_once:nnN { UTC([+-][0-9]{1,2}):?([0-9]{2})? } { #1 } \__mildate_timezone_seq + \tl_if_empty:xTF { \seq_item:Nn \__mildate_timezone_seq {3} } + % UTC without minutes + { + \__mildate_timezone_nato:n { \fp_eval:n { \seq_item:Nn \__mildate_timezone_seq {2} * 1.0 } } + } + % UTC with minutes + { + \__mildate_timezone_nato:n { \fp_eval:n { \seq_item:Nn \__mildate_timezone_seq {2} + ( \seq_item:Nn \__mildate_timezone_seq {3} / 60 ) } } + } } + % Abbreviations \regex_match:nnT { \A [a-zA-Z]{2,5} \Z } { #1 } { \regex_extract_once:nnN { \A ([a-zA-Z]{2,5}) \Z } { #1 } \__mildate_timezone_seq \__mildate_timezone_abbrev:x { \seq_item:Nn \__mildate_timezone_seq {2} } - \__mildate_timezone_nato:V \__mildate_timezone_int - \__mildate_timezone_tl + %\seq_item:Nn \__mildate_timezone_seq {2} + \__mildate_timezone_nato:V { \fp_to_decimal:N \__mildate_timezone_fp } + %\__mildate_timezone_tl } } } diff --git a/milDate.tex b/milDate.tex index 8de057e..ee7f0d8 100644 --- a/milDate.tex +++ b/milDate.tex @@ -32,6 +32,27 @@ \begin{document} \maketitle +\section{Test - to be removed} + +Z \milTime{12:30}[Z] \\ +UTC+3 \milTime{11:30}[UTC+3] \\ +UTC-3 \milTime{11:30}[UTC-3] \\ +UTC+03 \milTime{11:30}[UTC+03] \\ +UTC+03:00 \milTime{11:30}[UTC+03:00] \\ +UTC+03:30 \milTime{11:30}[UTC+03:30] \\ +UTC+03:45 \milTime{11:30}[UTC+03:45] \\ +UTC+12:45 \milTime{11:30}[UTC+12:45] \\ +UTC+14:00 \milTime{11:30}[UTC+14:00] \\ +BIT [UTC-12:00] \milTime{11:30}[BIT] \\ +NDT [UTC-02.30] \milTime{11:30}[NDT] \\ +CEST [UTC+02:00] \milTime{11:30}[CEST] \\ +WAKT [UTC+12:00] \milTime{11:30}[WAKT] \\ +CHAST [UTC+12:45] \milTime{11:30}[CHAST] \\ +NZDT [UTC+13:45] \milTime{11:30}[NZDT] \\ +LINT [UTC+14:00] \milTime{11:30}[LINT] \\ + + + \section{Introduction} The \textbf{milDate} Package provides commands for displaying the date and time in NATO format.\par From a72b66a1565a7b17f52696f1133ff532091684f9 Mon Sep 17 00:00:00 2001 From: Alexander Bernardi Date: Mon, 27 Feb 2023 14:07:13 +0100 Subject: [PATCH 4/7] working example --- milDate.sty | 25 ++++++++++++------------- milDate.tex | 4 +++- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/milDate.sty b/milDate.sty index 4000902..dd1a93f 100644 --- a/milDate.sty +++ b/milDate.sty @@ -145,11 +145,13 @@ \int_new:N \__integer_int \fp_new:N \__fractional_fp \cs_new_protected:Npn \__mildate_timezone_nato:n #1 { - < #1 > % Get integer part of decimal number - \int_set:Nn \__integer_int { \fp_eval:n { floor((#1),0) } } + \int_set:Nn \__integer_int { \fp_compare:nTF { #1 >= 0 } + { \fp_eval:n { floor((#1),0) } } + { \fp_eval:n { ceil((#1),0) } } + } % Get fractional part of decimal number - \fp_set:Nn \__fractional_fp { \fp_eval:n { #1 - \__integer_int } } + \fp_set:Nn \__fractional_fp { \fp_eval:n { abs(#1 - \__integer_int) } } % Set NATO code according to integer part [-12;+14] \tl_set:Nx \__mildate_timezone_tl { \int_case:nnF { \__integer_int } @@ -183,22 +185,19 @@ { 14 } { M } % already west of the date line } { ??? } } - | \__mildate_timezone_tl | - i \int_use:N \__integer_int | - f \fp_use:N \__fractional_fp | + \__mildate_timezone_tl % UTC hours above 12 (date line) or odd minutes \fp_compare:nT { \__integer_int > 12 | \__fractional_fp > 0.0 } { - ODD| % UTC west of dateline but full hour \fp_compare:nT { \__fractional_fp == 0.0 } - { \c__mildate_cross_tl | } + { \c__mildate_cross_tl } % all UTC up to 30 minutes \fp_compare:nT { \__fractional_fp > 0.0 & \__fractional_fp <= 0.5 } - { \c__mildate_star_tl | } + { \c__mildate_star_tl } % all UTC more than 30 minutes \fp_compare:nT { \__fractional_fp > 0.5 & \__fractional_fp < 1.0 } - { \c__mildate_dagger_tl | } + { \c__mildate_dagger_tl } } } \cs_generate_variant:Nn \__mildate_timezone_nato:n { V } @@ -219,8 +218,8 @@ { SDT } { -10 } % Samoa Daylight Time { TAHT } { -10 } % Tahiti Time % - { MART } { -19.5 } % Marquesas Islands Time - { MIT } { -19.5 } % Marquesas Islands Time + { MART } { -9.5 } % Marquesas Islands Time + { MIT } { -9.5 } % Marquesas Islands Time % { AKST } { -9 } % Alaska Standard Time { GAMT } { -9 } % Gambier Islands Time @@ -448,7 +447,7 @@ { TKT } { +13 } % Tokelau Time { TOT } { +13 } % Tonga Time % - { NZDT } { +13.75 } % Chatham Daylight Time + { CHADT } { +13.75 } % Chatham Daylight Time % { LINT } { +14 } % Line Islands Time } { 20 } diff --git a/milDate.tex b/milDate.tex index ee7f0d8..ed75235 100644 --- a/milDate.tex +++ b/milDate.tex @@ -44,11 +44,13 @@ \section{Test - to be removed} UTC+12:45 \milTime{11:30}[UTC+12:45] \\ UTC+14:00 \milTime{11:30}[UTC+14:00] \\ BIT [UTC-12:00] \milTime{11:30}[BIT] \\ +MART [UTC-09:30] \milTime{11:30}[MART] \\ NDT [UTC-02.30] \milTime{11:30}[NDT] \\ CEST [UTC+02:00] \milTime{11:30}[CEST] \\ +IRST [UTC+03.30] \milTime{11:30}[IRST] \\ WAKT [UTC+12:00] \milTime{11:30}[WAKT] \\ CHAST [UTC+12:45] \milTime{11:30}[CHAST] \\ -NZDT [UTC+13:45] \milTime{11:30}[NZDT] \\ +NZDT [UTC+13:00] \milTime{11:30}[NZDT] \\ LINT [UTC+14:00] \milTime{11:30}[LINT] \\ From e7b29bdef43182f5a457074eee37ae6a0bb96542 Mon Sep 17 00:00:00 2001 From: Alexander Bernardi Date: Mon, 27 Feb 2023 18:58:04 +0100 Subject: [PATCH 5/7] finished timezones --- milDate.pdf | Bin 42416 -> 44666 bytes milDate.sty | 35 +++++++++++++++++++++-------------- milDate.tex | 36 +++++++++++++----------------------- 3 files changed, 34 insertions(+), 37 deletions(-) diff --git a/milDate.pdf b/milDate.pdf index ae0e85bfd4d64dcbc60eab5b9bfdcebcb98464ca..73b71b2fbbb917c79241c9e2a0f3b4da92a60b48 100644 GIT binary patch delta 27669 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 VuOkFcR9H|*2# 12 | \__fractional_fp > 0.0 } - { - % UTC west of dateline but full hour - \fp_compare:nT { \__fractional_fp == 0.0 } - { \c__mildate_cross_tl } - % all UTC up to 30 minutes - \fp_compare:nT { \__fractional_fp > 0.0 & \__fractional_fp <= 0.5 } - { \c__mildate_star_tl } - % all UTC more than 30 minutes - \fp_compare:nT { \__fractional_fp > 0.5 & \__fractional_fp < 1.0 } - { \c__mildate_dagger_tl } + \bool_if:nT { \l_mildate_dtg_symbol_bool } { + % UTC hours above 12 (date line) or odd minutes + \fp_compare:nT { \__integer_int > 12 | \__fractional_fp > 0.0 } + { + % UTC west of dateline but full hour + \fp_compare:nT { \__fractional_fp == 0.0 } + { \c__mildate_dagger_tl } + % all UTC up to 30 minutes + \fp_compare:nT { \__fractional_fp > 0.0 & \__fractional_fp <= 0.5 } + { \c__mildate_star_tl } + % all UTC more than 30 minutes + \fp_compare:nT { \__fractional_fp > 0.5 & \__fractional_fp < 1.0 } + { \c__mildate_lozenge_tl } + } } } \cs_generate_variant:Nn \__mildate_timezone_nato:n { V } @@ -302,6 +307,7 @@ { DFT } { +1 } % Central European Time { IST } { +1 } % Irish Standard Time { MET } { +1 } % Middle European Time + { MEZ } { +1 } % Mitteleuropäische Zeit { WAT } { +1 } % West Africa Time { WEST } { +1 } % Western European Summer Time % @@ -312,6 +318,7 @@ { IST } { +2 } % Israel Standard Time { KALT } { +2 } % Kaliningrad Time { MEST } { +2 } % Middle European Summer Time + { MESZ } { +2 } % Mitteleuropäische Sommerzeit { SAST } { +2 } % South African Standard Time { WAST } { +2 } % West Africa Summer Time % diff --git a/milDate.tex b/milDate.tex index ed75235..6e3f14d 100644 --- a/milDate.tex +++ b/milDate.tex @@ -32,29 +32,6 @@ \begin{document} \maketitle -\section{Test - to be removed} - -Z \milTime{12:30}[Z] \\ -UTC+3 \milTime{11:30}[UTC+3] \\ -UTC-3 \milTime{11:30}[UTC-3] \\ -UTC+03 \milTime{11:30}[UTC+03] \\ -UTC+03:00 \milTime{11:30}[UTC+03:00] \\ -UTC+03:30 \milTime{11:30}[UTC+03:30] \\ -UTC+03:45 \milTime{11:30}[UTC+03:45] \\ -UTC+12:45 \milTime{11:30}[UTC+12:45] \\ -UTC+14:00 \milTime{11:30}[UTC+14:00] \\ -BIT [UTC-12:00] \milTime{11:30}[BIT] \\ -MART [UTC-09:30] \milTime{11:30}[MART] \\ -NDT [UTC-02.30] \milTime{11:30}[NDT] \\ -CEST [UTC+02:00] \milTime{11:30}[CEST] \\ -IRST [UTC+03.30] \milTime{11:30}[IRST] \\ -WAKT [UTC+12:00] \milTime{11:30}[WAKT] \\ -CHAST [UTC+12:45] \milTime{11:30}[CHAST] \\ -NZDT [UTC+13:00] \milTime{11:30}[NZDT] \\ -LINT [UTC+14:00] \milTime{11:30}[LINT] \\ - - - \section{Introduction} The \textbf{milDate} Package provides commands for displaying the date and time in NATO format.\par @@ -109,6 +86,8 @@ \section{Options} \noindent\marginpar{kern} The individual blocks of the date-time group are set with a small space between them. By default, the \textbf{milDate} package uses 1pt. This spacing can be changed with the \verb+kern+ option if needed. A \emph{kern} is a typographic term for a nonbreakable space between two elements. +\noindent\marginpar{dtg symbol} The boolean option \verb+dtg_symbol+ can be used to manage the display of symbols at odd offsets to the date-time-group. + \section{Commands} \noindent\marginpar{milTime} The \textbf{milTime} command sets the time in 24 hour format hhmm without delimiter. The time zone is optional. @@ -117,6 +96,8 @@ \section{Commands} \begin{tabular}{ll} \verb+\milTime{12:30}[S]+ & \milTime{12:30}[S] \\ % JFK assassinated \verb+\milTime{0238}+ & \milTime{0238} \\ % Titanic hits iceberg +\verb+\milTime{0238}+ & \milTime{0238} \\ % Titanic hits iceberg +\verb+\milTime{0417}[TRT]+ & \milTime{0417}[TRT] \\ % Earthquake Turkey \end{tabular} \medskip\noindent\marginpar{timezone} Time zones are indicated with letters A to I and K to Z. To avoid confusion, J is skipped. Starting from the prime meridian at Greenwich (UTC-0, Greenwich Mean Time \emph{GMT}, Zulu time), counting is eastward from A to M and westward from N to Y. @@ -162,6 +143,15 @@ \section{Commands} \end{tabular} \end{minipage} +\medskip +Furthermore, the time zones can be specified as an offset from UTC (e.g. UTC+03:00) or in abbreviated time zones (e.g. CEST). +For time zones that differ by 30 minutes from the whole hour, the time zone closer to the prime meridian is used and an asterisk (*) is added. For a distance of 45 minutes, a lozenge ($^{◆}$) is added. +Examples are Newfoundland in time zone P* (UTC-03:30), Afghanistan in time zone D* (UTC+04:30) or Nepal in time zone E$^{◆}$ (UTC+05:45). +Exceptions are the M time zones, which are more than 12 hours apart from UTC and are therefore west of the International Date Line. +With a deviation of whole hours they are marked with M$^{†}$, with a difference of 30 minutes as M* and with 45 minutes as M$^{◆}$. +Examples are Line Islands with M$^{†}$ (UTC+14:00) and Chatham Island with M$^{◆}$ (UTC+12:45). +With the global option \verb+dtg_symbol=false+, the display of the symbols can be disabled. + \bigskip\noindent\marginpar{milToday} The \textbf{milToday} command sets the current date in NATO format \noindent\marginpar{milDate} The \textbf{milDate} command sets the date consisting of day, month, year. It can be specified in the format \emph{dd-mm-yyyy} or in the ISO format \emph{yyyy-mm-dd}. For clear distinction, years should be specified with four digits. All non-numeric characters can be used as delimiter. For the current day the macro \verb+\today+ can be used From e58ea695a41421b56222cff534a63f52d7100684 Mon Sep 17 00:00:00 2001 From: Alexander Bernardi Date: Mon, 27 Feb 2023 19:19:52 +0100 Subject: [PATCH 6/7] added license --- LICENSE | 427 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3b7b82d --- /dev/null +++ b/LICENSE @@ -0,0 +1,427 @@ +Attribution-ShareAlike 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More_considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-ShareAlike 4.0 International Public +License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-ShareAlike 4.0 International Public License ("Public +License"). To the extent this Public License may be interpreted as a +contract, You are granted the Licensed Rights in consideration of Your +acceptance of these terms and conditions, and the Licensor grants You +such rights in consideration of benefits the Licensor receives from +making the Licensed Material available under these terms and +conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + l. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + m. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + + including for purposes of Section 3(b); and + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. From 6e8f6d83d89dd0de8c1ec2f81815b000439e686c Mon Sep 17 00:00:00 2001 From: Alexander Bernardi Date: Mon, 27 Feb 2023 19:24:28 +0100 Subject: [PATCH 7/7] updated README --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 87a0dc3..84b5e28 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,14 @@ # milDate The __milDate__ Package provides commands for displaying the date and time in NATO format. This format is used to standardize the communication of dates. + +Shield: [![CC BY-SA 4.0][cc-by-sa-shield]][cc-by-sa] + +This work is licensed under a +[Creative Commons Attribution-ShareAlike 4.0 International License][cc-by-sa]. + +[![CC BY-SA 4.0][cc-by-sa-image]][cc-by-sa] + +[cc-by-sa]: http://creativecommons.org/licenses/by-sa/4.0/ +[cc-by-sa-image]: https://licensebuttons.net/l/by-sa/4.0/88x31.png +[cc-by-sa-shield]: https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg