data: Made data flow in fallback clearer
This commit is contained in:
50
src/data.rs
50
src/data.rs
@ -97,6 +97,8 @@ impl fmt::Display for DataSource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type LayoutSource = (ArrangementKind, DataSource);
|
||||||
|
|
||||||
/// Lists possible sources, with 0 as the most preferred one
|
/// Lists possible sources, with 0 as the most preferred one
|
||||||
/// Trying order: native lang of the right kind, native base,
|
/// Trying order: native lang of the right kind, native base,
|
||||||
/// fallback lang of the right kind, fallback base
|
/// fallback lang of the right kind, fallback base
|
||||||
@ -104,19 +106,12 @@ fn list_layout_sources(
|
|||||||
name: &str,
|
name: &str,
|
||||||
kind: ArrangementKind,
|
kind: ArrangementKind,
|
||||||
keyboards_path: Option<PathBuf>,
|
keyboards_path: Option<PathBuf>,
|
||||||
) -> Vec<(ArrangementKind, DataSource)> {
|
) -> Vec<LayoutSource> {
|
||||||
let mut ret = Vec::new();
|
let add_by_name = |
|
||||||
{
|
mut ret: Vec<LayoutSource>,
|
||||||
fn name_with_arrangement(name: String, kind: &ArrangementKind)
|
name: &str,
|
||||||
-> String
|
kind: &ArrangementKind,
|
||||||
{
|
| -> Vec<LayoutSource> {
|
||||||
match kind {
|
|
||||||
ArrangementKind::Base => name,
|
|
||||||
ArrangementKind::Wide => name + "_wide",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let mut add_by_name = |name: &str, kind: &ArrangementKind| {
|
|
||||||
if let Some(path) = keyboards_path.clone() {
|
if let Some(path) = keyboards_path.clone() {
|
||||||
ret.push((
|
ret.push((
|
||||||
kind.clone(),
|
kind.clone(),
|
||||||
@ -130,28 +125,43 @@ fn list_layout_sources(
|
|||||||
kind.clone(),
|
kind.clone(),
|
||||||
DataSource::Resource(name.into())
|
DataSource::Resource(name.into())
|
||||||
));
|
));
|
||||||
|
ret
|
||||||
};
|
};
|
||||||
|
|
||||||
match &kind {
|
let ret = {
|
||||||
ArrangementKind::Base => {},
|
fn name_with_arrangement(name: String, kind: &ArrangementKind)
|
||||||
|
-> String
|
||||||
|
{
|
||||||
|
match kind {
|
||||||
|
ArrangementKind::Base => name,
|
||||||
|
ArrangementKind::Wide => name + "_wide",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let ret = Vec::new();
|
||||||
|
|
||||||
|
let ret = match &kind {
|
||||||
|
ArrangementKind::Base => ret,
|
||||||
kind => add_by_name(
|
kind => add_by_name(
|
||||||
|
ret,
|
||||||
&name_with_arrangement(name.into(), &kind),
|
&name_with_arrangement(name.into(), &kind),
|
||||||
&kind,
|
&kind,
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
add_by_name(name, &ArrangementKind::Base);
|
let ret = add_by_name(ret, name, &ArrangementKind::Base);
|
||||||
|
|
||||||
match &kind {
|
let ret = match &kind {
|
||||||
ArrangementKind::Base => {},
|
ArrangementKind::Base => ret,
|
||||||
kind => add_by_name(
|
kind => add_by_name(
|
||||||
|
ret,
|
||||||
&name_with_arrangement(FALLBACK_LAYOUT_NAME.into(), &kind),
|
&name_with_arrangement(FALLBACK_LAYOUT_NAME.into(), &kind),
|
||||||
&kind,
|
&kind,
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
add_by_name(FALLBACK_LAYOUT_NAME, &ArrangementKind::Base);
|
add_by_name(ret, FALLBACK_LAYOUT_NAME, &ArrangementKind::Base)
|
||||||
}
|
};
|
||||||
ret
|
ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user