From 401fda7388441b02d1988ed14007dd78df0b9f9f Mon Sep 17 00:00:00 2001 From: Gio Date: Sat, 22 Jan 2022 14:49:26 -0600 Subject: [PATCH 1/2] Implement sorting options for #665 --- Preferences.sublime-settings | 10 ++++++++++ plugins/references.py | 14 +++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/Preferences.sublime-settings b/Preferences.sublime-settings index 1a8cc009..495725f4 100644 --- a/Preferences.sublime-settings +++ b/Preferences.sublime-settings @@ -40,6 +40,16 @@ // Adds after list items instead of a single . "mde.list_align_text": false, + // MarkdownEditing (References): + // The sorting method used by the Organize References command. + // Should be one of + // + // 'marker_order': List in order of appearance in document + // 'alphabetical': Alphabetical based on reference name, sorting numerals lexagraphically + // 'numeric': Alphabetical based on reference name, sorting numeral chunks numerically + "mde.ref_organize_sort": "marker_order", + "mde.ref_organize_sort_reverse": false, + // MarkdownEditing: // Automatically switches list bullet when indenting blank list item with . "mde.list_indent_auto_switch_bullet": true, diff --git a/plugins/references.py b/plugins/references.py index 962a9c05..ee3f4369 100644 --- a/plugins/references.py +++ b/plugins/references.py @@ -539,9 +539,21 @@ def run(self, edit): flatrefs.append((name, view.substr(line_reg).strip("\n"))) sel.add(line_reg) + sorting_funcs = { + "marker_order": lambda x: marker_order[x[0].lower()] + if x[0].lower() in marker_order + else 9999, + "alphabetical": lambda x: x[0].lower(), + "numeric": lambda x: [ + int(p) if p.isnumeric() else p for p in re.split(r"[ _.-]", x[0].lower()) + ], + } + settings = view.settings() + flatfns.sort(key=operator.itemgetter(0)) flatrefs.sort( - key=lambda x: marker_order[x[0].lower()] if x[0].lower() in marker_order else 9999 + key=sorting_funcs[settings.get("mde.ref_organize_sort", "marker_order")], + reverse=settings.get("mde.ref_organize_sort_reverse", False), ) view.run_command("left_delete") From 221e8ac760502729c5f7c2f2fa35a6ad6196eed0 Mon Sep 17 00:00:00 2001 From: Gio Date: Sat, 22 Jan 2022 14:51:07 -0600 Subject: [PATCH 2/2] Rename 'marker_order' to 'reference_order' --- Preferences.sublime-settings | 4 ++-- plugins/references.py | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Preferences.sublime-settings b/Preferences.sublime-settings index 495725f4..9af577d8 100644 --- a/Preferences.sublime-settings +++ b/Preferences.sublime-settings @@ -44,10 +44,10 @@ // The sorting method used by the Organize References command. // Should be one of // - // 'marker_order': List in order of appearance in document + // 'reference_order': List in order of appearance in document // 'alphabetical': Alphabetical based on reference name, sorting numerals lexagraphically // 'numeric': Alphabetical based on reference name, sorting numeral chunks numerically - "mde.ref_organize_sort": "marker_order", + "mde.ref_organize_sort": "reference_order", "mde.ref_organize_sort_reverse": false, // MarkdownEditing: diff --git a/plugins/references.py b/plugins/references.py index ee3f4369..e4449dbc 100644 --- a/plugins/references.py +++ b/plugins/references.py @@ -520,10 +520,10 @@ def run(self, edit): # reorder markers = getMarkers(view) - marker_order = sorted( + reference_order = sorted( markers.keys(), key=lambda marker: min(markers[marker].regions, key=lambda reg: reg.a).a ) - marker_order = dict(zip(marker_order, range(0, len(marker_order)))) + reference_order = dict(zip(reference_order, range(0, len(reference_order)))) refs = getReferences(view) flatrefs = [] @@ -540,8 +540,8 @@ def run(self, edit): sel.add(line_reg) sorting_funcs = { - "marker_order": lambda x: marker_order[x[0].lower()] - if x[0].lower() in marker_order + "reference_order": lambda x: reference_order[x[0].lower()] + if x[0].lower() in reference_order else 9999, "alphabetical": lambda x: x[0].lower(), "numeric": lambda x: [ @@ -552,7 +552,7 @@ def run(self, edit): flatfns.sort(key=operator.itemgetter(0)) flatrefs.sort( - key=sorting_funcs[settings.get("mde.ref_organize_sort", "marker_order")], + key=sorting_funcs[settings.get("mde.ref_organize_sort", "reference_order")], reverse=settings.get("mde.ref_organize_sort_reverse", False), ) @@ -608,7 +608,7 @@ def run(self, edit): lower_refs = [ref.lower() for ref in refs] missings = [] for ref in refs: - if ref not in marker_order: + if ref not in reference_order: missings.append(refs[ref].label) if len(missings) > 0: output += "Error: Definition [%s] %s no reference\n" % (