Skip to content

Commit 886db13

Browse files
author
DeathAxe
committed
Plugins Add sorting options for Organize References (#672)
Resolves #665 This commit adds options for sorting references: - '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
1 parent 6a38f99 commit 886db13

File tree

3 files changed

+28
-4
lines changed

3 files changed

+28
-4
lines changed

Preferences.sublime-settings

+10
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,16 @@
4040
// Adds <Tab> after list items instead of a single <space>.
4141
"mde.list_align_text": false,
4242

43+
// MarkdownEditing (References):
44+
// The sorting method used by the Organize References command.
45+
// Should be one of
46+
//
47+
// "reference_order": List in order of appearance in document
48+
// "alphabetical": Alphabetical based on reference name, sorting numerals lexagraphically
49+
// "numeric": Alphabetical based on reference name, sorting numeral chunks numerically
50+
"mde.ref_organize_sort": "reference_order",
51+
"mde.ref_organize_sort_reverse": false,
52+
4353
// MarkdownEditing:
4454
// Automatically switches list bullet when indenting blank list item with <Tab>.
4555
"mde.list_indent_auto_switch_bullet": true,

messages/3.1.1.md

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ feedback you can use [GitHub issues][issues].
2121

2222
## New Features
2323

24+
* `Organize References` learned to sort reference definitions using `"mde.ref_organize_sort"` setting
25+
2426
## Changes
2527

2628
* Fully support xonsh fenced code instead of using Python syntax

plugins/references.py

+16-4
Original file line numberDiff line numberDiff line change
@@ -551,10 +551,10 @@ def run(self, edit):
551551

552552
# reorder
553553
markers = getMarkers(view)
554-
marker_order = sorted(
554+
reference_order = sorted(
555555
markers.keys(), key=lambda marker: min(markers[marker].regions, key=lambda reg: reg.a).a
556556
)
557-
marker_order = dict(zip(marker_order, range(0, len(marker_order))))
557+
reference_order = dict(zip(reference_order, range(0, len(reference_order))))
558558

559559
refs = getReferences(view)
560560
flatrefs = []
@@ -570,9 +570,21 @@ def run(self, edit):
570570
flatrefs.append((name, view.substr(line_reg).strip("\n")))
571571
sel.add(line_reg)
572572

573+
sorting_funcs = {
574+
"reference_order": lambda x: reference_order[x[0].lower()]
575+
if x[0].lower() in reference_order
576+
else 9999,
577+
"alphabetical": lambda x: x[0].lower(),
578+
"numeric": lambda x: [
579+
int(p) if p.isnumeric() else p for p in re.split(r"[ _.-]", x[0].lower())
580+
],
581+
}
582+
settings = view.settings()
583+
573584
flatfns.sort(key=operator.itemgetter(0))
574585
flatrefs.sort(
575-
key=lambda x: marker_order[x[0].lower()] if x[0].lower() in marker_order else 9999
586+
key=sorting_funcs[settings.get("mde.ref_organize_sort", "reference_order")],
587+
reverse=settings.get("mde.ref_organize_sort_reverse", False),
576588
)
577589

578590
view.run_command("left_delete")
@@ -627,7 +639,7 @@ def run(self, edit):
627639
lower_refs = [ref.lower() for ref in refs]
628640
missings = []
629641
for ref in refs:
630-
if ref not in marker_order:
642+
if ref not in reference_order:
631643
missings.append(refs[ref].label)
632644
if len(missings) > 0:
633645
if len(missings) > 1:

0 commit comments

Comments
 (0)