Skip to content

Commit

Permalink
Added support for more formats of dates extraction from titles
Browse files Browse the repository at this point in the history
- \[dd-mm-yyyy] and \[mm-dd-yyyy]
- main README.md updated accordingly
  • Loading branch information
SebastianMC committed Jan 23, 2025
1 parent ac263a7 commit 44631be
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 2 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ The list of automatic sorting orders includes:
- `\R+`, `\.R+` or `\-R+` for Roman numbers
- `\d+`, `\.d+` or `\-d+` for plain numbers or compound plain numbers
- `\a+` to extract the last word from title
- `\[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
- `\[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

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

Expand Down
5 changes: 5 additions & 0 deletions src/custom-sort/matchers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ export const CompoundNumberDashRegexStr: string = ' *(\\d+(?:-\\d+)*)'; // Compo
export const Date_yyyy_mm_dd_RegexStr: string = ' *(\\d{4}-[0-3]*[0-9]-[0-3]*[0-9])'
export const Date_yyyy_dd_mm_RegexStr: string = Date_yyyy_mm_dd_RegexStr

export const Date_mm_dd_yyyy_RegexStr: string = ' *([0-3]*[0-9]-[0-3]*[0-9]-\\d{4})'
export const Date_dd_mm_yyyy_RegexStr: string = Date_mm_dd_yyyy_RegexStr

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
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

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

export const getNormalizedDate_yyyy_mm_dd_NormalizerFn = getNormalizedDate_NormalizerFn_for('-', 2, 1, 0)
export const getNormalizedDate_yyyy_dd_mm_NormalizerFn = getNormalizedDate_NormalizerFn_for('-', 1, 2, 0)
export const getNormalizedDate_mm_dd_yyyy_NormalizerFn = getNormalizedDate_NormalizerFn_for('-', 1, 0, 2)
export const getNormalizedDate_dd_mm_yyyy_NormalizerFn = getNormalizedDate_NormalizerFn_for('-', 0, 1, 2)
export const getNormalizedDate_dd_Mmm_yyyy_NormalizerFn = getNormalizedDate_NormalizerFn_for('-', 0, 1, 2, MONTHS)
export const getNormalizedDate_Mmm_dd_yyyy_NormalizerFn = getNormalizedDate_NormalizerFn_for('-', 1, 0, 2, MONTHS)

Expand Down
22 changes: 22 additions & 0 deletions src/custom-sort/sorting-spec-processor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,19 @@ import {
CompoundRomanNumberDashRegexStr,
CompoundRomanNumberDotRegexStr,
DASH_SEPARATOR,
Date_dd_mm_yyyy_RegexStr,
Date_dd_Mmm_yyyy_RegexStr,
Date_mm_dd_yyyy_RegexStr,
Date_Mmm_dd_yyyy_RegexStr,
Date_yyyy_dd_mm_RegexStr,
Date_yyyy_mm_dd_RegexStr,
Date_yyyy_Www_mm_dd_RegexStr,
Date_yyyy_Www_RegexStr,
Date_yyyy_WwwISO_RegexStr,
DOT_SEPARATOR,
getNormalizedDate_dd_mm_yyyy_NormalizerFn,
getNormalizedDate_dd_Mmm_yyyy_NormalizerFn,
getNormalizedDate_mm_dd_yyyy_NormalizerFn,
getNormalizedDate_Mmm_dd_yyyy_NormalizerFn,
getNormalizedDate_yyyy_dd_mm_NormalizerFn,
getNormalizedDate_yyyy_mm_dd_NormalizerFn,
Expand Down Expand Up @@ -363,6 +367,8 @@ const Date_yyyy_mm_dd_RegexSymbol: string = '\\[yyyy-mm-dd]'
const Date_yyyy_dd_mm_RegexSymbol: string = '\\[yyyy-dd-mm]'
const Date_dd_Mmm_yyyy_RegexSymbol: string = '\\[dd-Mmm-yyyy]'
const Date_Mmm_dd_yyyy_RegexSymbol: string = '\\[Mmm-dd-yyyy]'
const Date_dd_mm_yyyy_RegexSymbol: string = '\\[dd-mm-yyyy]'
const Date_mm_dd_yyyy_RegexSymbol: string = '\\[mm-dd-yyyy]'
const Date_yyyy_Www_mm_dd_RegexSymbol: string = '\\[yyyy-Www (mm-dd)]'
const Date_yyyy_Www_RegexSymbol: string = '\\[yyyy-Www]'
const Date_yyyy_WwwISO_RegexSymbol: string = '\\[yyyy-WwwISO]'
Expand All @@ -389,6 +395,8 @@ const sortingSymbolsArr: Array<string> = [
escapeRegexUnsafeCharacters(Date_yyyy_dd_mm_RegexSymbol),
escapeRegexUnsafeCharacters(Date_dd_Mmm_yyyy_RegexSymbol),
escapeRegexUnsafeCharacters(Date_Mmm_dd_yyyy_RegexSymbol),
escapeRegexUnsafeCharacters(Date_dd_mm_yyyy_RegexSymbol),
escapeRegexUnsafeCharacters(Date_mm_dd_yyyy_RegexSymbol),
escapeRegexUnsafeCharacters(Date_yyyy_Www_mm_dd_RegexSymbol),
escapeRegexUnsafeCharacters(Date_yyyy_WwwISO_RegexSymbol),
escapeRegexUnsafeCharacters(Date_yyyy_Www_RegexSymbol),
Expand Down Expand Up @@ -463,6 +471,8 @@ export const Date_yyyy_mm_dd_NormalizerFn: NormalizerFn = (s: string) => getNorm
export const Date_yyyy_dd_mm_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_yyyy_dd_mm_NormalizerFn(s)
export const Date_dd_Mmm_yyyy_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_dd_Mmm_yyyy_NormalizerFn(s)
export const Date_Mmm_dd_yyyy_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_Mmm_dd_yyyy_NormalizerFn(s)
export const Date_dd_mm_yyyy_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_dd_mm_yyyy_NormalizerFn(s)
export const Date_mm_dd_yyyy_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_mm_dd_yyyy_NormalizerFn(s)
export const Date_yyyy_Www_mm_dd_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_yyyy_Www_mm_dd_NormalizerFn(s)
export const Date_yyyy_WwwISO_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_yyyy_WwwISO_NormalizerFn(s)
export const Date_yyyy_Www_NormalizerFn: NormalizerFn = (s: string) => getNormalizedDate_yyyy_Www_NormalizerFn(s)
Expand All @@ -481,6 +491,8 @@ export enum AdvancedRegexType {
Date_yyyy_dd_mm,
Date_dd_Mmm_yyyy,
Date_Mmm_dd_yyyy,
Date_dd_mm_yyyy,
Date_mm_dd_yyyy,
Date_yyyy_Www_mm_dd_yyyy,
Date_yyyy_WwwISO,
Date_yyyy_Www
Expand Down Expand Up @@ -548,6 +560,16 @@ const sortingSymbolToRegexpStr: { [key: string]: RegExpSpecStr } = {
normalizerFn: Date_Mmm_dd_yyyy_NormalizerFn,
advancedRegexType: AdvancedRegexType.Date_Mmm_dd_yyyy
},
[Date_dd_mm_yyyy_RegexSymbol]: { // Intentionally retain character case
regexpStr: Date_dd_mm_yyyy_RegexStr,
normalizerFn: Date_dd_mm_yyyy_NormalizerFn,
advancedRegexType: AdvancedRegexType.Date_dd_mm_yyyy
},
[Date_mm_dd_yyyy_RegexSymbol]: { // Intentionally retain character case
regexpStr: Date_mm_dd_yyyy_RegexStr,
normalizerFn: Date_mm_dd_yyyy_NormalizerFn,
advancedRegexType: AdvancedRegexType.Date_mm_dd_yyyy
},
[Date_yyyy_Www_mm_dd_RegexSymbol]: { // Intentionally retain character case
regexpStr: Date_yyyy_Www_mm_dd_RegexStr,
normalizerFn: Date_yyyy_Www_mm_dd_NormalizerFn,
Expand Down
18 changes: 17 additions & 1 deletion src/test/unit/sorting-spec-processor.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ import {
ConsumedFolderMatchingRegexp,
consumeFolderByRegexpExpression,
convertPlainStringToRegex,
Date_dd_mm_yyyy_NormalizerFn,
Date_dd_Mmm_yyyy_NormalizerFn,
Date_mm_dd_yyyy_NormalizerFn,
Date_Mmm_dd_yyyy_NormalizerFn,
Date_yyyy_dd_mm_NormalizerFn,
Date_yyyy_mm_dd_NormalizerFn,
Expand Down Expand Up @@ -387,6 +389,8 @@ Week number interpreted in ISO standard \\[yyyy-WwwISO]
Week number interpreted in U.S. standard \\[yyyy-Www]
\\[yyyy-mm-dd] plain spec 1
\\[yyyy-dd-mm] plain spec 2
\\[dd-mm-yyyy] plain spec 3
\\[mm-dd-yyyy] plain spec 4
`

const expectedSortSpecsExampleSortingSymbols: { [key: string]: CustomSortSpec } = {
Expand Down Expand Up @@ -479,11 +483,23 @@ const expectedSortSpecsExampleSortingSymbols: { [key: string]: CustomSortSpec }
regex: /^ *(\d{4}-[0-3]*[0-9]-[0-3]*[0-9]) plain spec 2$/i,
normalizerFn: Date_yyyy_dd_mm_NormalizerFn
}
}, {
type: CustomSortGroupType.ExactName,
regexPrefix: {
regex: /^ *([0-3]*[0-9]-[0-3]*[0-9]-\d{4}) plain spec 3$/i,
normalizerFn: Date_dd_mm_yyyy_NormalizerFn
}
}, {
type: CustomSortGroupType.ExactName,
regexPrefix: {
regex: /^ *([0-3]*[0-9]-[0-3]*[0-9]-\d{4}) plain spec 4$/i,
normalizerFn: Date_mm_dd_yyyy_NormalizerFn
}
}, {
type: CustomSortGroupType.Outsiders
}],
targetFoldersPaths: ['mock-folder'],
outsidersGroupIdx: 14
outsidersGroupIdx: 16
}
}

Expand Down

0 comments on commit 44631be

Please sign in to comment.