Skip to content

Commit 44631be

Browse files
committed
Added support for more formats of dates extraction from titles
- \[dd-mm-yyyy] and \[mm-dd-yyyy] - main README.md updated accordingly
1 parent ac263a7 commit 44631be

File tree

4 files changed

+45
-2
lines changed

4 files changed

+45
-2
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ The list of automatic sorting orders includes:
175175
- `\R+`, `\.R+` or `\-R+` for Roman numbers
176176
- `\d+`, `\.d+` or `\-d+` for plain numbers or compound plain numbers
177177
- `\a+` to extract the last word from title
178-
- `\[yyyy-mm-dd]`, `\[yyyy-dd-mm]`, `\[dd-Mmm-yyyy]`, `\[Mmm-dd-yyyy]`, `\[yyyy-Www (mm-dd)]`, `\[yyyy-Www]` or `\[yyyy-WwwISO]` to extract dates in various formats
178+
- `\[yyyy-mm-dd]`, `\[yyyy-dd-mm]`, `\[dd-Mmm-yyyy]`, `\[mm-dd-yyyy]`, `\[dd-mm-yyyy]`, `\[Mmm-dd-yyyy]`, `\[yyyy-Www (mm-dd)]`, `\[yyyy-Www]` or `\[yyyy-WwwISO]` to extract dates in various formats
179179

180180
## Sorting by note name and note name with file extension
181181

src/custom-sort/matchers.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ export const CompoundNumberDashRegexStr: string = ' *(\\d+(?:-\\d+)*)'; // Compo
1313
export const Date_yyyy_mm_dd_RegexStr: string = ' *(\\d{4}-[0-3]*[0-9]-[0-3]*[0-9])'
1414
export const Date_yyyy_dd_mm_RegexStr: string = Date_yyyy_mm_dd_RegexStr
1515

16+
export const Date_mm_dd_yyyy_RegexStr: string = ' *([0-3]*[0-9]-[0-3]*[0-9]-\\d{4})'
17+
export const Date_dd_mm_yyyy_RegexStr: string = Date_mm_dd_yyyy_RegexStr
18+
1619
export const Date_dd_Mmm_yyyy_RegexStr: string = ' *([0-3]*[0-9]-(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\\d{4})'; // Date like 01-Jan-2020
1720
export const Date_Mmm_dd_yyyy_RegexStr: string = ' *((?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-[0-3]*[0-9]-\\d{4})'; // Date like Jan-01-2020
1821

@@ -138,6 +141,8 @@ export function getNormalizedDate_NormalizerFn_for(separator: string, dayIdx: nu
138141

139142
export const getNormalizedDate_yyyy_mm_dd_NormalizerFn = getNormalizedDate_NormalizerFn_for('-', 2, 1, 0)
140143
export const getNormalizedDate_yyyy_dd_mm_NormalizerFn = getNormalizedDate_NormalizerFn_for('-', 1, 2, 0)
144+
export const getNormalizedDate_mm_dd_yyyy_NormalizerFn = getNormalizedDate_NormalizerFn_for('-', 1, 0, 2)
145+
export const getNormalizedDate_dd_mm_yyyy_NormalizerFn = getNormalizedDate_NormalizerFn_for('-', 0, 1, 2)
141146
export const getNormalizedDate_dd_Mmm_yyyy_NormalizerFn = getNormalizedDate_NormalizerFn_for('-', 0, 1, 2, MONTHS)
142147
export const getNormalizedDate_Mmm_dd_yyyy_NormalizerFn = getNormalizedDate_NormalizerFn_for('-', 1, 0, 2, MONTHS)
143148

src/custom-sort/sorting-spec-processor.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,19 @@ import {
1717
CompoundRomanNumberDashRegexStr,
1818
CompoundRomanNumberDotRegexStr,
1919
DASH_SEPARATOR,
20+
Date_dd_mm_yyyy_RegexStr,
2021
Date_dd_Mmm_yyyy_RegexStr,
22+
Date_mm_dd_yyyy_RegexStr,
2123
Date_Mmm_dd_yyyy_RegexStr,
2224
Date_yyyy_dd_mm_RegexStr,
2325
Date_yyyy_mm_dd_RegexStr,
2426
Date_yyyy_Www_mm_dd_RegexStr,
2527
Date_yyyy_Www_RegexStr,
2628
Date_yyyy_WwwISO_RegexStr,
2729
DOT_SEPARATOR,
30+
getNormalizedDate_dd_mm_yyyy_NormalizerFn,
2831
getNormalizedDate_dd_Mmm_yyyy_NormalizerFn,
32+
getNormalizedDate_mm_dd_yyyy_NormalizerFn,
2933
getNormalizedDate_Mmm_dd_yyyy_NormalizerFn,
3034
getNormalizedDate_yyyy_dd_mm_NormalizerFn,
3135
getNormalizedDate_yyyy_mm_dd_NormalizerFn,
@@ -363,6 +367,8 @@ const Date_yyyy_mm_dd_RegexSymbol: string = '\\[yyyy-mm-dd]'
363367
const Date_yyyy_dd_mm_RegexSymbol: string = '\\[yyyy-dd-mm]'
364368
const Date_dd_Mmm_yyyy_RegexSymbol: string = '\\[dd-Mmm-yyyy]'
365369
const Date_Mmm_dd_yyyy_RegexSymbol: string = '\\[Mmm-dd-yyyy]'
370+
const Date_dd_mm_yyyy_RegexSymbol: string = '\\[dd-mm-yyyy]'
371+
const Date_mm_dd_yyyy_RegexSymbol: string = '\\[mm-dd-yyyy]'
366372
const Date_yyyy_Www_mm_dd_RegexSymbol: string = '\\[yyyy-Www (mm-dd)]'
367373
const Date_yyyy_Www_RegexSymbol: string = '\\[yyyy-Www]'
368374
const Date_yyyy_WwwISO_RegexSymbol: string = '\\[yyyy-WwwISO]'
@@ -389,6 +395,8 @@ const sortingSymbolsArr: Array<string> = [
389395
escapeRegexUnsafeCharacters(Date_yyyy_dd_mm_RegexSymbol),
390396
escapeRegexUnsafeCharacters(Date_dd_Mmm_yyyy_RegexSymbol),
391397
escapeRegexUnsafeCharacters(Date_Mmm_dd_yyyy_RegexSymbol),
398+
escapeRegexUnsafeCharacters(Date_dd_mm_yyyy_RegexSymbol),
399+
escapeRegexUnsafeCharacters(Date_mm_dd_yyyy_RegexSymbol),
392400
escapeRegexUnsafeCharacters(Date_yyyy_Www_mm_dd_RegexSymbol),
393401
escapeRegexUnsafeCharacters(Date_yyyy_WwwISO_RegexSymbol),
394402
escapeRegexUnsafeCharacters(Date_yyyy_Www_RegexSymbol),
@@ -463,6 +471,8 @@ export const Date_yyyy_mm_dd_NormalizerFn: NormalizerFn = (s: string) => getNorm
463471
export const Date_yyyy_dd_mm_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_yyyy_dd_mm_NormalizerFn(s)
464472
export const Date_dd_Mmm_yyyy_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_dd_Mmm_yyyy_NormalizerFn(s)
465473
export const Date_Mmm_dd_yyyy_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_Mmm_dd_yyyy_NormalizerFn(s)
474+
export const Date_dd_mm_yyyy_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_dd_mm_yyyy_NormalizerFn(s)
475+
export const Date_mm_dd_yyyy_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_mm_dd_yyyy_NormalizerFn(s)
466476
export const Date_yyyy_Www_mm_dd_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_yyyy_Www_mm_dd_NormalizerFn(s)
467477
export const Date_yyyy_WwwISO_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_yyyy_WwwISO_NormalizerFn(s)
468478
export const Date_yyyy_Www_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_yyyy_Www_NormalizerFn(s)
@@ -481,6 +491,8 @@ export enum AdvancedRegexType {
481491
Date_yyyy_dd_mm,
482492
Date_dd_Mmm_yyyy,
483493
Date_Mmm_dd_yyyy,
494+
Date_dd_mm_yyyy,
495+
Date_mm_dd_yyyy,
484496
Date_yyyy_Www_mm_dd_yyyy,
485497
Date_yyyy_WwwISO,
486498
Date_yyyy_Www
@@ -548,6 +560,16 @@ const sortingSymbolToRegexpStr: { [key: string]: RegExpSpecStr } = {
548560
normalizerFn: Date_Mmm_dd_yyyy_NormalizerFn,
549561
advancedRegexType: AdvancedRegexType.Date_Mmm_dd_yyyy
550562
},
563+
[Date_dd_mm_yyyy_RegexSymbol]: { // Intentionally retain character case
564+
regexpStr: Date_dd_mm_yyyy_RegexStr,
565+
normalizerFn: Date_dd_mm_yyyy_NormalizerFn,
566+
advancedRegexType: AdvancedRegexType.Date_dd_mm_yyyy
567+
},
568+
[Date_mm_dd_yyyy_RegexSymbol]: { // Intentionally retain character case
569+
regexpStr: Date_mm_dd_yyyy_RegexStr,
570+
normalizerFn: Date_mm_dd_yyyy_NormalizerFn,
571+
advancedRegexType: AdvancedRegexType.Date_mm_dd_yyyy
572+
},
551573
[Date_yyyy_Www_mm_dd_RegexSymbol]: { // Intentionally retain character case
552574
regexpStr: Date_yyyy_Www_mm_dd_RegexStr,
553575
normalizerFn: Date_yyyy_Www_mm_dd_NormalizerFn,

src/test/unit/sorting-spec-processor.spec.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import {
55
ConsumedFolderMatchingRegexp,
66
consumeFolderByRegexpExpression,
77
convertPlainStringToRegex,
8+
Date_dd_mm_yyyy_NormalizerFn,
89
Date_dd_Mmm_yyyy_NormalizerFn,
10+
Date_mm_dd_yyyy_NormalizerFn,
911
Date_Mmm_dd_yyyy_NormalizerFn,
1012
Date_yyyy_dd_mm_NormalizerFn,
1113
Date_yyyy_mm_dd_NormalizerFn,
@@ -387,6 +389,8 @@ Week number interpreted in ISO standard \\[yyyy-WwwISO]
387389
Week number interpreted in U.S. standard \\[yyyy-Www]
388390
\\[yyyy-mm-dd] plain spec 1
389391
\\[yyyy-dd-mm] plain spec 2
392+
\\[dd-mm-yyyy] plain spec 3
393+
\\[mm-dd-yyyy] plain spec 4
390394
`
391395

392396
const expectedSortSpecsExampleSortingSymbols: { [key: string]: CustomSortSpec } = {
@@ -479,11 +483,23 @@ const expectedSortSpecsExampleSortingSymbols: { [key: string]: CustomSortSpec }
479483
regex: /^ *(\d{4}-[0-3]*[0-9]-[0-3]*[0-9]) plain spec 2$/i,
480484
normalizerFn: Date_yyyy_dd_mm_NormalizerFn
481485
}
486+
}, {
487+
type: CustomSortGroupType.ExactName,
488+
regexPrefix: {
489+
regex: /^ *([0-3]*[0-9]-[0-3]*[0-9]-\d{4}) plain spec 3$/i,
490+
normalizerFn: Date_dd_mm_yyyy_NormalizerFn
491+
}
492+
}, {
493+
type: CustomSortGroupType.ExactName,
494+
regexPrefix: {
495+
regex: /^ *([0-3]*[0-9]-[0-3]*[0-9]-\d{4}) plain spec 4$/i,
496+
normalizerFn: Date_mm_dd_yyyy_NormalizerFn
497+
}
482498
}, {
483499
type: CustomSortGroupType.Outsiders
484500
}],
485501
targetFoldersPaths: ['mock-folder'],
486-
outsidersGroupIdx: 14
502+
outsidersGroupIdx: 16
487503
}
488504
}
489505

0 commit comments

Comments
 (0)