layouts: Simplify the main flow of source list
This commit is contained in:
50
src/data.rs
50
src/data.rs
@ -107,6 +107,7 @@ fn list_layout_sources(
|
|||||||
kind: ArrangementKind,
|
kind: ArrangementKind,
|
||||||
keyboards_path: Option<PathBuf>,
|
keyboards_path: Option<PathBuf>,
|
||||||
) -> Vec<LayoutSource> {
|
) -> Vec<LayoutSource> {
|
||||||
|
// Just a simplification of often called code.
|
||||||
let add_by_name = |
|
let add_by_name = |
|
||||||
mut ret: Vec<LayoutSource>,
|
mut ret: Vec<LayoutSource>,
|
||||||
name: &str,
|
name: &str,
|
||||||
@ -128,6 +129,20 @@ fn list_layout_sources(
|
|||||||
ret
|
ret
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Another grouping.
|
||||||
|
let add_by_kind = |ret, name: &str, kind| {
|
||||||
|
let ret = match kind {
|
||||||
|
&ArrangementKind::Base => ret,
|
||||||
|
kind => add_by_name(
|
||||||
|
ret,
|
||||||
|
&name_with_arrangement(name.into(), kind),
|
||||||
|
kind,
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
add_by_name(ret, name, &ArrangementKind::Base)
|
||||||
|
};
|
||||||
|
|
||||||
fn name_with_arrangement(name: String, kind: &ArrangementKind) -> String {
|
fn name_with_arrangement(name: String, kind: &ArrangementKind) -> String {
|
||||||
match kind {
|
match kind {
|
||||||
ArrangementKind::Base => name,
|
ArrangementKind::Base => name,
|
||||||
@ -138,16 +153,7 @@ fn list_layout_sources(
|
|||||||
let ret = Vec::new();
|
let ret = Vec::new();
|
||||||
|
|
||||||
// Name as given takes priority.
|
// Name as given takes priority.
|
||||||
let ret = match &kind {
|
let ret = add_by_kind(ret, name, &kind);
|
||||||
ArrangementKind::Base => ret,
|
|
||||||
kind => add_by_name(
|
|
||||||
ret,
|
|
||||||
&name_with_arrangement(name.into(), &kind),
|
|
||||||
&kind,
|
|
||||||
),
|
|
||||||
};
|
|
||||||
|
|
||||||
let ret = add_by_name(ret, name, &ArrangementKind::Base);
|
|
||||||
|
|
||||||
// Then try non-alternative name if applicable (`us` for `us+colemak`).
|
// Then try non-alternative name if applicable (`us` for `us+colemak`).
|
||||||
let ret = {
|
let ret = {
|
||||||
@ -157,16 +163,7 @@ fn list_layout_sources(
|
|||||||
// The name is already equal to base, so it was already added.
|
// The name is already equal to base, so it was already added.
|
||||||
if base == name { ret }
|
if base == name { ret }
|
||||||
else {
|
else {
|
||||||
let ret = match &kind {
|
add_by_kind(ret, base, &kind)
|
||||||
ArrangementKind::Base => ret,
|
|
||||||
kind => add_by_name(
|
|
||||||
ret,
|
|
||||||
&name_with_arrangement(base.into(), &kind),
|
|
||||||
&kind,
|
|
||||||
),
|
|
||||||
};
|
|
||||||
|
|
||||||
add_by_name(ret, base, &ArrangementKind::Base)
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// The layout's base name starts with a "+". Weird but OK.
|
// The layout's base name starts with a "+". Weird but OK.
|
||||||
@ -177,17 +174,8 @@ fn list_layout_sources(
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Finally, fallback name
|
// No other choices left, so give anything.
|
||||||
let ret = match &kind {
|
add_by_kind(ret, FALLBACK_LAYOUT_NAME.into(), &kind)
|
||||||
ArrangementKind::Base => ret,
|
|
||||||
kind => add_by_name(
|
|
||||||
ret,
|
|
||||||
&name_with_arrangement(FALLBACK_LAYOUT_NAME.into(), &kind),
|
|
||||||
&kind,
|
|
||||||
),
|
|
||||||
};
|
|
||||||
|
|
||||||
add_by_name(ret, FALLBACK_LAYOUT_NAME, &ArrangementKind::Base)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn load_layout_data(source: DataSource)
|
fn load_layout_data(source: DataSource)
|
||||||
|
|||||||
Reference in New Issue
Block a user