autocompletion kinda maybe
This commit is contained in:
parent
6d57d96bb2
commit
f4aeb80cf8
@ -493,9 +493,15 @@ impl MathApp {
|
|||||||
// Contains the function string in a text box that the user can edit
|
// Contains the function string in a text box that the user can edit
|
||||||
let hint = generate_hint(&self.func_strs[i]);
|
let hint = generate_hint(&self.func_strs[i]);
|
||||||
|
|
||||||
TextEdit::singleline(&mut self.func_strs[i])
|
let func_edit_focus = TextEdit::singleline(&mut self.func_strs[i])
|
||||||
.hint_text(hint, true)
|
.hint_text(hint.clone(), true)
|
||||||
.ui(ui);
|
.ui(ui)
|
||||||
|
.has_focus();
|
||||||
|
|
||||||
|
// If in focus and right arrow key was pressed, apply hint
|
||||||
|
if func_edit_focus && ui.input().key_down(Key::ArrowRight) {
|
||||||
|
self.func_strs[i] += &hint;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let proc_func_str = process_func_str(&self.func_strs[i]);
|
let proc_func_str = process_func_str(&self.func_strs[i]);
|
||||||
|
|||||||
@ -218,6 +218,63 @@ pub fn generate_hint(input: &str) -> String {
|
|||||||
return ")".to_owned();
|
return ")".to_owned();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let len = chars.len();
|
||||||
|
|
||||||
|
if chars.len() >= 4 {
|
||||||
|
let result_two = match (chars[len - 4].to_string()
|
||||||
|
+ &chars[len - 3].to_string()
|
||||||
|
+ &chars[len - 2].to_string()
|
||||||
|
+ &chars[len - 1].to_string())
|
||||||
|
.as_str()
|
||||||
|
{
|
||||||
|
"asin" => Some("("),
|
||||||
|
|
||||||
|
_ => None,
|
||||||
|
};
|
||||||
|
|
||||||
|
if let Some(output) = result_two {
|
||||||
|
return output.to_owned();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if chars.len() >= 3 {
|
||||||
|
let result_two = match (chars[len - 3].to_string()
|
||||||
|
+ &chars[len - 2].to_string()
|
||||||
|
+ &chars[len - 1].to_string())
|
||||||
|
.as_str()
|
||||||
|
{
|
||||||
|
"log" => Some("("),
|
||||||
|
"sin" => Some("("),
|
||||||
|
"abs" => Some("("),
|
||||||
|
"cos" => Some("("),
|
||||||
|
"tan" => Some("("),
|
||||||
|
"asi" => Some("n("),
|
||||||
|
|
||||||
|
_ => None,
|
||||||
|
};
|
||||||
|
|
||||||
|
if let Some(output) = result_two {
|
||||||
|
return output.to_owned();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if chars.len() >= 2 {
|
||||||
|
let result_two = match (chars[len - 2].to_string() + &chars[len - 1].to_string()).as_str() {
|
||||||
|
"lo" => Some("g("),
|
||||||
|
"si" => Some("n("),
|
||||||
|
"ab" => Some("s("),
|
||||||
|
"co" => Some("s("),
|
||||||
|
"ta" => Some("n("),
|
||||||
|
"as" => Some("in("),
|
||||||
|
|
||||||
|
_ => None,
|
||||||
|
};
|
||||||
|
|
||||||
|
if let Some(output) = result_two {
|
||||||
|
return output.to_owned();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
String::new()
|
String::new()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -329,4 +386,25 @@ mod tests {
|
|||||||
test_process_helper(key, value);
|
test_process_helper(key, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Tests to make sure hints are properly outputed based on input
|
||||||
|
#[test]
|
||||||
|
fn hint_test() {
|
||||||
|
let values = HashMap::from([
|
||||||
|
("", "x^2"),
|
||||||
|
("sin(x", ")"),
|
||||||
|
("sin(x)", ""),
|
||||||
|
("x^x", ""),
|
||||||
|
("(x+1)(x-1", ")"),
|
||||||
|
("lo", "g("),
|
||||||
|
("log", "("),
|
||||||
|
("asi", "n("),
|
||||||
|
("si", "n("),
|
||||||
|
("asin", "("),
|
||||||
|
]);
|
||||||
|
|
||||||
|
for (key, value) in values {
|
||||||
|
assert_eq!(generate_hint(key), value.to_owned());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user