finished if highlighting

This commit is contained in:
Anton-4 2022-03-07 19:44:24 +01:00
parent 37704323b1
commit ec1e2cd1d0
No known key found for this signature in database
GPG key ID: C954D6E0F9C0ABFD
12 changed files with 1988 additions and 2488 deletions

View file

@ -1,25 +1,17 @@
use crate::{syntax_highlight::HighlightStyle, slow_pool::MarkNodeId};
use crate::{syntax_highlight::HighlightStyle, slow_pool::{MarkNodeId, SlowPool}};
use super::{attribute::Attributes, nodes, nodes::MarkupNode};
use super::{attribute::Attributes, nodes::{self, make_nested_mn}, nodes::MarkupNode};
pub fn new_equals_mn() -> MarkupNode {
MarkupNode::Text {
content: nodes::EQUALS.to_owned(),
syn_high_style: HighlightStyle::Operator,
attributes: Attributes::default(),
parent_id_opt: None,
newlines_at_end: 0,
}
common_text_node(nodes::EQUALS.to_owned(), HighlightStyle::Operator, 0)
}
pub fn new_comma_mn() -> MarkupNode {
MarkupNode::Text {
content: nodes::COMMA.to_owned(),
syn_high_style: HighlightStyle::Comma,
attributes: Attributes::default(),
parent_id_opt: None,
newlines_at_end: 0,
}
common_text_node(nodes::COMMA.to_owned(), HighlightStyle::Operator, 0)
}
pub fn new_dot_mn() -> MarkupNode {
common_text_node(nodes::DOT.to_owned(), HighlightStyle::Operator, 0)
}
pub fn new_blank_mn() -> MarkupNode {
@ -47,102 +39,98 @@ pub fn new_colon_mn() -> MarkupNode {
pub fn new_operator_mn(
content: String,
) -> MarkupNode {
MarkupNode::Text {
content,
syn_high_style: HighlightStyle::Operator,
attributes: Attributes::default(),
parent_id_opt: None,
newlines_at_end: 0,
}
common_text_node(content, HighlightStyle::Operator, 0)
}
pub fn new_left_accolade_mn() -> MarkupNode {
MarkupNode::Text {
content: nodes::LEFT_ACCOLADE.to_owned(),
syn_high_style: HighlightStyle::Bracket,
attributes: Attributes::default(),
parent_id_opt: None,
newlines_at_end: 0,
}
common_text_node(nodes::LEFT_ACCOLADE.to_owned(), HighlightStyle::Bracket, 0)
}
pub fn new_right_accolade_mn() -> MarkupNode {
MarkupNode::Text {
content: nodes::RIGHT_ACCOLADE.to_owned(),
syn_high_style: HighlightStyle::Bracket,
attributes: Attributes::default(),
parent_id_opt: None,
newlines_at_end: 0,
}
common_text_node(nodes::RIGHT_ACCOLADE.to_owned(), HighlightStyle::Bracket, 0)
}
pub fn new_left_square_mn() -> MarkupNode {
MarkupNode::Text {
content: nodes::LEFT_SQUARE_BR.to_owned(),
syn_high_style: HighlightStyle::Bracket,
attributes: Attributes::default(),
parent_id_opt: None,
newlines_at_end: 0,
}
common_text_node(nodes::LEFT_SQUARE_BR.to_owned(), HighlightStyle::Bracket, 0)
}
pub fn new_right_square_mn() -> MarkupNode {
MarkupNode::Text {
content: nodes::RIGHT_SQUARE_BR.to_owned(),
syn_high_style: HighlightStyle::Bracket,
attributes: Attributes::default(),
parent_id_opt: None,
newlines_at_end: 0,
}
common_text_node(nodes::RIGHT_SQUARE_BR.to_owned(), HighlightStyle::Bracket, 0)
}
pub fn new_func_name_mn(content: String) -> MarkupNode {
MarkupNode::Text {
content,
syn_high_style: HighlightStyle::FunctionName,
attributes: Attributes::default(),
parent_id_opt: None,
newlines_at_end: 0,
}
common_text_node(content, HighlightStyle::FunctionName, 0)
}
pub fn new_arg_name_mn(content: String) -> MarkupNode {
MarkupNode::Text {
content,
syn_high_style: HighlightStyle::FunctionArgName,
attributes: Attributes::default(),
parent_id_opt: None,
newlines_at_end: 0,
}
common_text_node(content, HighlightStyle::FunctionArgName, 0)
}
pub fn new_arrow_mn(newlines_at_end: usize) -> MarkupNode {
MarkupNode::Text {
content: nodes::ARROW.to_owned(),
syn_high_style: HighlightStyle::Operator,
attributes: Attributes::default(),
parent_id_opt: None,
newlines_at_end,
}
common_text_node(nodes::ARROW.to_owned(), HighlightStyle::Operator, newlines_at_end)
}
pub fn new_comments_mn(
comments: String,
comment: String,
newlines_at_end: usize,
) -> MarkupNode {
common_text_node(comment, HighlightStyle::Comment, newlines_at_end)
}
fn common_text_node(
content: String,
highlight_style: HighlightStyle,
newlines_at_end: usize
) -> MarkupNode {
MarkupNode::Text {
content: comments,
syn_high_style: HighlightStyle::Comment,
content,
syn_high_style: highlight_style,
attributes: Attributes::default(),
parent_id_opt: None,
newlines_at_end,
}
}
pub fn assign_mn(val_name_mn_id: MarkNodeId, equals_mn_id: MarkNodeId, expr_mark_node_id: MarkNodeId) -> MarkupNode {
MarkupNode::Nested {
children_ids: vec![val_name_mn_id, equals_mn_id, expr_mark_node_id],
parent_id_opt: None,
newlines_at_end: 3,
pub fn new_assign_mn(val_name_mn_id: MarkNodeId, equals_mn_id: MarkNodeId, expr_mark_node_id: MarkNodeId) -> MarkupNode {
make_nested_mn(vec![val_name_mn_id, equals_mn_id, expr_mark_node_id], 2)
}
pub fn new_module_name_mn_id(mn_ids: Vec<MarkNodeId>, mark_node_pool: &mut SlowPool) -> MarkNodeId {
if mn_ids.len() == 1 {
*mn_ids.get(0).unwrap() // safe because we checked the length before
} else {
let nested_node = make_nested_mn(mn_ids, 0);
mark_node_pool.add(nested_node)
}
}
pub fn new_module_var_mn(module_name_id: MarkNodeId, dot_id: MarkNodeId, ident_id: MarkNodeId) -> MarkupNode {
make_nested_mn(vec![module_name_id, dot_id, ident_id], 0)
}
pub fn if_mn() -> MarkupNode {
keyword_mn("if ")
}
pub fn then_mn() -> MarkupNode {
keyword_mn(" then ")
}
pub fn else_mn() -> MarkupNode {
keyword_mn(" else ")
}
fn keyword_mn(keyword: &str) -> MarkupNode {
common_text_node(keyword.to_owned(), HighlightStyle::Keyword, 0)
}
pub fn new_if_expr_mn(
if_mn_id: MarkNodeId,
cond_expr_mn_id: MarkNodeId,
then_mn_id: MarkNodeId,
then_expr_mn_id: MarkNodeId,
else_mn_id: MarkNodeId,
else_expr_mn_id: MarkNodeId,
) -> MarkupNode {
make_nested_mn(vec![if_mn_id, cond_expr_mn_id, then_mn_id, then_expr_mn_id, else_mn_id, else_expr_mn_id], 1)
}

View file

@ -3,5 +3,4 @@ pub mod common_nodes;
pub mod convert;
pub mod nodes;
pub mod top_level_def;
pub mod mark_id_ast_id_map;
pub mod ast_context;
pub mod mark_id_ast_id_map;

View file

@ -245,6 +245,14 @@ impl MarkupNode {
}
}
pub fn make_nested_mn(children_ids: Vec<MarkNodeId>, newlines_at_end: usize) -> MarkupNode {
MarkupNode::Nested {
children_ids,
parent_id_opt: None,
newlines_at_end,
}
}
pub fn get_string<'a>(env: &Env<'a>, pool_str: &PoolStr) -> String {
pool_str.as_str(env.pool).to_owned()
}
@ -256,6 +264,7 @@ pub const LEFT_SQUARE_BR: &str = "[ ";
pub const RIGHT_SQUARE_BR: &str = " ]";
pub const COLON: &str = ": ";
pub const COMMA: &str = ", ";
pub const DOT: &str = ".";
pub const STRING_QUOTES: &str = "\"\"";
pub const EQUALS: &str = " = ";
pub const ARROW: &str = " -> ";

View file

@ -14,7 +14,7 @@ use crate::{
syntax_highlight::HighlightStyle,
};
use super::{mark_id_ast_id_map::MarkIdAstIdMap, convert::from_def2::add_node, common_nodes::assign_mn};
use super::{mark_id_ast_id_map::MarkIdAstIdMap, convert::from_def2::add_node, common_nodes::new_assign_mn};
// represents for example: `main = "Hello, World!"`
pub fn assignment_mark_node<'a>(
@ -39,7 +39,7 @@ pub fn assignment_mark_node<'a>(
let equals_mn_id = add_node(new_equals_mn(), ast_node_id, mark_node_pool, mark_id_ast_id_map);
Ok(assign_mn(val_name_mn_id, equals_mn_id, expr_mark_node_id))
Ok(new_assign_mn(val_name_mn_id, equals_mn_id, expr_mark_node_id))
}
pub fn tld_w_comments_mark_node(