regex_literal/
assembly.rs

1//! The module provides methods of creating regex set literals from text of patterns
2#![allow(unused)]
3use alloc::string::String;
4use core::str;
5use core::result::Result;
6use core::char;
7use crate::delimited;
8
9use crate::util;
10
11/// assemble a given pattern array into a regex union literal 
12pub fn assemble_reu(arr:&[&str]) -> Result<String,String> {
13	merge(arr,delimited::LiteralForm::ReU)
14	
15}
16
17/// assemble a given pattern array into a regex sequence literal
18pub fn assemble_res(arr:&[&str]) -> Result<String,String> {	
19	merge(arr,delimited::LiteralForm::ReS)	
20}
21
22/// convert patterns into a regex union literal
23pub fn into_reu(patterns:&[&str]) -> String {
24    let bytes = delimited::get_delimiter();
25	let delimiter = unsafe {str::from_utf8_unchecked(&bytes[..])};
26	let strings = util::delimit_many(patterns,delimiter);
27	let str_refs:Vec<&str> = strings.iter().map(|x| &x[..]).collect();//check how to create vector of string ref? x.as_ref
28	assemble_reu(&str_refs[..]).unwrap()
29	
30}
31
32/// convert patterns into a regex sequence literal
33pub fn into_res(patterns:&[&str]) -> String {
34	let bytes = delimited::get_delimiter();
35	let delimiter = unsafe {str::from_utf8_unchecked(&bytes[..])};
36	let strings = util::delimit_many(patterns,delimiter);
37	let str_refs:Vec<&str> = strings.iter().map(|x| &x[..]).collect();//check how to create vector of string ref?}
38	assemble_res(&str_refs[..]).unwrap()
39}
40
41
42
43/// convert the array of delimited literals into regex set literal
44fn merge(arr:&[&str],kind:delimited::LiteralForm) -> Result<String,String>{
45	let set_index:Option<usize> = match kind {
46		delimited::LiteralForm::ReU => Some(0),
47		delimited::LiteralForm::ReS => Some(1),
48		_ => None,
49	};
50	if set_index.is_none() {Err("Invalid LiteralForm in executing merge function.".to_string())} else{
51		let index = set_index.unwrap();
52		let bytes = vec![delimited::RE_SEPARATOR];
53		let o_separator = str::from_utf8(&bytes).or(Err("Invalid delimited::RE_SEPARATOR".to_string()));
54		let separator = o_separator?;
55		let mut string = arr.join(separator);
56		let o_start_char = char::from_u32(delimited::RE_SET_DELIMITERS[index][0] as u32
57							).ok_or("Invalid opening delimiter".to_string());
58		let start_char = o_start_char?;
59		let o_end_char = char::from_u32(delimited::RE_SET_DELIMITERS[index][1] as u32
60							).ok_or("Invalid closing delimiter".to_string());
61		let end_char = o_end_char?;
62		string.insert(0,start_char);
63		string.push(end_char);
64		Ok(string)	
65	}
66	
67}
68
69
70
71
72