Add media semantic
This commit is contained in:
parent
f23f8db994
commit
3f49e8b8c2
2 changed files with 40 additions and 5 deletions
|
@ -3,6 +3,8 @@ use std::rc::Rc;
|
|||
use std::str::FromStr;
|
||||
|
||||
use ariadne::Fmt;
|
||||
use lsp::semantic::Semantics;
|
||||
use parser::util::escape_source;
|
||||
use regex::Captures;
|
||||
use regex::Match;
|
||||
use regex::Regex;
|
||||
|
@ -449,13 +451,30 @@ impl RegexRule for MediaRule {
|
|||
.ok()
|
||||
.map(|(_, value)| value);
|
||||
|
||||
if let Some((sems, tokens)) =
|
||||
Semantics::from_source(token.source(), &state.shared.lsp)
|
||||
{
|
||||
sems.add(matches.get(0).unwrap().start()..matches.get(0).unwrap().start()+1, tokens.media_sep);
|
||||
// Refname
|
||||
sems.add(matches.get(0).unwrap().start()+1..matches.get(0).unwrap().start()+2, tokens.media_refname_sep);
|
||||
sems.add(matches.get(1).unwrap().range(), tokens.media_refname);
|
||||
sems.add(matches.get(1).unwrap().end()..matches.get(1).unwrap().end()+1, tokens.media_refname_sep);
|
||||
// Uri
|
||||
sems.add(matches.get(2).unwrap().start()-1..matches.get(2).unwrap().start(), tokens.media_uri_sep);
|
||||
sems.add(matches.get(2).unwrap().range(), tokens.media_uri);
|
||||
sems.add(matches.get(2).unwrap().end()..matches.get(2).unwrap().end()+1, tokens.media_uri_sep);
|
||||
// Props
|
||||
if let Some(props) = matches.get(3)
|
||||
{
|
||||
sems.add(props.start()-1..props.start(), tokens.media_props_sep);
|
||||
sems.add(props.range(), tokens.media_props);
|
||||
sems.add(props.end()..props.end()+1, tokens.media_props_sep);
|
||||
}
|
||||
}
|
||||
|
||||
let description = match matches.get(4) {
|
||||
Some(content) => {
|
||||
let source = Rc::new(VirtualSource::new(
|
||||
Token::new(content.range(), token.source()),
|
||||
format!("Media[{refname}] description"),
|
||||
content.as_str().trim_start().trim_end().to_string(),
|
||||
));
|
||||
let source = escape_source(token.source(), content.range(), format!("Media[{refname}] description"), '\\', "\n");
|
||||
if source.content().is_empty() {
|
||||
None
|
||||
} else {
|
||||
|
|
|
@ -174,6 +174,14 @@ pub struct Tokens {
|
|||
pub layout_props_sep: (u32, u32),
|
||||
pub layout_props: (u32, u32),
|
||||
pub layout_type: (u32, u32),
|
||||
|
||||
pub media_sep: (u32, u32),
|
||||
pub media_refname_sep: (u32, u32),
|
||||
pub media_refname: (u32, u32),
|
||||
pub media_uri_sep: (u32, u32),
|
||||
pub media_uri: (u32, u32),
|
||||
pub media_props_sep: (u32, u32),
|
||||
pub media_props: (u32, u32),
|
||||
}
|
||||
|
||||
impl Tokens {
|
||||
|
@ -262,6 +270,14 @@ impl Tokens {
|
|||
layout_props_sep: token!("operator"),
|
||||
layout_props: token!("enum"),
|
||||
layout_type: token!("function"),
|
||||
|
||||
media_sep: token!("macro"),
|
||||
media_refname_sep: token!("macro"),
|
||||
media_refname: token!("enum"),
|
||||
media_uri_sep: token!("macro"),
|
||||
media_uri: token!("function"),
|
||||
media_props_sep: token!("operator"),
|
||||
media_props: token!("enum"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue