From 21a873aa13127be3704c57c8800ab9dd3282547b Mon Sep 17 00:00:00 2001 From: Fran Tufro Date: Wed, 19 Apr 2023 10:42:26 -0300 Subject: [PATCH 01/94] First part of new version guide --- definitions/palabritas.md | 155 +++++++++++++++++++++++++++++++ examples/story-example.cuentitos | 21 +++++ 2 files changed, 176 insertions(+) create mode 100644 definitions/palabritas.md create mode 100644 examples/story-example.cuentitos diff --git a/definitions/palabritas.md b/definitions/palabritas.md new file mode 100644 index 0000000..7522ef8 --- /dev/null +++ b/definitions/palabritas.md @@ -0,0 +1,155 @@ +# Palabritas: cuentito's language + +`cuentitos` is a narrative engine that includes its own language for writers to create dynamic storytelling: `palabritas`. + +In this document I will introduce you to `palabritas`. + +## Basics + +You can start by writing small pieces of text. Each newline will prompt the user to continue. + +```cuentitos +You've just arrived in the bustling city, full of excitement and anticipation for your new job. +The skyline reaches for the clouds, and the sounds of traffic and people surround you. +As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment. +``` + +Now, you can add options after an event by indenting with two spaces and starting the line for each option with an asterisk `*` + +```cuentitos +[...] +As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment. + * I take a walk through a nearby park to relax and acclimate to the city. + * I visit a popular street market to experience the city's unique flavors and energy. +``` + +You can now start a new narrative path by indenting with 2 spaces and writing the next text bits. + +```cuentitos + [...] + * I take a walk through a nearby park to relax and acclimate to the city. + As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses. + You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts. + This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. +``` + +## Probabilistic One-Off's + +An interesting feature of cuentitos is that you can use probability to render different things in the story. For example, in our case, we can use probability to have someone sitting on the bench or not. + +```cuentitos + [...] + You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts. + (50%) A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise. + This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. + [...] +``` + +This will make it so that half of the time the solitary figure is there sitting there, and half of the time, they're not. Whenever you have a one off text with probability, you can directly write said probability as a percentage. So in this case there is a `50%` chance that this text will be rendered. We call this the `one-off percentage notation`. + +Another way is to use the `one-off probability notation`, that uses a range from 0 to 1 to determine how probable that event is. In this case, we'd have to use `0.5`. + +```cuentitos + [...] + You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts. + (0.5) A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise. + This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. + [...] +``` + + +In practice, both notations are similar and it's mostly up to you which one to use, the only difference is the precission: percentage notation only supports integers, while probability notation supports real numbers (floats). You can't do `55.5%`, but you can do `0.555`. + +You could add options on probabilistic branches, but let's keep going for now. + +## Probabilistic Buckets + +Another interesting feature is the ability to create `probabilistic buckets`. + +A bucket is a set of probable paths that the engine will pick one every time is asked to render that bucket. Let's do a probabilistic bucket with the second option. + +```cuentitos + * I visit a popular street market to experience the city's unique flavors and energy. + (50%) At the bustling street market, you discover a food stand offering mouthwatering delicacies. + As you sample the delicious fare, you strike up a conversation with the enthusiastic vendor. + It's a welcome distraction from the noise around you. + (20%) As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician. + The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise. + You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape. + (30%) Wandering the market, you stumble upon a hidden alley adorned with vibrant street art. + Each colorful mural tells a different story, capturing your imagination and sparking your creativity. + This unexpected oasis of visual tranquility provides a respite from the chaos of the city, inspiring you to explore more of the urban canvas and the stories it holds. +``` + +In this example, we added an indentation from the option and ten added 3 narrative paths with probabilities expressed in percentage notation. Every time you indent and add probabilities you're effectively creating a bucket. + +Notice that the sum of the probabilities is `100%`. This is a requirement if using `percentage notation` in a bucket, the compiler will fail if you have a different sum. The same will happen if you use `probability notation`, the sum has to be `1`, otherwise the compiler will throw an error. + +There is another useful notation available on buckets that is called the `frequency notation`, where you can set the frequency of each event. The probability will be calculated as the frequency over the sum of the frequencies of all the events in the bucket. There is no requirement to keep a consistent sum of frequencies, the probability of all events will adjust as you add more or change the existing ones. + +```cuentitos + * I visit a popular street market to experience the city's unique flavors and energy. + (50) At the bustling street market, you discover a food stand offering mouthwatering delicacies. + As you sample the delicious fare, you strike up a conversation with the enthusiastic vendor. + It's a welcome distraction from the noise around you. + (2) As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician. + The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise. + You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape. + (500) Wandering the market, you stumble upon a hidden alley adorned with vibrant street art. + Each colorful mural tells a different story, capturing your imagination and sparking your creativity. + This unexpected oasis of visual tranquility provides a respite from the chaos of the city, inspiring you to explore more of the urban canvas and the stories it holds. + +``` +Given what we just said, which event is more probable of the three? + +The hidden alley! Let's see why: + +The sum of frequencies is `50 + 2 + 500 = 552`, then the probability of the deli stand is `50 / 552 ~= 0.09`, the probability of the musician is `2 / 552 ~= 0.003` and the probability of the hidden alley is `500 / 552 ~= 0.9`. So 9 out of 10 times we'll get the alley. + +### Probability of Options + +Probability can be applied to pretty much everything in `cuentitos`, including options. Let's explore that. + +You can add a chance for an option to show up by adding the probability after the asterisk: + +```cuentitos + [...] + You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape. + * (50%) I leave two dollars to the artist. + The musician smiles and nods thanking you. + * I nod when the musician looks my way, to show I really enjoy the music. + [...] +``` + +If a choice doesn't have probability set, the probability of it showing up is 100%. + +In this case there is a 50% chance the user will see the option to leave two dollars to the musician. So half of the times he'll support the artist economically, and half just nod. + +#### Options bucket + +If all the options in an indentation level are probabilistic, then a bucket is created. + +This means that only one of those options will show up, respecting the probability rules. + +```cuentitos + (500) Wandering the market, you stumble upon a hidden alley adorned with vibrant street art. + Each colorful mural tells a different story, capturing your imagination and sparking your creativity. + * (50%) I grab my phone and take pictures of the murals. + * (50%) I keep walking, even if the murals look good, the darkness of the alley is unsettling. +``` + +In this case, only one of the options will show up, each one with a 50% chance. + +## Reacting to State + +## State changes + +## String interpolation + +## Configuration +### Variables +#### Bool +#### Integer +#### Float +#### Enum +## Reputations diff --git a/examples/story-example.cuentitos b/examples/story-example.cuentitos new file mode 100644 index 0000000..874e4b3 --- /dev/null +++ b/examples/story-example.cuentitos @@ -0,0 +1,21 @@ +You've just arrived in the bustling city, full of excitement and anticipation for your new job. +The skyline reaches for the clouds, and the sounds of traffic and people surround you. +As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment. + * I take a walk through a nearby park to relax and acclimate to the city. + As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses. + You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts. + (50/100) A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise. + This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. + * I visit a popular street market to experience the city's unique flavors and energy. + (50) At the bustling street market, you discover a food stand offering mouthwatering delicacies. + As you sample the delicious fare, you strike up a conversation with the enthusiastic vendor. + It's a welcome distraction from the noise around you. + (2) As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician. + The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise. + You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape. + * (50%) I leave two dollars to the artist. + The musician smiles and nods thanking you. + * I nod when the musician looks my way, to show I really enjoy the music. + (500) Wandering the market, you stumble upon a hidden alley adorned with vibrant street art. + Each colorful mural tells a different story, capturing your imagination and sparking your creativity. + This unexpected oasis of visual tranquility provides a respite from the chaos of the city, inspiring you to explore more of the urban canvas and the stories it holds. From 95fb3c836db622755833496cf26528955282ff43 Mon Sep 17 00:00:00 2001 From: Fran Tufro Date: Wed, 19 Apr 2023 11:45:20 -0300 Subject: [PATCH 02/94] Added explanation and examples related to reacting to state with conditions. --- definitions/palabritas.md | 90 +++++++++++++++++++++++++++++++- examples/story-example.cuentitos | 27 ++++++++++ 2 files changed, 116 insertions(+), 1 deletion(-) diff --git a/definitions/palabritas.md b/definitions/palabritas.md index 7522ef8..b5d93c0 100644 --- a/definitions/palabritas.md +++ b/definitions/palabritas.md @@ -142,7 +142,94 @@ In this case, only one of the options will show up, each one with a 50% chance. ## Reacting to State -## State changes +Up until this point, we've not used the game state to setup conditions. So let's do that now. We'll start writing from the root indentation level again. This texts will show up when the previous section is navigated until there is no more text to show. It will automatically backtrack to the root if no texts display in any indentation level. + +```cuentitos +Feeling mentally and physically exhausted from the day's adventures, you decide it's time to head back to your hotel. +As you enter the peaceful sanctuary of your room, you take a deep breath, relieved to have a quiet space where you can recharge and prepare for the challenges ahead. + +The sun shines bright through the window. + req time_of_day !night +The moonlight gives the room a peaceful tone. + req time_of_day night +``` + +In this case, we're putting conditions to these two lines of text. They will only show up if the `time_of_day` variable value satisfies the conditions. The first one will show if time of day is not `night`, the second one, will show when time of day is `night`. + +Check the `Configuration` section to learn about variables. + +In this case, the requirements are mutually exclusive, only one will show at a time. But that's not a requirement. You could have multiple lines with different requirements and have them show one after the other if the conditions are satisfied. + +```cuentitos +The sun shines bright through the window. + req time_of_day !night +The moonlight gives the room a peaceful tone. + req time_of_day night +You start to think about all the stuff you need to do tomorrow. + req time_of_day_night +That makes you feel overwhelmed. + req time_of_day_night + req energy <10 +``` + +These two new lines will only show at night, after `The moonlight gives...`. The last one only if the player is low on energy. + +You can also add requirements to options. + +```cuentitos +[...] +That makes you feel overwhelmed. + req time_of_day_night + req energy <10 + * I make some tea + req item tea + A good cup of tea is always good to regulate after the sensory overload of the city. + * I go to bed + Feeling depleted of spoons, you go right back to bed. + * I call my parents + req energy >10 +``` + +In this case, to make tea you need an `item` with identifier `tea` in the inventory. +You also need more than `10` points of energy to call your parents. + +### Conditional probability changes + +You can change the probability of a text of option if a given condition is met by using the `freq` command. + +```cuentitos +[...] + * I call my parents + req energy >10 + (30) The phone rings twice, and dad picks up. + req energy>20 + (10) The phone rings twice, and mom picks up. + req energy>20 + freq time_of_day night 100 + (40) The phone rings ten times, nobody is at home. +``` + +Let's analyse this situation: + + * If the player has `energy` between `11` and `20`, nobody picks up, because the condition of `energy>20` is not met, so mom and dad will not pickup. + * If `energy` is `21` or more and `time_of_day` is not `night`, there are more chances that dad will pick up than mom (frequency `30` for dad, vs `10` for mom). + * If `energy` is `21` or more and `time_of_day` is `night`, it is very likely that mom will pick up, because the frequency is `110` (vs `30` for dad, and `40` for no one). + +In this way we can create very complex condition sets and frequency alterations that we can use to modify the behavior of our story. This is incredibly useful to create games that feel alive, in this example, the mother of the player works all day outside the house, while the dad takes care of the home during the day. + +Conditions and probability modifications can be used to express rules of the world and its randomness to successfully represent a world that is more complex, alive and random than simple rule-based ones. + +The `freq` command can take negative numbers too, to reduce the frequency instead of increasing it. + +```cuentitos + (10) The phone rings twice, and mom picks up. + req energy>20 + freq time_of_day !night -100 +``` + +If the frequency ends up being 0 or less, the affected element will not be considered. In this case, mom would not pickup the phone at all unless it's night time. + +## Changing State ## String interpolation @@ -153,3 +240,4 @@ In this case, only one of the options will show up, each one with a 50% chance. #### Float #### Enum ## Reputations +## Items diff --git a/examples/story-example.cuentitos b/examples/story-example.cuentitos index 874e4b3..21e8aa9 100644 --- a/examples/story-example.cuentitos +++ b/examples/story-example.cuentitos @@ -18,4 +18,31 @@ As you take your first steps in this urban jungle, you feel a mix of emotions, h * I nod when the musician looks my way, to show I really enjoy the music. (500) Wandering the market, you stumble upon a hidden alley adorned with vibrant street art. Each colorful mural tells a different story, capturing your imagination and sparking your creativity. + * (50%) I grab my phone and take pictures of the murals. + * (50%) I keep walking, even if the murals look good, the darkness of the alley is unsettling. This unexpected oasis of visual tranquility provides a respite from the chaos of the city, inspiring you to explore more of the urban canvas and the stories it holds. + +Feeling mentally and physically exhausted from the day's adventures, you decide it's time to head back to your hotel. +As you enter the peaceful sanctuary of your room, you take a deep breath, relieved to have a quiet space where you can recharge and prepare for the challenges ahead. +The sun shines bright through the window. + req time_of_day !night +The moonlight gives the room a peaceful tone. + req time_of_day night +You start to think about all the stuff you need to do tomorrow. + req time_of_day_night +That makes you feel overwhelmed. + req time_of_day_night + req energy <10 + * I make some tea + req item tea + A good cup of tea is always good to regulate after the sensory overload of the city. + * I go to bed + Feeling depleted of spoons, you go right back to bed. + * I call my parents + req energy >10 + (30) The phone rings twice, and dad picks up. + req energy>20 + (10) The phone rings twice, and mom picks up. + req energy>20 + freq time_of_day morning 100 + (40) The phone rings ten times, nobody is at home. From 16a95ec6784adb3594fd440a33604ea197557e67 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Wed, 19 Apr 2023 19:03:40 -0300 Subject: [PATCH 03/94] palabritas parser first steps --- Cargo.toml | 1 + palabritas-parser/Cargo.toml | 12 ++++ palabritas-parser/example.palabritas | 48 ++++++++++++++++ palabritas-parser/src/main.rs | 81 +++++++++++++++++++++++++++ palabritas-parser/src/palabritas.pest | 16 ++++++ 5 files changed, 158 insertions(+) create mode 100644 palabritas-parser/Cargo.toml create mode 100644 palabritas-parser/example.palabritas create mode 100644 palabritas-parser/src/main.rs create mode 100644 palabritas-parser/src/palabritas.pest diff --git a/Cargo.toml b/Cargo.toml index 858c02d..5849e6a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,7 @@ members = [ "compiler", "runtime", "runtime-c", + "palabritas-parser", "cli", "editor/src-tauri" ] diff --git a/palabritas-parser/Cargo.toml b/palabritas-parser/Cargo.toml new file mode 100644 index 0000000..38dafae --- /dev/null +++ b/palabritas-parser/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "palabritas-parser" +version = "0.0.0" +edition = "2021" + +[[bin]] +name = "palabritas-parser" +path = "src/main.rs" + +[dependencies] +pest = "2.0" +pest_derive = "2.0" \ No newline at end of file diff --git a/palabritas-parser/example.palabritas b/palabritas-parser/example.palabritas new file mode 100644 index 0000000..44e4b37 --- /dev/null +++ b/palabritas-parser/example.palabritas @@ -0,0 +1,48 @@ +You've just arrived in the bustling city, full of excitement and anticipation for your new job. +The skyline reaches for the clouds, and the sounds of traffic and people surround you. +As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment. + * I take a walk through a nearby park to relax and acclimate to the city. + As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses. + You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts. + (50/100) A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise. + This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. + * I visit a popular street market to experience the city's unique flavors and energy. + (50) At the bustling street market, you discover a food stand offering mouthwatering delicacies. + As you sample the delicious fare, you strike up a conversation with the enthusiastic vendor. + It's a welcome distraction from the noise around you. + (2) As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician. + The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise. + You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape. + * (50%) I leave two dollars to the artist. + The musician smiles and nods thanking you. + * I nod when the musician looks my way, to show I really enjoy the music. + (500) Wandering the market, you stumble upon a hidden alley adorned with vibrant street art. + Each colorful mural tells a different story, capturing your imagination and sparking your creativity. + * (50%) I grab my phone and take pictures of the murals. + * (50%) I keep walking, even if the murals look good, the darkness of the alley is unsettling. + This unexpected oasis of visual tranquility provides a respite from the chaos of the city, inspiring you to explore more of the urban canvas and the stories it holds. + +Feeling mentally and physically exhausted from the day's adventures, you decide it's time to head back to your hotel. +As you enter the peaceful sanctuary of your room, you take a deep breath, relieved to have a quiet space where you can recharge and prepare for the challenges ahead. +The sun shines bright through the window. + req time_of_day !night +The moonlight gives the room a peaceful tone. + req time_of_day night +You start to think about all the stuff you need to do tomorrow. + req time_of_day_night +That makes you feel overwhelmed. + req time_of_day_night + req energy <10 + * I make some tea + req item tea + A good cup of tea is always good to regulate after the sensory overload of the city. + * I go to bed + Feeling depleted of spoons, you go right back to bed. + * I call my parents + req energy >10 + (30) The phone rings twice, and dad picks up. + req energy>20 + (10) The phone rings twice, and mom picks up. + req energy>20 + freq time_of_day morning 100 + (40) The phone rings ten times, nobody is at home. \ No newline at end of file diff --git a/palabritas-parser/src/main.rs b/palabritas-parser/src/main.rs new file mode 100644 index 0000000..2a4ce38 --- /dev/null +++ b/palabritas-parser/src/main.rs @@ -0,0 +1,81 @@ +extern crate pest; +#[macro_use] +extern crate pest_derive; + +use pest::{Parser, iterators::Pair}; + +#[derive(Parser)] +#[grammar = "palabritas.pest"] +pub struct PalabritasParser; + +fn main() { + + let unparsed_file = std::fs::read_to_string("example.palabritas").expect("cannot read file"); + let file = PalabritasParser::parse(Rule::file, &unparsed_file) + .expect("unsuccessful parse") // unwrap the parse result + .next().unwrap(); + + for line in file.into_inner() { + match line.as_rule() { + Rule::text_shown => { + debug_print(line); + } + Rule::option => { + debug_print(line); + } + Rule::EOI => (), + _ => unreachable!(), + } + } +} + + +fn debug_print(pair: Pair) +{ + let text_parts = pair.into_inner(); + let mut indent_count = 0; + for text_part in text_parts + { + if text_part.as_rule() == Rule::indent + { + indent_count+=1; + } else + if text_part.as_rule() == Rule::one_off + { + println!("one_off: {}",text_part.as_str() ); + } else + if text_part.as_rule() == Rule::line + { + let mut line_parts = text_part.into_inner(); + println!("(Indent{}){}",indent_count, line_parts.next().unwrap().as_str()); + for requirement_or_frequency in line_parts + { + if requirement_or_frequency.as_rule() == Rule::requirement + { + let mut requirement_parts = requirement_or_frequency.into_inner(); + requirement_parts.next(); + let mut req_str = "req: ".to_string(); + while let Some(requirement_part) = requirement_parts.next() + { + req_str = req_str + requirement_part.as_str(); + } + + println!("{}",req_str); + + } else + if requirement_or_frequency.as_rule() == Rule::frequency + { + let mut frequency_parts = requirement_or_frequency.into_inner(); + frequency_parts.next(); + let mut freq_str = "freq: ".to_string(); + while let Some(frequency_part) = frequency_parts.next() + { + freq_str = freq_str + frequency_part.as_str(); + } + + println!("{}",freq_str); + } + } + } + } +} \ No newline at end of file diff --git a/palabritas-parser/src/palabritas.pest b/palabritas-parser/src/palabritas.pest new file mode 100644 index 0000000..b84bec7 --- /dev/null +++ b/palabritas-parser/src/palabritas.pest @@ -0,0 +1,16 @@ +char = { ASCII_ALPHANUMERIC | "." | "_" | "/" | "," | ";" | "'" | " " | "?" | "!" | "¿" | "¡"} + +comparisson_operator = { "=" | "!=" | "<" | ">" | "<=" | ">=" } +condition = { ASCII_ALPHANUMERIC+ ~ " "? ~ (comparisson_operator ~ " "? ~ ASCII_ALPHANUMERIC+ | "!" ~ ASCII_ALPHANUMERIC | ASCII_ALPHANUMERIC+) } +indent = { " " | "\t" } + +requirement = { NEWLINE ~ indent* ~ "req " ~ condition } +frequency = { NEWLINE ~ indent* ~ "freq " ~ condition ~ " " ~ ASCII_DIGIT+ } +one_off = { "(" ~ ((ASCII_DIGIT+ ~ "%") | ("0." ~ ASCII_DIGIT+) | (ASCII_DIGIT+ ~ "/" ~ ASCII_DIGIT+) | (ASCII_DIGIT+)) ~ ")" ~ " "? } +text = { char+ } +line = { text ~ requirement* ~ frequency? } + +option = { indent* ~ "*" ~ " "? ~ one_off? ~ line } +text_shown = { indent* ~ one_off? ~ line } + +file = { SOI ~ ((text_shown | option | indent)? ~ NEWLINE)* ~ (text_shown | option | indent+)? ~ EOI } \ No newline at end of file From dede595294953baa739bd7c99277408445915359 Mon Sep 17 00:00:00 2001 From: Fran Tufro Date: Thu, 20 Apr 2023 09:21:04 -0300 Subject: [PATCH 04/94] Some progress on the guide an examples. --- definitions/existing-rutnime.md | 26 --------- definitions/palabritas.md | 98 +++++++++++++++++++++++++++++--- definitions/runtime.md | 16 ------ definitions/variables.md | 20 ------- examples/story-example.cuentitos | 63 ++++++++++++++++---- 5 files changed, 141 insertions(+), 82 deletions(-) delete mode 100644 definitions/existing-rutnime.md delete mode 100644 definitions/runtime.md delete mode 100644 definitions/variables.md diff --git a/definitions/existing-rutnime.md b/definitions/existing-rutnime.md deleted file mode 100644 index e36598c..0000000 --- a/definitions/existing-rutnime.md +++ /dev/null @@ -1,26 +0,0 @@ -# Existing Runtime - -What it needs: - -GameState { - inventory: Vec, - variables: Vec, - -} - -0) set_seed(seed: int) - -1) get_event(state: GameState) -> Option - 1) Por cada requerimiento cumplido aumenta el peso - 2) Aplico el cooldown a los eventos que salieron si están debajo de un threshold - 3) Random para seleccionar evento - 4) Devovler evento con opciones disponibles validas y bajar el peso - 6) Reset de modificadores seteados en (1) - -2) choose(n) -> Option - 1) dada la opcion elegida, compruebo que la puede elegir - 2) get random result - 3) apply effects - 4) set important decision if needed - 5) return effect result - diff --git a/definitions/palabritas.md b/definitions/palabritas.md index b5d93c0..bf803ad 100644 --- a/definitions/palabritas.md +++ b/definitions/palabritas.md @@ -106,7 +106,31 @@ The hidden alley! Let's see why: The sum of frequencies is `50 + 2 + 500 = 552`, then the probability of the deli stand is `50 / 552 ~= 0.09`, the probability of the musician is `2 / 552 ~= 0.003` and the probability of the hidden alley is `500 / 552 ~= 0.9`. So 9 out of 10 times we'll get the alley. -### Probability of Options +### Named Buckets + +You can also create what we call `named buckets`. These buckets support probabilities, conditions, modifiers as any piece of text. + +```cuentitos + (50) At the bustling street market, you discover a food stand offering mouthwatering delicacies. + [(50) happy_vendor] + req time_of_day morning + (50%) You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer. + (50%) You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations. + [(50) tired_vendor] + req time_of_day morning + (50%) You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand. + (50%) You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them. + [tired_vendor] + req time_of_day night + (50%) You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction. + (50%) The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers. + You feel they're too busy to bother them with questions. +``` + +To create one of these you wrap the name and probability with `[]`, for example `[(50%) my_name]`. The name must to be snake case (lower_case_and_underscored). Then you can apply `req`, `mod` or `set` + + +## Probability of Options Probability can be applied to pretty much everything in `cuentitos`, including options. Let's explore that. @@ -125,7 +149,7 @@ If a choice doesn't have probability set, the probability of it showing up is 10 In this case there is a 50% chance the user will see the option to leave two dollars to the musician. So half of the times he'll support the artist economically, and half just nod. -#### Options bucket +### Options bucket If all the options in an indentation level are probabilistic, then a bucket is created. @@ -154,13 +178,14 @@ The moonlight gives the room a peaceful tone. req time_of_day night ``` -In this case, we're putting conditions to these two lines of text. They will only show up if the `time_of_day` variable value satisfies the conditions. The first one will show if time of day is not `night`, the second one, will show when time of day is `night`. +In this case, we're putting requirements to these two lines of text using the `req` command. The lines will only show up if the `time_of_day` variable value satisfies the requirements. The first one will show if time of day is not `night`, the second one, will show when time of day is `night`. Check the `Configuration` section to learn about variables. -In this case, the requirements are mutually exclusive, only one will show at a time. But that's not a requirement. You could have multiple lines with different requirements and have them show one after the other if the conditions are satisfied. +In this case, the requirements are mutually exclusive, only one line will show at a time. But that's not mandatory. You could have multiple lines with different requirements and have them show one after the other if the conditions are met. ```cuentitos +[...] The sun shines bright through the window. req time_of_day !night The moonlight gives the room a peaceful tone. @@ -170,17 +195,18 @@ You start to think about all the stuff you need to do tomorrow. That makes you feel overwhelmed. req time_of_day_night req energy <10 +You decide to focus on the now... + req time_of_day_night ``` -These two new lines will only show at night, after `The moonlight gives...`. The last one only if the player is low on energy. +Thse three lines will only show at night, after `The moonlight gives...`. The second one only if the player is low on energy. You can also add requirements to options. ```cuentitos [...] -That makes you feel overwhelmed. +You decide to focus on the now... req time_of_day_night - req energy <10 * I make some tea req item tea A good cup of tea is always good to regulate after the sensory overload of the city. @@ -227,11 +253,65 @@ The `freq` command can take negative numbers too, to reduce the frequency instea freq time_of_day !night -100 ``` -If the frequency ends up being 0 or less, the affected element will not be considered. In this case, mom would not pickup the phone at all unless it's night time. +If the frequency ends up being 0 or less, the affected element will not be considered. In this case, mom will not pickup the phone at all unless it's night time. ## Changing State -## String interpolation +The next thing we want to talk about is modifying state. + +`cuentitos`' runtime will manage the state for all the variables that get defined in the `Configuration`. We can make changes to that state from the game engine or from the story definition itself. + +```cuentitos + * I go to bed + Feeling depleted of spoons, you go right back to bed. + mod energy 10 + mod time -7.5 +``` + +For that we use the `mod` command with the variable name (in this case `energy` and `time`) and the value modification we want to apply. In this case we added `10` to `energy` and subtracted `7.5` to `time`. From this we infer that `energy` is a variable of type `integer` and `time` is of type `float`. We also supoprt `bool` and `enum`, check the `Configuration` section below. + +## Knots, diverts and stitches + +Being heavily inspired by [Ink](https://www.inklestudios.com/ink/), we shamelessly stole the idea of `knots` and `diverts` and `stitches` from there. + +A `knot` is a section of the story that you assign a name to so that you can move to it easily. You define knots by wrapping a snake_case identifier with three equal signs. + +```cuentitos +=== second_day === +You wake up feeling refreshed. +``` + +Then you can go to a knot by using the arrow (divert) command `->`. + +```cuentitos + * I go to bed + Feeling depleted of spoons, you go right back to bed. + mod energy 10 + mod time -7.5 + -> second_day +``` + +Once the story hits `-> second_day`, the player will be directed to that knot. + +A `stitch` is a section within a `knot` and it's defined by using a single `=`. +You can access a stitch by using the name of the knot, then a dot and then the stich name (`second_day.museum` in the example below). + +If the stick is within the current knot, you can ignore the knot name (`farmers_market` in the example below). + +```cuentitos +=== second_day === +You wake up feeling refreshed. Let's see what this day brings. + * Explore a museum + -> second_day.museum + * Go to the Farmer's Market + -> farmers_market + += museum + You get to the museum door. You watch through the window. It seems crowded. + += farmers_market + You get to the farmer's market. It's very early and some stands are still being set up. +``` ## Configuration ### Variables diff --git a/definitions/runtime.md b/definitions/runtime.md deleted file mode 100644 index dd62a3f..0000000 --- a/definitions/runtime.md +++ /dev/null @@ -1,16 +0,0 @@ -# Runtime - -The runtime uses MessagePack to communicate with external systems. - -In this document you'll find all the information related to how to setup the runtime and communicate with it. - -## Setup - - - -## API - -### Events -### Resources -### Inventories -### Items diff --git a/definitions/variables.md b/definitions/variables.md deleted file mode 100644 index 005902b..0000000 --- a/definitions/variables.md +++ /dev/null @@ -1,20 +0,0 @@ -# Variables - -A user can define variables and their types to use inside conditions. - -This is done in the configuration file. - -These can be of type `integer`, `float`, and `bool`. - -```toml -[variables] -health = "integer" -money = "integer" -``` - -Once defined, you can use them inside of an event, both as requirements and effects: - -``` -You find a - req money 10 -``` diff --git a/examples/story-example.cuentitos b/examples/story-example.cuentitos index 21e8aa9..4873e32 100644 --- a/examples/story-example.cuentitos +++ b/examples/story-example.cuentitos @@ -4,12 +4,23 @@ As you take your first steps in this urban jungle, you feel a mix of emotions, h * I take a walk through a nearby park to relax and acclimate to the city. As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses. You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts. - (50/100) A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise. + (50%) A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise. This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. * I visit a popular street market to experience the city's unique flavors and energy. (50) At the bustling street market, you discover a food stand offering mouthwatering delicacies. - As you sample the delicious fare, you strike up a conversation with the enthusiastic vendor. - It's a welcome distraction from the noise around you. + [(50%) happy_vendor] + req time_of_day morning + (50%) You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer. + (50%) You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations. + [(50%) tired_vendor] + req time_of_day morning + (50%) You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand. + (50%) You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them. + [tired_vendor] + req time_of_day night + (50%) You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction. + (50%) The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers. + You feel they're too busy to bother them with questions. (2) As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician. The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise. You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape. @@ -29,20 +40,50 @@ The sun shines bright through the window. The moonlight gives the room a peaceful tone. req time_of_day night You start to think about all the stuff you need to do tomorrow. - req time_of_day_night + req time_of_day night That makes you feel overwhelmed. - req time_of_day_night + req time_of_day night req energy <10 +You decide to focus on the now... + req time_of_day night * I make some tea req item tea A good cup of tea is always good to regulate after the sensory overload of the city. + You sit in the couch to enjoy your tea. Drink half of the cup and fall asleep. + mod energy 5 + mod time -7.5 + -> second_day * I go to bed Feeling depleted of spoons, you go right back to bed. + mod energy 10 + mod time -7.5 + -> second_day * I call my parents req energy >10 - (30) The phone rings twice, and dad picks up. - req energy>20 - (10) The phone rings twice, and mom picks up. - req energy>20 - freq time_of_day morning 100 - (40) The phone rings ten times, nobody is at home. + [call] + (30) The phone rings twice, and dad picks up. You have a good chat. + req energy>20 + mod energy -10 + (10) The phone rings twice, and mom picks up. You have a good chat. + req energy>20 + freq time_of_day morning 100 + mod energy -10 + (40) The phone rings ten times, nobody is at home. + mod energy 10 + You decide it's now time to go to sleep. + mod energy 10 + mod time -7.5 + -> second_day + +=== second_day === +You wake up feeling refreshed. Let's see what this day brings. + * Explore a museum + -> second_day.museum + * Go to the Farmer's Market + -> second_day.farmers_market + += museum + You get to the museum door. You watch through the window. It seems crowded. + += farmers_market + You get to the farmer's market. It's very early and some stands are still being set up. \ No newline at end of file From 6ee1e377e6e673c577aafe88b65d0c41c700bd17 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Thu, 20 Apr 2023 18:28:53 -0300 Subject: [PATCH 05/94] parser update + tests --- palabritas-parser/Cargo.toml | 5 +- palabritas-parser/example.palabritas | 48 --- palabritas-parser/src/main.rs | 427 ++++++++++++++++++++++---- palabritas-parser/src/palabritas.pest | 38 ++- 4 files changed, 393 insertions(+), 125 deletions(-) delete mode 100644 palabritas-parser/example.palabritas diff --git a/palabritas-parser/Cargo.toml b/palabritas-parser/Cargo.toml index 38dafae..742870c 100644 --- a/palabritas-parser/Cargo.toml +++ b/palabritas-parser/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "palabritas-parser" -version = "0.0.0" +version = "0.2.0" edition = "2021" [[bin]] @@ -9,4 +9,5 @@ path = "src/main.rs" [dependencies] pest = "2.0" -pest_derive = "2.0" \ No newline at end of file +pest_derive = "2.0" +rand = "0.8.5" \ No newline at end of file diff --git a/palabritas-parser/example.palabritas b/palabritas-parser/example.palabritas deleted file mode 100644 index 44e4b37..0000000 --- a/palabritas-parser/example.palabritas +++ /dev/null @@ -1,48 +0,0 @@ -You've just arrived in the bustling city, full of excitement and anticipation for your new job. -The skyline reaches for the clouds, and the sounds of traffic and people surround you. -As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment. - * I take a walk through a nearby park to relax and acclimate to the city. - As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses. - You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts. - (50/100) A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise. - This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. - * I visit a popular street market to experience the city's unique flavors and energy. - (50) At the bustling street market, you discover a food stand offering mouthwatering delicacies. - As you sample the delicious fare, you strike up a conversation with the enthusiastic vendor. - It's a welcome distraction from the noise around you. - (2) As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician. - The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise. - You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape. - * (50%) I leave two dollars to the artist. - The musician smiles and nods thanking you. - * I nod when the musician looks my way, to show I really enjoy the music. - (500) Wandering the market, you stumble upon a hidden alley adorned with vibrant street art. - Each colorful mural tells a different story, capturing your imagination and sparking your creativity. - * (50%) I grab my phone and take pictures of the murals. - * (50%) I keep walking, even if the murals look good, the darkness of the alley is unsettling. - This unexpected oasis of visual tranquility provides a respite from the chaos of the city, inspiring you to explore more of the urban canvas and the stories it holds. - -Feeling mentally and physically exhausted from the day's adventures, you decide it's time to head back to your hotel. -As you enter the peaceful sanctuary of your room, you take a deep breath, relieved to have a quiet space where you can recharge and prepare for the challenges ahead. -The sun shines bright through the window. - req time_of_day !night -The moonlight gives the room a peaceful tone. - req time_of_day night -You start to think about all the stuff you need to do tomorrow. - req time_of_day_night -That makes you feel overwhelmed. - req time_of_day_night - req energy <10 - * I make some tea - req item tea - A good cup of tea is always good to regulate after the sensory overload of the city. - * I go to bed - Feeling depleted of spoons, you go right back to bed. - * I call my parents - req energy >10 - (30) The phone rings twice, and dad picks up. - req energy>20 - (10) The phone rings twice, and mom picks up. - req energy>20 - freq time_of_day morning 100 - (40) The phone rings ten times, nobody is at home. \ No newline at end of file diff --git a/palabritas-parser/src/main.rs b/palabritas-parser/src/main.rs index 2a4ce38..f5f880e 100644 --- a/palabritas-parser/src/main.rs +++ b/palabritas-parser/src/main.rs @@ -2,80 +2,379 @@ extern crate pest; #[macro_use] extern crate pest_derive; -use pest::{Parser, iterators::Pair}; +use pest::Parser; #[derive(Parser)] #[grammar = "palabritas.pest"] pub struct PalabritasParser; fn main() { + let unparsed_file = + std::fs::read_to_string("../examples/story-example.cuentitos").expect("cannot read file"); + PalabritasParser::parse(Rule::file, &unparsed_file) + .expect("unsuccessful parse") // unwrap the parse result + .next() + .unwrap(); +} + +#[cfg(test)] +mod test { + + use pest::Parser; + use rand::distributions::Alphanumeric; + use rand::{self, Rng}; + + #[derive(Parser)] + #[grammar = "palabritas.pest"] + pub struct PalabritasParser; + + const SPECIAL_CHARACTERS: [&str; 11] = [".", "_", "/", ",", ";", "'", " ", "?", "!", "¿", "¡"]; + + const COMPARISON_OPERATORS: [&str; 7] = ["=", "!=", "<", ">", "<=", ">=", "!"]; - let unparsed_file = std::fs::read_to_string("example.palabritas").expect("cannot read file"); - let file = PalabritasParser::parse(Rule::file, &unparsed_file) - .expect("unsuccessful parse") // unwrap the parse result - .next().unwrap(); - - for line in file.into_inner() { - match line.as_rule() { - Rule::text_shown => { - debug_print(line); - } - Rule::option => { - debug_print(line); - } - Rule::EOI => (), - _ => unreachable!(), - } + const INDENTATIONS: [&str; 2] = [" ", "\t"]; + + #[test] + fn parse_char() { + //char = { ASCII_ALPHANUMERIC | "." | "_" | "/" | "," | ";" | "'" | " " | "?" | "!" | "¿" | "¡"} + let alphanumeric_char = (rand::thread_rng().sample(&Alphanumeric) as char).to_string(); + assert_parse(Rule::char, &alphanumeric_char); + + for special_character in SPECIAL_CHARACTERS { + assert_parse(Rule::char, special_character); } -} + } + + #[test] + fn parse_integer() { + //integer = { "-"? ~ ASCII_DIGIT+ } + let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); + assert_parse(Rule::integer, &integer); + } + + #[test] + fn parse_float() { + //float = { integer ~ "." ~ ASCII_DIGIT* } + let float = rand::thread_rng() + .gen_range(i8::MIN as f32..i8::MAX as f32) + .to_string(); + assert_parse(Rule::float, &float); + } + + #[test] + fn parse_percentage() { + //percentage = { integer ~ "%" } + let percentage = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string() + "%"; + assert_parse(Rule::percentage, &percentage); + } + + #[test] + fn parse_indentation() { + //indentation = { " " | "\t" } + for indentation in INDENTATIONS { + assert_parse(Rule::indentation, &indentation); + } + } + + #[test] + fn parse_string() { + //string = { char+ } + assert_parse(Rule::string, &make_random_string()); + } + + #[test] + fn parse_comparison_operator() { + //comparison_operator = { "!=" | "=" | "<=" | ">=" | "<" | ">" | "!" } + for operator in COMPARISON_OPERATORS { + assert_parse(Rule::comparison_operator, operator); + } + } + + #[test] + fn parse_identifier() { + //identifier = { (ASCII_ALPHA | "_" ) ~ (ASCII_ALPHANUMERIC | "_")* } + assert_parse(Rule::identifier, &make_random_identifier()); + } + + #[test] + fn parse_value() { + //value = { identifier | float | percentage | integer} + let identifier = make_random_identifier(); + assert_parse(Rule::value, &identifier); + + let float = rand::thread_rng() + .gen_range(i8::MIN as f32..i8::MAX as f32) + .to_string(); + assert_parse(Rule::value, &float); + + let percentage = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string() + "%"; + assert_parse(Rule::value, &percentage); + + let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); + assert_parse(Rule::value, &integer); + } + + #[test] + fn parse_condition() { + //condition = { identifier ~ " "* ~ (comparison_operator ~ " "*)? ~ value } + let identifier = make_random_identifier(); + let comparison_operator = + COMPARISON_OPERATORS[rand::thread_rng().gen_range(0..COMPARISON_OPERATORS.len())]; + let value = make_random_identifier(); + + assert_parse(Rule::condition, &(identifier.clone() + " " + &value)); + assert_parse( + Rule::condition, + &(identifier + comparison_operator + &value), + ); + } + + #[test] + fn parse_requirement() { + //requirement = { "req" ~ " "+ ~ condition } + let condition = make_random_condition(); + assert_parse(Rule::requirement, &("req ".to_string() + &condition)); + } + #[test] + fn parse_frequency() { + //frequency = { "freq" ~ " "+ ~ condition ~ " "+ ~ ( float | integer ) } + let condition = make_random_condition(); + let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); + let float = rand::thread_rng() + .gen_range(i8::MIN as f32..i8::MAX as f32) + .to_string(); + + assert_parse( + Rule::frequency, + &("freq ".to_string() + &condition + " " + &integer), + ); + assert_parse( + Rule::frequency, + &("freq ".to_string() + &condition + " " + &float), + ); + } + + #[test] + fn parse_modifier() { + //modifier = { "mod" ~ " "+ ~ identifier ~ " "+ ~ value} + let identifier = make_random_identifier(); + let value = make_random_identifier(); + + assert_parse( + Rule::modifier, + &("mod ".to_string() + &identifier + " " + &value), + ); + } + + #[test] + fn parse_divert() { + //divert = { "->" ~ " "* ~ identifier ~ ("." ~ identifier)? } + let knot = make_random_identifier(); + let stitch = make_random_identifier(); + + assert_parse(Rule::divert, &("->".to_string() + &knot)); + assert_parse(Rule::divert, &("->".to_string() + &knot + "." + &stitch)); + } + + #[test] + fn parse_command() { + //command = { NEWLINE ~ indentation* ~ (requirement | frequency | modifier | divert) ~ " "*} + let requirement = "req ".to_string() + &(make_random_condition()); + assert_parse( + Rule::command, + &("\n".to_string() + &make_random_indentation() + &requirement), + ); + + let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); + let frequency = "freq ".to_string() + &make_random_condition() + " " + &integer; + assert_parse( + Rule::command, + &("\n".to_string() + &make_random_indentation() + &frequency), + ); + + let modifier = "mod ".to_string() + &make_random_identifier() + " " + &make_random_identifier(); + assert_parse( + Rule::command, + &("\n".to_string() + &make_random_indentation() + &modifier), + ); + let divert = "->".to_string() + &make_random_identifier(); + assert_parse( + Rule::command, + &("\n".to_string() + &make_random_indentation() + &divert), + ); + } + + #[test] + fn parse_probability() { + //probability = { "(" ~ " "* ~ ( percentage | float | integer ) ~ " "* ~ ")" ~ " "* } + let percentage = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string() + "%"; + assert_parse(Rule::probability, &("(".to_string() + &percentage + ")")); + + let float = rand::thread_rng() + .gen_range(i8::MIN as f32..i8::MAX as f32) + .to_string(); + assert_parse(Rule::probability, &("(".to_string() + &float + ")")); + + let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); + assert_parse(Rule::probability, &("(".to_string() + &integer + ")")); + } + + #[test] + fn parse_knot() { + //knot = {"===" ~ " "* ~ identifier ~ " "* ~"===" ~ " "*} + let identifier = make_random_identifier(); + assert_parse(Rule::knot, &("===".to_string() + &identifier + "===")); + } + + #[test] + fn parse_stitch() { + //stitch = {"=" ~ " "* ~ identifier ~ " "*} + let identifier = make_random_identifier(); + assert_parse(Rule::stitch, &("=".to_string() + &identifier)); + } + + #[test] + fn parse_text() { + //text = { probability? ~ string } + let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); + let probability = "(".to_string() + &integer + ")"; + assert_parse(Rule::text, &make_random_string()); + assert_parse(Rule::text, &(probability + &make_random_string())); + } + + #[test] + fn parse_option() { + //option = { indentation* ~ "*" ~ " "* ~ text ~ command* } + let text = make_random_string(); + let command = "\nreq ".to_string() + &(make_random_condition()); + assert_parse(Rule::option, &(make_random_indentation() + "*" + &text)); + assert_parse( + Rule::option, + &(make_random_indentation() + "*" + &text + &command), + ); + } + + #[test] + fn parse_text_shown() { + //text_shown = { indentation* ~ text ~ command* } + let text = make_random_string(); + let command = "\nreq ".to_string() + &(make_random_condition()); + assert_parse(Rule::text_shown, &(make_random_indentation() + &text)); + assert_parse( + Rule::text_shown, + &(make_random_indentation() + &text + &command), + ); + } + + #[test] + fn parse_named_bucket() { + //named_bucket = { indentation* ~ "[" ~ " "* ~ text ~ "]" ~ " "* ~ command* } + let text = make_random_string(); + let command = "\nreq ".to_string() + &(make_random_condition()); + assert_parse( + Rule::named_bucket, + &(make_random_indentation() + "[" + &text + "]"), + ); + assert_parse( + Rule::named_bucket, + &(make_random_indentation() + "[" + &text + "]" + &command), + ); + } + + #[test] + fn parse_file() { + //file = { SOI ~ (( named_bucket | text_shown | option | indentation+ | knot | stitch)? ~ NEWLINE)* ~ (named_bucket | text_shown | option | indentation+ | knot | stitch)? ~ EOI } + let unparsed_file = + std::fs::read_to_string("../examples/story-example.cuentitos").expect("cannot read file"); + assert_parse(Rule::file, &unparsed_file); + } + + fn assert_parse(rule: Rule, input: &str) { + let pair = PalabritasParser::parse(rule, input) + .expect("unsuccessful parse") + .next() + .unwrap(); + assert_eq!(pair.as_rule(), rule); + assert_eq!(pair.as_str(), input); + } + + fn make_random_indentation() -> String { + let indentation_count = rand::thread_rng().gen_range(0..20); + let mut indentation = String::default(); + + for _ in 0..indentation_count { + indentation += " "; + } -fn debug_print(pair: Pair) -{ - let text_parts = pair.into_inner(); - let mut indent_count = 0; - for text_part in text_parts - { - if text_part.as_rule() == Rule::indent - { - indent_count+=1; - } else - if text_part.as_rule() == Rule::one_off - { - println!("one_off: {}",text_part.as_str() ); - } else - if text_part.as_rule() == Rule::line - { - let mut line_parts = text_part.into_inner(); - println!("(Indent{}){}",indent_count, line_parts.next().unwrap().as_str()); - for requirement_or_frequency in line_parts - { - if requirement_or_frequency.as_rule() == Rule::requirement - { - let mut requirement_parts = requirement_or_frequency.into_inner(); - requirement_parts.next(); - let mut req_str = "req: ".to_string(); - while let Some(requirement_part) = requirement_parts.next() - { - req_str = req_str + requirement_part.as_str(); - } - - println!("{}",req_str); - - } else - if requirement_or_frequency.as_rule() == Rule::frequency - { - let mut frequency_parts = requirement_or_frequency.into_inner(); - frequency_parts.next(); - let mut freq_str = "freq: ".to_string(); - while let Some(frequency_part) = frequency_parts.next() - { - freq_str = freq_str + frequency_part.as_str(); - } - - println!("{}",freq_str); - } + indentation + } + fn make_random_condition() -> String { + make_random_identifier() + " " + &make_random_identifier() + } + + fn make_random_identifier() -> String { + let alphanumeric_size = rand::thread_rng().gen_range(1..20); + let underscore_size = rand::thread_rng().gen_range(1..5); + + //Making alphanumeric string + let identifier: Vec = rand::thread_rng() + .sample_iter(&Alphanumeric) + .take(alphanumeric_size) + .collect(); + + let mut identifier = std::str::from_utf8(&identifier).unwrap().to_string(); + + //Adding underscores + for _ in 0..underscore_size { + identifier += "_"; + } + shuffle_string(&mut identifier); + + //Making sure starting character is not a number + let mut starting_char = rand::thread_rng().sample(&Alphanumeric) as char; + while starting_char.is_numeric() { + starting_char = rand::thread_rng().sample(&Alphanumeric) as char; + } + + identifier = starting_char.to_string() + &identifier; + + identifier + } + + fn make_random_string() -> String { + let alphanumeric_size = rand::thread_rng().gen_range(1..20); + let special_characters_size = rand::thread_rng().gen_range(1..20); + + //Making alphanumeric string + let string: Vec = rand::thread_rng() + .sample_iter(&Alphanumeric) + .take(alphanumeric_size) + .collect(); + + let mut string = std::str::from_utf8(&string).unwrap().to_string(); + + //Adding special characters + for _ in 0..special_characters_size { + string += SPECIAL_CHARACTERS[rand::thread_rng().gen_range(0..SPECIAL_CHARACTERS.len())]; + } + + shuffle_string(&mut string); + string + } + + fn shuffle_string(string: &mut String) { + //Shuffling characters + let mut final_string = String::default(); + + while !string.is_empty() { + let mut index = rand::thread_rng().gen_range(0..string.len()); + while !string.is_char_boundary(index) { + index -= 1; } + final_string += &string.remove(index).to_string(); } + + *string = final_string; } -} \ No newline at end of file +} diff --git a/palabritas-parser/src/palabritas.pest b/palabritas-parser/src/palabritas.pest index b84bec7..50768b1 100644 --- a/palabritas-parser/src/palabritas.pest +++ b/palabritas-parser/src/palabritas.pest @@ -1,16 +1,32 @@ char = { ASCII_ALPHANUMERIC | "." | "_" | "/" | "," | ";" | "'" | " " | "?" | "!" | "¿" | "¡"} +integer = { "-"? ~ ASCII_DIGIT+ } +float = { integer ~ "." ~ ASCII_DIGIT* } +percentage = { integer ~ "%" } +indentation = { " " | "\t" } +string = { char+ } +comparison_operator = { "!=" | "=" | "<=" | ">=" | "<" | ">" | "!" } -comparisson_operator = { "=" | "!=" | "<" | ">" | "<=" | ">=" } -condition = { ASCII_ALPHANUMERIC+ ~ " "? ~ (comparisson_operator ~ " "? ~ ASCII_ALPHANUMERIC+ | "!" ~ ASCII_ALPHANUMERIC | ASCII_ALPHANUMERIC+) } -indent = { " " | "\t" } +identifier = { (ASCII_ALPHA | "_" ) ~ (ASCII_ALPHANUMERIC | "_")* } +value = { identifier | float | percentage | integer} +condition = { identifier ~ " "* ~ (comparison_operator ~ " "*)? ~ value } -requirement = { NEWLINE ~ indent* ~ "req " ~ condition } -frequency = { NEWLINE ~ indent* ~ "freq " ~ condition ~ " " ~ ASCII_DIGIT+ } -one_off = { "(" ~ ((ASCII_DIGIT+ ~ "%") | ("0." ~ ASCII_DIGIT+) | (ASCII_DIGIT+ ~ "/" ~ ASCII_DIGIT+) | (ASCII_DIGIT+)) ~ ")" ~ " "? } -text = { char+ } -line = { text ~ requirement* ~ frequency? } -option = { indent* ~ "*" ~ " "? ~ one_off? ~ line } -text_shown = { indent* ~ one_off? ~ line } +requirement = { "req" ~ " "+ ~ condition } +frequency = { "freq" ~ " "+ ~ condition ~ " "+ ~ ( float | integer ) } +modifier = { "mod" ~ " "+ ~ identifier ~ " "+ ~ value} +divert = { "->" ~ " "* ~ identifier ~ ("." ~ identifier)? } -file = { SOI ~ ((text_shown | option | indent)? ~ NEWLINE)* ~ (text_shown | option | indent+)? ~ EOI } \ No newline at end of file +command = { NEWLINE ~ indentation* ~ (requirement | frequency | modifier | divert) ~ " "*} + +probability = { "(" ~ " "* ~ ( percentage | float | integer ) ~ " "* ~ ")" ~ " "* } + +knot = {"===" ~ " "* ~ identifier ~ " "* ~"===" ~ " "*} +stitch = {"=" ~ " "* ~ identifier ~ " "*} + +text = { probability? ~ string } + +option = { indentation* ~ "*" ~ " "* ~ text ~ command* } +text_shown = { indentation* ~ text ~ command* } +named_bucket = { indentation* ~ "[" ~ " "* ~ text ~ "]" ~ " "* ~ command* } + +file = { SOI ~ (( named_bucket | text_shown | option | indentation+ | knot | stitch)? ~ NEWLINE)* ~ (named_bucket | text_shown | option | indentation+ | knot | stitch)? ~ EOI } \ No newline at end of file From 38b52316a918d5de888433fdbfd37577c547b55c Mon Sep 17 00:00:00 2001 From: loomstyla Date: Thu, 20 Apr 2023 18:31:35 -0300 Subject: [PATCH 06/94] Update palabritas.pest --- palabritas-parser/src/palabritas.pest | 1 - 1 file changed, 1 deletion(-) diff --git a/palabritas-parser/src/palabritas.pest b/palabritas-parser/src/palabritas.pest index 50768b1..253fc3e 100644 --- a/palabritas-parser/src/palabritas.pest +++ b/palabritas-parser/src/palabritas.pest @@ -10,7 +10,6 @@ identifier = { (ASCII_ALPHA | "_" ) ~ (ASCII_ALPHANUMERIC | "_")* } value = { identifier | float | percentage | integer} condition = { identifier ~ " "* ~ (comparison_operator ~ " "*)? ~ value } - requirement = { "req" ~ " "+ ~ condition } frequency = { "freq" ~ " "+ ~ condition ~ " "+ ~ ( float | integer ) } modifier = { "mod" ~ " "+ ~ identifier ~ " "+ ~ value} From 48fc740f4e81605ba907d3425c543d81a3b20201 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Fri, 21 Apr 2023 12:38:57 -0300 Subject: [PATCH 07/94] named buckets must be snake_case --- palabritas-parser/src/main.rs | 60 +++++++++++++++++++++++++-- palabritas-parser/src/palabritas.pest | 3 +- 2 files changed, 58 insertions(+), 5 deletions(-) diff --git a/palabritas-parser/src/main.rs b/palabritas-parser/src/main.rs index f5f880e..eb901ea 100644 --- a/palabritas-parser/src/main.rs +++ b/palabritas-parser/src/main.rs @@ -90,6 +90,12 @@ mod test { } } + #[test] + fn parse_snake_case() { + //snake_case = { ASCII_ALPHA_LOWER ~ (ASCII_ALPHA_LOWER | "_" | ASCII_DIGIT)* } + assert_parse(Rule::snake_case, &make_random_snake_case()); + } + #[test] fn parse_identifier() { //identifier = { (ASCII_ALPHA | "_" ) ~ (ASCII_ALPHANUMERIC | "_")* } @@ -269,16 +275,33 @@ mod test { #[test] fn parse_named_bucket() { - //named_bucket = { indentation* ~ "[" ~ " "* ~ text ~ "]" ~ " "* ~ command* } - let text = make_random_string(); + //named_bucket = { indentation* ~ "[" ~ " "* ~ probability? ~ snake_case ~ " "* ~ "]" ~ " "* ~ command* } let command = "\nreq ".to_string() + &(make_random_condition()); + let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); + let probability = "(".to_string() + &integer + ")"; + assert_parse( Rule::named_bucket, - &(make_random_indentation() + "[" + &text + "]"), + &(make_random_indentation() + "[" + &make_random_snake_case() + "]"), ); assert_parse( Rule::named_bucket, - &(make_random_indentation() + "[" + &text + "]" + &command), + &(make_random_indentation() + "[" + &make_random_snake_case() + "]" + &command), + ); + + assert_parse( + Rule::named_bucket, + &(make_random_indentation() + "[" + &probability + &make_random_snake_case() + "]"), + ); + + assert_parse( + Rule::named_bucket, + &(make_random_indentation() + + "[" + + &probability + + &make_random_snake_case() + + "]" + + &command), ); } @@ -313,6 +336,35 @@ mod test { make_random_identifier() + " " + &make_random_identifier() } + fn make_random_snake_case() -> String { + let alphanumeric_size = rand::thread_rng().gen_range(1..20); + let underscore_size = rand::thread_rng().gen_range(1..5); + + //Making alphanumeric string + let snake_case: Vec = rand::thread_rng() + .sample_iter(&Alphanumeric) + .take(alphanumeric_size) + .collect(); + + let mut snake_case = std::str::from_utf8(&snake_case).unwrap().to_string(); + + //Adding underscores + for _ in 0..underscore_size { + snake_case += "_"; + } + shuffle_string(&mut snake_case); + + //Making sure starting character is not a number + let mut starting_char = rand::thread_rng().sample(&Alphanumeric) as char; + while starting_char.is_numeric() { + starting_char = rand::thread_rng().sample(&Alphanumeric) as char; + } + + snake_case = starting_char.to_string() + &snake_case; + + snake_case.to_lowercase() + } + fn make_random_identifier() -> String { let alphanumeric_size = rand::thread_rng().gen_range(1..20); let underscore_size = rand::thread_rng().gen_range(1..5); diff --git a/palabritas-parser/src/palabritas.pest b/palabritas-parser/src/palabritas.pest index 253fc3e..5175269 100644 --- a/palabritas-parser/src/palabritas.pest +++ b/palabritas-parser/src/palabritas.pest @@ -6,6 +6,7 @@ indentation = { " " | "\t" } string = { char+ } comparison_operator = { "!=" | "=" | "<=" | ">=" | "<" | ">" | "!" } +snake_case = { ASCII_ALPHA_LOWER ~ (ASCII_ALPHA_LOWER | "_" | ASCII_DIGIT)* } identifier = { (ASCII_ALPHA | "_" ) ~ (ASCII_ALPHANUMERIC | "_")* } value = { identifier | float | percentage | integer} condition = { identifier ~ " "* ~ (comparison_operator ~ " "*)? ~ value } @@ -26,6 +27,6 @@ text = { probability? ~ string } option = { indentation* ~ "*" ~ " "* ~ text ~ command* } text_shown = { indentation* ~ text ~ command* } -named_bucket = { indentation* ~ "[" ~ " "* ~ text ~ "]" ~ " "* ~ command* } +named_bucket = { indentation* ~ "[" ~ " "* ~ probability? ~ snake_case ~ " "* ~ "]" ~ " "* ~ command* } file = { SOI ~ (( named_bucket | text_shown | option | indentation+ | knot | stitch)? ~ NEWLINE)* ~ (named_bucket | text_shown | option | indentation+ | knot | stitch)? ~ EOI } \ No newline at end of file From 2ff5df9fc6906a5d5118f1d8d66b2b01541d5d62 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Fri, 21 Apr 2023 19:50:03 -0300 Subject: [PATCH 08/94] Identation update --- palabritas-parser/src/main.rs | 175 +++++++++++--------------- palabritas-parser/src/palabritas.pest | 75 ++++++----- 2 files changed, 116 insertions(+), 134 deletions(-) diff --git a/palabritas-parser/src/main.rs b/palabritas-parser/src/main.rs index eb901ea..da332b2 100644 --- a/palabritas-parser/src/main.rs +++ b/palabritas-parser/src/main.rs @@ -9,9 +9,8 @@ use pest::Parser; pub struct PalabritasParser; fn main() { - let unparsed_file = - std::fs::read_to_string("../examples/story-example.cuentitos").expect("cannot read file"); - PalabritasParser::parse(Rule::file, &unparsed_file) + let unparsed_file = include_str!("../../examples/story-example.cuentitos"); + PalabritasParser::parse(Rule::File, unparsed_file) .expect("unsuccessful parse") // unwrap the parse result .next() .unwrap(); @@ -38,10 +37,10 @@ mod test { fn parse_char() { //char = { ASCII_ALPHANUMERIC | "." | "_" | "/" | "," | ";" | "'" | " " | "?" | "!" | "¿" | "¡"} let alphanumeric_char = (rand::thread_rng().sample(&Alphanumeric) as char).to_string(); - assert_parse(Rule::char, &alphanumeric_char); + assert_parse(Rule::Char, &alphanumeric_char); for special_character in SPECIAL_CHARACTERS { - assert_parse(Rule::char, special_character); + assert_parse(Rule::Char, special_character); } } @@ -49,7 +48,7 @@ mod test { fn parse_integer() { //integer = { "-"? ~ ASCII_DIGIT+ } let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); - assert_parse(Rule::integer, &integer); + assert_parse(Rule::Integer, &integer); } #[test] @@ -58,66 +57,66 @@ mod test { let float = rand::thread_rng() .gen_range(i8::MIN as f32..i8::MAX as f32) .to_string(); - assert_parse(Rule::float, &float); + assert_parse(Rule::Float, &float); } #[test] fn parse_percentage() { //percentage = { integer ~ "%" } let percentage = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string() + "%"; - assert_parse(Rule::percentage, &percentage); + assert_parse(Rule::Percentage, &percentage); } #[test] fn parse_indentation() { //indentation = { " " | "\t" } for indentation in INDENTATIONS { - assert_parse(Rule::indentation, &indentation); + assert_parse(Rule::Indentation, &indentation); } } #[test] fn parse_string() { //string = { char+ } - assert_parse(Rule::string, &make_random_string()); + assert_parse(Rule::String, &make_random_string()); } #[test] fn parse_comparison_operator() { //comparison_operator = { "!=" | "=" | "<=" | ">=" | "<" | ">" | "!" } for operator in COMPARISON_OPERATORS { - assert_parse(Rule::comparison_operator, operator); + assert_parse(Rule::ComparisonOperator, operator); } } #[test] fn parse_snake_case() { //snake_case = { ASCII_ALPHA_LOWER ~ (ASCII_ALPHA_LOWER | "_" | ASCII_DIGIT)* } - assert_parse(Rule::snake_case, &make_random_snake_case()); + assert_parse(Rule::SnakeCase, &make_random_snake_case()); } #[test] fn parse_identifier() { //identifier = { (ASCII_ALPHA | "_" ) ~ (ASCII_ALPHANUMERIC | "_")* } - assert_parse(Rule::identifier, &make_random_identifier()); + assert_parse(Rule::Identifier, &make_random_identifier()); } #[test] fn parse_value() { //value = { identifier | float | percentage | integer} let identifier = make_random_identifier(); - assert_parse(Rule::value, &identifier); + assert_parse(Rule::Value, &identifier); let float = rand::thread_rng() .gen_range(i8::MIN as f32..i8::MAX as f32) .to_string(); - assert_parse(Rule::value, &float); + assert_parse(Rule::Value, &float); let percentage = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string() + "%"; - assert_parse(Rule::value, &percentage); + assert_parse(Rule::Value, &percentage); let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); - assert_parse(Rule::value, &integer); + assert_parse(Rule::Value, &integer); } #[test] @@ -128,9 +127,9 @@ mod test { COMPARISON_OPERATORS[rand::thread_rng().gen_range(0..COMPARISON_OPERATORS.len())]; let value = make_random_identifier(); - assert_parse(Rule::condition, &(identifier.clone() + " " + &value)); + assert_parse(Rule::Condition, &(identifier.clone() + " " + &value)); assert_parse( - Rule::condition, + Rule::Condition, &(identifier + comparison_operator + &value), ); } @@ -139,7 +138,7 @@ mod test { fn parse_requirement() { //requirement = { "req" ~ " "+ ~ condition } let condition = make_random_condition(); - assert_parse(Rule::requirement, &("req ".to_string() + &condition)); + assert_parse(Rule::Requirement, &("req ".to_string() + &condition)); } #[test] fn parse_frequency() { @@ -151,11 +150,11 @@ mod test { .to_string(); assert_parse( - Rule::frequency, + Rule::Frequency, &("freq ".to_string() + &condition + " " + &integer), ); assert_parse( - Rule::frequency, + Rule::Frequency, &("freq ".to_string() + &condition + " " + &float), ); } @@ -167,7 +166,7 @@ mod test { let value = make_random_identifier(); assert_parse( - Rule::modifier, + Rule::Modifier, &("mod ".to_string() + &identifier + " " + &value), ); } @@ -178,66 +177,54 @@ mod test { let knot = make_random_identifier(); let stitch = make_random_identifier(); - assert_parse(Rule::divert, &("->".to_string() + &knot)); - assert_parse(Rule::divert, &("->".to_string() + &knot + "." + &stitch)); + assert_parse(Rule::Divert, &("->".to_string() + &knot)); + assert_parse(Rule::Divert, &("->".to_string() + &knot + "." + &stitch)); } #[test] fn parse_command() { - //command = { NEWLINE ~ indentation* ~ (requirement | frequency | modifier | divert) ~ " "*} + //command = { (requirement | frequency | modifier | divert) } let requirement = "req ".to_string() + &(make_random_condition()); - assert_parse( - Rule::command, - &("\n".to_string() + &make_random_indentation() + &requirement), - ); + assert_parse(Rule::Command, &(requirement)); let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); let frequency = "freq ".to_string() + &make_random_condition() + " " + &integer; - assert_parse( - Rule::command, - &("\n".to_string() + &make_random_indentation() + &frequency), - ); + assert_parse(Rule::Command, &(frequency)); let modifier = "mod ".to_string() + &make_random_identifier() + " " + &make_random_identifier(); - assert_parse( - Rule::command, - &("\n".to_string() + &make_random_indentation() + &modifier), - ); + assert_parse(Rule::Command, &(modifier)); let divert = "->".to_string() + &make_random_identifier(); - assert_parse( - Rule::command, - &("\n".to_string() + &make_random_indentation() + &divert), - ); + assert_parse(Rule::Command, &(divert)); } #[test] fn parse_probability() { //probability = { "(" ~ " "* ~ ( percentage | float | integer ) ~ " "* ~ ")" ~ " "* } let percentage = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string() + "%"; - assert_parse(Rule::probability, &("(".to_string() + &percentage + ")")); + assert_parse(Rule::Probability, &("(".to_string() + &percentage + ")")); let float = rand::thread_rng() .gen_range(i8::MIN as f32..i8::MAX as f32) .to_string(); - assert_parse(Rule::probability, &("(".to_string() + &float + ")")); + assert_parse(Rule::Probability, &("(".to_string() + &float + ")")); let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); - assert_parse(Rule::probability, &("(".to_string() + &integer + ")")); + assert_parse(Rule::Probability, &("(".to_string() + &integer + ")")); } #[test] fn parse_knot() { //knot = {"===" ~ " "* ~ identifier ~ " "* ~"===" ~ " "*} let identifier = make_random_identifier(); - assert_parse(Rule::knot, &("===".to_string() + &identifier + "===")); + assert_parse(Rule::Knot, &("===".to_string() + &identifier + "===")); } #[test] fn parse_stitch() { //stitch = {"=" ~ " "* ~ identifier ~ " "*} let identifier = make_random_identifier(); - assert_parse(Rule::stitch, &("=".to_string() + &identifier)); + assert_parse(Rule::Stitch, &("=".to_string() + &identifier)); } #[test] @@ -245,72 +232,66 @@ mod test { //text = { probability? ~ string } let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); let probability = "(".to_string() + &integer + ")"; - assert_parse(Rule::text, &make_random_string()); - assert_parse(Rule::text, &(probability + &make_random_string())); + assert_parse(Rule::Text, &make_random_string()); + assert_parse(Rule::Text, &(probability + &make_random_string())); } #[test] fn parse_option() { - //option = { indentation* ~ "*" ~ " "* ~ text ~ command* } + //option = { "*" ~ " "* ~ text } let text = make_random_string(); - let command = "\nreq ".to_string() + &(make_random_condition()); - assert_parse(Rule::option, &(make_random_indentation() + "*" + &text)); - assert_parse( - Rule::option, - &(make_random_indentation() + "*" + &text + &command), - ); - } - - #[test] - fn parse_text_shown() { - //text_shown = { indentation* ~ text ~ command* } - let text = make_random_string(); - let command = "\nreq ".to_string() + &(make_random_condition()); - assert_parse(Rule::text_shown, &(make_random_indentation() + &text)); - assert_parse( - Rule::text_shown, - &(make_random_indentation() + &text + &command), - ); + assert_parse(Rule::Option, &("*".to_string() + &text)); } #[test] fn parse_named_bucket() { - //named_bucket = { indentation* ~ "[" ~ " "* ~ probability? ~ snake_case ~ " "* ~ "]" ~ " "* ~ command* } - let command = "\nreq ".to_string() + &(make_random_condition()); + //named_bucket = { "[" ~ " "* ~ probability? ~ snake_case ~ " "* ~ "]"} let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); let probability = "(".to_string() + &integer + ")"; assert_parse( - Rule::named_bucket, - &(make_random_indentation() + "[" + &make_random_snake_case() + "]"), - ); - assert_parse( - Rule::named_bucket, - &(make_random_indentation() + "[" + &make_random_snake_case() + "]" + &command), + Rule::NamedBucket, + &("[".to_string() + &make_random_snake_case() + "]"), ); assert_parse( - Rule::named_bucket, - &(make_random_indentation() + "[" + &probability + &make_random_snake_case() + "]"), + Rule::NamedBucket, + &("[".to_string() + &probability + &make_random_snake_case() + "]"), ); + } - assert_parse( - Rule::named_bucket, - &(make_random_indentation() - + "[" - + &probability - + &make_random_snake_case() - + "]" - + &command), - ); + #[test] + fn parse_block_content() { + //BlockContent = { + // (Command | NamedBucket | Option | Knot | Stitch | Text) ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* + //} + let command = "req ".to_string() + &(make_random_condition()); + assert_parse(Rule::BlockContent, &command); + + let named_bucket = "[".to_string() + &make_random_snake_case() + "]"; + assert_parse(Rule::BlockContent, &named_bucket); + + let option = "*".to_string() + &make_random_string(); + assert_parse(Rule::BlockContent, &option); + + let knot = "===".to_string() + &make_random_identifier() + "==="; + assert_parse(Rule::BlockContent, &knot); + + let stitch = "=".to_string() + &make_random_identifier(); + assert_parse(Rule::BlockContent, &stitch); + + let text = make_random_string(); + assert_parse(Rule::BlockContent, &text); + + let new_block = "\n ".to_string() + &make_random_string(); + assert_parse(Rule::BlockContent, &(text + &new_block)); } #[test] fn parse_file() { - //file = { SOI ~ (( named_bucket | text_shown | option | indentation+ | knot | stitch)? ~ NEWLINE)* ~ (named_bucket | text_shown | option | indentation+ | knot | stitch)? ~ EOI } - let unparsed_file = - std::fs::read_to_string("../examples/story-example.cuentitos").expect("cannot read file"); - assert_parse(Rule::file, &unparsed_file); + //file = { SOI ~ (NEWLINE | BlockContent)* ~ EOI } + let unparsed_file = include_str!("../../examples/story-example.cuentitos"); + assert_parse(Rule::File, &unparsed_file); } fn assert_parse(rule: Rule, input: &str) { @@ -322,16 +303,6 @@ mod test { assert_eq!(pair.as_str(), input); } - fn make_random_indentation() -> String { - let indentation_count = rand::thread_rng().gen_range(0..20); - let mut indentation = String::default(); - - for _ in 0..indentation_count { - indentation += " "; - } - - indentation - } fn make_random_condition() -> String { make_random_identifier() + " " + &make_random_identifier() } @@ -347,7 +318,7 @@ mod test { .collect(); let mut snake_case = std::str::from_utf8(&snake_case).unwrap().to_string(); - + //Adding underscores for _ in 0..underscore_size { snake_case += "_"; diff --git a/palabritas-parser/src/palabritas.pest b/palabritas-parser/src/palabritas.pest index 5175269..a6907b8 100644 --- a/palabritas-parser/src/palabritas.pest +++ b/palabritas-parser/src/palabritas.pest @@ -1,32 +1,43 @@ -char = { ASCII_ALPHANUMERIC | "." | "_" | "/" | "," | ";" | "'" | " " | "?" | "!" | "¿" | "¡"} -integer = { "-"? ~ ASCII_DIGIT+ } -float = { integer ~ "." ~ ASCII_DIGIT* } -percentage = { integer ~ "%" } -indentation = { " " | "\t" } -string = { char+ } -comparison_operator = { "!=" | "=" | "<=" | ">=" | "<" | ">" | "!" } - -snake_case = { ASCII_ALPHA_LOWER ~ (ASCII_ALPHA_LOWER | "_" | ASCII_DIGIT)* } -identifier = { (ASCII_ALPHA | "_" ) ~ (ASCII_ALPHANUMERIC | "_")* } -value = { identifier | float | percentage | integer} -condition = { identifier ~ " "* ~ (comparison_operator ~ " "*)? ~ value } - -requirement = { "req" ~ " "+ ~ condition } -frequency = { "freq" ~ " "+ ~ condition ~ " "+ ~ ( float | integer ) } -modifier = { "mod" ~ " "+ ~ identifier ~ " "+ ~ value} -divert = { "->" ~ " "* ~ identifier ~ ("." ~ identifier)? } - -command = { NEWLINE ~ indentation* ~ (requirement | frequency | modifier | divert) ~ " "*} - -probability = { "(" ~ " "* ~ ( percentage | float | integer ) ~ " "* ~ ")" ~ " "* } - -knot = {"===" ~ " "* ~ identifier ~ " "* ~"===" ~ " "*} -stitch = {"=" ~ " "* ~ identifier ~ " "*} - -text = { probability? ~ string } - -option = { indentation* ~ "*" ~ " "* ~ text ~ command* } -text_shown = { indentation* ~ text ~ command* } -named_bucket = { indentation* ~ "[" ~ " "* ~ probability? ~ snake_case ~ " "* ~ "]" ~ " "* ~ command* } - -file = { SOI ~ (( named_bucket | text_shown | option | indentation+ | knot | stitch)? ~ NEWLINE)* ~ (named_bucket | text_shown | option | indentation+ | knot | stitch)? ~ EOI } \ No newline at end of file +Char = { ASCII_ALPHANUMERIC | "." | "_" | "/" | "," | ";" | "'" | " " | "?" | "!" | "¿" | "¡"} +Integer = { "-"? ~ ASCII_DIGIT+ } +Float = { Integer ~ "." ~ ASCII_DIGIT* } +Percentage = { Integer ~ "%" } +Indentation = { " " | "\t" } +String = { Char+ } +ComparisonOperator = { "!=" | "=" | "<=" | ">=" | "<" | ">" | "!" } + +SnakeCase = { ASCII_ALPHA_LOWER ~ (ASCII_ALPHA_LOWER | "_" | ASCII_DIGIT)* } +Identifier = { (ASCII_ALPHA | "_" ) ~ (ASCII_ALPHANUMERIC | "_")* } +Value = { Identifier | Float | Percentage | Integer} +Condition = { Identifier ~ " "* ~ (ComparisonOperator ~ " "*)? ~ Value } + +Requirement = { "req" ~ " "+ ~ Condition } +Frequency = { "freq" ~ " "+ ~ Condition ~ " "+ ~ ( Float | Integer ) } +Modifier = { "mod" ~ " "+ ~ Identifier ~ " "+ ~ Value} +Divert = { "->" ~ " "* ~ Identifier ~ ("." ~ Identifier)? } + +Command = { (Requirement | Frequency | Modifier | Divert) } + +Probability = { "(" ~ " "* ~ ( Percentage | Float | Integer ) ~ " "* ~ ")" ~ " "* } + +Knot = {"===" ~ " "* ~ Identifier ~ " "* ~"==="} +Stitch = {"=" ~ " "* ~ Identifier} + +Text = { Probability? ~ String } +Option = { "*" ~ " "* ~ Text } +NamedBucket = { "[" ~ " "* ~ Probability? ~ SnakeCase ~ " "* ~ "]"} + +NewBlock = _{ + // The first line in the block + PEEK_ALL ~ PUSH( Indentation+ ) ~ BlockContent ~ + // Subsequent lines in the block + (PEEK_ALL ~ BlockContent)* ~ + // Remove the last layer of indentation from the stack when exiting the block + DROP +} + +BlockContent = { + (Command | NamedBucket | Option | Knot | Stitch | Text) ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* +} + +File = { SOI ~ (NEWLINE | BlockContent)* ~ EOI } \ No newline at end of file From 6e663d1445d7a00cdb1d2a0b585677b70edcb614 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Wed, 10 May 2023 19:35:58 -0300 Subject: [PATCH 09/94] Parsing changes and first steps on reading logic --- palabritas-parser/src/main.rs | 121 ++++++++++++++++++++++---- palabritas-parser/src/palabritas.pest | 10 +-- 2 files changed, 107 insertions(+), 24 deletions(-) diff --git a/palabritas-parser/src/main.rs b/palabritas-parser/src/main.rs index da332b2..9925cdd 100644 --- a/palabritas-parser/src/main.rs +++ b/palabritas-parser/src/main.rs @@ -2,7 +2,8 @@ extern crate pest; #[macro_use] extern crate pest_derive; -use pest::Parser; +use pest::{iterators::Pair, Parser}; +use rand::Rng; #[derive(Parser)] #[grammar = "palabritas.pest"] @@ -10,12 +11,101 @@ pub struct PalabritasParser; fn main() { let unparsed_file = include_str!("../../examples/story-example.cuentitos"); - PalabritasParser::parse(Rule::File, unparsed_file) + let file = PalabritasParser::parse(Rule::File, unparsed_file) .expect("unsuccessful parse") // unwrap the parse result .next() .unwrap(); + read_file(file); } +fn read_file(file: Pair) { + if file.as_rule() != Rule::File { + return; + } + + for record in file.into_inner() { + if record.as_rule() == Rule::BlockContent { + read_block_content(record); + } + } +} + +//WIP +fn read_block_content(block_content: Pair) { + if block_content.as_rule() != Rule::BlockContent { + return; + } + + for record in block_content.into_inner() { + match record.as_rule() { + // (NamedBucket | Option | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* + Rule::Text => { + if let Some(text) = read_text(record) { + println!("{}", text); + } + } + Rule::NamedBucket => { + println!("Option: {}", record.as_str()) + } + Rule::EOI => {} + Rule::Command => { + println!("Command: {}", record.as_str()) + } + Rule::Knot => { + println!("Knot: {}", record.as_str()) + } + Rule::Stitch => { + println!("Stitch: {}", record.as_str()) + } + Rule::Option => { + println!("Option: {}", record.as_str()) + } + Rule::NewBlock => read_block_content(record), + _ => { + unreachable!() + } + } + } +} + +fn read_text(text: Pair) -> Option<&str> { + if text.as_rule() != Rule::Text { + return None; + } + + for record in text.into_inner() { + if record.as_rule() == Rule::Probability { + if !run_probability(record) { + return None; + } + } else { + return Some(record.as_str()); + } + } + + None +} + +fn run_probability(probability: Pair) -> bool { + if probability.as_rule() != Rule::Probability { + return false; + } + + for record in probability.into_inner() { + if record.as_rule() == Rule::Float { + let chance = record.as_str().parse::().unwrap(); + return rand::thread_rng().gen::() < chance; + } + if record.as_rule() == Rule::Percentage { + let percentage = record.as_str()[0..record.as_str().len() - 1] + .parse::() + .unwrap(); + return rand::thread_rng().gen::() < percentage as f32 / 100.0; + } + } + + true +} #[cfg(test)] mod test { @@ -183,18 +273,19 @@ mod test { #[test] fn parse_command() { - //command = { (requirement | frequency | modifier | divert) } - let requirement = "req ".to_string() + &(make_random_condition()); + //Command = {NEWLINE ~ Indentation* ~ (Requirement | Frequency | Modifier | Divert) } + let requirement = "\nreq ".to_string() + &(make_random_condition()); assert_parse(Rule::Command, &(requirement)); let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); - let frequency = "freq ".to_string() + &make_random_condition() + " " + &integer; + let frequency = "\nfreq ".to_string() + &make_random_condition() + " " + &integer; assert_parse(Rule::Command, &(frequency)); - let modifier = "mod ".to_string() + &make_random_identifier() + " " + &make_random_identifier(); + let modifier = + "\nmod ".to_string() + &make_random_identifier() + " " + &make_random_identifier(); assert_parse(Rule::Command, &(modifier)); - let divert = "->".to_string() + &make_random_identifier(); + let divert = "\n->".to_string() + &make_random_identifier(); assert_parse(Rule::Command, &(divert)); } @@ -215,7 +306,7 @@ mod test { #[test] fn parse_knot() { - //knot = {"===" ~ " "* ~ identifier ~ " "* ~"===" ~ " "*} + //{"===" ~ " "* ~ Identifier ~ " "* ~"===" ~ ( NEWLINE | BlockContent | Stitch )* } let identifier = make_random_identifier(); assert_parse(Rule::Knot, &("===".to_string() + &identifier + "===")); } @@ -263,10 +354,8 @@ mod test { #[test] fn parse_block_content() { //BlockContent = { - // (Command | NamedBucket | Option | Knot | Stitch | Text) ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* + // (NamedBucket | Option | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* //} - let command = "req ".to_string() + &(make_random_condition()); - assert_parse(Rule::BlockContent, &command); let named_bucket = "[".to_string() + &make_random_snake_case() + "]"; assert_parse(Rule::BlockContent, &named_bucket); @@ -274,12 +363,6 @@ mod test { let option = "*".to_string() + &make_random_string(); assert_parse(Rule::BlockContent, &option); - let knot = "===".to_string() + &make_random_identifier() + "==="; - assert_parse(Rule::BlockContent, &knot); - - let stitch = "=".to_string() + &make_random_identifier(); - assert_parse(Rule::BlockContent, &stitch); - let text = make_random_string(); assert_parse(Rule::BlockContent, &text); @@ -289,7 +372,7 @@ mod test { #[test] fn parse_file() { - //file = { SOI ~ (NEWLINE | BlockContent)* ~ EOI } + //File = { SOI ~ (NEWLINE | BlockContent | Knot )* ~ EOI } let unparsed_file = include_str!("../../examples/story-example.cuentitos"); assert_parse(Rule::File, &unparsed_file); } @@ -318,7 +401,7 @@ mod test { .collect(); let mut snake_case = std::str::from_utf8(&snake_case).unwrap().to_string(); - + //Adding underscores for _ in 0..underscore_size { snake_case += "_"; diff --git a/palabritas-parser/src/palabritas.pest b/palabritas-parser/src/palabritas.pest index a6907b8..fef3882 100644 --- a/palabritas-parser/src/palabritas.pest +++ b/palabritas-parser/src/palabritas.pest @@ -16,18 +16,18 @@ Frequency = { "freq" ~ " "+ ~ Condition ~ " "+ ~ ( Float | Integer ) } Modifier = { "mod" ~ " "+ ~ Identifier ~ " "+ ~ Value} Divert = { "->" ~ " "* ~ Identifier ~ ("." ~ Identifier)? } -Command = { (Requirement | Frequency | Modifier | Divert) } +Command = {NEWLINE ~ Indentation* ~ (Requirement | Frequency | Modifier | Divert) } Probability = { "(" ~ " "* ~ ( Percentage | Float | Integer ) ~ " "* ~ ")" ~ " "* } -Knot = {"===" ~ " "* ~ Identifier ~ " "* ~"==="} +Knot = {"===" ~ " "* ~ Identifier ~ " "* ~"===" ~ ( NEWLINE | BlockContent | Stitch )* } Stitch = {"=" ~ " "* ~ Identifier} Text = { Probability? ~ String } Option = { "*" ~ " "* ~ Text } NamedBucket = { "[" ~ " "* ~ Probability? ~ SnakeCase ~ " "* ~ "]"} -NewBlock = _{ +NewBlock = { // The first line in the block PEEK_ALL ~ PUSH( Indentation+ ) ~ BlockContent ~ // Subsequent lines in the block @@ -37,7 +37,7 @@ NewBlock = _{ } BlockContent = { - (Command | NamedBucket | Option | Knot | Stitch | Text) ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* + (NamedBucket | Option | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* } -File = { SOI ~ (NEWLINE | BlockContent)* ~ EOI } \ No newline at end of file +File = { SOI ~ (NEWLINE | BlockContent | Knot )* ~ EOI } \ No newline at end of file From e6c65d7ffcf37272267a52f7ed55fa39dd53d82d Mon Sep 17 00:00:00 2001 From: loomstyla Date: Tue, 16 May 2023 19:27:03 -0300 Subject: [PATCH 10/94] palabritas-common --- Cargo.toml | 1 + palabritas-common/Cargo.toml | 7 ++ palabritas-common/src/choice.rs | 14 ++++ palabritas-common/src/command.rs | 11 +++ palabritas-common/src/condition.rs | 11 +++ palabritas-common/src/content.rs | 4 + palabritas-common/src/file.rs | 7 ++ palabritas-common/src/knot.rs | 9 ++ palabritas-common/src/lib.rs | 32 ++++++++ palabritas-common/src/named_bucket.rs | 14 ++++ palabritas-common/src/probability.rs | 37 +++++++++ palabritas-common/src/stitch.rs | 7 ++ palabritas-common/src/text.rs | 13 +++ palabritas-parser/src/main.rs | 113 +++----------------------- palabritas-parser/src/palabritas.pest | 10 +-- 15 files changed, 182 insertions(+), 108 deletions(-) create mode 100644 palabritas-common/Cargo.toml create mode 100644 palabritas-common/src/choice.rs create mode 100644 palabritas-common/src/command.rs create mode 100644 palabritas-common/src/condition.rs create mode 100644 palabritas-common/src/content.rs create mode 100644 palabritas-common/src/file.rs create mode 100644 palabritas-common/src/knot.rs create mode 100644 palabritas-common/src/lib.rs create mode 100644 palabritas-common/src/named_bucket.rs create mode 100644 palabritas-common/src/probability.rs create mode 100644 palabritas-common/src/stitch.rs create mode 100644 palabritas-common/src/text.rs diff --git a/Cargo.toml b/Cargo.toml index 5849e6a..abcb91c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,7 @@ members = [ "runtime", "runtime-c", "palabritas-parser", + "palabritas-common", "cli", "editor/src-tauri" ] diff --git a/palabritas-common/Cargo.toml b/palabritas-common/Cargo.toml new file mode 100644 index 0000000..b85a2c2 --- /dev/null +++ b/palabritas-common/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "palabritas-common" +version = "0.1.0" +edition = "2021" + +[dependencies] +rand = "0.8.5" \ No newline at end of file diff --git a/palabritas-common/src/choice.rs b/palabritas-common/src/choice.rs new file mode 100644 index 0000000..0bf3391 --- /dev/null +++ b/palabritas-common/src/choice.rs @@ -0,0 +1,14 @@ + +use crate::{Content, Command, Probability}; + +#[derive(Default)] +pub struct Choice{ + pub commands: Vec>, + pub content: Vec>, + pub probability: Option>, + pub text: String, +} + +impl Content for Choice{ + +} diff --git a/palabritas-common/src/command.rs b/palabritas-common/src/command.rs new file mode 100644 index 0000000..e714cf2 --- /dev/null +++ b/palabritas-common/src/command.rs @@ -0,0 +1,11 @@ +pub trait Command { + +} + + +/* (Requirement | Frequency | Modifier | Divert) */ + +pub struct Requirement +{ + +} diff --git a/palabritas-common/src/condition.rs b/palabritas-common/src/condition.rs new file mode 100644 index 0000000..28c79be --- /dev/null +++ b/palabritas-common/src/condition.rs @@ -0,0 +1,11 @@ +pub struct Condition{ + pub operator: ComparisonOperator, +} + +pub enum ComparisonOperator { + Equals, + HigherThan, + LessThan, + Depends, + MutEx, +} \ No newline at end of file diff --git a/palabritas-common/src/content.rs b/palabritas-common/src/content.rs new file mode 100644 index 0000000..4eb7307 --- /dev/null +++ b/palabritas-common/src/content.rs @@ -0,0 +1,4 @@ +pub trait Content { + +} + diff --git a/palabritas-common/src/file.rs b/palabritas-common/src/file.rs new file mode 100644 index 0000000..b7e6695 --- /dev/null +++ b/palabritas-common/src/file.rs @@ -0,0 +1,7 @@ +use crate::{Knot, Content}; + +#[derive(Default)] +pub struct File { + pub knots: Vec, + pub content: Vec>, +} diff --git a/palabritas-common/src/knot.rs b/palabritas-common/src/knot.rs new file mode 100644 index 0000000..2a570ea --- /dev/null +++ b/palabritas-common/src/knot.rs @@ -0,0 +1,9 @@ +use crate::{Content, Stitch}; + + +#[derive(Default)] +pub struct Knot { + pub identifier: String, + pub content: Vec>, + pub stitches: Vec, +} diff --git a/palabritas-common/src/lib.rs b/palabritas-common/src/lib.rs new file mode 100644 index 0000000..70abfe6 --- /dev/null +++ b/palabritas-common/src/lib.rs @@ -0,0 +1,32 @@ + +mod file; +pub use file::*; + +mod knot; +pub use knot::*; + +mod stitch; +pub use stitch::*; + +mod content; +pub use content::*; + +mod named_bucket; +pub use named_bucket::*; + +mod choice; +pub use choice::*; + +mod text; +pub use text::*; + +mod command; +pub use command::*; + +mod probability; +pub use probability::*; + +mod condition; +pub use condition::*; + + diff --git a/palabritas-common/src/named_bucket.rs b/palabritas-common/src/named_bucket.rs new file mode 100644 index 0000000..097b8bb --- /dev/null +++ b/palabritas-common/src/named_bucket.rs @@ -0,0 +1,14 @@ +use crate::{Content, Command, Probability}; + +#[derive(Default)] +pub struct NamedBucket{ + pub commands: Vec>, + pub content: Vec>, + pub probability: Option>, + pub name: String, +} + +impl Content for NamedBucket{ + +} + diff --git a/palabritas-common/src/probability.rs b/palabritas-common/src/probability.rs new file mode 100644 index 0000000..a3b0327 --- /dev/null +++ b/palabritas-common/src/probability.rs @@ -0,0 +1,37 @@ +use rand::Rng; + +pub trait Probability { + fn get_chance(&self) -> f32; + fn roll_chance(&self) -> bool; +} + +pub struct Percentage{ + value: u8, +} + +impl Probability for Percentage +{ + fn get_chance(&self) -> f32{ + self.value as f32 /100. + } + + fn roll_chance(&self) -> bool { + rand::thread_rng().gen::() < self.get_chance() + } +} + +pub struct FloatPercentage{ + value: f32, +} + + +impl Probability for FloatPercentage +{ + fn get_chance(&self) -> f32{ + self.value + } + + fn roll_chance(&self) -> bool { + rand::thread_rng().gen::() < self.get_chance() + } +} \ No newline at end of file diff --git a/palabritas-common/src/stitch.rs b/palabritas-common/src/stitch.rs new file mode 100644 index 0000000..94ec4b4 --- /dev/null +++ b/palabritas-common/src/stitch.rs @@ -0,0 +1,7 @@ +use crate::Content; + +#[derive(Default)] +pub struct Stitch { + pub identifier: String, + pub content: Vec>, +} diff --git a/palabritas-common/src/text.rs b/palabritas-common/src/text.rs new file mode 100644 index 0000000..10517e6 --- /dev/null +++ b/palabritas-common/src/text.rs @@ -0,0 +1,13 @@ +use crate::{Content, Command, Probability}; + +#[derive(Default)] +pub struct Text{ + pub commands: Vec>, + pub content: Vec>, + pub probability: Option>, + pub text: String, +} + +impl Content for Text{ + +} \ No newline at end of file diff --git a/palabritas-parser/src/main.rs b/palabritas-parser/src/main.rs index 9925cdd..13d9e1c 100644 --- a/palabritas-parser/src/main.rs +++ b/palabritas-parser/src/main.rs @@ -2,8 +2,7 @@ extern crate pest; #[macro_use] extern crate pest_derive; -use pest::{iterators::Pair, Parser}; -use rand::Rng; +use pest::Parser; #[derive(Parser)] #[grammar = "palabritas.pest"] @@ -11,101 +10,12 @@ pub struct PalabritasParser; fn main() { let unparsed_file = include_str!("../../examples/story-example.cuentitos"); - let file = PalabritasParser::parse(Rule::File, unparsed_file) + PalabritasParser::parse(Rule::File, unparsed_file) .expect("unsuccessful parse") // unwrap the parse result .next() .unwrap(); - read_file(file); } -fn read_file(file: Pair) { - if file.as_rule() != Rule::File { - return; - } - - for record in file.into_inner() { - if record.as_rule() == Rule::BlockContent { - read_block_content(record); - } - } -} - -//WIP -fn read_block_content(block_content: Pair) { - if block_content.as_rule() != Rule::BlockContent { - return; - } - - for record in block_content.into_inner() { - match record.as_rule() { - // (NamedBucket | Option | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* - Rule::Text => { - if let Some(text) = read_text(record) { - println!("{}", text); - } - } - Rule::NamedBucket => { - println!("Option: {}", record.as_str()) - } - Rule::EOI => {} - Rule::Command => { - println!("Command: {}", record.as_str()) - } - Rule::Knot => { - println!("Knot: {}", record.as_str()) - } - Rule::Stitch => { - println!("Stitch: {}", record.as_str()) - } - Rule::Option => { - println!("Option: {}", record.as_str()) - } - Rule::NewBlock => read_block_content(record), - _ => { - unreachable!() - } - } - } -} - -fn read_text(text: Pair) -> Option<&str> { - if text.as_rule() != Rule::Text { - return None; - } - - for record in text.into_inner() { - if record.as_rule() == Rule::Probability { - if !run_probability(record) { - return None; - } - } else { - return Some(record.as_str()); - } - } - - None -} - -fn run_probability(probability: Pair) -> bool { - if probability.as_rule() != Rule::Probability { - return false; - } - - for record in probability.into_inner() { - if record.as_rule() == Rule::Float { - let chance = record.as_str().parse::().unwrap(); - return rand::thread_rng().gen::() < chance; - } - if record.as_rule() == Rule::Percentage { - let percentage = record.as_str()[0..record.as_str().len() - 1] - .parse::() - .unwrap(); - return rand::thread_rng().gen::() < percentage as f32 / 100.0; - } - } - - true -} #[cfg(test)] mod test { @@ -306,9 +216,9 @@ mod test { #[test] fn parse_knot() { - //{"===" ~ " "* ~ Identifier ~ " "* ~"===" ~ ( NEWLINE | BlockContent | Stitch )* } + //Knot = {"===" ~ " "* ~ Identifier ~ " "* ~"===" ~ " "* ~ NEWLINE ~ ( NEWLINE | BlockContent | Stitch | NamedBucket )* } let identifier = make_random_identifier(); - assert_parse(Rule::Knot, &("===".to_string() + &identifier + "===")); + assert_parse(Rule::Knot, &("===".to_string() + &identifier + "===\n")); } #[test] @@ -328,10 +238,10 @@ mod test { } #[test] - fn parse_option() { - //option = { "*" ~ " "* ~ text } + fn parse_choice() { + //choice = { "*" ~ " "* ~ text } let text = make_random_string(); - assert_parse(Rule::Option, &("*".to_string() + &text)); + assert_parse(Rule::Choice, &("*".to_string() + &text)); } #[test] @@ -354,14 +264,11 @@ mod test { #[test] fn parse_block_content() { //BlockContent = { - // (NamedBucket | Option | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* + // (choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* //} - let named_bucket = "[".to_string() + &make_random_snake_case() + "]"; - assert_parse(Rule::BlockContent, &named_bucket); - - let option = "*".to_string() + &make_random_string(); - assert_parse(Rule::BlockContent, &option); + let choice = "*".to_string() + &make_random_string(); + assert_parse(Rule::BlockContent, &choice); let text = make_random_string(); assert_parse(Rule::BlockContent, &text); diff --git a/palabritas-parser/src/palabritas.pest b/palabritas-parser/src/palabritas.pest index fef3882..f7497fe 100644 --- a/palabritas-parser/src/palabritas.pest +++ b/palabritas-parser/src/palabritas.pest @@ -16,16 +16,16 @@ Frequency = { "freq" ~ " "+ ~ Condition ~ " "+ ~ ( Float | Integer ) } Modifier = { "mod" ~ " "+ ~ Identifier ~ " "+ ~ Value} Divert = { "->" ~ " "* ~ Identifier ~ ("." ~ Identifier)? } -Command = {NEWLINE ~ Indentation* ~ (Requirement | Frequency | Modifier | Divert) } +Command = {NEWLINE ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert) } Probability = { "(" ~ " "* ~ ( Percentage | Float | Integer ) ~ " "* ~ ")" ~ " "* } -Knot = {"===" ~ " "* ~ Identifier ~ " "* ~"===" ~ ( NEWLINE | BlockContent | Stitch )* } +Knot = {"===" ~ " "* ~ Identifier ~ " "* ~"===" ~ " "* ~ NEWLINE ~ ( NEWLINE | BlockContent | Stitch )* } Stitch = {"=" ~ " "* ~ Identifier} Text = { Probability? ~ String } -Option = { "*" ~ " "* ~ Text } -NamedBucket = { "[" ~ " "* ~ Probability? ~ SnakeCase ~ " "* ~ "]"} +Choice = { "*" ~ " "* ~ Probability? ~ Text } +NamedBucket = { "[" ~ " "* ~ Probability? ~ SnakeCase ~ " "* ~ "]" } NewBlock = { // The first line in the block @@ -37,7 +37,7 @@ NewBlock = { } BlockContent = { - (NamedBucket | Option | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* + (NamedBucket | Choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* } File = { SOI ~ (NEWLINE | BlockContent | Knot )* ~ EOI } \ No newline at end of file From 6433f38f56fc9e663f8d0b52813f60746b82ced7 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Thu, 18 May 2023 19:27:08 -0300 Subject: [PATCH 11/94] palabritas parser update (WIP) --- palabritas-common/src/choice.rs | 14 -- palabritas-common/src/command.rs | 11 -- palabritas-common/src/condition.rs | 32 ++- palabritas-common/src/content.rs | 21 +- palabritas-common/src/divert.rs | 4 + palabritas-common/src/file.rs | 4 +- palabritas-common/src/frequency.rs | 16 ++ palabritas-common/src/knot.rs | 3 +- palabritas-common/src/lib.rs | 24 +-- palabritas-common/src/modifier.rs | 7 + palabritas-common/src/named_bucket.rs | 14 -- palabritas-common/src/probability.rs | 23 +-- palabritas-common/src/requirement.rs | 11 ++ palabritas-common/src/stitch.rs | 2 +- palabritas-common/src/text.rs | 13 -- palabritas-common/src/variable.rs | 71 +++++++ palabritas-parser/Cargo.toml | 3 +- palabritas-parser/src/main.rs | 272 +++++++++++++++++++++++++- 18 files changed, 450 insertions(+), 95 deletions(-) delete mode 100644 palabritas-common/src/choice.rs delete mode 100644 palabritas-common/src/command.rs create mode 100644 palabritas-common/src/divert.rs create mode 100644 palabritas-common/src/frequency.rs create mode 100644 palabritas-common/src/modifier.rs delete mode 100644 palabritas-common/src/named_bucket.rs create mode 100644 palabritas-common/src/requirement.rs delete mode 100644 palabritas-common/src/text.rs create mode 100644 palabritas-common/src/variable.rs diff --git a/palabritas-common/src/choice.rs b/palabritas-common/src/choice.rs deleted file mode 100644 index 0bf3391..0000000 --- a/palabritas-common/src/choice.rs +++ /dev/null @@ -1,14 +0,0 @@ - -use crate::{Content, Command, Probability}; - -#[derive(Default)] -pub struct Choice{ - pub commands: Vec>, - pub content: Vec>, - pub probability: Option>, - pub text: String, -} - -impl Content for Choice{ - -} diff --git a/palabritas-common/src/command.rs b/palabritas-common/src/command.rs deleted file mode 100644 index e714cf2..0000000 --- a/palabritas-common/src/command.rs +++ /dev/null @@ -1,11 +0,0 @@ -pub trait Command { - -} - - -/* (Requirement | Frequency | Modifier | Divert) */ - -pub struct Requirement -{ - -} diff --git a/palabritas-common/src/condition.rs b/palabritas-common/src/condition.rs index 28c79be..503708b 100644 --- a/palabritas-common/src/condition.rs +++ b/palabritas-common/src/condition.rs @@ -1,11 +1,25 @@ -pub struct Condition{ - pub operator: ComparisonOperator, -} +use crate::Variable; -pub enum ComparisonOperator { - Equals, - HigherThan, +#[derive(Default)] +pub enum Operator { + #[default] + Equal, + NotEqual, + GreaterThan, LessThan, - Depends, - MutEx, -} \ No newline at end of file + GreaterOrEqualThan, + LessOrEqualThan, +} + +#[derive(Default)] +pub struct Condition { + pub variable: Variable, + pub operator: Operator, + pub value: String, +} + +impl Condition { + pub fn meets_condition(&self) -> bool { + true + } +} diff --git a/palabritas-common/src/content.rs b/palabritas-common/src/content.rs index 4eb7307..bd81695 100644 --- a/palabritas-common/src/content.rs +++ b/palabritas-common/src/content.rs @@ -1,4 +1,21 @@ -pub trait Content { - +use crate::{Divert, Frequency, Modifier, Probability, Requirement}; + +#[derive(Default)] +pub struct Content { + pub content: Vec, + pub probability: Option>, + pub text: String, + pub content_type: ContentType, + pub requirements: Vec, + pub frequency_changes: Vec, + pub modifiers: Vec, + pub divert: Vec, } +#[derive(Default)] +pub enum ContentType { + #[default] + Text, + NamedBucket, + Choice, +} diff --git a/palabritas-common/src/divert.rs b/palabritas-common/src/divert.rs new file mode 100644 index 0000000..c17e2a1 --- /dev/null +++ b/palabritas-common/src/divert.rs @@ -0,0 +1,4 @@ +pub struct Divert { + pub knot: String, + pub stitch: Option, +} diff --git a/palabritas-common/src/file.rs b/palabritas-common/src/file.rs index b7e6695..c67b90d 100644 --- a/palabritas-common/src/file.rs +++ b/palabritas-common/src/file.rs @@ -1,7 +1,7 @@ -use crate::{Knot, Content}; +use crate::{Content, Knot}; #[derive(Default)] pub struct File { pub knots: Vec, - pub content: Vec>, + pub content: Vec, } diff --git a/palabritas-common/src/frequency.rs b/palabritas-common/src/frequency.rs new file mode 100644 index 0000000..de39208 --- /dev/null +++ b/palabritas-common/src/frequency.rs @@ -0,0 +1,16 @@ +use crate::Condition; + +#[derive(Default)] +pub struct Frequency { + pub condition: Condition, + pub change_value: f32, +} + +impl Frequency { + pub fn change_frequency(&self) -> f32 { + match self.condition.meets_condition() { + true => self.change_value, + false => 0., + } + } +} diff --git a/palabritas-common/src/knot.rs b/palabritas-common/src/knot.rs index 2a570ea..abfe1de 100644 --- a/palabritas-common/src/knot.rs +++ b/palabritas-common/src/knot.rs @@ -1,9 +1,8 @@ use crate::{Content, Stitch}; - #[derive(Default)] pub struct Knot { pub identifier: String, - pub content: Vec>, + pub content: Vec, pub stitches: Vec, } diff --git a/palabritas-common/src/lib.rs b/palabritas-common/src/lib.rs index 70abfe6..aee9bc5 100644 --- a/palabritas-common/src/lib.rs +++ b/palabritas-common/src/lib.rs @@ -1,4 +1,3 @@ - mod file; pub use file::*; @@ -11,17 +10,8 @@ pub use stitch::*; mod content; pub use content::*; -mod named_bucket; -pub use named_bucket::*; - -mod choice; -pub use choice::*; - -mod text; -pub use text::*; - -mod command; -pub use command::*; +mod requirement; +pub use requirement::*; mod probability; pub use probability::*; @@ -29,4 +19,14 @@ pub use probability::*; mod condition; pub use condition::*; +mod variable; +pub use variable::*; + +mod frequency; +pub use frequency::*; + +mod divert; +pub use divert::*; +mod modifier; +pub use modifier::*; diff --git a/palabritas-common/src/modifier.rs b/palabritas-common/src/modifier.rs new file mode 100644 index 0000000..4ef0b07 --- /dev/null +++ b/palabritas-common/src/modifier.rs @@ -0,0 +1,7 @@ +use crate::Variable; + +#[derive(Default)] +pub struct Modifier { + pub variable: Variable, + pub new_value: String, +} diff --git a/palabritas-common/src/named_bucket.rs b/palabritas-common/src/named_bucket.rs deleted file mode 100644 index 097b8bb..0000000 --- a/palabritas-common/src/named_bucket.rs +++ /dev/null @@ -1,14 +0,0 @@ -use crate::{Content, Command, Probability}; - -#[derive(Default)] -pub struct NamedBucket{ - pub commands: Vec>, - pub content: Vec>, - pub probability: Option>, - pub name: String, -} - -impl Content for NamedBucket{ - -} - diff --git a/palabritas-common/src/probability.rs b/palabritas-common/src/probability.rs index a3b0327..5e9ad45 100644 --- a/palabritas-common/src/probability.rs +++ b/palabritas-common/src/probability.rs @@ -5,14 +5,13 @@ pub trait Probability { fn roll_chance(&self) -> bool; } -pub struct Percentage{ - value: u8, +pub struct Percentage { + pub value: u8, } -impl Probability for Percentage -{ - fn get_chance(&self) -> f32{ - self.value as f32 /100. +impl Probability for Percentage { + fn get_chance(&self) -> f32 { + self.value as f32 / 100. } fn roll_chance(&self) -> bool { @@ -20,18 +19,16 @@ impl Probability for Percentage } } -pub struct FloatPercentage{ - value: f32, +pub struct FloatProbability { + pub value: f32, } - -impl Probability for FloatPercentage -{ - fn get_chance(&self) -> f32{ +impl Probability for FloatProbability { + fn get_chance(&self) -> f32 { self.value } fn roll_chance(&self) -> bool { rand::thread_rng().gen::() < self.get_chance() } -} \ No newline at end of file +} diff --git a/palabritas-common/src/requirement.rs b/palabritas-common/src/requirement.rs new file mode 100644 index 0000000..18c8fb6 --- /dev/null +++ b/palabritas-common/src/requirement.rs @@ -0,0 +1,11 @@ +use crate::Condition; + +pub struct Requirement { + pub condition: Condition, +} + +impl Requirement { + pub fn meets_requirement(&self) -> bool { + self.condition.meets_condition() + } +} diff --git a/palabritas-common/src/stitch.rs b/palabritas-common/src/stitch.rs index 94ec4b4..34c7082 100644 --- a/palabritas-common/src/stitch.rs +++ b/palabritas-common/src/stitch.rs @@ -3,5 +3,5 @@ use crate::Content; #[derive(Default)] pub struct Stitch { pub identifier: String, - pub content: Vec>, + pub content: Vec, } diff --git a/palabritas-common/src/text.rs b/palabritas-common/src/text.rs deleted file mode 100644 index 10517e6..0000000 --- a/palabritas-common/src/text.rs +++ /dev/null @@ -1,13 +0,0 @@ -use crate::{Content, Command, Probability}; - -#[derive(Default)] -pub struct Text{ - pub commands: Vec>, - pub content: Vec>, - pub probability: Option>, - pub text: String, -} - -impl Content for Text{ - -} \ No newline at end of file diff --git a/palabritas-common/src/variable.rs b/palabritas-common/src/variable.rs new file mode 100644 index 0000000..5f04beb --- /dev/null +++ b/palabritas-common/src/variable.rs @@ -0,0 +1,71 @@ +pub type VariableId = String; + +#[derive(Debug, Default, PartialEq, Eq, Clone)] +pub enum VariableKind { + #[default] + Integer, + Float, + Bool, + Enum { + values: Vec, + }, +} + +#[derive(Debug, Default, PartialEq, Eq, Clone)] +pub struct Variable { + pub id: VariableId, + pub kind: VariableKind, +} + +#[cfg(test)] +mod test { + use crate::variable::*; + + #[test] + fn variable_id_is_a_string() { + let variable_id: VariableId = "health".to_string(); + assert!(variable_id == "health") + } + + #[test] + fn variable_kind_has_needed_values() { + let variable_kind = VariableKind::Integer; + assert!(variable_kind == VariableKind::Integer); + + let variable_kind = VariableKind::Float; + assert!(variable_kind == VariableKind::Float); + + let variable_kind = VariableKind::Bool; + assert!(variable_kind == VariableKind::Bool); + + let variable_kind = VariableKind::Enum { + values: vec!["a-value".to_string()], + }; + assert!( + variable_kind + == VariableKind::Enum { + values: vec!["a-value".to_string()] + } + ); + } + + #[test] + fn variable_supports_id() { + let variable = Variable { + id: "my-variable".to_string(), + ..Default::default() + }; + + assert_eq!(variable.id, "my-variable") + } + + #[test] + fn variable_supports_kind() { + let variable = Variable { + kind: VariableKind::Float, + ..Default::default() + }; + + assert_eq!(variable.kind, VariableKind::Float) + } +} diff --git a/palabritas-parser/Cargo.toml b/palabritas-parser/Cargo.toml index 742870c..c8c57fd 100644 --- a/palabritas-parser/Cargo.toml +++ b/palabritas-parser/Cargo.toml @@ -10,4 +10,5 @@ path = "src/main.rs" [dependencies] pest = "2.0" pest_derive = "2.0" -rand = "0.8.5" \ No newline at end of file +rand = "0.8.5" +palabritas-common = { path = "../palabritas-common" } \ No newline at end of file diff --git a/palabritas-parser/src/main.rs b/palabritas-parser/src/main.rs index 13d9e1c..e03f99d 100644 --- a/palabritas-parser/src/main.rs +++ b/palabritas-parser/src/main.rs @@ -2,7 +2,11 @@ extern crate pest; #[macro_use] extern crate pest_derive; -use pest::Parser; +use palabritas_common::{ + Condition, Content, Divert, File, FloatProbability, Frequency, Modifier, Operator, Percentage, + Probability, Requirement, +}; +use pest::{iterators::Pair, Parser}; #[derive(Parser)] #[grammar = "palabritas.pest"] @@ -16,6 +20,272 @@ fn main() { .unwrap(); } +fn parse_file(token: Pair) -> Option { + if token.as_rule() != Rule::File { + return None; + } + + let mut file = File::default(); + + for inner_token in token.into_inner() { + if inner_token.as_rule() == Rule::BlockContent { + if let Some(content) = parse_block_content(inner_token) { + file.content.push(content); + } + } + } + + Some(file) +} + +fn parse_block_content(token: Pair) -> Option { + if token.as_rule() != Rule::BlockContent { + return None; + } + // (NamedBucket | Choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* + let mut content = Content::default(); + for inner_token in token.into_inner() { + match inner_token.as_rule() { + Rule::Text => { + if let Some(text) = parse_text(inner_token) { + content = text; + } + } + Rule::NamedBucket => { + println!("NamedBucket: {}", inner_token.as_str()) + } + Rule::Choice => { + println!("Choice: {}", inner_token.as_str()) + } + Rule::Command => { + add_command_to_content(inner_token, &mut content); + } + Rule::NewBlock => { + if let Some(inner_content) = parse_block_content(inner_token) { + content.content.push(inner_content); + } + } + + _ => {} + } + } + + Some(content) +} + +fn parse_text(token: Pair) -> Option { + if token.as_rule() != Rule::Text { + return None; + } + + let mut content = Content::default(); + + for inner_token in token.into_inner() { + match inner_token.as_rule() { + Rule::Probability => { + content.probability = parse_probability(inner_token); + } + Rule::String => { + content.text = inner_token.as_str().to_string(); + } + _ => {} + } + } + + None +} + +fn add_command_to_content(token: Pair, content: &mut Content) { + if token.as_rule() != Rule::Command { + return; + } + + for inner_token in token.into_inner() { + match inner_token.as_rule() { + //Command = {NEWLINE ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert) } + Rule::Requirement => { + if let Some(requirement) = parse_requirement(inner_token) { + content.requirements.push(requirement); + } + } + Rule::Frequency => { + if let Some(frequency) = parse_frequency(inner_token) { + content.frequency_changes.push(frequency); + } + } + Rule::Modifier => { + if let Some(modifier) = parse_modifier(inner_token) { + content.modifiers.push(modifier); + } + } + Rule::Divert => { + if let Some(divert) = parse_divert(inner_token) { + content.divert.push(divert); + } + } + _ => {} + } + } +} + +fn parse_divert(token: Pair) -> Option { + if token.as_rule() != Rule::Divert { + return None; + } + //Divert = { "->" ~ " "* ~ Identifier ~ ("." ~ Identifier)? } + + let mut knot: Option = None; + let mut stitch: Option = None; + + for inner_token in token.into_inner() { + if inner_token.as_rule() == Rule::Identifier { + if knot.is_none() { + knot = Some(inner_token.as_str().to_string()); + } else { + stitch = Some(inner_token.as_str().to_string()); + } + } + } + + knot.as_ref()?; + + Some(Divert { + knot: knot.unwrap(), + stitch, + }) +} + +fn parse_modifier(token: Pair) -> Option { + if token.as_rule() != Rule::Modifier { + return None; + } + //Modifier = { "mod" ~ " "+ ~ Identifier ~ " "+ ~ Value} + + let mut modifier = Modifier::default(); + for inner_token in token.into_inner() { + match inner_token.as_rule() { + Rule::Identifier => { + modifier.variable.id = inner_token.as_str().to_string(); + //TODO KIND + } + + Rule::Value => { + modifier.new_value = inner_token.as_str().to_string(); + } + _ => {} + } + } + Some(modifier) +} + +fn parse_frequency(token: Pair) -> Option { + if token.as_rule() != Rule::Frequency { + return None; + } + + let mut frequency = Frequency::default(); + for inner_token in token.into_inner() { + match inner_token.as_rule() { + Rule::Condition => { + if let Some(condition) = parse_condition(inner_token) { + frequency.condition = condition; + } + } + + Rule::Float | Rule::Integer => { + let value = inner_token.as_str().parse::().unwrap(); + frequency.change_value = value; + } + _ => {} + } + } + + Some(frequency) +} + +fn parse_requirement(token: Pair) -> Option { + if token.as_rule() != Rule::Requirement { + return None; + } + + for inner_token in token.into_inner() { + if inner_token.as_rule() == Rule::Condition { + if let Some(condition) = parse_condition(inner_token) { + return Some(Requirement { condition }); + } + } + } + None +} + +fn parse_condition(token: Pair) -> Option { + if token.as_rule() != Rule::Condition { + return None; + } + /*Condition = { Identifier ~ " "* ~ (ComparisonOperator ~ " "*)? ~ Value } */ + + let mut condition = Condition::default(); + + for inner_token in token.into_inner() { + match inner_token.as_rule() { + Rule::Identifier => { + condition.variable.id = inner_token.as_str().to_string(); + //TODO KIND + } + Rule::ComparisonOperator => { + if let Some(operator) = parse_comparison_operator(inner_token) { + condition.operator = operator; + } + } + Rule::Value => { + condition.value = inner_token.as_str().to_string(); + } + _ => {} + } + } + Some(condition) +} + +fn parse_comparison_operator(token: Pair) -> Option { + if token.as_rule() != Rule::ComparisonOperator { + return None; + } + + match token.as_str() { + "!=" => Some(Operator::NotEqual), + "!" => Some(Operator::NotEqual), + "=" => Some(Operator::Equal), + "<=" => Some(Operator::LessOrEqualThan), + ">=" => Some(Operator::GreaterOrEqualThan), + "<" => Some(Operator::LessThan), + ">" => Some(Operator::GreaterThan), + _ => None, + } +} + +fn parse_probability(token: Pair) -> Option> { + if token.as_rule() != Rule::Probability { + return None; + } + + for inner_token in token.into_inner() { + if inner_token.as_rule() == Rule::Float { + let value = inner_token.as_str().parse::().unwrap(); + let probability = FloatProbability { value }; + + return Some(Box::new(probability)); + } + if inner_token.as_rule() == Rule::Percentage { + let value = inner_token.as_str().parse::().unwrap(); + let percentage = Percentage { value }; + + return Some(Box::new(percentage)); + } + } + + None +} + #[cfg(test)] mod test { From 7ab5d4be7aba31a1d5a58d7b8ca5b00a37be4098 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Mon, 22 May 2023 16:03:53 -0300 Subject: [PATCH 12/94] tests and fixes --- palabritas-common/src/condition.rs | 4 +- palabritas-common/src/content.rs | 57 ++- palabritas-common/src/divert.rs | 1 + palabritas-common/src/frequency.rs | 2 +- palabritas-common/src/modifier.rs | 2 +- palabritas-common/src/probability.rs | 18 +- palabritas-common/src/requirement.rs | 1 + palabritas-parser/src/main.rs | 674 ++++++++++++++++++++++---- palabritas-parser/src/palabritas.pest | 2 +- 9 files changed, 665 insertions(+), 96 deletions(-) diff --git a/palabritas-common/src/condition.rs b/palabritas-common/src/condition.rs index 503708b..bb019da 100644 --- a/palabritas-common/src/condition.rs +++ b/palabritas-common/src/condition.rs @@ -1,6 +1,6 @@ use crate::Variable; -#[derive(Default)] +#[derive(Default, Debug, Eq, PartialEq, Clone)] pub enum Operator { #[default] Equal, @@ -11,7 +11,7 @@ pub enum Operator { LessOrEqualThan, } -#[derive(Default)] +#[derive(Default, Debug, Eq, PartialEq, Clone)] pub struct Condition { pub variable: Variable, pub operator: Operator, diff --git a/palabritas-common/src/content.rs b/palabritas-common/src/content.rs index bd81695..4b72477 100644 --- a/palabritas-common/src/content.rs +++ b/palabritas-common/src/content.rs @@ -1,6 +1,8 @@ -use crate::{Divert, Frequency, Modifier, Probability, Requirement}; +use crate::{ + Divert, FloatProbability, Frequency, Modifier, PercentageProbability, Probability, Requirement, +}; -#[derive(Default)] +#[derive(Default, Debug)] pub struct Content { pub content: Vec, pub probability: Option>, @@ -12,7 +14,56 @@ pub struct Content { pub divert: Vec, } -#[derive(Default)] +impl PartialEq for Content { + fn eq(&self, other: &Self) -> bool { + return self.content == other.content + && self.text == other.text + && self.content_type == other.content_type + && self.requirements == other.requirements + && self.frequency_changes == other.frequency_changes + && self.modifiers == other.modifiers + && self.divert == other.divert + && compare_probability::(self, other) + && compare_probability::(self, other); + + fn compare_probability(content_1: &Content, content_2: &Content) -> bool + where + T: 'static, + T: PartialEq, + { + if content_1.probability.is_some() != content_2.probability.is_some() { + return true; + } + + if content_1.probability.is_some() && content_2.probability.is_some() { + if let Some(self_probability) = content_1 + .probability + .as_ref() + .unwrap() + .as_any() + .downcast_ref::() + { + if let Some(other_probability) = content_2 + .probability + .as_ref() + .unwrap() + .as_any() + .downcast_ref::() + { + if other_probability != self_probability { + return false; + } + } else { + return false; + } + } + } + true + } + } +} + +#[derive(Debug, Default, PartialEq, Clone)] pub enum ContentType { #[default] Text, diff --git a/palabritas-common/src/divert.rs b/palabritas-common/src/divert.rs index c17e2a1..075435c 100644 --- a/palabritas-common/src/divert.rs +++ b/palabritas-common/src/divert.rs @@ -1,3 +1,4 @@ +#[derive(Debug, Default, PartialEq, Eq, Clone)] pub struct Divert { pub knot: String, pub stitch: Option, diff --git a/palabritas-common/src/frequency.rs b/palabritas-common/src/frequency.rs index de39208..1340e34 100644 --- a/palabritas-common/src/frequency.rs +++ b/palabritas-common/src/frequency.rs @@ -1,6 +1,6 @@ use crate::Condition; -#[derive(Default)] +#[derive(Debug, Default, PartialEq, Clone)] pub struct Frequency { pub condition: Condition, pub change_value: f32, diff --git a/palabritas-common/src/modifier.rs b/palabritas-common/src/modifier.rs index 4ef0b07..e406c2c 100644 --- a/palabritas-common/src/modifier.rs +++ b/palabritas-common/src/modifier.rs @@ -1,6 +1,6 @@ use crate::Variable; -#[derive(Default)] +#[derive(Debug, Default, PartialEq, Eq, Clone)] pub struct Modifier { pub variable: Variable, pub new_value: String, diff --git a/palabritas-common/src/probability.rs b/palabritas-common/src/probability.rs index 5e9ad45..abedb4b 100644 --- a/palabritas-common/src/probability.rs +++ b/palabritas-common/src/probability.rs @@ -1,15 +1,18 @@ use rand::Rng; - -pub trait Probability { +use std::any::Any; +use std::fmt::Debug; +pub trait Probability: Debug { fn get_chance(&self) -> f32; fn roll_chance(&self) -> bool; + fn as_any(&self) -> &dyn Any; } -pub struct Percentage { +#[derive(Debug, Default, PartialEq, Eq, Clone)] +pub struct PercentageProbability { pub value: u8, } -impl Probability for Percentage { +impl Probability for PercentageProbability { fn get_chance(&self) -> f32 { self.value as f32 / 100. } @@ -17,8 +20,12 @@ impl Probability for Percentage { fn roll_chance(&self) -> bool { rand::thread_rng().gen::() < self.get_chance() } + fn as_any(&self) -> &dyn Any { + self + } } +#[derive(Debug, Default, PartialEq, Clone)] pub struct FloatProbability { pub value: f32, } @@ -31,4 +38,7 @@ impl Probability for FloatProbability { fn roll_chance(&self) -> bool { rand::thread_rng().gen::() < self.get_chance() } + fn as_any(&self) -> &dyn Any { + self + } } diff --git a/palabritas-common/src/requirement.rs b/palabritas-common/src/requirement.rs index 18c8fb6..091ad68 100644 --- a/palabritas-common/src/requirement.rs +++ b/palabritas-common/src/requirement.rs @@ -1,5 +1,6 @@ use crate::Condition; +#[derive(Debug, Default, PartialEq, Eq, Clone)] pub struct Requirement { pub condition: Condition, } diff --git a/palabritas-parser/src/main.rs b/palabritas-parser/src/main.rs index e03f99d..67d05c3 100644 --- a/palabritas-parser/src/main.rs +++ b/palabritas-parser/src/main.rs @@ -3,8 +3,8 @@ extern crate pest; extern crate pest_derive; use palabritas_common::{ - Condition, Content, Divert, File, FloatProbability, Frequency, Modifier, Operator, Percentage, - Probability, Requirement, + Condition, Content, ContentType, Divert, File, FloatProbability, Frequency, Modifier, Operator, + PercentageProbability, Probability, Requirement, }; use pest::{iterators::Pair, Parser}; @@ -14,10 +14,12 @@ pub struct PalabritasParser; fn main() { let unparsed_file = include_str!("../../examples/story-example.cuentitos"); - PalabritasParser::parse(Rule::File, unparsed_file) + let token = PalabritasParser::parse(Rule::File, unparsed_file) .expect("unsuccessful parse") // unwrap the parse result .next() .unwrap(); + + parse_file(token).unwrap(); } fn parse_file(token: Pair) -> Option { @@ -29,7 +31,7 @@ fn parse_file(token: Pair) -> Option { for inner_token in token.into_inner() { if inner_token.as_rule() == Rule::BlockContent { - if let Some(content) = parse_block_content(inner_token) { + if let Some(content) = parse_content(inner_token) { file.content.push(content); } } @@ -38,7 +40,7 @@ fn parse_file(token: Pair) -> Option { Some(file) } -fn parse_block_content(token: Pair) -> Option { +fn parse_content(token: Pair) -> Option { if token.as_rule() != Rule::BlockContent { return None; } @@ -52,20 +54,85 @@ fn parse_block_content(token: Pair) -> Option { } } Rule::NamedBucket => { - println!("NamedBucket: {}", inner_token.as_str()) + if let Some(named_bucket) = parse_named_bucket(inner_token) { + content = named_bucket; + } } Rule::Choice => { - println!("Choice: {}", inner_token.as_str()) + if let Some(choice) = parse_choice(inner_token) { + content = choice; + } } Rule::Command => { add_command_to_content(inner_token, &mut content); } Rule::NewBlock => { - if let Some(inner_content) = parse_block_content(inner_token) { - content.content.push(inner_content); + if let Some(inner_block) = get_content_from_new_block(inner_token) { + if let Some(inner_content) = parse_content(inner_block) { + content.content.push(inner_content); + } } } + _ => {} + } + } + Some(content) +} + +fn get_content_from_new_block(token: Pair) -> Option> { + if token.as_rule() != Rule::NewBlock { + return None; + } + + token + .into_inner() + .find(|inner_token| inner_token.as_rule() == Rule::BlockContent) +} + +fn parse_named_bucket(token: Pair) -> Option { + if token.as_rule() != Rule::NamedBucket { + return None; + } + + let mut content = Content { + content_type: ContentType::NamedBucket, + ..Default::default() + }; + + for inner_token in token.into_inner() { + match inner_token.as_rule() { + Rule::Probability => { + content.probability = parse_probability(inner_token); + } + Rule::SnakeCase => { + content.text = inner_token.as_str().to_string(); + } + _ => {} + } + } + + Some(content) +} + +fn parse_choice(token: Pair) -> Option { + if token.as_rule() != Rule::Choice { + return None; + } + + let mut content = Content { + content_type: ContentType::Choice, + ..Default::default() + }; + + for inner_token in token.into_inner() { + match inner_token.as_rule() { + Rule::Probability => { + content.probability = parse_probability(inner_token); + } + Rule::String => { + content.text = inner_token.as_str().to_string(); + } _ => {} } } @@ -78,7 +145,10 @@ fn parse_text(token: Pair) -> Option { return None; } - let mut content = Content::default(); + let mut content = Content { + content_type: ContentType::Text, + ..Default::default() + }; for inner_token in token.into_inner() { match inner_token.as_rule() { @@ -92,7 +162,7 @@ fn parse_text(token: Pair) -> Option { } } - None + Some(content) } fn add_command_to_content(token: Pair, content: &mut Content) { @@ -263,6 +333,7 @@ fn parse_comparison_operator(token: Pair) -> Option { } } +//TODO: Integer fn parse_probability(token: Pair) -> Option> { if token.as_rule() != Rule::Probability { return None; @@ -276,10 +347,12 @@ fn parse_probability(token: Pair) -> Option> { return Some(Box::new(probability)); } if inner_token.as_rule() == Rule::Percentage { - let value = inner_token.as_str().parse::().unwrap(); - let percentage = Percentage { value }; + if let Some(integer) = inner_token.into_inner().next() { + let value = integer.as_str().parse::().unwrap(); + let percentage = PercentageProbability { value }; - return Some(Box::new(percentage)); + return Some(Box::new(percentage)); + } } } @@ -289,14 +362,20 @@ fn parse_probability(token: Pair) -> Option> { #[cfg(test)] mod test { + use crate::{ + add_command_to_content, get_content_from_new_block, parse_choice, parse_comparison_operator, + parse_condition, parse_content, parse_divert, parse_file, parse_frequency, parse_modifier, + parse_named_bucket, parse_probability, parse_requirement, parse_text, PalabritasParser, Rule, + }; + use palabritas_common::{ + Condition, Content, ContentType, Divert, FloatProbability, Frequency, Modifier, Operator, + PercentageProbability, Requirement, Variable, + }; + use pest::iterators::Pair; use pest::Parser; use rand::distributions::Alphanumeric; use rand::{self, Rng}; - #[derive(Parser)] - #[grammar = "palabritas.pest"] - pub struct PalabritasParser; - const SPECIAL_CHARACTERS: [&str; 11] = [".", "_", "/", ",", ";", "'", " ", "?", "!", "¿", "¡"]; const COMPARISON_OPERATORS: [&str; 7] = ["=", "!=", "<", ">", "<=", ">=", "!"]; @@ -304,114 +383,534 @@ mod test { const INDENTATIONS: [&str; 2] = [" ", "\t"]; #[test] - fn parse_char() { + fn parse_file_correctly() { + let unparsed_file = include_str!("../../examples/story-example.cuentitos"); + let token = short_parse(Rule::File, &unparsed_file); + parse_file(token).unwrap(); + //TODO: compare with fixture + } + + #[test] + fn parse_content_correctly() { + /* + + BlockContent = { + (NamedBucket | Choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* + } + + */ + + let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); + let probability_string = format!("({})", float); + + let string = make_random_string(); + let child_string = make_random_string(); + + let text_string = format!("{} {}", probability_string, string); + + let probability_token = short_parse(Rule::Probability, &probability_string); + let probability = parse_probability(probability_token); + + let knot = make_random_identifier(); + let divert_string = format!("\n -> {}", knot); + + let content_string = format!("{}{}\n\t{}", text_string, divert_string, child_string); + + let expected_divert = Divert { + knot: knot.clone(), + stitch: None, + }; + + let child_content = Content { + text: child_string, + content_type: ContentType::Text, + ..Default::default() + }; + + let expected_content = Content { + text: string, + probability: probability, + content_type: ContentType::Text, + divert: vec![expected_divert], + content: vec![child_content], + ..Default::default() + }; + + let content_token = short_parse(Rule::BlockContent, &content_string); + let content = parse_content(content_token).unwrap(); + + assert_eq!(content, expected_content); + } + #[test] + fn get_content_from_new_block_correctly() { + let string = make_random_string(); + let new_block_string = format!("\t{}", string); + + let expected_content = Content { + text: string, + ..Default::default() + }; + + let new_block_token = short_parse(Rule::NewBlock, &new_block_string); + let content_token = get_content_from_new_block(new_block_token).unwrap(); + let content = parse_content(content_token).unwrap(); + + assert_eq!(content, expected_content); + } + #[test] + fn parse_named_bucket_correctly() { + //NamedBucket = { "[" ~ " "* ~ Probability? ~ SnakeCase ~ " "* ~ "]" } + + let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); + let probability_string = format!("({})", float); + + let snake_case = make_random_snake_case(); + + let named_bucket_string = format!("[{} {}]", probability_string, snake_case); + let token = short_parse(Rule::NamedBucket, &named_bucket_string); + let named_bucket = parse_named_bucket(token).unwrap(); + + let probability_token = short_parse(Rule::Probability, &probability_string); + let probability = parse_probability(probability_token); + + let expected_value = Content { + text: snake_case, + probability: probability, + content_type: ContentType::NamedBucket, + ..Default::default() + }; + assert_eq!(named_bucket, expected_value); + } + + #[test] + fn parse_choice_correctly() { + //Choice = { "*" ~ " "* ~ Probability? ~ String } + + let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); + let probability_string = format!("({})", float); + + let string = make_random_string(); + + let choice_string = format!("*{} {}", probability_string, string); + let token = short_parse(Rule::Choice, &choice_string); + let choice = parse_choice(token).unwrap(); + + let probability_token = short_parse(Rule::Probability, &probability_string); + let probability = parse_probability(probability_token); + + let expected_value = Content { + text: string, + probability: probability, + content_type: ContentType::Choice, + ..Default::default() + }; + assert_eq!(choice, expected_value); + } + + #[test] + fn parse_text_correctly() { + //Text = { Probability? ~ String } + + let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); + let probability_string = format!("({})", float); + + let string = make_random_string(); + + let text_string = format!("{} {}", probability_string, string); + let token = short_parse(Rule::Text, &text_string); + let text = parse_text(token).unwrap(); + + let probability_token = short_parse(Rule::Probability, &probability_string); + let probability = parse_probability(probability_token); + + let expected_value = Content { + text: string, + probability: probability, + content_type: ContentType::Text, + ..Default::default() + }; + assert_eq!(text, expected_value); + } + + #[test] + fn command_gets_added_to_content_correctly() { + let mut content = Content::default(); + let mut expected_content = Content::default(); + + // //Command = {NEWLINE ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert) } + + //Modifier + let identifier = make_random_identifier(); + let new_value = rand::thread_rng().gen::().to_string(); + let modifier_string = format!("\n mod {} {}", identifier, new_value); + + let expected_modifier = Modifier { + variable: Variable { + id: identifier, + ..Default::default() + }, + new_value, + }; + + expected_content.modifiers.push(expected_modifier); + + let token = short_parse(Rule::Command, &modifier_string); + add_command_to_content(token, &mut content); + + //Divert + let knot = make_random_identifier(); + let divert_string = format!("\n -> {}", knot); + + let expected_divert = Divert { + knot: knot.clone(), + stitch: None, + }; + expected_content.divert.push(expected_divert); + + let token = short_parse(Rule::Command, &divert_string); + add_command_to_content(token, &mut content); + + //Frequency + + let condition_string = make_random_condition(); + let condition_token = short_parse(Rule::Condition, &condition_string); + let condition = parse_condition(condition_token).unwrap(); + + let change_value: f32 = rand::thread_rng().gen(); + let frequency_string = format!("\n freq {} {}", condition_string, change_value); + let expected_frequency = Frequency { + condition, + change_value, + }; + + expected_content.frequency_changes.push(expected_frequency); + + let token = short_parse(Rule::Command, &frequency_string); + add_command_to_content(token, &mut content); + + //Requirement + + let condition_string = make_random_condition(); + let condition_token = short_parse(Rule::Condition, &condition_string); + let condition = parse_condition(condition_token).unwrap(); + + let requirement_string = format!("\n req {}", condition_string); + let expected_requirement = Requirement { condition }; + + expected_content.requirements.push(expected_requirement); + + let token = short_parse(Rule::Command, &requirement_string); + add_command_to_content(token, &mut content); + + assert_eq!(content, expected_content); + } + #[test] + fn parse_divert_correctly() { + //Divert = { "->" ~ " "* ~ Identifier ~ ("." ~ Identifier)? } + let knot = make_random_identifier(); + let divert_string = format!("-> {}", knot); + + let expected_value = Divert { + knot: knot.clone(), + stitch: None, + }; + + let token = short_parse(Rule::Divert, &divert_string); + let divert = parse_divert(token).unwrap(); + + assert_eq!(divert, expected_value); + + let stitch = make_random_identifier(); + + let divert_string = format!("-> {}.{}", knot, stitch); + + let expected_value = Divert { + knot, + stitch: Some(stitch), + }; + + let token = short_parse(Rule::Divert, &divert_string); + let divert = parse_divert(token).unwrap(); + + assert_eq!(divert, expected_value); + } + + #[test] + fn parse_modifier_correctly() { + //Modifier = { "mod" ~ " "+ ~ Identifier ~ " "+ ~ Value} + let identifier = make_random_identifier(); + let new_value = rand::thread_rng().gen::().to_string(); + let modifier_string = format!("mod {} {}", identifier, new_value); + + let expected_value = Modifier { + variable: Variable { + id: identifier, + ..Default::default() + }, + new_value, + }; + + let token = short_parse(Rule::Modifier, &modifier_string); + let modifier = parse_modifier(token).unwrap(); + + assert_eq!(modifier, expected_value); + } + + #[test] + fn parse_frequency_correctly() { + //Frequency = { "freq" ~ " "+ ~ Condition ~ " "+ ~ ( Float | Integer ) } + let condition_string = make_random_condition(); + let condition_token = short_parse(Rule::Condition, &condition_string); + let condition = parse_condition(condition_token).unwrap(); + + let change_value: f32 = rand::thread_rng().gen(); + let frequency_string = format!("freq {} {}", condition_string, change_value); + let expected_value = Frequency { + condition, + change_value, + }; + + let token = short_parse(Rule::Frequency, &frequency_string); + let frequency = parse_frequency(token).unwrap(); + + assert_eq!(frequency, expected_value); + } + + #[test] + fn parse_requirement_correctly() { + //Requirement = { "req" ~ " "+ ~ Condition } + let condition_string = make_random_condition(); + let condition_token = short_parse(Rule::Condition, &condition_string); + let condition = parse_condition(condition_token).unwrap(); + + let requirement_string = format!("req {}", condition_string); + let expected_value = Requirement { condition }; + + let token = short_parse(Rule::Requirement, &requirement_string); + let requirement = parse_requirement(token).unwrap(); + + assert_eq!(requirement, expected_value); + } + + #[test] + fn parse_condition_correctly() { + /*Condition = { Identifier ~ " "* ~ (ComparisonOperator ~ " "*)? ~ Value } */ + let identifier = make_random_identifier(); + + let operator_string = + COMPARISON_OPERATORS[rand::thread_rng().gen_range(0..COMPARISON_OPERATORS.len())]; + let operator_token = short_parse(Rule::ComparisonOperator, operator_string); + let operator = parse_comparison_operator(operator_token).unwrap(); + + let value: f32 = rand::thread_rng().gen(); + + let condition_string = format!("{} {} {}", identifier, operator_string, value); + + let expected_value = Condition { + variable: Variable { + id: identifier, + ..Default::default() + }, + operator: operator, + value: value.to_string(), + }; + + let token = short_parse(Rule::Condition, &condition_string); + let condition = parse_condition(token).unwrap(); + + assert_eq!(condition, expected_value); + } + + #[test] + fn parse_operators_correctly() { + let token = short_parse(Rule::ComparisonOperator, "="); + assert_eq!(parse_comparison_operator(token).unwrap(), Operator::Equal); + + let token = short_parse(Rule::ComparisonOperator, "!="); + assert_eq!( + parse_comparison_operator(token).unwrap(), + Operator::NotEqual + ); + + let token = short_parse(Rule::ComparisonOperator, "<"); + assert_eq!( + parse_comparison_operator(token).unwrap(), + Operator::LessThan + ); + + let token = short_parse(Rule::ComparisonOperator, ">"); + assert_eq!( + parse_comparison_operator(token).unwrap(), + Operator::GreaterThan + ); + + let token = short_parse(Rule::ComparisonOperator, "<="); + assert_eq!( + parse_comparison_operator(token).unwrap(), + Operator::LessOrEqualThan + ); + + let token = short_parse(Rule::ComparisonOperator, ">="); + assert_eq!( + parse_comparison_operator(token).unwrap(), + Operator::GreaterOrEqualThan + ); + + let token = short_parse(Rule::ComparisonOperator, "!"); + assert_eq!( + parse_comparison_operator(token).unwrap(), + Operator::NotEqual + ); + } + #[test] + fn percentage_probability_parse_correctly() { + //probability = { "(" ~ " "* ~ ( percentage | float | integer ) ~ " "* ~ ")" ~ " "* } + let percentage = rand::thread_rng().gen_range(u8::MIN..u8::MAX); + let expected_value: PercentageProbability = PercentageProbability { value: percentage }; + + let probability_string = format!("({}%)", percentage); + + let token = short_parse(Rule::Probability, &probability_string); + + let probability = parse_probability(token).unwrap(); + let probability = probability + .as_any() + .downcast_ref::() + .unwrap(); + + assert_eq!(*probability, expected_value); + } + + #[test] + fn float_probability_parse_correctly() { + let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); + let expected_value = FloatProbability { value: float }; + + let probability_string = format!("({})", float); + + let token = PalabritasParser::parse(Rule::Probability, &probability_string) + .expect("unsuccessful parse") + .next() + .unwrap(); + + let probability = parse_probability(token).unwrap(); + let probability = probability + .as_any() + .downcast_ref::() + .unwrap(); + + assert_eq!(*probability, expected_value); + } + + #[test] + fn parse_char_rule() { //char = { ASCII_ALPHANUMERIC | "." | "_" | "/" | "," | ";" | "'" | " " | "?" | "!" | "¿" | "¡"} let alphanumeric_char = (rand::thread_rng().sample(&Alphanumeric) as char).to_string(); - assert_parse(Rule::Char, &alphanumeric_char); + assert_parse_rule(Rule::Char, &alphanumeric_char); for special_character in SPECIAL_CHARACTERS { - assert_parse(Rule::Char, special_character); + assert_parse_rule(Rule::Char, special_character); } } #[test] - fn parse_integer() { + fn parse_integer_rule() { //integer = { "-"? ~ ASCII_DIGIT+ } let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); - assert_parse(Rule::Integer, &integer); + assert_parse_rule(Rule::Integer, &integer); } #[test] - fn parse_float() { + fn parse_float_rule() { //float = { integer ~ "." ~ ASCII_DIGIT* } let float = rand::thread_rng() .gen_range(i8::MIN as f32..i8::MAX as f32) .to_string(); - assert_parse(Rule::Float, &float); + assert_parse_rule(Rule::Float, &float); } #[test] - fn parse_percentage() { + fn parse_percentage_rule() { //percentage = { integer ~ "%" } let percentage = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string() + "%"; - assert_parse(Rule::Percentage, &percentage); + assert_parse_rule(Rule::Percentage, &percentage); } #[test] - fn parse_indentation() { + fn parse_indentation_rule() { //indentation = { " " | "\t" } for indentation in INDENTATIONS { - assert_parse(Rule::Indentation, &indentation); + assert_parse_rule(Rule::Indentation, &indentation); } } #[test] - fn parse_string() { + fn parse_string_rule() { //string = { char+ } - assert_parse(Rule::String, &make_random_string()); + assert_parse_rule(Rule::String, &make_random_string()); } #[test] - fn parse_comparison_operator() { + fn parse_comparison_operator_rule() { //comparison_operator = { "!=" | "=" | "<=" | ">=" | "<" | ">" | "!" } for operator in COMPARISON_OPERATORS { - assert_parse(Rule::ComparisonOperator, operator); + assert_parse_rule(Rule::ComparisonOperator, operator); } } #[test] - fn parse_snake_case() { + fn parse_snake_case_rule() { //snake_case = { ASCII_ALPHA_LOWER ~ (ASCII_ALPHA_LOWER | "_" | ASCII_DIGIT)* } - assert_parse(Rule::SnakeCase, &make_random_snake_case()); + assert_parse_rule(Rule::SnakeCase, &make_random_snake_case()); } #[test] - fn parse_identifier() { + fn parse_identifier_rule() { //identifier = { (ASCII_ALPHA | "_" ) ~ (ASCII_ALPHANUMERIC | "_")* } - assert_parse(Rule::Identifier, &make_random_identifier()); + assert_parse_rule(Rule::Identifier, &make_random_identifier()); } #[test] - fn parse_value() { + fn parse_value_rule() { //value = { identifier | float | percentage | integer} let identifier = make_random_identifier(); - assert_parse(Rule::Value, &identifier); + assert_parse_rule(Rule::Value, &identifier); let float = rand::thread_rng() .gen_range(i8::MIN as f32..i8::MAX as f32) .to_string(); - assert_parse(Rule::Value, &float); + assert_parse_rule(Rule::Value, &float); let percentage = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string() + "%"; - assert_parse(Rule::Value, &percentage); + assert_parse_rule(Rule::Value, &percentage); let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); - assert_parse(Rule::Value, &integer); + assert_parse_rule(Rule::Value, &integer); } #[test] - fn parse_condition() { + fn parse_condition_rule() { //condition = { identifier ~ " "* ~ (comparison_operator ~ " "*)? ~ value } let identifier = make_random_identifier(); let comparison_operator = COMPARISON_OPERATORS[rand::thread_rng().gen_range(0..COMPARISON_OPERATORS.len())]; let value = make_random_identifier(); - assert_parse(Rule::Condition, &(identifier.clone() + " " + &value)); - assert_parse( + assert_parse_rule(Rule::Condition, &(identifier.clone() + " " + &value)); + assert_parse_rule( Rule::Condition, &(identifier + comparison_operator + &value), ); } #[test] - fn parse_requirement() { + fn parse_requirement_rule() { //requirement = { "req" ~ " "+ ~ condition } let condition = make_random_condition(); - assert_parse(Rule::Requirement, &("req ".to_string() + &condition)); + assert_parse_rule(Rule::Requirement, &("req ".to_string() + &condition)); } #[test] - fn parse_frequency() { + fn parse_frequency_rule() { //frequency = { "freq" ~ " "+ ~ condition ~ " "+ ~ ( float | integer ) } let condition = make_random_condition(); let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); @@ -419,142 +918,142 @@ mod test { .gen_range(i8::MIN as f32..i8::MAX as f32) .to_string(); - assert_parse( + assert_parse_rule( Rule::Frequency, &("freq ".to_string() + &condition + " " + &integer), ); - assert_parse( + assert_parse_rule( Rule::Frequency, &("freq ".to_string() + &condition + " " + &float), ); } #[test] - fn parse_modifier() { + fn parse_modifier_rule() { //modifier = { "mod" ~ " "+ ~ identifier ~ " "+ ~ value} let identifier = make_random_identifier(); let value = make_random_identifier(); - assert_parse( + assert_parse_rule( Rule::Modifier, &("mod ".to_string() + &identifier + " " + &value), ); } #[test] - fn parse_divert() { + fn parse_divert_rule() { //divert = { "->" ~ " "* ~ identifier ~ ("." ~ identifier)? } let knot = make_random_identifier(); let stitch = make_random_identifier(); - assert_parse(Rule::Divert, &("->".to_string() + &knot)); - assert_parse(Rule::Divert, &("->".to_string() + &knot + "." + &stitch)); + assert_parse_rule(Rule::Divert, &("->".to_string() + &knot)); + assert_parse_rule(Rule::Divert, &("->".to_string() + &knot + "." + &stitch)); } #[test] - fn parse_command() { + fn parse_command_rule() { //Command = {NEWLINE ~ Indentation* ~ (Requirement | Frequency | Modifier | Divert) } let requirement = "\nreq ".to_string() + &(make_random_condition()); - assert_parse(Rule::Command, &(requirement)); + assert_parse_rule(Rule::Command, &(requirement)); let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); let frequency = "\nfreq ".to_string() + &make_random_condition() + " " + &integer; - assert_parse(Rule::Command, &(frequency)); + assert_parse_rule(Rule::Command, &(frequency)); let modifier = "\nmod ".to_string() + &make_random_identifier() + " " + &make_random_identifier(); - assert_parse(Rule::Command, &(modifier)); + assert_parse_rule(Rule::Command, &(modifier)); let divert = "\n->".to_string() + &make_random_identifier(); - assert_parse(Rule::Command, &(divert)); + assert_parse_rule(Rule::Command, &(divert)); } #[test] - fn parse_probability() { + fn parse_probability_rule() { //probability = { "(" ~ " "* ~ ( percentage | float | integer ) ~ " "* ~ ")" ~ " "* } let percentage = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string() + "%"; - assert_parse(Rule::Probability, &("(".to_string() + &percentage + ")")); + assert_parse_rule(Rule::Probability, &("(".to_string() + &percentage + ")")); let float = rand::thread_rng() .gen_range(i8::MIN as f32..i8::MAX as f32) .to_string(); - assert_parse(Rule::Probability, &("(".to_string() + &float + ")")); + assert_parse_rule(Rule::Probability, &("(".to_string() + &float + ")")); let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); - assert_parse(Rule::Probability, &("(".to_string() + &integer + ")")); + assert_parse_rule(Rule::Probability, &("(".to_string() + &integer + ")")); } #[test] - fn parse_knot() { + fn parse_knot_rule() { //Knot = {"===" ~ " "* ~ Identifier ~ " "* ~"===" ~ " "* ~ NEWLINE ~ ( NEWLINE | BlockContent | Stitch | NamedBucket )* } let identifier = make_random_identifier(); - assert_parse(Rule::Knot, &("===".to_string() + &identifier + "===\n")); + assert_parse_rule(Rule::Knot, &("===".to_string() + &identifier + "===\n")); } #[test] - fn parse_stitch() { + fn parse_stitch_rule() { //stitch = {"=" ~ " "* ~ identifier ~ " "*} let identifier = make_random_identifier(); - assert_parse(Rule::Stitch, &("=".to_string() + &identifier)); + assert_parse_rule(Rule::Stitch, &("=".to_string() + &identifier)); } #[test] - fn parse_text() { + fn parse_text_rule() { //text = { probability? ~ string } let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); let probability = "(".to_string() + &integer + ")"; - assert_parse(Rule::Text, &make_random_string()); - assert_parse(Rule::Text, &(probability + &make_random_string())); + assert_parse_rule(Rule::Text, &make_random_string()); + assert_parse_rule(Rule::Text, &(probability + &make_random_string())); } #[test] - fn parse_choice() { + fn parse_choice_rule() { //choice = { "*" ~ " "* ~ text } let text = make_random_string(); - assert_parse(Rule::Choice, &("*".to_string() + &text)); + assert_parse_rule(Rule::Choice, &("*".to_string() + &text)); } #[test] - fn parse_named_bucket() { + fn parse_named_bucket_rule() { //named_bucket = { "[" ~ " "* ~ probability? ~ snake_case ~ " "* ~ "]"} let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); let probability = "(".to_string() + &integer + ")"; - assert_parse( + assert_parse_rule( Rule::NamedBucket, &("[".to_string() + &make_random_snake_case() + "]"), ); - assert_parse( + assert_parse_rule( Rule::NamedBucket, &("[".to_string() + &probability + &make_random_snake_case() + "]"), ); } #[test] - fn parse_block_content() { + fn parse_block_content_rule() { //BlockContent = { // (choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* //} let choice = "*".to_string() + &make_random_string(); - assert_parse(Rule::BlockContent, &choice); + assert_parse_rule(Rule::BlockContent, &choice); let text = make_random_string(); - assert_parse(Rule::BlockContent, &text); + assert_parse_rule(Rule::BlockContent, &text); let new_block = "\n ".to_string() + &make_random_string(); - assert_parse(Rule::BlockContent, &(text + &new_block)); + assert_parse_rule(Rule::BlockContent, &(text + &new_block)); } #[test] - fn parse_file() { + fn parse_file_rule() { //File = { SOI ~ (NEWLINE | BlockContent | Knot )* ~ EOI } let unparsed_file = include_str!("../../examples/story-example.cuentitos"); - assert_parse(Rule::File, &unparsed_file); + assert_parse_rule(Rule::File, &unparsed_file); } - fn assert_parse(rule: Rule, input: &str) { + fn assert_parse_rule(rule: Rule, input: &str) { let pair = PalabritasParser::parse(rule, input) .expect("unsuccessful parse") .next() @@ -643,7 +1142,7 @@ mod test { } shuffle_string(&mut string); - string + string.trim().to_string() } fn shuffle_string(string: &mut String) { @@ -660,4 +1159,11 @@ mod test { *string = final_string; } + + fn short_parse(rule: Rule, input: &str) -> Pair { + PalabritasParser::parse(rule, input) + .expect("unsuccessful parse") + .next() + .unwrap() + } } diff --git a/palabritas-parser/src/palabritas.pest b/palabritas-parser/src/palabritas.pest index f7497fe..c50d7b7 100644 --- a/palabritas-parser/src/palabritas.pest +++ b/palabritas-parser/src/palabritas.pest @@ -24,7 +24,7 @@ Knot = {"===" ~ " "* ~ Identifier ~ " "* ~"===" ~ " "* ~ NEWLINE ~ ( NEWLINE | B Stitch = {"=" ~ " "* ~ Identifier} Text = { Probability? ~ String } -Choice = { "*" ~ " "* ~ Probability? ~ Text } +Choice = { "*" ~ " "* ~ Probability? ~ String } NamedBucket = { "[" ~ " "* ~ Probability? ~ SnakeCase ~ " "* ~ "]" } NewBlock = { From 69bee0c5948652b2dbc90b27e959194192572e41 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Mon, 29 May 2023 18:13:16 -0300 Subject: [PATCH 13/94] compiler + parser update --- Cargo.toml | 1 + palabritas-common/Cargo.toml | 6 +- palabritas-common/src/condition.rs | 7 +- palabritas-common/src/content.rs | 6 +- palabritas-common/src/divert.rs | 4 +- palabritas-common/src/file.rs | 3 +- palabritas-common/src/frequency.rs | 3 +- palabritas-common/src/knot.rs | 3 +- palabritas-common/src/modifier.rs | 3 +- palabritas-common/src/probability.rs | 9 ++- palabritas-common/src/requirement.rs | 3 +- palabritas-common/src/stitch.rs | 3 +- palabritas-common/src/variable.rs | 6 +- palabritas-compiler/.DS_Store | Bin 0 -> 6148 bytes palabritas-compiler/Cargo.toml | 17 +++++ palabritas-compiler/fixtures/.DS_Store | Bin 0 -> 6148 bytes palabritas-compiler/fixtures/cuentitos.toml | 8 +++ palabritas-compiler/fixtures/en_export.csv | 1 + .../fixtures/events/01-basic.event | 2 + .../fixtures/events/02-choices.event | 4 ++ .../fixtures/events/03-results.event | 8 +++ .../fixtures/events/04-requirements.event | 21 ++++++ .../fixtures/events/05-modifiers.event | 15 +++++ .../fixtures/events/06-settings.event | 4 ++ palabritas-compiler/fixtures/items/.DS_Store | Bin 0 -> 6148 bytes .../fixtures/items/00-moon-wolf.item | 2 + .../fixtures/items/01-mushroom.item | 4 ++ .../fixtures/items/02-dirt.item | 3 + palabritas-compiler/fixtures/locales/es.csv | 4 ++ palabritas-compiler/src/lib.rs | 61 ++++++++++++++++++ palabritas-parser/Cargo.toml | 5 +- palabritas-parser/src/{main.rs => lib.rs} | 22 +++++-- 32 files changed, 213 insertions(+), 25 deletions(-) create mode 100644 palabritas-compiler/.DS_Store create mode 100644 palabritas-compiler/Cargo.toml create mode 100644 palabritas-compiler/fixtures/.DS_Store create mode 100644 palabritas-compiler/fixtures/cuentitos.toml create mode 100644 palabritas-compiler/fixtures/en_export.csv create mode 100644 palabritas-compiler/fixtures/events/01-basic.event create mode 100644 palabritas-compiler/fixtures/events/02-choices.event create mode 100644 palabritas-compiler/fixtures/events/03-results.event create mode 100644 palabritas-compiler/fixtures/events/04-requirements.event create mode 100644 palabritas-compiler/fixtures/events/05-modifiers.event create mode 100644 palabritas-compiler/fixtures/events/06-settings.event create mode 100644 palabritas-compiler/fixtures/items/.DS_Store create mode 100644 palabritas-compiler/fixtures/items/00-moon-wolf.item create mode 100644 palabritas-compiler/fixtures/items/01-mushroom.item create mode 100644 palabritas-compiler/fixtures/items/02-dirt.item create mode 100644 palabritas-compiler/fixtures/locales/es.csv create mode 100644 palabritas-compiler/src/lib.rs rename palabritas-parser/src/{main.rs => lib.rs} (98%) diff --git a/Cargo.toml b/Cargo.toml index abcb91c..9c39924 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,6 +7,7 @@ members = [ "runtime-c", "palabritas-parser", "palabritas-common", + "palabritas-compiler", "cli", "editor/src-tauri" ] diff --git a/palabritas-common/Cargo.toml b/palabritas-common/Cargo.toml index b85a2c2..f4e629a 100644 --- a/palabritas-common/Cargo.toml +++ b/palabritas-common/Cargo.toml @@ -4,4 +4,8 @@ version = "0.1.0" edition = "2021" [dependencies] -rand = "0.8.5" \ No newline at end of file +rand = "0.8.5" +serde = { version = "1.0.144", features = ["derive"] } +rmp-serde = "1.1.1" +rmp = "^0.8" +typetag = "0.2" \ No newline at end of file diff --git a/palabritas-common/src/condition.rs b/palabritas-common/src/condition.rs index bb019da..4a8b9bf 100644 --- a/palabritas-common/src/condition.rs +++ b/palabritas-common/src/condition.rs @@ -1,6 +1,8 @@ use crate::Variable; -#[derive(Default, Debug, Eq, PartialEq, Clone)] +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] pub enum Operator { #[default] Equal, @@ -9,9 +11,10 @@ pub enum Operator { LessThan, GreaterOrEqualThan, LessOrEqualThan, + } -#[derive(Default, Debug, Eq, PartialEq, Clone)] +#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] pub struct Condition { pub variable: Variable, pub operator: Operator, diff --git a/palabritas-common/src/content.rs b/palabritas-common/src/content.rs index 4b72477..f1d79a9 100644 --- a/palabritas-common/src/content.rs +++ b/palabritas-common/src/content.rs @@ -1,8 +1,9 @@ use crate::{ Divert, FloatProbability, Frequency, Modifier, PercentageProbability, Probability, Requirement, }; +use serde::{Deserialize, Serialize}; -#[derive(Default, Debug)] +#[derive(Debug, Default, Serialize, Deserialize)] pub struct Content { pub content: Vec, pub probability: Option>, @@ -63,7 +64,8 @@ impl PartialEq for Content { } } -#[derive(Debug, Default, PartialEq, Clone)] + +#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] pub enum ContentType { #[default] Text, diff --git a/palabritas-common/src/divert.rs b/palabritas-common/src/divert.rs index 075435c..7952faf 100644 --- a/palabritas-common/src/divert.rs +++ b/palabritas-common/src/divert.rs @@ -1,4 +1,6 @@ -#[derive(Debug, Default, PartialEq, Eq, Clone)] +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] pub struct Divert { pub knot: String, pub stitch: Option, diff --git a/palabritas-common/src/file.rs b/palabritas-common/src/file.rs index c67b90d..574d1d1 100644 --- a/palabritas-common/src/file.rs +++ b/palabritas-common/src/file.rs @@ -1,6 +1,7 @@ use crate::{Content, Knot}; +use serde::{Deserialize, Serialize}; -#[derive(Default)] +#[derive(Debug, Default, Serialize, Deserialize, PartialEq)] pub struct File { pub knots: Vec, pub content: Vec, diff --git a/palabritas-common/src/frequency.rs b/palabritas-common/src/frequency.rs index 1340e34..b228b9d 100644 --- a/palabritas-common/src/frequency.rs +++ b/palabritas-common/src/frequency.rs @@ -1,6 +1,7 @@ use crate::Condition; +use serde::{Deserialize, Serialize}; -#[derive(Debug, Default, PartialEq, Clone)] +#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)] pub struct Frequency { pub condition: Condition, pub change_value: f32, diff --git a/palabritas-common/src/knot.rs b/palabritas-common/src/knot.rs index abfe1de..e2e3dd9 100644 --- a/palabritas-common/src/knot.rs +++ b/palabritas-common/src/knot.rs @@ -1,6 +1,7 @@ use crate::{Content, Stitch}; +use serde::{Deserialize, Serialize}; -#[derive(Default)] +#[derive(Debug, Default, Serialize, Deserialize, PartialEq)] pub struct Knot { pub identifier: String, pub content: Vec, diff --git a/palabritas-common/src/modifier.rs b/palabritas-common/src/modifier.rs index e406c2c..87b078d 100644 --- a/palabritas-common/src/modifier.rs +++ b/palabritas-common/src/modifier.rs @@ -1,6 +1,7 @@ use crate::Variable; +use serde::{Deserialize, Serialize}; -#[derive(Debug, Default, PartialEq, Eq, Clone)] +#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] pub struct Modifier { pub variable: Variable, pub new_value: String, diff --git a/palabritas-common/src/probability.rs b/palabritas-common/src/probability.rs index abedb4b..69ef07a 100644 --- a/palabritas-common/src/probability.rs +++ b/palabritas-common/src/probability.rs @@ -1,17 +1,21 @@ use rand::Rng; use std::any::Any; use std::fmt::Debug; +use serde::{Deserialize, Serialize}; + +#[typetag::serde(tag = "type")] pub trait Probability: Debug { fn get_chance(&self) -> f32; fn roll_chance(&self) -> bool; fn as_any(&self) -> &dyn Any; } -#[derive(Debug, Default, PartialEq, Eq, Clone)] +#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] pub struct PercentageProbability { pub value: u8, } +#[typetag::serde] impl Probability for PercentageProbability { fn get_chance(&self) -> f32 { self.value as f32 / 100. @@ -25,11 +29,12 @@ impl Probability for PercentageProbability { } } -#[derive(Debug, Default, PartialEq, Clone)] +#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)] pub struct FloatProbability { pub value: f32, } +#[typetag::serde] impl Probability for FloatProbability { fn get_chance(&self) -> f32 { self.value diff --git a/palabritas-common/src/requirement.rs b/palabritas-common/src/requirement.rs index 091ad68..aa3ac6e 100644 --- a/palabritas-common/src/requirement.rs +++ b/palabritas-common/src/requirement.rs @@ -1,6 +1,7 @@ use crate::Condition; +use serde::{Deserialize, Serialize}; -#[derive(Debug, Default, PartialEq, Eq, Clone)] +#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] pub struct Requirement { pub condition: Condition, } diff --git a/palabritas-common/src/stitch.rs b/palabritas-common/src/stitch.rs index 34c7082..c71363c 100644 --- a/palabritas-common/src/stitch.rs +++ b/palabritas-common/src/stitch.rs @@ -1,6 +1,7 @@ use crate::Content; +use serde::{Deserialize, Serialize}; -#[derive(Default)] +#[derive(Debug, Default, Serialize, Deserialize, PartialEq)] pub struct Stitch { pub identifier: String, pub content: Vec, diff --git a/palabritas-common/src/variable.rs b/palabritas-common/src/variable.rs index 5f04beb..500d7b7 100644 --- a/palabritas-common/src/variable.rs +++ b/palabritas-common/src/variable.rs @@ -1,6 +1,8 @@ pub type VariableId = String; -#[derive(Debug, Default, PartialEq, Eq, Clone)] +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] pub enum VariableKind { #[default] Integer, @@ -11,7 +13,7 @@ pub enum VariableKind { }, } -#[derive(Debug, Default, PartialEq, Eq, Clone)] +#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] pub struct Variable { pub id: VariableId, pub kind: VariableKind, diff --git a/palabritas-compiler/.DS_Store b/palabritas-compiler/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b68b900c68a1c9decf7a0db3d22406d1a7a30cf1 GIT binary patch literal 6148 zcmeHK%Sr=55Uh?lEaZ}-$N2^SUAd5BJ?`-GHtu(`>hlTb4!Fl7-tqdK z|Ma|j$a~Kdm6ZZgKnh3!DIf)YrGWQd+OSGglmb#f3VbQx--kwb?1fWed^#9n1RyS% z4&ypz31agEu@_E>%+M^U#H3n{7?yPATh;Z#DKY7=8a}L^Y&D@+Je~KqD2Me#MJXT! zP8GPw?b`eQHT{SA|CFSi6p#Y{N&#DL$L)r%RK0cfa^7nj{f6!}A9OdagTfH)m>BJt g8*j&#QIvJf*F5iqQ)1AW4?0ml1Fnlq3jDPKp9s7a(f|Me literal 0 HcmV?d00001 diff --git a/palabritas-compiler/Cargo.toml b/palabritas-compiler/Cargo.toml new file mode 100644 index 0000000..0959c24 --- /dev/null +++ b/palabritas-compiler/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "palabritas-compiler" +version = "0.0.0" +edition = "2021" + +[lib] +path = "src/lib.rs" + +[dependencies] +serde = { version = "1.0.144", features = ["derive"] } +rmp-serde = "1.1.1" +clap = { version = "4.0.17", features = ["derive"] } +palabritas-common = { path = "../palabritas-common" } +palabritas-parser = { path = "../palabritas-parser" } +regex = "1.7.0" +strum = "0.24.1" +csv = "1.1" diff --git a/palabritas-compiler/fixtures/.DS_Store b/palabritas-compiler/fixtures/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..7c527936de3b76ee32e00f67b6781c0b46e66ede GIT binary patch literal 6148 zcmeHKJB|V|47Fj9kZ35k%oVsngx~~o0SZ>Dm0*zg)l+e zM0v${EF!wT?N=g85t+jc5r~noCR|;seX*X*;DQoNKaaL;!di80h5~3oFMTo)me- Y=Gd=^eW243cRG+i1Evd&3cOo^U!{H&+W-In literal 0 HcmV?d00001 diff --git a/palabritas-compiler/fixtures/cuentitos.toml b/palabritas-compiler/fixtures/cuentitos.toml new file mode 100644 index 0000000..2dca840 --- /dev/null +++ b/palabritas-compiler/fixtures/cuentitos.toml @@ -0,0 +1,8 @@ +reputations = [ "rep_1", "rep_2" ] +locales = ['en', 'es', 'ru'] +default_locale = 'en' + +[variables] +health = "integer" +happy = "bool" +tile = { enum = { values = ["forest"] }} diff --git a/palabritas-compiler/fixtures/en_export.csv b/palabritas-compiler/fixtures/en_export.csv new file mode 100644 index 0000000..28cc662 --- /dev/null +++ b/palabritas-compiler/fixtures/en_export.csv @@ -0,0 +1 @@ +id,value diff --git a/palabritas-compiler/fixtures/events/01-basic.event b/palabritas-compiler/fixtures/events/01-basic.event new file mode 100644 index 0000000..6a5aed4 --- /dev/null +++ b/palabritas-compiler/fixtures/events/01-basic.event @@ -0,0 +1,2 @@ +A Basic Event +This event has no options, just title and description \ No newline at end of file diff --git a/palabritas-compiler/fixtures/events/02-choices.event b/palabritas-compiler/fixtures/events/02-choices.event new file mode 100644 index 0000000..a04d496 --- /dev/null +++ b/palabritas-compiler/fixtures/events/02-choices.event @@ -0,0 +1,4 @@ +A Basic Event +This event has options + * An Option without requirements + * Another option without requirements \ No newline at end of file diff --git a/palabritas-compiler/fixtures/events/03-results.event b/palabritas-compiler/fixtures/events/03-results.event new file mode 100644 index 0000000..1312b73 --- /dev/null +++ b/palabritas-compiler/fixtures/events/03-results.event @@ -0,0 +1,8 @@ +A Basic Event +This event has options with results, none have requirements + * An Option + (10) One Result + (90) Another Result + * Another option + (90) One more Result + (10) Yet another Result diff --git a/palabritas-compiler/fixtures/events/04-requirements.event b/palabritas-compiler/fixtures/events/04-requirements.event new file mode 100644 index 0000000..0ff4055 --- /dev/null +++ b/palabritas-compiler/fixtures/events/04-requirements.event @@ -0,0 +1,21 @@ +Conditions +This event has conditions + unique + require var health <100 + require item wooden_figure + require reputation rep_1 5 + require time_of_day night + require event !choices + require decision a_decision + require var tile forest + * An Option + require var health =100 + require time_of_day night + require event choices + (10) One Result + require var happy true + require time_of_day morning + require time_of_day !noon + (90) Another Result + require var happy false + require time_of_day evening diff --git a/palabritas-compiler/fixtures/events/05-modifiers.event b/palabritas-compiler/fixtures/events/05-modifiers.event new file mode 100644 index 0000000..724aaec --- /dev/null +++ b/palabritas-compiler/fixtures/events/05-modifiers.event @@ -0,0 +1,15 @@ +A Basic Event with mods +This event has options with results and mods + * An Option + (100) One Result + mod item wooden_figure + mod item wooden_figure -1 + mod var health -2 + mod var health 5 + mod var happy true + mod var happy false + mod reputation rep_1 2 + mod reputation rep_2 -2 + mod decision a_decision + mod achievement an_achievement + diff --git a/palabritas-compiler/fixtures/events/06-settings.event b/palabritas-compiler/fixtures/events/06-settings.event new file mode 100644 index 0000000..42dab97 --- /dev/null +++ b/palabritas-compiler/fixtures/events/06-settings.event @@ -0,0 +1,4 @@ +A Basic Event +This event has no options, just title and description +set character laidaxai +set character_voice strong diff --git a/palabritas-compiler/fixtures/items/.DS_Store b/palabritas-compiler/fixtures/items/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ad3d440cb59433da269a8e4d461715bc25ea5947 GIT binary patch literal 6148 zcmeHKJ8r^25S>XVkZ34V?iIMf%5qMS3q)XqkPwz|(!1hZIa=O)8q3f@gWgCpZ+CXy zT7HGcBO==Tb{mnkh%DiTaw34iE@ z-D%tRCo7>*0V+TRr~nn90uNFk8|!lQp!;|Y6`%sIqkw%M3f!Bu`B$e#hzg+>LQt-wG3s}=zO literal 0 HcmV?d00001 diff --git a/palabritas-compiler/fixtures/items/00-moon-wolf.item b/palabritas-compiler/fixtures/items/00-moon-wolf.item new file mode 100644 index 0000000..9340627 --- /dev/null +++ b/palabritas-compiler/fixtures/items/00-moon-wolf.item @@ -0,0 +1,2 @@ +Moon Wolf +A woolf with blue eyes that shine at night \ No newline at end of file diff --git a/palabritas-compiler/fixtures/items/01-mushroom.item b/palabritas-compiler/fixtures/items/01-mushroom.item new file mode 100644 index 0000000..e7fe704 --- /dev/null +++ b/palabritas-compiler/fixtures/items/01-mushroom.item @@ -0,0 +1,4 @@ +Mushroom +Delicious and nutritious +ingredient +6 \ No newline at end of file diff --git a/palabritas-compiler/fixtures/items/02-dirt.item b/palabritas-compiler/fixtures/items/02-dirt.item new file mode 100644 index 0000000..177d2f4 --- /dev/null +++ b/palabritas-compiler/fixtures/items/02-dirt.item @@ -0,0 +1,3 @@ +Dirt +A dirt lump you dug +6 \ No newline at end of file diff --git a/palabritas-compiler/fixtures/locales/es.csv b/palabritas-compiler/fixtures/locales/es.csv new file mode 100644 index 0000000..4b80de0 --- /dev/null +++ b/palabritas-compiler/fixtures/locales/es.csv @@ -0,0 +1,4 @@ +id,value +event-01-basic-title,"Un evento básico" +, +event, diff --git a/palabritas-compiler/src/lib.rs b/palabritas-compiler/src/lib.rs new file mode 100644 index 0000000..bcb3b9c --- /dev/null +++ b/palabritas-compiler/src/lib.rs @@ -0,0 +1,61 @@ +use palabritas_parser::parse_file_from_path; +use rmp_serde::Serializer; +use serde::Serialize; +use std::error; +use std::fmt; +use std::fs::File; +use std::io::Write; +use std::path::Path; + +#[derive(Debug)] +pub enum CompileError { + SourceNotDirectory, + DestinationNotDirectory, +} + +impl error::Error for CompileError {} + +impl fmt::Display for CompileError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + CompileError::SourceNotDirectory => write!(f, "Source is not a folder."), + CompileError::DestinationNotDirectory => write!(f, "Destination is not a folder."), + } + } +} + + +pub fn compile(source_path: T, destination_path: U) +where + T: AsRef, + U: AsRef, +{ + + println!("abt to"); + println!("path: {:?}",source_path.as_ref()); + let db = parse_file_from_path(source_path).unwrap(); + + println!("ok from file"); + let mut buf: Vec = Vec::new(); + let mut serializer = Serializer::new(&mut buf); + + db.serialize(&mut serializer).unwrap(); + + let destination_path = destination_path.as_ref().to_path_buf(); + let mut file = File::create(destination_path).unwrap(); + + file.write_all(&buf).unwrap(); +} + + + +#[cfg(test)] +mod test { + use crate::compile; + + + #[test] + fn compile_works_correctly() { + compile("../examples/story-example.cuentitos", "F:/cuentitos.db"); + } +} \ No newline at end of file diff --git a/palabritas-parser/Cargo.toml b/palabritas-parser/Cargo.toml index c8c57fd..b270a46 100644 --- a/palabritas-parser/Cargo.toml +++ b/palabritas-parser/Cargo.toml @@ -3,9 +3,8 @@ name = "palabritas-parser" version = "0.2.0" edition = "2021" -[[bin]] -name = "palabritas-parser" -path = "src/main.rs" +[lib] +path = "src/lib.rs" [dependencies] pest = "2.0" diff --git a/palabritas-parser/src/main.rs b/palabritas-parser/src/lib.rs similarity index 98% rename from palabritas-parser/src/main.rs rename to palabritas-parser/src/lib.rs index 67d05c3..8f6f8b6 100644 --- a/palabritas-parser/src/main.rs +++ b/palabritas-parser/src/lib.rs @@ -2,6 +2,8 @@ extern crate pest; #[macro_use] extern crate pest_derive; +use std::path::Path; + use palabritas_common::{ Condition, Content, ContentType, Divert, File, FloatProbability, Frequency, Modifier, Operator, PercentageProbability, Probability, Requirement, @@ -12,17 +14,19 @@ use pest::{iterators::Pair, Parser}; #[grammar = "palabritas.pest"] pub struct PalabritasParser; -fn main() { - let unparsed_file = include_str!("../../examples/story-example.cuentitos"); - let token = PalabritasParser::parse(Rule::File, unparsed_file) +pub fn parse_file_from_path

(path: P) -> Option +where + P: AsRef{ + let str = std::fs::read_to_string(path).expect("cannot read file"); + let token = PalabritasParser::parse(Rule::File, &str) .expect("unsuccessful parse") // unwrap the parse result .next() .unwrap(); - parse_file(token).unwrap(); + parse_file(token) } -fn parse_file(token: Pair) -> Option { +pub fn parse_file(token: Pair) -> Option { if token.as_rule() != Rule::File { return None; } @@ -365,7 +369,7 @@ mod test { use crate::{ add_command_to_content, get_content_from_new_block, parse_choice, parse_comparison_operator, parse_condition, parse_content, parse_divert, parse_file, parse_frequency, parse_modifier, - parse_named_bucket, parse_probability, parse_requirement, parse_text, PalabritasParser, Rule, + parse_named_bucket, parse_probability, parse_requirement, parse_text, PalabritasParser, Rule, parse_file_from_path, }; use palabritas_common::{ Condition, Content, ContentType, Divert, FloatProbability, Frequency, Modifier, Operator, @@ -382,6 +386,12 @@ mod test { const INDENTATIONS: [&str; 2] = [" ", "\t"]; + #[test] + fn parse_file_from_path_correctly() { + parse_file_from_path("../examples/story-example.cuentitos").unwrap(); + //TODO: compare with fixture + } + #[test] fn parse_file_correctly() { let unparsed_file = include_str!("../../examples/story-example.cuentitos"); From 1408021180b53e42acd7125350a7cc1f34695213 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Mon, 29 May 2023 18:14:38 -0300 Subject: [PATCH 14/94] fmt + clippy --- palabritas-common/src/condition.rs | 1 - palabritas-common/src/content.rs | 5 ++--- palabritas-common/src/probability.rs | 2 +- palabritas-compiler/src/lib.rs | 18 +++++------------- palabritas-parser/src/lib.rs | 12 +++++++----- 5 files changed, 15 insertions(+), 23 deletions(-) diff --git a/palabritas-common/src/condition.rs b/palabritas-common/src/condition.rs index 4a8b9bf..07d3652 100644 --- a/palabritas-common/src/condition.rs +++ b/palabritas-common/src/condition.rs @@ -11,7 +11,6 @@ pub enum Operator { LessThan, GreaterOrEqualThan, LessOrEqualThan, - } #[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] diff --git a/palabritas-common/src/content.rs b/palabritas-common/src/content.rs index f1d79a9..91d9a8c 100644 --- a/palabritas-common/src/content.rs +++ b/palabritas-common/src/content.rs @@ -35,9 +35,9 @@ impl PartialEq for Content { if content_1.probability.is_some() != content_2.probability.is_some() { return true; } - + if content_1.probability.is_some() && content_2.probability.is_some() { - if let Some(self_probability) = content_1 + if let Some(self_probability) = content_1 .probability .as_ref() .unwrap() @@ -64,7 +64,6 @@ impl PartialEq for Content { } } - #[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] pub enum ContentType { #[default] diff --git a/palabritas-common/src/probability.rs b/palabritas-common/src/probability.rs index 69ef07a..cacfcd5 100644 --- a/palabritas-common/src/probability.rs +++ b/palabritas-common/src/probability.rs @@ -1,7 +1,7 @@ use rand::Rng; +use serde::{Deserialize, Serialize}; use std::any::Any; use std::fmt::Debug; -use serde::{Deserialize, Serialize}; #[typetag::serde(tag = "type")] pub trait Probability: Debug { diff --git a/palabritas-compiler/src/lib.rs b/palabritas-compiler/src/lib.rs index bcb3b9c..a3173f1 100644 --- a/palabritas-compiler/src/lib.rs +++ b/palabritas-compiler/src/lib.rs @@ -24,38 +24,30 @@ impl fmt::Display for CompileError { } } - -pub fn compile(source_path: T, destination_path: U) +pub fn compile(source_path: T, destination_path: U) where T: AsRef, U: AsRef, { - - println!("abt to"); - println!("path: {:?}",source_path.as_ref()); let db = parse_file_from_path(source_path).unwrap(); - - println!("ok from file"); + let mut buf: Vec = Vec::new(); let mut serializer = Serializer::new(&mut buf); db.serialize(&mut serializer).unwrap(); - + let destination_path = destination_path.as_ref().to_path_buf(); let mut file = File::create(destination_path).unwrap(); file.write_all(&buf).unwrap(); } - - #[cfg(test)] mod test { - use crate::compile; - + use crate::compile; #[test] fn compile_works_correctly() { compile("../examples/story-example.cuentitos", "F:/cuentitos.db"); } -} \ No newline at end of file +} diff --git a/palabritas-parser/src/lib.rs b/palabritas-parser/src/lib.rs index 8f6f8b6..2547856 100644 --- a/palabritas-parser/src/lib.rs +++ b/palabritas-parser/src/lib.rs @@ -16,9 +16,10 @@ pub struct PalabritasParser; pub fn parse_file_from_path

(path: P) -> Option where - P: AsRef{ - let str = std::fs::read_to_string(path).expect("cannot read file"); - let token = PalabritasParser::parse(Rule::File, &str) + P: AsRef, +{ + let str = std::fs::read_to_string(path).expect("cannot read file"); + let token = PalabritasParser::parse(Rule::File, &str) .expect("unsuccessful parse") // unwrap the parse result .next() .unwrap(); @@ -368,8 +369,9 @@ mod test { use crate::{ add_command_to_content, get_content_from_new_block, parse_choice, parse_comparison_operator, - parse_condition, parse_content, parse_divert, parse_file, parse_frequency, parse_modifier, - parse_named_bucket, parse_probability, parse_requirement, parse_text, PalabritasParser, Rule, parse_file_from_path, + parse_condition, parse_content, parse_divert, parse_file, parse_file_from_path, + parse_frequency, parse_modifier, parse_named_bucket, parse_probability, parse_requirement, + parse_text, PalabritasParser, Rule, }; use palabritas_common::{ Condition, Content, ContentType, Divert, FloatProbability, Frequency, Modifier, Operator, From 285d22fd7ea2e0e0ca475706c74ac56dc5914995 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=20Tufr=C3=B3?= Date: Fri, 9 Jun 2023 20:13:33 -0300 Subject: [PATCH 15/94] runtime + compiler (#8) * runtime + compiler * refactoring * runtime changes * Updated docs for sections and sub-sections * Updated docs for sections and sub-sections * Added finishing the game section to docs * Fixed bug in definitions that required dynamic parsing of buckets * WIP refactor of block definitions * parser and runtime updates * BlockId and SectionId are now types * Fixes to docs * WIP refactor * Added docs for dynamic function calls * refactor fixes * Probabilistic One-Off's * Organized repository for easier and more correct nomenclature. * Removed old version c bindings * Fixed suggestion by cargo fmt * Added comment to example * Support any character for in palabritas --------- Co-authored-by: loomstyla --- .gitignore | 3 + Cargo.toml | 10 +- bindings/c/build.sh | 2 - bindings/c/cuentitos | Bin 7501910 -> 0 bytes bindings/c/cuentitos.cpp | 52 - bindings/c/cuentitos.hpp | 54 - cli/Cargo.toml | 2 - cli/build/cuentitos.db | 3 + cli/src/console.rs | 35 +- cli/src/main.rs | 92 +- common/Cargo.toml | 7 +- common/examples/serialization.rs | 23 - common/fixtures/cuentitos.toml | 10 - common/fixtures/database.mp | 4 - common/fixtures/events/simple.mp | 1 - common/src/block.rs | 67 + .../src/condition.rs | 1 + common/src/config.rs | 108 - common/src/database.rs | 35 +- {palabritas-common => common}/src/divert.rs | 0 common/src/event.rs | 191 -- common/src/event_choice.rs | 10 - common/src/event_requirement.rs | 50 - common/src/event_result.rs | 11 - .../src/frequency.rs | 8 +- common/src/i18n.rs | 3 +- common/src/item.rs | 120 - {palabritas-common => common}/src/knot.rs | 4 +- common/src/lib.rs | 56 +- common/src/modifier.rs | 26 +- .../src/requirement.rs | 0 {palabritas-common => common}/src/stitch.rs | 4 +- common/src/test_utils.rs | 29 - common/src/variable.rs | 9 +- compiler/.DS_Store | Bin 6148 -> 0 bytes compiler/Cargo.toml | 3 +- compiler/fixtures/.DS_Store | Bin 6148 -> 0 bytes compiler/fixtures/items/.DS_Store | Bin 6148 -> 0 bytes compiler/src/i18n.rs | 153 -- compiler/src/lib.rs | 85 +- compiler/src/parsable.rs | 10 - compiler/src/parser.rs | 129 - compiler/src/parsers/event.rs | 427 ---- compiler/src/parsers/event_requirement.rs | 633 ----- compiler/src/parsers/item.rs | 98 - compiler/src/parsers/mod.rs | 9 - compiler/src/parsers/modifier.rs | 326 --- definitions/cuentitos.md | 5 + definitions/palabritas.md | 97 +- editor/.gitignore | 24 - editor/.vscode/extensions.json | 3 - editor/README.md | 0 editor/src-tauri/.gitignore | 4 - editor/src-tauri/Cargo.toml | 29 - editor/src-tauri/build.rs | 3 - editor/src-tauri/icons/128x128.png | Bin 3512 -> 0 bytes editor/src-tauri/icons/128x128@2x.png | Bin 7012 -> 0 bytes editor/src-tauri/icons/32x32.png | Bin 974 -> 0 bytes editor/src-tauri/icons/Square107x107Logo.png | Bin 2863 -> 0 bytes editor/src-tauri/icons/Square142x142Logo.png | Bin 3858 -> 0 bytes editor/src-tauri/icons/Square150x150Logo.png | Bin 3966 -> 0 bytes editor/src-tauri/icons/Square284x284Logo.png | Bin 7737 -> 0 bytes editor/src-tauri/icons/Square30x30Logo.png | Bin 903 -> 0 bytes editor/src-tauri/icons/Square310x310Logo.png | Bin 8591 -> 0 bytes editor/src-tauri/icons/Square44x44Logo.png | Bin 1299 -> 0 bytes editor/src-tauri/icons/Square71x71Logo.png | Bin 2011 -> 0 bytes editor/src-tauri/icons/Square89x89Logo.png | Bin 2468 -> 0 bytes editor/src-tauri/icons/StoreLogo.png | Bin 1523 -> 0 bytes editor/src-tauri/icons/icon.icns | Bin 98451 -> 0 bytes editor/src-tauri/icons/icon.ico | Bin 86642 -> 0 bytes editor/src-tauri/icons/icon.png | Bin 14183 -> 0 bytes editor/src-tauri/src/main.rs | 182 -- editor/src-tauri/tauri.conf.json | 98 - editor/src/assets/javascript.svg | 1 - editor/src/assets/tauri.svg | 6 - editor/src/index.html | 93 - editor/src/main.js | 207 -- editor/src/style.css | 272 --- examples/story-example.cuentitos | 46 +- palabritas-common/Cargo.toml | 11 - palabritas-common/src/content.rs | 73 - palabritas-common/src/file.rs | 8 - palabritas-common/src/lib.rs | 32 - palabritas-common/src/modifier.rs | 8 - palabritas-common/src/probability.rs | 49 - palabritas-common/src/variable.rs | 73 - palabritas-compiler/.DS_Store | Bin 6148 -> 0 bytes palabritas-compiler/Cargo.toml | 17 - palabritas-compiler/fixtures/.DS_Store | Bin 6148 -> 0 bytes palabritas-compiler/fixtures/cuentitos.toml | 8 - palabritas-compiler/fixtures/en_export.csv | 1 - .../fixtures/events/01-basic.event | 2 - .../fixtures/events/02-choices.event | 4 - .../fixtures/events/03-results.event | 8 - .../fixtures/events/04-requirements.event | 21 - .../fixtures/events/05-modifiers.event | 15 - .../fixtures/events/06-settings.event | 4 - palabritas-compiler/fixtures/items/.DS_Store | Bin 6148 -> 0 bytes .../fixtures/items/00-moon-wolf.item | 2 - .../fixtures/items/01-mushroom.item | 4 - .../fixtures/items/02-dirt.item | 3 - palabritas-compiler/fixtures/locales/es.csv | 4 - palabritas-compiler/src/lib.rs | 53 - {palabritas-parser => palabritas}/Cargo.toml | 4 +- {palabritas-parser => palabritas}/src/lib.rs | 522 ++-- .../src/palabritas.pest | 21 +- runtime-c/Cargo.toml | 19 - runtime-c/src/lib.rs | 369 --- runtime/Cargo.toml | 2 +- runtime/src/game_state.rs | 16 - runtime/src/lib.rs | 15 +- runtime/src/runtime.rs | 2117 +++-------------- runtime/src/runtime_datatypes.rs | 84 - runtime/src/runtime_state.rs | 15 - 114 files changed, 922 insertions(+), 6635 deletions(-) delete mode 100755 bindings/c/build.sh delete mode 100755 bindings/c/cuentitos delete mode 100644 bindings/c/cuentitos.cpp delete mode 100644 bindings/c/cuentitos.hpp create mode 100644 cli/build/cuentitos.db delete mode 100644 common/examples/serialization.rs delete mode 100644 common/fixtures/cuentitos.toml delete mode 100644 common/fixtures/database.mp delete mode 100644 common/fixtures/events/simple.mp create mode 100644 common/src/block.rs rename {palabritas-common => common}/src/condition.rs (97%) delete mode 100644 common/src/config.rs rename {palabritas-common => common}/src/divert.rs (100%) delete mode 100644 common/src/event.rs delete mode 100644 common/src/event_choice.rs delete mode 100644 common/src/event_requirement.rs delete mode 100644 common/src/event_result.rs rename {palabritas-common => common}/src/frequency.rs (73%) delete mode 100644 common/src/item.rs rename {palabritas-common => common}/src/knot.rs (74%) rename {palabritas-common => common}/src/requirement.rs (100%) rename {palabritas-common => common}/src/stitch.rs (75%) delete mode 100644 common/src/test_utils.rs delete mode 100644 compiler/.DS_Store delete mode 100644 compiler/fixtures/.DS_Store delete mode 100644 compiler/fixtures/items/.DS_Store delete mode 100644 compiler/src/i18n.rs delete mode 100644 compiler/src/parsable.rs delete mode 100644 compiler/src/parser.rs delete mode 100644 compiler/src/parsers/event.rs delete mode 100644 compiler/src/parsers/event_requirement.rs delete mode 100644 compiler/src/parsers/item.rs delete mode 100644 compiler/src/parsers/mod.rs delete mode 100644 compiler/src/parsers/modifier.rs create mode 100644 definitions/cuentitos.md delete mode 100644 editor/.gitignore delete mode 100644 editor/.vscode/extensions.json delete mode 100644 editor/README.md delete mode 100644 editor/src-tauri/.gitignore delete mode 100644 editor/src-tauri/Cargo.toml delete mode 100644 editor/src-tauri/build.rs delete mode 100644 editor/src-tauri/icons/128x128.png delete mode 100644 editor/src-tauri/icons/128x128@2x.png delete mode 100644 editor/src-tauri/icons/32x32.png delete mode 100644 editor/src-tauri/icons/Square107x107Logo.png delete mode 100644 editor/src-tauri/icons/Square142x142Logo.png delete mode 100644 editor/src-tauri/icons/Square150x150Logo.png delete mode 100644 editor/src-tauri/icons/Square284x284Logo.png delete mode 100644 editor/src-tauri/icons/Square30x30Logo.png delete mode 100644 editor/src-tauri/icons/Square310x310Logo.png delete mode 100644 editor/src-tauri/icons/Square44x44Logo.png delete mode 100644 editor/src-tauri/icons/Square71x71Logo.png delete mode 100644 editor/src-tauri/icons/Square89x89Logo.png delete mode 100644 editor/src-tauri/icons/StoreLogo.png delete mode 100644 editor/src-tauri/icons/icon.icns delete mode 100644 editor/src-tauri/icons/icon.ico delete mode 100644 editor/src-tauri/icons/icon.png delete mode 100644 editor/src-tauri/src/main.rs delete mode 100644 editor/src-tauri/tauri.conf.json delete mode 100644 editor/src/assets/javascript.svg delete mode 100644 editor/src/assets/tauri.svg delete mode 100644 editor/src/index.html delete mode 100644 editor/src/main.js delete mode 100644 editor/src/style.css delete mode 100644 palabritas-common/Cargo.toml delete mode 100644 palabritas-common/src/content.rs delete mode 100644 palabritas-common/src/file.rs delete mode 100644 palabritas-common/src/lib.rs delete mode 100644 palabritas-common/src/modifier.rs delete mode 100644 palabritas-common/src/probability.rs delete mode 100644 palabritas-common/src/variable.rs delete mode 100644 palabritas-compiler/.DS_Store delete mode 100644 palabritas-compiler/Cargo.toml delete mode 100644 palabritas-compiler/fixtures/.DS_Store delete mode 100644 palabritas-compiler/fixtures/cuentitos.toml delete mode 100644 palabritas-compiler/fixtures/en_export.csv delete mode 100644 palabritas-compiler/fixtures/events/01-basic.event delete mode 100644 palabritas-compiler/fixtures/events/02-choices.event delete mode 100644 palabritas-compiler/fixtures/events/03-results.event delete mode 100644 palabritas-compiler/fixtures/events/04-requirements.event delete mode 100644 palabritas-compiler/fixtures/events/05-modifiers.event delete mode 100644 palabritas-compiler/fixtures/events/06-settings.event delete mode 100644 palabritas-compiler/fixtures/items/.DS_Store delete mode 100644 palabritas-compiler/fixtures/items/00-moon-wolf.item delete mode 100644 palabritas-compiler/fixtures/items/01-mushroom.item delete mode 100644 palabritas-compiler/fixtures/items/02-dirt.item delete mode 100644 palabritas-compiler/fixtures/locales/es.csv delete mode 100644 palabritas-compiler/src/lib.rs rename {palabritas-parser => palabritas}/Cargo.toml (62%) rename {palabritas-parser => palabritas}/src/lib.rs (70%) rename {palabritas-parser => palabritas}/src/palabritas.pest (72%) delete mode 100644 runtime-c/Cargo.toml delete mode 100644 runtime-c/src/lib.rs delete mode 100644 runtime/src/game_state.rs delete mode 100644 runtime/src/runtime_datatypes.rs delete mode 100644 runtime/src/runtime_state.rs diff --git a/.gitignore b/.gitignore index 088ba6b..a3ac52b 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,6 @@ Cargo.lock # These are backup files generated by rustfmt **/*.rs.bk + +.DS_Store +**/*.db \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index 9c39924..de5c059 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,13 +1,9 @@ [workspace] resolver = "2" members = [ - "common", - "compiler", "runtime", - "runtime-c", - "palabritas-parser", - "palabritas-common", - "palabritas-compiler", + "palabritas", + "compiler", + "common", "cli", - "editor/src-tauri" ] diff --git a/bindings/c/build.sh b/bindings/c/build.sh deleted file mode 100755 index bde8f2f..0000000 --- a/bindings/c/build.sh +++ /dev/null @@ -1,2 +0,0 @@ -cbindgen ../../runtime-c/ -o cuentitos.hpp -g++ -std=c++17 cuentitos.cpp "../../target/debug/libcuentitos_runtime_c.a" -o cuentitos diff --git a/bindings/c/cuentitos b/bindings/c/cuentitos deleted file mode 100755 index c306e1feea255db6afee5d011a0ee7fda98d0196..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7501910 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 )rW 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�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 z ztPz=}IGNXx;Tt2j6_Z&ZGL3OEZy<9PnX@sOMeGd)wM-$^xh zOsAUL-c2<_lh{2${U^X#a2A{g=fMX2GmM{_z$X0EPI^1(Do&Q~I<=n)cNmA3`sron zT@Iz1NiW;;E?;;2)Jgds{InL^3$eXW+rDRq@iVc#A+CPwk=cjLzL?CQ$kfNlY(Qo| zGW%mP|0FVXaWb2bxgD9?V=^y`Os$rw)qbkOPxbhz0YBY}*;jc=t0jvTW!D>+TZN!hQt736--zw|x7KxKvZ?n$y z-4=_J+vulR2X2$RHu_!SXP2z0wo`Vq{$96pmDM8o?Ue1*GDn!}=~!hwDd`L`8AXeP(DEU zD#}-pUfq?q^PStw?CIOg9q-;|ZVTVW9`{x3abLwA_f_n1UuA}BkjtlBRwOT+&AY9D zJ~`5P`I>#Zf0F6)Z;;<^AYbjz z+V8QFpIgPV8L*O`yUm<#LQl#X^Boz#Ars2Qra)JoYfHfTYw6eO8J9HJ;~>d*Z4FqD zOM0D7Yq*WLjQiFvGcGEpo+a`(opJJzV4ix< zQ@80V?jiN7&)#;NGaE55;F?Z3%mg^IDa2>nH1DOd_tf|cMxXP#>-9C+Z@1J85d z95@fogA3pSDE7E6<2|f7IF(|gW0RWiaQt>Uf%(Oi>|NVyC3WpP=eJhJZ&CCl;)<-41Os7>)r!xFjzKq{8s6(p!E%DnAQ_lJAa`9V$`xM3bEi2A% zMcQux{Fa5^GVz<4VC{b`f&CKr$BTY1m^XNXPBA%Qr}G99`nKyYQR2f-x9=GjBcDmjBH0+aP*|dCqUxYyE%H_vccd{5Zee zwAcErr2BPRK6Ucrx7=m?Hi>Ox@)tS3z40xR)82lJjiF5LlNIN;v^c+IX}@LSw>11V zbv&=Q5WnriZ=={dg8mV392^H{!C5eodhEh)sa&UWT?f{I^C5=76WiM4Z;9XbB%SlyUy9#6+$S;4Z;8P?^&6@@r|eVS9pQZL1o|%Z8_|-sa!DG` z6W_q9F@NQHJPkwlK`Sho^XFVQV$E z)Ev*-b#^cBtG&Fh_VT{kYwmJ;%$+MeW_Gg2+_A=EhH8-;;u+jW`BBP`Qoe%n6{J^E z{te2XqWq62|2pMQCzw0mOfa+GN-%f4onVHlkQ<@=e#(ziew^~9lrJT{jPlP@-k|)m zlz)!$$0+|I<+~{V66MR08>9T~l%J&hB;|`JUqpKG@w}Z6QuZKa@84@~JA|$;QT8Fq zKAgbX1?5YSo1ol~!wvKBeO!;Arym>x2fzt%5LEtS&UfqEXtB8; zU(4FWE#!-T!*Gy6S_V92@LpDD2DupHEx@lHgZV^u!RAVhlQ?h3b#k+@OQ*~F#dKLV zec{h(_s`}<5_ejm(x33YewOPuX-nWD$oX=v0y$UXZ%BJHkKZleyJ4=qf0L)qo-52S zMjKdL;9j8xwqb|lV=EjK zoV)_9$?=^FTk=TJU2kx;gS`tfc3N-jI-=*Q(Wkzg)8`=&D3# z4LE+Ub(54IL+7~GIdQM`AxRsuuftRSk{20A?+|*&meJc{xs5wRLvc%=;Njk)N1dzSaJ$y{9(okFUh>ni(RZ&kD(|*#{LrI$@ZW3w zT+%u{Lm6ArqU;b0hU^U;-x&I~a3UhAKwd^;a3x-lxuAbLt^Y zam_gl15fGa*lXlsyIO1Ly+^gdzn~399NtH_z`L5`tt+t zox^)S`NK~!rZ{NbDSXu8qdLt|>p|+Edjovc!RxP7<{;9n1IQk|8(LM2tWu9s81@p-X!h3-G7sc`3 zsd*ng2=AB5TI0oeuZ8y_Yzx49C%i8_#W$l{_-1qq=bT~3C^n6Pli(z{2rhyFuo%8e z!E&$+EG4}HECVZr_k4Rj0Sr};rg-N!L24Y{R~fH;&5j?`*(unf`f#7{ovfephS=UZ z@-swNrPigsb8`4jG)|yPJ?GWr*FVKL@E+?e`t?vQzRB0zEZk%LQqugI?|ka+hnL)C zcxi#}c68OEvjJSZ$NE<(pMy@H))~FW8j!RM&36lY`_P+#-kfFhcEEEJ`kDpN-Mk#% zt1jUCo76Mp<^Cygd^c&neZqJ01$-YTj!@^Pq+pX5uAAVx^QpXPFI=ahIkb;JD}Q77 z@!S0UO3%N^{`zn89iF_)6OE5jFIh8CdxGWsv+NtJZHG7mIr~ehPbghSpTHSVp?b;( zzs=m`Ugj@{*%yT1ibyXaUFIoeoLj2>bZUk1yTeQTH2NWH8>eqXM!%^1l0lvy5c$mzqtN!#4_6r1iS5zkn4j)P=2>K(jmc~hnZ-DnL&!Xb%yTiB%SC1( zPUb;mo=4{Sn2c9s=C#cHe%ntA`#D!;Kj+HqH+LR&vj@@59z-{L5Zz{|0=vtpe>qqM zR)IBO4OoPK{L=4$rT8hG^mNk2PX+9a%F=!!e*6AXKh@)>Wc*Zb`)OdUZcmw%&&E$L z7qADBv#!Ghwx2$58^1Mnz^ePR2xL8ky;s%uhvTDo*A#WZp&Q z-I&ZNk(tyoliE*H_-PhD&EcohF7_b0*n{X|52A~`b=aLl{d2%vFc%Df0k8!B5uS@)MBfSW%7;BaNqNuyG;Cam&=S~+J1V-@zVn3qpj>g#P%Do{RV6o zeS7kar^WV(xcaR`<|brripe}7GUIVFoaL3g8=2iPnIj@I7ALa?8D>4)c`=zfkr~x8 zquNhn_-PzJP2i_3_-QMC+K!)gx!7BWKRo!w1Ezo}U>cYPmf@HDF+0XnYnWUYQBNOO z0{X!+Fc(yP+ZN)g6|p&msTJ0rd)%d35Pu$9TkJvOv;xIUCB)%FVHmxNlD<=kRl(-5k|96|e0?w_h;=1DB zZM)_C;c6!~-D>Q7l-QJehRTqymDrT$q7uDL=xs%B9eM+lZ$fVo7(hd zOZN0?y{9sbD;&M~$k$11iry;pHlw!+z4hqLrhGGcbHHrmL~lVR-@$O5G6%6mGHD4*KRi+qi*NLFfCgd+w9b1o6jzZPtnt&^{6uvv>x{kqZU1CY|}=5 zH#U^sZ~dM0tD`Hd@EC21_hzWc|II&uQe`R%I*BMaGRyMy(>0u zRdEV>0$Ptc6T#tjtMLKtRPk3#emOSu-e+Zt&)e`ryXK+qKI=M3Yt`JgQ}0$dXj_JZ z0Ngg9s}!9TVE=vA6;i$#oh@4Dz^@y$$GXUPf;aPOH&ZBZ%&r<+#1@ zOoU%i&rmh@uZiO}SC3og?_=DWWsh64iBD_Y7sjVG*j5eKxp3VG*TdIxF2c1|s0uqO zv8fWQ1#7`3unC-p+g3RCFgEQ36G0DS)j8tVL~vf_A}-flU(VUQ#I%ZQ=H;T!TttS^ zg6%3k&9>vyAEd;^r=`NX`u>;r^pi_?N9VlOspb?N-ZvXxb9i4Q-;2Ge_gOE=yR8x* zRcVgW?z4_dT7~Al3LjL!PvtWFWWjq5x;)f91x&xs`nHrWLua|xnQ@=hB56gM_bhlX zM{f~&%a+mWgYR_oWeB1>V>#Y0JgfK9!n=?A`{Q`e(7cxl@5BodpDxF{AKQHJo&oQE zc+ZCS9C%N|j#O+)1v9}+Fc-`PqwwAa-zo6j4W@!A@ZApYsbGijo}zhA;p|?AcR9P) z;eDgA9@}MIP{pS_$0|PUl{v;u`Z+II!Z*4)9KM-5?Q`a#(v1X%?{4z@v7@%qxujjB(j+ZK^X-N2 zO!TIpH)9#SlgvL2qi;kI-6PA*LtS`=?{6OAUW*o8| z6QCE)Cqea&r=QXB>2>qOrwz1^TE=&^jPo*|b=x`sg5VIDerrZa{_PWoWPZ)+r3Z6r|XO{@y%RfEbe*}nU%<_jLH05 zWM<=J-a;lBndF$vk3?oFPUdZ7)*!PcCi6p)nbb0qMRwdZRYW{dL_EQMjQ3WsCbfb! zsTJ&@Sizn)?DkWCKNtW5U@=$>*5IEYeyRuS@zVn1=LN>kDn6C9bnPeB(m%$1&-0TH zKRvv{jQDIn9d!H@rF_;ii&hliK=X`J~E&Qpqv+w&c1j-N&; zKTdr5r2u>XJna1o==k&!BOtbq#MSR1WL`w(#hA=TMP@io=3!*Ikm-ua+#oVTaWaRI zc?p@9VlvxAW>CuvYCjF(r(ygwf}af5G@oTn^EnTD|2*tz!|sW1^9Rm?v*0{94>sVR zCj8VSh@aX?Zzo;a(~;HeY14ixTy6ZrQa=Up(+2z$wEgtP8vWdLQoaX2u~wS=9&&X00WcuS|SZhtTkYUZ%k(m;izBn1yW|Pk%!y2z6 z^Ba-r)iS->Pks2QA3qJ?r!ezE?=UYk&AiaN3G8XZ?q2HO3l4w-;1D+Ig|q zh&_cmUB#t|#HBsbM-q=U?y}cR`-!`1iN^-Oeqt*X=W*8L5Z41voX7RB6X#_c-~3DB zG42)WL*7|4?L}`Lddtu&Yo;BPuS0Jq*nymi^RTCf>rN-m#)ZZkgZ=xs#aSu^cNZv%Q4h)ZS7 zw3hM>=&b{5kyG}{H^W@lIrj2<89~S1>x^5qUg0BDLz(l|Om`Vag)hyC&FS^Vqok>r zbb|YL@*bN5yTQ&8-pwui5017lruncQ(|nk73`QC2@I0NAa|~K^Ov?YX%)5O!MU>aVfe+wJx>qLhEwhV!VMa6}ya+KZ_lsRn`ZpFX8<^?6Kq0u_|jp z^&R$gWH?~W4Dy~I3S2xc9Y0E2eunooI_Jzur|B|@4v>jX8 z;CJ*CZQ>c$O|w`x&0@a*_npUvdC)^0J-?*S1Jl6{_?(2-UT_}l1AF1M0r@^KDE#iy z{O;nc0(2;T<*WjS-;Wp%VC#8v4z*c~S93MD5ANRP{N{v;OVJb5dek?M4!66FPdVH+ zk>7?5zAEc6@p%h=Xw^LUtE?lE)~va0rQXeO(6S5%18_Tlt`>B*gSl1K7o~h7I-9i4 z{3@$j(&{v~1901f-a7O)E~9r4PP@_9BZ%&v<+#1@tbz{HlLrMeSjz!mdi`)8Kiig*8)nE`jGxZ0NwA4zL&O1&6_5um@hJ z;CBFA00+SV_{|}I5cCPp+ceMHI7gQNjoZ3`}5NNVr!2a1O7{vpTsti$yz`HR>w&-|ZokcnTiG%pLx|4CYg<~obI zXTVA3GMqHRbp~~wM`skBi}zc9Ddp49nXYw4@3(3tEm3pb2-oT8O+;_nGI}%N*o)p2 zLHwDr9M>0~wfj-wdOm@(I1^&=XoKe3CtPzDW*paY4v9S9k%hgS!?~CFXL!zPVXYLN zQ{Xv~`+Km(1EzwhU^bWy4#8`OjzwL3Gv2~=5B#=*{a_n71h#`}ycYYdiQpWu=m>42 zgRxu(W4cjdicw+;855smKi7m4i*7RJzPcoKnDuc+a3a6KTdVqlB(EM5k5hh<7|ST) zyg$aIr;6-x>Z6;CfcRyCn347*>#E7mBJ(3;eiV~Yz8jB|c@CM^k$F8PbA#v^i<5aC znKzJmBPO#=WJa~jDEp~pt#oW3G1fj}tbLsK$F~5l@GXFu$a#N>W@r|>r>OrFI1kQ) zi{K*Ij(8 z-{8RZwc7R{ZZs@(ght}(_YN}aky#&;`JKoN$I0-mLh=S=HpFD6L}n;X=3QhqA+sqa z^Ba*F)G~wGPeb@=7(b2RCpUgtiJy}3)0#vxG=Sax)W07b0*Am6a0KkcKV$f*7wpAP z^`zI6E`BPwk~8VFpWIg(<=pqYm^~LiJ+X@4{ImV^6~|9O$~WPs8?gQ0Dt>e0HoHB2 zkY@CV?E`W3y9t^5k-0x6^L>%&kCWMr%pqhB#bllrnZ7ugJY*h3=E0cEGa}QgWqP%r z`tVafej30}ckq44oqQj17vG26y~+%=V0Sb1ZwA}IHn0Qi0DJJyIDYB}`|(o==_RDA zSd{&S<=Rh$>y5SC_dGvMGPm&-b3l{!+{O;aPi2&^z)wf_@f#c1`Ldpu*|XlbUu^G* ztKVbDyu$S>F`3VZOn02j6Udlcn=zSEk?D++c@mk|xPC1rb3kM|v`mNgQzw4v#!o%? z>DWqsV`C-1v9Xfh*jUM4V(hM@{*_=2SOeC9bzmRAy;hpeeJhB?GQf1~P%$3grDk!Rq3u4xb+)tieS;DH3Nb1745cCO ztd)A`pDWRuhF)1K^-#VNy@{X)IThpa9cK#HiCV9Vvnx}zUcT!bcJxMx@0_*LMD$jn zcZ!%))=FoI5v$NU2hJj=?3MHIxt?=kQmz-BnDlz%6-VzB^3GbR7roW!?L)7um5x%r z8oguSD00ePzNehvdd!JQ8COg?G3idDUF#KILL-zpZ>{vh#;@OvaT8lB^%?(8`gApG zr8(lWX4cT8j$kF2@+|*@sn0UDiQDg)f^EtsId4GxEc<`f8XtW~$ED~~^Xx4$fz?%QnfC1&VbhCUT0*XOO0dG$Wo%P|u1s|1faRaJ3Z;AxI(xOwiqBhnB(2@P4wo{v=|yil zdV7}B`)pn~7k&AH=+1xh!njoY#qU8KUCuE+qftm0SB4tPfMdx`Ncv@tdB;P5-YUGtlw`HkD#srYqqc7WEU=1#RP z_Zp)IU5dkD^2f2G_mHLDok4ujsJZAnWW6Q*UxVhik-9g)LvR@${O}t^*C;wC!2Uzl z>r%cBo%LGhz#;2jC9O*H>xbWZ^j4v_ZW+BEc%4Px9PK zvN(Qoj@o;A=MUN6sJ@(Hk6+V?PjhcMe@|~2ww1zn4tyuV_waVsOt)L1DeRcUrb%!f zoCm$|?S=1Z`1QkUJy--bfc0Pvat&au@V!UJDtmT^YACDtmi>GV--*U;*uF-_mg#nU zTA9TEPRvs3aKBn}|LBr+H1yVLz3Tj2hx;VsLk{=#LIH_I4Q%joTe z^EULg3!=MyIqok!FZUARKArn##Brahxi59NSLf!M(--4D1KZN!J{9i!n1jlO`y9A$ z#f}ziY5_aI4zM5W2kYQE7mgdjVz3Ep1T)BQ0yBkszvkZ0nYolv+$XSB=5U{24At7d z5u(n^bU5#I<{4LN&g+(Nj=oH-Po16XaPBdB(WjpGZ1QulrS<{qjP!k}_$N*CQ}=-N zwxp$K&eN!W3f!bF!%g%EeH*%b=*$P}AF$q#@`>p5YMl)aSU-`p1-E)tghk2%@`WInFOUE4P_?h9=#7bK;K0stZT#=e?JCM&@agUS4_L^WI6U zs`mCyVbf$GbBuh)RrL&Or`zc7w^^YgYzSaa04xPd!D_G?48m`Pj#v4;?@$TX)$m*j z)`4YU5G)7Pm@f9a5o5E&s~O~tG7cJLTon8cfBbfrjGNVOM1M!Goo+J%)a$%)bMZ~q zwyxD?r1&BAj`~cZj>DQL-|`*K@8fsRjGljb6_l^SPsjH2jWT;7Pw%(=^uw*jXTs9lX(f5w~=`}CQ~Rf9a^SC`>7K@b>pWV{B$ar?-rB!ZZVnP z*GT3&eeABL{?%X|SO+$M4d595$-+;Q;3R&^COw;U@srv^sQu*5G%{iXJgT-Jm zSPGVc6Zj_^Kh1)(_$f+!79~CtKdJ8&wVw(%8}~2uQvg3bmt;l)wx7P{_$d*+Dfp=n z+rN~=?`eF@ZclqQ8$S`-o8#)Y51EIMc_=0`ATmvHGW(Hv7@3D-GXE$tjd3!!BXby; z!!encL?)y=K^(pcq{dT$OV$Sxsebw&#{rv4)WuNU)#X7nCPudR2<4>)>%D3WQ z+-Mx3{B#lDD9e2*?^;ivo_d168OFL`FW7hDPk&q7k6g-$Jl6)wr&BJS>rSu}?56ym z`nI?SxirdeqI@RhGP!O8+rW0p|EX__JCMtuyqt}ZO}T8Yo55zV<;0)p>|~z??{9cb+=e!~GHCn_trBdbD$Y zKW(|g&DxONwx>HtDD80=__fL-pLJA#Ut4c*H)}gSt&Oa1W_pJ)y+jq_WD_FFlA>%|Y%_|4SkdX!;rDf&yn3a|pK0c*e_{FaA&DSj)(Z;Rj} z7zLxC2RRRN;>L;U7NPbz-9VXyUp^x>t{ zr!3BIH|@3lN774lS{ZdJ!EdF@_$?dTGURWG-yZ$YIluh^8$-F=CqK?_9dUlk*M7^z zZyop{2fr2Sb3M|rHx2!1U?!Le`amC8g5TsUhjRQ>j-Lj=0dNo;1c$&OQ2gd%UTyS* z{mh@*X*{viZ(;ZO=X&VpU7hP8ej7p0822*^t-lxl_^6LR&Tp?3TE`_lN2mFzQ;zfx z%lK^$+a~32=KSaMhda;t?d#&VbncT8=eL$4_PHKBr~KyR`R95_+P)=e*zTO`@!$%5 zt_Nw64D3tC-!1rW{zU9tj|u8Ij$Py66gUMgfD2$5nD6xO*APc?T|~MMECKys8JG)- z&%ekTPt+BAPkY_gKSX#JM+>YoUVMYS>RgXR_E*uT+u!84jYtah<-4#hWF5IkN}(n1 zWc5vs(tWjYjC}R(MVIRT@1!oZ+`ASVMrk9Xw2`syyj>5mm+RpoGy8Cnx#LTmX>~Nw z-1!*mGf%KS^CW9CN0WMb6Y3L9UMScT+w{ z`5@){Dc?`}0OeVK`lDxR4IINb0(PzBd@ z=&1x7z$&m2tOk|;Sf@;MTYoM-Ox$aR6Bz^HM|tmxulM6?nd|=;`QqC!X&Iztz*7eA zW&3P3_9&&s#!_d}+}0lC!>Q;>qiqobyN+CA_(}WJ+tD=PI>eg5<6s!P=5p8X_J;Nt zNB)a@L_cLt&mOR*TQkkj6m#Q~kLOKy-eFBIx>(!wo6!Y7d-h#^i78#KBmcHkM~$On zv4D9)bWEaSLhBg6(o*NNO$Ut@&Z;`*vSm-WOHZMm7gs;|I~9Zs?q+u^c;q(|E9bQKFIUG#M= zF6&V#(-L2X?-V*+)>qFf!yKF{!!y|GvTCGEYkV2bZs~Seht4bG(PbD{x4W!+rA&K# z8P2Qeaao^{^p5!S%UNf4S)Y>hPJGa7=gGMG4oT~dPfIX9E@?gSX&$3U(sVi7ZuXJ) zyR1Ue9epuBuvRqSvOaoVo>O1;=?}Rq-+6gXy*O)c#AWT2ygJ6cZu-L1zvAzw^y5wZ z4fBrw7Jok@#`r7y{KIte)5#wpe}w!B@+-(sBVW!p^pWo)f0+DX@+--&BtM7r3EHh6 zoCR~i1u!4X`6=^;%-x;ZVnoJVe9JyqQA1sxvw?8 z{J&VMqz<8a{sKS6mLqoF(QA!l;?A%q`9yMpoJW~_qWA&c@%;ss)1UnrWzP)Yf3czP zdVc%CWxaI>nZW`pJfzbZzeI*<1NW0YO!|mUKeoe&jJm8FC4H3iF`XXHG9u$HYn7yr z>$ELfjmU({dY`oLgl^xPbBv@b>~k`I%5$#f@5GKUYo=09@+a=4Zuy^LOyPPjlGy&8 z2ll!CLFAMy>GrvnP0Y9J|8w}iNdNES|6={WpZ`nr|GDs!4L<>J@<)s*zyQ}0>mT6^ z&Ng@}8qQPSjhy7V{aczNpHcoGbrRc-Tx)z9Kk-ia#oib4j1A(mApA9^vtKctcN+C@ zZ#2RI{?ARf9$4r4MN;7^Ba$!I<(%hFUn1+(&FQQWlv~qHT(_jFu~Sl^>%F6^T%VLW zhVrqi?@9jNu4YiKSH@NfQzPQFSh2PTJ;_%S>8jw}BGcKxnD}8|X8d3arVx0xMda zZe5Fyzj0)baml}tAEZ6a7nsuv1?J3RfjJxHuhwtQ)cMWndcPTI@SC9t>O79m#=$9Y z3Y-Jyz+SKy8~_L2usJ?LU)uj<-e1YHk%PZWXb&kobERMj*Wxc1?VyErQL5WT0oSd% zT^zm9c=HRC)$QV!=uz#$b&Js=I;&_G6C17Y*H4u4gx1*e;5(tCBiYQWvrBB)_rHpxedKG~>bec9BiHD8HHWGVFHI$T^^) zdddZn_k5M_Z*DfjzOUNt;?XqYZ>5b7XndT^wC)w+ol-snPACC)O@r=Y1OLp~^tdopFWm)~tE$ zBY%qgsaXD{lHa8B`^ldre>RrCO7a_Z{s8%Nyb7t&Db9($nGcs|b z8S+zSA3pPe`CvX+1Qvl_&!@>^s1k4t{3&aWoFjr_J){t?M9(fKvx zx0Bx<%l}KsFOF*$>?yI^Hs6C~>UNPIYZtHmC%os=E_}2LKkXuuc2OE@7mxgc{2bav zG3}y+c2P>3DB~~aGiMro=5&*fcbSivjyg}^vk7n(oCW8>d9V-c0|&vupXsrJoL%;< zy!SundgkY6qiO2>&6q6t&1h>Vjd6dv*y_4GoL*qDHg1(kACN+Ns-4c+h1PTme?c$f z1Fw>`u3%fq3`IqA-Jr(~hvXMlm zjd-P9n2|KjaPgb>B*#LKB)QUuCw*-uCoD`5e=+69Vwzs z(qAR<&W^OZ%xRD7#5C`!6YE^RJK**j)1K8QaciW- zWu0k;*Omh71@7;1d1=G8JY$95eIw*Cb}-KT5B?(PmOf`&;vdm}#A7^&ei;)-TG8El zq25gNR=%*p_``j!XZ{tv(w{`Aqx3J)M7KGUR%p(6-R5)(=Ln^`%_PR#kxsbnEU?tP z17|fAOFQ$`###?90%#B&fCOg6UBHbd>iDs4yj13N&O0}ar2`-mGnUgNX$ zO=;4e29nrkMZe|K&sat58T(J#NT`BmESG1Des_{*Ey~=X8mn#IV;mbHu97in8+FL_ z@XS+>Y?t-V=v8yo{oHGEFTV1a;nVH{+Hy@2dMTkOI|v8 z>2_X~Ir1{d%dqqAk-UJNr``nt+ItbtJkS0t&;G2(W6mUc%xNz+rg%)X{xE<~ z2Jp!+I1G-0qhQIAJjH7ty!L5c?^$V_l6$1NY+e`1i@K~Af~oHx^IZOZB)G;1_u_-@ zI9_|?8h_9qNDR;wy!`#?9(c`gSzVs>?>oGP-8u%KuQ)#FIc?JJUhtgW^MdCo{(iyV z)BOG0o)-cMr(f{2?l~SzI6e1yhr2a!w}$tW<}M?~-9y4%2HepPoymYZ`kiQhjJpqO z?q2Y0djEKE)2qilcfT*(mB8H#o`2__-`;cF^B1J2zk1A5{^|>j38zaMfFL__*!=?_#K>tU@p^@u&!kR~>{jPL#- z+A3}S1&{l5$V1yA&AHE6d9FPLR;0siO!IyaIo=nXGwL>yvh0}Z{~~j?{)V5gr;pQqB4zZ?<@{B-tks)W7$<`3-#_8G;{9a$#IC_BUOnMSf4>WElIa6C zGgsnTY1`>q53c8W1GoWngObl2#5T$vAH4ci-YqwYZS;db*vmN#k{&-VdsUdeqO8E` z3f%ST_QTALmbz42?^?t2COU%X0D0$~r{{6fWL{V1XT74M6dj&VznbJuKA~dk5`4=$ zO749G*~LnDEY|PZk^Ox<@uw`tSZBMF2Z|E%0!4Wj_c;C!&E*EjQ_~o8_W1GjW&rd_t zg?@FLN9&_~&Cq{OqxZL@XD9#cJJp9TY1{7h&Q90!POYFHspPK$nFg*a3pgiZ^$8hA zp75-F|F|cWI;Kh;o5b(ZpC1pdegB*dN8)Tqv~B3Zh7f&v3igJxXcs*HQctP3Thi#O z?6H^Y@)_FpY$o^4!an*F{P5npiR~NVUFK{yGQM1W{o&!ZHSqNJ?n`I?TcusPdHWXA#0XXs<6=`$bDbLDCbM;|s# z|JdbOM_;w>{Ym@%i_pUhrwZi)ov1Go3>l zqpkDZu9_2@A^x1Dy~{H(Tf%eC zGcwcZG8xNT-NB9TpP&zaA(;OD_G9)l|AOaP`qMY}xYqKFujLun&%WvpbGW8YNc!NO z(TLw=I?wC{&p+!g7d-#c*6_dBIqfeny8;_tb*)4neTnpq_{co&x%ySr7X&WS7oan~ zFGxb4(#1Qj%X8(c(jPhRM|oFX$6TH8F7Gnwr_QyLi#&@{6WE3irSBCU_6iTWEvV<7 zb|B+t;emE(^T72P(j6Xt>|s8edPrZroA~bB{Vwv{4RgP<^=0(epX#E$sQx+{TuHmR zoOZLG@i=FG!ebcj#E;@@H5Sh#jrJpbw;GGnex&WF|7k~Ror!U97`{)yZ5P}ggIlLR zSMRoL@ssoJd>*df-V@5=U6&>4&+XX`w`z<+e|(60cMYn(U5()%;5xofSA811yhwc_ za4OH}4E&xL+`zk9-qGLQ(*>vdMUQZ*pR128qo+mmpyPP(O3MH0yfM%J;oT>(Qxfe| zaZ0;U+>oaFU-~;4Q$^?(R65UllH2{>DVIIII$M7y{{CbaepddLw&>@*8-nLB&-}Ub z=6EMddBrUpi<~zaZT%hlY@-3s>9h5hbe;8hRQr}TD?AA|J9yp{4{)ZCK1}hE?=nw# zuHwCV)w%a-h4524=MkG zr)`h&c`#P~qCThm&6J;}9Uo_`mUJ}vgp5_B{?hNAt^arzb-r*s;koSebddVubMd|E zr)Z1f2Z=$ZX@4`ULma>-DmIk9M`A?!ABD{>tAOV5MfWkUlz}m?59OEkMjbpBSxHF~bjJZhq^}$Y*S# z_$IcRk=TlPmEV>XnE#uxdN*Tr`khz17^}Npq<+Wn%`xyL@FnmS@D=c3@L}*V@UfG5 z#|Ay8T}O}Pb+8U3?I+}e%Yf#x2`-y7m-i$XZBiGWIoSgeCcc(&ez@Po8YE)|-ph*1 zKDowD^(?afLJU6LN4w;ioF?{`enMjE^SBIP&vxwD&b^6;UHf=15wAZ(U+!=jD&~G| z31+02b^@2TJ6sl0cE60}_nMK~1T$Q_*9!;fhKvL zqk}Gq-4&PrXPErd0-MXYn2WKU`P<3_bG9nMoT*NrUr8`scTm6E@eRKbx$L~LlZ@x)f5SK_DC49ndEaf|eaD&^b&&U` zih=0IoHqHI)Pw#hQt2|fh>e}TDa^GK|NH|oXY22xfBy^mcl|ycOrWn`P5hN$$h%y| z7{@&s?;i_hye~0V!Y}NYOZvG;z-|0tL|>B^=DJVT`tYaX4nMlwu61YY4-j7^*zfCr z8~rPI7qGX;BYg&QW!xu3zxM+7*nITV9>!sCb0lx`(SO+!@*c^1pocJI(nGtLn3MxwG}R(jU9^ctP&J65px&pNQbI5aUYKcX_UUUwnBi zcr|eW^{sRn2YEKO{NQTi5OZjD!+Hsrl?hW=2s zo0Iv*cemQ*q)gFua1$51+dkR{2N&8X9K3)nj{i5)4qcn`4S7e(+V#EIx0f|T5Aj0* z&-gi>11@7FwqD3Z>^|qkx;X`>nIAn(ykZIEA4a~M|1%{0N+VLC|392+L@N28@1BxQWB;$*3Gqz)VwqzVBd!C+>d4en6X8a=i zwAeqmM}`PikZtVW=?;OI*k>x7fkOjit7DElnc!vAGPz<{-S(*o&6DeA6L#t z{&<}j4~KuP>y(fFg*4_p(YL7Ymy52Ey4ZZDo<4MgBPX9Xgf zNn^9d7LBc7(~tA)Jz|^}SI>3xkJ(cRwtzvf6>J1${jlJp{7%^F*q+xcueCti56>U4 z&SbG4h-cR&=fJ0Wt@lV*Y3Y>jr@Y{R#zBokV83&J&e!Yadf>p$e43-R~d&hL|XtzSC#%%sdLWd!Fm&TCu%XPtYpZ+e{TxgX>0YbPxu-mVQ1m+HDKg-zTP~Fqd-s08P3v$nB{5{#LWt0O#!jw5_) zz3qQe`X&hIXyc&#TSJtaQ<7ULVFsq(Y5p$ytk25qPaECSQPInuMhEUp7!0L%pE zNzVauxXuUj!EA7WbU*0lIv30ZePFs?!#u*c#LIOi=_z0~m`LY4{?;&Xc`=pOCcl__PG$cG5&9oaxB1|Ch9A_9pWuydxqxo6J!5 z-DWuFZgYjKTlqGz4`q`YcPTsgF7A>Wlu^9;{2 zjwpWDqx${W`pGlAOMc0pJ+Bp-=%&rh@(wfXchs6c{f>HYJnkL!N|8A;x0<~^qT}g3 z`N@C$9ranKtk^eqz!F;za1N7tN3myEy`#n-r~hED;8+uXa90KgWpFX3_rOl-zH@5H z9@we4eY>-(d6(%uuu;GHF_-J+d#`a_{%QV{ALTr%$<^ofr6z5*$93;W|2KJnc~RCS z)VI4k&Yh2ZW@@$dw$7Jv<;>u<^6fU~f%1J_?%(B22X@Fg?d^=J_eyZX9KU6uSG-T_kpIwRN|nyA&No$drMlpt4)`(Q{qq z*iFA(>DYa(u}AAZGlgGDDAV3(|E8kiW|#3We1!3t%2#RE8($%9x`O^^0vksDmi_`9 z1xJ3(|IhP3IRAWJ{@LW++j!=-fuXs#>1V``@=e|IdGFjT=Kewyj6=UXZEgUs*d8~xPSxhs|A*I`>NJmQSPIYa=O~p>Mm@jso2U-Y>x~HWF6y@` z<{wt=uk%`-Wo(+kX7xO$=Gwm(?~eNoP4d-wN~Kz-+7s#UeuXir=W;^jSezM`c8C{j=tO3U#vEEf{@aU}6Iwu~nB9d03 zdC!LTO7xbXw_+K+E%05Bz6L>bH!R2dg};y5BlC~B+&@2#_sk`{r^0(ObDtOEJs;b0 z;XM=HTj727qn!KuQDT4WsKusQFbD?0Hn0txgy&iKo(C7f1#lj|qu>JQ5#Hm@SBjFR zc;|bG6o>cAjL&1cocpVOs{%e1*R>zDk`33Z%y-6~am6)z>pa|B^r+uUb+}$@{Ds4{ zm;7{W^gUuV3I{&?;@7DtyVD2Nb)L28}!ltAnq8UZA^CXH;Er#*_RzQ`GvALk6r zHJpKYyQ%bZ?$}20RW#L}3q>~h9c0!cvpy!XR%90AWTuhXfXs%NOp?ef#L2vi%qC2wp>N@P zoQX+Y4qn2Um>;+O_QOk!pGjTj;_7=7GWR2Me@tdjWM<=Jb|Z5LnL{y|e-fFgIGH?T z9z^EBn9R!}GpS`Jwcn=j+bn*Y!*6$7!kL(ta3pVNMFW7xBj;n25g;@mC6% z0#4ztG3k@QdHmLoTt9Ns-qi2xYQOP2yC3Ji^1eB*y@l7S z8Pqa^+HXVnZ5Y3e;J5cUBkA{?kz{d3(pk<(>cs92{LumSfIVOz*at4)uZc-JMm)KP zZ}zyJ!hfUS95@Cpfa9R*8#!BaG&wdOHj!-k-Xbm<-EWTJ=mWa3@E5mdTzjB6!-Y(ITEF>Wx^j&Y;#m?g2|hwON+mw0ZGxGjsAEDA1y zDpus|ghcF$I| zxE^urmN_{m#@%Ur$I(56e80rF^1UUxePVaEt$P67z3A{E(+Bo~%5L}>;JVMTn>o8d z$L<|QQ0o@1LOqljkQmpQfB3L*@>emw)R`=bC!g_8q^meL2RoX0Pv(QoU=#1noOb>P zeeJ|Un{+(1X?G}RLXVf^{QPzu=lYDRdH&9eb4PC>&P^m9x_e2Siw>XGQNZ~kMOugZ zMq>>+R4kiIelhoN`I@yy-f_dpd_PGWlQ_5aYnETqhV1Le$bM^Ph_*Jo|Kf4(_%|32 zqbq>U60q%SR+f|>K1+;TU{w>75w^*Sv z?pultrC=pk3D$%4U?V*K|Af79TwK+e|35HEfQ%87NyG%>Bw|VujI6~tW(ggVF=9ef z)>2DT)}o?C%l1WE>hg6lUy>aywbZ4z=wiw$Noh+6b*Vq<7pK^gEZee{TFg?*y3{gA zU1pfN)aBd7`^7B3_jB&KnSnUYd+vG8IrrQ=_-qCJU>n#9pA*Ev zZQ#_i@OqWz^{PFg31VZ_50-mGk3Af}!8nbrOL)zL*MqCz^;5Avu!?ihF{O2=z47hw zi(I1>9g4ds`3szX?x^`QY42L_L96Cq{-}9Q(wa4|tz2_6{%=X({{eXQaIJIbTtw%> zQBys$8`0UMbuJz?zb`uLG_M2j+JxRZ^fo5Yn+2aP^rj2q$Mi(JUb;7at?*jO`K#i1 z?R#`-oSXN*Wls>+0ubj$*2Usnd>F36wn}*JgXe5`cENKxJf~oX6Pui%8+3y?U=G*< zuU`1=0E@s*umgUZ@kuAxB0Re_&u+f0ioX=kjPJGEJnt}Wz;+k+SGd}WbKl;=e>=u) zDKO=mX{i@VmvN517OhW>P1>CAG&b3sw~^nCEu}}zgTh5Q{;AOXlpQs1m9#R=c?H*B z1~=sixaolN5p;E+vj;3cYThK}OVC-WbygfTb0y8EIq!h;QuO-JTarNUC}UOq=o=73 z_dudCt4qJJ`rph~gmO54ZXD-r%Q$a2N{oBp{W;IYwj4NbgYz-Qu&N7KOI<)6z>Z#Q z>IDbEL2w)#2ixH|AFg}AVz3wNfomW6y`Wz>zg%;E`JRxEGKzEg=Bmy4b;k49E-|k9 z{)Nr;9OIKOJK_3c%eY35U+YodT(!C0X0)S6-QUIJmx~RLn7^bg4`tz(Y|TsGBj(GJ z=FwbdbKM>|$x6UUBV0G2s}!9TVE-d#P|9bZGgIpvc*Ojnq@`%C8{s+=y(#F;NT4?W z$JOYo5kz-QBCap}=4!ogJ(tS2FH&RecEd8R=N>UrU-n<*`eKYbe>;1m+-`;%;JNYH zg2*sql_QK*R$)UW_EdtkU@h1LHi6yn+NfjPLf);Y%n%g0qh0?pn9gq_7ffa zH8HM-y5ar~zu!@Rh(!j8MO2K--W4NujC-|_%XO(Xp4d>vIUHt+nP#R3Q_UjvESmA? zzVa~TM~P`qm9S4{I{Rdn=$Q6u$GH=9Wj)=^tmKnXnifPC0AjY_Z7~>B1$xLUT%yjn2OlP0WboLIy?lG=^ z44eX|z$h36)A3Ihe#!(h@lz}5t)z>e9E|yPXg{6XXuNgTGC!TdPY3bSDa%hMZ9lbB zz7s#a^RZysR&3v@ZGUN_u~TdxiMzf(BC`#dZ84dxA~PH(Va2atIPnTKLBqaxEECvy;)hmm5G#&jLcDFj>crp ziA=AS>D7Mg!*BigZ2-UBb2|JmCom@*#-1R<%%ukW|X-wuZk?D?;If2Z}$h;hrc|>G7<7A#e<`raKiOJN8Oox`~ z(0=R0Z{7H<2fsbfSknuPH3b=K`tcgxnZWK+{80*4fE8dBSOsR|uk_#P7?!#IMPkAX z{O2Uy1Ezr4pbJ!OA93PPYAl8wNj3lWHDcJI+xb4m?Xehkn6{hPsGhv=u$32!m2NT~ z(&;L8^{ektGjAyEsKkIbTXCAq&z574n^>y?ET6LCw8EQ>P!-1&I`%%sakU-0?lw05 zC9x~#43!~o&(D^kJ40f?n=IWjKkG+F2D*ztKe8$YBvvZnxJc`E@cqhCt@~V_k!{)`#(>-B!K6S?_CzAH%KK(*oZm|I9PyWI?nt&G;PS=`(>e<91p9 z(25N$*wX@bfE{2z*bn;QIRM|KU<+6VmcqA({4y|0c)wore*K=1hcc=jGTxGF^PX({ z7xiu_?<+0d54zy}ul9tO@Q$7=t*4N2F0aiy|Iwp(&mliwcy}reE*B1(@JqAJv6Y@G z>5V$A89y|_OH%?~^5MOL>&ip7Pk6U<%u74lfbM|J`wDf=cO<<=^PUgy0rc0PzafGC zO872De~BRHC`rWorF-kY$aROxv7sW4_q<07WPe!s9+{fc?O16XqCTb`EDp|0-NLt> z)&@UB{=3Zk$o(6xz`kO6tK1T@O}R^`How{MhFQOTkjG8mtCO;Jp$4E5KH; z60Cs#5#r)Xa8$;vvUNSk-V+)jR#q_(`yo!)<5mU67q||2=7y*Km+I^0Qcvx;cZRjw zGS8EiwwgLorP>0uMoP5>=p5BL3qN9nrtNX8j~L~4ofs!SianzZ=GTOqQv6kB@e>+r zFx7LnL~~e%FG}F5Gyzv0>Owl#K84O%bdEQe4~fnqbQWu!6Ak7UB+aYqfQLFzj9xE# zixTK{!~FvK78&nYK=)#z@s3NsOk6|i*?|-_&Sh{eOc6j z4C+9}N#=Nc%<<9&%wx+OcFloKuG7?5c@5^}!b2v$@n~+m4Q868WoW)VTz3Y%WG3Ln3EuO2-L3H;d;``EXyY_RPp=gRZIhzuTe-{Ev z$G2*^-(SA{BG(t=-&t&m7MY=iLFQ!Jnd61$5_s;!h7RoM0DHk+a2Om0tKikI<6j4D zZ63!Z@aqN3!F;d^^nt1m$ah9lt#x?LQR3ek>W2S2{C-D&;CuZ3!|HdRW&K&h_w*cZ zwo$`%Es1}Rq?u{Kb-~ml%zbpOHg{f4n;>(#^^^~MuORK7j|bC?bwO5W>i9R?7!==( z5PwNqB6GU;Bl8q8PsL<@Br?NsG7lni0+|yrnde1jC{E_{$UKA0GclRdA~UFE21~5? zcc_H8u7tR*BzXPtb-|p+)&+MyzAm`^iFNGZh24!@egrR{I54TdVPyZn3nz$&l`tO0AlBK%W_pGv_}{FF(0Ch02v zy_WCdX+I@hYm6UR=BKVyGwsOQU}_g}2=(djZ9ipEJ_kP~Vf&5PextViy{$&B*xnO& zeJhdKjm++t%!fp#J5DAInLWttiOFmhna((wHOLeoQxKC`FESlkrbGLw6F+t1ryl&Y z6+dmmPdo6_uC>8X9(Lz){kdR1m=F3vKUji)>hV)KSdO1&iRWe|o|8FS)0mmT0cL<@_{T?li(j^$mA)y*MffWZECIb>8JG{MwvBkN zKP4954yBksXRo%&{vz|uA;zClSg#^;w1c$G%*76p7ap|o)Ew;q&xnh2w0n$x$seFi zmN{DIR%?#79o`mC5ihdefb_#XI=9=7Afe52x1 z#EYCe)Q7x1N85pJr^JhYZt0de+75I$i5EM;4rEn7op&>OIPSFLMb`iK+VSEZ<91tj zJM#7%Z6~@@B+lJq>6SU#CUm5ryBTakR&=Z9Hpk7j-K^nmv+cgcxY5?#h`c>V+l_9Q z*zL7+%N%VjI$Y?k18b30cJr=71IKl?-SjmAw%s=yo3w7>DpW(6C3CcUjj}ktVso?w z#vPr^ERa z=myi_yn=i;SSj4ct!J#DjN<-EBUEE^f2DCVcB^<7d!(N`)3MQtZS;D^i}9}Fo%M{B zT2G;j?b^I&7}wdnSCd~ayk{s5J}w;8Rj(pKkgYH_J_p8)7cT0MO=Dio*YtdhU{+a~(JK(zs{mp`$qd5`pS6;&Vdu5!f z7#m9Bc<&Cx;$8eEK2`CqtZ^(S-hKIsrSWbF_7zhPx~T`9QV*`u_24S29yDT80Q&-9 z3)lj7gWaGD-pAlS6PyM;U?%*hlkWlD)PoE8I_Ak|uSd$LdLZi=?Rv1*_#xM!;@xs9 z-mTq8d!S>VnU3{3-epeXLjAHa5Olh=PW63QyH2b#+R>@nf=u#rq)x0;{JbL1OFup< zvg?GEJ|yWromPZTd~oJZz*#GGqJ(SALU*pz2}{TS5glH1=i7C{tS#)rqu{;QQ8z4D54L zCz`1fWl|^Hx=y&QI^o5pJnYK@{h%K#2g|_>>cBX4AsdW>Ibb$*VSqR}2ON~Ku$y(A zxOq=#fY@2p3Hg?+Jr;JEk;`?+bD^GbnOI#&x9S4(0I3)LdRbjS*Pzy=_C&SE!`2vA z+jU`>{Bao%Tcdb6B)qurRk~dltn^zYJw>Ob-W=0lod;jN-lR6MZ|14u7QO+@&XguuFZ_EDQ zPjaqtY?xRTi;ZiS*M)SeE-(N=Rg31Wo`-^}XdH*NLT&oWk@+o|K^4;$a*8kfX>!PREk!yAIB!9yypx%(;||K(6V zud^U+>z%>0J2nK9?zmIO$saaS<(}zb-pG!Vw;^*UGIz#g7R8s{aWXrQIfBfQn9P5R zOlO?TE@bXP=B}8`+alAUWjYR9adPKj;+n(6HHU-O@7oZ}Ij|wP^WcWy_QM;3p?vK2 za{XS=5BkAkuo$etKZE$G9<0Yt^Yr8A>Bmc4<6!Q|sr|(F%FCDg=^p&_^7>%vJ(i!Y zwEeV5`4s&0#ZLs&POT3no%)21lXH!qi0$oh*Y^-I-$mxTF_{-crY%n9VPv|H>59pG zUu0V2WR4>995To5ywVw)QjienX?=seM-X--Z4L@zfPidB)evzT;(!#hSvW=!T@k!g&R zc?FpZ$XtlY91)p-mI-J-HR7ix{M3w}Cf&iDx7@*<5qEI=+ivzk#_kEOe*%nxQE(2N z0~_$qFn($RoA6UR>FuPeI9cB7)PCBx(-^vQnV+6#+~q-cF!gzB+~sd=KXp>R2S2UF z_I=pCPusqCr?FFPZ-~3T4agio=0HqltH{*H$!tXCATkGIGFORAU7XBjWDX;9I3|-W zGPPQ!R{N2K;m*e%g(n_TZ-icQDk4-Mw6YFE{`WfJ5LA*oc2>>^PZy+$uP( z!(WwP16Tz%g4LjE+lU`qSHV`6|+@yFU1vSvAP{ zD3={Bn9SkXR>+#>432ZrlL>l359kB4K;=W`$$M6r0sI&#I~<(s!H1fU8GLyVf2;Zb z=BVj5F{{0jB zdzDR`Kb?D^c@=x*SocJvnY3)u0;IY0eZskB;5-_jAK*G1`(EXm1F`Q_lCRch9bERk z$|m%ruL-K}RU#A0$0mQ5`d;Pl)jdtWq`~S3g~^xiRsM&%k9AtZZNz1qw?09?sGRF8 zkzeHEUP|hkA8}v&4&GU=H&n@as^a=T-hj2IAlDYD;v8~)mE1>O`ZyI`vF}wDV{Z}q zi@;K_6s!a*!TC#2zI+jINPrzO2ir&VxGW%#W;f!{n_gIj*f{Pt4% zMZbMX{O0F8MR9)1j`LfQ_M0ESW#hLj{1(*Tt4zl~F7&&=3@`)C2D8CM{3d&^x$uvR z>*@u2!9K7L><9Zn@tb-F>9kdMc?T(Hx!;Z~`(CB4%j$cT;@lQV2 z0X`Y^Q$=#Q7~-`z;H< zW#G5z)3NVWj$-c!`bWTVa2$++Q80z;*oEKR9J@KL1M9$gupVpx8$j`!`i_bA+rCue zjnZZHZTa^q_5H5CS1EpLL{Bs43+^+M#Xp%`k0;J=e6R97p8cT=o#x@1GVohw0>5=) zTbulr`E76NMZf(T8`y(#%uTs)hE=$99+4E24GAcLdaW2xr zDcI+f=Oq5_J{|jBWh>X&f?X|OJJ=5PfIVP3I6qyW#=+G*I&JMDZEX}xA%7N32j@W5 zHnXNGx-#~BU*JFcC{9KXFn7)~bK!s~doqL%)_&f}+8^AN zp%;3B4s(O9s4Eq{;7g+%JpWb^j~;hKgIED)Fp5MWPdqFq3o;i_oTg6 zz&?(=H_Wl??+eu4bNf8TjUQ*;f^&uDkuUwKwSS5mz3u27;~Zt^okCwb`P1MOD0h! zvF+t}Tr1(m%rFTio1Z7*Z{gSNe! zjM+OZKghil>Y+@xEy=Dx~* zga2Tu!FcuRJ=^((O3u^9ivMKK1%tH<^3L@JqlxQMW7X(WYckwf><@93jE68saVYja z8TlU3Q>yi-eHOHyq$`bw(WAyC%gL|i{G<1pr{%dZwbGoNUa7`~LSy%u9g;R-9fzl> zw-dA_QwQFEjA;6AX|vH)iOw2u{9dy~%8#LQT28n{NF+nQ+vH zExm9%@lULsGFWqSEo*MBWnTr(TZ;{~U;qq&ZD1Ri1CM_A%m+(BAD9oHi=Yp53a=}z zu|_boNSfl7K3TfW?G?uQ<=oa@i!E-=ZQLFjid)%_m2-<8wXcHB?OG$*=GH}iCN}2X zYu+e6@5T>3ng{Q_=Jk@+sk!apx;x>ZI{^p7aO*>t8=W37|6cQIDc_FH4z1I7ubClf z&6?X`xa~l1GkV(-==H;C4*GHh(Vd%!+e`OV_$~KhsGjpT#Bn?Lx7M1Q+Ixv@)ZPQZ zNbeTr(^kq@VeFkU;kp6a>fw42u8ZKh7_Lj;IvYE(uqg}71M|RQuo(2hX%QS3fn{K^ z9K&Z1SPb@lW9ghz4{3^P_F)+KhQ5zo#tCd!a}B+Bt2+28>R=d~)IB}A72eetC--#R zej18*$DUBH)~WiYS|@$eN6~4`JCZ;A4f+)Kn7z`csl`Winxocx%zu=$8qIqhKB$48 z+64Uc!22w^2GKbJw%ubsE9I-uS*>-p-(#MTv@*?m54=~Sw+y{i3G~i=qhN9zeG`J{ zo_ICEJ?*+=zUgk^-Ou@p;&|`WypP@k@0ZJ5yl@FVM+69zI|M~7hduc@X`X`?dYmSX9Ku!w|T9U&qZgR*134MxmnUYn(r3)&O@&U zy}1eWcEEEJ`kDpN-JFQ;RhRJnyT9OEF3z7G$9I$FJ5TsdyM*u4%p0ivQ_``?1=me* z-T94zhzqXM;kpqU0@xD(Tfi2u8|(&4z?@eLCgE@EF?m;~eoljpwoE{FmaJ^wrj!0kUZukU4e@h_^ICV)4*C?pRy>QgP)!+WDO$wj!za^etIv-_;ay+HtzafK;|uE-ipcGC^FGF znIJL|WFj${?IJTBC-Y-u-bUu_n2bkcrnJnI_R}C#vdm9e`00ov7|yc% z^pNeRdCD)gvIY^`Z^ZT+v0e1-^%;LaM`$AM`c@*d8=2iPnQ4(3kCS09ue3eL?1{9W&h!7J2u^BeC=bzWSlcphJ3BWrrZ~m=xsu8D|+kD z>!*AZdW%3maw^u7cfL6;(s~`+Xm_;Ub6LihZM{C^>m)WsZxwo*(OZSydi3T{z8Sr_ zU=DJkw=j$MU^vdT?d3S%w)a}&Gq&DrBWOnlmHR zt`e)B&htSt~1oZ`8&CP?D(`y$EPj#tLNJtSH#7qo!HVLb)Ejq*f-e| zVHrs0m*xYV2K5cVbOnx~w^xkJaEP8cA!=-1_0R1-%XE zZBC#!0H@XHs}V$ZO(JeD-4o$v;kKId*Tiv~ulucY_t9_7w)(9(#HY1Mm&T_x*j5eK z`EcC`*TdJbFT!xgv{ZOk@Bb2?eqtH#=$z9!)tI8q`xfIj z=v4RZ0{JfNb>C;YgpW#mRHZq}xX)ZAX%(9HDtu4@Ka~mi$%gk_bUC^9bTIQi^S|YJ zS%%JXtr#ZRkjJ4rT z&37+jjQDOj-xuT4MZXzY@S7ngTu&PXk)|y6@6BR8G&T%k&mcGoj)GAz3cBESdZb{I z=l52=YZ4lR`#IY2ac~iw09|lC1*&H}?Tmi+>(QSQpEgiGYU$tA($C8}!S8h|o;bUX zHEkz!e7er~!$+6(lbb$lZr`yo7;gHKdMmoB2C$kHgyO6mnCiAMujB1%t?WZyPG>)Gp@Y6p0 zbO1jc#7~D;u%-=vxbTY$%m6b$59k5w@J}Ot3W&e((=dJ-)_zj!U+wsGjq#V9cS(FY z&Ugp=DTT+a@s14JPotC{CqDh6pS6EZ*8cf*e0rI2N^BpAyS|5z`7ScwjmbPMGQ)8) z4995TUwXu%#F7Z5G$LZZ_=#GR*PXGJ8d)SIhKjKlS0Ke*83mpC%a>dW&(P2;)L;C$pvvyL-9* zUT^>$0EfUKuo3^%*zqZA&MG*r!(WwP16Tz%g4LjE+lU26oU!UsVYushcnf4QR)e?^lfc?Z)D$ZlC z$svvh>^P6(VLQ&tF@AT5xRi5+`jEHhOncE=hu$*u%A9EjRZ=1glT-+wNah+}NcHZx@?fsDPZLL@M2-Q$# z$(-pfV`31#G$$6PHyHm;nu>T0Q+`@lww1qy+hjpLk!|Y=)N?(Wj z=`7F0i54A`78oBX)@x7f{)~G&hhC3uhBV+&haYq zfRyh?=YZBZQDqiNT90)+IexAnJb>OF^!6vv>wdCeashpdEg-rVM-#-Qm+oJX!gYq) zIDdOwpJw#9o;Q8Kdj4M)7ninUOB?)-o}*4Y$-HSc^QPIX7vQ{e*f0k=xkl%&X!F2K zume7);I$W=1N*>Ucx^zw4-5#uyEMPM*sA~?ieJ`JG~4{%V*HHywPehpHk--Zo&RpykmZ7ukrRrBDjGJh*+&6?X* zuDclyS`u(D0Jj6^YC&f^m|tc7Qpz`?vq|gpRhchKTAk*00B)PmTZi7p1bPSIv>Sar zg6Qr^#OU7dUT_#327BOj8h!`Bd2kRMfZts52f;kydAsI$JNxKT zM)AyEOFo#QSDpdV*QU79drXPayn>FVTEaM!Vd0MC1SJ&qJCWDG$ah^|p zG4`~4*8Hq+QI3BqG(WAMHSdwMGR=7fJ}85m@&w#;z~WZS*mrm zf7bk{r1>=G9dKTXULSf(66mdk>vHr}2%@_p5$BigtLqldb2xu)9OrGC^U=@3Ir~E- z;yf3-a^SoT&g{*Khg{<& zbgBD0O8x?N%-wHBrJc*dFWH)xdB*=F&7--_=Gr}Ql9hmyM!5EH&2#8nMCZc&=C7rE z20Amf&c*x9^OBaLxo(8(O!TIpHzR@GEI4+dH(d~arYGY1(!F+{<~l=j$?V0M9E(RA zG}n2;HG5&kaV`6h$o(Cj-_Jgr`x$?R=j;~dO5r&jo>Mr#6I-018+3y?U=BD0uN^uT zb@0x33&%b1+Y0uBZQu~t4yyiI>{}C)=ZHl|s2d&hrT@_$=$WChS;r zvvHVfTGA(u=CMa`N-!L)Rc%44OZSP#DL+MwWfZaBAAQnuMOHuck_@yi4;qdW^_ zuJkEneu~UbV=~Hj<8d-4ka-!Imt!)`qGv2l<{4yOLFSd1%vVHaRLhJWuwv1%1H@Pd zh_Mc^-yiQGypY0ve<|$uml6y`v3r{9p9bf^IdB170Ne4;D1Pb&yYW*e>7AsjSd=lB zUON`$o3_jS)PkS(;HMVLPd{0${nSJGKKwL!8{go-_O;sfmo^z?V*5zk^}U7624ptG zWIiS`!*MbZWHutRF(z|BWQO8o-bQ9KGMi&Ed_10hl9n0Nej370!}w_gKPBO(mG~(Q zKdng#h6b>^pX=`jhrl6l1RMc7@y{53>IHl8Q$6YRq>G;luQEc7+D}PW8GN*EX?@Da zPmizSn}3#{zHIv`K=~&8bR)Lkvx;wS+-B9M_cDw%V*5bc_3cLHeq`>C$*d5W{y3RE z$UKP5gE5%}Yzg(n$rK>-d1O8xlld=^>D4m5+E0D>sUJTL;HNuQ@y(4@d~;(J-`rRg z47Ff)GuPh?wt;P62iO7j;Gc2))DQOKrxMajNLR5a>kZ4bpZ0AqYL@$Him{E?83UTK z#x{1^ek!AU1%5hyfNyMI=kt18X72`LP;BpsyS~Sed4b~>VlqDxneI55$B_wg9E{04 zFEX8RGEX4$V~&3ulQ}Ii9a^SC`>7K@b>pWV{B&w1-`H5mH#S!Cjg6J8CC2VbuD=qj z0c*fIunz3QKkarbDt%6lJMmWw*aNnLePA1?+BV{}!Q@yhI+ARjK1*yfxZiwpWPdCc z9j0AouJjan;bALJ&6N%%$IX@I8Yd)wh&EZ~N+)*m4hEc65Q`PvV9k|ga^4DJF%OuD z9V*7-z0_=uJ=*SL9Ou|`-!~e*B4Sd`8OlK3o-1|IK3AeQ1HCd=>ZE)ndQ(6raw^8- zJqhnlzzpO9g|*f zT)55hgYXg>q0ExG(hnPd9>+~=t~AfMiS$S{bEUcBvu5VdXn)={hZk&X?@mlcwj&Cn$)lU{qG-_meRK=L01+! zbHVb@ne9@(2c5lIXT|5tZ%JCabv#*0-=-J6?da`Er1z9`c1g`2UZ366{D)092MeCbZ+ zOSzZ4oHq{}@<2c62g|{7umV2w;IRhugSB7{I6&N53l2UBzj6DD3=qpIelKGz>PgM- zWyY4}{Lbyr{HAMu`m$jj_h&cbNQf?C5>aRL{-;zG&23^gU>L zg^LEwZzI><01tr#Jb2-E5nZF`oB;bDG_$3A9Xji^&VdKbYbC8p^XrA*dh}MIw=RKR zC%i_{H_P}#6y3AGO2F@>dj&+eFGHoAzbua5+~d}o-nj>@cT}HGxB9P{#HaZmS-PgT z4BJZKI~TrF;CpxnbEZ4Y&@^^TVbc^i2hM>m_;$f}HT-(vwH_=28^C(72Dt{XR`}kl zW0k$^mrGg2x2)&0`A#vugY9diZ<%Surs9;b+T5oa ze}`Um|JIY=giY=T%^%Bit{6X+Xr3}2G+&goBF%jXekg*Y;shLJ!hH|A0_bc8Gaoe7 zv(tx8zt-t_(CiSMxtjY-xc8$s7rnj&dVAr#4Snr`=x$HM{iXZmeona02iN&<+z1wfO<*JF zA-@UC67Id4doO$DQbuvlnw?ym`($Gqw#zp{)P9*Z=e_ng<4VnW-7?P6m!o5O zoyJ<5^BnT?v8DC_vrxEjtghk2%@_r5$BigmHYMq&NY?9 zJ10r8SatrGb-(vA&d4}z>hmj?-0z*ls%mZTG&W7`V~mmaxT>CH?sPlt{dO}{gbjY| z@q?vcDOe3wg8}%h(D5qY`wo?GTn*2qU>#Tn2EcMq_32{YjoAGY;#CiMqx6GD=@$jQ z#gA`yNxxZrBl=r^N&{ zj~~+U>ULv=+z$iHN!ju0oya_f%wsW`1@T{hoXinq9!KW!n9P5POkbSLUC2Cv%o8!0 zh{*J6nO?sYulD(gFZ{$8e)jL<8*2~ojkSmQ#@f-!{! zPvhV?ekvoqjCApngZY|D?Wc3wjI!l^n!Cx|Zl(ppb6-||T4(#Ig7Q`P>C{2KufbZ# z^9Lc&q!_~~34?=7bB-eMZx*GLP7YOuSS>#qjuz&fx2YyijbPd0v<0;lj( z4(U0hi=WgQLhYxdEMpDlT~eRg@Y6y3)MokVUsmb*lt=k|{PfQ4!L+T|zE#`)-nGUT z#P;^M>-!@z+mP87lc^G!wm2CRnH|XNh{=3LWLo27E+DfDnO!lNJ4L2N%d}`ewc@8X z{M3%0*5aoP_-P}4+ME^)`LWx__4~kLuox@_OTh{JlY^h4U=%+s5}z#+pNXH;dy3jm z`?eT^w=VOOA3vQ)4Tk-epZ>S)rxf(24?`fp+ zJ&jbpr;*C~W9)Y07dPkuJzzGN4Nl{q5j$Sxozwx2$MDx6H~|iU)8H_u+BRak?xa|} zI*??(_Y(1H_dfH@fqk)fwTHHuxzj&NUJvapYknOL)|K{CR=w>*t z-e^*W;|L%ai>JNOzL%0aL(i&;=_0ZDie5 zlKF)Au*x5t?8Aqe3)wH_Aifs<9$U^4T&UPq>A2cBD*593-PrC&x1V#=cJqtUZh>`R zJy;J)nL@@y8oLX^{7+4~#rU0H@9WXd`MuQTjwI%WthycPAgzS7R?_lxedk;=a2{>l z$M>B5v3)%b-xk}~gM5jN9S5Ce+KE-Xx8gTbPuv!aw4=xC461!SkO>8_si|A->+#>} z{-saRlBD`DVe(~Pk3Xn;R;RV>BQE5;&HLUz_U+(0TjdvBw$Fn1;(h@?=Xyi+oTnkK z?=pDI+Sh|?i!^W!xxRYtnL&Ko*&W;0qXm1L(ccWVfo)(n*bVxqKYNfbhJ#`_@RIH& zJs-@Me9#992gm5c6l)Il-DCu?NsTGkemkGczQHSbX6`pryBH7CepCB;h~J9PQ-a^R z_M7VYSIhO(#rf^I{pPpDZ#6otj%%vHZ?y^hR)uZl@>}M&y*FL-+auz)a?Vo`=eOQC zzg1|zmE*Tw{7{YGf_h(%GVCoye<@f2R)95N4OoQV3Xm_wZ>9Kc0bBqV!9~!CoD(_m z+gTaU(tbPsXU6X3emjESf-6{Gh2Mg=UaZS%Uk~w{3q5Z9cH@5Y)8d~}uBR-{Z@c%K zpOEwtomR#*mEgD11b)lGHjn(4`R$QEyXdzY#BceW#~0_fjyS*hwBPdaTL*r~#c%uY z+ks>=l!?6==+6MNz$`Ei%mYjC+dkyW@l!c|8UP2tL2wWp0*65Hn}cz+(KFUPf9`r? zdjGQeHkrhJZcg4S+NZwtX5a5>Uk~xy2ztgiUvQs!nfND<>+#0%o1>Hz$|w>mg|emZf34y|2gT zSLl5`NDF(gFB5;a;J>*uv3)%zxXy9x8V9GrX>cB#2g^X8-M;e?_6X(cDPK?dA<7StK1}%ols`!M!<64g`8z0oC*_Y& z{w~UoAXi8EyC@%^e1P)(lO*P*8pYyhjkMz9)G{$rjpCCU6p@nOpT z;A9GYAp9uLUGeond@W=B-y>gqJ4u>{G!Hy^crIIetFd0m9qUWInUQ3E3;9Vmx-zI+ z#K4YY*BVce_Q^LEGlc69a{^xlC&7PmJN~dgwAc9Ui=1Qelfg*zkQr&s3WlZ`8=v}W zL8S8zGqT`dZr2-JocFS3-{F;*(&0Gvugi73V(VBaWZV!PQ|Oq`I>xUucXG~|iL1;V zD;-9pb1m;olRszW@3?UHXk?!AM7_Zs$VFzo!R`87iEMt}KHog&8{&L(=$qB&n?u(W zHc$U)n@`$0=FriLj#+d>wT@A3^Vl+*7vpT6`&WVYwL)jV+tJ$=$O|!hPBNj%WQT%uDDcwp5{Em+UAiDwzG~ z9i%Qd(^mBrTCu}f=3+aLCq3L|rK?y#>7uP`ahU%uWm@9P@SZ}a!~E5fGK|5gGTei$ z4)YZ$(;8ofy<55+=FpNdPF;q6b-TknD`nc_%dlTfkHh?tq<6%puVV>@@0R+Jo59%A0~g8{7UjG$Yi zpVRLE^TBM;2j+lI>XPtS$opnRU$e?3U1z*n$Q&Kl5US_r|2eiCv+|B#XQXYBwlD2W zTC#l8ChbhupYx3GFEs7;?E92`a{&K~4f}53+Yb)YyBC?kLUVFRr_+B44^s!cqz{um zqSH_9G{U0}^P7@BO8S^ipUgJG;|}vaNgvl~TelhE35WT~TO3bLPU!l*CD%y3()!lU zc6dHm5B zFV_FP{4de}^Wi54e*ECnPw7*DevT#9KgJ%MZSYn!T%g_?Im>bT*EL6ZM$pGKiEYQO zGhWPhJgJ^3Cku=^{)Yna*O+z3_`PD;=inY5eWF0=KXZ*VeD$9oFc|I*dQG0M_kvc^rz$ZsUS zF_!Kw$J z)Xix}Fm;tx2cDzd3{4ke18qiAp*dAoXf76Kn*Ypm`_W^2jn93D`~dZ7t}qyxFAUBs z6b7S<{A#_ynL2MUQtu6h8@$2L1lK%{&&I)Na2lKiXTe^u7aRZwUa>enMqApCkL2FS z#or~=hji|_Qm}+$@t1>o&_cZ^)%Bu~<5pcSj^AYD#np=s+x5cn5#t@vSw+2=*kn#l zZL;dcx%IUD{BPM5s~4?u{An{>t?R|~Ci*6yHX}70N0D1zFN(3Nl542sTExDyd}EGrUObXv{6D#tAK zOTFl!UQ|;rYN!|G)QgTy7wg6EI>@i0Ui4Eh2B;T<)QKT}SvLn~vTqJXa&8WWb8lv! z4X(KnpEZIlU<=p=wt*F31y~JM>w2N~0(+w1Ug0ngf0t7qGN>07U^&O)ceQ^b^`gRV zFH(8N>w2+oxAELZD689x@1sYx7k7Wes1}{Y)C({5B45{w|V_998@ zMKqT9xUYzQK_d4oD3H73sdf}s9ENr}3FFqsn zqL_LSpk6dmFPf+m&HP4h3eJq(6pW1D6bw(?6byN}<~)3s2l_xCSOgYNpOJdu<+u&GNf9#W$Ak1 zi`9!vsTV%#MIQCSOTEaVUX;e_#lL-<{9NiqG4-N^dQnQ9DB~B%3(hp=1tU#)Jj?Qk z>A2O5rr;f2&E->dma*M<6|t_yyLvFKlSK3qhdq`gYznH_F-1S3wznF!CSL-cD7CAo}< zbM+Z{R;48o&(=E3DEU#I@ln#F^_;(f^0N+eW{&^!4ioPLPdlvmI^13uyxr;W%DkOp zo#RzUp~u+1A}(g%;xwjynEK>mvqSY;!z~W;&1QIQDKrZ?zr*384qNj7EPaKL)A%ZV z&s*qgif(Chwx|3F{l}cfF#4rW9BxH->!o@J(OY?Ph4Gi@y%xRFo`ktZX zv3%|^+TAJcwME7b@&BujZrN)ro+7T2K4}}*kniN4=Q?s6=1Es=>AYF;Jmh(-yq`#(-^x?Z z0zdV=h#>Vi;06rN2hrwZR6dVOhjuj|g`{1=t^LqD6 z!y~+AI4oWl$Xj%nCj;(xPdV4W8xE{7CVTOL%pcmk_Q)~*pgoWnpewNc-AE6-dK_k# zbHlqfuaikS2B57tJ?K220e2^z=l7m;euLku{JzQWU-zE$C!as*Y~6c0kbM3y*K2XN z2JY7IoYLHRV%&{#fAcL{{0Da)xTD=!?2mEx4b9z2=jL}$2R6TW+IiQz!d(g6opk=1 zb3VQIwDVJ>XTEsKS^nb5#^m$&iJvnqKcDuK=O@o^<=rKDv^m1v=>T~F@&Z=gCne9V z^9IQqByZ5lE0Mf(E05BTetO)qu@Hc@8Nizl7`j$J4Cz0U6+ z`2B|8v;2O$H&h0HCGh85#hME0-QY^YDZ0x@3y@Y#ntzq?Kg7MXjfUf$k-Z@&Yu0K- zc9rq$Jp`t>*qn&Knam+*bmo{@rJIolU`7LR~22;+zSF@S6 z^_s2=ffPg9W@!&p9P4DR*nP|zYse6r9LBT%v)C$rJLyb1A97N+NVCsVE<8F5&2UGO zF~ajfF5!?tSfs)S{#CFP_ z9=zs7o-Mn@Hrl~g_p=X!q{olT{!K4!MOmTQ0D0yu z(eqW(WL#IqXCD+DrRZ>e`o+|wv@<-33-cV4GGXG3)B1jd3oFf!ziY9N_Ptf^d)i_pOB?vrBYTC=+QaYv0 zud~X0P0G-oUu>@(R~zd2Q0OqWJFV;4F4sc4y4|VuQNLzrza!}VJ?S}VzxY=5(aYL) zB)OuIdY-8jv?G=LDv)X5xU!IaGFG3Fe&iYF+ILSo-CUzvuCYn{F75g0z}j~&+Hfq+ zh7`+&6l@65rhguLC$p&+-2ZZ&a@`e@Mq6d|y&UUjsN2yj&Yg{Yv?uuCowrlkH^IA% z*=(YJx%!5q!)mAuP#9wL2)Ha0?=`G6iPSA96zun6sAmvbF$)w*~0iEZiFM!OfgzRfWo>wd+^ z|HnK8Wm#ix&d}$I(gr3axw^L`t^Uz=M`|>j-M%T!L7f0olOEqR$$c7fp;MoG(p4z) z4dx>EaD0Eu>c3ob@qAy^oc40QMdvE+{VTcmGrBI&2Ay_t-)TQiIg`&!;pZuynN#>$ z`U%9z#D-SANtWw^PwQDs-GrM+E_IB$&U?FROl*qdH%Xs_2WfBq<@J;&Bk&T2lS$eb z>1XmRG;_ADFlL;tGvd!E^G~><(;t_Y7_L$w212J5E{m{7L6i zw5PA_b*$wcU&}qN?|s!C=5kD%kow-;qhYTjXy3D!-2cqKTyp>8n-KmNJ0sr0V3&X6 zi;k7(qb-rP5g!FlJFj_BwFUn7X$#O9-xhopeM%S4xGv{aFG_o4KOf~;`6z9r@Gj3X zX{RpMllQq74~T8}P}*Lp`zLvB*mXhO_tXRFKMN1kON$4N-z44U;ksX^JSqN{w))G& z1{crwKKI=Y&Uc}{jQ0AIUDOxVUM~h#Qg7B%Z#K{$XU|V~oP;~^qxf3&#j{AG{z%)c z`r_0dsXOXF^+?S#(GQ-4?=x`Q1-GZ*)^5+$vn@ybWIsEff$KN+hO&9qWlQ>ry*uDm z^-*Y#ALQI!gQ{&;b7T*29N(s^wjN%b!UdelJvsxwX9hR&td?i=(|fz%^q}YwPW63t zdjdW0JdYl9oDN(?`F~r|=ea`or2eE*PZg)s8^sN2s{N(ClRj0Lc0r|czo#Z8y>rfC z^{+0}--*9J(S@ItzojmEdG3Z%@FDm7#r@`ZCQEt6EgXxSYjLsl53I9Y^gGXAsK2c1 zg43z$x71nTNx0d`{ib+;GljHaiVvS7c*c1(&(*6hK37AWBa|Wjw)}sw4@18o8r@~OS^ZW{-a%7^QHX>=N0E80j?LHi|NDLC8{>?BCaR{HN*ihOYi4kdk z6gE4|Lhjf2Hbu1s+^1@eg+ADhd#v^-1;@J5hPy?;JJs3kn=7kfC0O z@^#<60Ztq2m@L`&l*HBCCl~wc#6Odj^v}!V`s)>POn;sGNUlls*I9cLp)HN?uP5m- zd%5ON{@DV@QO;}mru3F2v7k#chA&CQNOVrpr_0#Ta{!H3IA2EZE zw#`q>K%2N&tzw2B$k=?~S@P+dD87lUW+b*^T;=y=g~9LBSMR2;PP_AB7kzcdce%b( z_~sP&9QYjg0{8;>F!(U|82H%Pf>VRe^N!=(cgzDx{R!p4rC)Q|1eZ;U%UAc`ootwL zE!=a=Y4E&*GoG=N{SM|Jx&PNWexPFNJ~_rtbuTjiLJS`1qh4}PMkMy8osjvLC0zQk zX9xD|;M~N+jsrZGh}Zv%w%q12RLuF>l7r!5>IqyPwz=F#*@M!T-yaOuCI=^L_Xk4_ zd`m}crHxSSQ4x7{dC9O^4yZAW2tZnc@5+>Sb3LO*KcvT$k-{* z4{5^`mnktWONGl6xXge{`ao0M&x?Z&iQN^KR|uExLW|3|n2Ww$@b{I;!Dv--aHcw$ zb|pFJxP$9EjBofxjN=G+1iS~l2iyj318)RxJXK70H-j$f^bKkaNE@|h&{v_kG_Az;r92b2U z4)CYq4nI1Q9P2LBA0oa=ww~AiB=oP~S-{#Nr?eT2m2sXB?cPbwvE}%=z4XK2=2*d& zb zoTU2;a{iV0PM!Zu7@vjcSE{zldCj}x%Ts}Chzq#hN{5ley|FcXjqxC3Xfj9Kzv|*# ztQjI-?B{v$?o@}vko!i-|K=J)o;z>S9#U^!ee|TmcyB(%;(#*WeK%!E>~8t!032Lu zqi}E%TWtTIr5-xA_zZbQ%G`A__U&iR&`JF8EOq=M&whtdiLIA%5j)S4SU0!uJmaJ1 ziC2t6$34bO5#y}d!4+8C3P9*+sp9vlc<>PrJ)}9DhWLGJ;Xkqn$3EmyEG?lV73JdUaYKX>~enK&MSy z$-1Fk%-39Lc3sx|@w6Mh|D{MG{k z$s~Uzbt{|vZ1Ts+A1A+*{8I9>NS8GyO&XguwrFexn|@Yctr26txO$G8f5w_humuc& ztzaW4^U8&Mt9EX6Y|U%7%e?akte=`YWWJeQZ1N0aj+%GL+%B_(bd{D#`F_d^4rmQROjSCz8OL}^I`bUg6NmJ#c z)FBUb$U_|}0*k;*aF+CJFq>mP=m)dFInr~%T#kL956l7QN%w+Yj`P8MFb~YsbC}2I zm$*32B0U|<0o`C8m;tK##NHEGF0)_kb!&T7I%~8&F7pLR&%hTRD^J$`{Xo((YIh%uD?vt_%*!;9^X#ft}KA=k&5Qu+wqtcB89#mgzOHi(a<$aol|GwT|_l=BNB9 z`%z7;zPK(mb&J)n^9w&yhZq-SUP8UQyYu4y$Zt-sHuH79^ebluuakGT*$+-){ z5b^JnecD;?&pp)kZPMQ4y)dv1q(9|Q-!b60{mp_&j<+6@w&vUHKh6EKZ-+4<>;5=* zs1^B^M(aC@z3BF#dvLp@yA|C5boh{I1OuSxR__>d+^BUsXp363?sM73zu3APkZ(oz zaq4^@y8U8zwxzob-PP#uBU1xbgQB~THo1=D8ryDZqiwrCWIS){u0p;I-RIEVkM1I| zdz+=Z9o?nqC_<(TECrR_vW}kPGTUz2?MmD3>x^${-EU6gmlDdfH(K9RRNU+`#&}*$ z;xm=6(rz&Rm9$6&?au@@jQj)b1vmjc;#yspr^u3#^Fn^)P(-sW|aah7_u zgxB7DGwmR27%toz+lN8%ijEGOSJq7SX&p(KMh`j^cirUobNdk+av_{Qq5xlmdw-LQ9 z3G_}qQ!qJOJUJUu{V~-t!*fa=^{{M`&0o%cV(BpC?CF&QIC zFk-}%BqUNhDy9U1j1ePEsY_ipWnGM@)Uti3OD$DQNjkdJQWtMArIEEHOI<>!59^Qh z!CCB*l2viUBB{8RGa7Z#$DL1_641P zLbbn+8@ZOTX$G6s_3X_t_a`w=hESK?1_0dxuPG5ae;NK?G? zzJ$l-{VL-Z%(uzDzv^3x@Ts`2`K*~_I9_MIGkT3Hu6ef3#koa~`d+Hd^;+Y9=y|(P zGWn_4=zG%qt@Lv~{F1GC$$rudNm`cXI-7cD!HF*pCmy)YLzh?13FbU$zAfc5(3z=q z<~?Z+Nm`2L+5^{_=uJUyMjX9X-z0u~ncr`T2ju?EbE;`Cv)8%A zBx{YksFz&-)1~x7%ps}0y$^Yfe8y?pcCQJl*o9;EJXQTeTRQy%vY}M;rN7J`n4e=0 z%r)$Rc_66tv+vk9#a9upH5ZC((r=MjkIee0Otr`?#>h+~vk{q%QJF_XW+6uALu581 zvpFhrzsSsMnfa2S)MI9$BsjZR68s=i!XB7w*aLG7dtk0%56m^h4&n#=kpcQZAD9E? zfaCaUMEX*27QapXnBQ+Kzd3l`c>c$h-_BlXocCSEZzr#^{Pye>mftwG{dTYIw>k7J z{Fps4smq}&*c0<}mfzmE(%2z&nTx6Kt;jr#%)?QcEg~};BeNTsN0E6nDziakreb7r zk@+ezUyaImL}pUUOlrSP;kQ}*HizHty@EY4uV7EiD}vkZzk)d_>|Vqli=Z2Sx$&0= z^ng?NYgGCqa2~()A=ihTv^VvgUF|o%vwQk-ew$ch`R(0g%WoXpeskG=8$jO>emh#k z9+}BO=c`4Q-#$(@{uP~}@tFEPgUoBlycU%i5t*?VnP-s+A`^_t{8D5_V`QE~=BLQ~ zG%9meWJa{ii1ynkejCGYnl=1Si2c{56K( z7QsdQ)EgE|yi3xm{Z^1<{4wXf;`+mUT^__jZa!J;+Z|X zv&Zoi{u=@3z)^4k90OI~n92K5NzwVR@g&peA}$))Z@xdi-&B2^b2sm&C9$63GQLY* zc+AREdy9@H5%2Pjpwg9Pd|UEI_tU2n;|9{L7&iis84@dg+KT6Ti02lG+cJpBBH$vZ zVny~&aAQ}*jukmhZr3qxmhmapk>uQ=1>}1q#^t?5*BEmy5-Z+h>F!1MBsw#ZnF1$4 z6)VdA-yBcbu_ALa^LDJb%kbE`$C2-q7#H1cbZ3d(yDZ&(=pI5x7Ba)&5UA{C4sMj= zVcTw*le1&ooyK|QwUph1$oEN%EALyP+b4EsTDtqu-GdGvGQD6AsO*NHevW%>yP2~a zu&g__U6E_7^GCI-Iu{ zRp?OhP!9P;oWJ>7=8Mt~4<+&bByCLM+?H>d$0TjgIt~x-H)jTEYeV}lALoue&3G7H zesmUtt=}@Ak@EfM9MC%3zGWVfv~KHoV(cGyh84Zt=e#_b6aBK+%{}!h1-#TV84Ji_Q=13*!K=IRLXfv zu%QI304u;cunug1M<0B)fPSzQY=O^l;^0mNnOz$(r~$E4Pw_Qtp8FS3l^(LNP-v*a&w{`te^jpFZSe9)pfSU7B^ zNm`TUwS_u2;s541{_ls^H0nB!&Imde51ZbN znfbjoo9FGu_pn{|m<(50aqfrL^WTnfn{!S1W?JHfl4YEuuUYF;bCWjbJB)AIoVSwS zg)JqA%?`Q8mEoUq%}?oJ^RFbWRC8WV{Y&AdEDksAa6XK#c64@wWrxl0OZj4SmS~;j zht20CEl+da4(BE4%|mZ-9K9pVRrR5-Ul85>@#d^9{l@ASh4W0#pB2M->oU%p4-@0= zyFBMv*p>&r;{o2C$><=z0=?%Jq{-ga9xkC5_Fb>eNUMwQa%Np zsaj|MQ|3BJb8D^};5rq(ZuF+a(Hnr{D)dzgqPsdC*Oz{C^Yg6mPjpKsF>V@d!~0`?zoGpQiwqEps2G>MD~9bD_gdpQ z>ZR`8#D+4@;V|81lIaO1nuY3KG?S*s%0rYNA*MZ9%${E!_Q@>PG3~X+uf;dxYojsk z%gDTg%sWw;H$`SFMy3;)caeEFDsx6;Mq^}NLFPSV-iylgip+?X8M)VrX-DrR#<-Ul z<6id3^srB+hkY_V?33wX?;z|RrT(MfBsdAqg0r9p|D@xmR4^4kwUFLIy7EF_AT1>H#QpI5!;7j>i0Wjwj#4N zDpM~qLoqTYGTV{a9+mlq$PC8FTtH?QGP|NOUlo}FEi<6~G>D&u@Y67UT8p37c;La>fZ(Sg1ulr*bk=QpA7tzF8;z#Risyuu3}i;qp#I|a;6w&)@5R`i49gP zcKk{m!)~}3i~WJ^w;J@-;kN?n^4OK^oB4Si!(L;2R_f9pQ{R2aJdVucQJI@XrY}Zj zKQd1s^F&l;o5=LW$Q(fCFfxauGHD{yqh)%u-+J*|AAak{Z-=gA-^?r7H}gvN&Ac)g z3Sf6V{-_5V!A7tdYzEWtS0;YT6vS_Nr00>YVp#TlDbju`xZ3EtoZq%wWBF}b&oyyu z$FM7GzZIgd7{3_@_%03eKWFv)&z`G|56~Ivj;Zf4WPXm!&!aMvBGVNka~zpBk$E#J z^DiRP5hL>wGH)UCR#fJk$h2#jcI~$g{MLovy7Akq%r(8nTvL#_rk}3ioeAtN!5<}H zIam%>f|Xzf{_^}r$FQvRM~Dei@SltHG|&xZfXSfh`-l?<6QeQgaH1LNAch^ho9|=X z9gSg!=(~xH-X$+QWaUL;rCW>xR;gN(^|L6{pGiY#H`=iM7hXvPmmW z%fHPCRdQUeWA7szSJ|=atw!xl#DJVLREoU4K3jtB6o~`E+`&2g4( zH^(`)-Jdb`+qyH5x7TOO(48iB-)!lY^;s`E($Jj(dXZIj^Q=c2$0@emJU5bV+x=tI1`OG(4%6UI`SJyZ|9k3=7eWdzr~ngAW_AyVR;ss^xvqy%1*o6oatkH(0}*k zW7yKC8Q)Q_0J@vdJ!$C}QT-IUd$k@Hs}tycOVT^6w24y2M7`+mKz~mh{XHjgCtA_p zCdfJ3LYKy}!sSz!?yLU-^$s;-Lrct;wBiKRgHEy98_oOTiNOP9wh*Oc&mF zYTkG54y92>wL|7xvTWWHj4xcm`$~)V{mJnDr@O;Tct=mV)|1aXSGLW&%ecelJ(K(# z;oYS;_*3Da5x+Fq99!v+NP2@#Yr+o=@X{EEmmGL6r(QmE=LzqYj{8JMJ-P!n?<>?f zizU5U^PU6m0rXd+zdnxs3ivKUf3YCvD2~VbrF-jNBfOVkLwOAEzNd3#f7oezO}Ble zaS!b=aeq;8X7YBv?X))dDe}*=?jzT4xE%Y+Xa_#pL8Y{V6}la)u-ZW(Hu zU=>&e7Q=f3{Fj3*UTV?2Wkg+>7OsuS8AofEXx96>LjbH7u#wy{- zZ>q6w7VXrIduModTh@7!l2+3uDpg;go{>_00Xj#t&ip%!(3Cxob%zl|r|JvF$e+cY z5!Qy}-dKXaN-cguqxGh`?-pwgOYuc9T$RM(Dvh?_q3)CDoI~eWy*VN}3(;Amb&l7Y zzml|U-3HQV14Zb~MsHypy~wl`W@F})H9UM`7>hLK+5tq;IP_2 z(mfa3z>TqOAOri-X#**=fs_-h@#e9{OCPX+E%Vql54xzg3(ix)RIm)L8{xbPYz3>q zDmbr4z8VY&_cv(nZ`d8GM~C8GzO!X>f4fnP{nGcV?`puQwZ;qIZ}JS{XNS8x8Q@Q{jc(lj^O^=74{rD(p>sCNpyq{iXJ1>gPXYDQ-p zm{V_-N_h`Dy;^5pz4-@{7ICY4%Y+NQz37b;n$w;*dI#XS3w_;!=cQpQ83@n}Bs^NNn^X`jWUyOg}uxYl?3@r|@CfmjuFFY5+a|brGV^2HS1NMMJ z;1E~|uYMi>I_P(O92diHHdqGcfR$h#sK$VNXEf1z4)4&*#J|W``4YsmZ-ncqfbekC$}F)~49rjePB%KThpdShgMip+<|d>EB^ zLu7iiOpo?cFMjI7PyP7m+}dE~J8OeGxG!ycZ*4GCj@@O{zYMGdE5T~88Z5*=wfLz7 zEWuByq^FXu;@=ziE}r(2^9Ex#=Up;S(3xl^9b6ks>?97MJ^jG;Q#$1{@sktVZ^rhU zwe25oF`g6KyJPCN5}8|(xiu>Dw8(VD$Rr`N8=2ivnL3f_h>=-?OfE9HQJFsznRYGH zuKm=3pSti3(Ns?KtJdQi}6n#ekudY@Y5Xe+?>R7 zvS!P(k&AY`n`X>qF7wm9_^I=%VB)=&pFU^%X@T+);@f+_z;|q};yX59u-em}G{Y~p zx5d=&K4hLj=9#F>XGNwpM&=+g&m!||ROV)pX^D}!ADQQnc`homO=Oz2Otbb=3w~i1+&3(fD@IZEj<4$BDi|^Zh~QpWHmJB5Sk*^v$frZXqu`VCAVb+J5d4 z7uRTa8yh9RpFUaEXkA;ZHQF|Ki<~50WWNC!hszpmAF*3xf_o9zH))Nf^I20KrKYzVf4-Dx!&3K>x>8B+J1)dV!VrtdWNw_>&j=&cu?zdUTZkerN+2@U0U_5|R4aDeA7P7>#A)^W~eE6y3kh7s%;0Vlypa1mSt zBdw&vxd+ZCK`-cm^K$aNV1;lW^E_iYWfb?<7@=yL`)iCBuv^V@V2_M*XWBPfv5kJ7 z@nXEIc;|V>3auw!=5}q~Q;ct;NAX@oex2~1qB!^)=^N|tOTEpzm3~^%Yjs*ZeyD|) zx;VV_zDd0Cd2zE{HKCbU>cYT{~q$wKrij!LXM7ka@gyUGO8WO^Ne;o zSZl1K9_o4KGArJ#*+_q&W1pG!t987~n#P5?Wpg0t^lF{z`>=MKV9&1Yx=o~#pDAr( zo#H1``0?YjLc2{^>02c|Pp1{)lRP-{$KkAnHc?C+)6tzJZNk!Vwdlx3caGgAyy~1+ zN_vKF6D_of9Q0?PKRb^8652uz`tt-iM_#-(aq0JB-=W?iFE*saw27veHi2Kor>adP z6$dZdCQ`7^OPgq-O_WNT@ai_dXQ?6zQ~|COY>b(#lXxZx@}4p()wg$Q*U zLHD@Khgmud(Ggk2eg}42xKf?7QPSsDS+Q{)ZNY{9xx38i$X%De@3?3Kv*@2=PGpvI z%*C4zyY$<#e;{pP3>(H*MPuWd&kIP< zf%U;q4t8f#|7_3?`oSWw2&~3G1Nf;9tiw+WjN=y=$4gw}VC~7J{lxdmgWHz*=@5Q; z^Xg#YAhN@ zOeZp(QJK{u(-I?d7@1d)c_k|26q#l%)2#i}f}dLPQyYFVt`24%yE?ez_|?H}FI^oB zdGJRven|#Xz!WeIOap82&mevZfC2n8grA1ApYr7yNjpy7WmGTsQxbmKh@X-yKmB8h zZcihWA0tjaTM|tAh-YL!DzW_Z@lNB{=m<5%)bHoW{0^DlMP=R;nZ_8IH<95TBc~aa zIU_O+F*0u1o4xMSKI-1ecDy^yhcocfQ0 zv*0W^56*-2_-6<|HG+-!sg3kD(p8)+?{#WF73?s!a^5A^-K)&IJn9W5zG}_8eB1U@ z2j#o*(^_mV!1e-d`<@-fcf|JknEI_pW*;*9qB8X&Qx_w%5t;qS?2pQPLu6`WWHuvn z0GR_(nXigWjh3m=eyYV!b@-_sKi!OVU%(KxwxmH8(ph?86H;u|q{MdRdF`f1jIOC_(B zewX;!A#18_l-2L@zTdIRESCH>%64d(Bh2-*uQK;bdb>`S_tdZFdGwxDrl0h1k9Dr; z624WrX65d@Bz`MbTHmTHW&KkKw^M1G3iw@btCX{)K zUzoPi$#0smYiI6Fd^2ko-^|*{H?uPNX4Xx7Cu^6%cdL%^-Kyj6V7`>gIA!gv;G?{c z^7WLjr+lFElfRkOfLs>kW#5k+%I8qNhVnI}*HZqIzL`~rTsGy`P~J~@KjkYaUrBmZ z=O=$Ns~WjH%4LLeCo;LWdPG%ycL2bB+5C-3Gy+(z77dLTH_jSn>+ zGx%~p{#NV%?~2 zoz}POj(UyTGxYZ=8#%v+YoKWrd*xWy#B>vB8KebBOV-y3=bC}@*#P5!iMkw%f46Hh#t?Hp!!}VGNBx7@^`B5Ro)|gdma9$x5hzX^5uJ#cS?G#POHC* zxQz4G#TgfsQO{!eO<&wgN!9r&@5S%nT}ORG6`ZFsX8e;Ku=W(BZqt>VL+V$-b(GB* zr@S-zy~-l&Eku7ISOS)S6<`Ip(4qFj3c29d1%Jh;y$c7IO{P+ zKc(k8Y`>jb_Pt8&H}$RSE<{w`d+2@Z2&z( zT<16MHUGQ#Cx`mv#rW-3zW*ud**YzcI%VUxoH%})#I{lSg_pKB-et1)@cOp+EuHgZ z#P}^G#%~$gZ|V3g1;0(5ihi$h1bc_kKMan6W8f?}3%aStF8t=@*voM(SPRyHbznVM z4~pN^cTBY33KET+<$hcKy-Iz(tM65c-x|=<#QA~+<^$rNRO*u!<2Sxn`6WqD(P?Sa zDFwf!#_?MRwzbM{ncw!Xcb?;sA0_a+Mf~RCJnk63xdYbsD!ER1PI>9~DkW{@vNUX$ zJ^y4aqhh_D=OQia#y*$aC-HaJsp$7ATc~Fn#Cc7q;pVJcV6gR6CP`q~J6 z?JVdfe-8A3^PuXRd8TT1W%T~OxYB%tz4s<&_px@)J#%rNDSI-6BfMWmpRT^qwI#_2 z&#&Y@nqZV6D{|raeM(mD%W7U+>E3OWNWRoX>r&q?9pc-%SYacrPIsszh#>^7|=2M)@(ymr%Zh^is;dM0tbq$0&cC@+T?( zGUYod{|e>HkQ=2udklsqDL+a1LdqACUUce{zZG4K+&JY1ZEl!{@8x(HJ$>LP*bk0_ z1EBIBbKY|+%>?0NZl5XlTiegmk)q&!d@XAe|K}y^-Z}vXX{4pWQyTYWwciild(8(+rjTg8TI`j^Cjzfr}vf z%Q^C8UyUD-_D(MQIP%^w$H_m)ReR4Bq!~>&vTnh-LJP>3e8<{9#f#oH^p0|lQuI!u zuZ{dEa1s=~XZWt)9LG~yuY+~2dCI6g?KT@v*m}p2FGcTB2jdv@wjgk_VV4bQI3agdpRD{dJC>KDr~)j$d{q_EP7MX+ks3iddtzV; z9QWGxGPgfq+q=m)p!LeN6zZl-`FE^6Q z^g+`pY2(&$c#3vAPG2&)@A7j*Q{Se~Mpp$otHH4c&5xu{9YyDu);a#5`GKSjTE`Pp zKg$h|p?46yqjB^$8@Us8=&Kh*cm26b*CfPOPhGmtLJ#!}^>F@P`Z)W2vhi?WRp7ie*iZuozyR0^wt|`P=!ef7umsEl zbKo-q=7BEZb)_}e2!39li&t|SvxkP_R`z4%+@eSAt6+1x z)_B0?HktfXZ1g>7Hi^%>@I$xeA^Sn|yOP$Sx$UOj9dOVUhl3%w%|n+LooQgsgXWV` zz73u2T4&ya=Hrsqq`4h}+jjIep|>rLUO${>qAyDj-C6Oty>wrNJ;H4r=dX|9cHrCA zGdDF465FV~2ZGZ**R!6sQsxSy@01DG_1IPi*8^}}2-ih$T@2S5*pZG+>7Wnvfkj{u zm<^|ea9jwMf<)*z^3-HK%UU6xZy-(Eq%?j+2drbiLNl^MGoDe?%J$W0Sh3 zN4CJbn&ae}j@eH`@$T3i>d`vY*i`FeZ2CSrt#wE8hn{ClamZXNeAM8hTFp_*A@d4J ztJb{N;)81Vsfoi+H@wfGYXF_YVCy0C=cWkhD_GdpEpSp|=#hm2vdW zKc71>hQ4t@bdSFs=bBEwWWDL{sb|Q~`3qxs@6f!D9D?^NWv%h@yw|{cA-4J9y#wAC zp68v>Exa?jg>Ncj#|So!fRo@PxCkzSey|9>OTaR)6f7aV94rMZg!epsjpywSm6N7; zXV2tnoA*`56WA{632N^YY*BpsgzqGMo!3X7ts_4TouLY?OTFi0^X)bsvH7kdzwUX) zfe)C+gohk_lc%{^c))yK(y}$*dDJ}{UUK5_(hT2i=&C_yJ-GOQc|^)*q0^^zMjkNh zBrQ$z-3;G8^roRVD~{fFcy2^rlOVdA;_s)76N1}v6L_``yBnx~1K12UgRNjIn1_FS(tmR$#{f|X!3SPd59pKR%Oz!LnFN_r~k;-`F`jmpq| zB7S2JMl~0Hu|3t{rzHGTXZfjrt!_{0l+VOZujca%BKwX{iX~ za`0>&{&3+J7w7>!U<#N5mg1MZQ7gt%YnU7tQcoXP3}%C+U=FDIwk^a}E247>Q!C7S zUnIsEyVHDs>Q3fp<=MKGMtG9_x`|)!Aul{><*8@u##fkX4ngVKYV4K#@jJQi5u0X7 z90q3%#8-pFrZvQ5WyGKj5?6s`|77u(&%TwF9GCx-Ww-1+5xs?=A2}84$vfX17izr@d8SwEJ)3U)+SZ$ge67T$=&eL= z6M8GrTZi6E$~U1m3(Q1L^ya7Y9t_7>w!IwZ*!JFFykYCjK)z05Q}kA$w;8?J=&eVu zm-5Z%O#!{gDSP1}jpG#C-Wzyd%(nM>iD$zVRe7I_o|rq zv;$k(rL8lb8T~$cB5Y+(gsnVJ%6WURp$8lQ2f#6K44i_?W;k5{+rdR}0Z#MCUj+Ta z?MBV*M)pLYj2gSj^+FBXd`r^mHMf4aZANcBdYj_t4Zvv?`lf&;I{y&k z)(mUhnn`?G3 z2j~V}j8*4|U)|um%tc(SxxSjcd5LKi*UZaB?74_EqZr%Ovv8SKeEK(@nE13rcvtWL z5}$r?8Sm(v*E-dlqRspD#%FEb7s*e?UhhNZqryi8KC09lr95OlBx&WE_ey+F4nGxf z_{o6xEOfc3y9Z2t$o!&|FGXjW)|vK@SuAOVn)eKNFGFu3dQ0Qz^}%;4`qBi^ofePx zOZV!%MtJve{_Ggu(=_iT!aMPT#HaCi&&D<%yr;o?HoRxTdltN>V22l*ykI(*4(5P4 zUU7#2Az;_$Gd%?;^hsJ8CM-52e4$#5Y-*n_A}JBrQYpokiU<;3YE- zFUjydj;5duGH~FCgpv{ z*(dN$_6b}WbUOFx_;j7oEWVj@N8_${kXeb$%BakDMP@ce=3QixkV%Tl92J?V7@7Bw zS%b`)sLVG-W>U*c7Fu!FR3Y(1A@Kyyf_$`sHK`S>Nv&X?z!f~xhTYlJKO6Leey|8E z0;};)06*1%b@*w4@$&-XXBD5yTDtZVYw7GYvD8mK{Pe_%VAyB*>5%QG2<6@QX$!XB zyMkx`?$q(A$Jj5nkH^$+D>C;Xb6->@Uu4E&WVR!75SfEfnQW06jgi@f%>BsRACgB-<`raKiOT#&WCpa%fcDcMej370 z!}!TyP4gIQn#Wx{`{&}BHtZg!{^Q^*I1A2$^I$#xX~a*Bg7~S8^fuC^JsnxiGi};W z1*?s(ao#1@T>w9A#7_asPj9W!*IftYyYUlirAZ$#SHqgC(zj=|@tWA)A5%ZpQj>m% z3~REs%uht7FGhy7)+7@d)@*H=c9H3gkzs8%=>jsW@!B#kicF7|>Ct}b#ZP_ssUJU0 zFfa65=7px27y2-PXWFp4hx+$`{a`;h2o8b`_@~;APkH97oa0*jRRPw6m0$x{1**P{ zSa8@CjZa5iX6FxxPlx^H`=kD7d^$qkOf2+Q`uHsTRacQ^ok;G#S zyR0?SKH{z#;<0|PkJw7ZdF(Yg$Z@|N=W#q_$9b8?-p$0NoGa9eyuD`HgWg*7mZDeI zOxr16i{1{f9XS=}@r+|P#~pT@#~znGcAU4}*lFu+L*8C9?L}`LdNa@~Yo?8quS0JW z*od66msqWZ<0ji)j$3Vew;9*idK-|p*G&7+TaVra;!;^Nt)YB9dTYTNvd1&tZOmKp&9+w^dQ9_Y%i>aW zjc8r!xeKk!d57^Vy409vjQm;b7^yU0m;Q8+`~Q&3ic3c;%^pb`u#Uq+esgAk`~0B) z@^R_dQQGng+^^9&ht9D|vt7#fp|fA>9IrHgBx&8&@x<8K+;Bg7yV2VhN3ZvV+=)f> zMVdi$M@HhrrI+qs@G$iZwQ~Npm@&=BQN3>ZW$XTbMNC}UhApk|J93sb@dE3n8LXRT z@Vo%$oyUfG&_x|x|C2rsOa>x?8Io43x$TGB zM)cOAw;_(+0XXeKU$-E-yW??t>0Sl@b}i?s;QW;_-1Z(-->sgmsbsv$I}j3|w5OTj zB5Td`|FE8-o?)oOt_tbX;CZl_HB)#lhUX4!Xvdy*um|h`hrl7Q8(yd2w;x;p2f%*# z%_4sQ^a;<~G|$`EN0%~+XW2*B=GkYQ#%>jpwwJ5+mrVPMu9%!$0MkpO#0=en~6UoR{N+Qn)FL!%aJ!SEI|1 z&SJ3j5wly$7o)R8>uh_(JS}N?n)7xzFF|h}dW+-et%2(@^py*uyF4D}m+q_km~fuS z`Lkj;Z`GWSJObzJ4-t>^EbPjJ^Hw;oh4ZdYv0nNq?qAqYf;}Z*1y}*rfpuUX9M8h_ z5V!~qgF|pVPP{q{PRg89y5>BcJ$8v<73Z?Yu07{;ld%iCrSA^Ndq8&o?GvtV)?8OC z;~HI)T9?{u*PegKGB(*<&yv509rMip2?y!;B}4PF!2F-2rD?7+sCycmq{rc;0j|@i z^E^5u=v;i*yhX~VpfgqLj67^+Nt#=8-2m6A=yjtvC63;7I8H{dM-YE{;&FZHUc0|f z*FNEzy)a|AmVHR%`VKGbWgpJH%s<0(Ml)-r@a%zSH|KX@iwpFE zUN95P1P9@@UB{vh-WhM^xEp?3z&@}Q90c1yHC~H;Ya;IjV$osRMmuABHe_6T+d!?QK2FGx(*W8yK&PZDDph3xmonDlI+HBNnM zvk?)$j1x1;y+GDVk0JAOWPTo%QNA0CkvWdco5;KwmHANgjK;{kgv?vWycL!CjmV5> znUQ@~EIPW67;7If);{+8<2{7e-0b(~X1_moFf@zZQ`CP7oCoK@MQ{;p!#^YVsSE7F zPaULpkgj4;=3IL0Sd_Vm<$h|$PrLC`v*oA1U#^0!G6Py>K>KMBKMmoh zVf^I8Pb=|L5`J3a4u<-%yN~+!frH>6I1CPh9r$MyKlOk;_^FQcI?}~Y`5TN-gZ7hi zgOS2{m$auG{PgT9zWHbQ>Fc(i0+esWPd8)xp;dfy<1VW`eVk%ciS7L{^}7|BhmmJ6D!FI44|BT_MKCllz6_Z{}x{5`4-mpyjsbIbF)~02C znq+R{UFLu$t+|aIwx3EVUyh%S?&BL9*!ilSm)W!4*dn%f$JFl`WM1R=wW!Pnk?D$& zc@~)<$HAzKM`Su;WS&FjryTz@Dzi#t+OcUUm`03>Cd90jW*G~TKS-Y}Yo+5mcn1T{%8A7aZ?e`( zQ#o%ru~-_IiXAG(x*3*S>EyUfM`Z$~i+R$lGhBF8b#R^roO!)=FKJ zuRyOGbRnl=Jl^BWsd@J19Xc+(T90jbzbQ$_F36}oN4#2> z+GjxPa;`Hb(WS<*spMy3N6A;rbu#AbV;s;=yHe|=UoqE6TCa5+?%&J0Che;g=t@Ut7FhNb^MbmT(b=PQmVd=OFKKPo@k9w@n;!JGp|?Ap-eb8FIq1t1M0egh zm&T>yFTMwLi1#w~@=NEpf?q%N3^j88rkJr!k&a87zoNzhE0c6wiqFDL*wP5cMT}`m zkFj35gY{CbrEJdY!v-Jd2mN3fSO%8Erw<;hK|fdnR)hV-tu^4l3-BAWuSh?!tm0Sp z4tPQHdxi0><^0ZX*ZeZytDe`6dA3vW>tOEytxL_FYF*AXMwQL)5cy-+(etRO?wtXA z(V)5LebhWAT-0lR8>o9dJOtwKkPW{Pbd8{M9PE44d`8OGqO(rx?0?ieB59SH-)#7; zLvJN|Yvbs3!Rsvg=9qt&MfcqQjKlAxdj%8Ww zr#W{leWte*+e+X&3%=d(J+z%Q)9q$x3OgpTX%d_V=fPz7PKNI)_|1mbI8Fz(G@^v z6PWs_sqUS5==5uyX^)yt(V3;WPlbCwdb7}*7e{XooVTK{O%UB}@wmTqzuaF?&rmAo zPmAH+tGO?+xmWw<2B$B_eHyl;r4zItPv$ zz#^~_Yyi{9Zv@kY`)tj9Hhbn$Msd$GJ6SgO2}S_huS?jF-viY>6EjZOZVT^!bkXldG(S(gnnvCT z+<%zo^$vw;7R?W#i_eTg`2qtApX9$JIURkKH;BYovVhi|pUW zch8RUZ0*r|biBIFcu;)P&zh7Suil5uGsrv>l{qLfeK9fzk$D!GXQMJ-5SiW>nfsA> z4w>hoGKC`3qh)&hR=nElC%*6#U-;R-k8i9!&NtSc;2Ud)R|i9_*xf??Tfla(9qa<~B1a7@q&S^3yuoPvw-a#7`&p z^L-7Tg*><4^3xkzjSXUZcTD|WM&=!4-igY1M5Zf7rW2WWk$E>Nvr1$-Vq{)H<~?NI zi^^QU-cY-iY1e-0z)xNHsT)6?P2#=9B;H$0;`%n?(6#r!4 zr%7-UKV_1hNxJw+JwvGd{7H#{- zHyFPX+uLI5_d8^^BC|Cr^K+4Djgc{t*^bQisLUH8(-I?d0hwLM?25|th)lDVY1V#f z!B4IDsSQ7^#ZT+;(?K)I_}6Rbal~Ul5H~yXl)*J1vpCZu(oE`E@vWuC$M``d!q|kr(c>%1sxs zx5t51yYu$*+qcTv+oO_oa`{i%4$0%E)?eja@vm(%_E3Jhkav{jyp(sWr%(5u<~PGw z7wiFhPk-{e#eK+mPUku{Qa+V(sT_BJ9bgybKk41#ZsbxZznSvsluPHh6>J6DDE~?C z7PljpMtRvABa?EO95;bYVDsruez&*7i+n#PGt(deH(tNtT zbFLXUpKU4Nd(Qsoz8(keitg({zQo3k{Vp@<_$uC8@tcXq?+Q-0p(ooFRQq}$6AEBc zW0%_3_)x_ z4vOF)oAhkbbHE(Q2lGJT;0R-wBF#a;Eyl!pJ*Qy%?OX!;2Cw9vxz|kWWIjy$P3`L; zek(*zF@EdZYpVNS4fUyw@!KnVO^5icTBp@gr)vCG6UT3r*j6ULWq#Xp%SFHa3pR$z zI8S+u-+E&FR<8Y4hTnSdLlu4t>U}**v9|>MC15#N4pxKJU?G0XMZN^TmEgBUa1o4v z5zvL43pw%I8JW-0emnYUqj|aC4&t}q3ZAdRZ^1h+wq>=ihxjcSJzo5F^Ir3H>BCE? zPic(bZryACf0ACT(@LpRF@7tFAoJ4wr^P) zw%hx9e07E1*Mqch8uq2)?`Hfre>%Fa$2j#I!>%!K3Y-ELzy+`r%(MG<-r>mNxR7)o zSPW)^rC<&yKK~kPJP}9qKAr3|zxEvW;z+*velotnUbU}>o9CzNHJrN!8%Ag&BeapxuH0RZ^DNgBg~80j zg~1(_ z5Ffht1}EH%f$*c;cg5HH@wLqLuOMH1J3(3+X=(73#(mk^TaD+HywS1L`zcQI{P*D3 zi>?&f7BR5n$PLCkX@B@$Bt^Imu_o{xa02|c*YW(`&>mw?Bj_}1OzChO`So%gnYNC_eC7?&F^P_Gtz&G1xr1}g zjBhZvuXGsG9cy`Kn*4byfBS_8My3}y&un&ZJ95)=*}-l4T=8u7*ymf|e1n{C9({BA zeDmm<#OA60+UEcKuCDhyI(pDChmKjTV?^6Ly3FQCjLmbLXH45X{>e7KZ=Y|D^DS_` z22sV%Y*EXNCb@^SkO9#w9UiIY)*bwajE<~#d(Ib&BLE;^K16` zrZ`{5jlodzn~WnZebbZZ8o=hk|Jvpsi;l^BGwh|joARz_8H38bl<{YigME|aed!yF ziPo6Ds@GxeleXMMU)7s$#SUj!i*0w9d8CJ1t#lO&C|&e*%?|T+DbpNVhW8XY9Oh@1 zlwl4|mEjs}ahRD>rX{uvd$)8s%&kkx@U0Y8hH-V9!@N$)w8fTTznX4`xk1v~W7Dr@ zo!w!slk^UJ&|~GvxO$DGb;YJ77>SbB9h>GdT#}~CSvK$-d7s0)AlHCSkNSbNqJD?@ z`z3jHeR)oQ&|%Ik$+PRlUVFn1Gc0+vjC-B*h2HP-`z8H&BflZ;@!#Y3kHi??we~+u zB|nw?Ve*H`FDJj8{1ozKe?uSnKJtgiA0oek{0j23NFS%&W`na}4!8j3fmy#~-jKN9 z>=q+D>fl`#(z1WaxC6`qGr&AB6Lis*gp+*UH!J+ERnB>%ag&#|O6m}*Q0H z?6pQW_PAxlebv?^P=1(lqsW)k2E&2u;6$L7_Y|=IjcbknC3T57 zta;N?@*Bu+i01#3s zx%26xY8}L!w9P3;FmaXD29jw5p{aaqpwDQ`Hz#ZJ%}7zI`842+YOUknRl8`B<1d-vD%~!oHZeB&k~v+? z@$9Bc+eHy}RZxct>LT`?;TsF}x?LPiF}CCTi|rzlc2Ra4`(;?|qQObKsH0o}dDl01 z|K_&fgzp6cIO;Jb<~N$**^SY5F(=0dnG@3OB9C@4caZp)WB+B^MXA_D9X!-U*~dLFQ@4wP zbw)e(Tx=Hs&YOHI{Q~Wd{=zBkB7<^S$oG7mXP0gXPE3B?Y8QLf8NZggG-+OY$)6&B zDw_XG$#2y8edN!QKO4>endCR<{C@K1$e)Ym|DEIqV%kN)N~>L*@$h`JZWp!Db`g0N z-fL+W#k7kO+C?7iVsYcecJapJ3!iQm zEgShhBkdxa`<$cS?SV&aWcBmHgId{vOFM*7?=s zw~^l#&A&zRi(=XZ&y-kgoA<%eb-T!mwu>jEUF6X&e6)*f+C@6;q9ocbZj*MAMY|}X zT@=$UN@x?M`~tq;-$l0dU|S^;kjnF8f~Y z-zGa=_|=6-in@O@Cj0plk(N*j%9 z$x7CWd#^Q~7THECE!-$`EP6cTu*O63t=vdfz7ZL48W-vcIzO)d*{L(G@_!Q9u-k4U z$nT6y zFlXlZzu++OPVkh&im$_M`N6wgj%-G(Wk)LL4TM-kpU+*#s8WLZKG&$6`HQekl z-*1A~=6ut^`5lgA+OQ@6w2T!(F5`bQ_WS{3P0=lV&Nladq5p`>*p7Y~6Ng*S-Eyhk z0D3Do%42HeVU?St~a0lFWZVVP^n(fl!QI?cSuG=1ST^TKdx z%2@Gig5!&EeV4z&_>VuQy>lIe2a=56$QZtjSf%v{KahD*H3#aa?e-EkxRQ-c^i3(! zp86AahxpcX$fvKd^5`{of;JK==Nil58l&Hx0o5 zwer#>uTbaBk(WkZnw590 z*KRq+AM^(j19S$iK0n8Y=ubd|k+q9Nhj&p0pN?o|Ao@{{K$ z&u``RNgjQUaCa&|UVyxSmG`%j=hb-wsaQzE*9q0EhzrW=7ul#<*?|!{JB=~Oa<+3V5Mqo=PwatOkA7nnI{BpYLchm!adB z5$UV^eA6nXA7&2JJkNC)8E~KbxOy{v>vf$M0&YY4X6X-99P47O*n7m9Ye*5B9LA6S zGtwe{JK=Jk3%O`pq}k^Qa-NVY-wd}qjcM)=BFFuLeMX%|Vulq{{S7h~>i&fL!Tp__ z+mL(0lD<9QK6i@t6E3BHF5_28pML!c<8)yC`O~gz&L`0)b`D(g`e|3{`A)b=q7S^D zxe~`p%TC97a6QKx!Hu93lziqOwo&%fz;&;4Z@E=$Q)3+VVUYCLdD(w{hW1vPZ+7|* zzP|l1bE72=71uk~aJ`9+06IYKc}w(shcubjmHF90(NTg9*Oy*TbS9lvv2`)Nf-iZv_1=qjSQ|kRwNu#f_#$JxA zXK35A>6|+Q`{+;b!$%*w+cv?w%-L*We7X9j!$YlW;OW0Rubllim3HNhzc~EM)>k+d zS!8y6@9^r@?T3?FcRH_V+>iWr=M`NaWJ}%^JMJNUhCX(hKJ&|Zu3U}b=)t>5OTkM+1>7xkN_EYFymGmN=r=>wh4u~xV&FNas7jdoP+P{Wt zKc({meb6Zv*PZs`q$}a{Bz~Uco;iuHWt{MS9@jfH0-MgCrVl?6NIk#(q;<`oa2=yReP@qjE!X&3u5o?stNt*HWBP=|j~^Hb zXFG!SHM{Kke_PgHF1h}nrmf+Bv2!{*KiKKt__|{y`shofZ^TEzQ?Bb?SABv1lDxl=}tozx34`i0>|*kL&K@`Sf+y!1*rJmC|4T zVJGcH_1BTWO4`lUw43#e$Jz4}9w*>V{3yOwWASv-Xg|_-tFbukN7|11PdifUOpJpk z;QKV(cEasRxV8Ipb#KcQKiT)rm*D!nJ)sQlbs3U=e9v~cRbv$T<3~An=YZe9kIp)*@zsU8`|$S{JMpvfx3tA< z?zg=3LRjzn7io#$*Le%HARbysv=aJf|bmNqLq2{${q-V_gT zrjR~N@sZ~Uo_1Z!ef8Rl_tg;R2&IU>E&pE}!!Rxgc^Px09?7+QpLWq_m-RjO*#z+! z*T8f&Kk6anPqWk0C_o|*2IM-&EI~BfKw{Blj}Il z`48iB`W(mcBe^m@AK?18=UJAFud^KH85wg>)^UuoFCo8djQt-nH&lB0G4`zF={c6= zW9;8Zo{plgpBSl9 zF~i$32RrdK@)?^bzKN}7B(`E+<%81v;7=HUR>~oCIG1UjbhO zUjv^2p8%f$pE;9za=>-Yar8)TIqN{uenLLD^lL5~;j&S4`9OkEDqM2S$ul4m#Md&; zpXhV22FZAb`?BJ)SB|k$U5l*05Q9(m(k{6sr-{9#pOBb(373BC*^WKiIXCgJV;}b= z;`J}!JDbZ;5$9`72!@MjCvbVd=CXjY`(-S@HyEx-2u{@O4TkCyje7AreT3?d3dyS_ zuhz=@rsU~ZDqKWf9eH(D-eZ!dW2ta4dG+MgTX|oRJYp%uWrVp??jO>JDK6bnE?=cz z;2I{jhD*jklU&b{0f)ryip&2dTzc~@E@NUY#&*FEDiVUTl?lO_ss#F#grMVI>URL& z@QoP9LGU1W2s{LC1-F7XgEybao$$L2$F3u}AFQ%sm5A%AC1WQU&vn!1L;^BS+Q9v8 zBlkPj%&3FhKUEAwKW4YdC!`+qPvHuO(MfD<_e~QV+wsrWkhxHIkpBIT=->7IbRdDg zdNuJ^f+6>E8DpGsrJX++NINev*WZ5Kin*kp3;UhM-`L0GO>n&6!q50qafcrrPRF_n zb@vcoC0O@szZ3l{xEJtjkxTjv=E^uvh<@(`=eYjp**%QI;O0o~^+$iUCzO07_sNg- zIT<7HE{Ew%$~O~q>?h*}Ns~U#ng76bjujjJ#Qqjj)dj2Eg}OWGkDYqFAm?9+@6`EE zhw)j6ai!|JT-Ti!U!DwHM_fRCD;&m2u8l2Mry2X1Lz6Y)jqkdZFIf{dL*$G7o!C9u z?l9!KQS$$Kogw#~_vsI5H>|@rjW7MuDko)JL+&N9yXB*OaA4c$z(#9+QTYcy2^WP9 zi$@t#M*}lC7cO+!z~#?Va=G&?mqqUr z&dbB-!_%&jfA=bOvyk#;P8V$I74b6y$KzfbweG>2J6A1QtmKiqKfoLsYk z>l8=gFS&kMhc&(+va#0yd1+6R2FI$8;#kIUGjMvE>*n9E^+Rm@KzzuU{3d+33m@*p zhnZ`5-e@g8U5`&UF7>JC`oGkDeS8(wng4_faswhSg7Ox~HP{3QMnohLl)%-B(u#_$ zZBYr0ZLw&TrCqhy6?(Cy)vlT97FTTz#Qqwn?#9)&q-zWGc3W!Q-C*6;Zr>8pZG*a7 zMOTwnn&0>P%z4h7nYnoZYa3InVof&Y8y4wcT&$IC4XwqsKr;kAdUy%?~ZbeVYb(E+7LXyEa-og?SGI@B#(8KvH#P$+slglQuZHX7rLWgjJJN5!*^yb z=-YRopBQ_0dp&Yw7*~31pnDEt+;5;i*y92l0egnI=qkq_X*(PLLBrqS_m?pK7eR*? zI8VUx`IQ%9ycc7<@5Fd7$9Uhx@m>yFaT#>aP|-cXn6K$Bmbs&ke-h*`eUkag7Wuy(1}x@T#*4n-y=Og7aJ+^FjB`3jAIw#I4&%ib z(M8jSZmjCTpg zdnx2O@Z)uU|7A0C6&&lxok#LR5_9_vj@8U%UA`0Ja_05g?t3}b9LG8ee2jSozmV_J zux;?;T2+sw-%;CBd|560!{Qg4Oxy^1w=NszEhxu)(_bnAhVi24Vth`c_A~ts4{JL` z{sqRCGjBwG_A*2K(~R7bXXvwu9tMwtb|T|g;}l)jJ_WuLhkmS+6Ud2imZ zs(P8`)$m;UjN1O`XrKCKdXd+23a~m>+F;T}$C)O5IOfZ|p60Tm1H;Xj**?eOwmHUW zlfVCnF*NL|#Eizqr^na!jDU_#7maw4^Fo^^b+wTH3iO5gtP3)r`rrBs@pdZE4s6hI zx3dWCz{VbZI}U%L@04fGHRYFjih8XA^lsiTts3>7zUsDpm`nP%V_8Rs@iTwN+)?v} zYpa(H@fO5wH_xUzh7H_A9eoSzB>G2Q#d9P5 z10Sj``dju7&pO1sI{HTYHDLd!+t5eOoAeLu)!P1r^2z=^s{PB-Ur)oIhAtWm{fz!t zZ|Jv={W}i&&9(ho1|K`{@!7vE+P{40pQX{`Y3(!V_C;TddP5A$P;3pj=KGhdK7seMFr;=7$*V+aiiNrEFCpH7!DK~+Q!8kzo zIe##5AZYyJ@8Kt7u0((0dR$NMHk*q~nYG8%Ue@r4f7g-w&Z45tn-_KD^7#MBMa9M7 zH~8;IHac-vHX=(lHf&Cnn7FW{n>u*r8pM6*A9A$8HT>X1=humY=caaBd}*oFf|$4z?VsR3Y4F5c^Zi0`X(-o`ScY~;WEiq6GJ~}< z(17*S)O8uq=mp663-IM;fj+wshml?$z7NJet-BcC?}Y4{^)CTof_EbE?~$9U3b*h*!wnmH52$9?qkfBL4Lr)Um0=)8RQ6t zm|VeHoCkC<{?OjjGx2`}{$>`9c$#Y#X|B=fGtizqV`FVi5U+=^9^!V$oyjQ_;M-q3 z6Y}kY`0VoScb@)V$hWnn{`Dr`@r&n+l27T6&_9giCbLevpbK+%(jMs30UwFE=q|L+IJOfymU$`0 z8N2xoTQeSMn>Ge=6lpu>9q@3dc{^-lJM3aR@~iE`sS^WRY2$-bbRFK>?Hqhteg6l? z@mKV}(M}%wiBR*?l^f!(l)MbqbaJe@`of~-{E!2e@;g~u<9Dcy$__bjvE(#}E5dgV z09SP20(^In{hp0@4lyCu^0=PfKAr!6vZ%d`|9>iLu8p7*$Gew(08QwN^WLX$&G9GK zh(kZ5@zv?om(u42eTgOSMSKvQb3=bS=NOCT#l?R!bJ^AD`3GUY8)4fduUH0tfbCDC z?z5{LpUW_3n5!VaJiYr+IqVT^BG>ttZ%P-zp5c%740`KImp5p;Sc5hlI)?E~dp5{- zNUUh;sqVy>BWo42y`ECY^>rtEEnD`c{iPqKkLCEf-~-`l!!M+R@EPc6c_3d{R`Sek z7`*fo_XPBFa?07z&t)EmwJ?@8nAeVZpb7d|f!fsc<`F*EgCs{&=Fq4LGy?6IS0{ba zW4%{8OkRQc8ss0ICB3q!?PSco=hey8!V{pgtml-6>pAC|K;si@5OhFMfvQ5n&;rX z!)j}uddRj(oNcplgulqNi9Af}A==V4 z#k1V?Y~~@L^IFL>)O+lo#B&%&+Dnh*+CJCS!DC{N!5^)buN>Lpz0@sf=+&9{15MX4 z?*bVZXJrm@j&>v`pgBRVLD63(Eg8qtw=0ET*KYJ#JJyRtFCh;^y<_zoWJhdWD$pJD zRZ&NVz8b$_1KJh-34BKIo%|+afp5WD60C6tV**`zQ>Hx~6UI^s{mOOqu>alx(22B= zvBG}^jl9r~6p%C0h5m2`adpzCapVl+II=N?m=*d5&sP0UogscJ_XC>xck&N&zm147 zysKyUYmpmcZQv6dsl%Z^p*z)<9NCyf%&KDx?U9TDI)iIvl8?ujsPEFIW-Pl=`YZE7 zyEYv$F!)5Snah#2NRBN9nZ`YgLEia^H0yoVtB>6b-Q4`@>T2+X(3$iiKSb8|v#u`j3|e>tHY9H`ek{pD@;;{b$YJ3(!4}V%*gC zHxzk2A07r>hi8$FJbNY*SAk|qYx*a&|EM#THLQae>khP80hw*yP*Q!xP>cs{gt?__ zs@Ed-HAZA3T(@HGi+WGv4}krXB_Vb6t)y^;IKNb0AZdkg3_l$Tf_DZ!y-xTwRPjzsbGD zcvyY^@0t0hEhAs3j7Ru6M;#c%_QVN4V{YlkBPQs14z&rSiSR4OO+Et8^vQ#m2Vw)c zadJ;7C(jId;TjU3MV{w#Nb5$>8H*p=+Cg)9-fZ$ac$_i=`tm#3gW(zZ0gd3B^vq;U z26%fGey2am?`H5jWAES}_3U7~7?bo3bRWmxF;007cptui_^6bx<{b7sV9Z>jl;1IK z?xAN*H~l$&$3O9PsxVjh+XeaM`UGp`D==TXQmfF;s%~AMaMz#MpTA;%KyS7~AOF7? zXB*myY^FH&X^?gLh{y$*=XO$`W*r-WG0L2Qo}}a59}j3D?Lx*|AsgCX{-<27HT0w1 z#UER%GHD#(7{KG#PBV@(3W7Mhi zpQz{J`C`tg`X8j#qXYRM1?0-T|9!`KKgQC(50s~Dnwk&LL)O`ikI{i^#>UM}-U0Ce zHkJFuCZ|==W^!7X{}gI18x_-7?&e=xwv?Xe->?t4B_k&iCuBU|U)Q@$<9OCHaNe8h znQKK1$UJUKxxY-FCG|foTN+RF-^X^0Jayu^v_FDDexEA`ygKQLm-_LrmcN_J}Chk9d3H*xO1LFtS>V~DIC;8iN zg{=mk()LjwMPi6S^yOPe(U%)9;3)d?*ZceL%c_3*64_^#8gW4UOxWl> zua;Dce~Z98b3s^pT0(&V^xDRclOT(IzPPA)liJ<#D@W(IlovhE`x)}3M zzUgrK@?-qon;PM}dx4%ozgaK!d(en+#$f4DdyMq>nxV&OM?sJIgP_O51?cg>0QC5L zKlJ$eQPShh>yM2;)*E{K688_5KVEUyT>IdURR!qr?g8j=X+QM%3qz0IJZtJuPq%R# zYRrcEJ7M#-bIak1@c8h zhG9Sb9?yT!^;>Z73%3CKX<&g0w>evNj( z%hdJ^#k?H>ZJ93={~L2fJ`?{FHc5ON*bAE*94szoPuS)j*tI>dYxIwQ^--axw9j<` z#ttv>JEfb=DLHwrd^F!pUz>3NZ5-;uc(2${_F3DE#E7x`HNN~7^#^sR8E?V(GHd8# za5i@cdJJm41~};-a=xgA!M=6;M^3ZC8!}S!XrMuugGFC6Q`46&nL6>(I{e>+|8hU` zr^ua_da0+EctfAIHR8at{|7ODrNGw`51JE8dZdw8!~6=p8M7Qpp*90_$9~CYYl}wi zD#ALtZ3}&c&(TU7!+v6IKzv%*p0Iy|#ORoj`wGsJKzkLpk6D>sQZ&ovpv{~|#*g;h zd$%HPWe&dL_VFvzbC2%cH1@9s_fA}y&K%vn753gqE7K(d+?x&au$+q^FA(^0Yv6-r zHl5^;3-pMrX$qfWE>!MWL#?^2SMDk#3(o!s%(vDM9fY1#*-e`~?-jS;{(*Sfkx}-S z`*)@GSn?S`t(La;Sa;xas4uGdqrQB|f!bTcbAQQS;8CFi{2Io|$J*X_))&5o?X4J0 z|6to9aV_NybHO}A2WZKBFJn!Y50;URCcmkb)CI6NC7|b(hCwAbu%%RfH z9Evl^LOtr_z#yBt??w0y_hV0i*fGqz=nCl2R^-lF<7>9Gq0}u_e>yV5{&RhUZ5EC7 z{A*Dw)|j2Pn|*H1Ub}m%sWsXIe_CpI(Z?dv6S{>M#Q4ysfjxl5VxFwEF+W}I$9P*g zrq8jTcs}ur(PeKp?xBy)?@)h?vpcTc9a+n8WKHGF&7TY*4V^YUSqpJ;?Kvkm3z<}U zAH;Y&F<-jw${K_w%vFV#dNFI}O5!#6Ju_L8%>3ClQ%kkStD%kOc)Rdf#uvRUj@JEzKL05;crcd=4I)d)nb2? z*M5@Eyclc8K8gKSOZU$9Q?MWV&HfzLbuIxeQ##sTjPt3mJ_SAr*1nWaL_WaJjB#!5 zhx@Fc+oj)FAKh=}nfl-n{sx}nyS9`UEB-i~Iq7lDuTHDxJ^X8a^;-CaT!RYz1=zXP zbnL8y{~ju9S#mFH%C*hv0&TuXzleV>k5Z>%u4O!!zwO{pnS<3{&5y{7;5qbdeAnvQ znl#RXlG--LfzSgOa}WoD?;sn@M}hyQ@9xFDzrwwY`wr93b@1G0(hi)GHnU?9&}pMTbV=ja%z z?FG-WZTeqaBe?Nz!n(QH_)I;_IYGaBuDJJqSKZuZ?h|~u($>w527d|PK{v3rGN^gP zKEcjl{Tlcdx8Cyt*(W&Kzw9YcHouehJq+BkPiw7q0)vT0iE2H3Q(uW3KmH64)y%o2rBVZ`6Bot;Xz$nGIT0 zDc@pkgE}AkMs~BtX5t(hDSKG6c`+&*=-tH=g{4PLy z3y_Z+R{MGAnOC~X(9S6D6@0$(#j@I-&w|%3Su)3mJ{WWHZC~9D{e72LH2ue$@V&PQ z-<$RQrQoThIFGRvXI4$*vu8thqg|Z+eXrCX<)`gt?25fBHI@9G&&2uboZDvTpG#@e zQ1fsWWv;5WX9LFsA7h5OzC-G`yq+PrF7-;E<2nXqS7a2Q)n>k8)~Q7vz}M8#`dQXR zXgff&=G%HiU*ev4V_(g4TAQDkR*m~=*mpkbH@L46Yb%%G%r@#p zcmI&ax9YRd{=SZNv*1jU2|J<7m_uu&+;qWbNf&u%%ee7-n{8uSic+=#MH#YCP*8_-ugP=t&PS#92=j-dIG_W3Nai%;-MPa9Kpbc6U^8U zv({h^Dh6{bm1^JjARum@5>s%3$6VVzwI0#fn*NFz*d9%?4Ae zn0kY`CdBMFm<5XYkio18FO4>4;EW`trk8qCK+%vOUbQp_C&b6bdMHkj@|8d=U6%qK$3euMd)Vm@s! zn?p>O!Td%scNxr`AtsG@pY-{KV(u}R&xDu?gLzId_ZrOSLd-IQ`JrOA8O#?$%vyu_ zj$$4(n7;`zT?W&tn1>C<4>8RK)1sIrgZbMKv(;d}qL{B3%yw^msnM(Z4F=~6o=Tlu z0eebXJb>%8`Miz4Iq@p}JML-Yx_P(R4;7D5>DzVzWBp&p|7SeP-_xI{y*G_>{?bKv z`~zcr+Dh6~sb3mt{9o9%_wl?`v?carc&+5Y8Hc+5d^}ESgip`*WDU^NV)1@{KZMt& zeTiMr*57~okC7S-HwJQjL;3`)rTYnMM$iUxFB*HYeb#2PP4Q2*R{29|-%kea)S&;Y z6-py6m2ta0OSH&fERmT_eLwCexIw#&>s!FStlYDEhe6|S%DcI)Ld7pZl8#Jvt(N8gPx;b^v>0#7(R%{+tR{~Or&oKlu}o(lPm^=Oon zOPsmnZ|~qW+U4^OqCJhvU;ox00m#=iw!29!~6QvQ}lJi z{Nko7QpmrQ;a-j_nX?S@GV%UvJ(K1ZsBhBn4H(~~;X`qK=U+^nGV6eYITd}oo8$fv zXiHhT3uiuYPxA`U>k!7nb21p~%ql`oYnY)uzDJI#EmO<0Z42kqNmGfNL087n+~438 z1$>hpg>|!{#Xr_~ggHbnp6|-ol*^Hr_HIs<_Du6$acq3cwkgW(l zAC)EQMADZ$&l=`)f_!Pn-{7M(V_np(r-ym3tbr{ipOELdJ}WsC%pYsKOh1JekRKjT zIX}moapm$e?|B{h`$@66WzB@-KQU)JI=us|DW=@A-a_B}-1&b@iqiTqzE{YshjGsVXtAEO zfNVX<=P-xf3;yo~@9;l$G~z_bLkD~}-v2oFH90aOvIlwWpC7TtgElp1io8)vrur;f zlU7-9Z>5uic6=B)aC1E^hY z>2nW~qX+tF^L4{_q^Y*~xk0qac`j5h$$ox~=Ve0<)OHnI=goz=dfI4?Q}R0S7fGL; z|8dW=J3qhk@XkAbd3ffC7Z1zcC)7@p-`Q8%49d>+fBfXLKX~J@!=HKR>BB!b<2B&0 z2Lt&Z@|WPCm*`IwLpPKIjF={?6>w-RUD6 ze?;5L-=Xht27Iul+l8|zU&7y`xv4m_umooomh48I!nm$f#VowbWn9H=)3FZv!^tyG ze;Vhf6whkTm+WrNUqinZ`RJ*;*&g&n>qhV?e30F!-`{Qb)WH9V)NH3nFLNdX`a*u9 z936x_axGf?ZP-}mj}DdbKlNz|_FIA;ldS%;`h_-#{_*LQ5zyb-V$e(Vj>;Nsd>6({ zx*$I$XS>k0@jKRgvffJlQRLX#mNt&}{|@`AI6nRz+31}6;P9f%xsegtY|gvN-6#I3 z@3o5C_*-nPV*MM(zE<%zXHCLgtJqwiO}kc+!@eo>U3>!Y8f__QNdJ+w#`KMFZmgU| zLmDXkxK2bL>V?_-J*d;}s={}W7sC&z0WtfHU}JP^TYjSpF%CVj46w?7uqP?_af{a@~|zJ?357)H# z9mm9Ved^;&n0E%9)yK5^gV6umSDaw|NYXxPL!#@`^p&W8$P+xbrULmpp4TIJZByp~ z-&4-!=|awy`D5|5a^c#QoW+YZx}ACIg=wNU((nU1%sxxh3hpKyzDYk2W0yTnh|?Kk z@tNvlHr8KTjl7|aTZL9ehw^NoF09*$uLs$tZe{%!*S((q2x3T#13K_N#!e^k8glN& zl;R8Hclr;s1wvypZuW_B2z7?UI^YqBPrxU%2et<0SnrGRCV7x^%lTw{R>FOq;Bnzo zJdd%H*2j@g7%NBk%aI}GEUaued?);Zwms~v`@NH2XM5WNUontj;SYxo<9!8PUNG|} z{loq2x6Nyqev{AA9|>%!$OXm_>2ra;eTm}+?FEl^yKfBX5b&+juN?9pkA3OcwI6!& z@cth^e>lDL&|$HUj-GL4%jz54xAkkEd^TPF?ZaJP{Kes|Uwd)T_jT=i=-I8$f9r7b z3BNeJzqx&I_hmy}M!$l-bzk#CJwRFFI7;c;IJEp4X@UDgS~|2SKug%T2rYl<$Welp zP9JUG^gHrC`&3Bhy5Gh6z}Seq>=o7a6b(adfq8y1=5xl8r7k+UvlvjL5Yc<;8$@*6 zF|_+;ET(y@+MPU@{^ktNIJB2J5dMI#3I4!dYn-hP8KWJ>xi%i+%aF%I|5SV{;N^bk zH|{}Y9CWB0-_1s@1$Kmc{IB*_-IdD&sohQ77=?A8Fsv z_oNT)?BmNFTOWrGrjPFa$v*n{!eIKC4{f8`R@O~*!qz+j|5Wp$T9cFZ;4|r20;C6X zL!ifg#J^HEg&G>=qo;02-^aZ}Zk^RXIx=GMz%bYM81S0!a_v|ocZ+$Z{eP?acyEC| zUf)k2xBL(E@xulB2tQtQCv{Dnj;s3WV~%s}?hQ3{j%ef8Jg)`zi1j&)TbR#c4OTCB zfjM7|Bfd!5m^q*f>0C$7C3_2=^S(dRb3Q+)=Y+W@*zVRhu=YUTt~tMYH*7|$*ek@H zk$jR%1Mq9$%LZqz%vy)Jb94}W3%0>Hcq@F-7hqQ^@IIZHc!v)6-B*}>*Rp;9oy8cw z*!b6+fBLFetH8eG`Sx9V;E$H2cn9kT*SRv~)Gj)o%}?W=!yB9NX2; zn11r%zQ>eC?s70=dXDwycy_;Is+-`??Q=}gJs0f@(AGleip9`pSr5D&<2_Cr)U`nB6@!|@ z+4vr@0^>}cA+i-dzHO`a9Q&RjnZwdk{Qt(8IP6;m-XUdid(Vl^^`=w&7lG?wKNr{b z@Y#pTQP+<9W)?sF0MGDY?xi_*Dso#_b!T}NMEfaznzlycVLP4$_Wf1T2ekbh+Xju= z7octE>*mx%&d?kPlmZtC-*Uk zc7Dq74%CjLlQov@Kt2a&z2JPwU{B+ZQO_-7WX)`L`tHW;>fP&twYR_yNnXa$*@fCH zLz~dE)G6G@y-(YOylI~19%mhr@m$0X6lfEDYRNR5=wofz`X%gV=+E`vC%M0LhL5$6 zW4gbixA*1Dn3MeZgSkIz&QyXP=27U_exi?aDXcB-a~_@e2K@SewVuDhtD9)+`QMK{<4bF+3)S;CWEv;> z%W?i1@&}SzuH*jln`>RHEJ zP!Bos>G*lnL!uLy>wwSW71c_v;}eYWVedsQVCUf{*|pFjvldGEpilX3?!z^C)zdf@ z$kyqgM`ON3)>ydag8OCtkbaTg-+XUyMnxljH#N3F9vW>)J{7vI*lXeWcI)2X+j}MZ zLTn@S;!gI@`|-np`T>1xb7EM7 zKn#l9`84cv3ThshH*R=6=#Q**;hO7N$j9RSfvdYG@JvMT0(03FMP~mD^*40+GSDi$ zWU}P@xt_*&HIg^$XU@~Zz}J(^+8pMp-@INw^UC){xV}!m^V&EiLQBqrOUqjaqGeom z(Qnc(IM0W%z4N}Ptmm)cxhGrB^=FDNP`v9Qv~T#OryajDx5l;IjwY;`z_&*{(6F?9 zivPuy07uM!;WKoR$W@o+Gbh$eg?<)wmhwDpFLUY@)Qx8Enyf|XS=yLCo^i+8IkanS zb5J)}*#9cjKF*OkzV==IG(MuPr_Q5pGkQ?s8t_=UB;Xn5Qe^IOp1-{wb$i5``hD_i zAdgOMK|jwq671u%x`#Z}*K>9b^qd&ayE*y4F?L^hu0Oxez3<`v?sMm#YkXL*WBx?; z3p%!lb1dsXm~*brh4NZ>uE9r$C4<%odO*J9pJRt z2R+D}Tx*(4{z=T6V=uGt2k^Vq@w^tfi`ixKeFW#;=g^6|M&*RIfi?ttJGN0Ta!mBA z8&`S<#?ziB`sR#nfHn^lX!DZSArGh+Wxg}?GI%ab4d9;k#hi?)G(D{ zT;*PmzF+GQ@>#*YUwp4}Wb}0CSBJKgzDvZ{$vL?>^l3Z!5E$WKiCdg^&jCw*!PsQY zQ~i4SR(4$>AFgAQ2J|J!tJ0qM8 zcY%F{ZKaIM_u#jP%w$6zm)}8a%hzuEN^9~n+MusPn=NC+eDPk&CS^^ZA9)VwW#`MZ zK|bMH4DAu?8YAq}N*&*l8=HP7qU4|1Nvwsovr%TqnkZ0c{_aZ{$h zf&R0;0el*zm9!JA&sLxv&RK$PdHNW^*?Q!cf!2t)x4grwW3fJp>l^2P0Q3NT3%OIThP0D7WU*I+{fjl}FMI3LCEj0j zIkl7YaYe@ggN@MJ+825?%=;40Gl#oy&1azozorYm5^H|Bx37I+ZH>!=tP62#(AjT3 zySW~1px-(ls<+9{Snp}&A9c3MplSJBUgqC z^#gh0R^bh_yM4p-YSll;8@G~|r%(q*c+;_Ius=3lz?eu=o*^UcK{xQ6=N(R)IFr6r z^H4do8_bjAcjdx$TGFWF4zGs&;rm&HMrfaB#C(|hSofWqte+BELJ#5Dvq`rm&oAXU z0bYrlS7=*WdYQ7qO15kb05dTKgQZ_ zJz^u;%J2+=#;N|a52Wv-{$hQxd{vH$A2 zZ3D>$!@ zVQi;z{$V!-*I1Zunt)^dBjr-t*ZGgkJ=&3ZZZGj4##mVgCfA#$`48fndsDav7v~K_ zj)Jq2DQklo|Ko4{_-`EK`0I~h{HtT*U*(P;bkh94$o&91X@0`KzBM}OOV$r?bdsy% zXe*%WMHgY7Sj#E8sAy4A98{g+HwimfT<^l1X$UX(qfNP9(%;k36VNgGy{&2b| zNjK_9+RqNys!ZKzdp_`QT7&xQuGL;m#$cF3fXx)2oH|PGxooum8TbhD?(lD#ToC9( z9iq9Q?M=+f;(TCF?$JK++_SXp2dNhLi-LiU8iBJ;L<9M9COCxs2M-Re`_@D z$-JUX*}H-^XcxGyP22G9dN~h%9N*` z)B7G9&tkWYAxFEqO+iXcJsYMToY|zErAoC zi~jOTedeYa*GnG|&zGPs7`~pw*NnYg|2bkG!IL=uujgQy=|5rytRM7T!2KCj!8>@~ zPWmD?<2ng)^}#;NDy-9b-Z^~Up8S;E{NtIp^4@CPzcVF!GG+hi4(y3VuGYVWZ9-@8 z9?lo%skx~88+y$;Z$6vyu_Jd)cNyfczOK~&HP<6RU)EYo!@VuESI$_O$9RnUrje_K z&nz^cPDE}7dX8%hCCEpV>|Vp1a9zsB`3TIV1UT%2S=&8a#=+cWGseOGH0D=!}|hiu^v68sHS7elA0-;AKc5fNh8W2>kHe> zJag>KtNycDe-fDh4|~vsMZ;=)o^keiG9MV^m`l3xj;YVTTXZ^d9he`s&zOMx?=A6s zk@e|CH3z3JsTrj?cl`bYpM!A_&l(hWtnHYa#iUWW>2EpYpuoOx@muj5?Uu}CZhH4J z#$g+#RyS_Ax_TI%M|nA)ZQ)rw!-X3cap3k**zK>TNTyQ2(v(B}q2|FIZPZ*NfzYH{TqxALAV@M7A$2Q0_A03UULhO7@| z?IH9)&kXcoOM9t5V}<&;W@SAPaB?ioqYmNH|D1@cSil+3j5Ov z|3P@Sy^8Y|eHT1zWa|r%m&VlO-P^O1jrLi4O?Uh!r;SrUZ$8W2 zYbo|0^o-n-3;Re~as1Q=xAVEqIFavbWxg`fXZSoE6K(NYljGGmq<9#3zBrWkL(o6e z^ZL8DdGDfjoV_ahK=D2Qv%mbK4WNvw-$TDr@@@E@vch@P=gGPs_yzCHXzeP)+#=qW zXYjk(_^zCP_>A9VZt%N2Baf52@+Kz;8c-jSzHvWL>=ovNwKnt#iGln{egit96+T?h z9_Gv1Ew%^$iLqF^fZWG@R(S@-#krEcfj?|p7`yTX=VcuAj=_m80NqHh$edzcj=1$p zh+kxn%@fF{ppD{yr(|zBpSJ^fSJIp7FJ~@2!M0C+aq~59&PeKlM50jl7GTx2z+4%6z9|i#!wj zB=p8TwBh6}`u^?co9xMgf4$ed|5R}DTkyNhGdr~A{k+%y=8g%^2<*r7?v0pFU033m zn$=&yeDkboj*at*^R{fhnLJ5b#&Iy89~nm<&pG@3gL}>sby42$^EoNFF`d#Y<@({0~{V3uAsH!C739`PLk8q<#WCyLIIk zpIzJ5dbr|)-#=V2{&$1hGlu(gJ%oDhNuFCAnG45e0!ul99QM6#=kOf!!7fdYkbbyV zXaqiH9{Wf9t|0CD$m!sIJ6G_nxIcorP};;ivCU`LCdR_&+h>Vxb><@vTT0o6k9%l# zZBVC89sqCg9>(GH`{Xm)^mxWU>?ijI975alSGgv4s0^RW@qZrv!(Vfshj=s46QCRQ z2lt-~5A(UXy^G|Xk8xdMXkle2iJX^u3j}T=DvxYt6n!vC|R*h4nde>XP+2 z)F+6^+A@u0epGjaHAzZKo)0Yj2VJ;_i|=F;8~-b>2504Mqn}FIq@L>f72c_i^JXXU zvlEMP53HW+M0q3~NmG^EUbOWj+G78INB`Tom+Kc=&+gVwF|K)iwK;#*;b-Y9=>9gu zmYkP}F9o`CT$Z+f?rV20(GT*X`#ys2UJV|O@$cK}gs)qLC*e1GQb*>Uz!%=bpNhawhMy2CoKjWcYsUGr6A_ zW28YmBX8nAgL#aON8rdyirM;3DG-U&J`! zGQ3Y?#m?UBP|-PxYBht=$?j1oZ~!??XaJCL5|Ju zAxDN-FsK8@`tFsS!#&yQk_%vt;WL44vh&G2A?*jBMJ)4$+vB;v)G){x-rckDWW2L@ zsN_p24?!Fh)=_e;7deBrOiS9|i8h%xU-YEOn}gpx#Q!*7b{o$n#$Jw~4>&s}jePAs z%|T~tTRTri4hDS2HCkz}aU9OM5B6uw0FAcPz0LpFmxten7d8huT(tWdcuV)RaU6U< zrOFB0U!(1#AG`3|&eYZ2yO3`~o{x3hty$2eF;}vCywm3S{4QT2bg_N;F6PVhr3p3J zL4Qv7FGqj)T;hI@&&W%)E-=?JhS$=5v)m zdYL(-^q7Dq^l1)Xi@FTx>4VVE*!$Ib662WMB=}}VZ{*$^p~t@82Q}h5@jZ1)Q+*N6 z(wdCVQ@YJqTQW{xFwT}O=*Ow(hn)Y5I)cFVt%T0I0`Hw3X5z8o;FT%hm8sCj!~L%M zl#iMrL16myq9o2l-(I_+h2thZO-otik)?Nzbm8&^cFu7wY*= zsMxrn=bz-bF{jL%wO-Q- zB-ag{`vT@^2WUR)V%U{;A}?7sgzMccUi;f3HP464{yz3)J1`5KXG{O9med6Ea5d&( z6>QINnFkpc?3T)a+6ww~?JJA?PqSaf_S2>vG-CywBzNq60Q9-u>-jgxFLc$oE{v7$ zyO#cg&+tB~o*hj?4$R7+|EHt>^{Jr$rR994RoTH9sW6ihak|Nlh*g5L1-MARzS_@pdXq+!OG@cEMxyb7G*N>I& z_nYsjPXxbxjC{Wg`B~yA$MXGuj+XD6d5$c;=UI~S{oLUDF7y3t{r<6&1Ycp=KV84C z3BGUUS-xn8d3$N+PQ0TMvaRjYZ7De8CKDz^0=E)g9rdFYid5{ytZ_Hcw&V~OkLqM*bzA;y#X*w65@KYq$=Y z=GuDVoDS~*^&ewbK8LZK>Zu{c7;7$wF}Xj1?++_2+H_tzUE5QE-z3)+U;98Gf_a$4 znrN(3(BGZh{Q<@;pd)4d7W}bqje%|t*5MX#{K2}9*narOU8W9^`*FQtwLK5L7j0mi zTszb6w(+}iGavJ6dzSM#;0Ku>(Dn^pYrGB~IE1<7dKLZXX4qTW0n(j#>L>2ik@rqt z6tuzb_h2tI`MVwM&trRLURjg)D_)BY!2RF{#;oK)?g!#?n3IvVF~9I1dj6C4665*7 z2XPnz1JwzQ^O#UGxRl;(N-X{)Y3(z%P(Rw2AX_q^6d8$$x~;@C{o4b$!E@ zrF+Z$`K!XSEBU^KNmsK5g?WMzc(>vZ$2a31HLNEV)rvm<1?8m5$Y7Pop!Bf|G~|32 z72|y4Yk&a_d0w%|Am)qb!}a1n`>boNk#jn6Km3-K%+2HdA;|mx$T_!wXBG2oY2F*j zH>8Suk-O3gpY<{P{YA8M2t35NOZRuZggNH>#~+1$*aaEBp~&m`@G$rg=nwNkKd1a< zO>7GqGrtqs59d7}n0thDg#f7jeyQ9$M5U|crMr@G`;%}`54cW zcW$5$Y0z^f{>X2TUGY)qe=z5TH5$}j*7lqLevukR=!;U?^i36Rty{~|(g{-gc-X{( z?b*Pm+YUT+HuoXlig{(8t%^2y0NH zA9sNNwu6_pQGP&MJ-b@;KIpoI@w215IrroNm1*iI=A=ODyI4;p=W!Sr7kY!%#PbZI z^}$-c)!&>8`YLk%CFuAP#-#7JnpF(B8|6WEFTuMnhXj6W9(vsHkn&2!Q16u;CWewV zJMd8&yxNsQ+nAG?h%4AP@(Xpp$OxWm*Vw?D+Gd4^J)vq3vbqN6)Et6$X%i@W%rS)A-t(xQ_kQ0T@ zXnh&-*$50{RB3N+Dq~P*8?bf_>;9r*)L_r z&zMJK5HZQSAUCwf(tpfRUp$LiAlk^*j)g`i!e4=|4(o;%nsXqbGvR}@-VC}nVm;og zE%LV+oplr2C_@|N^i!c9dp#d<)wX)!5!Sv)J&U|62)x}2UTr;;#XKOk?LwRzdEP~M z9_PwDZw}fJ8N6HuRKjo+yH8G;smWMn--F|4r zrdIkPT|7G$f4frHC!C!w^Z8-KUSl{O#9~}0k-2N1>C65q$Ovgm8K8U$AF7SU_%~zx z^mF%gPN|l)W6S}@`FI!3b^))9YsUAyzqu3dRVoT$d38$lj#pPz3yn*Q{7YWz z-Nt?j4ep!h?;jrMA>>F}me$VlH@r8rgI%~^>Bc#zLm$Y8cLUQ1zvD9KF3L_^-gS+6 z57sERV~tXuJrU2Q-0C>l|IMlg;0MUKWc;WZL!L)$IKC$ydZ`t>2)S``M7iktjywl^ zG|%u+Bq#3Ja{4}$3)aG^56f}<1$+SVuJrFm!5Yaj)G4JOM_f^cd!QHT3t1V0j%58` zpi89&OZ@K$Jr<)rg?32z2eig`)E51W^y9c-<7gYCJ_S4nd(^O{ahCt&+oL{6U;VzM zaKGFBRQ-OezkYkO{ZFyq&fJjJjKA)Ky&`QR^O6g7HFXltq7t7UbY)(=uQT@E#(2TV zhpe-JhW*+%Bfne|qHlHxc-ps-+`|c;q>sbCQD)k~gRXvd{Xn&0JR6R-w*&LF1AcxJ zbkYv!Q=aD{`~!aCGw7Ey7p8p+Y_5^-KKk?r>YIXna_uU0{NVQ@9nG0~zkN^gOuaAA z*8q)ZOIdTmnn2mp1X?~1yxPXdnR+?)@%YYy`yQVQo}iB@^MmKnM~R%NkRlJ6bFs;5 zz)Nh6d&KTxu1J5CdDg83p9A}MCwTxiobAWo6ASwe-xcja_UT`J!l8ro2mBP|#+~!6 zopEd5kLEqG&p6KzTEkb7wLy&g;}KdH-v7?AHNrV{X$+F-jjJlyFHH_ z-Ft1um^PSyQ=gyoP~R8!rNO&2CuMf z#yk6+_uBl9zk$bacF|k%UYlCd1~g?&IMivW0N2k7wqA` z@J8_ZQQXhiYu{+B>zp~%ucDk7{Tdxh-_N)AHx&DWS_4E}K)EL$ij9SC>j1w>Y;I(P z{;l}6<@k^O2rolM7?G~7G?Cu-O64M6W?{0;w2_F+QL{cnAjv&atK-OQXE z&(XozPYp}GDT%Y65DPS9yh{I>cf)sro)Z4Tm}Q}hjoYxgL8_r$=VsY z4|uVEm}}Yq>`mH5J23Mx@HgT|nN#fFhklY=74_=r{B3yj-OnYz3f3r&<=xM>|3`Q) z^Ly$a%qh^OeV;;#{(^H>ULWIl1N(pa8po^rEjEr9e;M|LW9Q#s-(lU@$2k5_piMgt z%pdgtWG%Y(V!pSzG+w8G0T%mkBzC|$ODq4FV@5343LS$#{Kt3fH**D%`-MiFZ_1x5y7`Xp_KWN#EDeInJD@ej<;lZ}COuB^{pXGCZa8{SoMT)<4jO@4ggI-^usb9moAo@m+Gq zasQ6fj_>{{nd7_vx5xSXug^KY=f8W=vEL8h_Lyl8z25_$GFW#Ee1t%MLk}eU6Gv7V zr@3;zUv8})xNOC!0MOd`ToSH-qQBdW8i<#=EwA! z{_dUF$MeVZ@%{Ml`!sT0=?j-&jj*;=Yu!~3$~av*iVY6+9b`!AgVVSdc{k)}u~!9X0 zIS1prm|N$_dDSf^t7xND~E&msp?>tY&a z`uk0v=Q$XuH&dCZoN4Ji%fUos_@N3ru8f0;$ncB`+vkZ6CL+U)<(8jEJD7+JPYp3A zIGBhGKk_#FtRp)^IUke^L%&hys=w#zKj!F>!(ZQS);*C|ZA}+@>o;kQ8L!9U9nvXN zbH?k8w|=j=7J5K;if&BLv-9(u)5i#=`7FzKKXfocGi|5#EXyz7aWFzN#r%A(ox@fK zBQ#UYmbsP}S{zKDG;?eqZFa(T<->ff+Azjw%u7mqhFF&CKA@LR-;?z2s>i!EX*aH$ z=O04+$hyyOqc742^po%SlyyA#@|{h%5BVU$Z<=RoB8PIXYh9(^`+&I*v0i5$SmXeB zzu=!t;$Jm*Vjg-hh^fqTjo;zq-!OKriRidEeylKW$DbX=w^#Z*l!jizn7ur%B++BnQ16}u07lTfuUi=G1BmQrAZ+g-g>sb-_+bH4X;srAsQCo!^<5S z{vMzErC}~y52XB&r>OsJ4rN4O_up8_nhR&|SDrO3C!x;A)aF^f#J+UNolF5=P7U}H zycqDMxyHW!U=6S&_yI(LL#1GKcMR{FfAu9AIZ2_=OJs%=yv&)ScnCD;_lxO-)6Rn@QcaKku2JkelZe zk2RO39Pp^Uv-mCZZJl_~pELaZiZ27cp6xsMC+A0b5cGM<;MwK}3i8yYs9!NPKm+mA z$bhHbALpqYYx~EeUVFmMBiUg={g~yeiH5IGFPEAW<12G*`D${EugtaOt0^(QGS~aS zXJzC&!>1j%E+^la>mu;eZ2oTeG=ppK6!|v2B;Xn9V(zgKUGdU<{|CkfmAHI~-vhp! z*4^2O`xbja-CA9^w;+)HGyH3Ho;*#!Jm4*u>W{uITRlkbOs?@xh!5&C2AM-o3m@w3VIz~>zNb4mOk?>BN@1$>t6 zpBlE`ox~qj{5;^x*uI0Giud<~^Cjc`jlr|e_n>b{UHvZ9(qD=Cx?w?WSZ)A)ZEE)J zx+12pv(de2>URYG)TBVRpfjiktSlIJgN`dz&>t%+Qf4#uf;n;U{rhk>Ors&;|>AN9y>K{(M`eIf?Jx z7CeXkd~?C^JO2DYayc%rd0)OfDwl8G^ljL?BG@~ewUjEhxxzp$#~Hai8FG1YOfJU< z*OM@QkxO$;ITg8_5d3cC(p+Dza(PPdJLOd5(p+!Gwb;N@gWtE~T5O=X-iK?kffIw@ zJ8%t|+zH+jJwY1@-)X0{(YS_O?S%g#zr#)*g52zcu953CxQ1MCzn5HZ#x?lf>YeSl zh7IF7xBR{j*RWAm?;ODO3jVG(8`rQg)<(aAYuFI6(M6D{RYvc04l#OXsy$clY?rU_ zyVW~o@NqvRzGGYFscL_Jgs&?7j~PDUI&fze*maOw+z%h1E%RJVuG;7N*DIcSryls5 z0=($8_PAb~>tCaI>YW_$8=UrEj`gSREdO%FQ|~kZe~W`p*Tni?YY6B8y$RU z5?`Zu+VoD~?{M(dH8H(Y>CaI-Z94Wv<17WCkBrwl+3u%=&jYbE>4Kl2c-Zt#?04?E%W1zf*?zI&VbeS7fxpLTe`~V+BVRE31~$Dj2mHNG`?bmT zUs3!5;G2No=CuD*vi<*1{6gUKz(45VU#^Mi{W<&}hN7wErF@fQJK2K-kX{3f*T`Y^zMP4UZNS5iY^SH^T({(t1$n4PQi zcPf4b?N$nQE5Hjs)WzrtyZA-LucX}qJ~cLM|Cw_W{Ol|KD&U*gzJvdDtpD&E?o|9L z;B#z$T-bhkVRXFhXZg1oJjZw%cqwidp~rp3%5UEEon~Dtp)O&KGxt(?*h^*Cf%1dQ zab@5$jf~{D+A@_3{p*cQ9EQEH1LU~cGPf>_+CkEAUkz*To`Y6Z!=HG8o<{m+=W z|I{(k;QMAwVz=_(uPKmo%xl59Z=dJ?qeFx12BJZ3fH-AT;18|Ad4iF=(w{p{vHp;g zixPhbamwasoU(-We8wXCPNoW%?q%>Z#1BPGUk`s7K9SI|F(yOMH`lv#&jAa6i9WXA z_a^bzD85jfvTRXQf1~}&6<;V$xo%NRUsn1TD!x#ha(f(K<<}^_P@Hn#qL{vf{a1W4 zPHD;Pj`Y8UIe?7flX1$+nU<;c>}1%tmMwK>`x6YFH2gL`Cv{RXPU%x0XOAM^4xJqM z-dKY`JnZJ%!7DA9=R#ijVw2HR(6fEy+gmc-i(Ffev7O=n@;-AP=RO5qfp5_Q9q@|3_%}F^7iJ21UcDFW?P@PcY2!2~y0hkHq;V zh*zLfX!j)^L|!t;t#c2v(N|-Y2Q?>&>ysJ(nA|yN8sufbqiX^kFS+whvu0B|-mVF~ zw!`63{2u5t#MO{1*0&1JHJshAFj^`+H9O=NO-|)_uO@FKN`n1`gfz26!uY+8p z$q}r_wb*cTy&2cgn>J_Q;~M;Ia|YXS4W6|*gMGLLPfE_912lwvcJlfynU?ddPAb=V z620#D0G;6L#b%zKIX|kW5u>lwc@mvua(zu^-JmWuPrzTTc*;x}@E1X56u&8khaI>~ z@wDk#;Fnu`OQtKuwD^|H(8ba5qWwz6GY8NF z{8bLVG>I=&JaPa{Ip*DMp8n;`-eiBqD}FZc^~}3ld`o80V%O(^%%A0_6<n$V8sS34mKkSoDI8XI%_ z+5QtsBgT>`@W1P;w8imr{I4jUGEfFQWYYRJuf_3a`wuFfb~!~mU~385G81uDe8eu# z@$a#7;Q8d&q;3oMlQVbCaTbixQ%7Nshk;%~XEP7QxOVL^?X~DG%me0#F_&YH+cJwh z|9Tlm@vbpC57aH7y`2X`E6fAd(9lMhj|6Ye_b*pECGBxrW{VfIm-GD#6`!=nFK620 zvNqSRQGC)Kznt+VME#>W`2UJe+T)iqIDaDQPtEr;2G21+jn7HhaqMw!fH>2vhkbu} z%qHcJqkdtg&Z(K>xjLujdI_#EuU7Wf;9Bev=6o~e3v%JqFSKPI_56#?oZs6R+Hb}) zcFyYqKS}2NIWOwtLZ3b7oBKHDIbdP4c)#GgyqNww$KS7b&Uq8?3mm*x6m1_l>!%b? zdy)r!p@YZ!d7PZM_=GKr=bSgu2MgAkwvR(x)G{j;!_Dy@Q9NVB9A(?qBOuQe>kr0z zzv3Aq*0X&FkNxaxU72V<$G_X)Nt5{ndFm+Y7mS~CR-C6&1bT9<68V4qz9UFk(13pAy2-2OB$9zIF&6c=|zQ#_v%4 zOXz>d=hFVOil-lxV*6MVR{YRZv_EwV{O=h&F*jlCNgEkEQ!zJyzC9_30oGk|9Qu|v zQ{=$#@hDu292h>fHq=~a@Vl#TsgG6PLZ)K+7H3JOY@D?~`J6VkO!*u!FX+Lz6nx&2 zc}L2%nV|Dr|5l}QQs1^@KALi4UhwUF{|3bu(zmq{8z}fX#V7S`OQtb4kI3U(srZ<_ zmHvM>iC?Dpq`pOb5XaB;7b(7wzO9S(zkPv!rooe@KgH*y4L=HfTO9Dzk1swBo+6L9 zJO#dp@YEVyi*7YMwHengPj%p0d8!D!5w+nhnG=Uv|9Quk2DIVeL9E-kvI||h>glkK&U&)t1>C$-{zYtNkYwpX8~w%%&KRV7y;Z zd?B7{OyVCjc=FT*1MyUr{`?@;U{Xin+h@Q7!b65fmf+g;?Jvi*`u6XI-U0tOzI{vP z{-M^sPI7q!ey;WNFgBZOdo(^LbNu%y&62)-OJ+aL9FOqS9RE_qlSk?Uon~`qKab&| zN0urcJkpeFIXuUoW$^67kMKFE7aZSS<}ezQ z{aIt;^e`*akA2bchnk%E!Z>V9JOgXxF8$l9{r~#wP#1Kj0=;2l+}b$4(m$wp&adGG zgKx{U$LNXnf2?@SZ&Ql%WnSj3uFsu!a z)HLPeHBDnpP188|!Q*0nu&HsPT#1~S>ovF*IWsj*n{h32X0Es6T6DFkaoUG#(beX< z1J~jQn;IwR@4yc>*BM;H7v6~+koe_Ga1GnP6FDBaz7W^*_`9ibx)|3B_`A7&C$1Or zcjMPzj%)a_w&v+wxQ3rKr!}}m=9z~@ z{a(}_Rx97p&(8t70e-Kxzc-1mR6O~*3HVzqzAfXO;^qKgOV0F56;HjD2Y#c)w`5)e zUx#sr;KwVTwyhKRI~@F(CnWG`#naDELC@wK{0%3#H8j%xo1ZguqMu&|{HGm!OA`OG z;$hotO_I{*wG(1-&6)nM6%Rk()+8x@#_$CFpI1Emd|Q*G`1d67&nUhM_$Ks!o74Zh zhsWqs)sQ z@gGwBV&JtVN%3{zdG=Tn#(dTI4T{eKp9Q~s)#=ZD$@aG>{vzP(f&Y64|4ceD-dh#F z9QYjYPdNDQB>o1)uK>OY_-{D)8O1SvtMTg;zY_R7@c-!G*Cz2-D*h_qJAvQh;2$ma zmzh19N}pwlUq!oNYPOV~uO;z|6u%nyPS#YRW=rvlMkM&>OvTp&pJz=KYOn%)L*~{H z|LbwwYggmXFnD7A8K2{JsW%_1sT!nh`T@?>bL&eYwkbDU*7CZBgI1EG8Ec!L`^XlM|xts^ahFdMvKzv3+AJXv-GxcXK@#*9-Z(u@$s!i}|~`rmYg& zWNZg*kJu*I4%iXqKY|>Q)U!5Zo*d!tG`Y&P*q;~HoDB(WM-%cOR~g%}sl-nk-V5gX zEPvab`|JfZ`$t~VP!$_UsOD8M`nIP zPQ}x9fd5$QYw;fT*vI;Ro8oCZvcRvi_=e1NBdx4ye{NJfZAU%uu&Z{wj{4jY5Nx|p0*)*bXcE+W$vRw0rlpKc_1mw!_wID!x0}{v^f2cG!AN#V;C_=+7v{ z!*(>)Q+J`hQ}LVdo&)2vYk!Iq58Kg{rS3X8#6L93+G553_g#jcVLO`2*uH~r8ebtRdmu^?xXs#c}HT0v^t^07j!qKex`{mUIzJteiHoJlWaaW;FT)>3gxYl zkku@()J?cw@OPgS(=}E8+Z9jUS`R#Rlj5H|DW*HB{Bspg-I@cQx=HcvIP*6mOW6OX zcz%}r0u_%Z2uI+Q@3^kPu-;WiFg-EtUn_ZPu-e= zpPI9H?2k|O=Z~K?vQ6Du2K=WTd|eWMSn<@YS>W%o_=e2cqZ9M>8^u$%)&qZ!gMUvF z|L=;2Znb{Dj`#M_Hvgma{1?STw_3kn>Axx7{~G^0iid8se!t=yWB9sr{jVz?y4Cvq z+MkBe34Yt9c<5H^_iOumW9?)8=1Yo)Znb{Dw!b?`pU*2^bZcZULPO@~qiz05>GLVY zuYfM@r0%wR7aB6JCHd#$ieCwQp1RxaEojNK$NOLDe?;+D0pG;-ExsW$2JiN9Z9j6N z?^paP;B#!>?nMB9CVi228$5Zw7oQWhA-)$OH-K#@32eh3vQgVG=)HRx_-7+c-m~7+ zscxF)7n@r3pXnYv>NWgs^Pb2@*}As2Ft;4c)4Bdsr3>|1KFF<_y0(VQJH|xkwQiw5 zM(KiQv=*StK>HLDdB)URm?vI?af=;9JpgQ6EKdv{a*SP{x<~1SaraRJ(vaCYCaPD! zM{S=mdW(8J3qO7~^@_|#L*~&W{=15&UatopcGTvHy;E&|M&<+U?^ZnYdMr=ekZBte z^I@v|M->mf9?KKs49~F%pQ_Q|*@ufce~G$eCr>;8Pj5BrM{kewbnYnXsm5Z?z}L2> zBZKSFwB?w?xtK%vIZizlbp2Sn_kWtsA$h*Z;dzYBR$Ca%o{H8|3r ztCRiDD;~a-TZ1F`o8$ed^1q>Y_)<;vY(J>M5xi4F1f3!M`KrOQ&sUOv5;E_p1M|POdXILn5V8#Jas_R zz&!PK#ghl~1M}3miYE_t0>9Yd*#bOuhT_44ohkSRSqEQ$r%qEmd9af_6`X0%7f+p{ zc=BML>tCkMj56Im+O=E4gCh){bMOQ{Cv{kCuh0OtC5?B%a1HG5m&E*~qpf+j`pv|q zR==586gn%=Z{`~O7R1gb7Tv7+&0PDqhK{qb>2_R8>}>Sscia=eQbKM(jaw(sBz==XUB&oTZSpOgAMR`Z@4AQmxx z+w--5X4#@FiSM9!A6$#?V6G`Eu55MS+Lf(WaP7)g5oAPVYiyvyqq23f-Oqfl*~`d1 zxkn>g&wc9XWNW|T2Ps=mDSj}rh4`RF@q>{q;2%-^U}OvU`xQSJ*#iD<#Sc=pHYt9P zvh`8L4^p<)Dt?f%b+y5hCx#71wzA%VF6?J;_Nl!kXYmBOdc4h3{#N(e(XXio-|JqH zCfE?fxPmWW3o3N{^lS3KLf&|P(0*LkRrynO{J{JZJ}2$Avri3UFIfA9bFM4Kx@T)1 z<(XLA+aWQa(F3+l)m)Fo?-G+38#@8l66c$1p4B6I#l$EjxE8&FwYE$F|8d!P8tBeryj}2 z{Kri(8-(_EDL&>uE}>0qOya+!_?Z7F_`ON|=M^9G9|hl@#D7ZhG5=BU-o&W?ShvXk zxWSW#Wd->#=06HAMr+uPDgL$liVQE=eMN?s$a}(T<{JDI@S2H#=PIuu{;g47!+E*N z3qK!kW0k|YH;y(4zgwBE$Na*MW$0Tw`;NrF!`#kOT9S8iF5o=CcqbPB;(W9T?%D?WQ|YG^Pu|Hf zmay?`Tc&n`D_bq({WrE4*&^>m0v$!|E=Fe?)f~ej)z|Kbia%^p@7Lg5FZkt7}ysRDPju>co9& z129hJpakDC!S%mo{=cI1qi)Iq3!jPi3x0o$e&Ck}6;J-E2Ohj=@h?qqb(zrn9>tTt za=;^|vH0<)xcM94tNfhe!C!VhwLcZ7#OA-szeVxnuPpf`sC||GUx4=&hq-;UzsO%_ z@a)5Q&VQozGJKzWupcq3U;a~{4=sJZ`4qbk?G@d#M;*}Q%qjZLoTcFJkB_m+KTB!C zIZA=%@RNDJ;JyRr2BI9%(H^TA;s}t|vs z?mpG7pIxeZGW)YdkDMB_&vX5IKI!H}Vzvme!~SqR2DarKKd1PlEo#d=A8Q}@TMVA| zt+b#FMQxEoPx3!}HRnA}siRn5wzTWRce8OPXp5NBU0)X3z82E<4c*sA+IBj29(uw0 zZYScM=Ps?_`&KKhs9&?dy1v_tB)(Gd)UWlxyT03^7#_Y}sp9F2#eJ(Qllbw9r+zKt zx`E@1-7qoc>&^Ak2G21+j?YQ`=d3TATnhaHkp$U6md^dEwEHp?8tN1z{0znkmD z!I@2XSBZH)iOj*KiFR+%7u-3hcjf?mWpXHOnTKLyh9B^g%>jSY57<<249>fb`^t%w z*4|c;@oqaN8MZMg_zXOmkl`mM+FIdj+%aNYHb&^gedUJ!w<9j2G-yj{+Qi2 zuo>6z%fj_TT*E)J`v&&m8h)BxKkUFY{54zKy4Iq*OIwxvfXoL_ps9D;P-$p zdA3BbMke^{Cc8RY=Jml%jy=xnktz^}G=#9I;MT(ydd=v1uIQVCh_=SqE0zMD?MhE}$WLI}f z`&Ejc2bcXEBz!QY?6 z|IFaY^II^Mq+YugXHH*(_wWoqs&|EKs)^|~^nK9hPcDJpaqSiLnCLZQuQuaa?bY^# zy=uv{OtCqqD|Jt1f4=CMak)L;{~M)aA$wIoZa<^=LiVbF+ZF46`X}{8adyR2{|BZ%_f_4uC%PGPr@7oF%pK-Yc=@`i zQCWx0JzK|6@A<#L=Ok}NeNiVClJ|5Ur$3E%4~1j+&S1vy{M4vE#5|;&F+4hmF_1Qg z5ECTMHqZTO>Pm(7Z%*}h%6miGT(^#v2)dFed?CX%_UJii@Ey2Um3lIIgaIM zTQXZqT>nn&?za?A`6>(ILX*?Q`K~1~ey;K#S3Km)tt*xO|2*D)rT=AvXPcLj?umS+ zb0$GHSl50FW3iS@8ujUhrt_4h{qg_WX|XX^`XALX)O&u(Ab963=l_OjR)&WRW(-}^ z+`O{rp{z58m+<+|F2fV2+j%&kd+_?62b_ly^MN447 z3OW+8nbnaEnW#?18RKgeUr47um2vk4!KXOGzgqEybZU1d8Uq7=nbIF)?7`=Lb!u*K zd5zc4ISxOObK?4moDn#~74t$X;W8#-~H`Y6UWVNM$|%TBX2 z|E`=daE3opX_)jAv7aJ|@4emF$)ul%T9wnR4bb*qReaJ}xXDKG?ByT>^T< z$=jl?w#=^gRt#qBcb8e&l(E1@UEjypMHiutSn~`4{(S!$XY3~oH1>gH+2pfQFSCI@#p2@E$tEw33$uZ31~V*Q{+5d3Mgtkhss;`z`q_lmEiHZ;;P&_I^t~ z%gKL9KFeHh2Yxnnx|9E^V!p{-ci{JV{N35xy@0=KJ-z0$ocx#Mv$Vcm^I4{rkNGdj zXPN8mxL(foO+C%yxL(2b%{B93EBU)wlR1FvtN1%=`;Z%R-#aJz>ARr}eZkq=$bFoF zK0`jN3^|q$NzB!dc_}7C@Z*27(dZ}9XTYw5&B6V`N8Y3uAI@$z;AHyl`~>8eU|@(;+YR?0{#{UzbuAF|G%Pm=EL&9GoKXnAA2B^ z_y-lwd{`&&cR2V>vHmmvr}%Qd|3_w68y@JGIet#@vw?T^dJF#fWc#-$z6y9} zueadeOt!yH@$-Op_IeBc%+sUvNB>tV9{DhLueac@JU!9>m5N6`%-!oP_^nC&MT$p0 z%-!oP_@~exbMA@KXQASe4|Df=1CPD@F@8h;s}z3`4ho3KjDQRt4U9?+%n}u7EGaD|^a^1G4ke}cHd`nwEeFSP1}iD+ z%9I5(_L0&q5Z<(`oZ(m=v|AY7oJn!M@AtFU+I#JN_Bpd>&LG{s{jpy&>+JWl_FB(+ zo@YI4t!J$@+1G!bVU=n8V$O$gzRli?E%@@u-u@hRbfm^#416o++w8s7f?qn>%TLJL z0F7S)d?WKW@M|Y~~pEone2_=Q+Of45Yk}{d_`G7i^>xiR`T{YJ?~J{{Q+(|*)%vo=)9#f4kA6b= z+VD-LIP)F09h++XyT-%r`Q{_APuHLSd~2g_m&S;7I@=}Jd_;F`vc+zbDgHKT4e5Wa z1kceP9v|eADb8N3B9rIvjT~PXWq16qJ6)c&GHCOWl z-}nRm&*X{We|5)`$s1+Q+@YC1IStJd?4|YdG5_u`is`wqn~Q|XO(UrBqR{3Hu$@yoQ|gtYi& z+HXQy{4(t~Aw9?Rn~)a2jD8bjI7!*(o?7v1;0H}{VhR@Nc7_bM;l1NG)k0_Bn@K-V zTJG&VSpcMtZ?7DtG3^Z2K|I`h>>QZ)yY{ew~9~TkiAkr&+5to_GT`A; zI{7cE@Yz?a|7$$`rX=v!Ie46(=IVhi&n%6v1ilt{`jxu;*HrlI@iePKu|tF z8S{H2>u?(XfT#R|AFA>2o1AqxU7i|u{Rrh3d_Rqc-{h>r>HK#i zf3@zb@ttdxU%++5R_>!5(ZTvk`QPx=SMvWKjpsUIBiH#1{P5FFKTGiK3eP-0hqC$o zf@ABKVV&;^+)1X^`I3Ng+0c#PhA^VwxcdRRQdGG1YobpHXUeGKyRq(jiquk}y zkxgw;>)X2SzJ5mVPoM7d>7v&Cy6)&_7PIadeQyu?8FfDKqO*McOi%Y_FMv%FAIPwY z@PnM#3fe%ismdm9Lt1RAvVnV$E&*Pj$=Hsx*i>Z$qZliSO;zax(qdE9SaJcbr==e-?O8c&-DIn{f!1;44%w26YBs`0dmN#GY7`9D_a)dA#Rs`0dmwZOxk zJLQQWe%T$HNdCh$o;I-#c-nMb{zbt1${*Kw+QdfSY11|S#;K+amHgkhMd>_jVq+b3 z-r1X7pV;l5%Oo}e` zJWv#V$wI#89#32DMRy_7(zbV=;ppygV^3^QT$JDgboVkX3)J0Ke1ram&ObnRFVcAG zZVLG220lP{=V?53H>UgzoqvGt&d_-3Zkh5oG(JFgCuux&H>vy$jStY>(Hc+PtyTVp z#s}!`AdRO#QwRJSyS@po69njPRO9K-Gy;E%!Jh!#{oj96wgI~9%wy^D1nBNzji>H5 zs(A>F576D;X*~UzIyDcW@sFR8VG9pvJpGwkH4mZj1JBH`4L{X*`ZG!9Z^t=_yj^*w zvp%V9TZ_iipDAPh27c$6R$SH&&gXfG=bI2L6p{ z)?Od}JcVbTFXDf{ZS9KnaE@A?FPb_thiy#`I3V*}MUXx0qe=fI(kXjrVneW>eTZvY z2hi3GwbLtM8^zYD^hTt`)~Y*ZwjnLHR;BkKEw)zOG1HE;*jkmQZ53Oq);DQe#n!4c zZL8Q?ZQGF+TdUF=krrF4Z9CFpYgKv=(qe11ZAV&ctxD5x6hBhicBB{5k5p;eRdXSq+xFzTfYtI%lTf}`aMW5<9lt}kzUUCDjmgLFtDZ0dS?P@*h28cW{h)&rQk} zqmOWHjn3aQM%}?N>gP3{eS==l!}lbAudNq+oyN0o(Cc{`@3r-UzeVHOH|X^|jrZDm z!C$BG>>KKE*7FwHR#hIatrz@qjc4D`2>jg!-fQaxzeMBNH?#tOkApwr^K%8iP~+J* zq=3KA!S7FaZN1>URy8tt~E;D&^I`DwrIT9)(ifq#-nd=?rgE~ z*t6~Na|QpR#-nd=?rhQdd;MI&Kd15N8&WZ>1+*Ic@!ER9@6&kn4XHBVpD^%VTQB%l zjYr>*N&^3+fxmOQISvr~qZ)rX@U_72Gw|u@)+%=#Aozzgei`s}z#la5OJ_JSgct`1 z{yvRg4tyi<&lvc}W@MCSi^kUi-wOP527c68X5S|H->&i30-pl@c>{kV@V@e|*ZAvz z$J}c=W#H4eQ@+q1H|X-;pz${VUk3b(27c8{b52LfQ>*c7fKLMdvVnhWW=4H4S9scx z2xQwoSK5^v(6ja9Np|_)n3}6^KH1whPm6Z4Z*HF%?M%;(b~@vp0g=wbb5wdI`qsfn z&sXVGX*S-PLi}_yr z21sAb_u4l=dI{fa-vH^$`Cj`5NH61i?HeGyobR=7fIhR9@3n7$^tF7ieFLPg<9qEJ zAbkVhYu^CrHGHqfeMsNJ_u4l=dOhE3-vH@P@xAs9aMx)a-|KN7(zo-yN-seA4!&3O z*DI0!Jm1qdu=_pRHz>6G;!$TizQGc`*He50&^f+=-9KgX4Yq#F^bK_1r1JNU14Y+1 zYrOadx^GhW0N>zNjThfQ_e}~P;2Yei@!}f*|1fn~;RAewYcyVb1K=Mq@BzNTdo^Bs z1K=Mu@BzNTJ2YN=1K@w?-~)Yw8jTm<0Qg-FKF~KfTjRwyfGuq`@BzL-xyFlc0Q?gM zKEO8^r}5$&0RN zbl;@#0lvWwjThel_`ewC5AY2h(0K6;fIn*B1AK!oX}tIbz`thT1AK!!HC}uJ;9ocJ z0lvWojThel_$~t<;2Yee@!}iAEu4$v>U)51uu9{_HvqoKzz6sSS8BZY2EY$6@BzNT zB^rMVe2H4%2OIcH&NkPd#2#Lt@#}%F1Adr+-+Fe2FI1)Rp8~!S_>l&F;4E{^T=Ji) z@pZtr0zcNl??^0~Wv(07bL>{C@wWq?0=~q-<19XpFD>}t8h;1yxbp<(8fyOUNL)Y5 zoFf-}T;o3vd>Qal4E*w}ij&pA7I?NL9iF%H~f1vp=0DNdg%)nUa z1=i{%e`60md|=?GS>M)t0Os-lK4jj*62OCe&MI@x%2B=v@5=Zn z)X9l|Twwd2a?b~1qtaz67Oza!#<2%&v~yP3M9ow1hUaS8zDr4mKJP|&bmci_%ma8d z!}@^c>0t1*&R*Xq{YJK#afZFk(;3$LG=3QHjlj=F8vrl)Z$8Id>y|cnr^eG4X$5|c zf!}eC84Doz1sV@u#5^}s@_#B5KTG4`i3{I8DqwwOa2ua4_~CQmS^?Y=WGhT zG!s8w;aSK3hyVR^kjK^=XO%&Zs6)oSmp(c7Sn8fW$BDaaR{IQd=+BPC#M!1DMBS%a zFWq4Hseb)gG215_)2!bsJaz1L);(7|jMxxw98ktSy4H~KK#=?N043{MzwexF9hUjw z;_V*_Q~&gAGj0TSbhfoUSN%s-IcGeGtONfwqy7s+)jz;~_|JQc_27I1+Ka*V*hTCE z?Sih%r_fn0geW(R~nt>0{-wQP!_MtK9o@1I#f2%c~_Myx@Yb%@no}ut8^RMuKrv4iH z*6O;6aaU(79W3|GQG~vqj5gda*Q=_mW+m5;=skkj`^6oJ$Er+!Wyhu!1=gz{&7s$A zRi;fAd|KhD*A{t_uU>b@H+7f7r~Q2EhECs|bxRNF;wRg4NgwJd-C#R5d|6NF>g?~m zv!`^UZMykArHk8iGkQwb-=-_;Dcum8ZbVP%F0tu~{B&XZiU5qWe^lOuu(iPD?2o(o zMo!wgaJFLa6rZigR(8Li*@@lgo|oE&KD-Pz zJhLympt%cu^zPX5Uv;%cvYwj@esosg!C9;?XFbPuD9(As<2mOw%sI9rK!?XecRbIr zEk<4Nur571$953t@ObEqb8Mw;TXoxd&z5Do(jRL!+O{}a(|H)T z{KeV4&8_2h7Nd-ulaAw?O&ISr)kO}#XQ@w=S3745=sm0r`rXqJ$0z09G}|wYSsmA- z?Msv_VB915q$AE=2cBhakJn<>{}78YrN|9@Cczr_CpA8&uqz6!L&UQ@bwnR-ucs=z4MKbKfApBtfz>DJ_r_aF8NN4I(2Jo)cN+a_7H2x z`G+X?8D|X`=VG?9ZBD{Dh*+n9-fEfm+qcz~bd*MS&!djD4cIX6 zbhO7y;7jSo*12uNHq49QT|0EAZRCb|Y%8wOMDVU5_SLz|4|m-S9=5Rj>9I8}`V8k? zM<-Ny&VC+^Gmi0?XB;;HL%OD;S64Z7DIZ-mbOw*9Gflt zchI0~_0d(JoOnFt1V-pu4Z25sbbHS4sKDd-9xy`ph(Xurqnm~A;qiPA7@=!)>GWCJ z&@XEnmJ6lBxEpzlGY|6p5bFsq#YKMTa*V`NlN1zqOxOufFd{>^Aas>_~z2Q(_H$ z7e2HZSjd6Rvm)yU#6rJ?XBZ>BpFGSMyBPOa#Aq9euy@g(4-0D>*q?A7j&eddqz#DU zH?A9AnGR_SVCVh)ODJ2AfUe;2=t@fIN-kS433PZobYX14rLaACJhrFxINE{*$&Ly< z9vc#13wCYs*^oV;!{ea?Mr_EIOdH~y$G_kLeD4Ae9pXx>NtecX{I(5Qi2ZEJhSbr9 z3~D}>L_8S%xM?|T$XL}^%t618_U0OPG1{&<37dhoz?${WV(_*(HFm9ILr{0FRTrZ! z;t!x~hCi?)5gF^)l84paK*yGpj& z5$m;4*k^yPYx`2#cj#|@msr1zsxh$ImbCS^9wgRlqj2uWxz3!S>66?`tYM=ru8lFuz z%%B_WqZ^O!;qjCc7@MyK-2fk5fQ`hOq)j)#peypx1=vWeecE(I23^cY7vL|!$F%8U z23?oB^Fp`Z8K@r~PyK+A`gIw1WxO7#E~Py}n@9FUtT^U(+A+SEn}GiV8EscG4d2uA z{%pQSf5^L0m}d&(!b9j6+tEL_!O!OXYF~#B#dlo4IQ`TBe+u80^1QBXp>f_N^zhjF z82V56%qR!_YFma2M22A-tag4s8L&#t$MD3Ssth=g1*~0q7{&UTJl33p;vcCJFqOA=WW3fIBv8!NLuj+_l&Rl$z!a2V6 zkRt0F#KRT~zV1pJk9l;#*Ua(dUtoO&c+(zA{+QDh{7rKlTW9-M1=fEMZ`ee^uT=PZ zGxNWVc*8CVezn5ypX1m(o&UcPZ`ek`Z&dhK=a~Co!Jh)_!^9i*QSg?+Po0}l{;P>M zY^30~Dg4s8j;++?c{lNfofQ0c6n@iOAO8!iw-FEd5&4AN{@G5qh&&c)yK0Q}>Ud}7 z5S&Lb6#a9d)ix8dH(T3QoYNq-6>A|u_w;lrot_Q7m?^e3^PV1Hq9UgP)~)(9U>%d=_lLay3?7PTPn3kAM~W7Y+K9@4MBo zm3Tb15*VRN8FbJ4=oWwukB1Hzp?lt-d(KC9A?WaU=ztNr=M1`MeDy@UXB5wZNvP*C zRnKLrp1=zIGY0)Z-*@NXyLdd`1xDx&8g%=jcAo&=Mpj0x_y)UAc(erHodUV9wDpGk zH{U17Jd&lrCr$}yFBjuJNOdtYAADN}!Y#$OqJmp+xKJh-a-%$6Pc)vgK)Ok+K#REK> zw5`y3;o5+HbEvZ08(e?i#ur%667TOf6B<9<8Kc+Pccz?g&F8CvfXVDL;^F=lPHxcje_oGqfez-!#whD{TH0TZ@P{`u!tzxCv10RGu`t=X?O!9knp5u3G{FjLL>)!%xpM3Tb^Bs2* z@7KSJ6n=LmegpA-{kv3^=MBI96*S#O`>emHtReK@cjP3QwZ0)7q|67RmdY92&yM`WL z{n|=>&t=a;>X)?FCFeQ&vtCwv4!hH@>Av=QmT9B^vh9bVUrEj@492_y<`!a@SC|GL zW2W{oJo5_Gh?|gpd4s@vnLKUCu>&_oa?&imuo z)-krFIlklg&v^g(SiH|QzH5zI2g{Uh;{Th60Pi2);oDN49~$L(G@~Aw^Blkk-J=HG zBSt;Y2Qv1K^*F$Cnm!2YVZ8qt-{-I~92ag=_29U0GwWfrp^OXhZ7I(qx=*+S4-5<&OTyh)h*?j0PyUVYR`5AY&!lwwD4;4L#lsf%Ph1LW3{+th$erEG|reD5) zQ(Lk1(Q6?0hTp;Y*S7zyGgxx<%U1@%zoYx_o-6^uqT2Cvdbq$ou zeE;Scyoa1*Ti2j%xIwiSZ9_F}gQ2%#8}Mx@&qGFe9`w~GT8#E9wx*N+F;ySjFD~@J z3jKq9V_SaAIvZuoSR3h~ZQ0&keyyR$O#2f<<~#9-r>MQCGKPn2JN9MbeAADGK12U& zq0jzt6XaR+zsfU@vVYTx0oL1z_m7(_gi>Tv`}f$#g`4rTzfF%%Q9rRt_S^D zn;YkFv)T`tGW)ad%{S+zL>_+dey==8e}j2SY2O#-oAX|R|2FZ4JQ)4ck;IUQ4?obl zpLjza1iw=9Ka!Y>y&LL$D(TNw46?pRyde)FuNgXS^k;}aIJUk3v5Lrxu_gGHy=GO? zv6%DZhJR!8_I$*)=@?YqBxu!pV~x`4;j1)M8q z+v@ekn))q1x)MYLB63 zo+>iVoJSXV{`*SETZX+=ZMrJzljj2K&&2!ft?i#3No+-&x;rl+`5z+QZ*OO){7W;- z^DE*F{Sy1RK;d^peKJ;H{hWA1zdmN`r%%QV`+1yYj5_ADU9t!I^>oy^EAnls?Tj($ zk;K_JH&UJXZ2P_i)*ZgO^ZfsqZM%*nZY*%t>NWmT#2dC{ifwCbUOB$&gDa&X}|3|5n`=Za=g?kw%QAYlEcj zdscXDgrO(<6NQBtZSj5L4L!LkkXMGD80Due;<~ioC;Mhs*WC@t2|H=yo03=W)O`{C zGV!la2ga9b|Ed9av+oxF3Rs~Jiu(sW@9K;P^es94GEIjVJ%5~@>6ba>MI5j6otiEn zPOm9ftgog+jGjMEujvt0zo58(O&1WS*OV*PSJO?x_wbl~b(0b6Yx_ndg=W7fGG9o%zhA#p`qBM~dl4_|(~*wl!2A1k+fUt}_+DoIe{y&JNe>i zSJ?5fS?8U&E`9)O8{{YBY0C#>j;nFDlg;lwh^L(~(wo0+_l!8BB=sVWH4FHgj4#h_ z_jV+Vc-k*xPaW&vv3o{5t*zHZ*6***VfT!9T8;lD@&33V+wNhHfgA6t?Z*EDJ|nKi zwtG7gMm(*?|A2VEUA67rj)W0UtMT6^-fvg6-8158HU56${dU#1dpiXjBRIqcGZZd%{{*A zevfcJ%n#u~Kke?lHTKpx_9k--pBW2ljNv{0W_aHpeS1IW&Zsu*4Wo>EeE&Q9`TE`> zYm%=GJ-+;oe!jl0$QtcyL&4iJzCZCoKXV+1zP-pAc+lOSwM+Y? znrmOf-<$+GJRZ6*wy^?qcsz85ZPaqs<)7a?19W&ibYbQ< zXMhfmht8PabiRkP5j=Kc7U=MJ=#29d9J=d#bgMD8!vnhOobwuhVLPO+Gx&L}kM3sB z;qlM`BXrjqbhQzCjTU+xR2&x_zU~lT!z1}hs`tb7xt|=iNCN{ z%}ekX_NTcPe_>CW*WfQ~1kPvP2|V_f<1h4==QAUXJ*D^y{o;Adphp^iA^$vo8T3fw zFXWTwEf+)Hc+PS$cYUJBz{3<|O{E17APEGK|~V z)XGO<3U(yM^|vb29XSKB=aIZ>(C=#8`QXOZf&=hD>KSuz>6P>uhj$1zwzNaW$Tj_) zIj+WCF7|D}wq2{@hOe#Z6zui=ojIPyAG+8%#MUZot-{`Gg?C5BDeN+ZJ<{Ll_ZuH}v15q6TwyO)*olZIS986M54qUE#4b_TB?|lAB9{*j zy4XTuFIL!#6?PNOeO2Rr-rH&Ox6tZb2JB*mU97MTMQ+`;xY$1vyHH^lD(v1Om%nuy zTV$n(O)6|sVLJ?Lt&4q@*!c=OUt!DRZrzeD_7}v?QP?>OyEN{Wq0GhpgxJ{%J6mBl z8TrOs?4!iaR9M7ui0tf$JN{Q=Dyn!^WPOv^X$m_{VbgJ!XRR)F8?luNTdA-^5VNk^ zxY5Oak=Q8;J4Iouid{a`x!601EmK(R$&vD2V_<7t>;_^>6c(}Df~_~ONf&!Fv11h$ z<5|HzW?;))?1zaRsj!%X7HqoM1c7VddM!#aywul{e{NeW@j_bYHpVL3%Y^7{-wpepqhjny`X~|ee*Yk?7 z%kYh=JwDt~*xC z-e~XukLN50V5FRn7<7$3x}bSzV1%yGpxff33z~-pM(DN}bag(upm}Iugs#q@TjQe( znBU6g6MN?AF@}%gX?`PMp1xLnxAy9)jCti`KllK{-~$ZD98159{iYIs2ARWM9P8ro zn(8$6sl^B4?>_u3tZBjhXf61?1?$r-@ln8a0f%$S;6Jv+hvV<<@_S4A4*VU5^yd+S zv;ljqlLb~>ozqq|JPwEU-=|)^Gn_aP3rTn2RkT z)^GpD4RHE;-aD-G9Zsy@{#`P_E$>VhTTHBB|HM|VF!+nMx7%&7_2&D4EmF1;W9)B` z*6?9%d0h%yxdbt<{Ty3K8a;221|KCZ1H6wf!dM;UOry;LV>F)k`P>2a3wHt7KJ)X2 z&;6W_F2H`_&Hwh7k3-jbk7)c2YqzK7>nTXj75N+_5AuLieyi_mGe7D$wEa&;cWK4;ge1`sik$oOnFt1V-o{H0T=v;mR zBXoBgbX$CMp9UQs4;?TW5V6Jvjj-SHQ; zuQ@i{9?K{37j}tvGs##UcQVOX9(OUxSe|2i=(UXTp{Fv&hu+B;A9^HXeCUOY@ge6J zvz7nQqXyJ0SNF|oA@ zi}AZ)*Ot5EiI|J6A$GaKV*D=H9Yz_B7C2>?MeH(##rR#Y&z3v!SG>d7E^m=_I72*V*b-uwC@jYBf?ZVM8Ix=5aAGf3*o$TSgMERc9iOSO&ds-&*u@Hq z@w?=EO@*_@-&pHn-@F{yg$j%DyI^mvaN8p3VviD=R9KAP1^a+e-ZB@PCU(BU+T-{7 zM2&mjMq|vy{*Kr=3XAc({x}h$M5xt z%_xKB8O~tT*pCxCQeo}!JACMY&ON)0F&BFSvBMPB9>3Qoh75AC7{BX$uOW7@!opUz z4~f(#t{i0TRd)(DrZl$5dLOX^6c#o$N_ifv_D(qC_bcF&z7Mg>YW$9JIp;_fxxT4y zO)F!)FE?f5W)3NYxRsmlEG~P>mZ88spVg6(0t^ z$lS9Uca9=`%)7rNXWSL&)A0A>73k;inEhPNxGPO}2I%m3=o(ddF`mzeBWPtDfqjN9 z=eapPaOb(*^Q+~IW9Sz8I`lP|M=oYxGp^&L(KRiYi*DJD`D31sdQt-ENl3@W?`%$v z---EX^hM)$#!;rG*6}-e#+S(0tAm^v=$o)dQ~DhJ?t+sYo#nZy+Sazb2lD3E!<$Za zZMdUbMb@{8_3L5N$*zrY^rgsZB-YSFu}4NMn4<%T2m2DSh8_ymhy&x<$5LKk|D9OB z9vU%SJZI3ZTY+^Ov3@-?;;kCDxY%2WHT1B=*5MZMXB<5=&d@-aJmW%?sYmhp3uk~T%J9pIDbuF}hf0y>Co9V#lndW7zBWzn{G8*!l&S-?jI)w4uL=>>g@u#+|p^JA51b z%ky#f)MJC+Mal+0wy1GVk%)$Px4YKnM zV!;o}Vmr#ovl*vx&mwrE^i{?uFM&7PQNKT~I=k{CvL3s-<2@&nZ{g~(rU&&{6;O|3+$(#W>M@b^NV+j@ zw4-sXiKU_cY!~W1=2JV1hu3t{zBH;m`PhfwQr<5zdouXVGsdF8a6W7s+K2c!_CUvn zL^>Z<@qp4U>^p(w9`$Aw2gtTPS+{K++BQ~Vw=LT6Fxv2N8RTP11b;z01!>3z=i6eS zX{fup<5kFS8+|&o;j#5@+|{l%J&f;_55>52v|ax6l>5erZ-MtLQ`4HOs`e_q z=|bLJ$eVwM;+?J+&$Tz}gn4DVe#0Z3x1b)(hmT3m^lu=e$CJ0`W#MgAAMy69Cz!YW zyW_3t^FsD`55eTPiXDZlEh&g>jYqH#^Qi5YH7rzP?V3{S+b4@{@%0l%+-E@E=^{7p zS+VSS-`$J64;y)pEXcQ5kZX5{^34xY^E zMc$i?yo>r}FZaY=HL&XY9j) zFUCDlnef5&}w_zv#9xw2|eJTkim|C>JY-<6Ndd3o(O$r+8& z$Sdih`@RAn?UnXuWGQ9vFnp*qd??y`szR8T>-FN_}c*g{G$Wl*M{Kb9>y!2AYOhcfS3CR_Kuf(N!LSO-X4;d zV?*-tqbHD;Ltv-nBdfPevc+m&<1;E4{Fn`$*SA9siGzygV%=FY8VqFMk)n%T2xH<*mKo<(!bb z+*ce<$ETk_US1ZU<1>26%Zgs`GF==_$8QbE%YA=8aXS7V0do0!%1SSE{8yywp^kqc zBrhvM^77Ub$jfsuR`J`*J9^2>x?b?|{E)o-RXm)ISDZjz-W0$~99GdQxt!h$Uj7Ah zabbM*x{$nlq4UJ)_|Gw3^vmTRC@a0t@!yfIhdO?5NM244$;-ME$jhw(yu7QIy!>1* zczIDsUjD8qoQ_XFfxO%hpyTs<$;;Wj;N{;q?g}v;|6E93{;uQ1>39w1_xw8kC(24M zbo>R<^-#wfL-KNVNM3&K1oCoc058AXOI}*N;3enD!^q_e{ln?_g(r}g(*x|~+j_~% z^LoL{V;n1l&~YmyFJE}=#Oe4on6LKh_)*GAFLeB6()Ccsw}<5Ac_Ddu-wEX9g8@3; z&`Vx^sTaJwJR~n)?iWtS&pUy<923CHclMH(7xsdeg&}$QCGygU`#Fpl5j>rT8Mlx4 zo5Qh!?T0a+emEA}ei-W${lHVs<7bN->W+R&5IthJx{~_L-hbBreP^X&Er@G7c08|r zH!S0A4uQvv%{qiwnK>_rUA1ExunyCt;##+~#hl6~uAEu^L$E)M-0iAa)4BycYibtZJJrn6q z;fx4lY{qz#z`WrYy2&jd%X)%B=0R`bLJ${=fQr zfXvI>0_=R8`?nC^nYHiENsAcKGVJ4m&PYBPdT00mMqk7JoBG4K4eqs}4^c_Ig)TXL z4f^QQc~(zG*^IshWz+tE=%bo5QTHV|d!Ng6%q!+i(&+EwQS1-G!~IPw@UDpSBPEzK z`IJ3Z(gt4wb6#@xkIbducbQ93?>i843fZvxcE|*IY4ZSQnyI@?Gxrtt9Is`aWe|Tx z&w=G=6Y?^F=ULj;4Bi>-5h9O+-Q}Tqzo!U=W}v(Fg}#cd zn;of6&(>%6s5$pK*Up~MahD;#tPlGObG&kcilH`T_&}aM<`n^XK9*;m7Y5|{V4itS z56Dx-Zy9~E(SLTsPaTtP@>9lddF0tYpqw&(%OlTMR9vlDP8q-Dk>_s%@|5vg9(g_y zkf)5_a^}hXLH0dNT8G8{a$hw44(wmXc?Q++Y3^#m-XZ!Q@NMqG*&uR0gg&>m3%<*A z`Z?Si1lxX?z7qD{bAL8yd5?|kzv2Gu(n#skyn}(i?=6U&BYW>vn%|LqL~nMy3MiV7I#Fz-G3mNURN<1 zLK`&aWzcgDg?{cZbyfmtIPa8gY^m{ov2B9%$r<=MuHD)9oF9e{PT5Gq_hKJ@I{d}$ zsR>ovah}d$wlQR-4eip7Jzte}8CpF1@ZpDJE>G{nZ%N+=p4|tT>K7RrA0Igde^>uZ zodW=#%K5yj3L>+I;D4U$OP`u&VD@7g-=vH&&3ZQBET1N|F3EF!7eynpi906yww8B9 z-YnYsCjRI74ae5IcXm+b%ynli`{V=XqN3arr}PHDwRm`mwkO{7!Ty#07eD?b4{i*_ zzx3f>`tX+NgV7h#PcZw^>$_V!%0Y{cJ79h&+#JWp@}PYpk2$kz@}T{%JZNvugBE>$ zZayb{aYXPzc+Qxd?}YZ|neLn6lkgm>pK^bU@(tMMU&dH^^wr`=(Jw{c{t|H8;gcky zyXQsll+~=5kSH8=bpifH@OM?@gI~J{59aTFUV*QU>b~Y@9CyW17S8vTX>X1)#p8CF-gcbJG}Kq7twx#X=l&zg=OWd{5ntI?7-i>} zkAC?}v0~9JjN_a+@V;(et?NIgei*v`w%p}u!ML>rI_#X2-B$C;~?x3BohGs7s4 zUk6A-9oYVQFLa>Jjb-5aU{HL)|JC1*t&igFE*bB4w!^k_&fi)8IK}4K3h>N4i?GWW ztLpyWJ%`f0^Gjk~Ya`Y+o{xP&snsm!N)~TF{}TJmNy;zIyS5lZ+>G&bsuAVD_*U?1 zOPzBluQ?^Me^bp6t8Rf!N1CbU2dyQ!<4yQN2beEonj;bRI~(RX{!wqrzq`~qGxL-% z<-fPoIU`xhzk7(a#3=t8_&;+!$0&a*`(Sm(BGzJbU8HTKKQ7qb&KPaZ8)44q5bAnA z&hAUW<~O2$E{6@_xhm`JxO7<;fbAci-i5gnHP&ZdJadh61w3meg*hC?A?w(XG~;=Y z$4#&57;yI-#fI4Oj(&f)$NHXg6!R$S)qPOb_hl*TZ#s2Zz4Jhfd4ddE6_}5gd7N%y z1T_A}ta$gFV7)HN_GvGRblyb!1pDEfrwv}uQ}OZqHXpWIQ#A5@@t^RX{S(jd;aS2> zI7b-w&v72`4$ciW#jfh$Iwj9KWDFFsJnyj?a=^Jdo&_XW)UgTiKb$wx-=VKIh4vHe z#kn(?^TB({!C~3}%q{6TMV?vIj`^lz>&>%rv)8jGpq}UZ>d8K(PwQC>o@A-#A6cH` zP|r~T^*rkY*0cUN)$>`@$uGAb$9dgamiU+bYoE5~i0tk8AIGVlUka$_L4Q5bhxKVa z2W79P_*ch4Zr>JA&l^r)JrA=y$Dy8)fO`Jze|>WM7PjY)j#E9K;@SDWe&rMXdSZ;$ zr*by-x+eR{cXoT{bzq?_}`4r6h1(H8N0%G zr>W#Cd|dH?;M2%h7vqAgehqj?EXOY9nv*$B3Hr|DzWPp*zEB+Z9~M}=^FZoTX4mCa z%B=Fcc+T}y^j)5Q6ZU6S#P;_jZVi4`q+dEWYZoR+6j=9dSb zhL9&dJ`Lb+CZB3td3xwA;?uA29aEmp3@J|!WZ~0Km|q@z`Y!1GeEJrDGx=o5(<;1s zE9B{R*2~blPM@^qN_<-w<4 zgWk`lr}>-7C!@c+8SmZ-KHbN98S?a1AD`lwcL>tEcW05OJD6V{d|FSQ_~hx|_?yY6 z4X)nR;$5Hd3HLu9TR))rSZjgBIYr*_MZb*mg7lj?uSnnQM%EE?hLoptCFcZ7WImX4 zhWw4TDy@9ZbeZjMKJ<#s=hI1}e)|T0gP%s4wkb88S1@12JI)FAM_X{*Dc=E4c;5^C zQ2VYa%uT|_Y=Vy|@8LVr7mXMH>?^pNMrio^Vfc%P=j(h4&vwjlN~~LKYzO_!?XhL> zGnaLo-VgWq6i49OFK+IN#bh4`%X1FP1K(E42mVuc+hVFboWG2*?#?{u%lf-1`l2Cu zS=YYEuDSck?mpt`hpbP*)_ies&>C8BJiK0uG54t57Le!0?($6LSXVUW z0kj-(U6gj0YpdHZ2B$sb*c|Ik7SC5|hJA_`W8D*WRn|)zWxaGqqRm}z{M#a9y%g`A z_0kmR&<|j}bVs7$H0OR?tT)zgsu^m{K3CC!S6COc(&#VRbpAU}GuKxIU#ao1?Yzs8 zcON_W-=1c!XV!1RU34W1Pt0EY5Bt^P)iL)zub}nV$nM>9BYQT?b?3dJ-oI@hNSAuWwDTLqPq42Nc zH0!e%J0C(k#aA@H(WkWGy~FP^@DP2h;3Em=?qbdF=c?Uy;(eT4w$b*8w!1LF-pnBXvoEAx1B{U#@OivS}s)jQY{x_?e~xcTP{?3Bhru! z-q|X0vkhtJ7}s4Ty$5ONkt28QNJA#<{TX(fQ^(V2PignUiPq2H_fW11O}WB*TduHX z-w3+dO0LFD^y%3!>q6Zw@S#$zz|KLt>-?)GdgWyIFsoYQDOV}r=NtGdCwlD!6SB_v!&EKs7aRDRO#HDbrFZaK8^NNzZ<@6Kk;R|)r}%sH$M4SpKi3$UY?A5 zIF-GG+}r()vX`)%92+?HPx>2`UI4ij`>5>YN~Fa;s`N&rMGuty+=jI10qo}<*iYzy z*v~SN^ZLY}CR&G;oWFgcYX{r#-m#zH2W=emqCT;~&*$OR9h%RS+d5!r-*o;Be*7@& zQyNdXZ3G@Vb1nFAo+v*dWCOJ0l$+sD8kM~a7H$rA0U()uG)11E3 z=H02*KwUS`d_S;mMr>4FH+_lHm+xlOjeW^*^d%z@^VZMqOB|h1eM#LY=#1)1=tGFk z7=4TAjOt5f;JxUK(btI1sJ?`Kjp&Tg*GS)?bZ|A^OW&c=)VWHdZ=udXU!-rL&Oslf zZ)sFIckd+YBBgU5G5L=7PT!J(oWuSL-yfLd*nV3lPPM*0TeX+?h|2cs{2$B2->>o1 zIc@tj{^?0h-=*{aqQ+C_wC&gUBboTmX*~N1ZTmHT;N*<*e^TSwSJa{WOQ6#lKXGzK zc|NA`(79A2@Ru9-noRr$HJ*J%9c}-q@QD@wugt_>q4Df1YT36K_)?$T?>^Ofm&Q*6 zKFR#i7wP=hPWIX`^rh!({7m4>n7@I)*I%At);S8#JfFw^nKt7x^hHZ?&veMXsK0GD zo;%{R8?7g(FZxbEU$k?wV~-xZ(6C2kS}zc5S_{3+|_D}ZO ze)vSc)%c*k=nY@H)Qq(DYkW{&G-`^qNR1V=9zCw{L48rp6kmBpSUWX7s4u#HinZ61 z|0&itH9n{>dSHrI4k5P<3eUdiqCmMa`l2Mq%<=8gpA>P;*j`7D$8iUBaiql^|GDev zX5SMyejWl1sYIR40FQwADAhq1WC8>c`A`z*F`g7X20@6$V4duRmX_)nt!V_~d`Is@5 zc4Myt=TZt0si0toNCpZ{E7K=D^lUrm6}o3CXJ^q!sc)u#?i%zKK$-c)>@6HE<)}& z4s!5|Dtvy#2_vxioH^LyS}OPc zfIs^;K{j4F+t5uz_9Xwk6{c^Feg6Z#hYjOCEWS^ntqwu{xo?4Mm1)?FO0{-QpXJMK-u@+yb4b$o zw&Xo_fjXDO;JeXxpV zPkZjBM2)f07uH2Ak(nbE)`yf$IEsBwx_)i?{kYS8GCSI;f=uZcO2+Lm4i9He+4)tS zZuaAl@zK^);!%F)%`-Wkw$m-b51hvlk#kzyeYS7h@MDal?fKlUWE|rVoY7H>`d`bw z82R*rpI2(P-4eFVb$EA!%Kuu(gL?N4zFUTO%T>EAN4qVn0T%6c9m?Gpvwo!3^4swL z_t|a_t96ElYg!z+xi4nRO)caiT4?F~&u0D?BY%twr7rlk`F<+jFU0%B>idiF{e}4c z5`6#S8u$f;2fnJl-+=!=$?xB;zJELSH$rakZOQw-q$|hwnB|E(3LIa^uP>V9{fL*)B?xbiIf9-P*_bt?J|amiBReH9g4B_Pe;I zYS_u7vTG|&cl^?3z1I@&w#|fXGi1QFWri(o%^klmKF|1pej|DxKfw5d_vK07&bxs! z>K|?mpWpwl9-NIOeHrxAjGrjU^ZPhpsz>ENgf({=7t&7PJ|j7kHd-S-`U-VVljwhl zSdd(K{bvvJ^2fzo*h9YLD$DtKw$Yj%mc?I}!XCC!27R6~etr*iG#4*x^K92S!+R#L zeqQ{zhi#dwE=zh?mt1*$FOM^JXh)vvVH^4Ra&?|ECTG3oVFz#Tp^WC@<)%D&**{Mi z`%Dkz!rvCR=K1|Qdnn`n?|(f{S^8w2<^NWm<^TJz{A@%b&+jkHlm68n(&y5J8}rnK zf6r5v&&X32p6Vel{IYy?p0b>;Ez$SW_JvRMn{MMyee?2|&uQn}IQ%rmYHx#IFK3xx z4WOwpa^N@T+4CJd>y&4neuVdDVXlOGMOofMnA>T`+(rYidj>+M;Pdf!&UxHFBgpSJ z=FwYwR+dM7W$EHQX<5qh?m^zNe5#Mjvej3XU*ssub-uD(*~evB?JLVOIm+^euPoJl zT$XqF%5o$}S-$0yms9(=ES0{p+?Jy(@A8%9==8po-MFtTpU6>`M+SIhcYhz3WjWg?FW>6pvi!tXmOt@6w=6pS-@Z2bT(@P(KCke;ZtY}t+NwNgN9I9$ULLgO zUVsJ6Cu6=W+UqT7=ovGUVcWq zyK4$vA-=VfzE+5DeUKB(7uA-{EDAAD-FRO>LuTbg#1=xAAIX? z9M6WZQP1_kx0Zzb*6cp`)}oL+e6|n1b#cgV?eBwc?V}$NqP^nz*$t7y%8>2#d;2Wv z7Wx#}Ti)VdfA6NRly99C@>|t?z{6KVe(QhwfQL7QY_H{g@U0Jr{8qXT+G}}89$wxD z-}-&Xdd=IdmR7^T|VNUJ<{<&g*XI8fGW z^Tjb^b@wd@{?@5ZTWEY&x!o50MpIzjjkUg@x);~Dd(Zr9fsoNK`-P-zUvley zN0_>QFSG7Xsk)?t>i(3k?hWIt-A3I%)NS3PS?^Vs{a09jEytOP+zTf*wv4gcNKc_{ z;kjLi*T%VCPHaE!9+lXBl$H7u2Olf&0OQ8?10!Qsb;l>htM*w3LG92l|GhKP4!h5C z?&zrKWjlO0S39JA?Esm*+GvNOZrkBF>R;g*&c2wJ)Sf)CZQ1m%?JQ>xzO7H=t;$?= zkIc-#ml$>5i~loikD-5cx%aKa)m<|`ZTIb4Nfu$x{#fia7>B(QMZUdkBh+5DQ?Zxr zRC_NQ_pV_sry2XGWpCR?q_H;BjD6CQ-e#{yG~)~pN$)`#HmMo={w3XxH1wfap8*iX zo?+-kvva--($J4)ob4d^1xQ0rnsIi6q*o$c$@ls^8KkH2y-IIG8u9(k`7(Qup3V2_ z41ji|u|L2$UnW{$9mZY(IRhYpy?jaTRmAx+Wd+>JQJ)y+w)^#FyW_pxr{R2=TF_mr z>~5*A9UI15-kRy@nfUi<{1o78fxp4P@6IgGJ2k!%_&VU%82E-WoV_}lp9?g88hnJ>81~+r z(&4n%-c0-~jmJKc#w75uVJ`kiX89{L9(zw3%b34`AAV*=`;OOm>`!ToG5_Ii{#9o> zd((CKhiW|bv^1u8hJk@^%j8c#jZXsK$}k6uxBB9RfDQB!7NGBh4bppxMNc=MX;ol6O5gJ~ zy+1RTf3*8-i(^mjTeSH$!D?0Y3iJ^ovwZlm)}xva=mS;+^1-mr$;@-@GJJEit#ke; z_pG6g_MSDhrx-Sjd-cT*CbZpEY4C*Wz|J0Ho{b`QH}gC;;nz3Mbo|M4G{4|)@T@V% zS1+^uX~FM3)A6N+U+~p$(fp#FN&*YJOnSk$`Q!$^^mQ6fJ5>uj?6!k1oaWU-_+ZO5 z9(JlR$vwvQd1;b=1nnp7t=bRxB^nPq)mX;!ehmE7X%Wwq$XO45-^H7i1 zo@A-Zd#5?$rh{s)YEIvx)L-`r)^J_-ApiFIX+Gb+#ER>>Lw3Kzx@WARdSzGZF8x*f z54kja%49Fkl^6{@hRo`7C4?87r#XIBz2*hwveA%Bv=@D8!8br|WX$Qx!GTGtzolHp zAZPF=NH6%NX+AkFv3{!Y922J8a~TD{+sC_x601ewndkch<)$a+O1S%fHIHqZ7jTXM z&tQa2aCF=}qa%oyzn$jj_&m)^+Qe+U?C|lXwAA{f<_+b_&&wgxy}SheV;WE1m)Z8i z;eGjZU*A@0eNf}c`bloPtjF^Ryr8Fu{6hqVgR;vxRlYnA*! zALFfWD1P{T4#BVR%fNW+D+d3PA!MN2`q%Zq{?O+z?GJqpw1IQxt6|Hf{L^PxA5!yy z<4yiRMjUxb*|uEpb7z?LVgIJm@z&KQe+>I$^CuJkZjJZZAHi>$Vfq-7|JyX)XMY6$ z%}o5cn*XRn3jb&7px6GKQ2swX!?FKAI?J$8+4z5ChH1|spJS{y%M_i@{tJKNXL;KT zKGk0}K8XKQ&+_Fz&ibRq2l4-cvwSvljP)CZXP;6RivI!QjyTT8Dvr2kJ0*MIzfcFX z%tQW7|3!GR;cRD)Y=!1IZDcl{ukiC^jI~Yk#OJ?A{%bRN{soQq`7eUM*Uv+Y{|z3V zMIL6@V6Xq8*N^oYgC`v$?}~7Cu(u!KzF?kzL_5v-6vi&xkNqc)a~&A`)B8)(C^PRh z;8;c9pGsaW;XV}D`~HZ}8P6CU(CfQ&-@yF>^p9me6>|(YbKsS9(S2W86^VS0{cr)E zQ}D>S9C*L26+RutO{d{}n)4ev@gD;xN7jL`?`Dw&1^vPTae9--gnpw^``JQRUIHcAX2g2u5^9K79*UU1<2|G5G zPO^SmYK%i#fyEjk=N%;fTW6W$1i|lDcw*KiQ1_hkn<3WkaW|W1{hsM5GXKzm^?O;H z&$@n(Ij0Idq1Nv)=b_JiLwj`cELG06%De~shxkBy&0-03gJ){#xem{HajgUFc@vD) zIhUAz-Oi`Ii*v0*?DYfZejJtN+@h=>47J}6LR!`jRGM>*;CXZG6#M-Mq%jBEjI}XY zkHGxnVa&5OW9>`Q{ct-y1MjEty-IT~VJ6>?u-{*b^lZLY>6J*& z;d`|Xy&CEHe6P|QkxufxT8FlfUdZ>xy7XecSL@KIp3>v zJJQSeUadpFg7k8}SLrC$m23H4twRq*`dYqM=>*c(@x8tu0_hw0UZpQZdJW&J^_-PR z-@^CfJL0P`wpy>&rBg9m=D#${8QcHAGhN+i!+U#f1?$pfxX>ZF7o&Wb{nR8Wwf4xL~2V=HWE%2W=@NKiK&F*@P;QylWTxYHWev5%0 za!yA6DUIhkb0hF~8~C~Bm~%Ih|1%oTb>>#!?=kS#oa5ZrgY_!GKdJFtXHEfspMn2U zCVrR3PXQixiKH71{8O3be?;RefiDC8K?C1$j?YF-wjR{@X}~9ef5^ZOpY5%0>1693 zjh_j8E$|N;__?#a{0IK?8jp46R2}e-82IZm@pT%Hb>>tf@Q)h!duMyw3;Exo@mOb0 zwF3V`1HU&j|LZg!>&&SX@Vg9rM`r%ZHGU!RvHn)N)xb}za?V(n_C(Ipu|X*Vzcmwo zRO7D$z6|&m4g6C+e8XhxMUB4!c*F{%UpDZC=VsLRIgMWfd@b;QG4RvR&5-|n8h;D$ zb-*7r@GH*s+6Tx_tH!Sfz7hD>4E)wi{G$p_o4EqK_4`*{tphC2xtB@rIsJ^$4UB`R z%VSP{2KuGJ>^HFPk3Q8mKe<1#_gtsns5(QnFXqy+%unu5yl}2L#|t|;*;=Rhgt;+u zO;CKX_#7`DeEo>Vv!5~61O-2JPKI8t)OhqW=9-}3m-_RcVqK=&p)q2;iT^WwJ!4M3 zJO3(f`&X|&-!#xup{BQW^!{C>VwD)bL(T7Eh z_gC}%0K7+A(vJ^1Z+YKu?K_Qm-g4QK;`6rt`xf=kBSt46=Sa%Rt`m znB$zeZui|&tly4DyMiAwKMT3r#CFaY=NV@m81>`0hH?D#g_(zWw&`koAMI)LZEQ`; zUUg13=Y2oIcc}9qJ&uB&yz{D}tr+K>(sXn}70be>>FCu}Hh*1yV1AlyFq`jX3s!y;O2h`){fNzGa z$F3~(_;f&?J*~%cmD%O$8NTz$)xLmlhONh$*96Pe^8tDGv>wel>hbk}dQ@EPmZhiq zaetP2R0rhQ(|X*JqaJGl>hb)Qy|2fHEOPaifINFzj|+3uV?jVYssm&otX%y$OFb?M z$g`*Q7?z_Rg9GZZCE%N3>#-t>Tr~#d+0%NopPpUMf5&$|J?{+oX4rcC9q}Hz?=kz2 zA$_1959g@ILjm=emPb9BvdGo^fINHJ9-qijk97g{I2NFjVcX;9S?Vz;S3O$k+njJsQA|<{T{F5^HdQ&2uhbkkTscH1b>~-^P@Z-7e&GVp|u_oPAx4c82_eA^3dnb4f z)Juqa-j2B?-rvkQB(A+T$F9QPt2#Ju$GJ=5>0`CGMy#*ASs36yy&d;ks&#IRRUo@= zjD+Dg>zJ1RtdDGEp5{EHdDp7O)!$zb3O6q#?%g4ASB1o3vsI|_m3=K7?&b%>)pz1= z!{KI53isVP{~iwa0i5|4rroYz7!G&okXWevT4sjJ@9~mwxQ~txhiiQ!9G`#K94^29 zA^CF7P2uv}vN0U48s{U1X}6|V!qxY8cZJLE``g0h7x`Sc{K}4o%kTM{!{ztLE#Yvt zeK8zv)7!$~mOm4&9?z79%dhmoaJUbKY>(US376l;Zw-fA`i*e)oq10<+>b)qjmlq# z%Wvz5aCYdm3&Yj7^wZ&RPmc`u-DAb!@_T4qINazd;c(A{l+$Y)!twd;AbaZf7ku*; z4S3Ia7y2=uA0lh?;*aomi)l5tqt~n7KjBS@mlB@^b0^2vyK^gDt!~UV=i;`(*ZH8z zgY#t#h&QC)MA}2}kC^8QoKFyWe2(=iuJ0T3Zig|)7>{iDWd&jg<0IS{LipLkd9NAo zH`D&t_tWs1;1d<%9nZw(9MLoT>Ep9}#(tR`b-%<{_jd=>y)s?<~ z`^a32uLrww z%(#Q+m`1+L^APgW^MK9c-@Kc@d1N~2oj>K7we;1QcM5#fy0e>k;+s-V$ROHU+Em&H z^7ywGQ5RJY%4IwFeh6)`A8ke&`@1>jNs%|th`%58DM##n4D-gdpk zGX|LPfvkTTeD4DG;@b+g;%sKb5uuX9+^!H3z(fd$Y9@L|Syxj)g5-V+15~*g}fKPV2m(-{`_}o2F!Uvn)Y1e;{ ze5&Kcu8ikdrs{aK=B~W*SOGa1)Mw@S=W45gu1&~`$8z?Ky?^6h`2^}{b$n=_$zXMS zM4#o=SGJ=sbu6zkwV@AX|H-})cGfw&;za!}_8jF&qdZ(+{zoX&iQ+|%zRUg|{aYG+ zwcl@%KAwIA9{Od(&{yUDZs~8)4?F$)KXE?d=O{kNIKfx%!+*>bW zoEEkReM398B3umrXsh?Mf6L>$+&l1ap7c|@rFZ8&;KPYOTY<4qakTiPX2hekwIaTV zaX(K)s=?oC_@Nf=!L|yx@3F1i8uysJZ;E4R(+{Wb&+%?s5#rG{ZkXFPfPXj6rTr<7 z+WsW{^7daaCd!!SXw9QMD=MsxANHy|o%C;6o*(sPdD<$hr+Zf(@wZu?FXt)`>`_A_ z&NBc{F-KE{Gqfz+$?mkx_j7$4Hma>|&s=Gnx}V^0X4`zc*Wa$NzL@8?m-Y7Bkbzrz z_iaZ8=K8-KGxj6150L#6aqJzo=LC7yk6vrt%Xx$p^u%lnlW=MY zO%!&Q^G2V*T_Ch^p0R2cY!vqghsEBCad}wmcY9EVQ+rSbj$t#)VAu<#59Nph4AO^J zevrd9JlNVlF)_c0l-i?{ek0+cMl$?#O!g*de&zIA?iV zOCF2tK5fG2?&_s*mxjbm4#N5RPRtj*!T!6gBywyO?NUbnU13elB?}???^mA8p$qUQ zx-UbyH6YJ2?9aCh(94%va@dCKd~o`Vhy7(RbpdmUq6_nCw#*G`w=CG3dw^Zk9k#V( zr^pg9Eaj5%LyNM=O`heb z=!ZTl=TV|WALf@HbC(5nUdiVW|KI0ER@77-AC`W}A>7#PAhAhXT zEd2QW&R*Gz41R3Os~i>9V|`SPPx;Fc3-9wbW$}5xkgIIj{VhjkuaGhsK5wv{yzA3J zb|(vVqT`!p>DygfeOF)~Yvya))YID#CwX#r`5IWPZ)MuaEcw1G2-}Ss;Z*yCCze&jNeB^h&$}a`pKl;;v{Cqs(+#T2bcNf^_IdP6Ij&-g`%wFe` zbaCXB6-Jt4Yo0Sje(LcA*3)(*R#b9~z2p3bN-GAQj=v~<6W9|3yn(E?yk?Io6 zap<*S&Zl6XclF_A?mMn=lI9}5TaI_j-FIBml(~~E<8#~JH0Df9UBx(%>xNv@j-!lm zvsiiE;X7@0t!fVBanBqG zVjHk_ZJeD9p0k5m0vQ<>d1bd+Gi7WttGme>)7NOrXl^dzF*T819u?0I@;AGILU7ie)~dn^~yJm z--hD1uSQqzIcEGe!p0@c-$vuNpG8-1d_&>T#$B(0Kd-s`vD?r+t61tZH1bMKVPxsA z*bcf*UyiO`@OR^TtkZX*tG9I;zp?y3Lix?#SpH9={2d04e~sVt_s!q6wPUNAYnN4N zo6R%+r0nP)BGtR+MHZm!^YHgV{9S;*7vb-P`1?-$y~r+mX)Ce=G2J2L7I*zCXkJ{qG`=bn^Vb zZx^v#wAo!T$a&J~tDZK#+cpLH7bE|E_&W%Hi}80T{tm+55%@b)eRqWSyIYY*S2Avy z`_se9;Nw&OZ^+;oi!x=f9KZQxunfQbO9uZjWYDyi#mWbDe9UcAU4Qipw!bR-#UmrF z(Ua^p%(fSadC~vO$V>aH$dCT&`{}PDzuMN|{Af$*pVDt@h8wYiFLL(S8@{9T52nBP?0Iq~K7F-o{>u2>2|Go; z>#pAE_wDY-S>xyL80`3V?*-oU7k9NzsA_J#+Oc`e$Baj#zgVt(P}(Z?%grg!q+FU; zY2)xtZ0JF}JLtaqAKIZ-Ip6@U8%v&alySUO$0x#}dy_8?`=idV!pi*(`F0^K;?< zVvMwt>%EAl_4p5I;HCdZKaY5m&h%om1N!;4VMs4Vx)Q!b8S13sK=-P#**N5_`@olw zM-6<42<~>Nfe#VshyEvue#qB9aUGNWld+B|u@^T=ISZ`_VzOoI);84{yZ!ciMO#0r z+P!TU@v5k9`na|MC@0Qs;kj^4sn`MXp&s?8ZZVGf^-+aef6RLGykEr! z`h87xmsG*mIEU>{xoX;SNmUbMv}w%{JeO2?;{TKnRRWx@^LBho>Wsc#>a6U{C2Y70Cj|O6sUiF!mfWk$FBFH{u6+q9vy~kZAaO* zL(jHz-G2b`g^%+xeAkB%-(E@|2R_h4h=YG9Hl|~H-I%IU`avi|Dg2-a){imf6`uQj zfbaWwB(VYbCUt?nmDB^im06E{pc($tqOH{B59FdBt?1z^ne?}TrUCm@e}+6f^4&V* zz+uWaY%P6R?l0K2WPFv3@$t6{ZH+kB&aN^%{C`=rdKLJW#$UE4Wt!*O94#-{DmDZB z(ef)k@U+O%6;a>}nP5zEx^@Bbab+TX?Skqi*unJjXmxt|f{b{zhJwgawhi}^z#evL zJ)qA_nP{5=-A!pNl7Hh zh=9~0f<*-cOs%4&mh!5l)S5W8id5x5e5oRmNVN%Q#akt>T8OC?Yi)_vYqic0kr}8} ziq)iw`904*w>@VjnK|c-+Wx-%BcGGmXP>>Fwf0(TuYFq^ew)k-;+{$Ds3$tbkH26E z#{jzr>U|B`g4lNrROa5yd=gE-{0P6N%txzwspUNLg1&$@IRcpqJe5^Di0^=rd<^#k zmetTB=ymLJUx%`qvH?B1yrKg<6!H}(}wic%Z;JleA5-T8F+|LEpAor+;H}RxNdxG-*0Muvo|m+Kpp7;4aI5sk-dI{E7~qrQW*YoZ|eK zkoLSym!1bM>QXD8nl6!_qfvG^)Kd))&91fUfo5yYDZWvcs~*TZ?YFtL4eQS-Zh#&) ztQc7QSBWoMfnV_DNu4jv;KP%s?`b@n@q8A~r**zO8_ySF*a-|xD6g}nf1HmW_2&tl z7+#cBOMisx2<`eD(LDa1?^A#NPi=mOaf>EWA0+({eTRQW((ww{oW+<-*8^oKa4rYV zWq4kR=W;w(;&~;W*WkHQ$A3*c{&Lhgfc0YjXt#bYAc}Zj)a7=Jod=+vDB_*j+xMD> z^>MmU|5UyF8S&+hVcAvFOdS`#z$MdgUV=KF3muz14tI6s4dV4Gc{_{b{ z5PR=F+zpESRD$)yFY!4AbMS z!G^Q_>E|_Kj<>B%TVECVZ=7PrzRiXY@RR%#)semQ@6ZR!@zx4>KV{uO;k)x5JCPsv z84fV=gD-NtHBo-u6f;hqR{lw9j*%aFBgb14`S(mQOgGLqs_bZE&`7@{t)G*vG+4cdAKKfiaK4t+wU7G z%Zoctsn4~IXbu@^FSvt!0?++KgFf{MBQL)D-cPe?4^ysfdAZJjIliVb zGk7iwy5@skp#L9}2i+BO<29wxBK#ggUkUH~;Qd7WF5uZL>pW!RQ`-FGvXI3_&ThZ+bIwwWGb-dx^dGpd0ev9X_(O<6W3){a*xAR?$Ko6oZ3yEm$mfdX zzKCZo%zh||eOIy(_krb0Hl=fmRbPTlvSS4X+!1A-(dFC=akKAW94`6;Lf3%%)mLDv z;$%vWR}t?6(RX0q&T_u5UR!WXCP z*CFr3&G9n)+q`5xvb@K{(mCoD*D7|R{++114syHob;zo&6UMstA1J>Ge!L{ZLH#aH zlxOOkq%XJ#x{CIE2LC^Yb#(Z}(NR50u&-i6c#b0W6+}m! zQF7xDWs)(^9)1zuZ1Xh<|9(z+M|2vnBoN=ggyjB+17GmS@w;7nW@DFpAw)hd8|LO$&q&qUdyrV~L zR_#=z#eglk8GnWNt_}7V-ySH!b3cBAPq;(n;C1@i4&%`vc1;K8FMA@c_SkEBZp8aF z+^ZZd%u#1U=L3`jlo>{zy#uh;l|NoRcc-R%`HVd=iZ*=^;#~(+>PZCO1yB~p(|d<2 z9UZ%JYpI8Op{I5Jtky8}^8=;x+?UdTJ5u;et)K4|*U&n{U?IrPJR#ZjO)d zs%x@pFW~rcOO|@v53_1N#{c6$clgEfj`#5V6u-IdW{k~^H7BmW<>4G6>yOi$mN@$+ zbb>OR>g=K5dG&bp$o=m2;2P(6o&x4foIMnHl#|uh+~G0zyWW*aJk=+wkGjKCV({mO znZ%<^P*sn3zL`lp)f3cZ?(mrHbxJ1jD5t11+~G0Xt8XUpRG*@bc8AC0&w<}`qhGLJ z^h2W1cVllY&#r2^Jwff!UEQ#6;pBT`&AOj+UH8fA{`&Csk?&>z_ zzS(u%(+iu!eTb(=gNV6Pkggn4%| zbc}u`@83)3tTJ?OPbKVPkvmK#KmPV4_1@b5jeCwgVmd|5@`&k~Ok+ZS|K>JVcEaS- z-F8fN-wA#b#~{=CCi9(aewLp11M@s;^4J!_C)4xxb#V52-GKBl)a0h0cZ&nOxA#oH z+|%IOCi`U7VkqRKI$tQ|eKq~~1?yKk$on-1 zd2e%&_Y4Pl_obhA-May!zv$wur^T~%Cz$bwsiUar=+q|RIHpxhHv#NwCaVclP| z)5q}jR2cNw6BWtMn#%I1=X)c~d{?BI@0V%j`%#+tUP?0`&TJ&Mqis&AyZ9BtU&h#F zeq%R%1LxIpwY^MYe+BmTalUtq6ayTT{Ylo<1m7uYe#w#YiC zzy8%^dfY|c_Z;M{bC7pRs#ru4-hmGC?sI_QoK$&RtQas$9ptTckhjS}-aQWT?st&) zDhGLUlI6Aa0h~kWE@ln-f$f#(2VVQ7H`{X;Vw-elgVVwR|M)R?I86KVqm1By{=36r z>3>FWOi)+2!(sBHI3qYtR%g4zVe;dsOyIzne!M#zCOFhe+cc)~G3Eyxg#w-NiIJNseiZSrn4H8-P%b~Oz;OD_K4{R8OJn1y~QJ@Id)9R{rz*TOe824;aa@@R9I#2Zc*HTsjziL?JpF9k0gTIH_#0dE6)VPvdWMKe=i@oL zT?5sH1GN2aapxLr{Q&p1a$h<2{T<>S@&ICcVejGGgV@7&JYrp(S%Db&iqe0^%56Ki zS5WbddYSvWxxXbYe%uzsX9u2wU0>lo7mOKCRabxy$75ey6n#VI8pLo|W5sabnMtOL zeVw=B-L2L;o(tx?8IU)eyDW*Vx88{}{dl*O?>6Aw2J4-ONr!i<`EDcLZM5Erm~?p8 z$akCZZnO1H#H7Q!u!t33U22>SqnvRrQ=1Q$`mG?>`~!_g{8=J)1ot>Hc3O0RvNnMB zU`z!ev)Dt-m~@B-x2N*PER}s2V~osnfqli@2Awe4H7#v3KNyjt2NofrqWzw3> zvW!@HC~GOpnuD_DSY-|Vjj|e9)(Vuh!YXSsaEX{_A;vnZF0Bi_iKjIuzJYs4 z{mJ9*$+Ba{-5V^$a{-Nk0_9L$jxu))`3yM;FrLehBysm1O&)je_n&0f4q^NTe#`hP z%}L_!Ax2$7+`WBLJQuV{=RxStK}&x${YZ?bSKV8gyGX){J^oFB0lwvnjaV~~)4&Yi zx5wB+?7wQz*~)e%R>r+UT0-2to0G)dL!6m}xO>k_arao>5R}JwG)62wrVT?HV(Zn& z@%Ba{4KZpWMr=LMP8o`Q4Em**ea!|=@)UKMaram*W7?qH=EG9Vz5z&k3H8fq#KgFT z|B&(#6KISalG2C?yr?kJfN3l-y$4M1S#5GBF;Qm5Du?nB*N|~%Oqm&t@86TkB!AKF z^?#SrNDJ!m$!VnJQPB6Uo)2};VBLpN_hGAU>^afuJ`wSUav=i-e<-hL?p`EKMn00h{Zc;i5i;PD(+ZG=wp#Lzly5ZB zAOp?&^fb`Clr(A&5$(_% zknx1==Eh>T(*A|4d`a^F`~5fhSg52W$Z!#aRxe;~?mTPqpXF`b3|Kbh3Pf zF(rp1Mg-&FjKbNG;fUu@i03Fgi|{Pe*ISGDH2W5D2I`ySH_u&QZZI0kQolJNt5(FF zLD`H?A>QFUK77Zu70qXK9EW~ws$P-JN*ON zl>+cnKZ9~U+Mn+juSvws!TtvmlAw%rp3>%gt*2?sZvi*4*V@Zk~hv_^joI zb_sU!-#Q+m@S)H4oAD6y|Jr>#M3MhIzlgy?pL;O!b1Y!Q&;GZHhdAsDiiZe)#Ee^w zK0x@h=$8}XA=3Xe;#M=C?(>-O5Sd1Q0RBjY5hIal^atqQ7=ASRRN)g|jlNonoA|o0 zW!4@%;|$yO{)zJh@qJ@Yt#3r1uAQgGzWXY~bisT9W5$g-N{gHL8`@nvXbV z`PJ2>TmAFfxB8E6&qtiIy3o%{8~qF08$-j|iKQ`gR9yeQGk;5`o|%G^7X#bs=> z#bw-&IDU-T_7>tYz7-#*Fo1Fr;xeLM%2s%sE?YV9Ka==Tf-fT8TD(8Xc;>7px)X63 zcj|E&huGpW4pHXb!+ekvL(UDqn&XFPVIMUg^I;15q#2M0#$~+w{;XOfZkrjG@gC?< zA!Kt4;wRn%`QHQ`+Jg9r>-D&d63?c~F&TfEBqk&4WQ@f}8T$<}8Cy{1qk5SwTA6=C zyVIwp&u{?wg$_Qc^Qjp+_$2Z_jb}5S&*J&CE4?o(5CU_IkC z9@C!xJbn+s@55UB#`-PL$v(}xPF?_=9NL~gq!~K70Xn$=I(f9NlSATk@<)(;j(w?< z#Kbn?{BAhdTV3kUuAOV>6~+~erz`AXZe_=f`uK_WtL}L~^S@%GnY`Zzng&(ktU74g zr_)rZ(e#Hn-uKsd|E|vaL*Vth$p23~58>H?=Re8w>QbeHPfJFLuLAh$P+n)t;5a)H zZ9!bhEsDBnpcVJ=hn!D@Z-YHppv|XV#ow5#WZcK$HX0eLFWPcudT}4G2hN*;b2XkS zo;Txp8=fkjx8r%6j{o*}{EW-k!FYyp+{Z0Amk->Bfm@4}n42I&opKlq2-!O18_uTIHCNh3MPC$9jX0E&c>MbibXCLv*a7udw6{@r8y)e`)pqCLd9U z;Nz*_+r!Y&7WDt8g6`4y-9lT2-=pz+ByAaN&3g2!EsFX}@G%IPGx>;e1Ru+EKEfAJ z%JAJ(JSAU1=)jD4K5hWEhTy{DG5Q(=^;fpVv`1mg*HV_)hF4}~*NT|GlD!sv2j*+d zdy;jYGoL-4<(H908mdqZbwsT7NbMx_#%Nc@vmA+b?FahTgZ@ILgWrq(Jz2XZ$zMzi zpzp?i>G3Q55OdWw|Nj4h@!DE> zy!O?t|4)tA)+*9??W4vocD$zPWc+xoKXtN;@!FA2e_G?UZy{y{{qN6vy!I0CbvIs{ z(9asL^?fsbyw;Py|4qkhHvqRZUW=2V^&7vK@!HK88#CU#InMYG7_Xgb@KGDD#o3_> zJ0Cx%@!DkY@rxR-UV9aFCmXN5fOKQL)&utFKV-bNRvxcSe)V}=*K$F>F_23EtpS*mjMw7$@;&h7^Il(Dnq<7T8u5rSy}tGuVkdYVuib)}G@tc&trYVr{~fR8 zZTL=-q*BCqGix{sh1-|aaYftyG z#%p)K7C&CQi@*O($7{oTTjMpm3>E$Siy5yKDF1omwP(@(V%&@In&6|f&i~Q|8y`QX z@!Fp-X8NMWYnwjK%y?}L%K4(!*S>?gla1HDjdWwYb_eWHXN&Fb0^=MN*QK#flIItU zJ3|=voqNUcjVkWg!d^-vmK^i&el*^B5XjMD(a(d=5r6JYy5pf2$`)}?aPF-?&h{wE zquhtliT!N+8_czVUgaI*5zB^mkMUhyP-*S0+b6MS18c?jPTbSifPLrO3r8QFdyU2n zAP(iwm;s1~kM+bb=E>skWFeMpoFDV4*W!***1>aPMm_7_5q41Q{b9Yg@i#E@J#hta z?ka-4mYx6b$KM6R`8e>9cWH#dL&n#a@1E|&zIvlxmdE(3a@~RK>T`DMykK7e8dS!H z5qr2%Z?r$|ivX{QgE9We@5;-;BjjP4z#qD>eJ^6j8L{`HXftsaE%3x)LE9U#^w}2N zR|uUm%V*g}8$ElOF@BQbz6Px`cxZc(m-iTmv!QP(B`51;1%NC1R(Z*der3`y{*Sfh zFxHWAU$b`Kgs2B{g>Mue)|zv%W}bs*FYYB^Y@AW;;oMzi^}t)_-&D$dZFT;;O5cH> zV9?)z>Lk;05(e_%b}-gfpp> z(RSdEf)_lK%KdmpR!wc}4EYjl1-}m@i%}KixxC)cNxwMr!8($oF){kJ)8Fyy@fsx?=eN#^HU!aE;#<eKSzjO$p)0NMe6c|D`ZC%(P5yre;IizBP7Gn~}HXd(7&>2VEsUuPJ^B3DN!qYMq!%(o99-KM_sD@~;y39*ee9>%cNJa^ z{-IsOJ7IfIhwd2m!m?}RIc*y4DfiAc9=@sE#w|iF~@@P!c!ps!E*2y_kE#Fu?K&9 z<*rHUq1AHVI;ZiIE6!;IuQasoa1lqp^b^Vl2AVEg3;#W zT_@}z|9azp>Q1B(=hGmYb96t1awg;tdHndl4s!n*;=~B~gFTUb2)pd_4m}~~xL1wx z%X|757sSx9x+ufRD@lusGc zcr>d0BjN`iMY)hApHlt8cPWRc%kW9a8zl!i^+dMizaj0i1K_K!V|$@v#@%U%A)I7L0+!Rf?l=s)Bw z&Ib?Cw)TPVf;+s>CeXQ#y@j}Es>mo8G6T8U0=dz2e+2HGA5lDhKWG}K^-~RP3yOF5 zR3@FnwiSCAHF=>g#j}>tarhgLvd81TD(IZSM{(X2yd3K*FNqZ?O^t1%irFvi)_tXL zQF+rL+V?`GiT!EkW?zYDyUp0M&wdoKof{4>D&{@PIjp-7=jf3hMLx0C2i?bS(Z9Aq zPWPfb;vtTE!6*7&NE7ElcY-F;M_=)5yc7JxH_ZP5`Xoc9ggk*3?t3@Nx|4mM&R<{< z=R(3;aOd|V>;s40Qs7V5hkWpx?|}WI-@LJOAlgLGG6}qaY>w(N1S#=itIL)V_9#U_5L2u}1w_Kw6*AnLw?wYP=^LcawK#Zc}N5GJZ?+_T1|f#e4&hDETqY)j)(Ud3VB*_Y;hm} zKS>E3Y*3WBEU#h3g~ih`PB{wy??wHFzU)L^@lDmS#SK*#7W>iGcdOt5_1n-*U@g5> z=wFlIFZz4fCm{p4lXK`5FL!Q``ycXG_ED%y>_cf=COmHGG3lj0D(J=kmm`k1q0?IX zNd8JFag2k`#2i0F(VmdYL(!p|k5NEF+;~Ugoq>hpQ{D&J20H0yvyZ4-F{*eA@Qj6i z)U}Mk3}{u@bBnrhj0#|3NfW{Z<^o* z>fX^^-O#yks2P4Kcp>6AS?4bdUR>k0ZnVSg?&>z%;X-@ee)_Aq@cZF&$?~n+xo{i$ z9{3}XA_aZ{#_ny1Ct>5q|G2|swnd4+B*nFo$dmXuyy3+#P3Bs04(QOIZ;-0nM?CNFqHgJjo_UtF_Fqrx~!;V32+qO|ZpkC&e zm9L+kjAvcs9iA$0ixp=d9)4JTg0#{QNQYr zZ>BB&xV{@5*8Av`IM9BB-Qh6X@3j;-IKC$@F6A7(B*O+DKDgDL4BKtmV`<`;-UW^q zGKAwcI}U&PePn~Jj}$yY8*S?jTN*yY_XH-XkCf%x(y?`4PA1=7PZ3wgSE{{@|bFXX!BoIL^bm>*6eJJRRllJe&eIegil6*Tm){F3Nl> zUY(fV#JkQ}NS|e;GcFOwtn}AobMS7C^)8^lo56SU@NS;A3+{yccBHnt63xZ_eIJ}BoTFfJ4M%dPyAkRQCzV(x(E zoeyK4`r!+0@j7Uam?#VjQ32Sf(HG8c8S0Bo7)}P;QG=u80rnFK-&7 z<6}PZx3LZR+N^vL%r)>GdDZwL-o0qOd!6$TeqSrcV{A*#!5Z^%V~$4K>2o8TV+X)u-d4mIZ2my1n|MHPfsux~+4ix=Q2%3A{fy%( zuQ`ix1a$g>Bsw3r_cM5Gt5|P^zaU}{Vw@B$?4iEl*Y-&dGh(4&EQNkto4^|Yh?jslw7_6(-e520f_Ed<4cGeiVh%LC#jpMrzoS=!C;FTr)?6N8TftWv z%=JN*r7%v)W7s>uxP6af4*M~zgY3lfaXee_+^LV#TjIv)Vy@;b;%VutDwtcZhdnGP zpR9`ht9r6}*)6%XZ{j^;RS5k69uq5cWfQTYz4k&sxIT9~u_A^B`SLONLH%X=l7(5d z|Ht+g>qHt~I8PnTtu)s$(AS8VBZ8KGHHh7ScpHen5$@Mq7VgA;2*%&=XLUqBu1Meo zG#d|Kml^7LoK&@xb^elQM^ogZHY zKh_{mxD$LW0!BYD%>l+Dl>HGf&cScQJ&6_$7CgA!;6bpTI&^VX?UTuPaD$x(gEbmv zq5SnIZwtzwh4QE1_ZIvPWpzYXRhm4A>hi$Y)EW=;@8{_}m=Bug;rm5+&d0L~&qX>9 zsuFn+2G+kV%Br0qcyW}7dy|Y8Z8zuEP9iU+pv+5vEd*>Y0_!FCJqf>G#P1bZSYOL- z<(zETX-+?NoZgt#yMJ4>T0D)D<{dpI~$6>9z>ji_yE$)$?&RhA+8)BRKR*ibo$ z4K=kSFhE%z7^!@p>-H>%v7wHmd{05!PsTnJ)GK0+AU27JJ5~VOhgcoTXgmw>9E&Gn zmr&1@vGM$4onp-l^+Y%4;%{0>6l+Ee`MMv6wINYwzTT(vH~hFd{BFm$(U}&Fph4JT z;it6aa}Viu1-{g?;4NcC&Doe$%l&*JPE^&gYIr>K0K7N&zIUS1@pbT?Yh!ySLf+bj ztJCpY@OGnB&y9M_D6uzu)aj

`OeTSM(*JLN#2ZSbfPjrQ=kVU4*j7X=P8qZ?4B! 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%0A{CSBy7in{!;rvN^{U=Pq_WF?@M% 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�YEzesz;*-vUX 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 z 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

v!+|R!?0wpRYCzpqzo!_W|Y3 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ΜyU}XtlZ|hwoQI5#-B7!& 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

Lt^`hEIn28*B#2woHfsSrw8h2TOG@^_cwx^ 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

x0l+R0ZvS~Zz<@W}(>2dCO>g`AJKcsaJ0 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%0DuU{QdtJ`Mn<1H_r&+W2#;;%ioS8e@wLU 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℞ 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 z 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

( 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

0m*^^CYnOU% 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

eX;!Icwh%k@FT-7Khv*0 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

-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

9A1^jPZS&3e4Yv06tL4+@ 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≈yay#MbZI*5AAm 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

*m2XYzX`c#8{1adCqQnH{4t8NrochQD^ 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üZ5~(p`jIdmm2_p&GcnD7}_lwH# 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%0A)Ty_n=a6j2F=C-D}1_7J8f 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
M)|7g7mt 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%0AHcB2rAN9{*QVmuHC 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 z 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 -#include -#include - -#include "cuentitos.hpp" - -int main() { - FILE * fp; - fp = fopen ("../../../mr-nugget-events/cuentitos.db", "r"); - - fseek(fp, 0L, SEEK_END); - size_t size = 0; - size = ftell(fp); - fseek(fp, 0L, SEEK_SET); - - uint8_t * buffer = (uint8_t*)malloc(size * sizeof(uint8_t)); - - fread(buffer,sizeof(uint8_t),size,fp); - - fclose(fp); - - DatabaseId db_id = cuentitos_load_db(buffer, size); - RuntimeId runtime_id = cuentitos_new_runtime(db_id); - - cuentitos_set_seed(runtime_id, 42); - - cuentitos_set_int_variable(runtime_id, "health", 10); - cuentitos_set_float_variable(runtime_id, "energized", 10.5); - cuentitos_set_bool_variable(runtime_id, "donkey", true); - - int32_t health; - float energized; - bool donkey; - - cuentitos_get_int_variable(runtime_id, "health", &health); - cuentitos_get_float_variable(runtime_id, "energized", &energized); - cuentitos_get_bool_variable(runtime_id, "donkey", &donkey); - - // Read next event - // uint8_t *event_buffer = (uint8_t*)malloc(10000 * sizeof(uint8_t)); - // size_t* length = (size_t*)malloc(1 * sizeof(size_t)); - // get_event(runtime_id, event_buffer, length); - - // // set choice - // bool result = set_choice(runtime_id, 0); - // if(result){ - // printf("Choice 0 selected\n"); - // }else{ - // printf("Error selecting choice\n"); - // } -} - diff --git a/bindings/c/cuentitos.hpp b/bindings/c/cuentitos.hpp deleted file mode 100644 index 03a9d54..0000000 --- a/bindings/c/cuentitos.hpp +++ /dev/null @@ -1,54 +0,0 @@ -#include -#include -#include -#include -#include - -enum class TimeOfDay { - Morning, - Noon, - Evening, - Night, -}; - -using DatabaseId = uintptr_t; - -using RuntimeId = uintptr_t; - -using Cstring = const char*; - -extern "C" { - -DatabaseId cuentitos_load_db(const uint8_t *buffer, uintptr_t length); - -RuntimeId cuentitos_new_runtime(DatabaseId id); - -void cuentitos_set_seed(RuntimeId id, uint64_t seed); - -bool cuentitos_set_int_variable(RuntimeId id, Cstring variable, int32_t value); - -bool cuentitos_set_float_variable(RuntimeId id, Cstring variable, float value); - -bool cuentitos_set_bool_variable(RuntimeId id, Cstring variable, bool value); - -bool cuentitos_get_int_variable(RuntimeId id, Cstring variable, int32_t *value); - -bool cuentitos_get_float_variable(RuntimeId id, Cstring variable, float *value); - -bool cuentitos_get_bool_variable(RuntimeId id, Cstring variable, bool *value); - -bool cuentitos_set_item(RuntimeId id, Cstring item, uint8_t value); - -bool cuentitos_set_time_of_day(RuntimeId id, TimeOfDay time_of_day); - -bool cuentitos_get_reputation(RuntimeId id, Cstring reputation, int32_t *value); - -bool cuentitos_get_decision(RuntimeId id, Cstring decision, bool *value); - -void cuentitos_next_event(uintptr_t id, uint8_t *buffer, uintptr_t *length); - -bool cuentitos_set_choice(uintptr_t id, int32_t choice_id, uint8_t *buffer, uintptr_t *length); - -bool cuentitos_current_modifiers(uintptr_t id, uint8_t *buffer, uintptr_t *length); - -} // extern "C" diff --git a/cli/Cargo.toml b/cli/Cargo.toml index a427f16..00ef760 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -8,8 +8,6 @@ name = "cuentitos" path = "src/main.rs" [dependencies] -# serde = { version = "1.0.144", features = ["derive"] } -# rmp-serde = "1.1.1" clap = { version = "4.0.17", features = ["derive"] } cuentitos-compiler = { path = "../compiler" } cuentitos-runtime = { path = "../runtime" } diff --git a/cli/build/cuentitos.db b/cli/build/cuentitos.db new file mode 100644 index 0000000..cc59e4a --- /dev/null +++ b/cli/build/cuentitos.db @@ -0,0 +1,3 @@ +Text`You've just arrived in the bustling city, full of excitement and anticipation for your new job. TextWThe skyline reaches for the clouds, and the sounds of traffic and people surround you. TextفAs you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment.TextuFeeling mentally and physically exhausted from the day's adventures, you decide it's time to head back to your hotel.Text٥As you enter the peaceful sanctuary of your room, you take a deep breath, relieved to have a quiet space where you can recharge and prepare for the challenges ahead.Text)The sun shines bright through the window.time_of_dayIntegerNotEqualnightText-The moonlight gives the room a peaceful tone.time_of_dayIntegerEqualnightText?You start to think about all the stuff you need to do tomorrow. time_of_dayIntegerEqualnightText That makes you feel overwhelmed. +time_of_dayIntegerEqualnightenergyIntegerLessThan10Text!You decide to focus on the now... + time_of_dayIntegerEqualnight \ No newline at end of file diff --git a/cli/src/console.rs b/cli/src/console.rs index df8b927..32629d8 100644 --- a/cli/src/console.rs +++ b/cli/src/console.rs @@ -25,30 +25,41 @@ impl Console { let metadata = fs::metadata(&path).expect("unable to read metadata"); let mut buffer = vec![0; metadata.len() as usize]; f.read_exact(&mut buffer).expect("buffer overflow"); - let database = Database::from_u8(&buffer).unwrap(); + let file = cuentitos_runtime::Database::from_u8(&buffer).unwrap(); - let mut runtime = Runtime::new(database); + let mut runtime = Runtime::new(file); loop { let input = Self::prompt("> "); let mut args = input.split(' '); match args.next() { - Some("n") => { - let event = runtime.next_event(); - match event { - Some(event) => { - println!("{}", event.title); - println!("---"); - println!("{}", event.description); - } - None => {} + Some("") => { + if let Some(output_text) = runtime.next_block() { + print_output_text(output_text); } } Some("q") => break, - Some(&_) => {} + Some(str) => { + if let Ok(choice) = str.parse::() { + if choice == 0 { + println!("invalid option"); + continue; + } + if let Some(output_text) = runtime.pick_choice(choice - 1) { + print_output_text(output_text); + } + } + } None => {} } } } } + +fn print_output_text(output_text: Block) { + println!("{}", output_text.text); + for i in 0..output_text.choices.len() { + println!(" ({}){}", i + 1, output_text.choices[i]); + } +} diff --git a/cli/src/main.rs b/cli/src/main.rs index 2aeb4a7..7305115 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -1,8 +1,3 @@ -use notify::event::AccessKind::Close; -use notify::event::AccessMode::Write; -use notify::EventKind; -use notify::{RecursiveMode, Result, Watcher}; - use clap::{Parser, Subcommand}; use std::path::Path; @@ -29,13 +24,6 @@ enum Commands { #[clap(default_value = "./cuentitos.db")] source_path: std::path::PathBuf, }, - - Watch { - #[clap(default_value = ".")] - source_path: std::path::PathBuf, - #[clap(default_value = "./cuentitos.db")] - build_path: std::path::PathBuf, - }, } fn compile(source_path: T, destination_path: U) @@ -43,79 +31,7 @@ where T: AsRef, U: AsRef, { - let result = cuentitos_compiler::compile(&source_path, destination_path).unwrap(); - let source_path = source_path.as_ref(); - println!(); - println!( - "Parse result for events in '{}/events'", - source_path.display() - ); - println!(); - - for (id, event) in result.events { - match event { - Ok(_) => println!(" ✔️ {}", id), - Err(error) => { - println!(" ❌ {}:", id); - println!(" - {}", error); - } - } - } - - println!(); - println!( - "Parse result for items in '{}/items'", - source_path.display() - ); - println!(); - - for (id, item) in result.items { - match item { - Ok(_) => println!(" ✔️ {}", id), - Err(error) => { - println!(" ❌ {}:", id); - println!(" - {}", error); - } - } - } -} - -fn watch(source_path: T, destination_path: U) -> Result<()> -where - T: AsRef, - U: AsRef, -{ - compile(&source_path, &destination_path); - let source_path_moved = source_path.as_ref().to_path_buf(); - let destination_path = destination_path.as_ref().to_path_buf(); - - let mut watcher = notify::recommended_watcher(move |res: Result| match res { - Ok(event) => { - if event.kind == EventKind::Access(Close(Write)) { - compile(&source_path_moved, &destination_path); - } - } - Err(e) => println!("watch error: {:?}", e), - }) - .unwrap(); - - // Add a path to be watched. All files and directories at that path and - // below will be monitored for changes. - let mut listening_paths = source_path.as_ref().to_path_buf(); - listening_paths.push("events"); - watcher - .watch(&listening_paths, RecursiveMode::Recursive) - .unwrap(); - - let mut listening_paths = source_path.as_ref().to_path_buf(); - listening_paths.push("items"); - if listening_paths.is_dir() { - watcher - .watch(&listening_paths, RecursiveMode::Recursive) - .unwrap(); - } - - loop {} + cuentitos_compiler::compile(&source_path, destination_path); } fn main() { @@ -131,12 +47,6 @@ fn main() { Some(Commands::Run { source_path }) => { Console::start(source_path); } - Some(Commands::Watch { - source_path, - build_path, - }) => { - watch(source_path, build_path).unwrap(); - } None => {} } } diff --git a/common/Cargo.toml b/common/Cargo.toml index e1152f4..229845a 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -1,12 +1,11 @@ [package] name = "cuentitos-common" -version = "0.1.0" +version = "0.2.0" edition = "2021" [dependencies] +rand = "0.8.5" serde = { version = "1.0.144", features = ["derive"] } rmp-serde = "1.1.1" rmp = "^0.8" -toml = "0.5.9" -strum = "0.24.1" -strum_macros = "0.24.1" +typetag = "0.2" \ No newline at end of file diff --git a/common/examples/serialization.rs b/common/examples/serialization.rs deleted file mode 100644 index 80fbdb2..0000000 --- a/common/examples/serialization.rs +++ /dev/null @@ -1,23 +0,0 @@ -use cuentitos_common::*; -use std::fs::File; -use std::io::Write; - -use rmp_serde::Serializer; -use serde::ser::Serialize; - -fn main() { - let element = EventBuilder::new() - .id("my-event") - .unique() - .title("My Event") - .description("My event description") - .choice(EventChoice::default()) - .require(EventRequirement::default()) - .build(); - let mut result: Vec = Vec::new(); - element - .serialize(&mut Serializer::new(&mut result)) - .unwrap(); - let mut file = File::create("default.mp").unwrap(); - file.write_all(&result).unwrap(); -} diff --git a/common/fixtures/cuentitos.toml b/common/fixtures/cuentitos.toml deleted file mode 100644 index 47c2113..0000000 --- a/common/fixtures/cuentitos.toml +++ /dev/null @@ -1,10 +0,0 @@ -reputations = [ "rep_1", "rep_2" ] -settings = [ "character", "character-voice" ] - -locales = ["en"] -default_locale = "en" - -[variables] -health = "integer" -happy = "bool" -tiles = { kind = "enum", values = ["forest"] } diff --git a/common/fixtures/database.mp b/common/fixtures/database.mp deleted file mode 100644 index a4414e2..0000000 --- a/common/fixtures/database.mp +++ /dev/null @@ -1,4 +0,0 @@ -happyboolhealthintegerrep_1rep_2forestchoices­A Basic EventThis event has optionsAn Option without requirements#Another option without requirementsbasic­A Basic Event5This event has no options, just title and descriptionrequirementsªConditionsThis event has conditionsAn OptionResourcehealthintegerEquals100TimeOfDayNightEqualsEventchoicesDepends -One ResultResourcehappyboolEqualstrueTimeOfDayMorningEqualsTimeOfDayNoonMutExZAnother ResultResourcehappyboolEqualsfalseTimeOfDayEveningEqualsResourcehealthintegerLessThan100Itemwooden_figureEquals1Reputationrep_1HigherThan5TimeOfDayNightEqualsEventchoicesMutExDecisiona_decisionDependsTileforestDependsmodifiers·A Basic Event with mods,This event has options with results and modsAn OptiondOne ResultItemwooden_figure1Itemwooden_figure-1Resourcehealthinteger-2Resourcehealthinteger5ResourcehappybooltrueResourcehappyboolfalseReputationrep_12Reputationrep_2-2Decisiona_decisionAchievementan_achievementresults­A Basic Event;This event has options with results, none have requirementsAn Option -One ResultZAnother ResultAnother optionZOne more Result -Yet another Result diff --git a/common/fixtures/events/simple.mp b/common/fixtures/events/simple.mp deleted file mode 100644 index bf7f434..0000000 --- a/common/fixtures/events/simple.mp +++ /dev/null @@ -1 +0,0 @@ -my-eventèMy EventMy event descriptionEmpty \ No newline at end of file diff --git a/common/src/block.rs b/common/src/block.rs new file mode 100644 index 0000000..b606a43 --- /dev/null +++ b/common/src/block.rs @@ -0,0 +1,67 @@ +use crate::{FrequencyModifier, I18nId, Modifier, Requirement}; +use serde::{Deserialize, Serialize}; + +pub type BlockId = usize; +pub type SectionId = usize; +pub type BucketName = String; + +#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Clone)] +pub enum NextBlock { + #[default] + None, + BlockId(BlockId), + EndOfFile, + Section(SectionId), +} + +#[derive(Debug, Serialize, Deserialize, Default, PartialEq, Clone)] +pub struct BlockSettings { + pub children: Vec, + pub next: NextBlock, + pub chance: Option, + pub frequency_modifiers: Vec, + pub requirements: Vec, + pub modifiers: Vec, +} + +#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)] +pub enum Block { + Text { + id: I18nId, + settings: BlockSettings, + }, + Choice { + id: I18nId, + settings: BlockSettings, + }, + Bucket { + name: Option, + settings: BlockSettings, + }, +} + +impl Block { + pub fn get_settings_mut(&mut self) -> &mut BlockSettings { + match self { + Block::Text { id: _, settings } => settings, + Block::Choice { id: _, settings } => settings, + Block::Bucket { name: _, settings } => settings, + } + } + pub fn get_settings(&self) -> &BlockSettings { + match self { + Block::Text { id: _, settings } => settings, + Block::Choice { id: _, settings } => settings, + Block::Bucket { name: _, settings } => settings, + } + } +} + +impl Default for Block { + fn default() -> Self { + Block::Text { + id: String::default(), + settings: BlockSettings::default(), + } + } +} diff --git a/palabritas-common/src/condition.rs b/common/src/condition.rs similarity index 97% rename from palabritas-common/src/condition.rs rename to common/src/condition.rs index 07d3652..df859e5 100644 --- a/palabritas-common/src/condition.rs +++ b/common/src/condition.rs @@ -22,6 +22,7 @@ pub struct Condition { impl Condition { pub fn meets_condition(&self) -> bool { + //TODO true } } diff --git a/common/src/config.rs b/common/src/config.rs deleted file mode 100644 index de5a4ef..0000000 --- a/common/src/config.rs +++ /dev/null @@ -1,108 +0,0 @@ -use std::path::Path; -use std::path::PathBuf; - -use std::collections::HashMap; - -use crate::Result; -use crate::VariableKind; - -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Clone, Eq)] -pub struct Config { - #[serde(skip)] - pub base_path: PathBuf, - #[serde(skip)] - pub destination_path: PathBuf, - #[serde(default)] - pub variables: HashMap, - #[serde(default)] - pub reputations: Vec, - #[serde(default)] - pub settings: Vec, - #[serde(default)] - pub runtime: RuntimeConfig, - pub locales: Vec, - pub default_locale: String, -} - -#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)] -pub struct RuntimeConfig { - #[serde(default)] - pub chosen_event_frequency_penalty: i32, - #[serde(default)] - pub event_frequency_cooldown: u32, - #[serde(default)] - pub met_requirement_frequency_boost: u32, -} - -impl Default for RuntimeConfig { - fn default() -> RuntimeConfig { - RuntimeConfig { - chosen_event_frequency_penalty: -100, - event_frequency_cooldown: 10, - met_requirement_frequency_boost: 50, - } - } -} - -impl Config { - pub fn load(source_path: T, destination_path: U) -> Result - where - T: AsRef, - U: AsRef, - { - let mut filename = source_path.as_ref().to_path_buf(); - filename.push("cuentitos.toml"); - let contents = match std::fs::read_to_string(&filename) { - Ok(c) => c, - Err(err) => { - eprintln!("Could not read config file `{}`", filename.display()); - return Err(Box::new(err)); - } - }; - - let mut config: Config = match toml::from_str(&contents) { - Ok(d) => d, - Err(err) => { - eprintln!("Unable to load data from `{}`", filename.display()); - return Err(Box::new(err)); - } - }; - - config.base_path = source_path.as_ref().to_path_buf(); - config.destination_path = destination_path.as_ref().to_path_buf(); - Ok(config) - } -} - -#[cfg(test)] -mod test { - use crate::Config; - use crate::VariableKind; - - // #[test] - // fn loads_config_from_toml() { - // // TODO(fran): Fix this - // let config = Config::load("fixtures", "fixtures-build").expect("Cannot load fixture"); - // let mut expected = Config::default(); - // expected.base_path.push("fixtures"); - // expected.destination_path.push("fixtures-build"); - // expected - // .variables - // .insert("health".to_string(), VariableKind::Integer); - // expected - // .variables - // .insert("happy".to_string(), VariableKind::Bool); - // expected - // .variables - // .insert("tiles".to_string(), VariableKind::Enum { values: vec!["forest".to_string()] }); - // expected.reputations = vec!["rep_1".to_string(), "rep_2".to_string()]; - // expected.settings.push("character".to_string()); - // expected.settings.push("character-voice".to_string()); - // expected.locales = vec!["en".to_string()]; - // expected.default_locale = "en".to_string(); - - // assert_eq!(config, expected); - // } -} diff --git a/common/src/database.rs b/common/src/database.rs index 549f0a1..e61e69c 100644 --- a/common/src/database.rs +++ b/common/src/database.rs @@ -1,43 +1,20 @@ -use crate::Config; -use crate::Event; -use crate::I18n; -use crate::Item; -use crate::Result; +use crate::{Block, Result}; use rmp_serde::Deserializer; use serde::{Deserialize, Serialize}; -#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] +#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Clone)] pub struct Database { - pub config: Config, - pub events: Vec, - pub items: Vec, - pub i18n: I18n, + pub blocks: Vec, } impl Database { pub fn from_u8(bytes: &[u8]) -> Result { let mut de = Deserializer::new(bytes); - let db: std::result::Result = + let file: std::result::Result = Deserialize::deserialize(&mut de); - match db { - Ok(database) => Ok(database), + match file { + Ok(file) => Ok(file), Err(error) => Err(Box::new(error)), } } } - -#[cfg(test)] -mod test { - // use crate::test_utils::load_mp_fixture; - // use crate::Database; - - // #[test] - // fn load_binary_db() { - // let db = load_mp_fixture("database").unwrap(); - // let database = Database::from_u8(&db).unwrap(); - - // println!("{:?}", database); - - // assert_eq!(database.events.len(), 5); - // } -} diff --git a/palabritas-common/src/divert.rs b/common/src/divert.rs similarity index 100% rename from palabritas-common/src/divert.rs rename to common/src/divert.rs diff --git a/common/src/event.rs b/common/src/event.rs deleted file mode 100644 index bf18bc2..0000000 --- a/common/src/event.rs +++ /dev/null @@ -1,191 +0,0 @@ -use crate::*; -use serde::{Deserialize, Serialize}; -use std::collections::HashMap; - -pub type EventId = String; - -#[derive(Default, Clone, Deserialize, Serialize, Debug, PartialEq, Eq)] -pub struct Event { - pub id: EventId, - pub unique: bool, - pub title: String, - pub description: String, - pub choices: Vec, - pub requirements: Vec, - pub settings: HashMap, -} - -#[derive(Default)] -pub struct EventBuilder { - event: Event, -} - -impl EventBuilder { - pub fn new() -> EventBuilder { - EventBuilder { - ..Default::default() - } - } - - pub fn id(&mut self, id: T) -> &mut EventBuilder - where - T: AsRef, - { - self.event.id = id.as_ref().to_string(); - self - } - - pub fn unique(&mut self) -> &mut EventBuilder { - self.event.unique = true; - self - } - - pub fn title(&mut self, title: T) -> &mut EventBuilder - where - T: AsRef, - { - self.event.title = title.as_ref().to_string(); - self - } - - pub fn description(&mut self, description: T) -> &mut EventBuilder - where - T: AsRef, - { - self.event.description = description.as_ref().to_string(); - self - } - - pub fn choice(&mut self, choice: EventChoice) -> &mut EventBuilder { - self.event.choices.push(choice); - self - } - - pub fn choice_count(&self) -> usize { - self.event.choices.len() - } - - pub fn result_count(&self, choice: usize) -> usize { - self.event.choices[choice].results.len() - } - - pub fn require(&mut self, requirement: EventRequirement) -> &mut EventBuilder { - self.event.requirements.push(requirement); - self - } - - pub fn set(&mut self, key: T, value: U) -> &mut EventBuilder - where - T: AsRef, - U: AsRef, - { - let key = key.as_ref().to_string(); - let value = value.as_ref().to_string(); - - self.event.settings.insert(key, value); - self - } - pub fn build(&mut self) -> Event { - self.event.clone() - } -} - -#[cfg(test)] -mod test { - use crate::event::*; - use crate::test_utils::{load_mp_fixture, serialize}; - - #[test] - fn event_builder_supports_id() { - let event = EventBuilder::new().build(); - assert_eq!(event.id, ""); - - let event = EventBuilder::new().id("my-event").build(); - - assert_eq!(event.id, "my-event"); - } - - #[test] - fn event_builder_supports_unique() { - let event = EventBuilder::new().build(); - assert_eq!(event.unique, false); - - let event = EventBuilder::new().unique().build(); - - assert_eq!(event.unique, true); - } - - #[test] - fn event_builder_supports_title() { - let event = EventBuilder::new().build(); - assert_eq!(event.title, ""); - - let event = EventBuilder::new().title("My Event").build(); - - assert_eq!(event.title, "My Event"); - } - - #[test] - fn event_builder_supports_description() { - let event = EventBuilder::new().build(); - assert_eq!(event.description, ""); - - let event = EventBuilder::new() - .description("My event's description") - .build(); - - assert_eq!(event.description, "My event's description"); - } - - #[test] - fn event_builder_supports_adding_choices() { - let event = EventBuilder::new().build(); - assert_eq!(event.choices.len(), 0); - - let event = EventBuilder::new().choice(EventChoice::default()).build(); - - assert_eq!(event.choices[0], EventChoice::default()); - } - - #[test] - fn event_builder_supports_adding_requirements() { - let event = EventBuilder::new().build(); - assert_eq!(event.requirements.len(), 0); - - let event = EventBuilder::new() - .require(EventRequirement::default()) - .build(); - - assert_eq!(event.requirements[0], EventRequirement::default()); - } - - #[test] - fn event_builder_supports_settings() { - let event = EventBuilder::new().build(); - assert_eq!(event.settings.len(), 0); - - let event = EventBuilder::new().set("an-option", "the-value").build(); - - assert_eq!( - event.settings.get(&"an-option".to_string()).unwrap(), - &"the-value".to_string() - ); - } - - #[test] - fn event_serializes_to_message_pack() { - let event = EventBuilder::new() - .id("my-event") - .unique() - .title("My Event") - .description("My event description") - .choice(EventChoice::default()) - .require(EventRequirement::default()) - .build(); - - let result = serialize(event).unwrap(); - let expected = load_mp_fixture("events/simple").unwrap(); - - assert_eq!(result, expected) - } -} diff --git a/common/src/event_choice.rs b/common/src/event_choice.rs deleted file mode 100644 index cb55e08..0000000 --- a/common/src/event_choice.rs +++ /dev/null @@ -1,10 +0,0 @@ -use crate::EventRequirement; -use crate::EventResult; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] -pub struct EventChoice { - pub text: String, - pub requirements: Vec, - pub results: Vec, -} diff --git a/common/src/event_requirement.rs b/common/src/event_requirement.rs deleted file mode 100644 index 5da6b81..0000000 --- a/common/src/event_requirement.rs +++ /dev/null @@ -1,50 +0,0 @@ -use crate::DecisionId; -use crate::EventId; -use crate::ItemId; -use crate::ReputationId; -use crate::TimeOfDay; -use crate::Variable; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] -pub enum Condition { - #[default] - Equals, - HigherThan, - LessThan, - Depends, - MutEx, -} - -#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] -pub enum EventRequirement { - #[default] - Empty, - Variable { - variable: Variable, - condition: Condition, - value: String, - }, - Item { - id: ItemId, - condition: Condition, - value: String, - }, - Reputation { - id: ReputationId, - condition: Condition, - value: String, - }, - TimeOfDay { - id: TimeOfDay, - condition: Condition, - }, - Decision { - id: DecisionId, - condition: Condition, - }, - Event { - id: EventId, - condition: Condition, - }, -} diff --git a/common/src/event_result.rs b/common/src/event_result.rs deleted file mode 100644 index fd9d6cf..0000000 --- a/common/src/event_result.rs +++ /dev/null @@ -1,11 +0,0 @@ -use crate::EventRequirement; -use crate::Modifier; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] -pub struct EventResult { - pub chance: u32, - pub text: String, - pub requirements: Vec, - pub modifiers: Vec, -} diff --git a/palabritas-common/src/frequency.rs b/common/src/frequency.rs similarity index 73% rename from palabritas-common/src/frequency.rs rename to common/src/frequency.rs index b228b9d..0b38ddc 100644 --- a/palabritas-common/src/frequency.rs +++ b/common/src/frequency.rs @@ -2,15 +2,15 @@ use crate::Condition; use serde::{Deserialize, Serialize}; #[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)] -pub struct Frequency { +pub struct FrequencyModifier { pub condition: Condition, - pub change_value: f32, + pub value: f32, } -impl Frequency { +impl FrequencyModifier { pub fn change_frequency(&self) -> f32 { match self.condition.meets_condition() { - true => self.change_value, + true => self.value, false => 0., } } diff --git a/common/src/i18n.rs b/common/src/i18n.rs index 6901e86..dd24261 100644 --- a/common/src/i18n.rs +++ b/common/src/i18n.rs @@ -1,7 +1,8 @@ use serde::{Deserialize, Serialize}; use std::collections::HashMap; -pub type LanguageDb = HashMap; +pub type I18nId = String; +pub type LanguageDb = HashMap; pub type LanguageId = String; #[derive(Debug, Default, Serialize, Deserialize, Clone, Eq, PartialEq)] diff --git a/common/src/item.rs b/common/src/item.rs deleted file mode 100644 index c855716..0000000 --- a/common/src/item.rs +++ /dev/null @@ -1,120 +0,0 @@ -use crate::ItemId; -use serde::{Deserialize, Serialize}; -use strum_macros::EnumIter; - -#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq, Clone, EnumIter)] -pub enum ItemKind { - Ingredient, - #[default] - Other, -} - -#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq, Clone)] -pub struct Item { - pub id: ItemId, - pub kind: ItemKind, - pub name: String, - pub description: String, - pub max_stack_count: u8, -} - -#[derive(Default)] -pub struct ItemBuilder { - item: Item, -} - -impl ItemBuilder { - pub fn new() -> ItemBuilder { - ItemBuilder { - ..Default::default() - } - } - - pub fn id(&mut self, id: T) -> &mut ItemBuilder - where - T: AsRef, - { - self.item.id = id.as_ref().to_string(); - self - } - - pub fn kind(&mut self, kind: ItemKind) -> &mut ItemBuilder { - self.item.kind = kind; - self - } - - pub fn name(&mut self, name: T) -> &mut ItemBuilder - where - T: AsRef, - { - self.item.name = name.as_ref().to_string(); - self - } - - pub fn description(&mut self, description: T) -> &mut ItemBuilder - where - T: AsRef, - { - self.item.description = description.as_ref().to_string(); - self - } - - pub fn max_stack_count(&mut self, count: u8) -> &mut ItemBuilder { - self.item.max_stack_count = count; - self - } - - pub fn build(&mut self) -> Item { - self.item.clone() - } -} - -#[cfg(test)] -mod test { - use crate::item::*; - - #[test] - fn item_builder_supports_id() { - let item = ItemBuilder::new().build(); - assert_eq!(item.id, ""); - - let item = ItemBuilder::new().id("my-item").build(); - - assert_eq!(item.id, "my-item"); - } - - #[test] - fn item_builder_supports_kind() { - let item = ItemBuilder::new().build(); - assert_eq!(item.kind, ItemKind::Other); - - let item = ItemBuilder::new().kind(ItemKind::Ingredient).build(); - - assert_eq!(item.kind, ItemKind::Ingredient); - } - - #[test] - fn item_builder_supports_name_and_description() { - let item = ItemBuilder::new().build(); - assert_eq!(item.name, ""); - assert_eq!(item.description, ""); - - let item = ItemBuilder::new() - .name("my-item") - .description("my description") - .build(); - - assert_eq!(item.name, "my-item"); - assert_eq!(item.description, "my description"); - } - - #[test] - fn item_builder_supports_max_stack_count() { - let item = ItemBuilder::new().build(); - assert_eq!(item.max_stack_count, 0); - - let item = ItemBuilder::new().max_stack_count(6).build(); - - assert_eq!(item.max_stack_count, 6); - } -} diff --git a/palabritas-common/src/knot.rs b/common/src/knot.rs similarity index 74% rename from palabritas-common/src/knot.rs rename to common/src/knot.rs index e2e3dd9..adf5deb 100644 --- a/palabritas-common/src/knot.rs +++ b/common/src/knot.rs @@ -1,9 +1,9 @@ -use crate::{Content, Stitch}; +use crate::{Block, Stitch}; use serde::{Deserialize, Serialize}; #[derive(Debug, Default, Serialize, Deserialize, PartialEq)] pub struct Knot { pub identifier: String, - pub content: Vec, + pub blocks: Vec, pub stitches: Vec, } diff --git a/common/src/lib.rs b/common/src/lib.rs index 7f1d6cb..d406306 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -1,50 +1,34 @@ -use serde::{Deserialize, Serialize}; - -pub mod test_utils; - -mod event; -pub use event::*; +mod database; +pub use database::*; -mod event_choice; -pub use event_choice::*; +mod knot; +pub use knot::*; -mod event_requirement; -pub use event_requirement::*; +mod stitch; +pub use stitch::*; -mod item; -pub use item::*; +mod block; +pub use block::*; -mod modifier; -pub use modifier::*; +mod requirement; +pub use requirement::*; -mod event_result; -pub use event_result::*; +mod condition; +pub use condition::*; mod variable; pub use variable::*; -mod config; -pub use config::Config; +mod frequency; +pub use frequency::*; -mod database; -pub use database::Database; +mod divert; +pub use divert::*; -mod i18n; -pub use i18n::*; +mod modifier; +pub use modifier::*; pub type Result = std::result::Result>; -pub type ItemId = String; -pub type ReputationId = String; -pub type DecisionId = String; -pub type TileId = String; -pub type AchievementId = String; - -#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] -pub enum TimeOfDay { - #[default] - Morning, - Noon, - Evening, - Night, -} +mod i18n; +pub use i18n::*; diff --git a/common/src/modifier.rs b/common/src/modifier.rs index 75e6c86..87b078d 100644 --- a/common/src/modifier.rs +++ b/common/src/modifier.rs @@ -1,26 +1,8 @@ -use crate::AchievementId; -use crate::DecisionId; -use crate::ItemId; -use crate::ReputationId; -use crate::VariableId; +use crate::Variable; use serde::{Deserialize, Serialize}; #[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] -pub enum Modifier { - #[default] - Empty, - Variable { - id: VariableId, - value: String, - }, - Item { - id: ItemId, - value: String, - }, - Reputation { - id: ReputationId, - value: String, - }, - Decision(DecisionId), - Achievement(AchievementId), +pub struct Modifier { + pub variable: Variable, + pub new_value: String, } diff --git a/palabritas-common/src/requirement.rs b/common/src/requirement.rs similarity index 100% rename from palabritas-common/src/requirement.rs rename to common/src/requirement.rs diff --git a/palabritas-common/src/stitch.rs b/common/src/stitch.rs similarity index 75% rename from palabritas-common/src/stitch.rs rename to common/src/stitch.rs index c71363c..06e089a 100644 --- a/palabritas-common/src/stitch.rs +++ b/common/src/stitch.rs @@ -1,8 +1,8 @@ -use crate::Content; +use crate::Block; use serde::{Deserialize, Serialize}; #[derive(Debug, Default, Serialize, Deserialize, PartialEq)] pub struct Stitch { pub identifier: String, - pub content: Vec, + pub blocks: Vec, } diff --git a/common/src/test_utils.rs b/common/src/test_utils.rs deleted file mode 100644 index a2ddbbc..0000000 --- a/common/src/test_utils.rs +++ /dev/null @@ -1,29 +0,0 @@ -use serde::Serialize; -use std::fs; -use std::fs::File; -use std::io::Read; - -use crate::Result; -use rmp_serde::encode::*; - -pub fn load_mp_fixture(fixture: U) -> Result> -where - U: AsRef, -{ - let path = format!("fixtures/{}.mp", fixture.as_ref()); - let mut f = File::open(&path).expect("no file found"); - let metadata = fs::metadata(&path).expect("unable to read metadata"); - let mut buffer = vec![0; metadata.len() as usize]; - f.read_exact(&mut buffer).expect("buffer overflow"); - - Ok(buffer) -} - -pub fn serialize(element: U) -> Result> -where - U: Serialize, -{ - let mut result: Vec = Vec::new(); - element.serialize(&mut Serializer::new(&mut result))?; - Ok(result) -} diff --git a/common/src/variable.rs b/common/src/variable.rs index 5f80810..500d7b7 100644 --- a/common/src/variable.rs +++ b/common/src/variable.rs @@ -1,9 +1,8 @@ -use serde::{Deserialize, Serialize}; - pub type VariableId = String; -#[derive(Debug, PartialEq, Eq, Default, Serialize, Deserialize, Clone)] -#[serde(rename_all = "lowercase")] +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] pub enum VariableKind { #[default] Integer, @@ -14,7 +13,7 @@ pub enum VariableKind { }, } -#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq, Clone)] +#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] pub struct Variable { pub id: VariableId, pub kind: VariableKind, diff --git a/compiler/.DS_Store b/compiler/.DS_Store deleted file mode 100644 index b68b900c68a1c9decf7a0db3d22406d1a7a30cf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%Sr=55Uh?lEaZ}-$N2^SUAd5BJ?`-GHtu(`>hlTb4!Fl7-tqdK z|Ma|j$a~Kdm6ZZgKnh3!DIf)YrGWQd+OSGglmb#f3VbQx--kwb?1fWed^#9n1RyS% z4&ypz31agEu@_E>%+M^U#H3n{7?yPATh;Z#DKY7=8a}L^Y&D@+Je~KqD2Me#MJXT! zP8GPw?b`eQHT{SA|CFSi6p#Y{N&#DL$L)r%RK0cfa^7nj{f6!}A9OdagTfH)m>BJt g8*j&#QIvJf*F5iqQ)1AW4?0ml1Fnlq3jDPKp9s7a(f|Me diff --git a/compiler/Cargo.toml b/compiler/Cargo.toml index ecdda21..610bac2 100644 --- a/compiler/Cargo.toml +++ b/compiler/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cuentitos-compiler" -version = "0.0.0" +version = "0.2.0" edition = "2021" [lib] @@ -11,6 +11,7 @@ serde = { version = "1.0.144", features = ["derive"] } rmp-serde = "1.1.1" clap = { version = "4.0.17", features = ["derive"] } cuentitos-common = { path = "../common" } +palabritas = { path = "../palabritas" } regex = "1.7.0" strum = "0.24.1" csv = "1.1" diff --git a/compiler/fixtures/.DS_Store b/compiler/fixtures/.DS_Store deleted file mode 100644 index 7c527936de3b76ee32e00f67b6781c0b46e66ede..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJB|V|47Fj9kZ35k%oVsngx~~o0SZ>Dm0*zg)l+e zM0v${EF!wT?N=g85t+jc5r~noCR|;seX*X*;DQoNKaaL;!di80h5~3oFMTo)me- Y=Gd=^eW243cRG+i1Evd&3cOo^U!{H&+W-In diff --git a/compiler/fixtures/items/.DS_Store b/compiler/fixtures/items/.DS_Store deleted file mode 100644 index ad3d440cb59433da269a8e4d461715bc25ea5947..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJ8r^25S>XVkZ34V?iIMf%5qMS3q)XqkPwz|(!1hZIa=O)8q3f@gWgCpZ+CXy zT7HGcBO==Tb{mnkh%DiTaw34iE@ z-D%tRCo7>*0V+TRr~nn90uNFk8|!lQp!;|Y6`%sIqkw%M3f!Bu`B$e#hzg+>LQt-wG3s}=zO diff --git a/compiler/src/i18n.rs b/compiler/src/i18n.rs deleted file mode 100644 index a432c67..0000000 --- a/compiler/src/i18n.rs +++ /dev/null @@ -1,153 +0,0 @@ -use crate::Parser; -use cuentitos_common::LanguageDb; - -type Record = (String, String); - -pub struct I18n {} - -impl I18n { - pub fn process(parser: &mut Parser) -> std::io::Result { - let mut i18n = cuentitos_common::I18n::default(); - i18n.default_locale = parser.config.default_locale.clone(); - i18n.locales = parser.config.locales.clone(); - - for locale in &i18n.locales { - i18n - .strings - .insert(locale.to_string(), LanguageDb::default()); - } - - // Setup default locale - for (id, event) in &mut parser.events { - if let Ok(event) = event { - let base = format!("event-{}", id); - - if let Some(db) = i18n.strings.get_mut(&i18n.default_locale) { - let key = format!("{}-title", base); - db.insert(key.clone(), event.title.clone()); - event.title = key; - - let key = format!("{}-description", base); - db.insert(key.clone(), event.description.clone()); - event.description = key; - - for (c_idx, choice) in event.choices.iter_mut().enumerate() { - let key = format!("{}-choice-{}", base, c_idx); - db.insert(key.clone(), choice.text.clone()); - choice.text = key; - - for (r_idx, result) in choice.results.iter_mut().enumerate() { - let key = format!("{}-choice-{}-result-{}", base, c_idx, r_idx); - db.insert(key.clone(), result.text.clone()); - result.text = key; - } - } - } - } - } - - // Load existing locales - let mut base_path = parser.config.base_path.to_path_buf(); - base_path.push("locales"); - - for locale in &i18n.locales { - if locale != &i18n.default_locale { - let mut path = base_path.clone(); - path.push(format!("{}.csv", locale)); - - if path.is_file() { - let mut reader = csv::Reader::from_path(path)?; - - if let Some(db) = i18n.strings.get_mut(locale) { - for result in reader.deserialize() { - let record: Record = result?; - if record.0 != "" && record.1 != "" { - db.insert(record.0, record.1); - } - } - } - } - } - } - - // Generate main translation file - let mut path = parser.config.destination_path.to_path_buf(); - - if path.extension() != None { - path = path.parent().unwrap().to_path_buf(); - } - - std::fs::create_dir_all(&path)?; - - path.push(format!("{}.csv", i18n.default_locale)); - - let mut wtr = csv::Writer::from_path(path)?; - wtr.write_record(&["Id", "Text"])?; - - for record in i18n.strings[&i18n.default_locale].iter() { - wtr.serialize(record)?; - } - - Ok(i18n) - } -} - -#[cfg(test)] -mod test { - use crate::Config; - use crate::I18n; - use crate::Parser; - use std::path::Path; - - #[test] - fn process_creates_i18n_file_if_not_present() { - let config = Config::load("fixtures", "/tmp/fixtures-build").unwrap(); - let mut parser = Parser::new(config); - parser.parse().unwrap(); - - let i18n = I18n::process(&mut parser).unwrap(); - - // Default Locale sets values - assert_eq!( - i18n.get_translation("en", "event-05-modifiers-title"), - "A Basic Event with mods".to_string() - ); - assert_eq!( - i18n.get_translation("en", "event-05-modifiers-description"), - "This event has options with results and mods".to_string() - ); - assert_eq!( - i18n.get_translation("en", "event-05-modifiers-choice-0"), - "An Option".to_string() - ); - assert_eq!( - i18n.get_translation("en", "event-05-modifiers-choice-0-result-0"), - "One Result".to_string() - ); - - // Loaded Locale - assert_eq!( - i18n.get_translation("es", "event-01-basic-title"), - "Un evento básico".to_string() - ); - assert_eq!( - i18n.get_translation("es", "event-non-existent"), - "MISSING TRANSLATION `event-non-existent` in locale `es`" - ); - - // Missing Entry - assert_eq!( - i18n.get_translation("ru", "event-non-existent"), - "MISSING TRANSLATION `event-non-existent` in locale `ru`" - ); - - // Invalid Locale - assert_eq!( - i18n.get_translation("it", "event-non-existent"), - "MISSING LOCALE `it`" - ); - - // Translation CSV File - assert!(Path::new("/tmp/fixtures-build/en.csv").is_file()); - } -} diff --git a/compiler/src/lib.rs b/compiler/src/lib.rs index 5b1f0f1..d1145c2 100644 --- a/compiler/src/lib.rs +++ b/compiler/src/lib.rs @@ -1,7 +1,4 @@ -use crate::parser::Parser; -use cuentitos_common::Config; -use cuentitos_common::Database; -use cuentitos_common::Result; +use palabritas::parse_database_from_path; use rmp_serde::Serializer; use serde::Serialize; use std::error; @@ -27,90 +24,30 @@ impl fmt::Display for CompileError { } } -mod parsable; -pub mod parser; - -pub mod parsers; - -mod i18n; -pub use i18n::I18n; - -pub fn compile(source_path: T, destination_path: U) -> Result +pub fn compile(source_path: T, destination_path: U) where T: AsRef, U: AsRef, { - check_required_files(&source_path).unwrap(); - - // Load Config - let mut config = Config::load(&source_path, &destination_path).unwrap(); - config.base_path = source_path.as_ref().to_path_buf(); - config.destination_path = destination_path.as_ref().to_path_buf(); - - // Parse - let mut parser = parser::Parser::new(config); - parser.parse().unwrap(); - - // TODO(fran): check validity of all events. + let db = parse_database_from_path(source_path).unwrap(); - let i18n = I18n::process(&mut parser)?; - - // // // Save to disk let mut buf: Vec = Vec::new(); let mut serializer = Serializer::new(&mut buf); - let mut db = Database { - config: parser.config.clone(), - ..Default::default() - }; - - for (id, event) in &parser.events { - if let Ok(event) = event { - let mut event = event.clone(); - event.id = id.clone(); - db.events.push(event) - } - } - - for (id, item) in &parser.items { - if let Ok(item) = item { - let mut item = item.clone(); - item.id = id.clone(); - db.items.push(item) - } - } - - db.i18n = i18n; - db.serialize(&mut serializer).unwrap(); let destination_path = destination_path.as_ref().to_path_buf(); - let mut file = File::create(destination_path)?; + let mut file = File::create(destination_path).unwrap(); - file.write_all(&buf)?; - - Ok(parser) + file.write_all(&buf).unwrap(); } -pub fn check_required_files(source_path: T) -> Result<()> -where - T: AsRef, -{ - let base_path = source_path.as_ref().to_path_buf(); - std::fs::create_dir_all(&base_path).unwrap(); - - let mut config = base_path.clone(); - config.push("cuentitos.toml"); +#[cfg(test)] +mod test { + use crate::compile; - if !config.is_file() { - panic!("Missing cuentitos.toml") + #[test] + fn compile_works_correctly() { + compile("../examples/story-example.cuentitos", "cuentitos.db"); } - - let mut events = base_path; - events.push("events"); - if !events.exists() { - panic!("Missing events folder"); - } - - Ok(()) } diff --git a/compiler/src/parsable.rs b/compiler/src/parsable.rs deleted file mode 100644 index 8f507ef..0000000 --- a/compiler/src/parsable.rs +++ /dev/null @@ -1,10 +0,0 @@ -use cuentitos_common::Config; - -pub trait Parsable { - fn parse(_content: S, _config: &Config) -> Result - where - S: AsRef, - { - todo!("Needs implementation") - } -} diff --git a/compiler/src/parser.rs b/compiler/src/parser.rs deleted file mode 100644 index 1368183..0000000 --- a/compiler/src/parser.rs +++ /dev/null @@ -1,129 +0,0 @@ -use crate::parsable::Parsable; -use cuentitos_common::Item; -use cuentitos_common::{Config, Event}; -use serde::{Deserialize, Serialize}; -use std::collections::HashMap; -use std::fs; -use std::fs::DirEntry; - -#[derive(Debug, Default, Serialize, Deserialize)] -pub struct Parser { - pub config: Config, - pub events: HashMap>, - pub items: HashMap>, - pub i18n: HashMap>>, -} - -impl Parser { - pub fn new(config: Config) -> Parser { - Parser { - config, - ..Default::default() - } - } - - pub fn parse(&mut self) -> Result<(), String> { - parse_type::( - "events", - &self.config, - &mut self.events, - ) - .unwrap(); - - parse_type::( - "items", - &self.config, - &mut self.items, - ) - .unwrap(); - Ok(()) - } -} - -fn load_file(path: &DirEntry) -> Result { - match fs::read(path.path()) { - Ok(content) => match String::from_utf8_lossy(&content).parse::() { - Ok(content) => Ok(content), - Err(err) => Err(format!( - "Couldn't load '{}', Error: {}", - path.path().to_str().ok_or("")?, - err.to_string() - )), - }, - Err(err) => Err(format!( - "Couldn't load '{}', Error: {}", - path.path().to_str().ok_or("")?, - err.to_string() - )), - } -} - -fn parse_type( - directory: &str, - config: &Config, - collection: &mut HashMap>, -) -> Result<(), String> -where - T: Parsable, -{ - let paths = paths(directory, config); - - for path in paths { - let id = parse_id(&path); - if let Some(id) = id { - let content = load_file(&path)?; - let parsed = T::parse(content, config); - collection.insert(id.to_string(), parsed); - } - } - Ok(()) -} - -fn parse_id(path: &DirEntry) -> Option { - Some(path.file_name().to_str()?.split('.').next()?.to_string()) -} - -fn paths(directory: &str, config: &Config) -> Vec { - let mut base_path = config.base_path.clone(); - base_path.push(directory); - - if !base_path.is_dir() { - return vec![]; - } - - let mut paths: Vec<_> = fs::read_dir(&base_path) - .unwrap() - .map(|r| r.unwrap()) - .filter(|r| r.file_name().to_str().unwrap().chars().nth(0).unwrap() != '.') - .collect(); - - paths.sort_by_key(|dir| dir.path()); - paths -} - -#[cfg(test)] -mod test { - use crate::parser::*; - - #[test] - fn new_receives_config() { - let parser = Parser::new(Config::default()); - assert_eq!(parser.config, Config::default()); - } - - #[test] - fn parse_loads_events() { - let config = Config::load("fixtures", "fixtures-build").unwrap(); - let mut parser = Parser::new(config); - parser.parse().unwrap(); - assert_eq!(parser.events.len(), 6); - } - - #[test] - fn parse_loads_items() { - let config = Config::load("fixtures", "fixtures-build").unwrap(); - let mut parser = Parser::new(config); - parser.parse().unwrap(); - assert_eq!(parser.items.len(), 3); - } -} diff --git a/compiler/src/parsers/event.rs b/compiler/src/parsers/event.rs deleted file mode 100644 index f7d6db1..0000000 --- a/compiler/src/parsers/event.rs +++ /dev/null @@ -1,427 +0,0 @@ -use crate::parsable::Parsable; -use crate::Config; -use cuentitos_common::EventRequirement; -use cuentitos_common::Modifier; -use regex::Regex; -use std::str::FromStr; - -use cuentitos_common::EventBuilder; -use cuentitos_common::EventChoice; -use cuentitos_common::EventResult; - -#[derive(Default)] -pub struct Event; - -impl Parsable for Event { - fn parse(content: S, config: &Config) -> Result - where - S: AsRef, - { - let mut builder = EventBuilder::new(); - let mut lines = content.as_ref().lines(); - - builder.title(lines.next().unwrap()); - builder.description(lines.next().unwrap()); - - let mut in_choice = false; - let mut current_choice: EventChoice = EventChoice::default(); - - let mut in_result = false; - let mut current_result: EventResult = EventResult::default(); - - let mut line_number = 2; - - for line in lines { - if let Some((key, value)) = parse_setting(line) { - if config.settings.contains(&key) { - builder.set(key, value); - } else { - return Err(format!("Unknown setting '{}'", key)); - } - } - - if let Some(choice) = parse_choice(line) { - // We found a new choice, we add the current one... - if in_choice { - // If we were inside a result, we need to add it to the choice - if in_result { - current_choice.results.push(current_result); - current_result = EventResult::default(); - } - builder.choice(current_choice); - } - - // ... and set the new one as current - current_choice = choice; - in_choice = true; - in_result = false; - } - - if let Some(result) = parse_result(line) { - // We found a new result, we add the current one... - if in_choice && in_result { - current_choice.results.push(current_result); - } - - current_result = result; - in_result = true; - } - - if let Some(requirement) = parse_requirement(line, config) { - match requirement { - Ok(requirement) => { - if in_choice { - if in_result { - current_result.requirements.push(requirement); - } else { - current_choice.requirements.push(requirement); - } - } else { - builder.require(requirement); - } - } - Err(error) => return Err(format!("[{}] {}", line_number, error)), - } - } - - if let Some(modifier) = parse_modifier(line, config) { - match modifier { - Ok(modifier) => { - if in_choice && in_result { - current_result.modifiers.push(modifier); - } else { - return Err(format!( - "[{}] found modifier outside a result: {}", - line_number, line - )); - } - } - Err(error) => return Err(format!("[{}] {}", line_number, error)), - } - } - line_number += 1; - } - - // If we are done and we have an active choice and result, we add them. - if in_choice { - if in_result { - current_choice.results.push(current_result) - } - builder.choice(current_choice); - } - - Ok(builder.build()) - } -} - -fn parse_setting(line: &str) -> Option<(String, String)> { - let regexp = Regex::new(r"^set (.+) (.+)").unwrap(); - - if let Some(result) = regexp.captures_iter(line).next() { - return Some((result[1].to_string(), result[2].to_string())); - } - None -} - -fn parse_choice(line: &str) -> Option { - let regexp = Regex::new(r"^\s+\* (.+)").unwrap(); - - if let Some(result) = regexp.captures_iter(line).next() { - return Some(EventChoice { - text: result[1].to_string(), - ..Default::default() - }); - } - None -} - -fn parse_result(line: &str) -> Option { - let regexp = Regex::new(r"^\s+\((\d+)\) (.+)").unwrap(); - - if let Some(result) = regexp.captures_iter(line).next() { - return Some(EventResult { - chance: u32::from_str(&result[1]).unwrap(), - text: result[2].to_string(), - ..Default::default() - }); - } - None -} - -fn parse_requirement( - line: &str, - config: &Config, -) -> Option> { - let regexp = Regex::new(r"^\s+require (.+)").unwrap(); - - if let Some(result) = regexp.captures_iter(line).next() { - return Some(crate::parsers::EventRequirement::parse(&result[1], config)); - } - None -} - -fn parse_modifier(line: &str, config: &Config) -> Option> { - let regexp = Regex::new(r"^\s+mod (.+)").unwrap(); - - if let Some(result) = regexp.captures_iter(line).next() { - return Some(crate::parsers::Modifier::parse(&result[1], config)); - } - - None -} -#[cfg(test)] -mod test { - use crate::parsable::Parsable; - use crate::Config; - - use cuentitos_common::Condition; - use cuentitos_common::EventChoice; - use cuentitos_common::EventRequirement; - use cuentitos_common::EventResult; - use cuentitos_common::Modifier; - use cuentitos_common::TimeOfDay; - use cuentitos_common::Variable; - use cuentitos_common::VariableKind::*; - - use crate::parsers::Event; - - #[test] - fn parse_parses_title_and_description_from_event() { - let event = include_str!("../../fixtures/events/01-basic.event"); - let event = Event::parse(event, &Config::default()).unwrap(); - assert_eq!(event.title, "A Basic Event"); - assert_eq!( - event.description, - "This event has no options, just title and description" - ); - } - - #[test] - fn parse_parses_choices() { - let event = include_str!("../../fixtures/events/02-choices.event"); - let event = Event::parse(event, &Config::default()).unwrap(); - println!("{:?}", event); - assert_eq!( - event.choices[0], - EventChoice { - text: "An Option without requirements".to_string(), - ..Default::default() - } - ); - - assert_eq!( - event.choices[1], - EventChoice { - text: "Another option without requirements".to_string(), - ..Default::default() - } - ); - } - - #[test] - fn parse_parses_results() { - let event = include_str!("../../fixtures/events/03-results.event"); - let event = Event::parse(event, &Config::default()).unwrap(); - assert_eq!( - event.choices[0], - EventChoice { - text: "An Option".to_string(), - results: vec![ - EventResult { - chance: 10, - text: "One Result".to_string(), - ..Default::default() - }, - EventResult { - chance: 90, - text: "Another Result".to_string(), - ..Default::default() - } - ], - ..Default::default() - } - ); - - assert_eq!( - event.choices[1], - EventChoice { - text: "Another option".to_string(), - results: vec![ - EventResult { - chance: 90, - text: "One more Result".to_string(), - ..Default::default() - }, - EventResult { - chance: 10, - text: "Yet another Result".to_string(), - ..Default::default() - } - ], - ..Default::default() - } - ); - } - - #[test] - fn parse_parses_requirements() { - let mut config = Config::default(); - let values = vec!["forest".to_string()]; - config.variables.insert("health".to_string(), Integer); - config.variables.insert("happy".to_string(), Bool); - config.variables.insert( - "tile".to_string(), - Enum { - values: values.clone(), - }, - ); - config.reputations.push("rep_1".to_string()); - let event = include_str!("../../fixtures/events/04-requirements.event"); - let event = Event::parse(event, &config).unwrap(); - - assert_eq!( - event.requirements, - vec![ - EventRequirement::Variable { - variable: Variable { - id: "health".to_string(), - kind: Integer - }, - condition: Condition::LessThan, - value: 100.to_string() - }, - EventRequirement::Item { - id: "wooden_figure".to_string(), - condition: Condition::Equals, - value: 1.to_string() - }, - EventRequirement::Reputation { - id: "rep_1".to_string(), - condition: Condition::HigherThan, - value: 5.to_string() - }, - EventRequirement::TimeOfDay { - id: TimeOfDay::Night, - condition: Condition::Equals - }, - EventRequirement::Event { - id: "choices".to_string(), - condition: Condition::MutEx - }, - EventRequirement::Decision { - id: "a_decision".to_string(), - condition: Condition::Depends - }, - EventRequirement::Variable { - variable: Variable { - id: "tile".to_string(), - kind: Enum { - values: values.clone() - } - }, - condition: Condition::Equals, - value: "forest".to_string() - }, - ] - ); - } - - #[test] - fn parse_parses_modifiers() { - let mut config = Config::default(); - config.variables.insert("health".to_string(), Integer); - config.variables.insert("happy".to_string(), Bool); - config.reputations.push("rep_1".to_string()); - config.reputations.push("rep_2".to_string()); - - let event = include_str!("../../fixtures/events/05-modifiers.event"); - let event = Event::parse(event, &config).unwrap(); - - assert_eq!( - event.choices[0].results[0].modifiers, - vec![ - Modifier::Item { - id: "wooden_figure".to_string(), - value: 1.to_string() - }, - Modifier::Item { - id: "wooden_figure".to_string(), - value: (-1).to_string() - }, - Modifier::Variable { - id: "health".to_string(), - value: (-2).to_string() - }, - Modifier::Variable { - id: "health".to_string(), - value: 5.to_string() - }, - Modifier::Variable { - id: "happy".to_string(), - value: true.to_string() - }, - Modifier::Variable { - id: "happy".to_string(), - value: false.to_string() - }, - Modifier::Reputation { - id: "rep_1".to_string(), - value: 2.to_string() - }, - Modifier::Reputation { - id: "rep_2".to_string(), - value: (-2).to_string() - }, - Modifier::Decision("a_decision".to_string()), - Modifier::Achievement("an_achievement".to_string()) - ] - ); - } - - #[test] - fn parse_parses_settings() { - let event = include_str!("../../fixtures/events/06-settings.event"); - - let mut config = Config::default(); - - let parsed_event = Event::parse(event, &config); - assert_eq!(parsed_event, Err("Unknown setting 'character'".to_string())); - - config.settings.push("character".to_string()); - config.settings.push("character_voice".to_string()); - - let parsed_event = Event::parse(event, &config).unwrap(); - - assert_eq!( - parsed_event.settings.get("character").unwrap(), - &"laidaxai".to_string() - ); - - assert_eq!( - parsed_event.settings.get("character_voice").unwrap(), - &"strong".to_string() - ) - } - - // #[test] - // fn parse_adds_error_on_missing_item() { todo!() } - // #[test] - // fn parse_adds_error_on_missing_reputation() { todo!() } - // #[test] - // fn parse_adds_error_on_wrong_time_of_day() { todo!() } - // #[test] - // fn parse_adds_warning_on_missing_decision() { todo!() } - // #[test] - // fn parse_adds_error_on_missing_event() { todo!() } - // #[test] - // fn parse_adds_error_on_missing_tile() { todo!() } - - // #[test] - // fn use_regexp() - // { - // // Puedo usar regexp para detectar si estoy adentro de un event, - // // choice o result para parsear requirements. - // // No usar builder mejor. - // todo!(); - // } -} diff --git a/compiler/src/parsers/event_requirement.rs b/compiler/src/parsers/event_requirement.rs deleted file mode 100644 index ce88952..0000000 --- a/compiler/src/parsers/event_requirement.rs +++ /dev/null @@ -1,633 +0,0 @@ -use crate::Config; -use core::fmt::Display; -use core::str::FromStr; -use cuentitos_common::Variable; -use cuentitos_common::{Condition, VariableKind::*}; - -pub struct EventRequirement; - -impl EventRequirement { - pub fn parse(data: T, config: &Config) -> Result - where - T: AsRef, - { - let params: Vec<&str> = data.as_ref().split(' ').collect(); - - match params[0] { - "var" => { - let variable = params[1]; - match config.variables.get_key_value(variable) { - Some((_, kind)) => { - let result = match kind { - Integer => { - Self::parse_value_and_condition::<&str, i32>(params[2], Condition::HigherThan) - } - Float => { - Self::parse_value_and_condition::<&str, f32>(params[2], Condition::HigherThan) - } - Bool => Self::parse_value_and_condition::<&str, bool>(params[2], Condition::Equals), - Enum { values } => { - let mut value = params[2].to_string(); - let condition = Self::parse_condition(&mut value, Condition::Equals); - - if values.contains(&value) { - Ok((value, condition)) - } else { - Err(format!("'{}' is not a valid value", params[2])) - } - } - }; - - match result { - Ok((value, condition)) => { - let variable = Variable { - id: variable.to_string(), - kind: kind.clone(), - }; - Ok(cuentitos_common::EventRequirement::Variable { - variable, - value, - condition, - }) - } - Err(error) => Err(format!("{} for variable '{}'", error, variable)), - } - } - None => Err(format!("'{}' is not defined as a valid variable", variable)), - } - } - "item" => { - // TODO(fran): find a way to check if the item is valid, should this be done in a separate validation step? - let id = params[1].to_string(); - let mut value = "1".to_string(); - let mut condition = Condition::Equals; - if params.len() > 2 { - let result = Self::parse_value_and_condition::<&str, u32>(params[2], Condition::Equals)?; - value = result.0; - condition = result.1; - } - Ok(cuentitos_common::EventRequirement::Item { - id, - value, - condition, - }) - } - "reputation" => { - let id = params[1].to_string(); - if config.reputations.contains(&id) { - match Self::parse_value_and_condition::<&str, i32>(params[2], Condition::HigherThan) { - Ok((value, condition)) => Ok(cuentitos_common::EventRequirement::Reputation { - id, - value, - condition, - }), - Err(error) => Err(format!("{} for reputation '{}'", error, id)), - } - } else { - Err(format!("'{}' is not a valid reputation", id)) - } - } - "time_of_day" => { - let mut id = params[1].to_string(); - let condition = Self::parse_condition(&mut id, Condition::Equals); - let id = match id.as_str() { - "morning" => cuentitos_common::TimeOfDay::Morning, - "noon" => cuentitos_common::TimeOfDay::Noon, - "evening" => cuentitos_common::TimeOfDay::Evening, - "night" => cuentitos_common::TimeOfDay::Night, - _ => return Err(format!("'{}' is not a valid time of day", id)), - }; - Ok(cuentitos_common::EventRequirement::TimeOfDay { id, condition }) - } - "event" => { - let mut id = params[1].to_string(); - let condition = Self::parse_condition(&mut id, Condition::Depends); - Ok(cuentitos_common::EventRequirement::Event { id, condition }) - } - "decision" => { - let mut id = params[1].to_string(); - let condition = Self::parse_condition(&mut id, Condition::Depends); - Ok(cuentitos_common::EventRequirement::Decision { id, condition }) - } - _ => Err(format!("\"{}\" is not a valid requirement", params[0])), - } - } - - fn parse_condition(id: &mut String, default: Condition) -> Condition { - match id.chars().next() { - Some(c) => { - if c == '!' { - id.remove(0); - Condition::MutEx - } else { - default - } - } - None => default, - } - } - - fn parse_value_and_condition( - data: T, - default_condition: Condition, - ) -> Result<(String, Condition), String> - where - T: AsRef, - U: FromStr + Display, - { - let mut value = data.as_ref().to_string(); - let condition = match value.chars().next() { - Some(c) => match c { - '>' => { - value.remove(0); - Condition::HigherThan - } - '<' => { - value.remove(0); - Condition::LessThan - } - '=' => { - value.remove(0); - Condition::Equals - } - _ => default_condition, - }, - None => return Err(format!("Invalid value: '{}'", data.as_ref())), - }; - - match U::from_str(&value) { - Ok(value) => Ok((value.to_string(), condition)), - Err(_) => Err(format!("Invalid value: '{}'", data.as_ref())), - } - } -} - -#[cfg(test)] -mod test { - use crate::parsers::event_requirement::EventRequirement; - use crate::Config; - use cuentitos_common::Condition::*; - use cuentitos_common::Variable; - use cuentitos_common::VariableKind::*; - - #[test] - fn error_on_wrong_requirement() { - let config = Config::default(); - let result = EventRequirement::parse("wrong health 100", &config); - assert_eq!( - Err("\"wrong\" is not a valid requirement".to_string()), - result - ); - } - - #[test] - fn parses_integer_variable() { - let mut config = Config::default(); - let id = "health".to_string(); - - config.variables.insert(id.clone(), Integer); - let variable = Variable { - id: id.clone(), - kind: Integer, - }; - let value = "100".to_string(); - - let result = EventRequirement::parse("var health 100", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Variable { - variable: variable.clone(), - condition: HigherThan, - value: value.clone() - } - ); - - let result = EventRequirement::parse("var health >100", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Variable { - variable: variable.clone(), - condition: HigherThan, - value: value.clone() - } - ); - - let result = EventRequirement::parse("var health <100", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Variable { - variable: variable.clone(), - condition: LessThan, - value: value.clone() - } - ); - - let result = EventRequirement::parse("var health =100", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Variable { - variable: variable.clone(), - condition: Equals, - value: value.clone() - } - ) - } - - #[test] - fn parses_float_variable() { - let mut config = Config::default(); - let id = "health".to_string(); - - config.variables.insert(id.clone(), Float); - let variable = Variable { - id: id.clone(), - kind: Float, - }; - let value = "0.9".to_string(); - - let result = EventRequirement::parse("var health 0.9", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Variable { - variable: variable.clone(), - condition: HigherThan, - value: value.clone() - } - ); - - let result = EventRequirement::parse("var health >0.9", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Variable { - variable: variable.clone(), - condition: HigherThan, - value: value.clone() - } - ); - - let result = EventRequirement::parse("var health <0.9", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Variable { - variable: variable.clone(), - condition: LessThan, - value: value.clone() - } - ); - - let result = EventRequirement::parse("var health =0.9", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Variable { - variable: variable.clone(), - condition: Equals, - value: value.clone() - } - ) - } - - #[test] - fn parses_bool_variable() { - let mut config = Config::default(); - let id = "health".to_string(); - - config.variables.insert(id.clone(), Bool); - let variable = Variable { - id: id.clone(), - kind: Bool, - }; - - let result = EventRequirement::parse("var health true", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Variable { - variable: variable.clone(), - condition: Equals, - value: "true".to_string() - } - ); - - let result = EventRequirement::parse("var health false", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Variable { - variable: variable.clone(), - condition: Equals, - value: "false".to_string() - } - ); - } - - #[test] - fn parses_enum_variable() { - let mut config = Config::default(); - let id = "health".to_string(); - - config.variables.insert( - id.clone(), - Enum { - values: vec!["good".to_string()], - }, - ); - - let variable = Variable { - id: id.clone(), - kind: Enum { - values: vec!["good".to_string()], - }, - }; - - let result = EventRequirement::parse("var health !good", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Variable { - variable: variable.clone(), - condition: MutEx, - value: "good".to_string() - } - ); - - let result = EventRequirement::parse("var health good", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Variable { - variable: variable.clone(), - condition: Equals, - value: "good".to_string() - } - ); - - let result = EventRequirement::parse("var health bad", &config); - assert_eq!( - Err("'bad' is not a valid value for variable 'health'".to_string()), - result - ); - } - - #[test] - fn error_on_missing_variable() { - let config = Config::default(); - let result = EventRequirement::parse("var health 100", &config); - assert_eq!( - Err("'health' is not defined as a valid variable".to_string()), - result - ); - } - - #[test] - fn parses_items() { - let config = Config::default(); - - let result = EventRequirement::parse("item wooden_figure", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Item { - id: "wooden_figure".to_string(), - condition: Equals, - value: "1".to_string() - } - ); - - let result = EventRequirement::parse("item wooden_figure >3", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Item { - id: "wooden_figure".to_string(), - condition: HigherThan, - value: "3".to_string() - } - ); - - let result = EventRequirement::parse("item wooden_figure <3", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Item { - id: "wooden_figure".to_string(), - condition: LessThan, - value: "3".to_string() - } - ); - } - - // TODO(fran): Figure out how to implement this - // #[test] - // fn error_on_missing_item() { - // let config = Config::default(); - // let _result = EventRequirement::parse("item wood 1", &config).unwrap(); - // // assert_eq!(Err("\"wood\" is not defined as a valid item".to_string()), result); - // todo!() - // } - - #[test] - fn parses_reputations() { - let mut config = Config::default(); - config.reputations.push("friends".to_string()); - - let result = EventRequirement::parse("reputation friends 1", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Reputation { - id: "friends".to_string(), - condition: HigherThan, - value: "1".to_string() - } - ); - - let result = EventRequirement::parse("reputation friends >1", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Reputation { - id: "friends".to_string(), - condition: HigherThan, - value: "1".to_string() - } - ); - - let result = EventRequirement::parse("reputation friends <5", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Reputation { - id: "friends".to_string(), - condition: LessThan, - value: "5".to_string() - } - ); - - let result = EventRequirement::parse("reputation friends =5", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Reputation { - id: "friends".to_string(), - condition: Equals, - value: "5".to_string() - } - ); - - let result = EventRequirement::parse("reputation friends -1", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Reputation { - id: "friends".to_string(), - condition: HigherThan, - value: "-1".to_string() - } - ); - - let result = EventRequirement::parse("reputation friends >-1", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Reputation { - id: "friends".to_string(), - condition: HigherThan, - value: "-1".to_string() - } - ); - - let result = EventRequirement::parse("reputation friends <-5", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Reputation { - id: "friends".to_string(), - condition: LessThan, - value: "-5".to_string() - } - ); - - let result = EventRequirement::parse("reputation friends =-5", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Reputation { - id: "friends".to_string(), - condition: Equals, - value: "-5".to_string() - } - ); - } - - #[test] - fn error_on_wrong_reputation() { - let config = Config::default(); - let result = EventRequirement::parse("reputation friends =-5", &config); - assert_eq!( - Err("'friends' is not a valid reputation".to_string()), - result - ); - } - - #[test] - fn parses_time_of_day() { - let config = Config::default(); - - let result = EventRequirement::parse("time_of_day morning", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::TimeOfDay { - id: cuentitos_common::TimeOfDay::Morning, - condition: Equals - } - ); - - let result = EventRequirement::parse("time_of_day noon", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::TimeOfDay { - id: cuentitos_common::TimeOfDay::Noon, - condition: Equals - } - ); - - let result = EventRequirement::parse("time_of_day evening", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::TimeOfDay { - id: cuentitos_common::TimeOfDay::Evening, - condition: Equals - } - ); - - let result = EventRequirement::parse("time_of_day night", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::TimeOfDay { - id: cuentitos_common::TimeOfDay::Night, - condition: Equals - } - ); - } - - #[test] - fn error_on_wrong_time_of_day() { - let config = Config::default(); - let result = EventRequirement::parse("time_of_day tonight", &config); - assert_eq!( - Err("'tonight' is not a valid time of day".to_string()), - result - ); - } - - #[test] - fn parses_event() { - let config = Config::default(); - - let result = EventRequirement::parse("event an_event", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Event { - id: "an_event".to_string(), - condition: Depends - } - ); - - let result = EventRequirement::parse("event !an_event", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Event { - id: "an_event".to_string(), - condition: MutEx - } - ); - } - - // TODO(fran): Figure out how to implement this - // #[test] - // fn error_on_missing_event() { - // let config = Config::default(); - // let _result = EventRequirement::parse("event that_doesnt_exists", &config).unwrap(); - // // assert_eq!(Err("\"that_doesnt_exists\" is not a defined event".to_string()), result); - // todo!() - // } - - #[test] - fn parses_decision() { - let config = Config::default(); - - let result = EventRequirement::parse("decision a_decision", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Decision { - id: "a_decision".to_string(), - condition: Depends - } - ); - - let result = EventRequirement::parse("decision !a_decision", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::EventRequirement::Decision { - id: "a_decision".to_string(), - condition: MutEx - } - ); - } - - #[test] - fn error_on_wrong_variable_value() { - let mut config = Config::default(); - config.variables.insert("health".to_string(), Integer); - let result = EventRequirement::parse("var health false", &config); - assert_eq!( - Err("Invalid value: 'false' for variable 'health'".to_string()), - result - ); - } -} diff --git a/compiler/src/parsers/item.rs b/compiler/src/parsers/item.rs deleted file mode 100644 index c6d0320..0000000 --- a/compiler/src/parsers/item.rs +++ /dev/null @@ -1,98 +0,0 @@ -use crate::parsable::Parsable; -use core::str::Lines; -use cuentitos_common::Config; -use cuentitos_common::ItemBuilder; -use cuentitos_common::ItemKind; -use regex::Regex; - -#[derive(Default)] -pub struct Item; - -impl Parsable for Item { - fn parse(content: S, _: &Config) -> Result - where - S: AsRef, - { - let mut builder = ItemBuilder::new(); - let mut lines = content.as_ref().lines(); - - builder.name(lines.next().unwrap()); - builder.description(lines.next().unwrap()); - - let (kind, count) = parse_kind_and_count(lines); - - builder.kind(kind); - builder.max_stack_count(count); - - Ok(builder.build()) - } -} - -fn parse_kind_and_count(mut lines: Lines) -> (ItemKind, u8) { - let ingredient_regexp = Regex::new(r"^ingredient").unwrap(); - let count_regexp = Regex::new(r"^(\d)").unwrap(); - - let mut result = (ItemKind::Other, 0); - - if let Some(first) = lines.next() { - if ingredient_regexp.is_match(first) { - result.0 = ItemKind::Ingredient; - if let Some(second) = lines.next() { - if let Some(count) = count_regexp.captures_iter(second).next() { - result.1 = count[1].parse::().unwrap(); - } - } - } else { - if let Some(count) = count_regexp.captures_iter(first).next() { - result.1 = count[1].parse::().unwrap(); - } - } - - if ingredient_regexp.is_match(first) { - result.0 = ItemKind::Ingredient; - } - } - - result -} - -#[cfg(test)] -mod test { - use crate::{parsable::Parsable, parsers::Item}; - use cuentitos_common::{Config, ItemKind}; - - #[test] - fn parses_title_and_description() { - let content = include_str!("../../fixtures/items/00-moon-wolf.item"); - let item = Item::parse(content, &Config::default()).unwrap(); - assert_eq!(item.name, "Moon Wolf"); - assert_eq!( - item.description, - "A woolf with blue eyes that shine at night" - ); - } - - #[test] - fn parses_with_default_kind_and_stack_count() { - let content = include_str!("../../fixtures/items/00-moon-wolf.item"); - let item = Item::parse(content, &Config::default()).unwrap(); - assert_eq!(item.kind, ItemKind::Other); - assert_eq!(item.max_stack_count, 0); - } - - #[test] - fn parses_with_specified_kind_and_stack_count() { - let content = include_str!("../../fixtures/items/01-mushroom.item"); - let item = Item::parse(content, &Config::default()).unwrap(); - assert_eq!(item.kind, ItemKind::Ingredient); - assert_eq!(item.max_stack_count, 6); - } - - #[test] - fn parses_only_max_stack_count_() { - let content = include_str!("../../fixtures/items/02-dirt.item"); - let item = Item::parse(content, &Config::default()).unwrap(); - assert_eq!(item.kind, ItemKind::Other); - assert_eq!(item.max_stack_count, 6) - } -} diff --git a/compiler/src/parsers/mod.rs b/compiler/src/parsers/mod.rs deleted file mode 100644 index f6f1b67..0000000 --- a/compiler/src/parsers/mod.rs +++ /dev/null @@ -1,9 +0,0 @@ -mod event; -mod event_requirement; -mod item; -mod modifier; - -pub use event::Event; -pub use event_requirement::EventRequirement; -pub use item::Item; -pub use modifier::Modifier; diff --git a/compiler/src/parsers/modifier.rs b/compiler/src/parsers/modifier.rs deleted file mode 100644 index f7074d1..0000000 --- a/compiler/src/parsers/modifier.rs +++ /dev/null @@ -1,326 +0,0 @@ -use crate::Config; -use core::fmt::Display; -use core::str::FromStr; -use cuentitos_common::VariableKind::*; - -pub struct Modifier; - -impl Modifier { - pub fn parse(data: T, config: &Config) -> Result - where - T: AsRef, - { - let params: Vec<&str> = data.as_ref().split(' ').collect(); - - match params[0] { - "var" => { - let variable = params[1]; - match config.variables.get_key_value(variable) { - Some((_, kind)) => { - let result = match kind { - Integer => Self::parse_value::<&str, i32>(params[2]), - Float => Self::parse_value::<&str, f32>(params[2]), - Bool => Self::parse_value::<&str, bool>(params[2]), - Enum { values } => { - let value = params[2].to_string(); - if values.contains(&value) { - Ok(value) - } else { - Err(format!("invalid value '{}'", value)) - } - } - }; - - match result { - Ok(value) => Ok(cuentitos_common::Modifier::Variable { - id: variable.to_string(), - value, - }), - Err(error) => Err(format!("{} for variable '{}'", error, variable)), - } - } - None => Err(format!( - "\"{}\" is not defined as a valid variable", - variable - )), - } - } - "item" => { - // TODO(fran): find a way to check if the item is valid, should this be done in a separate validation step? - let id = params[1].to_string(); - let mut value = "1".to_string(); - if params.len() > 2 { - value = Self::parse_value::<&str, i32>(params[2])?; - } - Ok(cuentitos_common::Modifier::Item { id, value }) - } - "reputation" => { - let id = params[1].to_string(); - if config.reputations.contains(&id) { - match Self::parse_value::<&str, i32>(params[2]) { - Ok(value) => Ok(cuentitos_common::Modifier::Reputation { id, value }), - Err(error) => Err(format!("{} for reputation '{}'", error, id)), - } - } else { - Err(format!("'{}' is not a valid reputation", id)) - } - } - "decision" => Ok(cuentitos_common::Modifier::Decision(params[1].to_string())), - "achievement" => Ok(cuentitos_common::Modifier::Achievement( - params[1].to_string(), - )), - _ => Err(format!("\"{}\" is not a valid modifier", params[0])), - } - } - - fn parse_value(data: T) -> Result - where - T: AsRef, - U: FromStr + Display, - ::Err: std::fmt::Display, - { - let value = data.as_ref().to_string(); - - match U::from_str(&value) { - Ok(value) => Ok(value.to_string()), - Err(_) => Err(format!("invalid value: '{}'", data.as_ref())), - } - } -} - -#[cfg(test)] -mod test { - use crate::parsers::modifier::Modifier; - use crate::Config; - use cuentitos_common::Variable; - use cuentitos_common::VariableKind::*; - - #[test] - fn error_on_wrong_modifier() { - let config = Config::default(); - let result = Modifier::parse("wrong health 100", &config); - assert_eq!(Err("\"wrong\" is not a valid modifier".to_string()), result); - } - - #[test] - fn parses_integer_variable() { - let mut config = Config::default(); - let id = "health".to_string(); - - config.variables.insert(id.clone(), Integer); - let variable = Variable { - id: id.clone(), - kind: Integer, - }; - - let result = Modifier::parse("var health 100", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::Modifier::Variable { - id: variable.id.clone(), - value: 100.to_string() - } - ); - - let result = Modifier::parse("var health -100", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::Modifier::Variable { - id: variable.id.clone(), - value: (-100).to_string() - } - ); - } - - #[test] - fn parses_float_variable() { - let mut config = Config::default(); - let id = "health".to_string(); - - config.variables.insert(id.clone(), Float); - let variable = Variable { - id: id.clone(), - kind: Float, - }; - - let result = Modifier::parse("var health 0.9", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::Modifier::Variable { - id: variable.id.clone(), - value: 0.9.to_string() - } - ); - - let result = Modifier::parse("var health -0.9", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::Modifier::Variable { - id: variable.id.clone(), - value: (-0.9).to_string() - } - ); - } - - #[test] - fn parses_bool_variable() { - let mut config = Config::default(); - let id = "health".to_string(); - - config.variables.insert(id.clone(), Bool); - let variable = Variable { - id: id.clone(), - kind: Bool, - }; - - let result = Modifier::parse("var health true", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::Modifier::Variable { - id: variable.id.clone(), - value: "true".to_string() - } - ); - - let result = Modifier::parse("var health false", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::Modifier::Variable { - id: variable.id.clone(), - value: "false".to_string() - } - ); - } - - #[test] - fn parses_enum_variable() { - let mut config = Config::default(); - let id = "health".to_string(); - - let values = vec!["good".to_string()]; - config.variables.insert(id.clone(), Enum { values }); - - let result = Modifier::parse("var health good", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::Modifier::Variable { - id: id.clone(), - value: "good".to_string() - } - ); - - let result = Modifier::parse("var health bad", &config); - assert_eq!( - result, - Err("invalid value 'bad' for variable 'health'".to_string()) - ); - } - - #[test] - fn error_on_missing_variable() { - let config = Config::default(); - let result = Modifier::parse("var health 100", &config); - assert_eq!( - Err("\"health\" is not defined as a valid variable".to_string()), - result - ); - } - - #[test] - fn parses_items() { - let config = Config::default(); - - let result = Modifier::parse("item wooden_figure", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::Modifier::Item { - id: "wooden_figure".to_string(), - value: 1.to_string() - } - ); - - let result = Modifier::parse("item wooden_figure -3", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::Modifier::Item { - id: "wooden_figure".to_string(), - value: (-3).to_string() - } - ); - } - - // TODO(fran): Figure out how to implement this - // #[test] - // fn error_on_missing_item() { - // let config = Config::default(); - // let _result = Modifier::parse("item wood 1", &config).unwrap(); - // // assert_eq!(Err("\"wood\" is not defined as a valid item".to_string()), result); - // todo!() - // } - - #[test] - fn parses_reputations() { - let mut config = Config::default(); - config.reputations.push("friends".to_string()); - - let result = Modifier::parse("reputation friends 1", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::Modifier::Reputation { - id: "friends".to_string(), - value: 1.to_string() - } - ); - - let result = Modifier::parse("reputation friends -1", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::Modifier::Reputation { - id: "friends".to_string(), - value: (-1).to_string() - } - ); - } - - #[test] - fn error_on_wrong_reputation() { - let config = Config::default(); - let result = Modifier::parse("reputation friends =-5", &config); - assert_eq!( - Err("'friends' is not a valid reputation".to_string()), - result - ); - } - - #[test] - fn parses_decision() { - let config = Config::default(); - - let result = Modifier::parse("decision a_decision", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::Modifier::Decision("a_decision".to_string()) - ); - } - - #[test] - fn parses_achievement() { - let config = Config::default(); - let result = Modifier::parse("achievement an_achievement", &config).unwrap(); - assert_eq!( - result, - cuentitos_common::Modifier::Achievement("an_achievement".to_string()) - ); - } - - #[test] - fn error_on_wrong_variable_value() { - let mut config = Config::default(); - config.variables.insert("health".to_string(), Integer); - let result = Modifier::parse("var health false", &config); - assert_eq!( - Err("invalid value: 'false' for variable 'health'".to_string()), - result - ); - } -} diff --git a/definitions/cuentitos.md b/definitions/cuentitos.md new file mode 100644 index 0000000..4c53db6 --- /dev/null +++ b/definitions/cuentitos.md @@ -0,0 +1,5 @@ +### Reputation Systems +### Items + +## Dynamic Variables +### Items and compile-time validations diff --git a/definitions/palabritas.md b/definitions/palabritas.md index bf803ad..5526b4f 100644 --- a/definitions/palabritas.md +++ b/definitions/palabritas.md @@ -66,7 +66,7 @@ You could add options on probabilistic branches, but let's keep going for now. Another interesting feature is the ability to create `probabilistic buckets`. -A bucket is a set of probable paths that the engine will pick one every time is asked to render that bucket. Let's do a probabilistic bucket with the second option. +A bucket is a set of probable paths where the engine will pick one every time is asked to render that bucket. Let's do a probabilistic bucket with the second option. ```cuentitos * I visit a popular street market to experience the city's unique flavors and energy. @@ -112,15 +112,15 @@ You can also create what we call `named buckets`. These buckets support probabil ```cuentitos (50) At the bustling street market, you discover a food stand offering mouthwatering delicacies. - [(50) happy_vendor] + [morning_vendor] req time_of_day morning - (50%) You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer. - (50%) You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations. - [(50) tired_vendor] - req time_of_day morning - (50%) You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand. - (50%) You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them. - [tired_vendor] + [(100) happy_vendor] + (50%) You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer. + (50%) You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations. + [(25) tired_vendor] + (50%) You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand. + (50%) You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them. + [night_vendor] req time_of_day night (50%) You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction. (50%) The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers. @@ -270,18 +270,18 @@ The next thing we want to talk about is modifying state. For that we use the `mod` command with the variable name (in this case `energy` and `time`) and the value modification we want to apply. In this case we added `10` to `energy` and subtracted `7.5` to `time`. From this we infer that `energy` is a variable of type `integer` and `time` is of type `float`. We also supoprt `bool` and `enum`, check the `Configuration` section below. -## Knots, diverts and stitches +## Sections, diverts and subsections -Being heavily inspired by [Ink](https://www.inklestudios.com/ink/), we shamelessly stole the idea of `knots` and `diverts` and `stitches` from there. +Being heavily inspired by [Ink](https://www.inklestudios.com/ink/), we shamelessly stole the idea of `knots`(`sections`), `diverts` and `stitches` (`subsections`) from there. -A `knot` is a section of the story that you assign a name to so that you can move to it easily. You define knots by wrapping a snake_case identifier with three equal signs. +A `section` is a part of the story that you assign a name to so that you can move to it easily. You define sections by wrapping a `snake_case` identifier with a hash simbol (`#`), as you'd do in markdown. ```cuentitos -=== second_day === +# second_day You wake up feeling refreshed. ``` -Then you can go to a knot by using the arrow (divert) command `->`. +Then you can go to a section by using the arrow (divert) command `->`. ```cuentitos * I go to bed @@ -291,33 +291,72 @@ Then you can go to a knot by using the arrow (divert) command `->`. -> second_day ``` -Once the story hits `-> second_day`, the player will be directed to that knot. +Once the story hits `-> second_day`, the player will be directed to that section. -A `stitch` is a section within a `knot` and it's defined by using a single `=`. -You can access a stitch by using the name of the knot, then a dot and then the stich name (`second_day.museum` in the example below). +A `subsection` is a section within a `section` and it's defined by using multiple hashes `##`, `###`, etc. +You can access a subsection by using the name of the section, then a slask and then the subsection name (`second_day/museum` in the example below). -If the stick is within the current knot, you can ignore the knot name (`farmers_market` in the example below). +If the subsection is within the current section, you can ignore the section name (`farmers_market` in the example below). ```cuentitos -=== second_day === -You wake up feeling refreshed. Let's see what this day brings. - * Explore a museum - -> second_day.museum - * Go to the Farmer's Market - -> farmers_market - -= museum +## second_day + You wake up feeling refreshed. Let's see what this day brings. + * Explore a museum + -> second_day/museum + * Go to the Farmer's Market + -> farmers_market + +## museum You get to the museum door. You watch through the window. It seems crowded. -= farmers_market +## farmers_market You get to the farmer's market. It's very early and some stands are still being set up. ``` +You can also add requirements and probabilities to sections and sub-sections +themselves as if they were any piece of text. + +For example: +```cuentitos +## second_day + req day 2 + You wake up feeling refreshed. Let's see what this day brings. +``` + +### Finishing the game +`-> END` + +## Comments +A line that starts with `//` is ignored. + +## Functions +You can dynamically communicate with your runtime by the way of functions. +To run a function you start and finish a line with backticks. + +Example: + +```cuentitos +# second_day_happy + You wake up feeling refreshed. Let's see what this day brings. + `play_sound alarm` +``` + +The runtime will receive a function call with "alarm" as a parameter. + +Since this is dynamic, the compiler can't check if the types are the right ones, you'll have to do this yourself. + +You can use an arbitrary amount of parameters, they will be passed to the runtime as a vector. + +```cuentitos +`play_sound alarm 0.3` +``` +It's up to the runtime how to interpret `0.3` in this case, and cuentitos will just pass it through. +You can always use variables as a way to communicate with the runtime and check for types in compile time. + ## Configuration ### Variables #### Bool #### Integer #### Float #### Enum -## Reputations -## Items +#### String diff --git a/editor/.gitignore b/editor/.gitignore deleted file mode 100644 index a547bf3..0000000 --- a/editor/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/editor/.vscode/extensions.json b/editor/.vscode/extensions.json deleted file mode 100644 index 24d7cc6..0000000 --- a/editor/.vscode/extensions.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "recommendations": ["tauri-apps.tauri-vscode", "rust-lang.rust-analyzer"] -} diff --git a/editor/README.md b/editor/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/editor/src-tauri/.gitignore b/editor/src-tauri/.gitignore deleted file mode 100644 index f4dfb82..0000000 --- a/editor/src-tauri/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Generated by Cargo -# will have compiled files and executables -/target/ - diff --git a/editor/src-tauri/Cargo.toml b/editor/src-tauri/Cargo.toml deleted file mode 100644 index 0f6d6cf..0000000 --- a/editor/src-tauri/Cargo.toml +++ /dev/null @@ -1,29 +0,0 @@ -[package] -name = "cuentitos-editor" -version = "0.0.0" -description = "A Tauri App" -authors = ["you"] -license = "" -repository = "" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[build-dependencies] -tauri-build = { version = "1.2", features = [] } - -[dependencies] -serde_json = "1.0" -serde = { version = "1.0", features = ["derive"] } -tauri = { version = "1.2", features = ["cli", "shell-open"] } -cuentitos-runtime = { path = "../../runtime" } -cuentitos-compiler = { path = "../../compiler" } -cuentitos-common = { path = "../../common" } - -[features] -# by default Tauri runs in production mode -# when `tauri dev` runs it is executed with `cargo run --no-default-features` if `devPath` is an URL -default = ["custom-protocol"] -# this feature is used used for production builds where `devPath` points to the filesystem -# DO NOT remove this -custom-protocol = ["tauri/custom-protocol"] diff --git a/editor/src-tauri/build.rs b/editor/src-tauri/build.rs deleted file mode 100644 index 795b9b7..0000000 --- a/editor/src-tauri/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - tauri_build::build() -} diff --git a/editor/src-tauri/icons/128x128.png b/editor/src-tauri/icons/128x128.png deleted file mode 100644 index 6be5e50e9b9ae84d9e2ee433f32ef446495eaf3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3512 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 diff --git a/editor/src-tauri/icons/128x128@2x.png b/editor/src-tauri/icons/128x128@2x.png deleted file mode 100644 index e81becee571e96f76aa5667f9324c05e5e7a4479..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7012 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 Sh@|Ye~|0>}wMPLT8jm@Y!H33Sz}5aFI6 zM9Lzqz|;A*0sGs=2A1uU!1nk2dGF7knQwr99SAFen)x(eCO;F8y2C~0FD1YxRTPcy zPWVxkUYmeuz}Tv?7&Fe-!UE{)ZW)Mb;H)^#eHDv$`dkZGguJz@^MA!ZNGAUqt{|0H zpZ7Ch9S`q5!>R%}>}62!+(T^evyO+ImSo2wpu)su4^3nw5(%)KD%gbSev^*HZZ&3( z#&c@Z0gH|}Ck)w6fh0&NBJ62ib%R}(3@$VFl*_#l2W$wQ-~4RmZZAt5O*^2Q5}Xr8Hy@c`#pM?kc?hFWxRXr*mUfUCXf4ka5DD~ zat6d85COB05l#(P9*cQZ3EC8fVdS~?&vN#rce(aF9@xp80O2{{FBvU+{X>Hoh;xI` z{$e^Nw1y*VbO8wv`8|-m?NwNaKGTGaF{P^JLB^DbOYWIbn%eT`*!^C1H36=O8Z-M> zkD~88ry`eSo`tEBN4>w7OWZwUzlh{WM1m8R6zepqGcGMaV7vWY9b?K4b6~|HVG)ec wi>I@ws#sZo7or4_*4M>7;p5{nr2pZ?Uu4>Krr0kU)&Kwi07*qoM6N<$f)&@lf&c&j diff --git a/editor/src-tauri/icons/Square107x107Logo.png b/editor/src-tauri/icons/Square107x107Logo.png deleted file mode 100644 index 0ca4f27198838968bd60ed7d371bfa23496b7fe5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2863 zcmV+~3()k5P)2T^I$?x zaYQg&pCHVGsw{hVJKeJjnTAPVzIJy&@2@ONDhmw*aGfYREZIehxXjQGW&);l}730_NI?Rf^MxPP7h0n@|X4 z$_NmLkmcX9a6<@;g%^uO5`jK11zHAwB&Be>EL;Ksu&`nkBH@=nY)w^zz@pJ^)7G|d zV$~|rGzj}F+LNX%ZDGVxdr}k)_)lLzh3c`h#W_(^eXY~ZT43UAX$(I<@?8A1#RQ{=o_ejpu|#}HSYmnj#$wSetLWep5SNMwiJ!? zjkH#Uml%v#YF3+jeQZ56;FrWNKj@^lDv= zi&X}cvF7lk385w!3&!DqN|kvc0L!A!H3v2-)Pz#7EhwtX^YLh1jqX`<_Nqx>I|3yX z9P$S>fDYiDqA2`qxzp;Tyn#!OW~FV+sU>T3L+`2B2vBaMm0 zGqWdIYbau+r))W2hu*LEc6P1pCg1kKUosnTBr3%Uwf+Ss~=TGkbT?9EOw z;k9i=s|#)G@~{+Md$Edk0G`!|n`{9w6nkW%92cT}A4yl&G|2fgr_N zeRaaK6+Yt+x0l`MY@glx>yI{Hr=0bY7@k$TaxTwn=MRf~p|wZbs#2e}V6a9E)gu|}{C0M=qP9u$j6tFKQE*v7>T-cdsR$`C9l zvId4VF^>1jdX_O|45j1g#o$0=mUZ{lS)5`j0dfDzK^P6e2D7B_gk{b)$m?vKfCT34 zTjVBIBbLS1G+?15Anwl^hgkMZ7*KW_#bATv@}$&n^;(+0ydlnWLS|B{WhrZl(&yqh z=#0;nItiH4iP$kAuqIVK^XBmo8r8e3sLir&AN_kXh3r^YD8bITpcq^*c)lrg_AIB4 zs#?U7We+KOKIJ@AgX6wnO%DIl7!|fyA`~wX-b>t9Qp0j|DG~fdW0X^Fuu`#Hg^G`l z&1a&{Mn4O*j)QcbHB7NqzdPBn7K->yAqZ`1ou&!|cG=nLv7){psD>>HSsr zZq|&RfcY#=c(zzg5QSb5(rJnIE>`D#HXsA{S*(elqCdWW=ZV#_cL^$4nk&I{kuKUT zTdOi?iU~)o?#r_t8k|fNp)$%g#-DV(7a;kA-(vw*U|uJZv=TUG!&L%WhvFIsYrK|7 zy06D)x>hw2DtY*~1S*DJ^f;RjlQfk4Ixl-Y_I*^Uf7eTLInMPgZ|SD)tGC-B3MJsD zBk}Ouyu>Rgm%w=bK(=5<{4Im1+1t%-d7VO4j&5I|97S@(i)EQu6=%{1$%E@5l*;hy zUh$B-TecU=;@C*Ht9Jk7!JSG^ebkC>lV=gXIeWU!VyOTa^k!E|sfjxsG)6u85$=Hp zoW;s8*K%8VncTZB`;<}J06P}GdLy01BFHy&#<5djpB)H@@|>1_+dyP|YVt~)91KY< z!TYqYF?8s|s-(F__QweFzWkj~4lkhO6ZgHOspepOpicIx^^v!L-$|^cpVFRASj`{i z9ylPG5$dF}nfFl^)X6t3s`ou4+PwXGJczP<>*Ud$N=}-Tz4_9E80)_Xysjp0%V5z5 zHxrp`uJ?bAQ%27BQv{9^XD1>w2cz(2IN9=7-a1;QPeBQ@UyOX#Bjql<`U= zTXFi}&I(wd8f>I*!z6>xK{w{K;lsjI>$S9}5oqnp7f3j@Wc8kB;T9Cr{0|WUtv@s_ zwXnx!T55r1wlG;Ttq%c|*X8Y~>+;CBZ(?$k)jLkhAnIf-ENeJoRcw{pU`JoIV;dq4 zgo>XcJS$yu^R@zqQp-G?#Nv%Uo;L<9tE0N{+m%FQ^ZI3LkrcFDZf8!JdataE}(QMS@ zfVV%Yz0~984I-Xv42r>m@x$&AY!B1%B(iG4k)K&I^9z$|!m0WuwySWnEW#0gFuhr0 z=KcFDmMDFk!biuZJ&4ja05-_AtCww)A`+>4I%-?;F2ixpn!m5GqY$rr{~xOZYCmwM z9`nuyTc@^5Egikq8UBmMebnX0G*Fj~^hb|FxQfWhvUK;ArJqyDtywJ{Cy!P}cVGQ$ zErZU%to>1zK8$et^pjPqq_HZ06n8~E4eg$&2~LSzsb?*{PyeeibU1#{b4>8 z_mdlxUIWw;tH1i)4?E+3+9yY`Z};_Vbk_x0N| zo%)uP-BVav3t>4lX&Z29Pw<7mM6PZp50~9Lm>tALCvRhjP(~*-QGP03vv@t9wR&`- ze<=xP#nb$wttKpNB9zGyrKYV)@LM9uLBE%su-AlznF=LzkQ#H>FXB}!74%BFMiXhc z5y84I-&!YoO%P|oR46%^{`UUIPRC1q;l22n-dNg|I+yPFNpq&U;G`nN9l!m0{8a8V zG(DW2-gp;GkG|JEYr=;vTEo%?dy|P=R^qd7UGj-?D$~fCiicsZHC+qoXOC}qGfsK(8d8N1KS;bdtcaI?j@y`Iu1LSP?=Z)dx!Fqx(DEf?1Nn7%nzd!lj*i- zb&};L4hN#2dkE2b>5cZm1)eCjH{4W7rD6%51gnogg%T-9Z|JWn^*#u=Q$vqU7oKUl}X9A7U8^etzu0GW?2k;*_);j zu>`TQG+O$~;-H!jhFnB^ylA%vG$z)B)qkF>b53ypuI{!TL(bU@s(K~#7F?VW#e z6vq|EU(c=tNk~~ffk#0iPF1SV@<)Jjm9;tn;sh)wK%9W(1eQ*KI051WTDi(W_>b)R zuOvuB!wFat>=I~ZI`8$&f)GMd_q?8&9`&aRW6Z9+(th{7*Y8&Ycsw4D$K&yMJRXn7 zMukPW)DcC{Gnq=;g$LwU?i4CV`wN| zILClO2~ixkP#6m!WfwBRm@vkl@Cd)g00p&$LK;9r@WRPKv2>vo+`>0`8O()p8YH9v z{y#QQNKak1NatEO$^`|%3jW(2uqT!;Bg8r+=^6@X1deeog>y(S_kd!Ssv#?sND|Nn zIKsISPVEG9luSVPU9dpsMmTco8VTkB)KM@;$z0e&6i@^;rSZa1C#05m1QNR777@Ps zzE~VRh8ogn;W%YwzC>ny?$_-E)>z@7Xjb!BrU^ul%B4EFuEq%`3xLHY{_6rX3(QK( z+jU7I2GAg~jIS6%^F%|a4}{!WxC1qyF~Z43LzX6lMkChI4fmm98sVy}i$=-_|2a@~ zr>v0q3rvgGpFHNh{2EVhU*TgH)a#IF^@QkxHDs^K6PNSC$zvLFPa$wZg-HP$&=wow zyWuM^K)tpWETYhsQAAV&<2~JFF;6AgX7`2jV`q~wM}tRRxr%S}nvLTx3aN)8r}RJw zJW#;gsp7Qdv~V(CuktiSu_~COFbgQk#ZzjY$64XzKm12f6mm%t?pE=s#S;>WNA#g6 z=u*Y^!`o0IP6~%97#`;-{WYi%w!l7B#nDwL2{(oF<29^3$sU+fyG$%vpC9n;SOIfN zjdz^O<0uzZOf;ja0?Ly>%XgnFAeb|win%4>UIH)+Doq*XmZp|1n<$=#|xgeSeS&(b&w!$*%S?*YzAn1Xa zwHdo4nhDBnQRdq0*?q8#L#|58+Ke%Prg^4y6wTeb1;S@0k#|9L0%{Z5j&+sz3MuRF#}i;PW@vX`sOq1(iPoNhl0j) zB^pqttVk7M^`F@TOVr*~k;QQ~xMd{oJ9@4C#Oy>l0A^}$aq27@5_SH|`uL5qvNY+b zO8{5F0)AVC1|LRVgO0{*w!S1(Fx1a>8dfp35R<#Q~L+YG7wj3g~;yB z`2jGYJ#(JTfLqBQ$*s<7&nI z!+jLYK4GsLN!S8iEW|lZ31|MAcLzeFow=nEFBS%H>~0qDa% zpy-5fCW4VdJdz;8lO8K22B-`$G>lDPZLrGYCcQkCL9#W~BIcLu^ z)vi|c?X$fw7BQLjE@*;QDFO}xbxLDKO>&xd_I>iDv|BAgV5U|UhfYf|B-&PHf&dW# z2SV7`cEOopuDn)P8{y3TeP>0TmV~sPzCQzYUc>J|#uKOeMm({QTd`%%U0KchcRxais$csI~~s(ghKSb>Jcpq0Ynejbf~np2tyn znl!-*uLK52F#X-X&FdHbP9u?Pd7p1_q}&jTBfi%t4J!4_lx}enkrY01Q=(6b^!DzJ z`6Vl&0cCYIn5@niUocPN4<-|>nlX-W+*PSE!WnB$C$N!R__g!$`kz_*T#hA?w5%wC zBJd9c>L(|;-7b_U94c5AjcWwR6|^$9qfV!k%&9sBrIOk%BhY88HiL36ccjbMbV-1H zK(RcF(@LIzDH6uyns#nnDSdkuSqrf^oYh(apsrGs9V_c(v#TC;7~2@iD@8a|PB3;+ zC>nvE`choe3FNzLG6B(G;OC6hta>*8Wo6r!QPuwV*IF3srz$!{VL*Hjg##v#Xm-B4 zV&$9HB^SfP{1?cdI@xW&m=P{zNU#;$K_O^8#eCz%$ygUo3~>((%lZ`4)I~JMQRZ@k zY!up{BQXUlr%tP`imZ(g!mL?aK);HZrnY4L&$>jmmJV1IP67vAlh}sxG`rX5AA(0= zY;8bViwo@r$HM4Sg6WgQ+FlnYF|#)0rmR_PYr?twe0SOCB!w=DYc8q@7*AVZO2Fpa zy*1$kQolLdyQoje2LjEkjevEqh!x?`XfBGN2fB!$51x;-1a(D*pigA`E-Nd-X}wRn zpb1%A^Z_A$D2g_K=^^Lu{b{X{ZtfnW^1?I ztKfA?Q5iSq*-8L*K@&VlS&MCG>_!z>rNBaKtXdLeOF;Ww441ceBmCnak*$Z(&DjVl zM*et>g5d(iVEfjFU|(~R57g~xJqhH9t9$P-N-#7%arVZi)%e2OhhknHZ*$junQYH!14#BO?FyHo72B1vy$InTx{f+TvW+7{qYM&YWEWlfDzTx%tKejNEV>J8niMP2TBrn zQOg#U>7pj^pQ_Z!Me8um7Ko}chb-LF{E@8HbpQ-x3n<}^x__MWy6cLrh~&38x)ThH zQp5pW*k=GP^kelkzA`u=xZ5gTEC1C`oaEZUnA=dWDd6F z3VS2G2CTxlxWBLe!;zB3RVmS0Sdo%KP%Lo$2xD%j`fIN%-^e8bo*(Gc0fa2Gp+^wF z7Bewf9oZ|Rq;MLwzjo-Xw37XCEE@Ce90%Ryuq?i393?J5<@<4@6d^FMfAOM~G67=@ z7J@mEn$!AzSPRh*tirMN=A8vq<(9(2aD7_sltp&0Xs2$s=&%aMq(y--hM@EKIxuq} zlc!J+!_Derb#lU@WgRbevr(&xbRN&;suU>{ev^+dVCsJkbsn5snc1pOPA9=G94YkN zg@BanxC{AJLj&LZU6xo!$W^xDt2iYW z^ieQNbqat_!bWvmJD6IQmvAUquF~Lk=7fvdq z{ya7F3jCMX=Qhw~-Zr#60~E~?R~KL&7>D^E$Jr7|*~?>?`>qLQ0(pJ^V=`)(G`-dAhB>?7B5y}9AfVI&JWt|3S*A=;@jEt|-AQ3-TRbOLg+o3Ye^{%a3H87v z7yj3A)n(-afw!pgualOrmCv$))kdy^3&CTP>}@^}SI;YnPT|A6I=Uk5T$V%ofvgHg z_2&dq+v4P`s5`A3BHyxVbUD3i`+=;tj>gmNHREcvfCrbK@0zW3K1gWMX*Dy)ghmtW^5BEi48PB@947_yVdOc$ z^H}DA(f;ORP&eZ^e91}a!XfCIMHv*o)OEr{K*@CLDfjx>4;xF1TFJxUYju5td?msm z=AXUjNyB8>7r}gyq>H^o@-&&A9+-;g(;}n@ftL-sR}>tlGT{(d1bu+!q7Syf{D_pn zC;%}^Mf^&n!B{QE4yKf#rqY9%v@OFR6*DprS5@4SZ4|T9P?k+kEH$BRq*CD!*2Pm7 z8YCK`@@*B$*NesrXV4_k5S3e;3AFf8r0~d^o2Uw!2)%x#agAxU5e~t5RIdZBAGuGW za#wX28sBZnWC?%Z>)rdsPX zcMcx+g>x8kWmu0|z(AFT-a^A+K(+dWN(2GO(fjG&p8Bm8pVKJe9EG-DO#SwUP)>=j z0-1&>1mV%g1dvAbyNtyz@$cHNy+!eOJRXn7@4+ho|*60M_6IeO{(g_$&fH(oe2@ogH;0Q1FK3LF!E58aL5C{YUfj}S-2m}Iw zKp+qZ1OkCTAP@)y0s%`P1WKWHdza~tK1A>*z$m7->F+8A1@U|DjF1#>B%rbcGWeDL zlHl5S3@s-J>jFqfF^T9FiKquk_358tumQq|KHrGM_LPJ+f|e14bq3lhMbRdpS|v-= z2YHSFaR<`uQCmb7gmnTER3AEcwlBgnELi7Ww63Bm#`sC9@)P`2EhEf9xf z#qRkiu(=kNvw}K}hXR{RVUeJE3SV%j%fZW9qezW)QSwB$MA3Jze7qU5jhS&!gSX?VjyTw)sODIsM z6PFrtkr=<-dkU7&=?~q0Ba-=VJmzYRut-#!^!t6V2McN&GI$_;oEIuBjSF!#l8R`B zu!`j8Ay`8V>JZd>|Eq0*A#UThzidGRcrUEHcMA8w#*4v?cM3L|j!)Fn9*GMFU5bIDGHJ}&Z9ymf_g?FL)1Jg(_AA!ec*HK+mNA!60T@n?eg+MWq zK7m$)Pooc^X1umolv?1pDh6}B=oBE=NQV;Kgeqj}JNiC%peDSvSb1up{i0&Xnr`U> zMHM2vUrZR)f|tU|b3p12nB$G8rsS?#RcVvqX`?DXvr_nJu{seS$xWZWBi}?dMO&^) zF&A#uWwpE$mbO-v0(Lt6c|83BsrnA!R84YrF4twX{IgiOwJHnO_^2?eHtDH<03M^0 zwwV@}>1U|LYIVUk@@eD`k&B3322xq0gX1#AVjtk{1v)7X43nsAwYW$x`hazS|hS_TwaZ$pQN;O!%NS&$ABwV$(F&4YIg;&}43Nnrp`Z~Xb>fLv$-X!-9C%QT- zltk2Ba-m>dTp2u}hpW7>I--F=$XbVVJ$!VZGGWYx<`t+`;N;y2Nj{U1fYe+!gq-T+J((5bPNJ` zA*?T-9mY#P?e8kYhl+Qq&&Xuq`LAFNWqZ0hrnt!N=gi0bOMZ;ZYA5G~we;8h%?VEU zDBUmfaU8fOD=SulQgT}y$Hib9w4VJ=pgb`M;B4^DR*D40?xGJSpv5{^qyt?0DCltx z%G#+cga4E^6^Jni;H1Uk^uYvD9zyMd3&?GXVK)?mJrZyP=Y++skF3q^EW!DQP<(%l zErd=^nht&nEyO8daTDYY;5rvCxj&-DoT#pJ4Wk43?Wiw zF(u;8R_MlsC1e)l_s0dB3LZWQ_(Tro~Q~zP5$tF@!(lR>isq_{LScme3?Ef--&Y zjU-4}R4JxZ(6tl?q1v8YdU4NIru|GZctDTgCRnoyYTJ6_pEA16B>@2%u~;OkyUIok zgldebS~<9WWlL04@MZ$pPPe5}JGLjXi)Fbnlm%NNEbdSsQLRH&*h+o$Vr~DMD{?2c z)BmO3FI91!5RY6bkZ1=ss}7_fGE7mcu=2PnsvK8QDq*t@D|P1o&Fh3R!^Ip*4aGJY zccNQRo+GKD)mnvB*#&Zd9zlQq#+61FduYqWYaCf9v%o{P`Ap=7*u;*~6E|f)M$FpR z*7II;E10j$CQ%{1n030oS$K010P4wNetR0+k9GWF`Qm|dzJ_(P#zDF5JGGq(ixwDT zRFrKT-2B2RQ8C5IZdm+khIe;b%uXhj_^roc=_wlSSTKZRs;1qat5mo=L2UGksVBy& zl3l0MUl7#?=olV`l;uH_Q;1uvDzOy>`pLg;ToHS!e5cY?FMOB~jQzwd7M}#ckW{6j z%fY;-gQmS}iS&U&R9HL%s1%ex27|U%!{p{y2?Wk0zm>!6XKNwJdm*C2T6lSU+oZ*q zT_9O2r>-DziNXb%$E|{=!6~BY28C!eH;0JBT<@4{s7^PdlFF9Rus9Z_-lrrwJ_MO-_xZe;Otu z%ad3coio;^^#gUmyGK| zb5nO+%jB_);w!t|jCmWh#hFENi`~~Bi`@0cZcoQj)~u8!5$dg<2^nEw`4K5P_9tKw za)I_mkin)+tHmylEYxEX)bBIxi=UmwZ;_RWv6Ml5(Bi(({A)n_F%dm5o!6h33@w}u zyFBAU@(0M&M$@;*%EVZJF*Jzos<64c;RFbom6)wSVr+jsA5&`w@A&o+r_#YIsuLM5H7w6K)I7%WlT zPdEYzEEURiEznF@oTK`V;;Ak13pOhtRMIJLu_BdO4Y;|l3M|9D_!jG#F_a}=DzfN8 zI^iOO5~Ssmof$+{Qv}DCqDKgp_iJJ_0DHtUzh@mwMJyv^u~g}A-g4qmyF+rX)@o&X zc=q~|z2p2W*QmS|)SC1hplxIZkMbAvkuZC?(4k}seA zJx;N6S8?aVhg*9_^vDe)I$9a4SIIewg}83DPFVxuJ@2|VDl)w5kB3B~FF=L}k19T@$qoQ%pYU zJ}^u@=&6{_t53YW*}n2EvUXc_YNHlmRkB);uM{etdaqdi@vx^?CmG_awPI=;|EgrQ z7<%e`5*Ld~MXB*MFB(s+6;qqAwADgYZS#pI;^LJ@T2xr+YT}Wv)`}576`sbZ>*0NN zCYPRXG;tB;Md+BSg8Q2?QIkcVFHop`61uA<8hYz86|!7IXc?TR!c48TT~v&77V9LH+M3LO*yJr za9&tbmVVmbB=>m7CxMac8>W|DY|V?6I*B*JV%{wE09*&R5nU?c16~Phio*h%dqGX{ zQdm=RfqirfAl+=tMN$lLOYrtdry-i+XwS7om(h{?=0q_^B2frZK1} zCXt*YHl*UTP7x##WQm&Kug8CUkpv+H0)apv5C{YUfj}S-2m}IwKp+qZ1OkCTAkYy1 Y2S8W#vM)6=T>t<807*qoM6N<$f*y@n<^TWy diff --git a/editor/src-tauri/icons/Square284x284Logo.png b/editor/src-tauri/icons/Square284x284Logo.png deleted file mode 100644 index c021d2ba76619c08969ab688db3b27f29257aa6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7737 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 diff --git a/editor/src-tauri/icons/Square30x30Logo.png b/editor/src-tauri/icons/Square30x30Logo.png deleted file mode 100644 index 621970023096ed9f494ba18ace15421a45cd65fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 903 zcmV;219<$2P)2 z+CUKPMqaqGiH;zb!R4$B-WXS^YzQr=@UH>k4?*L)&R=zYjBrZenKdc9|JlS$SO*RJ zKt8FSTDAdk1g_WPAO!p^V!AuL;Lm;uQyV;zKq)J3i(;q*;k+pD%f3eltU`PYdy9(k0&%` zuWAPcV6|-y?|?7O1W!KSK}pbk8#~!|FA@(VJkt^V@0lio{afoAeo*f&$W2s6${5!1eKvAGD2$GZwSB98L2ZVS- zKn8ENRkZ*sb!@QugOrQNK3(sy1v%J#m|rpB+h|Nkqa3FRT>74xSs{#&saU2Lf!_Iq zKmuKAESh`gs!fneGWn+nf}l?7jE$HW!Af&vE5=G!QU)U2v&HLIBGXKk4nQx{hsHjL zLPMAo5=*uInFbq7(aa`Y2VX5wCmaeqvECOFv)a>0t>ZaEb*cJccER=BB?KFZhV$c^ znL*l8x*UYZv4WK|j?~Jt6~~F%{pk~z5A*>^M`?r5m9@RJ_x|uEtX(6Vk@Y()MVto* z93wr)%3m%|#OZ~srm>zF(JvDuTq*@;d&^>_BJm5hOU`3FjG70L#Vzv9I?`<7$T@

jU?lMi@tgxr7CqX_r3uw^y4tVU3Pm0sw;|1WSUO%?=bG`*Kmz6u4{#ti;T7AWIBAEh!(Y zz>O01&#X?Ds@L)Sb{CkG#Yz4$3o d@96)?#cz^xWoA}>B$xmI002ovPDHLkV1l3&k#zt7 diff --git a/editor/src-tauri/icons/Square310x310Logo.png b/editor/src-tauri/icons/Square310x310Logo.png deleted file mode 100644 index f9bc04839491e66c07b16ab03743c0c53b4109cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8591 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 JPDHLkV1lm|RXG3v diff --git a/editor/src-tauri/icons/Square71x71Logo.png b/editor/src-tauri/icons/Square71x71Logo.png deleted file mode 100644 index 63440d7984936a9caa89275928d8dce97e4d033b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2011 zcmV<12PF83P) zNQT)H*aaHEvPo@cmXa#lOYSVWlpR1nAeK#0OX|;=*_qi5z??aA=FFLM-4Sq2kUOhO z__7Kf+yUXO;t~3LY3h_?kg^Ly_=vx^#d`M`3g*hiK~ZY3AT~jwFz3ZcM?f3JYN1%a z6(!V_i6eLKHt^>r*a)I0z_0NJhQk($6o5l!E{?JkPrSxoeQ-;Fqc_D`_YF8=rsANr zG)LA_971eEG~9CGYBLi@?p9m)@)Tx607JQ+*Ue@kj-@a(D+T!4#k)I>|5h&OqgB`h z?c4$tE)KfVHvW8WK2f$Y7BwM~AJbeyzOSy~m#(8wbuiN%36#mj3KfSHV@MPU&upJC z26nV0*ffeHL`yvW^BH8IFmcq)d*U$Vl;hFt@(S`@2NOr}7Sd+Fp?rbjZ-XVpiL+ZJ zVf=)*k4NU-1sB(fAHUA1R4M)eyT=i=ZEY{1xRDA;0LLFcXEjsGBO-LlIJ_9C(9GAXuL zTaWXYBX?I{f^r>rHH*sm()GzY;)y_KC4pG$l!1wRaq#9`i86Kr+wt%Lp<83lq@x7B zc+~kD7&vz;-52pYhf9^cUJaN~#g4OG2QA=;{?W`wITJf(pw%Y67s?G_QcOUGi6G6& zes8BV2#>7foT{<4uXDpmrPUS?Y#N*Dc@w_-L=?H*HrkF$d z3#j0$2Sp3K2%hvFtymS9Sa)qEdq;w&zs&Xs0O0ycQ zotoD}7%D-MawgdX3vAu0raMUP)Mv~{MWbR(S_xv|QUu#_sO6A2bqlWvmiXwRRCa(P zrkd;tCrIm!27Jr$U`;uIDWY{FbGBTGA*OV zaq5*ndh8t-G|j7}W|J`FP8pl}HkPBUggH&DxJAlnPY$8scRI#6B;VhC88^|5Yw+Yw zFCZhin_c2;@Q?8%idU?`0AtcEb2~yxj9bROOps?20l^aI_TFE9(tF{z-yMMgA%zc2 z&=P-y{B&LH&tZx4DR**bcD>1&f?pVFQJX093q$1Y1bU|txk2hWkd(uZoI-_?$%A_< zj9#-AT7##pEbqV(?3jbINuVFV+y(4ETyBH8=ZjV&T43g4Od410WtYMbY;mOUw5}mR zm}em*yjgmZBrt*Rwfgs$&57DLxX0`84J8Wpfr?mqW>@9Q`v=b@3@>-;s2ay^AGb|G z<6sHfKvDhCp|(Ve;bzEcvl3O;*J%g4%2fpH=m(LF-ZdyZU1QbHsqFQSE-uy)Xaxb* zSL{BCOVmU2;8(hf{{5BA37-zT*~-HPxP<1#!&DztK74BQf4R+BWyl2;uM4NAH38ll z)?^!My^IQCPqXx!6D!LZt!(O(KGg{Rd}Pcg?FQ!DagHC3ltZvYG*|f@ACA5 z(y$gMwjP<7kBkLc{{3_A^=#U;p=LeX-Jli8g)Q4S zGsR5xg_uRQNQ?m0(5Dd4a{mz+l&#zm6l9G~=l9G~=k}HOSD-3Se z=jhwnuK|Cl<(>yq#FY^_60{B#=L!9<4oE+T!cL+`@6H3nF8HuR!uOycre0(cw+R)s zrXgw)9=+XH;QO7tEq!W5CUINfkhlOY*hZ-ijQkgQi9K~92bSxob%4Nfvqh88H~~nx4}GW7*L4jK^Py8nIo~x?+DryN$BTbk-|idT*N-e1Rex&uYxV8 zs;+vp|9Rr`zilkh+9til7D(?B%R(0-awITYu&enHvQ*rlq~fJXBoGMhV~fOV=|9Sz zk1j^!w~cK|E}ELFSzIe&R%qSO0o{x1yR+jkFgySCIvN*o&;lgREZ5PMw8rCoZ%QaX64C6^AXjaDf@M)O$fvw-Xm4 zt^`?V3UU)UuwtamC!Smc9uo<@k+`s;bllrS^0Va7iZ6r1vL1bPqV(2-93i1s$!T_D z7tto2#+s{;0~f3~jCJXYVqMD{n-L>?PJ6{s>>3BCj-7BZCXma<7nLp7)5N-2qp=YV z=uVqAdF{DaGK9W%ej3I74qbe*Ru1bXZOmb3#=x4dbdQe->(6ixLJ_>E)#QNzWXYcvW6ai{SG;$nFpf0nwv+(Nj!yGQQA zUjKFVWcY)R=mSTSED7eq+Po4|hgBUmOg zkxAe-S?M+cy74QOzJD{YBEl8BjD+U{A(=!MwcUdbDtM-|mVC1Zx*)wlldbxix&h}~ zRB>33<*kdnuy;t-t6PvK<3wNI%9No1-|!#7YMWLcVAWl)1%p7~kc$3Nj$`HYL?M?0 zHxgEOAjF!;?1ND$Ef*2drN7=hd~o}v;4!>O3aweAlzARE_O}LilNFK4f?FK>YAxny zg2e4Vs4e$@uZb#ffkjd|RPYdw(%@GhA!(do1fM}jYLPj~0OjZkyfM7?RV?ngr&#W7 zX>~NBj1Qz>{1lVP2ySYTM{2Z|9H#MIhAaKWJF8x!k$U$IIvSxxdzUT<8vqS)N*xyF z<7b`?NEKahvOxm3lGd@nhY#*Zd~YHoV28eSq9K;?>@rv3-WZouE6y`|u9yYXY%m~Q z2&dzR6|@f*?FxME>BG)S>h6kG4^pWuFu>SduoXjcxYq42)?UC>ppv++c&4o~W06%- zxJK2rAr7q$?q!9R6{DG}V2niO%37i?c3{JM_^St3fp9J_9t7h%(n#c) zI1GAp+(Mf4lE_tjdT?hR1hBxA)FjuQ$)d=r+mM2As#CFx(5bUnnd%h#WNL!Or=6fg zSrK0}ErG))U%UPO@26l$bbO7cO7#j^KK@~2RzxhaN)kiZv!lDBr6utA>3wGtgs`~5 z;JIkJAKSK$3X4VN4Jr2bC=;11U)JbUFc&34T41-n8HlSr*&jTr9Zr1O!FrERIr{b1 zDBgBKiUUj9Yo+yH4%aLS%;Y-+{sXhe$40FlMCA&W3q&RhZuYEasfCVd9na1V$R~po zrGm42x@cZVTpyFZk|kE=HRcDjk$NCS2_`F5;_C^+w2TC1x+ucV%B0sb2s$ib9Bd_un1t9}B+W_q;KcXHeqea5`f}#vwDo;9E(yh-Bp~2o zJ1Nz{OB2MFJe;k@UUh{iN*35uR)R_oo=Nz~RRkam&4m)cMMec9L)|06# z%}rAOmFG@q1~y+tYxV$h!wE+OQ_4x7-z({de9*XF4mQVf1=dWz@46 zg>a{{Gg}lEOcsz*-|DxY^8T0`EjT4#cz?KFJsuq;l?ZHMe4HWCWw13vwc$OS_n<(= z7R%@GcvBwlB_<_VQ;ah{M0~}k_$Mx4Ylb1a6!{cSN^b4;TaLmf6tUFtWatK_6f^cE&b_un2M|G?W_mkF9Cw)GzMsK>bTBr9#h4x_TJ_mxiyvpcx z(mHY#ojg0~sYK?TnQqBW;=&w+W((Hou&^&4;V9REo74rO)9W*EFf?P;`-M{5ebqtk(uz+ljul8XxR$4c;uCf zPh2p%Y@JJ++Klp_Aoy&xO%M?I;pL*n#;l6Wme+33E;?q zyB_qeHy|InYJ`nx5}3)GqQV0000N?3#xh7$lMzK8K=2xV( zktZjJ6YWNPc&1V{V~9QO?wPSoe)&new!5c$`gL_xy=nl)7-I|@5S|!RE;#(*f`XTT z%IP$>fC3K!xWbiM1xA1;A;OEF0;RS9X&Hz~*wF&SQ}Ba5Cgs6^7&#F-f3wB^@9@_t z$O^=xK?#kFNN9x|9p)QaAUVyy&=;T|sk zwhJjSG?B<3unKw-yl^_;g;(&W>UnIOJn!-fHn`t4%wEFf+A*ZS@I>Cf;p0RlP0s;G zB{}b{#5u}^5^sk1l@se~@i8l=@tL8BbQW-^>Dl6){24N!b39M@YXN#!DArs_8n0j& zM7tPYQf3l@aMuHp1$({Ify*S_r11k239S(w1##jdA;7!m4npDq;V}$oy{{vu+pySJ z7!XWki(gQUJMkz$=Y@S<+E!0v+E`2_>}$m~UZ zH-FM*u>cn2AtPR2G@Z6;pKvrONJx2ntwR0z zRj_HCj7Ti`&d}?{ep{75CX38{XcpSwS0fTBLDmIK(TCzoZBGDy#h(QWQWFtNkn+nc z&HE=LXekQxj*eiAG$2mDRQ&_=D~l7fDuh%-goKX<5(vBP$9+U0P%XB-$mzC<2akVu51 zlgo=P^}d5VpZt~UrEfh*fsW{#ruW6=u)(J*o0#lK5~p_(u+}HZ7D4Ej2dH+vxAPuk zL~0d~!_BUM7$E@bSgVhSZvgbx+-!}b>xJ1=HNqeWHC(*PWG$B@<*gR+F<6baDgVwY z3MJd;Z`$GcZY<7KAOo00fqkhzNfPWOjkQ{Ykla{Ht-kb~(Ya?X8wdH@_Mdzl%kqzZ zH=W3;i3t573JATCF@-e*3E{UlQc00xdQv0{%aqOD$H~cY*mkN_V=|LcnYGw~mV|^{ zf^A3vJCRrjL^8*6MBLD}Gnr?%FSLCfE3nEXos98pqB4$55+y*To%Hp^?@m0=^o#># zlQcSOJ&^DqC59_?JGhygkor0+MRoPyBssdv=ttOB9g>F{=5yuOz}46V&w& zb7%Z<1{okpGn%*@BeMw&Uq4`weLC;GC04vZCMN~FHmn!ET^;!t{M z=&o?zkssvFyM5mj+0|(Jpy#B&oYVj^Dir- z2+^5u8u=)#@r}uT;vy4YOh@+p>sMuNwv2% zV`mX&0RVvA!ra6W0KlhHFaTpb9S)*@kxmy`T9_C*N9S!&S!d3=xyV1=_B!lXe$8uc z4wlWdGBTItapnO_-~O!KZO(TF#Q%JBHz8%{(mp%(X-@^}N}rvXgUL=pRL&DHONu#q z=N>0>n3?2~bOw~i);4&Vbbp*ioNJh{Q z^{t-yi7pEDX@5PJcJJx`oBm&qgRyWqHl9?otN8zKrYldLFZ{vuVZqFLDRE$SXzz8+ z@Z4e4E$W;7_(v|EXWtPgpLRY(eIGQCA8W`Y+ZxyO+`n*B=^SS!S3 ze^OWD4-VhhKv(Vu4+$}MnFC)x7$JteaQkTLyX@uv?dYPeY{I$qjAF*c%sFvCSwQ7- z%icb+?_HtyMC3tBvEs#*#zmbCd?WU{M?7|MH|E8rZaO|N=_VhFk-o7~yyd80-)7hnVq7j=Ji?5o%544B;xp(Il zD4w~0H%NP@9N^1~Hmqi>Mkif3$ zN8x|bQoAK`TG~0&clT#-we#K~5@e#%+rGB9eV)-BFXKB(Tz2Io)n3>GnB$F3v5tW` z8sSMz>th~{D=9)1}@ z3g$b{MPBt85o0-CAhXGWnu%96nSq_!!>dM6Z61vr*vR%JO&-ZifMrDoj4;$^+Bk>_ zgtz2FLYQ~tq%)_nGT@`%;&>@pbXLkilx*L(EVPoLIZgxt7ft{8#}2srLc`t><74cj zLYW0qw_fncrc;SJmq*R2t2!8A335z1LZO7=yX%j+p33^l0*fmE)u7mbg~GS9>(^S< zLxwp{4_e4NxopE5 z@qSLnC_{#M=03^OtsiUfLYir2{~(^DZMi@aDJu!+c#I~eAU=I~@eL%%-H$<~>4lQ( zme&uomBhF~MKsd-wLS#(Auidp;L zZ&i91s%QbjT^}~C9u8Xx@D!H!CCET>pi8dQnRuNH1zEHWuOtt!omv8RNJ5bG?sHsr zY{y?=G1&VP>rIEy7h8y7P~R8*ICI7;;Lz@bc(q@{5061B_sr>0K1Y<0W_n<&L~O0o z)*(c9fb^*uh;gVU7X>CT1b`24+s-US6sb}4;u+=);K7Q4rVH-w_du4g%7>y-8A&MQ zK3z11aI|^hGqv>-!zS@=11M7f$D2|2?ECU^KOo0&(9H1+L9}qv%mjeAw3|1_SiVsr zeznoRzDe)c8bHlb=Y2@|=`$myj4cOXnKMGnIA##Z3o6+(l}uKrQkPMEF~r&ehk}UT zP4AzRK6xMl17v+2O0O$23so@@fGBR+LUoX~xGdso5mAmwrx;hpDqB>jSy}-xV+kul zT8e(2u-I;{_=JES^HFqm#KALpKnAbidEYtK<8QHiGcjFpx6aC2_rs)M7ysSc2@uP~ z6q!i6nQEkE0(W$IMi?kOD?OH-?$_XhU>*g>X=|PlBJx%Y-XjIahvVcB!&bsy%uvNm|R z>WU=ew>1fBz9g6IYamY=P&NEiTS>iiUh4eLUHIXv2}dw`dpY9&gQXEd@jy!$Q8UB zWf84B$mI~9iKbWMn~qwWD-gN9p`tRN$&0eSu$|5=E%oD&`wg|fkMe$l2d;#GHJ~{H zW&DJKHxHq|9^}hGo|rQ&9l^abfmLLBvPK=J#fr>Pb{n*`4khuSaETk;WKo7{CN9kd zT}VYZ%lCt#gO`#Ljt@O+;t|gQezuQgiCMOWq&uU#0e&*%?bmILDS$j+dC8Li`L!R&qAAKU}BIAVS$Nx9FlJFikZx>c`}s2 zVK*hspd>D|sVPfK74)Mo)`4I)9EG8v$Ked|HJV)gK(07!n7q9y4VL;hI@4HMVZqr( zUyP!1ICF=ZptFF==07PHPjeiz5e|dmI9_kaj#WM(XQN$s8UGanPoz&jF!Cp;KCWXh z1@_~$_)2|oF1kI)hodgM49#QM4}#n9pB*??r+?)+-TQ+tmoDtFtWu>;w<$UH0FgH;7! zcsVH^X-pprYF-u;6XR+C@t~Kl44D;%tcoi`mS9($r7Ln?iWi~;U8&q2*Ne|!xQ>y5 zx6wag2iz=aD;IdsWdQ2)FbK|wdbb8&m*PZyt2rdmHk05_p?uBMOBm=KMHmOKF^`z7Z5-3p{$M4_ur;(#Ocd}y++ZQ&{JRn zaq#l3a$LwPsbh9brsIMdnHxhumm5CkqT?V6Q?$j&bI!%K5dy>>l=lVgi0h|e1UkVPBMS#ma zEO5mpN%d`TF3_2ZOX|WJb`KFgHh>BE1qNzPj?jV>n_#}Qo|$6dWQbaA&;caCYsfrE zWh$5Vwar2So_P@8;_MenKXKT0DvY9iF-~w+#EHod906>8TaZ zp-XeI4mL>wqsWX7tO+A20KDSAX3RmlFZe@;+46U{aTjVbX?j!}28uKRw`?T(b2Ee` z0qu>s;f0bcy|M|9A%U`Jo&*`*$b;WhGt{;SmijF>;C;166~mQJ!pyk0nLw~E6YcBE zy=`wIozk85vy*lr3X1@dK9)in6GU&)w*)@%{DYxC-H^!Qc=@pKPNR0H0AX8YFB@jG z73q1?a9}%%J3;MyS37Y*!Ru{%owFDk3Xyj zboWC*D&VF%VkV+d{L35=;2>qCck=Bed(x3dYft`xFdj*mhO2fdxLZ1m!55j`Z}Lj5 zQXjow9$N!ap$84O#jBVnZxfg#hdkJps~EKj!!B$GtEw5-28X4^d&!|Dh>t>zMe$Zc zBzIUi0c*p4P$|4pBAC&SIdDHbU`2Ery7EezKq`EIIgTlGA9bmmp7w5WU2M zXtJoL;bTvR^|#hLXb!cR^2buLl4ii8EFhKb>}9b~a+l-m!FcR18=vN%`W^d6wawFz zCVWBL5e}o<^!MarxwfXaX28bTXP2)A?w-3-4{7W%s6)0sBNyZC>mQajDQ-n$UW@8 zGN~^sJM7A0t^~3W)W|wD_$>5T2Tu3wM{OP?!#hQ+$+c~&%oT6ZLzx&;W=Qf|@RoLf zXg})Tg$agG`jUT$YZJZ!Baiu#?7$lF^|yTd*}LlH*rM0*FL;mwTjw_3c*{YiY8LP| z)5Jlz+wEiW=Fvm(+U|lkdwwk;+K(bB+Lt?M&EPglIdNyVz}l{?!SO@ik1aQ=@+7D7 ziTO)8-cLfB@w0cEsz;_$P_0~P^%1szhrb11kfucUYk>-zqXsy{BOVlOwTIZ~A4im_ z8TfnUhpnkaGG@RkS+Bc&6VE2r*8hF^R5BxrdBzha0%ayag_#M^g!_{LI2HOIy+mGE z+Ulv}cZ7F-E^F^#Y13qKExjZ+ABkxEJHB_&8v0Z8#lW=D)nA%t{Ebfp^B-6SB#|O3R^59ZCTO!P&AY>oa?!7 zD$FkQEb%l*t;zz4@S08fBL(^|kzb?^@^|01mzQ@31sJ=Ro0kdK59ibIO8~tp9pxc* zc`StCY-Fg&`L6J6je;4$a~4D}{frxJ7M0EvFRDr~?=D6cTme2Whm8X6W&Y`z&X0e8 zuQs6Nx5lrB21m4AGDy~z9trvSNoA^N`GCTn3Rr`VJ+dW2Hp1t1V!=|{bSd&>P`lk< zK#OCon%R5~zAy4H2lyoTwS~(XEWfrA>2sNqV9jK2YlG0exC@4dcFyTG}CRhl(axm;Lc=h`A4kf(C}TIO5mO0yhI?6kmh zf_ggNIX>)F+-P2W;c$T8{*=FVopYv0tu@pVrZ#iwcrpsvad0W+4V&pz;9ncg04%i8 z%m?tpI7S(sCY@ec+A$JaL=fFyZ$Gv+l(*@XoB0G>Oyh|>LKqAT+sAXWgeqnjI{3sR- zf=!3t4b^R#kaNJUGQIK+`IFZ!7G!D=X@c>#l!+|M-8gC(dom9Vn@&Dx+!o}8Dv6;7 z@4H8Ju*IOSM?!NABD}n4{bFmBaN@vCNdEk$Nvq-ma-?u~4?wz}NCUjMlGvqkU= zjf$N5{O4T0g!1VJtN_!2*D%OHfh&(;C;1(%j0)Om?gz{mKPv*i8BG$IwW3UsllWI? zGq)9NK~M7xDq>5J+D*}6y95O-nPdRKWB?b zNiqCmyZ+q;Mwl401lrb?VM(RTg-Mb#q|TGFT5%B-=oPRA{Maf1&OssO)5SO_6C;)> z5V~mw+SG+fv~~Gn(-i7^t3g?s=qrrPZRMzq z&ZAS{*PcNor9gbgpaZ#`awtL?Ebufah~uM$Y~hoL8I8f!PCC-9Ix2qU$wKc$d0tvV z2On+N6c8}vx%CW8cpi^cL|nw<8E$t&Rhfa)z+)8JRt1(N*!7~=CO^iY^hTFkrtkIH zmp=gCFH3jJS@I;9Bq4{Zk6VAJ9rF$*>RmT45JY<_e^>dnW10BxLa8j!_@@F_uRdK} z5c=)g2@7~W%GZK%kG-&Iha~HW_Wtg|6sr2Ds6Et&=ad!71lVeJ%L(u#=n^7sE&|QR zeB88NX|+(-cwU>l1}BmZJYFP7aflH>-A z_)6R2=HUn~2+P3Xis$wIF0SxGDQ{k6O=`0--P%NQkEswzvIz8@i1izJ)Q5q2#yN)Y zpz-Nmf3oXP&Qtx|S3cR?mgTc$z)Is}0T}Kj2iMN32_sEu((Y($w)K`BI5wy$O0zXo;XiJD|Csl;V34Nw^ElH5_8Nxnd+RjgHFf-P{9(&Phu3T~{r;tU zXBaiuTU-XzeRH<7{&aPCvAg+7yq`AZYm0Z?DaVQxLuf17^-aZzWM-9DJn`}XAPwJkW}`h1>=Y!b3V1NjJFdQM9}kdX?c}CzPA>i% zHY3I|8Tn3y3rJvh%tHBaNsC3JI)Q|#QTdIMQKpYKakLjL0fzl1oe!m!@6=D7Tk`B) z&c4DVBmsG_@S7$xJ^VZFr~Ic7>)1JwaUO7!>$uo5JILO6OXN!qgVEhMSzJ*1xgYwE zVz#>_hL5H&xlKe)@tR*u@Nkp%#S*h$9r>2|;r}@HUOm*|M0!)+G`!E4f2}$q`YZ0z z)EPvPBH}aqvin(B(h9EK_A2>>KXMsa1&{7=t9{+EeW2tu9WygGb%I19^{op9AONea ziKyPZ6L5S^>jbnz|GiD_fWsrbun&owBFq^{n4UKa{h3MANBH*!ButdqLWf$$pw3p8 ztipSA3l1Cf_D0AA%TKG5*~7S+IF;}BGgS)R8QoXnqFbulp8Y95Ti)sIl6)_78r1?oucV`U3Q^C9t|(vKK>J`Ye?JaQpJD<+kmN;!}DP3l-{?v3zS2cZDTS zwwn1~@g1oz@EFFm|5#+=La9j&*F-kGN|)riiO;=5CNXWhsz-lST6^j=@y8N9gJ(sV zt+}9s@9AErw3A-Iy2G&@^E<=gw+u_naLl#4!!L}Gug-Lpof(j{ME=Jj?4swEwyD{ADCg3-iaB5P>Y~;}Vy5zan1F67h_$Qu1 z#R&g`SeTS=58cz->-G?DnZ9ZsWm7!S9id`i+p4Q6!CEZQq@SO?8M(p(MbSznz= zb^;Ch{~irL=x|i7zIO2yS^L*8vS4L@kxQ@j>Lm``<}!N|$n+`QcB!4v5$wcppkLCb zDVCY^)<#?XwRsZ#E+zge1kOP=QzqWH_>W^gp4c?n*E21t>T3bS+WvZ_nWn$rz!~-C zR^Pv-(fL@Byb#~`UH3vk5#XVHJisdM$(k<@W_e%CXN(z&&0|S1xSGWj&~y#Q>CSK+ z#d$k}1&x}~`qwCE`cH4ZhaUX~ql0OG`7(vHR|xfk8mt~?A&2Zx`YR7 zASkZm!UTjis3`|Au;GdkJ0>P-b;|dd@fN2417bhFMj5Xqt)yeTs>c!NAz-NC%*sz=37pn zjpwpSnyVKNJc{|-Z>xasRQYDqrwa!&_O^>BQf9b;FHNtW`LAo50@d^t&xhmjQZL6V z?n}5a7e1DKu5lntaAd$J{U;3>jqxdM*!~RV8X~HFLFG=W>3lUhz^MEb`M9_IH7ai3 zV$BR25jOL@PKLdU`e;TOJIlnK->)L+ClU8axg+ApsU~LQVA73?Ib#NF_o)iatHyx) zOI13iZ+$PItG0?C9Z#5};hfAb`_8Tm$(SDQ<?&)>k?a$RAO}R^keyZq&NYIn>EDLMoa2w2{4A33MoE-4$ z>(7BYyDVjdGQEPQF#WH_1AX)*23nWWTkBN`x%w>suY~>Q5T`V@d!?-00L$0?EZ~~z zX`QiQ5zDSI$M~mHp_z-tMdB9|qNSnd0W^XDU?*9__J8+Sr^5mIyk z>igxoZIxYl5h?JPjR`;2Y**%+&OZ`oX_!25nc5_ zWqf`D`1+3C%@}n7Oa3)rYicKi)%=>`6AL_lJ=ah_-FZ=wfnboHJ}ubdBL{Hon=NNr zgghzMkJp}h)~!1h!=t83rE*1m_PC_|ms zMbMpHTlplB4)Qg-=3RB#ZV+3I^;tkHx8>_of`YQ@)9KOvPb)+)ocdacxQH;Y-U%q1{pT`mF}!^Sm!F{T zMNM{8l&1_o2X3>^duDS9n7+MIvtbuo_Da9QQp9?k=?GUC6Qgl7ERyN1zt?C0B~?otAHaok5)tpAtf1}Y%Wo1ilAv3 zHf6kyQ%m=rXq;3RuBCN#43c>ek+Dq;Tf*MUpkff1Ki5;5hq3n3O5Vt^-r1`e0Wz$C zN|NQ7m0nd>`mVB+CE7weftn|L6z0^imuyY{J-D*_H&$pzD`&>E@1wrFO)O*)?xP~h zR%=Xv2Wb+rFNucBCF1w$X4gt*;~yC>cRC0oCyJ^66niBKAUC+EG=`J756l^kcQqv| zTk>d8dmV>;*f`RwkirK*Y;5rh#sV%Sw87ta0m|Judi-($*^m9gn#ezVTLdnj+*wQ` zsLy2ykxGMa%vvr7WI3JO9XraKXJ)_Gvh8`%NX?dM#El_;KWO-3;%aDqj~piAn$ko6 z*0Xmm$jdt_U4zj}s(`XIA16s5vgQ47vmDi1iXRBXs7+XW^KdA8&8fh4Hc10M`>09A z@lhlwOF(kk=w%BeD+N&u@g0LZC>NRuqkl4+%f*ITZAMKumobbNO`#2-Ql-$2dGC!7 zqwnO>3~TuZjfp=NS25`F+&yFDFbzWx@J(@6h6TFWEyk} zKB%>ULs3`Zhl$HR$Dc!DQ+HLOF9bZqM|B>9hfKj+Q>c2M_2xIMLh-yx+{a?GTNiizz9@eB*%{cWuExBF^$A2$vVZ-)B8pzq3EWb+YNY-VmLMHyUW*Sn7h>N_#uvjenHEF*)iK{`% z$D60Kq4puaM!UghbC(?Odgv#xOyN;0Wc99U&{U47&GX2YHcCSyR>}7IGYbKTW6B&? zig(}LHKm&K=!%3K@JhCDfD^c(WhF0vK@WT#_5MbE`K`aTMzWHYOc|#QHK>hq-Fqmm z5-{iAaR13!CvS*4AU1iu-;leMPp8JpRRW^=b2TNCLq4`^TNAbcgKPM?rd#j`{Ot$b z&ej<>jT&tpFgnWrm~T`~+Jx&F&}dDSJ~SV7wtN4AjMlr`1j8_F|dJz&N{b^-`TVF!9d3T<<(yxAoj>LXOj>bP<{b;q} zUNkk{VPtxI)Lb0kMjgd3a9rLVRe4X_wUjVH*0FCnNub41YL~Gq%6O{Nd;XC6F%{`_ z6pCFQZG)f4`VeaCKK2w2t5N7_msvl!CWeY3R!P?-9j zpT2PDzd$~iNxr2UDi%FAzLRCFtY2<6krVm`B2a?^>6?aYHP@gcsqz7k!xYArVH_VgC>Zx}~MP zCQ|MJtlznXm1abo7r{ct?Qm9FBV~9cptEpnLLPY*!}cmpP8xijUKI=v|NE}s@n>bp zsI_w`*rXj+aoly046r5F&P7sz=%~55u*-I=AJ%&uWGT0tfYh%!59^gO31m6f&XvOS zQ-1_mW3>EJ^oqtnp`}H{HOb5p-Q^Fuh3(tlL5o3G%9mA<*0G!G7p=uX{+i!J-hSg@ zDQX?QCBQ<{n4@4~f9?Bp_{=^iTw|0u@G1_s3Y6F4Bl5uD{2w{eOfWPd+gxBX$J`3wv26J#dmTwghWu+(UZxYz|qWh8SSot&ghzr zz#%NHC&XeJH2uN#Z6|X)8x{hIGTA6Kg!x3{|9N$9i|Bzgn2k*&FAuTlsPun(_8#4{ ze4)Sb^+oPtVZhjl8#XzLq(o&`oVi-*WaZPp40-8S_~V2L8fxtcW1qh5-U8qLOnZ|2 zi@rZlyDJNn8!9RF_9mH(><|-SU<&ODt4-nvd3)AF?`RQ)91T}x1ei05f&b}FM)^r0 zHC9en8O@F9Iy|^%-+r9_NF$wVF11f^5_VibTBr&}Z!@*v3CBvYZY^oA0YcYnu)@%IWk~|X;AkadOz8qKS4$w)O@iey1SS6 z{2;N1_SUv%897yOBcq%jwBw!|b2l)jCzAK0-aRK=;q|3{32!ipXRTZc88;mbj_$g# zg$`XRmbt^)qeGqV^F1ngtht{$yWO!4Ac2q^fy}Wh{0J-mW^;!2tuytq zr%WCjlAr@bS<6amJPd#^`ijIL)?(SdzA*w{o&kG+c}!DM7}2Seq?yitV&JIvmH89x zyKhjHr-{&w;j}mS&1@q5W*45ek{&I ze@rD0Dy>*0A+Ba(=y75(qbl6JUUJ|mwLm^=7bT~6AIKv_D{0}+*yg0p$#XS|ALr*x zp#S!^WTz0S2^Oiobqp_(Fj+hH(W2edojf`R7bs<@q2*-R;D6ymf6IYv7EVR4I!kaN z;60LIC=N65PO~8H>iGFUL^Wk;#&p5ZoH=PCj3ex+5J%%83=na+P#RQrrLn_0mCgIG zep#0X2vdpouBgbCHyC~FwOf4<;PUPa5=6STrSG65iAEJoIqF%ejp1X34C`bG{_&{J zmXm*p8x2f15EQZEm1O5&6;HYlMQ0i3WT%Ebobu7#enTz=H~Lu+8fAb3vjtbW00s5e z&S&q5$hxksEB!q4ig4Z)bXsRD^-cbJb;dX~ik*Up(}cCHe!li~RHZcTxnhw^?vcuE ze^+N08d$lQ*fjk=l2Nh@;`@eSt>NS5UyjyzMfCs3HjW~B! zgn~cQSMC40s9s;0;Abfob5jq=--`#g{mvKPNJ=Ya`W%K{11nZtyK7oB`Bztf-rSe{ zdN#R3m1$|7c$U@mI%h)L#R+ePQ^m&*$zD4K%>3bFyTiK19-*6=ZiZIgV>_sQ>fbn& zc3)9CD3uT4jP|ZhWdbfMbX#^@RJG>?73TE$|74KYZ`8Uiz=zKDcxAR0hY4jnlf11{ z6~AT2*(i&aB5DQI&t$!nT~hZ-UTH}l04AA|5+q^0mB3T6X?{wR7>JNV2WXp1W#9cN zKkA2d{(?9uQAl+A6R5M83d&Y7fZqPkrPjf%lW6=+xpP(7^`mkuk#tpo8x6gqd%Iy5 zX>%*QiG7@-$0UUa2_rO4WXs-|j|0}2Um>RLQD*_!>>Km30OB^l%cWHMWDLA>wS_aE zqH~_R3ixCZ3qd>L*P&rbjQ67pm(3G+DdX|iye^q^{fe=GoBnqyyz6|sa~0gwdSPrn z1}q1jF=*abzDjiy%_uYnoc8+5Zc2w?T&a`gQkJZL`(@-3R<<2?WjW}rnubM-cfV~{ zJ7uA(!S-dKSmb$924jT7XKck`^TjSvMJF3f+|$1!4pMp( z5TqK`p6kE(vXQ4T0U^Q=5Z|KBQa4)-Zj6MYt52G&x2Lf?cj*kZv~wv|4fL@NQRbB@ zj^kFh_9@J%8Urv(bnQPD*m8Srkq2A{d#hNNE``)p!327*^Zz#m1D?3yUh7X1xtVUv zOUOZ^wMVf`56VgEFCS^ln0&)%H&2!kAImd+6mz9S7%dsm?~ADN@+JRbNH1{GGU$vm zL1b?pcko4ixrdCvQ+pMK39cgzqMBTh5EIjv&i)ngL)ke8fA_jZ*F5=mV|~Xaw9NmS zM^F)#pmIe`aNHCG5tYNvxUZ0Pd#CcDqBLSCb1I;jnInV$*2CfElY7%yK^TxHF#e7! z1SG@F7}nXzBg*A4C7mIoEHB%{NKH<~hHVHeH~bT__Id7%cu<~MSy7bc zIf%!Kusf$@1II1(+oJ4*-js?Nl@AVOMFy3u!f_Lh-=W>x*KYS@gSWJnLjJSCg!O4i z^KYtBdXjK~5SH=ckN<8ToF4^Igo<=kNKWsz)RCOAekd6)lbHC9!3#>OA_138hbK%# z-TC4kC%gK*Y}9dJ(PZGBKhrUjUdd&ilqkx*Qyo($^k@eT7?^PO27O&|9#2P$OfUX( zgmP!vU;bnJC83aM@~kv26J5H&nb>Bbug6pEcZ1iOnQI(8`N6;3wiu{`KLg(>H^((f z0SC$RmO8$N>4y1PK=4COvP*#OCO_Io3t1m7zF4grt1BN({?H7HN^?Px#TPC z?*9EhbTTMn>NwWt%q%3xitA>2swz9#s{2x!#t2XQRPR;D21kGXup+;i@k!n;r@&CE z<%11aKZWCyGQj(6P#UBje<*g_uQ=^dXHN=bwITf*aAXO?+f)n`iGviv_wgf~EKX5e8f~ zAA5?N106ul*}n(4+`uN4K=3z?QoDvFpqu^-B3|J8e5S7P>SmsaTa=+($ z!}aD~U-}c^;IZ`5+7^`>I;-e>>oJf=f+mqQhlfwV8DvSWrv?}NZ~iJd$7PFj*eOw= zC&3POKj69%jP`;yjPE=~w%g`$Lo-nvgP4BN3=@X)mFz5}`E^@*q9Vf0gK(b*63hw) zy5T9n$V}&(v*qx$DTefDFw+onfVR^S-O6|F6pi1Is460D+~<+g(8K-bck)#*27~0L zeNQnXs?bOY?@VtXP~x;JVJmiE0ZAgBItP%<5AVQp1sQIDB!}odo2BPR{nVC3GC^;D zUKQB*wr+eZVWZqqV@#7^1=~0rDDWehRNeM*J|D&2t|6d#?sc+-XDi6Q4@C+dZALQg z#G(ym)d%Qqk&@ui$L&@1j4lnSseTdSa zvU~wCPnSwaCw4k`yN2IT zBSnV79VjVFIEbySMCv|k8U9w*vaPhq{~_do*4Ff(o$4itfVAb&RM)7P*^F+Hkm_-o zu0sBDq!Cw=W@4;uB%KlHwh$5<15Yivk@8}=q@YD*8V5{>4v|f}>kE89lx=2sT0Qv1 z)XCVzF75MNN03?&h$q2fME;Nsx7dVQaE_!k$NJfE@lOjvDt>N%MG|*Tx|n$)Z;k&T zBFV|y$25t!(MY$^7hRsM1Q&^*X%OY!DmI6VI{F^J-nZ?EN4mZWYz{21W5MX=u5)f% zm;f(Q?ES*tciL~7Asgk~6G z?CP&|0Q|u)yV?lt%jC^qIHfDb?th4g-x}Y z%?_`t(BtbeX~%QO$%;2`q4Qfkma}2L3tRZmH;z8-C63sZc}04=`JrK}vLNkd>DzQ0 zWI~A?mz*;6K#H2-ovkM8sfs3fTp}@%I$r*g?kVDk`X;>1+gM^iAE#BXFUEpU$+O9bR%+Bqpn?y>SThir1IrSu>+Za#iq}r z<#yAvQ*blz95tQJH$XKK7U9Kky{I*!hqCM--Nx!#%C85wZ;Ehoc-}&_#7* zCSVO8ZO87J04Z;v|LHP>b$|*?pw+&!83|uYEXtSbm;P?&Y%4#o9@gccgq0;)FiRod zGsUq{ykrs5QZxIZ_yE-nM9=rG+?1`}(fx0pf|1629^qJF!X(on%CguA? zI{@b`TtX=6g%Iui4!UO*PzBStp28NJA&-!8YmldoB#nM=aCFI5wv-rojZ%|FI{}}C z(Qn+zTtcE-=`a9!_TitvQUpuUt4+)DsD{sKtVAgtj4Sota|JP!`Xo@o%#JYQ|fhF}`C~i4E?}#Jtozy71v#2_Wj6F(2sSsG|IV`;k20GkH4$r%FPDc2^s*RO*dQ z3)Vd?j?I#PhM$$V1eMSe7q^`h6`h?VZ}s3*Fz_|OLO%RhZq43L`*?CZLrDoH1yRv# z_8QYMiY}VMTtX2FR!>?=Mj;1se9h|;X(cz$JpGE?YNx$i9aMRZots!FH%B*e zuH0vazPhW;ZhuQ!C{-ggjXRa=|?dd5MV@w^TN8(G?gS<7m--hntMV>I0oB-R#Ntnje5q>wZ zW12sW7(_P>LPDQ_HVvlbSn9@v(FR}P=_D+DfBOE$%m)$oXskIP56;n8(gfX)TdSXV z)Q0-e_vYKwVeAKAuN-cr0Hcg&2z7Lf!xeAPCmG3H*U(CEA|A52%z$RC&Y}Xo*+j5+D$SZuXTle}At6Iq0)Hj?P zj@zVPChfb%W^XewKbn1SJ6~q54xU}R9}tgy0XVMva@@(t7|}nXO0bAEUEYGC7@@}5 z5@o#xpm&Z1?(1Q}nCS6z84l#YQEBG%@M|db+cnM&wn|{8IRgeM(F9iS6*|Yotweo+ zb_Ig1Wf=1eD7kN)d}X+&gB{SPq04?6|BoqY9OaUS>S|7p%C2Jn``UfO?dVunXso3Q z!Xfcl{};KZ%+T~3*U?u5XQ;^3>Ukp^7cF_>i*# ztEDvpum(vb%Ohnzqk`v-lU?AK1zd5&PgVoG@nv}bN$0M5iKZTEeI}+e9{(XjKBdKj zbkyFkTYb%b+t1#NU|S8I5@%ABw$ENUeL@p_EgNi}r*~$LRVlF|wm^n+&d^E8`M1Kv z$WJoJq&eJO@SR2mX>VAVJ;Phj5ybgNFzQ?{H2Hz7Mm4RQF8}Za`JrZQP!;5zQ0Qf1 zTSX;fKrcFvEA)AvWjR24ME8OM@{T_{U!YWF4i=9(|4HD-+^JcK-}Ti}$Fw=7-M&4> zW`S!&?Pa>8av2NfA1EI$-ae&Yv{lj1ziYAs1kO2Nl6}PBE6(maNRA*V1354dzmNfX z4PLQixbypzmBnj&{e`d22d%}b&3Wrk-wRzd-FcCIry|`u>MWzhP2Rj5i1KrT7s_C5 zbV^06sMcmf~Ji@3@nbaKD& zF~)V3ll?ItCy7lb1Hd<=yNh`_`2RK(cj&)Zc#tZ#KhQ(||RqzUg(<(23MmKkS1J2|4A zz-Ny+JuS3UsKRCWugL<(sHN%Ozv??9`#w+Md#^h|)#D$%mz^xCX$~%?Eeu>y!9A}} zu#!|b_UobCJXANREwbRo|57RUujCe*;J$9&v)}9uN~Nkd|JKgnbYRL?#AbEsuh&%q zR= zdPR)!Ifl3SKl?~{`VZ8Dzz>bT^+G`W=cd7#AYegyCY|{H%$27So!f~M73y&W$ja5< zNBbt|;psoRuB%7H(y~{Q?~aFqFStZx-ChfPFY=MlD8ehu+{}kGD=Anr_9C9_}mZbDxdyh}o2(oEq$ z`0IR=aW>v(yrdI+#|dSS7;!!Nr|s6Dzrw8KdURNQOq`bgR~(pbr*|)zG$=7uCLT-E zJZd&bpzjL3xS5Z-RatN{nZFiap0oDoT2SP&)XxIP{y&^GQfxb0anI-U2HI63sC}0) z2xu5Q2Il|fpM+<%Wz+ELt+aFElUlF#KPiAOx4AwfzxFnZj)i{OjJMY+q_&;8Cunk3 z(^&HJuyLPYu*+Jj+FXhC@uxvmwUGPxGaala$lC|)Gx*do2Kj>Wa`L-Xk~i5FP9ArQ z-}#sLQxP5LYdmp;|N8Yxb4Q1FtmtcZ&yP*j5jC}*q93dxnQcT14(s82k`3W*JhbE# zK!Blf_?usrChT@!L&!;NM7LJ8Yoc03#g;g>QSry7>zcAF(drpm7^q4Jmu$PV!BovZ z<6$q@_P+KfRMK%?nxQVN{O`qpi!4fjm683BL=c-N2`~lSfdZ^xDSbdCc3BJiX< z@4oJqS4$63s20@stG!JAq~*hmen7nN0BwIUXkmIJkgIx+RaR71y8Er^y*?eai2kQ{ zVn;1s9u4+2g-VP;fFF9HH%WUX_j|V5b36-@>1s5+F?_>TI-T?|_IP_x6PDQd%t<_y zQZbnsB)c?(F%xeH1Zt%s0)a-u5#_fa*EAr)gHGyWh@h2-k)%80ukAheP#T*ElO>eU zk8d^LFOj;sYP&yqZEDm7fqqDj7T7`T-8zNZzW)xJXoZG7GTJdH1mW6go9_qdesxh~ zgev?l@!A`6CVSR;-nKd0;FqGINnbtcjB;C7<=mCeXlHkT9yRg2;QN7OLK~EVH{dX0 zt1ae@EaNAYcqU3`!~l%)-5P4Ez~A?^7s)W9ERF~Fw{j#Y+MwM??jmR{z}H^3U^wIF zmEwy)C(zq5Y`_>*nUf~NH0qi0GhIP0T8R)<1_>Lcl0>#rJJr`x%$*>qW%93U!8otjT*PpcP|Z@)s!8=)!2Ni_dcW`fMp_Ewgv|0@ zNNS`s+Da|rk-0vF>+P|eS?*2HiS#Fgn-mxb&k-6Cen*jYcAlx*?O>le)}biTSzWH~ ztcI~}B``m+(k*H0t-U5C2&OXuzBTi}x8_#g{(LiM|M5?MOrJK3r^N&Q9*~k!yC`v> z@3C1C`Jc4herExy{<>6P2)~1LXE^=eip55=N!U~LvMnS_4@~?fDhv(M)_3B!d$fXw)()N$V^R3@X zl>Gba-_vjwL51$;wm-|IdJ${9f)97Lk^IzzS7su0e44w#AGPOVzCa-hs{pw{Uz0@Uddaj+U4aM-U^XN5iZ9KIqSai`x*bxu8v#*XpxHrK}b9*A*? zn{(@?7}luAtSXoDhn?p_rUSC@@%<@wNn9K95fR1=gZn8P882%A7RtL) z`-gd(*&D{ap|4h;27ZDZbsje82Z7skFCuF)nU)y-1YCsuP_cM6{&<-+a_4J#a@|bI z$E#njrYlJGFn01Ptp9O+y}nQ)olkM6UiPP#cvAOZ$?Jolnj}_`93_7kTDwnPZwD(5qYhz%M__z=3c7p-oDCs9fj_$hpRa(>GPwGiddP#z>uvLuFV0lq`cx~}>kt5oo3Yg_sPhx~{MYyh zcR1N{QUi4LHqlbnA2H{^1Fzqds!1c78vhHx24PO%3)$qb zWz2LjI6dZBB1Z{Ckec4zzK`0GZ`M5)=u;hyKEbmO43CvIh$6G${`J6gO{I#9<9qHA z{ihzXJbp{@d_W^&v2he+_i!Ii|40A6oe(3*Elvq=IV1{8rIl+n7R>IN#skD%V22~1 zj46>Cw`r_(*GZB?Y6Id3_Hk-iT!r`s5);oNX74q3`%-8X1ZB6L&S29uc6EC0GWJre z0tK&+vdLhc18%?+JMv-_x>*W0O3828!lRs#P62^T)yOtQx z(o!T@h-e=X$bR7s+Q=4cdw7!b{^aPannj*RIV@rm^{ViqUtixZF{=_5<u%oFUn&Hh~ zqsk+#0zvj!1svpX^1)a?D&;S8oNhTg%!vn_s#&T=q5QAHoyUIm8P%7-nG$95&mDs% z$(qR0PaaqoS|H{9@09S0a}~My{wx}sNWdOg|KeGY2|R%CVt_Em4EZ`_RWl=2a(u2k zWIx3{E*$Vw7u;ay4r=*m`nCS^}fR<@5yet_-q?Zr{+U9(x&*(3R7*@p^Uf9O<<4&Q3ekMI) z9usDi0q=0ftG?c|_PkiVN23(S@6yeTD_62a7i_-y$U&PKKQ4)uq|Jom zTC7$DbeNea8HscnWPuaP;@5!{fIBYbAz$n4#A+^Io5hv; z(xT7`lUwNKoy(o95Q}30)g{v`GVGqjGyPNQ#f9^~4%sqmb&=_O#IRD!s35Vk>W_H# zX*46AL2V{HEAf2oliNKU9}7~C{Ovu`0AIsj2E6Q_q9d;z7{97t&?CR?!19HRd*ZIr zJ~>tWItaXzLRzr+68rZN$WwT#B-(DlX!mel*@-(|H`{ylDi~37L-$77Jz)cixESn> zs1-m#9Ni0zj$k&o8)zNi?xE<&{5HNTMhm!}U!mTw8bG0bBD)MC{pJSI2&A+1Nk-TQ z#6@;|pTQ1%z9YxP1p+3Wr_{bSBVtd}GTf&U%zHO)UPXHgm`iRMM493Wrxp*2im)zH z81DfE)c((QF`r*+Wh8Ch(2c|i$!6RT(Czq zu8=H{3x8oJ8lV5&{lSZa#t}FddcZfWr&bSxeK~8*<>Kq++eZ}xLSSa0@ z3l}=-gjPoiw}n+qDugEpgI|I*70IT2K=|vn&6RwxMt#9%(BDAZlWbk98IU+y zMUnWNX2IcX)& zc&1%-TS3dXj%80r7`df7Ha22mdfrxc^R_ZTAa;S#VPS0Yzl}h8hJ?DI;6)*$R;6(aMfz3JXc!g?S19$&8ze9y>lZ|2mof=g%}`&tnDg$b<)>M3z0ym_>d%);=fo1((=9()zr8428+H9m zc<$E)X^x&5c)IVul9ZwVML1S?js7^II2b)*35xID`$#>yRb3vCRtHyQ!U^5uleo}X zvTQnZ>dDVIy-m-z%2@o12~g`t{sV%*%6N+ouyN%$A`R+UWol9eA{OC?R@D`e6SNtj z5eyqHjRLJdgAhN`;?E)sJ?YqoAT~b0by~rA+PB%`zB*in#QAn3A?l0R2Kd!CX7QIR zPd)am`|=Z<9EsYU(Ge`(f?TrE8#=f=8J0pB7rIy_yJXOX@*S22*4xNQK!2%xxtg z9E!{SykzLH-}d^R%w+IriY>?yyFzb$gv$F~_zY?T29CzX8w#(+J^NNh7ORQt&eOpa zBSaxW4273ti#@{fHcN1p2^|A=ks)XIkND|=1)}k$W9SopPj*11y0Ylh>MwQBaG4kP zEwX%*QZ12mO!oV673_8(5Zqj>M>t!ortIm|A!0c@8qBSfXm3o+{B_Zi`#EQK!XB;p z>a3;>ShU7DE|_g01PeulY069?E)*Y{;1Bagq2`m|jDEfot`OlGAIt5ab)^p{$v7EQ zn5owf7k11m+W-F5f`iXiOYDQX*B?T0O8~fmS9nYR7|RDDJ%}ng!S=~hQ7i`yf>&`r zq=!zhUdLA)4_%Z9DO)}!fdIS^l&9^RmJa!B7TkranE0|Otpqdcpy)|0U_*W|?JuI5 zeQJ04yY*tVQ!2s;`}FZEr*G~P5~y!FgaLK_=tEKDPn{r}xRl)uWNeAsIf&G*7C#OP zHUt+Gqn^p5BCrfcBO*W>Q;7uWR}n~5HVRqyuL&00AB9NZA7CTgf5w87AX+wGBXd$kaqonyujdwJ68^5Y6nxMI|VibBFA(>?5(ta@PHR$>R&Y zN)I6NS7l$kim$ndZu*gDg#H&3k#=DkmBRQ$O%)a4ZT2%-)Db1fZ+hx>V?=*FYI_Ex zh#3ZMfs=MAE>eQoiuiuoJBB)}HTUnbftI`&A9PC_fE+9!=qte6nG4FGl?#m=s6XDL zl$YCaa10HRrd>d%amfso3ftJddoub_LPBluw%*BLtBn%y?16BWbvbSPczr6Rq`w3k zdC1n&5=#f-7utFa!pj2vGpXPu5MuslW=VaN9vC z-s-8VTR#@f{;Hu%3URwz{SJ%@0WyC$^|qy5&pX2>1(yQc8*-^}e5~z+fc*TgUK+{! zs?3(OMYu;5dh8gna3K03utKV8DcQyKl|a;LEXfD_!DH@|SR#2~LqO-=18E?tu?2;v zPokCa*ea<%dpxG`qlgQ$YA@h$Fn*#c0{-zD`S7wou$Y=5Lh4V8oRW6;XYV@vZG{T$ z;{m@J!8xsTgRt51X#O?#Dc^#cs7^E?Od*`7fGj?XnbMQj#bB(;_baDR9K0 z4){TdX2yjCM;VW`zHAY(hDPMZ?@gcOnU;l4xH#&y@ve2dY@nF=n{l z^%)KDP%G%RcyO_%!yd3!YpB3M!^E$YFMmv-{zR=^%_c^-%^NhqKRJ<(<6LqL1)|i% zK;xj)Rk#T)C{-Z%S(5W{3aLLOmw9BRiW(5mJ`etm|2jITtp&SU%poM;5v>fvsUzVZ{TGUJg4XWXNEKTVfw?lMi``4?MbNSbvo{aGNUJMl{=3= z?LjeU?l0llH!uDOM(h{z(bk~l_nAtoPtC)ae(z{w!CqKap3mttzK0UF|MEc2B$}s~ zCm(EVteE!3zv3(_BY%(jj-96UVeO8(dCmsT{m;Ro{Q$!O_ulNUs)KeWH3M3rz4e!K zu-VBgF_0j~IY=EX>H)>lZy5avB$oEiXj$jCG&;C98<(fJV$H+%lVAS3zI{CMhcLJi z*cW~!C_m%Me(GsRLa3WW&gTiHy$Vu{>B@|Z-R zpeLDv7MMu8_c3?S;V8gx=+j9=|WJ zRbr%c^vSOlVnfm#^ZTy&PAgfd*Q0&vC+Rr7?Tr~l$N*GAQ^QH*w=JPTnlL^&lU5b^ zCHv-u-O9Ucr}miy5cyFIc7Hz$5?)^L9B@~=wI*eF%&yJ&J83D#@OOm^?+srA*X{Rr zvWG3@Mv9nS9kcUnOP}_;Y6=a}Jco|YEF}r3W$uA{(m>|il75&;nt-SWG``-BXH8=8 zM0vI@bZ;a54OY@j?W>~3be)a=GL+gEiwDbg`z!yAvHneE6`l4UkEk!n4yl<8~>7${x8VM{Es)Fv2Nd($msw2>I+OrUnZw z7*t}@lW`SdOszQSjL|nEpUuChj9L_T`^pAngNB^FzgXIWp7Nz}0xXeeu$tiPhD@v| z;q+h^wPybB<);V11C+S?DkEV!AK&Pxzv^Y;uMGRTT6F(?{%B+flUW=8@6AumUi-hw znak@V3V$E;1pFEaM)`+NW`LZ-{SVoVrnlwez()aS%b19Y071C~TLwR*!U!_k*T;kE+cO|4DOxj?|g{P&w}SH+_rcxv!(puZ@wYh06FCJJY`b@P{Zdpr#MhjS!-4(%73a> zqPPGA$ex!4_q5R9B_53sExPw_ra6&T*Y_-7o?x*?aUv9uv?&W)&e*b+z zS<|SRP~F zZ59uJ&H^q1|L<(AWv=XTqzqq^Wf^~SQa<=ll+biw>qnkR2cT!koCLN4VF?7&Zh%b0 zn!vzk9eHq9zp3_W?hB`SOtpPxsqDb+TA}-xWcr5V@oV;mcwAe9)Y9R#V|fh?fUiUd zWGKUZ$u4;9MS`W~7Iu32p@i1Q@^i07gZ(|Fs?!bd z(mMQE`?gXI1Nc-&le`V{Q%$$+_aZB=1S&_}T^<`~ui-U|-|X^FN=swMyjO%#}N}zg2IA$^RDucRT|&b zbzUmwp!XK#!FBv2qoy9YL}s4hY4 z*a^PJ=e2)CD-Lp{aTBsrL5^^-j;LmAKZR z?oTYt*I6;V2<^o~=CbC^-|=Wo1CW(E#((*A6#JKjFi~oj^IhQ@P6uYxQ~uUpl6UxAZ(QpOtDT(`+_;ROwFUWFfsheObHnMXy~PMv|a{G9F4pZdg?p zu0)y1$rj0ArJ)t3%IJnK+Us@S#yaV5z45%09m_ouRQ}6;p&^f6iIE6q109NM6Lzi) zEgyZ^oUD6@?f_H1laJ$1vU$spAb+9jPDPJ}k*(|3FFzAiyd^m1E)|TDVGykss$bVd zc~|piKtuY{fpVUZdHqMF`5}M3gT6JEQ+S=zPs&j>j^}Fve+Do5bmmfO+i0X0*L{)C zY!H}^xnzlN-vT(mfw^N0U9%Bw@n}*nE#&PXZsyvHQd!?6cc3V(_@QUu?z%Gb(iG`Z zWarEr>PqOd)%|5ZIs;4~*oC;H5kCy+>$776xugWCQFN6^3(jp024>jGPLu`))!fnD zc?}{nR}QQICrW#5sRHTau;y;LTV500-v0`3Z)KxDcshdY&MjTRZ@-~);yI1rD;j$= zM1F_}d%*+%pL$S9d9<|XbAJ!J_b+ZF<-ENees+}~U~9$VC*Q1u*z=!f_+Ilex9^VA zq9<#7|1#8erE{upJ6&sLaB)_|U9C9cBxS<^bsR_I`eLq(`O2-D+X}%y3U1mh)jm%B zdj-+{h+Bi+jFeN${q=TW;jrM(eXgdTV^{1!6{89(2HevbFOQCPPXg*wIZ*ddKR(fm zi{c??t&DgFj|wgR*kT435yE2=;_K=^toY__<*EjT0pvc4aT7A0>&5zxLIc5GyQ7<5 z3@cEm98?6%-e0?SP?8*K_KD_s0XRI2Ml_BP?~^;nTfO&A7dc6ayQC@bs4ev0{qu*( z6xHcKgK)}~3#8!18}{A6rjMT}P6R@$IA>(7T}-bwzgL?W5g?L{G$LHAsIf)YPZn&( zoNs@Rq+o^*PkZ*+_D9^CZCjRtj2&Jh#&-`U1!hfwW$y8yYhOlN#KZYv?h|e9D>69z zg%)u@dH6ST1~?B)B63kbjEE`iDMUK)YlQA-!MikC=q-ug!}85yTfHoR+Q2|`drBR= z!4}g`rTVh?asbkD>kt;fWIAZNRc#+mOvC}Swb((nUkGSejLt-tQY2FRf&gW3hxWP% zdfsJQZ3ySK*x_Tyn@GQwr;PjyYO9vRX+RcU({~X>o;@_gs^mBI&e?Bj7q{+?F}-Vh zayWRDDHHS61|Yx0=>X+&JADZ+0))BHgx@cgp6@Z?_orkhPG|##M?a>eK+j(S3>ZtcC8%07 z6ks8J-KRVXIBUKsjE3SjTJwD?m@q>(t?36rF5n&(klb~Wc|`B0Gs_Bul{6^W1QstA z5O^b7Yj4|di5D&wiEd)Idn(0NI0#5W%nP9EGV{wSxyG*cgZV#qQRk|gHk8fWWR2Tx z(4&nfl}A}RNl<7Sp_dQk-^$+l7o2b50(0+Bw-!o#ddb9|#%bPhECJ>{!oh3^OV4-a zdhl{C%Lg@|JeOOg{waMC&jBN^Fuy9?sPoZ=Ke)xn$1jmi7vBrN_9bFU3&96@yUL9o zCM*h`bS;6m&XGI_Y>EUp4~51{GZnDvTgtWW)V=Lv&1sX&SppW>dmh9+Ck`KDZzL^o z;@m|*IT_l9=H|j6wo!p67em$#4EFoe@O$5cwFI)rk8$;BU=k&8$@LpGUk8a`6`)d3TCMTeG8gmmD$uCb9$Gy5DFlA?~l^Kq#A~2UcY*?3MB^I zKHFQ2dGC-uHZT$?Bn1+7=?n!OxzR>gGlRa`5{qFE9>3D=D_5zA-)C7|D`c}75{(D9 zAr6+bC*-1oE?s2k4V%w&!WiAwzJfIFV0>9i+*0I^4}lJ&#)AXZZJ;5?3kVMK~CF{{!p{+R!+M zw*}l}&?3;;<2>i5wJSGY&UdxZd|R&0!gFI>i9~_NR(rTzmRpSm|LYt}zxr&>Q z=8F07pSbbqW?q9A-hKprw)5X3)px+nzt7vf#jYYU5@Fa8!-1G>#t)QVWy+lNq`_h+ z__CzZ%o7^Of8K}XM_J*bV0MRjJ5AzwrMy5qKTHf`iAY3}H}#Di?o~iR+#Ll94U>|@ zuV?_wib>{Y#4&ZC@^(w~h`w@f&Liarf*VvxPCyIntAom(WbXe>2cq=jTPUXQEpWL# zY?lRJy$dMU$deD>A*}PnVH;)EQ)y7o z&0TtKW!}k(1?O%F#aU11kz;?@pqx%0UDYs*aQ0s@U6wRJ)Gz@M9UXDgM3LP%_v2&{ z3*H(tDG-%_-ZA_rOrFd+^7d4kgLWw1RL$GYDcj*IWo-Z`FlWoVKaQgiIKgeHO>+IdXzf1r{QvUb1XzqpoNl8~!h*73Qei|>A1!G2B z&58g-%b4yGE%6^-jWWZt()|ysCxzK9wwLL%4jNKUJ)dn{(z9q~%n%y|rG6U+>99fW z$Ur#F=}Hk+8Bc>p^(ddJsA_-v08RA}18eus8jde$t8)t6IKeMHAS65i>TeYINJyyP=Qz=oMo$RvQmioDWmw>`Iox+iz^D5TI#bJ}2#|@zmEx$0i4L(4{p;PI14_SaJo28kuAP13v2}dVda>khHlqiA?wK7faj#saDOpoXGU)I1yS}7T~66-=pyoy$bZ! zU9xXoFYMtxQj5hjORK7E#;t@5uTJuyRywXIp+IXkCsId{>wt@>iewnxlm8aFy=Zao ztI@d8fCh~?BC`Ua($T=+ng~>MIGrdGuXRZBmFlw-EUET4aL&yCf*i=$^tXEw&pnV8 zAqm?ne=^CASfSi20$g&`Ml2mq)Ku^KWO$-y#CU?+?t_g!s#Gx`QdWOnyE@23m5#^l zi2dPXC%w^R+40X?%EqIvanwlF^5_Q>y-&4;<^8D+U+g5~WMFC@{Ji{;=Lrg_W>*Wn zY|mbzjiPl9(~D%e_}}!~DiR~q1jLSpWtb`%Xlsh_4bp%fIZXiP(S_sxMNG9I{ERNx zWwwXcUVsd>^b@jlTJ5Lnp_{{yt;zluuLnNGeDIlEAbTMDS;0@9@(R2d4Ni060S}Zs zD@fsih=IZp5WpC*$aQXd(QQ3$4>xm%;&%ZTdP3fa%$uGlMi)3^u6+_rVW+r8wwEed zF*39T{HOdel6e+u#2;g>{B~{LraZay0w-qm9o*2n zDZuGw|7zo@ErUjDeuLhxXy0F#<6~V}s8O5c<@69*_7CG}3sqt_Qg0E=e>x+${OP(@ zz;0Wr#;29i^&tlKAQR-c)P+$E4(q>xk-Cpa?7n|4D}VkX_Xu_=@N-fnRN)oyQCK0nc8-+@9mh)HINvEKQ@Dee%n#5X{y7WzU>aOc`+#C=C~#vlPdZ zfGh}I)P1_HM~J;n+PBZ2I9a_9TEcF>X7tdrTkCDR|3#p3ddnrrJfPGPupgS+(Y+vq zxYZt|lX~S*k^7hn*PUO9Gfo2-|b%Jg#n$GZbN6gib5Y@xS<);SBbFTeAc`8(V`BjUGOp1X!-ry zeBmr`?6QzToGMZADai3UgoIb~1XKdCT*N9nppRnPk9|UABp#VZ6!p`>mUWn@gdi`v zy}acVF_7m2bL+=0YL;E?TzqY}vrPhA&9Y1ig*^odnYF^t-ti_k&D{Sj1Fg^<7#3)b zESbEA&?fb-719hQ9z1Jxhtfq8WU@|2_C``4S7a9-QIcUA_WvI!xiP z0TlJ0KlX0_Yi(XC3}s;H73%lL!&ZG00H6}*W1U20u(@!=q;=^AbMCLr$}bUVBfKzCigzOcuz$7 zMbMB9@-cb%{N56U656{%Pq}o2B|H3#-F^3%p5}pzKuEG+yaujSCii6~qaFv|>L*AF zWNc(@CYYxh#2N6hEBd0y%a6rPxT$T^WX*tS({mQ@&vjC4E(?KZB$QQ2vrDOzfs@?gS z|6s3n>t_+Tz#A)i)_)CZ+b$pu%DmJN#k_!0*<*%_>o6jxfS|MKK^Sc)mVUwWpTIeB zT#?%l{-K~<=x11>umN0n#xGYQ&xoerE4nob({OuQ=9s}eP7et6#ZpBudt)iUd6%Ni zC4U&?89?SdQ%AmKldfDY&Um=kFS-Qt{nPf&D=h?vR4`KqqzHX@>t@eUFNl{YGFlqn zbO2!|Z-jhwoZH?zVY3eFrj+FI% z_&4B%)A?UTU786=b^&$7$-_%{E3{jKL;H>oNuyDis2UmMYj@CH1c!TpzPbScOv}K* zyOu&xjEO$Miaho!+^GNkDH{q%<|fKIQHIW6t`aMluH@!j@bR>EJi1q{$I5BA$ ze_i|Cy3HUm#n73O;!aPw@wZ?u5fmG;hl*9SFC7m` z1F*thhd-aRJVgYiMf)dlK@y8@2qL~Ph1qBlo02~omqy}N*@!3RZ={DR;y}NjLjsdS z#AIXq)C(zVTc2C%UgEgg{2H5SbvC8KhLYU2``zAl(WbUCl|UwjP_ODSa7^`8J38)X zxGieK9=Jv0xfZ{B>xwyT2wGKo=7;Q**&q%i3UJnZH-kES;p9 zf&|z4X@Ng8zubOW8id**OumB~5qPQ>@AqH;ay0qjf!?`_O=`v8^+!jh*3yCv5bDG* zd3k%4qzt}Z6HTlpZwJ_M0Yrg^HysWK!?K|!rOlWu&Wy>c%uOlQmdzoLTht$DH`^+=O4at{QJF0 z3QxC1F=hIATO@fzcC|*&$(b{!f~4&$VTKKT5+5tL$b+oH3g{xzOo!3>Ul!aquvs4tLHde{_Y|G14JLMc z`j~fxAj(k40tmte1bbfXa{ky(Z1w7eNfdkHFUpz3)PmLYfE4>YIs{br3zPTnEL8Sp zT({%}q-$+FlH>+jGh{f4E3;^io(4A%Qal_f-!&fC=9l)l+g$ulF!ps&K!R29(=@^g4;$viy=1rREA4L&pQ)_Sz=pRueKf5vKIpzI#G3(+KQoYv+}R zoO^7RQ?C#Qtipt&ShKV%1R;a`OrF>~da0aNhN6-TeRw*15QcClLq@V7S|H{}V`68k zZ)ujOSf8ZG5uFhD8g;t_nkuqLq*D}|oAO_WxM-lkSm4wOUYa)6hCvvtp4^i_dt<*T zE1cjTWZ|fF_Dn!r(wX0?9uN>$wC}Qpv^8~4g7z-+EahSD8-44KAVo4t*(kD{fpcui zO;iW=RR;?nK;Yj$pVTM%d9DoCa&kBbl}_teSMav}W`t?cGDwB&X50-$EsKut2QLk| zeSnCHMIHxO-R^H*QhWET!~I)07<}Z{(N>V!%z3PYSEj%IYZ{cD=d84VhSu2sEtSZl zd2=m={f4US5|vrzqi+x)F2~cwg5TuAvN@IZ-DEmS&5dki)A{TUzXMKHrb1MRbo4e)qDZ-Ujws`^>>h%Li72g?}St zWN}>guD#q1EJ4TDn--#lX@?RgwC}E*CGyM|X9={+)<{mAzR3TKQPfT61fu^R(obhT2T>lb>IVRQx_v35jmP)@*)IjGvLHl5QrPa-=`L;#2)U;c}dX8Msu zJ8{ZMYFq(*{+j~us?rGy3aCTMgeN4fpJ(*I7sZhM+v4{i&)Q$H!9M(I&jVlL+Tp@| zjeV5;c%RbYDBzbAzSYJ0E-5I@F~2inATdiS=q*|@f#%c`+$HB9>7(Ur*8S(M8SqA! z5T#lZUgq>C62qTYUP@}k>am9!fFH19D1YisTe9CPQgd!{AtbqjaRXvv=lS&#szC@c z37cKY@q~yLMHwKyM399I)Ut|QvW*Az4HSnWa@avmDY++P% zQfw;B3y5yl0Y7%FA@o)1`G3`IUWH8-_EiQE`f-6yCj28D+j00Z92lIjT5xSGiyjM7A-zSFiP zs0|!F|MGDHJPBJS5lL0ASE8dxXa ze_Z_Y@a^fWdhjh711DyDQ7e@^}Q6`8SNsFsTy4EAxJQLmg zk^y|4A*dA^;xaNY)}S#Ertbyaq&p>7hf}PBe#dA|m4&_ddYh}NJiFzg>z~JmvGrR& zm8VVj!Gl4TWi;uJ!A0PgWQs=kW>4aHt-*Ls>2&}SE(m*J-)3hM-zI+qfw}_i%!l07 z?%S!RC`4Td9_SQ8O_=? zbK0}hFnT_DwqZY}jHbjmO9#z83}Tx;bX&kv7o>s0=EIXs(cgjGL*KTWvd?E@x*L}1 zApWdQ0jB}?@KY+u3W3kZ|E*D6L?v7EkzkKKA;lZtZw;}>CzaU+tpy9F0bd!ut$^Gp z?w0<^PrfUz-F-Y!q&bq`c2k70dQ!wfpDYgF!BAxKBp!?l7$cU#qe5f3V+~3lvEV^` z8Ndo$(h#inLH}xG!D^aI?pn|!TQ_x|gYOS8dHiqv7&*KE6tOSxiuW}Gi6acLoRN-Z z8lT&(c>We-=(0dlfL`SSWGH=G<>k<=Y8tg*nbTi<@vM4a0H<8Q${7bwO zVR1_(W(wS?^Ua4f1NU?1tX}4{-@pb>%E09 z?4GLBno1x)G#3`m76yEHTke3!1PFm7LN%dGs}d47sZu zXfMHfI;aBOZPk#zfV4CT=cd1B7gj6^xMb|v&j zqt_cMqT?$JhaKG~hd8p`?yXzi^cv@|co4Ow%OHLcOis&^a<#{G)&Jp|C`5eT$zN&J**XgdULX`71&!z_+1lhBDu-jb|$$f8wj*SFGYHy zO5~0*dDY!3O$SD^tK{vasb#nIoF#0Oa=0C(i1sqS5zf19p2hs|V)Tqeli1|ecD|kX zhMh?d#PxT80q!Z>q%*Qr@@&KWC*S-4U^*%S&V)wF#z;xwH5 zm6C*;YFugmee3hrp#ER=Y9FlP7O=`QTm;V@imQi{+?W7y1{BN!RHCaBenhS$!iY*R zL3dt{x)g^KxgXM%$VTxU@4Qpz{-8P$`AL4$d-MGRe z$$YCni`_}Y2DfojabVd&l20aK+$vSR;pSH7V>tpX8OfphK-e zAkYwa&U2Ri8XzIij&Vgdn;*^8Z=Oaghlz_6Io83R&|MoshWIXXOmc`m@@mTv| z{tF&!L4cyq{pe?>pbmR^cYTjg*S`p}5T43eT^1B!>LMlUUcR@T&`Gv~I$^+n_0xwE z{hIpK|9ejUtwnCuQMPt`;{Vs-IH4_y68`3I=WLVr?ud}YH`e?+L((rc?kMQi)eS#u zK!m=%Sp^w{)LXu)BLBxpWK|1z?8gTqx#edLH1^9H0KRj4uJI&9TbR?aehM`#F<^=F zzB6O72yzvsH7&xWo^tJjksN{oKOQkX89hyIJox-w@qxi#P)T;x8y3g!DI$=A&)z+r zd@oaQ7alSX0&f^nli&ljpjLZnQ20qsG0)u#>W_I5(LrgjVMhU_rzoz`FL{tEQ@qG18{N)f7D_kb4w(z#r$S>px^*54H(; zEfV#uH;?6KCCA6=*KgY_HP2^L)eXIcT4zqIw-{+A+p=f^C#P#{cC{dq2h*M6 zk=36LA3Xtl!$Fcf*?~a#Da?R?dW-N?0$(2z3W84&TPW+&(~}f460!?(OSlWLkjU17 zSXxlWQ#U(*JqRPDkU52*3A^rg+3uqCH#9LHPJDRJ?6$)cE`Uy&3T01!>QJnvT0vBOOsA8i3hOPD^FN6TZ_|pT5}BeM zO7?QzYAllc;o(E~Yz5z)#Y=G&E}B-!qqDPWYLkqh{w$D<0zTSb`K7Dx1cKne?}atK6|5;>OhOR`5yS8A+}>} zEBLaXnagQ~vxg@oX4U;}p22^M0cO`1<5{^U#tQmwEPZeW`Dn5blAr^UIM?IF6Y>>s zd(WE`Kwpw&uirEVnukbzU1Ru3!cc2)f0?zrs&_mK`?Y%J>G_09I0phW4S$EL1rrhr zKu3C1r1#b?UW@Rny&-EW%Ho}YM;6D9>+$l7QgJ_CxLt%{xAqo3B=WxvT8VI9O3S#NmIm@zo%jAjvK7UnoJsW#=CqA<+4Q_HM@g zcg>=I8|k`e2{f-fzAR=(qtslxf9WH`(Ug^Xs!VQX>-`#-T&Tk=VLNSAVq?mMQtRWJrLiGh%3pv2tN1x+B^eZo>K}y0nEDrpoD?emVgZ@nZbWudE zYvxSq6_}@N^$}a*-_CSvC^1gg)os9-?m8t-Wpp-P?@gB{jk&OCN!|0HuUGMO#Wd=) zl)D^9+I=al!1!JFAFg@Nxi-CSy3Dt%|60DKs0NT~dp(XAGfDpl>Rd`UwL2JO;6ek1Hk z8z5p^z%4}yO9eh@`Q|>$I(7)71|GT1z$Z*9V9ZafIe!OboXlkzIu68JhzeoNp$ZpkFr%Yu6p~o!y?W@tWEoJ)NV}}3I5|Z@>`MmAiMpI(&N9t;iCTjCpd}v6? zfh>iyv@~05enLrjQRLhN^iccIvn=7`_)i|hKb@yXho=AG1|&<37%S<>Q&|>L&Eb_l z+?mzW1n0?}DqmTho)!A;KOH_r!knIa1kr9^j#Byjo+N*XRmtYJ$Q$<%^HUmyXrOw< zkQA$Euo2{X^;yrU(FQgY=jk-Cu*ZLs4wH;$c5~#w8GwJqSb5w{5LBe3q1zFa*1GIH zS5<71>Xz)DLjr7QF)@*Lb$l^z?#8PO^Z?=}j6zm^(*h>6WvsZ9*{(3$OHf)XX)2m7 zzblq_lNPo4ro zAK*s+Zm@0*f9tHYqKoM8;!3VldojDN^antT#svI6ELeFmq=xXh|K)MCb-+0UjUo(9 zsW>vC4`(%)A{MLpZR8)X8qt#*Bi4scv)rX@Kt;Lk=`~bhrW)82^%NG7eNn+LTKI92 zhk06#xJad7x!^MJ^8$?&N0g&vb1r1OD8POs`rrYbs1bAFiO$d_e&c2Q5VzZ49Q(jx zGc+nZh^w{&`Sk;p&u{_f1=J`Y`>wFLG-OImWL4ew+PB4*P0y#u(Oh9&dp=4XZd2(2foF(XxX3xqs9f@knQs&zKkj z1NK3MsofZXpeIT}(qOS$ARFGJ_quvIQ~i1Qw^z8Ac!rQy?}#dW`{ct}VCA~#OkMYz z22_11H}E=@-0@q|I(rh7WKx)D3;XdMlCl(!9tkq{7sYrq!yWDwG4nDCEfSKzm%bD4 z0pIjdE1&LO=iNq%mF6nxeq>HAF1!dbHP%%CONVU!A4z8!*W~-Z{cAyYBNC%Kr9l`7 zN|yqPASkGGm((^&LK>vMAR!$pO0yA4N|)qBx|Oc&zu$d7-;=#|y*@jy&w0Gx2hy|J zg+YnhtWm!|L28Cy>iFuw0sJ-4a9zrk5Ab=XEnQA<=-z|!-GN!Fy-(-7@CEV;8ysls zaHZ3=p%$WtK~AZOOLYQ2RfEbaBDSc;L42j*YUH#aQ@Se}J8_MFxSkjt*NZ2Ghdd3` zwL9gHq+%MCJ07Cg+w_Agw7$iG%uJR!2<)|ytV|Dgtc5p~b}h(FOlm*;i2 zfqJ*h|9)}obDBBfq1(!rERkQcjow?EK84c;uidMSbBQz9#GC& zGQg~exk#>+xygW9@MbZHU}HL0h=dZ}16gT#q_g7$Nw2NCtNWUg9ba3@y`uj?hs=YK z!-WSP4B*OeAkM9SQybZ93SdUaN% z%r1Ero1h0*CvyC`4-pO91I=YnvWb&}wRw;>pcHe@$0rP*0pff6O)^WM-+{UA^#=_p z%zCEHOm{X4Y^D6ahYp_zeTC2g3qg%WcZdk9VrERqpG)$BuVOuC*be;y5zy1h7O_8F zU*g3~?jy+!tFFbFc8HSY3An2FNqk*J@{XW6$eK^P(zz2+JQ}Ye(asAMReWy+jd?o- z9CL$IK2~+t`eH6A<$7c(4UBv83hU}t3dk!;++W#recUDDG0@SzU-H(?;W^nX1A_2pB!YyQfn5O0HXU?Ai-S>I_tU>p?!?axT7Q+1T2d8-B0>dk= zrRzID{`i504IOO}4J73(0#1v~`c}eSd(hjAKUH*m26GH~!*0(!X`ZxvcAY$Yw`~u1 zW;UGtw;}D_Q`7(a;!b-j9}(gPUQ=xUqbGLUl`A_ubJy|A6HfsT!Sh>b#(d;MbgcVF z0X5UbE)}QIAa&+kO@34!1aJ9REt+c^(XH>w40t>e{ zh3II+i&XwjWr(OB8LJ*(-x*%1pN2kY#iBS3%$Ef6tJ>Ua$l}NmTvCW6*)@T)#WyY z9828`APGn6=Nt!_rxYeHGgJvmcmLfNbLCS@-=kIWA4ZftMMIT03z#zH1CU&n6b)#U zQx1_+ej{6{Fz7OG{RpS)!?7&W#KJwPD*e41+;Q@v9^=)S-2&rhbtvfCZ`GS_=W1bWz2=s20_!`IyN|gPI4@;0-YBtX}hG0IBo*&o0U+geHE` z2gW!h-zwy|oq$|twGjqfy33>T%(zSmo1%IxJM_M#7i+$2<>oO<*($v9=lVGL`0~0y z?gvBEZj{q^R4AL%s3Wkq#RXrc2OTi7YT`?jfgqAez~Y@KtT6%1+nV&1LV{dFi)5iV z(HA(+YGzW~rs$;86r(o?3qV-!I)l`13xEw};YXpM!+?Rc+fKK*V>u&Z^tG5h849da zSxPhh>b8=fH0bM*TpqRj`ZZ(gy>B!F>y>{U^qr}9(!5~V#I{}k?+-k=<_%$iDAr_X0evi?6a-Jf zEnDJNGaR+}I4MpiupgSDnCwot>j`~o{vc9&lZ;Tj`-;OJYL`ppG+vlS#F9F)rXmLx zHN0N*IYrC5jS9ZNpp=OUB(SdqwRET^-HuA`(-c~z6zUTJiWd?N4pWjDqnT`$Ng#dDD|AmF<#-JJctQd&sn);}W&I zzv=r=oQuJuMp<$el_|AfYrD76RjLZye-iY3p_{OBU3?*sA-@8XN(ajPj^H?(Bf z|I#jrSMSg8H0xLMw_#C0*zd0ug^#KD{n05xV% zh4?^mHLUeF*5_(5VC}=#T^D5B$;aSy(#=VmIupOV7PFAvfiL?tlXW=ElDLz#eSb8O z*3$x9-m>~^36XLP{I|V+)8r)G_i|r3wZ?j86oZ$^QwlYKOkAsPiRCJHt)@?n#S0LOQGw5I* z@#7#WfF09efr*EKY+#c4g*LT_z3U|dw%VT_WA7=Dj+X7q5VO3bFJb*pm1O2C(PVgcmfPDdVWJjDV$yc3k9cQV2 zC*fuL3;*gH45`{~5W5f2e?RhW*DW{FMYuDL2=cVG5XgEZ57Ip9deIOVNSH2BJHqTC zY(J=X3)~M5c`^=QNe;7bCk?2O{jA6l{l#}W<%@8?twju`8}-`=5y>e2IO4?ICtSV( ze>Ugt=lJr;ao495Uhimg3=<9?p(tvrNfPsfF~zPL79XU1rMi>U&e-!w=D4%lFBk4O*i5^B50bTGh1s{jlGe#mJtloXQ9tzlh z9Oo&^DcKZ~2@%Ys$H;dghbimrHFD4lLNtbSkv=B0)ZQ&9_QMA$a5G^TnQvw(8x~Z? z^bnl<3za&&a3PpiXLzjpb?)|*1r63r^E8lJEdB>z#0%2h=yvEhDCgXCBvFk6HdqzG zQmcM8rhrP*hWPoJG{ry^cCT_t=$9OoL`WVn&Be~C)< zKz0Gf-Z2&SIyOpnD}P_vI6bC z{fT-Y$Y$joZ&-9|fqq!wkkYe4b&){& zOwn3TMAwkARyJY@tP85P9@mxuBJ8gcrH!F>F(d#b+4WbN8JcXq5(e30WG7XW?6xGf zAD9MtZh=0njvC3B=ijGP2CTOSlRQdekmsCPP$`E(VY+Io-xeB{{}!!)-z2(Ku;`UJlj%!rejaKBvVx;GH#b;=OR6iM$YK~#T>A0hS1&02vT zh`zg~10N#fid;RcO2rLDJ9!QFOn%LLiT~k!&!^;d5k&(tkKHa;bMYIRwEUM+N3&Nu1SGg|B zgAIY|b3!=UGm|iMt5zip0cSNRbLT=BH+j)q$c{|(jSnA|043k7=O%flY5s4HiMIWd z#OCDG*z=HV8x|xqUC@#|GTWS6T1Euy4W)e3^o@O+@cH;3?Qg5c6IYRx*Z~x6g4WEN zpXqhuGOzW(n;xmQ>HUT%A>l0Z^VcWNa46haz0xM-2CWt}Se-1RAP)J>zedVI&(rl2~k(yz(i$+`BGc8!yh>{)Y* z{@1H){16*Ih7S4Z)@UAtx^NX5(`oIEA8ZEejjS0w^JIW2#8&xFB|JSFANJDNv+c=W z$2c?l0<>QBSI^avwM%=U7Pw<2%JsYhb>d5QjY0=*uq0i(=(i8FF;`v7L)Xj|rRBDJ z2hEK+A-!ipN1}C)T-5O|EbGvlri;fOwJgBh*IftuPxD^T_|oFFdyv5%wUNnA#OWac z+tlUbv21m?krvClMEIH!l@Xb0sYC8E-nU$nuoxb1ln7@WElW8s2Yk#&e$@<`eyE?& zTv(CJCve@9Ib_B@?=v!&Ey??FBdg-VN4ia(|Ff%tPJsaC07NI%f~YO#S5RLW(U<_s ziogpz*0;h8QBoEOd&muTPoTMtybNQ_NLD!De#y?X8`S~)Hx+$d7d!aGQyG*-8c35z zj1fg-DIWG43;w6})8GY|>Ft3JH8POjxE~0UU}4f(ZqudXV=(NSdH;MWnQEqJxeJUA z`}bvXj<6aQDZu^FThlvVzeUixrQ@|Xhy`T7K}Xf@(}9DZ%_2_2(swNVR+y3(4n7m@ zPv|3Ezxd(4O}d-+9^90rnPFa6LL6Ix5H)_os6PK8@e=MQWcpXS*pnqhzSwuKuT=Rw zg#r~nUHOr|wd2H=IiQf#E}tN(We990h;1Zo>)YeCk!3BofXbl?UTW#DZ)zv;dg-X^d znFMq4OLmsr{u}!O^E}Qf#L`{&>;>pk5 z?%P|+Fmc|_zr6A30eSQ$6>sdGtW4qTe#O16ZK(_n;H_RflYcV$dmKo;UpV+)L5sen zrS?NC@l#@j_JjE{w?xF=+XD2Ps?b;I1^BFjV*|6=p2dKYks4gCy?DiyQ+8oFSzm%g zJLdSy<4iQcC3^NPtH%`)jt&{o;!xH@X8c_;&J()jfjpl}7LTm(fw^csWE2}q-~kne zpUtZW`?Rl_X5TShds^^1_nlXfI>JF3%cA|D0dT75N;eR%&2Hw+CJCl?CT`$BJ-gl? zy#DQZ?vPT-q|^=&tw_D*fv@iddsV;|*1J%T9w0k8(!!Ieg-C_V9}XHs&R$TUs&XwV zVyUaQeXs?PvLK{sBP39U>}~(tWQr%Pz+wNdjf%?+#Nyg{lHj?@xYtBxAI(5^Ov#2Z z5KuslVFQt$9(&0vBkz^P8RYna^TXbk*|gY~-opnz9?Nliqy>tNuijJeuf#@D z#P(Zi{-j5Je8`o)zFBSKS+Xw}iJ}kBdt=h-b1S1Psvl%L-Vtx}b;H42{YKFIfT1X9V7uF0cz)bX_u(6k7o+LgZ+JyfPv-)qVq?G+(@Gqe$fRj-$Isgdt0($ki* z#+(AnR?>E*anFjf9BzB_7L$#B3|l_$H{HLGjJguu^r3_9=m-t}WW0R)yhSWJ^Y&B0A1UNNA9%^x;`zrNcNtP}`okeYvDTe%AtN9iM8!oFgN1 zOk=^FIUDo~J_{i{Ze<&nuW@^`X6z#mjh->6w+boVComV#56&3j%cv!$g$ox4Ua88^ z?Mh^-YuJ|0B%fnz8Th>#Sc)%1W~>{Xs0EgS>o=x2(!>&LPf7`K6Pw=kWqLr_AVyie z?}I1}!_7RpNRwRfMcHoDgW-7_XUN3)972O3U!nO)nv8}fo0u>Xao8lZZku9_>zfk0 z+F_F?A64NSs<@1kU6zz1E*h!HP^F6*-e`HX!MeTYb!0O*3jjvVo=swD0~=U!UQn9FT+wco`(e*rUU_=XL1wgBz;jX z!cULPArfE{<`fc8`*{)Ca^~8;Hq0vTj-TMD4@UAETXYU$eI=m}^K$vm&g`PmO&RePNoZSytkDB=$G$q|qG^`lKX z_<}Hh8muWqQ4qryXWnP3(zcvZZ1@^e!%3rT<8D0}vTU`l6^CNW)U1+kEXX3e*xR-5 zoPWVXD?x_+EzN=}C|f(w0py<#ITsW1HJ9ahX;MK3CEm%1t3W?4&MOg6&b@9mkdj$S z6)DC}bApV~A z1kFNC3fYsXr)TQBAvzO~O|J^)|AeGQs9uZz+>s33JRP{1_`7-Z%K9$LCsrvz>U4?Q z+fc;{Gf!ij*l=ku{A*(X*RLR0%UOrqX$xgevF5%wYJ=0A6zP*yWZaX-R8n@SX_M2v|}J-z9jtC4i^5b_)NcnZEhXu zqqr34ig21yMuy?u8nPAfc4jh)?d@BqHR|tGX5Kx%6nv8uQ?zP;KyJQiqA`W+3Y(;v z!L7-n8VrSRVQp}V8ZcUDtk6)L?V$4eF!@bq(n)Rbw2n^2Aif|K5F_p44kMpC|1>|+ zL)m=%b!P=<(2K4-olpJ&yUdm7l3JvB7xD2b^CjKJ#Z8Z;o`A5F%h;Ns4ew#CHnuDr zE-XG8@Hh%_vHH5)J6=2N*C+h+t0~)DUvI59_!wH?@DE56zIeJ_R)vdZoa|%(f`}60NB3&}%)o;%NSy36ife_#X3$idmPEtKOX9i;E$e$^#@5BI%IaSguZNe8$l zmNd-D(UuW4B_j%OfW>CxsgLB6cNAjdjn}zJI+*l6JWflw>Arc(pM@_sU{5Vz3xt&x zAZrMMu{bHcu}l+O-v2X{CfY1!;Jj0_;tp?Oq}_pFb+>tRB&7*iLMN0nCv7~z-@e;y z_9vZZqQdy{+D)sP8KkOq;Ie)`xhI0I)h_&pYVwV6aK@5 zw@@z4mY)!sx0;a5Z+p~!z;=F)P&_v7M;#FfnQ;KSy`{{LAv{GCo>)MXwI*<)AkWSD zhjF{f;%UeDw>-J}`Tcu1=l^imy-u6mXMrj&@+VJv!?tRu0fxvX*SK@=rlJ*XDcEEH z{*SniuJ`Q{;wl2oK@*Hk)Jpj;Z)4Z>aZe=Reiz#+q`{%UoVxVhg|&x{h%!gRK=CGE zf<6$0A)zjGHdDcR+6GZS&7KHRKUM0i!GzKvi-a^8;`#ArAE6}PGX9r}Sp3cgl})pw7uuJ}N; z(S1W7pFA+_DwG`Gl5Jxx(L78Lv=|0iGr9$$kz}Uv+z85l-}cc}O34%#lK0-&jy&fD zqF!}f2Ko_D+!&ZvZ}?v#Qf%#Z{Yvj8Kz-i*X(&>N%X9AZ5q`pJU04}B-E1-Gx5EH9 zAi;{_CBH3BtEEjA)p|=A-V^ir&aFw^3X>=irv9W>P?1a?`7=U2kux$b0&Fh8sLkU$ zY{gX7z$8T+woTu+S8xt>kSdoR<1> z=w_>UDxiI(z^;!8;qx{t1*_E$eJO|T$Nub9EP`MX3gUZ`^mK$r%RxLWjZ#5$_Ynmh= z>SFIIoe1A7))(Xq9QZq91IiU`y6G}3ZxicnE<5E(*n>&JI; zL-3_Zwo1rfZ>|i>?`0<%BBeA)8M2HLA{fz#7i>K-BN(nit9;5OFAl+jb*8hu$fbi& zu>X|bU~sG?T#Ga&-&5w7v$xYrEuTR<60tD4-;X~pM-4UCca_bjF8AHeA9H@^X#3$0 z>`bXaS`4X=p~gu1(Yw+Ze>$nT-6#se*x%s=R`SG}0PicOg7_|B(9oj~&$!Ac*keRH zeoCpObUSzGoP8;zj@AfVrWKKxqxjWcn`9--%Sb62YMe#Rw?{QE!ymqX^z^WiD#QY| zJVH$+9+xokGN%d0RkL5L2Z%8CtRb~10PKhpAf)8U=kcQ)A>Zd1i#}^-}Ia1ejZWCbn5)a6gk}q8b0{j0Adjsox zyD+1wG2FKbL5^}ve)viV^jxV7KFk&nv0>G*Bm#%1c{gj! z-U3fa4zGqia-kU7f*e*Z`=(QZx#6X#-)FLJY=y?kg{mkqqXXsY&k3JDW0Jj2D*pOC zYIxrnxF-1?zs5!;&3*WC(xqu6#wuZAQ_m=bTikwo(uP*NdhS^N=STXI(}6Aa z+~`XuM%WBP;UI-wO3jY3BN*8Vl6ZmH=EDE^kstKnOe-bZ!0x4lp>nk)f<^|Y3KpSU zRVJDb6_!R4>MfadG;`$+IFKNYw>KJ;S^88>BS%?+)#>Bt5#W%70}i-q8>A!~BT4@m zkOS%k)mXm;KGFbY*Rc0Z-|IQ_(=3-(pS$_;OBEGi_z=~xY63Z8_TDDFj4(qwhh2qK zv3Yu&thF!?@ssOpL9KUrS88ofxmvV2pcGL-#I#ROVsw%(m`9ptNlBMIaL-yU%T_Q8 ze`=*IKts~e{*Ya^g#mRz%3UAR7t&lCQzQ9UnS$AOHc(17;ue0LX%A(J{7< zwTz%z(!+TkjY7Sj5tGFQo0GWtm#({NzwqwS=Jb$c!F^Jx-zddu`oq~Pj)0elnM$Ni!;$*ilgiz&K?;5gF+|^$WPwqz^a?Fq( zb~@rF8TrYSGI~`>6PXZJe_22dC6XC^tbXJcDeOc_2TTQNta{%xE z<2SXs^OM`|WuV2U=?{n3{FRcB&_kvz&X`Emv0!~80i_Jz&B9kju`~wZy90=Ml)3_4 zlTYCu743;e?+V=hMGEXorE$>%0bY^gA~>Og(ek=h2Dtg5u=qqwJNMU5&H}XggBiC> z<$Rl|(XaGxC%2n;VCi4{Y>nLW8iIGqUIo`qnvax6?>8p!+p}IfIdM(!k(xmo zTwnr_!&!ORfg0SF+)qF7stCl}{v9A@XR_YV7eRi35F_3FM;6nwD7Q^z!bm5KNu%00 zp1InGigK+BJ~w%~jJE0I5@GEc zKvq8scdK@?yh)_>3IhSVgv@=bBsU~QgVtSO)lw$I>4enM7TsP9SlY7O9vRJ(B{|>q z;7L#OI|bjL=Sy(2E)6Tj1G4>XtTs=}#p@k- zA|Dccm?d7r|HVXN92d7}kXJ;m1VYCg$d#6&!^}rh=FIn|C6;WG4BB0D`c6Gd*M1*) zd<*!O%vP8J&MKu(9nl6H|6_ zC?*}pf0ept-7lCZ`$3;2=(dne)=}10-RA10ozh%i!WK-XKkS<0Aa$V1rj9hSGcO-B(aSdo;KV|MT zl-z|^Y1n*VdTT%<1FaPYMr(!@dTSi3Rpy7c{;vQM+LE76XA$Fzv8OmU%|LQ_v;_q} z0G9rKD$d7tEoMd{^E2S9Eu@)r5!ZyvYVyzG@x+BczO|jIIcpCqi3{|8anHY2{OhAN zZNL!^GB;qws_iip21(3`_5DFyw@Ju~+UF3Ra1_&xf`7c4wCLLAS~l|Kte0->`4Faz zA{0qf=6-*r(afz)?fnt~%8OGRqG@~~3-?rthreY2clm2E4~6c}C|-JN|jMknCo=7QW7@4{p*|roO!ULXk;>XxLSdqH$XH(!R zpJH*J5X+h{=avvG4&snDGby&dvsbBGY$rEx!QwUBvVX`h_a)d(cusyf@afLbM$v8g zGxuZ~%_lKO_O-i8#1>3%prgK4TEw0t8agCd%G?l}6TFfo#u|Zq(v2S!gIYgbqgaxE zF&gxZA_}awFt_(0Lk~GuI}X}xPPDWE!woeZYc4+(jt$Iqb&6Tiu`^i`54L`1jr7JFPi~HF(6e&`l`p)0FvfU3$ z`mm#yU346d5hfe`8jKL({GI_uTqkyKr}{K<=>`+R5s#(He&cIj$EngWs@sEjjkX~2L(zWWozIC z5oZp405Rh6NkA-UetD74AERquC`_D@eJJAYs6dZILEaiM*Hrf)X_B1Ix!~yR2^arV zY>Ng1x{P|lUdM{eiUHabo z(N3|4S4rL1kN6a&TB5!Ja45l9m`fZ;0216p4-pe`y_4brA0-er{7CkCePohtuQpXG z`j0NK&%^pHA`P}R?Z%~keq5ve9~K;Qgb!S++YB$SO{lm4y(RAxkCL~zz;6@r}NL-h=zrP4$q|v zwk18!lf9JyG|*C~fVeo3`rFrc2F2As25_CeM6_Hy`zi>UO>C@yI_n>lyh)re^b*cF z{l3Ayc)8phFpW;44^nX6Q{+3!o>-G1&LPmWx1^MUX*;wz%I}^dG}o$ z&^&cd_S0sfFX#d3p-+?SXc-HkiuO$s;(F6zO%%Mljjvm3<*t=z?YeBH_Ri~gn{ckd zm;B^L<*>vnEKp*KywXNx<~@&yeUghJ^~b~koTs@~(Wi1VUd~GuY;!6blwTgrdQLa` zU_SU8@Z&=m8xbZ2U}M_+vZC-K=6UWXj>C8MbnSphTEIEP8-qeKYk6Ax!YrTez6*<+ zUgnBWckLe0kOYL8U`l{@Br-U0KVlH9Ee?`p0FNy{{I9vC2tDs%p0*sCBJ%8VdFpbn zu>?+=5$>ObR5UeX`{&VvY-`QhVX>Q0))9n(RY^|&4l$@dAc~rlc--rb`d=;em;+j` zn|$iOqbrgxSI7LI!zTTooHq2DuT|e|Hn}F=P?E=zmbI$w?_~0dUPV2vbZzyt=FDOr z`7BIVVhY64M!Ho_0d{7z*`&JhO7|&7iLOJV$25HZSc5dG=yOkwwDsD=4ls z2m#|B-QhuGdES+tCdD2WLr!ySPaZVB%ua?bc+oOI^q{*gtw{DdoYNidAY1l{HuTp^ zoA1wSLmqzFMxXxKJ?KMyy>86~{w-{yx2WujXnEQ`y7|pLhYUT&#{~hMLVY*W|3RCU zXQQ6vZgd1bsCah1U260&?hio%=+}j=bxDKd=RIX73K7;r`urZdV$#%qUb`bO_e#O$ z*l*A@`?;w0;l>|~+P{048DpCVDS**o-o)$C&u9ySsv=Si=sCNz-MX(Mc_f*}Fbh1l zNgcBZ4P<{yg#YPG67r~~BHuYxbtXfi&<20_y)XsQ^wCh9&`eDS{Mp&zCZ|2QEi}04 zF^)FP5&?UW&6d`pj+^UgcqBw~&(5mCPA)AkRnb(I-%8qREBE_jz-?G+X3T$&NTB+5 zQ!S9``x}dZ4--hK7oOiCnMI_HzB=}K<`ZE`i1bYHfS9k{HqkWaJ~w}yqTrT)*i8F} zwScbBxi<_E>h$BxLZAI{*@LFwz|~E@5E2En6KYb3=@-$T&`s$w3VtU$Dh-N9eobrt zy{?-dvX+n|?Xu{cly4FxhdrOw0ba4QUbFm$##mkux;ttvTV(-%CJ+3W06d)!+aE51 zYwZIbK}WCZ*@(=5LMj$kBKMZAMksjZhQM10fay>$BP2m%r(oG0Z*#&DWAgjTm&dp} z!>do78#Kz1yt`3EB;p^{tyT2KZKR*Sk&8tRpqIL7h0*s^Ak{|Y=2H4QC+!nbO*dEEU7MHW{ao^S*R)5Gol6aXEaV}4X3*iT4%i)(-V zS$Y67><0tN@^*T9(j@Tg^rPMq_-CsBzEgQJf`%1aWP#}@r_JEGdiBPEku`kt=-p&O zUA-K|iUpBw)lv&l&;tqI*0}(zdV6UPuw?(@GV}%}l2_~fJp}!es@rF>h}r+m08O>U z68=!byd7tpep$6lR)wp*FQo*JDfnY~v*)mO4{unvIV!<=MiVm*77|mxgDqZ`Ss?fC z(%{>Cn?TvNyO&lf2ny{)k9cH3__x^m*(juE5dTySA%(qzsrX(dp!r*$qKHYBmBAOR zBXBmalhhm+ALA=s8?Gb{oPaS^!8#Q1IHWq)u_IB4>H`*^&-dX!C`EsIiXu>Fz66H^ z=3tyCGPI4ikh{IM^Y|?rMU*O{31^UcHG}Ocn~Mw2b4;!RBd-{>7UYNJ2BUG76-x-V ze|5M`MAgdROqBhwp_Gyx;rzCKZU5onbx3ed7VW>J$S6Nofgbue_QNwbDZaMhUnIe( z!uFfR#`&~APgBSJ*2Xe|YyYsH1y3BqheZJbgk|td2T3fqXZ6bqugEEQE4;pW?!w6cLB_H*X(9bp9gZpRbKRBWnwxD*75uS z@aF#tk!DPdLXp>qRStK0PZC3T zI(gqYvF8m)kq1K$4qC7fIzAY<`gno+np>-%_@6TBK|Ix8eF(Ny-?(^@{=-o!bfx zA5+iwn9r|@Ewe#Ms0AoZ+ZS9k+W+lB8!h5z_dlFpik#=6C!M5s%g9f2O3@=FaVnJZ z;d7^I9i>$vgnh!@5hrN07U;epM(M{Zc2$ahFOzhkb;n*!To$MXw_su1k(oJDu6Y%vUg&x6zL#=%xy!rh{ZffstJF$4=-^o7_ zt}l&yyhmu0wAsqDUQ(J75_&+{%;Z#?LOTr_)j=(WZM_*Z#e4KmpEPDqmvN0+KfVxj zDBSRRos=Z?+PgQf2Gb72oqkzgmu3VNW&k#&C`D~4hj%=L?j-#ioVH=2(;8jX@7WRV(G;K~803`U!5VI!CDpnl(; zQNDbVfi7A4n5JL5_(c}guWmF}_c{<3CQwPPBdC{eyO)}nm`?}RCBYVShr^o?6Zuh> zTy=L>ES7s!*z8b!76R9^TN_EFUs@dH$T@`u1 zQfJh%yvXNv@_prT3@tIfJV=wN-3-i#O;ZkQNczg~V`vZ?poOVyT z@B|$I9YlFtv}tSbE@K3>wt7qZbFI9hD_r0V)9nAEBFJHhaiDR&C^+ z#1Co!VZha`dGN02i-NuRk)U_k|A8M-vI>xP&I&5`-(IuRGO?Bn%)ierR8EqLojdzh z*XV$uE6X{f6ym&z%#ga4t_!LVsSA4Bt*`n-KU%_!)0-~g`P|vKtNLG7thBI{YYq|| zFfNgi1Ky$@$M|x(vV-Ssyht?kpt#fS2a{*&l_r_$-o2Xo)2`+C0b{O*9(lNg)*z$I z(9Qw~V@_`La#&4YfuzkAi93Q0quTUL`EKIic={Hhog;9jtHr7N_GGBt%QlO{cAD)R z!SO@R)i)Kf4~sI>dBmaDJ{u&&-fVLlL0}UzWTRve@1712DGj}TTa6>cL4R>s;HP{= zN`9JeI&(e%moTZz-+*{f6Hu!%CEPi*x;UfbMIIpDr*I{E)#3|^BgUq}&HFwe^ufpE z1hL|I6-_&D%j9jQ&!#S=%-t=4GPlSt&BUeLI5j&9z-^Pf$Y3g@oG-%=wXl}1F0coS z5ir#iw6BB2kmmW-IqhG5*xCL}F=GwM<%YeoytK5ntsv}b8VW};{JiETcdZhnNG2Cg zaLs2UYmHaul-M6igY>vYbietG(cHDVj8L3Ax3)?7}s2<8efC(}XKwA+YY zY5yrwKbRM*WAcL@U+3jm5L14oAlT#u61eG*A3oq~Z^RE(OcX>)fL;3si^*9xrLjIe$ne%Qt@F^FAe=lCu!_9PY#mWJC}A7)n+vHP{326XQ1HY~6&m`avZEj5ToawpCN&jh5VXTq8g3HVRJ~b4CTZSyg*%NArf;@Q3FW zwd)h~%(vfNE$dedN-lk3oOvh(h$I&#f>oIy^pcQweR-f4%xz=AgrO5G^hRQIncxJq<+9iGV#xvw|!;mSdXq1Ngs-g4MxY;)jlxu6i`3jzb~%Ux_~3U zFPfY?6r3-ZlSFCYoFEXE_L#)yg~qT@3@U~Ac!qkd=%q7I?Im$!A|p`9@(Q+v7a2^#YJ9>(|5L4)y3 zsK?k1vaOq+8h-wA_p}4M{95Nt=%saS1lC`K$U6HOpt||>CGyLAyx+(J?WbfI)l5L; zD9M5v(_!`m7JzP+DlxIRW+RiWw?t0JPg3b(!Zn_rmbslHVmp_wCtQkjzkV|XRx5?p zynJ}j)>LN(1$VT-IemaDg(*szdM7>uQtk|(13uU7k3EVpvcAK+h4j|V8})2v zVWFcHY^R0@=_XH~uwB-{IPSV|*dAo6J8z7~;9avfSUQ|}q<)AVK`Z_`Kbvxe!P=G- zRJS233u-PeFE{v&i?r#%?&_D=eF87kGB@u>P$%?V^z-ZdQ@B zjHF4XYnUu4J61|~wB$oV=q?YWqW~Zni>}}~#gF$ts~^QyrN7y!%C$%3ge%6|*whcZ zx-NTltAPFeS#xtKVWX1g)b^)man+G`=)$q|<&V?@K3m^-*X|UmFLMaP5oK1B$IsW3 z7JmQtH}x`CAAbz;H(+Z~9@8EJ+r$V9wEna(6B`ViDH9k9`Qs64v{I$8u76u1O$bfmaAc5@HRNM02*m3qK+Z#!jUj-+ph^d3946*9#npeMS zaGiE#Bw0EP-kEo$9tcI#gPe)-00n2h9#q(8!$B=>tKTE#&eXy{?&&|L|J{`JM0_bB zIli8t-D4QhhPJ#zc=LgF^jdPJJsXej%#Nd9ZeEl8xm)l{Cpm3>gL{p>Co_iDB*PZm zLE3D}Z+97Rc|Gl?fSEWe0gUe98%`wUNmg=52@7QgEIZ^3jLieKl4XG-N62pED-8yV z{?lo9pS{4F5`D|-@yY^qQ$Of{CjcW)ptm5 z2h=ll&P~vQmle{26nl(}XUkf1^z6R**gh}_O~srrW6t;`fhIh`Y}YQ^`#l=(cELro zQ~rj#E+%K;Y<8A0c_Ynh^T(WD#9iwi>-DV;92EQgem*PfW^yZB|xYr-!!>*_p zXbpvBBAz%XBiHfVa&TS%Snv-Py08x-#kwVEqM0C{-BIBZ00TINUQ4jHkt+K6JPAqX zZ^rXIpJcr4`V{)jO@UB5UQ}a~SP9XTghJocwtOKHW^zA?1%`-KSwmd>*Cgq{(ZjOiJCSO8UISl?a(#~eG$wd#$0}@eKfA1-eg@l zg+6(aC7Mz@$D|-Yey&@~S5JX)N=Hg_IDC)Rqrxi_gj^|6PgKG8>9FsLt61O?_|HOy zNFsbP?->JI2{Bg9{Axls>4*#yS*Rt#BCidfyxBXO;o(N6BSpEjs;=b>t0O{XF~ayv zy6d`-v`V*Tu9$^uG;pp)4x}KH!J{pAEcHb}pY!L}d4Rtj(`4r&!$%}jt@{L-zAsOx z6=dQcyoDnLNPHYQfczt!aV$p`?u+D3^i&gEZrm>3x$e{gn_)wTbMZHj!LP88!3Xj$ z7`WoPR=qy!el-Vk8=4Fj4ln94MG^H&H4y@UTM=qwAghfek5)FEt3pJfTQLY@M{~wv z%DgG&qx(3`hbS^bg_(q!?rdx57KIxUq$<|8Ap$=1IkXDo@W1-9N=zCa)>E8$0L@yz zad~<$0?-f(3j)WcD67AFL0f#1O6aladUh#F(Dm^_nHxgsHHLjOehgy2a-<0kh$W?5 z0FtHV7+L`m{}ag*BFx#|-r2Ly9kK%m73=fmO#G+5 zCnX=kT7II!G>(~xjCtT#kaBNYWadIAo2No0@4-OnyhSij z>sBC_06#1n+UyeH#0MSuNwgYD7NJiuC2aR$zQZlDR4?U8D{@z#QS13hENCzd#SCJeiMIk8>JeK_rD zSsH5$xOqV!3kvGf9}8#Sw1)-gAqFtF>|w)Fqz5h*QIQ!tBVoO?WwD{YqzIqUU&t1X;&=2art+rx)&vCE2=JJ!zmpYJKF>L>Y#U z1_Ri8egG40%mt~YFo7kFNTyCE1rfczd@Mq<_Xph9UdN$+l&|vM`NX4FMQ!X$Q{0!$ zqj{w?m{lB^5mNWk&P=dSqGm;j1H~wfRokZ3#F!Hg$@~yOD*Z5_0&MpFIAUJ05_zTF zN}$HbCyLb{C{^$PG;0Vy4mzkcbDtbd5giCd@mK-7gujk|??I?wxl#GTmG-xN136HO zyL))A6p)}>1u32cjrjTG#!s?xHh^Z8=IyAl6W==bLZuT%O*hob9ZX2^_pz_tjWXX#qw`a2m>f zsCu3(K`x(1qp8t0-g}DHPP!G#M${~Vd|>;{7u`y6^AOWn6=pzMC<6@OKVr}y=f>ed zxx66Xe+T4rG##^_OJk+W6_~r6&_IZ&IZ@MIGmVfrF@cr;KaS4B5z7C8=X&Yk;w-sAQD zddF8#Ac9svaRQyO93g^qe=y?kYTvn*7~b_StmWKt>1OzC!l}n;T&H>X^V1D`eiizV z>I*biIQTK~V@~JLI+QkD1GiD6PnoqCJgtFYAdXb~8~2Ja@MByDxc?W#i(?9Zp>4M2 zS0Wnd%YCuhM;Cv`yV3TXQQIrVS+*F!(7|-eqTs^0g2>~MT=J8ex$%4CHunR-fwy(Y zONsVAw&qTg<2fdmn}tQcux+U^uk0Z+{avTuO6_&5=!lJa#Y+yulgdh(vAkn{|Beej zgxzDstYg;Bn5Mpa*MqW4;vBxSdIpinVTto~pXTCPB{Lm`KohZF?DoBrxhSXqx|N21 z7ied4!fk>hfs&90_G+(;o|l_c8R_g>MLNie1oV*={`A(Y1Hp@rnC^uLi67TNfXaON z6*749(&TSA;E(4|RJ2gqDMT8xq<|ZtXX$_h8$wnnU;Zh$)d|nEpHgkh)Jkh6x;ABq zx+!R(wbOlfWI!$YM`PMUA8yzH?gcFnDSwCOS`<7~@Qu5a4<(pNOqaFq)TGV8>CSDU z1;csYlTWH&Wq!0wx>q24c+?axm1en$ZA--7dAoSu>qtym)M6OP1_ z1@8Gim}lV_aAn+3R^ZdHOMQ&}y_K^2ppKaRhc3!)^B`=knxT9F8@8X2x6;?FMj744 z!erc9pOnLu0A-?TRk~5>jo^=EZiTQR?w6{&nHSM@uv>FIWuV3@;Y}glxUP#Nh-%AY zm{MQ11AI4?l{hh^$~a-AVfG{ci5QTvY$ihycnBr-$={1ZEW7g*9y|nRhahL*{i*Pc z5Qn|)Tg6!IxzKOQ)b6=2-((2F!f$iii(zvnq#%-IkN=Z1<(EEb#7|S`+fF(s_7hyG#DFNNi75i8b~TXJK=Gk7oTGQJ6|#`01-^TQ|1SJdu~_}yI4jePm# z2wHsqttIC)vXUh$Tn*~7n-4!R5yolK)Io^YYi*3Ievn_s!?Xn#TWOve(;Ztx&iEFd z<5dZJjyRFtUNMZbI>io`JYGp|uEF{p$b!s!5d2m2MY&JU&&{dux-mB&0^zSh1i>=xoc-syAu@(>n0=F-s!ug3u%8$`ws&4~ZJkVgM|sH!{x9E~uh| zt=PJ$z)eagC3M7gpz6<>hradaBAyb(R9-tS<>UHkEvy`nnAb{@rZRYmbv$zCopTfk zRKo%Z?l;$SDZ!%!xQGb-gA0R@nH(7Bg3`GrSAapXn#RtlI*08MxN3TN;jm~qt*hnaQigf{pDoQZ=(($%)p&jzf zNE$Y_eQIWMO6h3bpq<7L$1_N$hcxwAp+fyQdHJBq)2;s&%23S(5m@cjweHIdy&@`1 z8zm7na#a!7r!E*lh&E2!gz>(m)>wgbp!QD+6*2fVWV=C43DC_uvl=Ff@OHYr^Flu1 ztTSGaCIoBp6cHjTwkDnOGH$%2sNn)i#r^ca^ScgOm*k#qAGjeEi-d1$%sg#8f1zvk ztKLQ6J3tHtTKZQC^Ip*UkLz{+LOXj&E=~|~q46Qap>-LC?JLW`))ya$g&X^%_lHdL ziyL+=mo6XHT6{R0w`3vs6HsaraGs_+P7 z^Fa&DK%I0ecRZI zMNS5ew1?P;W-%PBi~t4oxKe%y~e33da&Qq9wcu z5ytax$wLFUD_YGDfosMSaV3A!82&BE0CkQ)xNt(0(huDOXUW%xth_Rj4ZwfbW`_YA{B^_&{eq& zWA;ks$kJ+t)SE#*K>0(P4xNk)f3r8pM_bl}`EBO#0$?bEVbgCct+4s6Csx}%=)-cSe)BXAH(Tg%G$14aH24p7wb|>roZIj?sI{Q_l@nm!`2)>`0ZONBx=~>g87+-IsTS+RnXV zwxWA*gG6Ih`+Ecp#-tZVj*EB6f@%KY7NW!T~?rNKDOi)lnoy$po78TN#~ve1}vSNmXw{eklr z3f1!Bqs;&&RR~t>IES=G4kYakbyht=10MC1ojRc>z=n%ap7gqkYcb%&&6xp%FZbKF zZypVuJ=}87sJo_cvW1KP3jdVRgt55(f~#!VY$7Z}oJUWPTZ#AZRTMtvZTY&5KCCZk3j>O6HrfQ6$%T$lXR0lLGLNPxIf zl@!P`8Eyn3-?9+5BxQwlD%YI06G35Dx@mtvqZ7zQ0KeDfW9r@rHwvKssOG%Xjj(q* zrEOrLKeeUVC}7%1XNx5(}A8VZXb6OwtDVd-n+)4omHbJ2%Ik05WK zvgljoo}p+EOh_X+Jq~f$e-SIRlnrsnj6)}&5ttbpJtBpRa)*Q}%qtcmul@9ZTJ^wt zYWK5Kryc>LbF>&amEQpUNocT}>*MWiCQq>!9J(b^uuW~Va@3pJV~HJHW@eE<(B%9k z!`ZkS^fl9F;7idf01hevsMmW?!*+culdd5Z!sNl~;{()Wj-&ft#$0g>51;hm2Ae0o z&*RgURNwQc!ciaAOPG#+>k^|8wIMpHAkVq`yDQx}3r^udd9}f@O8@0#IEdkdI@{T_ zLfuP8D?xQd5@5BZxxGU&6A89$O=qykf+ivGr&mbKFW+svO{hCwNrf=Jgit-O5XM?C zKM7_^oTohmcRO+@0-E?~3p?`F7oRPQ?Zq9rQ+gg+-6=3ZUp+3F${l{aOsQeH^1CZ| z=Q+DPdR+c68*ulH?cK<9KPSTB^)ir8i1oFWD(9jSZScomXHk{k3wLUlu(%3CG>Wuh zr*qnQe(u<%=^x>n%IfHTuRw!3XY*{mERz`c)({adjHYgv0!U9}HuKH;1LhdC)nT8% zSSi8X0CjLh`*HgiOQvII%UMzgax<>e7#YwlOA{VtwNwVrBhlL8gqQpkPU;gw^`nqS zu7-$y%M1i?$N~=uzyFo>y1;*KpAnz54Q?d`$4SoX2jT>XuBog*WycQc5j`MEbc5P+ z#pz^F=f<$N%Q8RfZ8J3NcYn#EprVK9Cern5eE)Q2T!yqohwvzWq66FfpB$84MI)g- zaOR(OR|>K1YaXOjkHB|bF9p=qFk&nwl(mDgfpy)-01A$+Tfsp;h^q6OJ!J^9hnu=U z8m%h}MYjA}Izj;mmU@1ut6;7Od` zk8T?5sTM{T)E)ZB0A}#Em|@s*Pgja*T#Nu4Say|I@eopx7vB~^PNC}HDEC5g2@63| zuvJ&VqJTGRAD-1*7Glx@u$nM!%hztc;?3IRaRVwaEKh-{*!*=7f-`I>2iMUpK1Xpl zWtkt2(Usf3T)CyyeD%ZLsb>9g+mLM`W4t6rE68dn0G!rCteVjbYB|0;e!v)fLPLVHN8K`rYSCJ)$Bi^wZnLTPMQn1=}&)OEsy}Lmb zs@^c0L#j0=-oD8J6#lin-em*iU>0%K`(PIOiWw9W&pOCtKtLHW2e4dWha!t8EJY7jf%h^%Rb3I?5)1rEfxo;7r!VDv z;2t%$N5v-OT2ua(RW+szJj7D|{0?%zydFSWN1UA9Ho;d~Bp2Z}Zwuv+bb=)cFubJ< zFrl~4Zmg_z2grK9p8vq|eeF8sZ)q71X@R<(iN)?21A!eQ$>XsaV~iT-pW>Qb2%8W# z*Z^bYwdV7g&$zHvT+fyiPv>DT(Mh{dIyyx6D|%h%vtl}4m3ziaA8(*T7#Yb|W`Q5V zXI`F^Da1WTwE|=}U%V_6>%hiY;w68undu$^T`Ad+-IR&IWg}xyKy(JL#`Obd7MJ_; zjqUrR!`{qAf*`h%#wOjB7tVY;OjEVd#PF7%4E8q88YjyY+V=PNM-$ZW&snO>+xvl> z<6ZS&>$rHJ07ZK1>4pfo9)HMfLQ`q~hLaCj$_(x7aQHO#Q;TV&+`z4>WI4uK0Q9(f z)P9^+^y7^!Q8o!z@4q* zwDG>At^n9T&{Z}XK@mE;>O@5w#*c2Er@}2%TIRpExmMo6^nZ&FvJu`pO81KIDU+4K zh(WxcmzXh-WtHUU8oZ6Es`IK>f#^+970G?tPoZwtTEcP}==-!LT(omw)niHL49Ag7 z#zwK}Q)g&7YZ}!0lgRN3qp#{6WVH$j9D-x%gv>GNb_y)i8(Q9^oQzMUe9}{?w?= zL+I}&?rn?JA$tifgz6Y|#I-5a3|1n{Z3OM_jLN%u-M8+vlsXR%<4q!m$QtfvB5JIXY*eo`izE!c^ z-oX`zKfsWtGKS|Np}whxXPXgE4CoOI1%Sg=8N$!w;m@0liGf@M=Px3rH8F=pzfLtp zaXcYt`WYF{0=71#(^@jnc7WdM-D3=l@0MV5V&*&kjjGGA!m_xEe)0kDs^Al}19snj zUk(!_WTxhJs~P=Z1?MR^KarVxN1Z`gK7a0A(RDu01_(&3y7C3~@Z}ySZE0V;61?eq z$At3dTT|o@lrRIPTBji-0!x3g-ReN(7i-dnppk40rW(Qtt+1U?ZFr2C08!UO=}&jTk#&>+ zbvA5`r9qAv_p6+r|I&*>gG>J3B93w0wnz3if1Um~zzD5Nq5LFz<{$VNemcVm-t+=8 z2jr<0&JVatzPOtZc3WgqI5l+Ct%&QclU2FIlX`%I-!&I#IEOqjuRmy&ZxL*MJNWC^ zgEDXB?!4U+K`A1Qe%vXUb}aja2G69VM&)b45Xdr617` zR_mE@LW4h}2fDY^dut;|@hCgsrkBHxo3kc$vyvZEbWqF`uOW}lkXt4QCTK8igxG^I z7oZrGUO{M(2N1NEUKm0$SpBDaFncUK`ki9^kMhXXHDj5$3()pA$+SPXsqs#UL1a6V z8VjAI&n|*9`!R<7neNW>KWCu>d3_2U+9I0j`L|~V4442$uov_9gOU^1fT~XQmjXCf z{!J_iJ6}?G+WK>Ic|whvq7_>!*FIVJdy_#F)j9^u7)X}pRK!>?6Ju_Yi@JnNVOC)4 zmC%AM#h9}mDZkL6_!Ogf&!5!wl~9%6w1F!?;V5+>4UlH}V@8LD6aMb7Xe`j-1k*+U zVA8ycvUuS`?T}_RzCahB>68Tx$tT>rj6Ay)U_j9@!ocG<)hY_Res-4}?Jz}bucpwC ziLhnG#}wZPWX`U=7sc$PQ-3U7A^vN%E()HNHwEkcHyq@>PrC∓t$dRJGIadE?vc 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 Kx8Vjl{{H|h@<;Lj diff --git a/editor/src-tauri/icons/icon.ico b/editor/src-tauri/icons/icon.ico deleted file mode 100644 index b3636e4b22ba65db9061cd60a77b02c92022dfd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86642 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 AKmY&$ diff --git a/editor/src-tauri/icons/icon.png b/editor/src-tauri/icons/icon.png deleted file mode 100644 index e1cd2619e0b5ec089cbba5ec7b03ddf2b1dfceb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14183 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

5l#v3A#xI3*z~1~fvo9Q(N^(==!|_FZ z*duZ=+M1~)8E|otX8KNZlr?qels#x_1Xq@9IIw~@9uAREJVH)Xw^}UclF6327}E42 zT)E&?U%TK?(+K7%R!`H5oX0i)4Qn5??Iw3p5J~6_u+aWehY{DSn}3V2p$bgjnAu?o)v@iC254fXeMv50$9YrpU`N?u@QIWs)T?SP|fa}(|9 zqAX+!7`cx=4)cCBg5h~pu(?@9`)aCr#oyz$ld=#RFxYCNZCZls@4v2~*e-t6PEVvV z&bbK3b3wt(Coc!ufAbXXC<**#HQ%J9k`New6iG<5RjtO4XVO?dCvwxD{kJ#tfQr(X zg^NTwF-FwAeS_{V4bfel8l`~NbfrTR2s!G>WduFWxH(t~aK4q=6rEE^$+Uox>gJO2 z{L<;6Q6nHa5#ZEM>H58not!)z(6*_=^~8}jWf*IG$AUKVWOZ4?)GfF z+BM#*wKKmLFD7E~W3U!$IVm$k_k1f&Kz6WV8@55P?r~bcg-Za-!rvW?ns&)KOGT2~ zlkAyqhQj=P$Eg3w#K~}zH@J5bo-BfHjInKSz$@?+Z)NPD4pHj^_Qxmi`UqoTy=`sV zLVxrXGuBr=QRm|}wg75yetQQK4fY3#P_~J}zEfPnb2C4Wo!E(d*(cA;b?7$g2in<( zPn)ghX}nzJPmb6(3Dpeg_GW~Hc}Lt=lgsSZz z!5QXyz7KaR;D`3Ee}d`af{H>WWZ|Io1QI3~4Ll_`g1(cRnhLK73Ro)7zPCd={1W2x zRp%Xlvv4>!<2@}$hz|!V{T}_eHx2xkLl^hQoZTCnsjCl|W_@5Fx2(+j0ogy&Y+;L- z<)G$*CiN7hOm^s!{U>1F7U=iNk{+u~dAC!eDz%=|glFW0jEZU1&o(G_c#wTxUjnG} z#cg3>jEpUi#Mlq@t?Msg_#geK^Lx@DyHWf7=AS5vVyM7YOjvUVCfcpVR<(+5!H?9- zySI6s>o3m&*zr||=wcPGyBkQV`EWJl@bH8qobjOp+sXL*)=&yX)8aAbf~tGv?a2SN zu^Ddo-z?DWk9h9Yz#5p^NU#x~wYSd?H@w@!2Gb4G)6-utEMV~~M85Br5ff(v5O1|T z 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 -> Option { - state.runtime.lock().unwrap().next_event() -} - -#[tauri::command] -fn get_event_list( - state: State<'_, EditorState>, -) -> HashMap> { - state.parser.lock().unwrap().events.clone() -} - -#[tauri::command] -fn load_event( - state: State<'_, EditorState>, - event_id: EventId, -) -> Option { - state.runtime.lock().unwrap().load_event(event_id) -} - -#[tauri::command] -fn set_choice( - state: State<'_, EditorState>, - choice_id: usize, -) -> Result { - state.runtime.lock().unwrap().set_choice(choice_id) -} - -#[tauri::command] -fn get_config(state: State<'_, EditorState>) -> cuentitos_common::Config { - state.runtime.lock().unwrap().database.config.clone() -} - -#[tauri::command] -fn get_items(state: State<'_, EditorState>) -> Vec { - state.runtime.lock().unwrap().database.items.clone() -} - -#[tauri::command] -fn set_locale(state: State<'_, EditorState>, locale: String) -> Result<(), String> { - state.runtime.lock().unwrap().set_locale(locale) -} - -#[tauri::command] -fn set_variable_bool( - state: State<'_, EditorState>, - variable: String, - value: bool, -) -> Result<(), String> { - state.runtime.lock().unwrap().set_variable(variable, value) -} - -#[tauri::command] -fn set_variable_int( - state: State<'_, EditorState>, - variable: String, - value: i32, -) -> Result<(), String> { - state.runtime.lock().unwrap().set_variable(variable, value) -} - -#[tauri::command] -fn set_variable_float( - state: State<'_, EditorState>, - variable: String, - value: f32, -) -> Result<(), String> { - state.runtime.lock().unwrap().set_variable(variable, value) -} - -#[tauri::command] -fn set_item(state: State<'_, EditorState>, item: String, count: u8) -> Result<(), String> { - state.runtime.lock().unwrap().set_item(item, count) -} - -#[tauri::command] -fn reload_db(state: State<'_, EditorState>) -> Result<(), String> { - if let Ok(parser) = cuentitos_compiler::compile(&state.source_path, &state.destination_path) { - let mut f = File::open(&state.destination_path).expect("no file found"); - let metadata = std::fs::metadata(&state.destination_path).expect("unable to read metadata"); - let mut buffer = vec![0; metadata.len() as usize]; - f.read_exact(&mut buffer).expect("buffer overflow"); - let database = Database::from_u8(&buffer).unwrap(); - - let mut p = state.parser.lock().unwrap(); - - p.events = parser.events; - p.items = parser.items; - p.config = parser.config; - p.i18n = parser.i18n; - - state.runtime.lock().unwrap().database = database; - Ok(()) - } else { - Err("Compilation Failed".to_string()) - } -} - -#[derive(Debug, Default)] -struct EditorState { - source_path: PathBuf, - destination_path: PathBuf, - parser: Mutex, - runtime: Mutex, -} - -fn main() { - tauri::Builder::default() - .setup(|app| { - match app.get_cli_matches() { - // `matches` here is a Struct with { args, subcommand }. - // `args` is `HashMap` where `ArgData` is a struct with { value, occurrences }. - // `subcommand` is `Option>` where `SubcommandMatches` is a struct with { name, matches }. - Ok(matches) => { - let source = matches.args["source"].value.as_str().unwrap_or("."); - let destination = matches.args["destination"] - .value - .as_str() - .unwrap_or("./build"); - let db = matches.args["db"].value.as_str().unwrap_or("cuentitos.db"); - - let source = PathBuf::from_str(source)?; - let mut destination = PathBuf::from_str(destination)?; - destination.push(db); - - let parser = cuentitos_compiler::compile(&source, &destination)?; - - let mut f = File::open(&destination).expect("no file found"); - let metadata = std::fs::metadata(&destination).expect("unable to read metadata"); - let mut buffer = vec![0; metadata.len() as usize]; - f.read_exact(&mut buffer).expect("buffer overflow"); - let database = Database::from_u8(&buffer).unwrap(); - - let runtime = Runtime::new(database); - - app.manage(EditorState { - source_path: source, - destination_path: destination, - parser: parser.into(), - runtime: runtime.into(), - }); - } - Err(_) => {} - } - - Ok(()) - }) - .invoke_handler(tauri::generate_handler![ - reload_db, - next_event, - get_event_list, - load_event, - set_choice, - get_config, - get_items, - set_locale, - set_variable_bool, - set_variable_float, - set_variable_int, - set_item - ]) - .run(tauri::generate_context!()) - .expect("error while running tauri application"); -} diff --git a/editor/src-tauri/tauri.conf.json b/editor/src-tauri/tauri.conf.json deleted file mode 100644 index 76aef1e..0000000 --- a/editor/src-tauri/tauri.conf.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "build": { - "beforeDevCommand": "", - "beforeBuildCommand": "", - "devPath": "../src", - "distDir": "../src", - "withGlobalTauri": true - }, - "package": { - "productName": "cuentitos-editor", - "version": "0.0.0" - }, - "tauri": { - "allowlist": { - "all": false, - "shell": { - "all": false, - "open": true - } - }, - "cli" : { - "description": "asd", - "longDescription": "asd", - "beforeHelp": "asd", - "afterHelp": "asd", - "args": [ - { - "name": "source", - "index": 1, - "takesValue": true, - "required": true - }, - { - "name": "destination", - "index": 2, - "takesValue": true, - "required": true - }, - { - "name": "db", - "index": 3, - "takesValue": true, - "required": true - } - ], - "subcommands": {} - }, - "bundle": { - "active": true, - "category": "DeveloperTool", - "copyright": "", - "deb": { - "depends": [] - }, - "externalBin": [], - "icon": [ - "icons/32x32.png", - "icons/128x128.png", - "icons/128x128@2x.png", - "icons/icon.icns", - "icons/icon.ico" - ], - "identifier": "com.cuentitos.editor", - "longDescription": "", - "macOS": { - "entitlements": null, - "exceptionDomain": "", - "frameworks": [], - "providerShortName": null, - "signingIdentity": null - }, - "resources": [], - "shortDescription": "", - "targets": "all", - "windows": { - "certificateThumbprint": null, - "digestAlgorithm": "sha256", - "timestampUrl": "" - } - }, - "security": { - "csp": null - }, - "updater": { - "active": false - }, - "windows": [ - { - "fullscreen": false, - "maximized" : true, - "resizable": true, - "title": "Cuentitos Editor", - "height": 600, - "width": 800 - } - ] - } -} diff --git a/editor/src/assets/javascript.svg b/editor/src/assets/javascript.svg deleted file mode 100644 index f9abb2b..0000000 --- a/editor/src/assets/javascript.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/editor/src/assets/tauri.svg b/editor/src/assets/tauri.svg deleted file mode 100644 index 31b62c9..0000000 --- a/editor/src/assets/tauri.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/editor/src/index.html b/editor/src/index.html deleted file mode 100644 index a10a338..0000000 --- a/editor/src/index.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - Cuentitos Editor - - - - - - -

- - diff --git a/editor/src/main.js b/editor/src/main.js deleted file mode 100644 index 1200552..0000000 --- a/editor/src/main.js +++ /dev/null @@ -1,207 +0,0 @@ -const { invoke } = window.__TAURI__.tauri; - -let current_event; - -async function get_event_list() { - const events = await invoke("get_event_list"); - let event_list = document.querySelector("#event-list"); - event_list.textContent = ""; - - for(let event_id in events) { - let li = document.createElement("li"); - li.textContent = event_id; - li.classList = "event event-sidebar"; - li.setAttribute('data-id', event_id); - for(let result in events[event_id]) { - li.classList.add(result); - } - event_list.appendChild(li); - } -} - -async function generate_state() { - const config = await invoke("get_config"); - let state_ul = document.querySelector("#state-base ul"); - - // Create locales - if(config.locales.length > 0){ - let li = document.createElement("li"); - li.innerHTML = ''; - let select = li.querySelector("select"); - for(let i in config.locales) { - let option = document.createElement("option"); - if(config.default_locale == config.locales[i]){ - option.setAttribute("selected", "selected") - } - option.textContent = config.locales[i]; - select.appendChild(option); - } - state_ul.appendChild(li); - } - - // Add Reputations - let reputation_ul = document.querySelector("#state-reputations ul"); - if(config.reputations.length > 0) { - for(let i in config.reputations) { - let name = config.reputations[i]; - let li = document.createElement("li"); - li.innerHTML = ""; - reputation_ul.appendChild(li); - } - } - - // Add Variables - let variables_ul = document.querySelector("#state-variables ul"); - for(let name in config.variables) { - let variable = config.variables[name]; - let li = document.createElement("li"); - switch (variable) { - case "bool": - li.innerHTML = "" - break; - case "integer": - li.innerHTML = "" - break; - case "float": - li.innerHTML = "" - break; - } - variables_ul.appendChild(li); - } - - // Add Items - const items = await invoke("get_items"); - let items_ul = document.querySelector("#state-items ul"); - - for(let i in items) { - const item = items[i]; - const name = item.name; - const max = item.max_stack_count; - let li = document.createElement("li"); - li.innerHTML = "" - items_ul.appendChild(li); - } -} - -async function next_event() { - current_event = await invoke("next_event"); - render_event(current_event); -} - -function render_event(event) { - let event_dom = document.querySelector("#current_event"); - event_dom.querySelector(".event-title").textContent = event.title; - event_dom.querySelector(".event-description").textContent = event.description; - let choices = event_dom.querySelector(".event-choices"); - choices.textContent = ""; - - for(let choice in event.choices) { - let c = event.choices[choice] - let li = document.createElement("li"); - li.classList = "choice"; - li.setAttribute('data-id', c.id); - li.textContent = c.text; - choices.append(li); - } - - hide("result"); - show("event"); -} - -function render_result(result) { - let current_result = document.querySelector("#current_result"); - current_result.querySelector(".result-text").textContent = result.text; - - let mod_list = current_result.querySelector(".result-modifiers"); - if(result.modifiers) { - for(let modifier in result.modifiers) { - let mod = result.modifiers[modifier]; - let li = document.createElement("li"); - li.textContent = mod.kind + " " + mod.id + " " + mod.amount; - mod_list.append(li); - } - } - - hide("event"); - show("result"); -} - -function show(element) { - let current_element = document.querySelector("#current_" + element); - if(current_element) { - current_element.classList.remove("hidden"); - } -} -function hide(element) { - let current_element = document.querySelector("#current_" + element); - if(current_element) { - current_element.classList.add("hidden"); - } -} - -window.addEventListener("DOMContentLoaded", () => { - document - .querySelector("#next-event") - .addEventListener("click", () => next_event()); - - document - .querySelector("#reload-db") - .addEventListener("click", async () => { - await invoke("reload_db") - location = location; - }); - - window.addEventListener("load", () => { - get_event_list(); - generate_state(); - }); - - document.addEventListener("click", async (event) => { - if (event.target.classList.contains("choice")){ - let id = parseInt(event.target.dataset.id); - let result = await invoke("set_choice", {choiceId: id}); - render_result(result); - }; - - if (event.target.classList.contains("event-sidebar")){ - let id = event.target.dataset.id; - let current_event = await invoke("load_event", { eventId: id}); - if(current_event) { - render_event(current_event); - } - } - }); - - document.querySelector("#state").addEventListener("change", async (event) => { - let target = event.target; - let method = target.dataset.method; - let params = {}; - - switch (method) { - case 'set_locale': - params["locale"] = target.value; - break; - case 'set_variable_bool': - params["variable"] = target.dataset.id; - params["value"] = target.value == "on" ? true : false; - break; - case 'set_variable_float': - params["variable"] = target.dataset.id; - params["value"] = parseFloat(target.value); - break; - case 'set_variable_int': - params["variable"] = target.dataset.id; - params["value"] = parseInt(target.value); - break; - case 'set_item': - params["item"] = target.dataset.id; - params["count"] = parseInt(target.value); - break; - - default: - break; - } - let result = await invoke(method, params); - console.log(result); - }); -}); diff --git a/editor/src/style.css b/editor/src/style.css deleted file mode 100644 index 9f80acc..0000000 --- a/editor/src/style.css +++ /dev/null @@ -1,272 +0,0 @@ -:root { - --gutter: 1rem; - --color-1: #FCF8E8; - --color-2: #BEF0CB; - --color-3: #D1FFF3; - --color-4: #C1AEFC; - --color-5: #553939; - --color-6: #472D2D; - --color-error: rgb(252, 174, 174); - font-family: Inter, Avenir, Helvetica, Arial, sans-serif; - font-size: 16px; - line-height: 24px; - font-weight: 400; -} - -li { - list-style-type: none; -} -.hidden { - display: none; -} - -h1, h2, h3, h4 { - margin: 0; -} - -body { - margin: 0; - color: var(--color-6); -} - -hr { - border: 1px solid black; -} - -#container { - display: grid; - grid-template-columns: 0.2fr 1fr; -} - -#sidebar h1 { - text-align: center; -} - -#sidebar button { - width: 100%; -} - -#sidebar { - padding: var(--gutter); - border-right: 4px solid var(--color-6); - background-color: var(--color-3); - max-height: calc(100vh - 2rem); -} - -#event-list { - display: grid; - grid-template-rows: 1fr; - overflow: scroll; - max-height: 60vh; -} - -#event-list .event { - padding: 0.5rem; - cursor: pointer; - list-style-type: none; - border: 2px solid transparent; - border-radius: var(--gutter) -} - -#event-list .event:hover { - background-color: var(--color-1); - border: 2px solid black -} - -#event-list .event.Err { - cursor:not-allowed; -} - -#event-list .event.Err:hover { - background-color: #333; - color: white; -} - -#event-list .event:before { - width: 1rem; - height: 1rem; - padding: 0.2rem; - margin: 0 0.3rem; - border-radius: 1rem; - display: inline-grid; - justify-content: center; - align-content: center; - font-family: "Font Awesome 6 Free"; - border: 2px solid black; - transform: scale(0.7); -} - -#event-list .event.Err:before { - content: "\f00d"; - background: var(--color-error); -} - -#event-list .event.Ok:before { - content: "\f00c"; - background: var(--color-2); -} - -#content { - height: calc(100vh - 2rem); - padding: var(--gutter); - background-color: var(--color-1); - display: grid; - align-items: center; - justify-content: center; - display: grid; - grid-template-rows: 10fr 1fr; - min-width: 50vw; -} - -#state { - border-radius: var(--gutter); - background-color: var(--color-4); - border: 3px solid var(--color-2); - width: 100%; - height: 100%; - min-width: 50vw; - display: grid; - grid-template-columns: 1fr 1fr 1fr 1fr; - align-content: center; -} - -#test div { - margin: 0 auto -} - -.state-column { - padding: var(--gutter) -} - -#state h2 { - font-size: small; -} - -#sidebar input { - width: 100%; - padding: calc(var(--gutter)/2); - margin-top: var(--gutter) -} - -#content .event { - border: 5px solid var(--color-4); - border-radius: var(--gutter); - padding: calc(var(--gutter) * 2); - background-color: var(--color-2); - max-width: calc(50vw - 10px - var(--gutter)*2); -} - -ul { - padding: 0; -} - -.choice { - padding: var(--gutter); - background-color: var(--color-1); - cursor: pointer; - list-style-type: none; - margin-bottom: var(--gutter); - margin-left: 0; -} - -.choice:hover { - background-color: var(--color-3); -} -/* :root { - - color: #0f0f0f; - background-color: #f6f6f6; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -webkit-text-size-adjust: 100%; -} - -.container { - margin: 0; - padding-top: 10vh; - display: flex; - flex-direction: column; - justify-content: center; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; - transition: 0.75s; -} - -.logo.tauri:hover { - filter: drop-shadow(0 0 2em #24c8db); -} - -.row { - display: flex; - justify-content: center; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} - -a:hover { - color: #535bf2; -} - -h1 { - text-align: center; -} - -input, -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - color: #0f0f0f; - background-color: #ffffff; - transition: border-color 0.25s; - box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2); -} - -button { - cursor: pointer; -} - -button:hover { - border-color: #396cd8; -} - -input, -button { - outline: none; -} - -#greet-input { - margin-right: 5px; -} - -@media (prefers-color-scheme: dark) { - :root { - color: #f6f6f6; - background-color: #2f2f2f; - } - - a:hover { - color: #24c8db; - } - - input, - button { - color: #ffffff; - background-color: #0f0f0f98; - } -} */ diff --git a/examples/story-example.cuentitos b/examples/story-example.cuentitos index 4873e32..46f4320 100644 --- a/examples/story-example.cuentitos +++ b/examples/story-example.cuentitos @@ -1,22 +1,22 @@ You've just arrived in the bustling city, full of excitement and anticipation for your new job. The skyline reaches for the clouds, and the sounds of traffic and people surround you. As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment. - * I take a walk through a nearby park to relax and acclimate to the city. + * I take a walk through a nearby park to relax and acclimate to the city. As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses. You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts. (50%) A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise. This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. - * I visit a popular street market to experience the city's unique flavors and energy. + * I visit a popular street market to experience the city's unique flavors and energy. (50) At the bustling street market, you discover a food stand offering mouthwatering delicacies. - [(50%) happy_vendor] + [morning_vendor] req time_of_day morning - (50%) You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer. - (50%) You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations. - [(50%) tired_vendor] - req time_of_day morning - (50%) You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand. - (50%) You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them. - [tired_vendor] + [(100) happy_vendor] + (50%) You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer. + (50%) You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations. + [(25) tired_vendor] + (50%) You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand. + (50%) You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them. + [night_vendor] req time_of_day night (50%) You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction. (50%) The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers. @@ -62,10 +62,10 @@ You decide to focus on the now... req energy >10 [call] (30) The phone rings twice, and dad picks up. You have a good chat. - req energy>20 + req energy >20 mod energy -10 (10) The phone rings twice, and mom picks up. You have a good chat. - req energy>20 + req energy >20 freq time_of_day morning 100 mod energy -10 (40) The phone rings ten times, nobody is at home. @@ -74,16 +74,20 @@ You decide to focus on the now... mod energy 10 mod time -7.5 -> second_day +-> END + +// This is a comment -=== second_day === -You wake up feeling refreshed. Let's see what this day brings. - * Explore a museum - -> second_day.museum - * Go to the Farmer's Market - -> second_day.farmers_market +# second_day_happy + You wake up feeling refreshed. Let's see what this day brings. + `play_sound alarm 0.3` + * Explore a museum + -> second_day.museum + * Go to the Farmer's Market + -> second_day.farmers_market -= museum +## museum You get to the museum door. You watch through the window. It seems crowded. -= farmers_market - You get to the farmer's market. It's very early and some stands are still being set up. \ No newline at end of file +## farmers_market + You get to the farmer's market. It's very early and some stands are still being set up. diff --git a/palabritas-common/Cargo.toml b/palabritas-common/Cargo.toml deleted file mode 100644 index f4e629a..0000000 --- a/palabritas-common/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "palabritas-common" -version = "0.1.0" -edition = "2021" - -[dependencies] -rand = "0.8.5" -serde = { version = "1.0.144", features = ["derive"] } -rmp-serde = "1.1.1" -rmp = "^0.8" -typetag = "0.2" \ No newline at end of file diff --git a/palabritas-common/src/content.rs b/palabritas-common/src/content.rs deleted file mode 100644 index 91d9a8c..0000000 --- a/palabritas-common/src/content.rs +++ /dev/null @@ -1,73 +0,0 @@ -use crate::{ - Divert, FloatProbability, Frequency, Modifier, PercentageProbability, Probability, Requirement, -}; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Default, Serialize, Deserialize)] -pub struct Content { - pub content: Vec, - pub probability: Option>, - pub text: String, - pub content_type: ContentType, - pub requirements: Vec, - pub frequency_changes: Vec, - pub modifiers: Vec, - pub divert: Vec, -} - -impl PartialEq for Content { - fn eq(&self, other: &Self) -> bool { - return self.content == other.content - && self.text == other.text - && self.content_type == other.content_type - && self.requirements == other.requirements - && self.frequency_changes == other.frequency_changes - && self.modifiers == other.modifiers - && self.divert == other.divert - && compare_probability::(self, other) - && compare_probability::(self, other); - - fn compare_probability(content_1: &Content, content_2: &Content) -> bool - where - T: 'static, - T: PartialEq, - { - if content_1.probability.is_some() != content_2.probability.is_some() { - return true; - } - - if content_1.probability.is_some() && content_2.probability.is_some() { - if let Some(self_probability) = content_1 - .probability - .as_ref() - .unwrap() - .as_any() - .downcast_ref::() - { - if let Some(other_probability) = content_2 - .probability - .as_ref() - .unwrap() - .as_any() - .downcast_ref::() - { - if other_probability != self_probability { - return false; - } - } else { - return false; - } - } - } - true - } - } -} - -#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] -pub enum ContentType { - #[default] - Text, - NamedBucket, - Choice, -} diff --git a/palabritas-common/src/file.rs b/palabritas-common/src/file.rs deleted file mode 100644 index 574d1d1..0000000 --- a/palabritas-common/src/file.rs +++ /dev/null @@ -1,8 +0,0 @@ -use crate::{Content, Knot}; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Default, Serialize, Deserialize, PartialEq)] -pub struct File { - pub knots: Vec, - pub content: Vec, -} diff --git a/palabritas-common/src/lib.rs b/palabritas-common/src/lib.rs deleted file mode 100644 index aee9bc5..0000000 --- a/palabritas-common/src/lib.rs +++ /dev/null @@ -1,32 +0,0 @@ -mod file; -pub use file::*; - -mod knot; -pub use knot::*; - -mod stitch; -pub use stitch::*; - -mod content; -pub use content::*; - -mod requirement; -pub use requirement::*; - -mod probability; -pub use probability::*; - -mod condition; -pub use condition::*; - -mod variable; -pub use variable::*; - -mod frequency; -pub use frequency::*; - -mod divert; -pub use divert::*; - -mod modifier; -pub use modifier::*; diff --git a/palabritas-common/src/modifier.rs b/palabritas-common/src/modifier.rs deleted file mode 100644 index 87b078d..0000000 --- a/palabritas-common/src/modifier.rs +++ /dev/null @@ -1,8 +0,0 @@ -use crate::Variable; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] -pub struct Modifier { - pub variable: Variable, - pub new_value: String, -} diff --git a/palabritas-common/src/probability.rs b/palabritas-common/src/probability.rs deleted file mode 100644 index cacfcd5..0000000 --- a/palabritas-common/src/probability.rs +++ /dev/null @@ -1,49 +0,0 @@ -use rand::Rng; -use serde::{Deserialize, Serialize}; -use std::any::Any; -use std::fmt::Debug; - -#[typetag::serde(tag = "type")] -pub trait Probability: Debug { - fn get_chance(&self) -> f32; - fn roll_chance(&self) -> bool; - fn as_any(&self) -> &dyn Any; -} - -#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] -pub struct PercentageProbability { - pub value: u8, -} - -#[typetag::serde] -impl Probability for PercentageProbability { - fn get_chance(&self) -> f32 { - self.value as f32 / 100. - } - - fn roll_chance(&self) -> bool { - rand::thread_rng().gen::() < self.get_chance() - } - fn as_any(&self) -> &dyn Any { - self - } -} - -#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)] -pub struct FloatProbability { - pub value: f32, -} - -#[typetag::serde] -impl Probability for FloatProbability { - fn get_chance(&self) -> f32 { - self.value - } - - fn roll_chance(&self) -> bool { - rand::thread_rng().gen::() < self.get_chance() - } - fn as_any(&self) -> &dyn Any { - self - } -} diff --git a/palabritas-common/src/variable.rs b/palabritas-common/src/variable.rs deleted file mode 100644 index 500d7b7..0000000 --- a/palabritas-common/src/variable.rs +++ /dev/null @@ -1,73 +0,0 @@ -pub type VariableId = String; - -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] -pub enum VariableKind { - #[default] - Integer, - Float, - Bool, - Enum { - values: Vec, - }, -} - -#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] -pub struct Variable { - pub id: VariableId, - pub kind: VariableKind, -} - -#[cfg(test)] -mod test { - use crate::variable::*; - - #[test] - fn variable_id_is_a_string() { - let variable_id: VariableId = "health".to_string(); - assert!(variable_id == "health") - } - - #[test] - fn variable_kind_has_needed_values() { - let variable_kind = VariableKind::Integer; - assert!(variable_kind == VariableKind::Integer); - - let variable_kind = VariableKind::Float; - assert!(variable_kind == VariableKind::Float); - - let variable_kind = VariableKind::Bool; - assert!(variable_kind == VariableKind::Bool); - - let variable_kind = VariableKind::Enum { - values: vec!["a-value".to_string()], - }; - assert!( - variable_kind - == VariableKind::Enum { - values: vec!["a-value".to_string()] - } - ); - } - - #[test] - fn variable_supports_id() { - let variable = Variable { - id: "my-variable".to_string(), - ..Default::default() - }; - - assert_eq!(variable.id, "my-variable") - } - - #[test] - fn variable_supports_kind() { - let variable = Variable { - kind: VariableKind::Float, - ..Default::default() - }; - - assert_eq!(variable.kind, VariableKind::Float) - } -} diff --git a/palabritas-compiler/.DS_Store b/palabritas-compiler/.DS_Store deleted file mode 100644 index b68b900c68a1c9decf7a0db3d22406d1a7a30cf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%Sr=55Uh?lEaZ}-$N2^SUAd5BJ?`-GHtu(`>hlTb4!Fl7-tqdK z|Ma|j$a~Kdm6ZZgKnh3!DIf)YrGWQd+OSGglmb#f3VbQx--kwb?1fWed^#9n1RyS% z4&ypz31agEu@_E>%+M^U#H3n{7?yPATh;Z#DKY7=8a}L^Y&D@+Je~KqD2Me#MJXT! zP8GPw?b`eQHT{SA|CFSi6p#Y{N&#DL$L)r%RK0cfa^7nj{f6!}A9OdagTfH)m>BJt g8*j&#QIvJf*F5iqQ)1AW4?0ml1Fnlq3jDPKp9s7a(f|Me diff --git a/palabritas-compiler/Cargo.toml b/palabritas-compiler/Cargo.toml deleted file mode 100644 index 0959c24..0000000 --- a/palabritas-compiler/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -name = "palabritas-compiler" -version = "0.0.0" -edition = "2021" - -[lib] -path = "src/lib.rs" - -[dependencies] -serde = { version = "1.0.144", features = ["derive"] } -rmp-serde = "1.1.1" -clap = { version = "4.0.17", features = ["derive"] } -palabritas-common = { path = "../palabritas-common" } -palabritas-parser = { path = "../palabritas-parser" } -regex = "1.7.0" -strum = "0.24.1" -csv = "1.1" diff --git a/palabritas-compiler/fixtures/.DS_Store b/palabritas-compiler/fixtures/.DS_Store deleted file mode 100644 index 7c527936de3b76ee32e00f67b6781c0b46e66ede..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJB|V|47Fj9kZ35k%oVsngx~~o0SZ>Dm0*zg)l+e zM0v${EF!wT?N=g85t+jc5r~noCR|;seX*X*;DQoNKaaL;!di80h5~3oFMTo)me- Y=Gd=^eW243cRG+i1Evd&3cOo^U!{H&+W-In diff --git a/palabritas-compiler/fixtures/cuentitos.toml b/palabritas-compiler/fixtures/cuentitos.toml deleted file mode 100644 index 2dca840..0000000 --- a/palabritas-compiler/fixtures/cuentitos.toml +++ /dev/null @@ -1,8 +0,0 @@ -reputations = [ "rep_1", "rep_2" ] -locales = ['en', 'es', 'ru'] -default_locale = 'en' - -[variables] -health = "integer" -happy = "bool" -tile = { enum = { values = ["forest"] }} diff --git a/palabritas-compiler/fixtures/en_export.csv b/palabritas-compiler/fixtures/en_export.csv deleted file mode 100644 index 28cc662..0000000 --- a/palabritas-compiler/fixtures/en_export.csv +++ /dev/null @@ -1 +0,0 @@ -id,value diff --git a/palabritas-compiler/fixtures/events/01-basic.event b/palabritas-compiler/fixtures/events/01-basic.event deleted file mode 100644 index 6a5aed4..0000000 --- a/palabritas-compiler/fixtures/events/01-basic.event +++ /dev/null @@ -1,2 +0,0 @@ -A Basic Event -This event has no options, just title and description \ No newline at end of file diff --git a/palabritas-compiler/fixtures/events/02-choices.event b/palabritas-compiler/fixtures/events/02-choices.event deleted file mode 100644 index a04d496..0000000 --- a/palabritas-compiler/fixtures/events/02-choices.event +++ /dev/null @@ -1,4 +0,0 @@ -A Basic Event -This event has options - * An Option without requirements - * Another option without requirements \ No newline at end of file diff --git a/palabritas-compiler/fixtures/events/03-results.event b/palabritas-compiler/fixtures/events/03-results.event deleted file mode 100644 index 1312b73..0000000 --- a/palabritas-compiler/fixtures/events/03-results.event +++ /dev/null @@ -1,8 +0,0 @@ -A Basic Event -This event has options with results, none have requirements - * An Option - (10) One Result - (90) Another Result - * Another option - (90) One more Result - (10) Yet another Result diff --git a/palabritas-compiler/fixtures/events/04-requirements.event b/palabritas-compiler/fixtures/events/04-requirements.event deleted file mode 100644 index 0ff4055..0000000 --- a/palabritas-compiler/fixtures/events/04-requirements.event +++ /dev/null @@ -1,21 +0,0 @@ -Conditions -This event has conditions - unique - require var health <100 - require item wooden_figure - require reputation rep_1 5 - require time_of_day night - require event !choices - require decision a_decision - require var tile forest - * An Option - require var health =100 - require time_of_day night - require event choices - (10) One Result - require var happy true - require time_of_day morning - require time_of_day !noon - (90) Another Result - require var happy false - require time_of_day evening diff --git a/palabritas-compiler/fixtures/events/05-modifiers.event b/palabritas-compiler/fixtures/events/05-modifiers.event deleted file mode 100644 index 724aaec..0000000 --- a/palabritas-compiler/fixtures/events/05-modifiers.event +++ /dev/null @@ -1,15 +0,0 @@ -A Basic Event with mods -This event has options with results and mods - * An Option - (100) One Result - mod item wooden_figure - mod item wooden_figure -1 - mod var health -2 - mod var health 5 - mod var happy true - mod var happy false - mod reputation rep_1 2 - mod reputation rep_2 -2 - mod decision a_decision - mod achievement an_achievement - diff --git a/palabritas-compiler/fixtures/events/06-settings.event b/palabritas-compiler/fixtures/events/06-settings.event deleted file mode 100644 index 42dab97..0000000 --- a/palabritas-compiler/fixtures/events/06-settings.event +++ /dev/null @@ -1,4 +0,0 @@ -A Basic Event -This event has no options, just title and description -set character laidaxai -set character_voice strong diff --git a/palabritas-compiler/fixtures/items/.DS_Store b/palabritas-compiler/fixtures/items/.DS_Store deleted file mode 100644 index ad3d440cb59433da269a8e4d461715bc25ea5947..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJ8r^25S>XVkZ34V?iIMf%5qMS3q)XqkPwz|(!1hZIa=O)8q3f@gWgCpZ+CXy zT7HGcBO==Tb{mnkh%DiTaw34iE@ z-D%tRCo7>*0V+TRr~nn90uNFk8|!lQp!;|Y6`%sIqkw%M3f!Bu`B$e#hzg+>LQt-wG3s}=zO diff --git a/palabritas-compiler/fixtures/items/00-moon-wolf.item b/palabritas-compiler/fixtures/items/00-moon-wolf.item deleted file mode 100644 index 9340627..0000000 --- a/palabritas-compiler/fixtures/items/00-moon-wolf.item +++ /dev/null @@ -1,2 +0,0 @@ -Moon Wolf -A woolf with blue eyes that shine at night \ No newline at end of file diff --git a/palabritas-compiler/fixtures/items/01-mushroom.item b/palabritas-compiler/fixtures/items/01-mushroom.item deleted file mode 100644 index e7fe704..0000000 --- a/palabritas-compiler/fixtures/items/01-mushroom.item +++ /dev/null @@ -1,4 +0,0 @@ -Mushroom -Delicious and nutritious -ingredient -6 \ No newline at end of file diff --git a/palabritas-compiler/fixtures/items/02-dirt.item b/palabritas-compiler/fixtures/items/02-dirt.item deleted file mode 100644 index 177d2f4..0000000 --- a/palabritas-compiler/fixtures/items/02-dirt.item +++ /dev/null @@ -1,3 +0,0 @@ -Dirt -A dirt lump you dug -6 \ No newline at end of file diff --git a/palabritas-compiler/fixtures/locales/es.csv b/palabritas-compiler/fixtures/locales/es.csv deleted file mode 100644 index 4b80de0..0000000 --- a/palabritas-compiler/fixtures/locales/es.csv +++ /dev/null @@ -1,4 +0,0 @@ -id,value -event-01-basic-title,"Un evento básico" -, -event, diff --git a/palabritas-compiler/src/lib.rs b/palabritas-compiler/src/lib.rs deleted file mode 100644 index a3173f1..0000000 --- a/palabritas-compiler/src/lib.rs +++ /dev/null @@ -1,53 +0,0 @@ -use palabritas_parser::parse_file_from_path; -use rmp_serde::Serializer; -use serde::Serialize; -use std::error; -use std::fmt; -use std::fs::File; -use std::io::Write; -use std::path::Path; - -#[derive(Debug)] -pub enum CompileError { - SourceNotDirectory, - DestinationNotDirectory, -} - -impl error::Error for CompileError {} - -impl fmt::Display for CompileError { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { - CompileError::SourceNotDirectory => write!(f, "Source is not a folder."), - CompileError::DestinationNotDirectory => write!(f, "Destination is not a folder."), - } - } -} - -pub fn compile(source_path: T, destination_path: U) -where - T: AsRef, - U: AsRef, -{ - let db = parse_file_from_path(source_path).unwrap(); - - let mut buf: Vec = Vec::new(); - let mut serializer = Serializer::new(&mut buf); - - db.serialize(&mut serializer).unwrap(); - - let destination_path = destination_path.as_ref().to_path_buf(); - let mut file = File::create(destination_path).unwrap(); - - file.write_all(&buf).unwrap(); -} - -#[cfg(test)] -mod test { - use crate::compile; - - #[test] - fn compile_works_correctly() { - compile("../examples/story-example.cuentitos", "F:/cuentitos.db"); - } -} diff --git a/palabritas-parser/Cargo.toml b/palabritas/Cargo.toml similarity index 62% rename from palabritas-parser/Cargo.toml rename to palabritas/Cargo.toml index b270a46..1cc361c 100644 --- a/palabritas-parser/Cargo.toml +++ b/palabritas/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "palabritas-parser" +name = "palabritas" version = "0.2.0" edition = "2021" @@ -10,4 +10,4 @@ path = "src/lib.rs" pest = "2.0" pest_derive = "2.0" rand = "0.8.5" -palabritas-common = { path = "../palabritas-common" } \ No newline at end of file +cuentitos-common = { path = "../common" } \ No newline at end of file diff --git a/palabritas-parser/src/lib.rs b/palabritas/src/lib.rs similarity index 70% rename from palabritas-parser/src/lib.rs rename to palabritas/src/lib.rs index 2547856..555a8ff 100644 --- a/palabritas-parser/src/lib.rs +++ b/palabritas/src/lib.rs @@ -4,9 +4,9 @@ extern crate pest_derive; use std::path::Path; -use palabritas_common::{ - Condition, Content, ContentType, Divert, File, FloatProbability, Frequency, Modifier, Operator, - PercentageProbability, Probability, Requirement, +use cuentitos_common::{ + Block, BlockSettings, Condition, Database, FrequencyModifier, Modifier, NextBlock, Operator, + Requirement, }; use pest::{iterators::Pair, Parser}; @@ -14,11 +14,11 @@ use pest::{iterators::Pair, Parser}; #[grammar = "palabritas.pest"] pub struct PalabritasParser; -pub fn parse_file_from_path

(path: P) -> Option +pub fn parse_database_from_path

(path: P) -> Option where P: AsRef, { - let str = std::fs::read_to_string(path).expect("cannot read file"); + let str = std::fs::read_to_string(path).expect("cannot read File"); let token = PalabritasParser::parse(Rule::File, &str) .expect("unsuccessful parse") // unwrap the parse result .next() @@ -27,150 +27,180 @@ where parse_file(token) } -pub fn parse_file(token: Pair) -> Option { +pub fn parse_file(token: Pair) -> Option { if token.as_rule() != Rule::File { return None; } - let mut file = File::default(); - + let mut blocks: Vec> = Vec::default(); for inner_token in token.into_inner() { - if inner_token.as_rule() == Rule::BlockContent { - if let Some(content) = parse_content(inner_token) { - file.content.push(content); + if inner_token.as_rule() == Rule::Block { + parse_block(inner_token, &mut blocks, 0); + } + } + + if blocks.is_empty() { + return None; + } + + if let Some(last) = blocks[0].last_mut() { + last.get_settings_mut().next = NextBlock::EndOfFile; + } + + let mut ordered_blocks = Vec::default(); + + for child_level in 0..blocks.len() { + let mut index_offset = 0; + for childs_in_level in blocks.iter().take(child_level + 1) { + index_offset += childs_in_level.len(); + } + + for block in &mut blocks[child_level] { + let settings = block.get_settings_mut(); + for child in &mut settings.children { + *child += index_offset; } + + ordered_blocks.push(block.clone()); } } - Some(file) + Some(Database { + blocks: ordered_blocks, + }) } -fn parse_content(token: Pair) -> Option { - if token.as_rule() != Rule::BlockContent { - return None; +fn parse_block(token: Pair, blocks: &mut Vec>, child_order: usize) { + if token.as_rule() != Rule::Block { + return; } + // (NamedBucket | Choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* - let mut content = Content::default(); + let mut block = Block::default(); for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Text => { if let Some(text) = parse_text(inner_token) { - content = text; + block = text; } } - Rule::NamedBucket => { + /*Rule::NamedBucket => { if let Some(named_bucket) = parse_named_bucket(inner_token) { - content = named_bucket; + block = named_bucket; } - } + } */ Rule::Choice => { if let Some(choice) = parse_choice(inner_token) { - content = choice; + block = choice; } } Rule::Command => { - add_command_to_content(inner_token, &mut content); + add_command_to_block(inner_token, &mut block); } Rule::NewBlock => { - if let Some(inner_block) = get_content_from_new_block(inner_token) { - if let Some(inner_content) = parse_content(inner_block) { - content.content.push(inner_content); - } + for inner_blocks_token in get_blocks_from_new_block(inner_token) { + let settings = block.get_settings_mut(); + parse_block(inner_blocks_token, blocks, child_order + 1); + settings.children.push(blocks[child_order + 1].len() - 1); } } _ => {} } } - Some(content) + while child_order >= blocks.len() { + blocks.push(Vec::default()); + } + + blocks[child_order].push(block); } -fn get_content_from_new_block(token: Pair) -> Option> { +fn get_blocks_from_new_block(token: Pair) -> Vec> { + let mut blocks = Vec::default(); + if token.as_rule() != Rule::NewBlock { - return None; + return blocks; } - token - .into_inner() - .find(|inner_token| inner_token.as_rule() == Rule::BlockContent) + for inner_token in token.into_inner() { + if inner_token.as_rule() == Rule::Block { + blocks.push(inner_token); + } + } + blocks } - -fn parse_named_bucket(token: Pair) -> Option { +/* +fn parse_named_bucket(token: Pair) -> Option { if token.as_rule() != Rule::NamedBucket { return None; } - let mut content = Content { - content_type: ContentType::NamedBucket, + let mut blocks = Block { + // blocks_type: BlockType::NamedBucket, ..Default::default() }; for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Probability => { - content.probability = parse_probability(inner_token); + blocks.probability = parse_probability(inner_token); } Rule::SnakeCase => { - content.text = inner_token.as_str().to_string(); + blocks.text = inner_token.as_str().to_string(); } _ => {} } } - Some(content) + Some(blocks) } - -fn parse_choice(token: Pair) -> Option { +*/ +fn parse_choice(token: Pair) -> Option { if token.as_rule() != Rule::Choice { return None; } - let mut content = Content { - content_type: ContentType::Choice, - ..Default::default() - }; + let mut text = String::default(); + let mut settings = BlockSettings::default(); for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Probability => { - content.probability = parse_probability(inner_token); + settings.chance = parse_probability(inner_token); } Rule::String => { - content.text = inner_token.as_str().to_string(); + text = inner_token.as_str().to_string(); } _ => {} } } - Some(content) + Some(Block::Choice { id: text, settings }) } -fn parse_text(token: Pair) -> Option { +fn parse_text(token: Pair) -> Option { if token.as_rule() != Rule::Text { return None; } - let mut content = Content { - content_type: ContentType::Text, - ..Default::default() - }; - + let mut text = String::default(); + let mut settings = BlockSettings::default(); for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Probability => { - content.probability = parse_probability(inner_token); + settings.chance = parse_probability(inner_token); } Rule::String => { - content.text = inner_token.as_str().to_string(); + text = inner_token.as_str().to_string(); } _ => {} } } - Some(content) + Some(Block::Text { id: text, settings }) } -fn add_command_to_content(token: Pair, content: &mut Content) { +fn add_command_to_settings(token: Pair, settings: &mut BlockSettings) { if token.as_rule() != Rule::Command { return; } @@ -180,29 +210,40 @@ fn add_command_to_content(token: Pair, content: &mut Content) { //Command = {NEWLINE ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert) } Rule::Requirement => { if let Some(requirement) = parse_requirement(inner_token) { - content.requirements.push(requirement); + settings.requirements.push(requirement); } } Rule::Frequency => { if let Some(frequency) = parse_frequency(inner_token) { - content.frequency_changes.push(frequency); + settings.frequency_modifiers.push(frequency); } } Rule::Modifier => { if let Some(modifier) = parse_modifier(inner_token) { - content.modifiers.push(modifier); + settings.modifiers.push(modifier); } } - Rule::Divert => { + /* Rule::Divert => { if let Some(divert) = parse_divert(inner_token) { - content.divert.push(divert); + settings.divert.push(divert); } - } + } */ _ => {} } } } - +fn add_command_to_block(token: Pair, block: &mut Block) { + match block { + Block::Text { id: _, settings } => { + add_command_to_settings(token, settings); + } + Block::Choice { id: _, settings } => { + add_command_to_settings(token, settings); + } + _ => {} + } +} +/* fn parse_divert(token: Pair) -> Option { if token.as_rule() != Rule::Divert { return None; @@ -228,7 +269,7 @@ fn parse_divert(token: Pair) -> Option { knot: knot.unwrap(), stitch, }) -} +} */ fn parse_modifier(token: Pair) -> Option { if token.as_rule() != Rule::Modifier { @@ -253,12 +294,12 @@ fn parse_modifier(token: Pair) -> Option { Some(modifier) } -fn parse_frequency(token: Pair) -> Option { +fn parse_frequency(token: Pair) -> Option { if token.as_rule() != Rule::Frequency { return None; } - let mut frequency = Frequency::default(); + let mut frequency = FrequencyModifier::default(); for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Condition => { @@ -269,7 +310,7 @@ fn parse_frequency(token: Pair) -> Option { Rule::Float | Rule::Integer => { let value = inner_token.as_str().parse::().unwrap(); - frequency.change_value = value; + frequency.value = value; } _ => {} } @@ -339,7 +380,7 @@ fn parse_comparison_operator(token: Pair) -> Option { } //TODO: Integer -fn parse_probability(token: Pair) -> Option> { +fn parse_probability(token: Pair) -> Option { if token.as_rule() != Rule::Probability { return None; } @@ -347,16 +388,13 @@ fn parse_probability(token: Pair) -> Option> { for inner_token in token.into_inner() { if inner_token.as_rule() == Rule::Float { let value = inner_token.as_str().parse::().unwrap(); - let probability = FloatProbability { value }; - return Some(Box::new(probability)); + return Some(value); } if inner_token.as_rule() == Rule::Percentage { if let Some(integer) = inner_token.into_inner().next() { - let value = integer.as_str().parse::().unwrap(); - let percentage = PercentageProbability { value }; - - return Some(Box::new(percentage)); + let value = integer.as_str().parse::().unwrap(); + return Some(value as f32 / 100.); } } } @@ -366,16 +404,9 @@ fn parse_probability(token: Pair) -> Option> { #[cfg(test)] mod test { - - use crate::{ - add_command_to_content, get_content_from_new_block, parse_choice, parse_comparison_operator, - parse_condition, parse_content, parse_divert, parse_file, parse_file_from_path, - parse_frequency, parse_modifier, parse_named_bucket, parse_probability, parse_requirement, - parse_text, PalabritasParser, Rule, - }; - use palabritas_common::{ - Condition, Content, ContentType, Divert, FloatProbability, Frequency, Modifier, Operator, - PercentageProbability, Requirement, Variable, + use crate::*; + use cuentitos_common::{ + Block, BlockSettings, Condition, FrequencyModifier, Modifier, Operator, Requirement, Variable, }; use pest::iterators::Pair; use pest::Parser; @@ -386,11 +417,11 @@ mod test { const COMPARISON_OPERATORS: [&str; 7] = ["=", "!=", "<", ">", "<=", ">=", "!"]; - const INDENTATIONS: [&str; 2] = [" ", "\t"]; + const INDENTATIONS: [&str; 1] = [" "]; #[test] fn parse_file_from_path_correctly() { - parse_file_from_path("../examples/story-example.cuentitos").unwrap(); + parse_database_from_path("../examples/story-example.cuentitos").unwrap(); //TODO: compare with fixture } @@ -402,98 +433,98 @@ mod test { //TODO: compare with fixture } - #[test] - fn parse_content_correctly() { - /* + /*#[test] + fn parse_blocks_correctly() { + /* - BlockContent = { - (NamedBucket | Choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* - } + BlockBlock = { + (NamedBucket | Choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* + } - */ + */ - let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); - let probability_string = format!("({})", float); + let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); + let probability_string = format!("({})", float); - let string = make_random_string(); - let child_string = make_random_string(); + let string = make_random_string(); + let child_string = make_random_string(); - let text_string = format!("{} {}", probability_string, string); - - let probability_token = short_parse(Rule::Probability, &probability_string); - let probability = parse_probability(probability_token); - - let knot = make_random_identifier(); - let divert_string = format!("\n -> {}", knot); + let text_string = format!("{} {}", probability_string, string); - let content_string = format!("{}{}\n\t{}", text_string, divert_string, child_string); + let probability_token = short_parse(Rule::Probability, &probability_string); + let probability = parse_probability(probability_token); - let expected_divert = Divert { - knot: knot.clone(), - stitch: None, - }; + let knot = make_random_identifier(); + let divert_string = format!("\n -> {}", knot); - let child_content = Content { - text: child_string, - content_type: ContentType::Text, - ..Default::default() - }; + let blocks_string = format!("{}{}\n\t{}", text_string, divert_string, child_string); - let expected_content = Content { - text: string, - probability: probability, - content_type: ContentType::Text, - divert: vec![expected_divert], - content: vec![child_content], - ..Default::default() - }; + let expected_divert = Divert { + knot: knot.clone(), + stitch: None, + }; - let content_token = short_parse(Rule::BlockContent, &content_string); - let content = parse_content(content_token).unwrap(); + let child_blocks = Block { + text: child_string, + blocks_type: BlockType::Text, + ..Default::default() + }; + + let expected_blocks = Block { + text: string, + probability: probability, + blocks_type: BlockType::Text, + divert: vec![expected_divert], + blocks: vec![child_blocks], + ..Default::default() + }; - assert_eq!(content, expected_content); - } - #[test] - fn get_content_from_new_block_correctly() { - let string = make_random_string(); - let new_block_string = format!("\t{}", string); + let blocks_token = short_parse(Rule::BlockBlock, &blocks_string); + let blocks = parse_blocks(blocks_token).unwrap(); - let expected_content = Content { - text: string, - ..Default::default() - }; + assert_eq!(blocks, expected_blocks); + } + #[test] + fn get_blocks_from_new_block_correctly() { + let string = make_random_string(); + let new_block_string = format!("\t{}", string); - let new_block_token = short_parse(Rule::NewBlock, &new_block_string); - let content_token = get_content_from_new_block(new_block_token).unwrap(); - let content = parse_content(content_token).unwrap(); + let expected_blocks = Block { + text: string, + ..Default::default() + }; - assert_eq!(content, expected_content); - } - #[test] - fn parse_named_bucket_correctly() { - //NamedBucket = { "[" ~ " "* ~ Probability? ~ SnakeCase ~ " "* ~ "]" } + let new_block_token = short_parse(Rule::NewBlock, &new_block_string); + let blocks_token = get_blocks_from_new_block(new_block_token); + let blocks = parse_blocks(blocks_token[0].clone()).unwrap(); - let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); - let probability_string = format!("({})", float); + assert_eq!(blocks, expected_blocks); + } + #[test] + fn parse_named_bucket_correctly() { + //NamedBucket = { "[" ~ " "* ~ Probability? ~ SnakeCase ~ " "* ~ "]" } - let snake_case = make_random_snake_case(); + let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); + let probability_string = format!("({})", float); - let named_bucket_string = format!("[{} {}]", probability_string, snake_case); - let token = short_parse(Rule::NamedBucket, &named_bucket_string); - let named_bucket = parse_named_bucket(token).unwrap(); + let snake_case = make_random_snake_case(); - let probability_token = short_parse(Rule::Probability, &probability_string); - let probability = parse_probability(probability_token); + let named_bucket_string = format!("[{} {}]", probability_string, snake_case); + let token = short_parse(Rule::NamedBucket, &named_bucket_string); + let named_bucket = parse_named_bucket(token).unwrap(); - let expected_value = Content { - text: snake_case, - probability: probability, - content_type: ContentType::NamedBucket, - ..Default::default() - }; - assert_eq!(named_bucket, expected_value); - } + let probability_token = short_parse(Rule::Probability, &probability_string); + let probability = parse_probability(probability_token); + let expected_value = Block { + text: snake_case, + probability: probability, + blocks_type: BlockType::NamedBucket, + ..Default::default() + }; + assert_eq!(named_bucket, expected_value); + } + */ #[test] fn parse_choice_correctly() { //Choice = { "*" ~ " "* ~ Probability? ~ String } @@ -510,12 +541,14 @@ mod test { let probability_token = short_parse(Rule::Probability, &probability_string); let probability = parse_probability(probability_token); - let expected_value = Content { - text: string, - probability: probability, - content_type: ContentType::Choice, + let expected_settings = BlockSettings { + chance: probability, ..Default::default() }; + let expected_value = Block::Choice { + id: string, + settings: expected_settings, + }; assert_eq!(choice, expected_value); } @@ -523,7 +556,7 @@ mod test { fn parse_text_correctly() { //Text = { Probability? ~ String } - let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); + let float = rand::thread_rng().gen_range(0 as f32..1 as f32); let probability_string = format!("({})", float); let string = make_random_string(); @@ -535,20 +568,27 @@ mod test { let probability_token = short_parse(Rule::Probability, &probability_string); let probability = parse_probability(probability_token); - let expected_value = Content { - text: string, - probability: probability, - content_type: ContentType::Text, + let expected_settings = BlockSettings { + chance: probability, ..Default::default() }; + + let expected_value = Block::Text { + id: string, + settings: expected_settings, + }; assert_eq!(text, expected_value); } #[test] - fn command_gets_added_to_content_correctly() { - let mut content = Content::default(); - let mut expected_content = Content::default(); + fn command_gets_added_to_blocks_correctly() { + let text_id = make_random_string(); + let mut block = Block::Text { + id: text_id.clone(), + settings: BlockSettings::default(), + }; + let mut block_settings = BlockSettings::default(); // //Command = {NEWLINE ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert) } //Modifier @@ -564,12 +604,12 @@ mod test { new_value, }; - expected_content.modifiers.push(expected_modifier); + block_settings.modifiers.push(expected_modifier); let token = short_parse(Rule::Command, &modifier_string); - add_command_to_content(token, &mut content); + add_command_to_block(token, &mut block); - //Divert + /* //Divert let knot = make_random_identifier(); let divert_string = format!("\n -> {}", knot); @@ -577,10 +617,10 @@ mod test { knot: knot.clone(), stitch: None, }; - expected_content.divert.push(expected_divert); + expected_blocks.divert.push(expected_divert); let token = short_parse(Rule::Command, &divert_string); - add_command_to_content(token, &mut content); + add_command_to_blocks(token, &mut blocks); */ //Frequency @@ -590,15 +630,15 @@ mod test { let change_value: f32 = rand::thread_rng().gen(); let frequency_string = format!("\n freq {} {}", condition_string, change_value); - let expected_frequency = Frequency { + let expected_frequency = FrequencyModifier { condition, - change_value, + value: change_value, }; - expected_content.frequency_changes.push(expected_frequency); + block_settings.frequency_modifiers.push(expected_frequency); let token = short_parse(Rule::Command, &frequency_string); - add_command_to_content(token, &mut content); + add_command_to_block(token, &mut block); //Requirement @@ -609,13 +649,19 @@ mod test { let requirement_string = format!("\n req {}", condition_string); let expected_requirement = Requirement { condition }; - expected_content.requirements.push(expected_requirement); + block_settings.requirements.push(expected_requirement); let token = short_parse(Rule::Command, &requirement_string); - add_command_to_content(token, &mut content); + add_command_to_block(token, &mut block); + + let expected_block = Block::Text { + id: text_id, + settings: block_settings, + }; - assert_eq!(content, expected_content); + assert_eq!(block, expected_block); } + /* #[test] fn parse_divert_correctly() { //Divert = { "->" ~ " "* ~ Identifier ~ ("." ~ Identifier)? } @@ -645,7 +691,7 @@ mod test { let divert = parse_divert(token).unwrap(); assert_eq!(divert, expected_value); - } + } */ #[test] fn parse_modifier_correctly() { @@ -677,9 +723,9 @@ mod test { let change_value: f32 = rand::thread_rng().gen(); let frequency_string = format!("freq {} {}", condition_string, change_value); - let expected_value = Frequency { + let expected_value = FrequencyModifier { condition, - change_value, + value: change_value, }; let token = short_parse(Rule::Frequency, &frequency_string); @@ -774,46 +820,46 @@ mod test { Operator::NotEqual ); } - #[test] - fn percentage_probability_parse_correctly() { - //probability = { "(" ~ " "* ~ ( percentage | float | integer ) ~ " "* ~ ")" ~ " "* } - let percentage = rand::thread_rng().gen_range(u8::MIN..u8::MAX); - let expected_value: PercentageProbability = PercentageProbability { value: percentage }; + /* #[test] + fn percentage_probability_parse_correctly() { + //probability = { "(" ~ " "* ~ ( percentage | float | integer ) ~ " "* ~ ")" ~ " "* } + let percentage = rand::thread_rng().gen_range(u8::MIN..u8::MAX); + let expected_value: PercentageProbability = PercentageProbability { value: percentage }; - let probability_string = format!("({}%)", percentage); + let probability_string = format!("({}%)", percentage); - let token = short_parse(Rule::Probability, &probability_string); + let token = short_parse(Rule::Probability, &probability_string); - let probability = parse_probability(token).unwrap(); - let probability = probability - .as_any() - .downcast_ref::() - .unwrap(); + let probability = parse_probability(token).unwrap(); + let probability = probability + .as_any() + .downcast_ref::() + .unwrap(); - assert_eq!(*probability, expected_value); - } + assert_eq!(*probability, expected_value); + } - #[test] - fn float_probability_parse_correctly() { - let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); - let expected_value = FloatProbability { value: float }; + #[test] + fn float_probability_parse_correctly() { + let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); + let expected_value = FloatProbability { value: float }; - let probability_string = format!("({})", float); + let probability_string = format!("({})", float); - let token = PalabritasParser::parse(Rule::Probability, &probability_string) - .expect("unsuccessful parse") - .next() - .unwrap(); + let token = PalabritasParser::parse(Rule::Probability, &probability_string) + .expect("unsuccessful parse") + .next() + .unwrap(); - let probability = parse_probability(token).unwrap(); - let probability = probability - .as_any() - .downcast_ref::() - .unwrap(); - - assert_eq!(*probability, expected_value); - } + let probability = parse_probability(token).unwrap(); + let probability = probability + .as_any() + .downcast_ref::() + .unwrap(); + assert_eq!(*probability, expected_value); + } + */ #[test] fn parse_char_rule() { //char = { ASCII_ALPHANUMERIC | "." | "_" | "/" | "," | ";" | "'" | " " | "?" | "!" | "¿" | "¡"} @@ -850,7 +896,7 @@ mod test { #[test] fn parse_indentation_rule() { - //indentation = { " " | "\t" } + //indentation = { " } for indentation in INDENTATIONS { assert_parse_rule(Rule::Indentation, &indentation); } @@ -996,17 +1042,17 @@ mod test { } #[test] - fn parse_knot_rule() { - //Knot = {"===" ~ " "* ~ Identifier ~ " "* ~"===" ~ " "* ~ NEWLINE ~ ( NEWLINE | BlockContent | Stitch | NamedBucket )* } + fn parse_section_rule() { + //Knot = {"===" ~ " "* ~ Identifier ~ " "* ~"===" ~ " "* ~ NEWLINE ~ ( NEWLINE | BlockBlock | Stitch | NamedBucket )* } let identifier = make_random_identifier(); - assert_parse_rule(Rule::Knot, &("===".to_string() + &identifier + "===\n")); + assert_parse_rule(Rule::Section, &("#".to_string() + &identifier + "\n")); } #[test] - fn parse_stitch_rule() { + fn parse_subsection_rule() { //stitch = {"=" ~ " "* ~ identifier ~ " "*} let identifier = make_random_identifier(); - assert_parse_rule(Rule::Stitch, &("=".to_string() + &identifier)); + assert_parse_rule(Rule::Subsection, &("##".to_string() + &identifier)); } #[test] @@ -1042,25 +1088,25 @@ mod test { ); } - #[test] - fn parse_block_content_rule() { - //BlockContent = { - // (choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* - //} - - let choice = "*".to_string() + &make_random_string(); - assert_parse_rule(Rule::BlockContent, &choice); + /* #[test] + fn parse_block_blocks_rule() { + //BlockBlock = { + // (choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* + //} - let text = make_random_string(); - assert_parse_rule(Rule::BlockContent, &text); + let choice = "*".to_string() + &make_random_string(); + assert_parse_rule(Rule::BlockBlock, &choice); - let new_block = "\n ".to_string() + &make_random_string(); - assert_parse_rule(Rule::BlockContent, &(text + &new_block)); - } + let text = make_random_string(); + assert_parse_rule(Rule::BlockBlock, &text); + let new_block = "\n ".to_string() + &make_random_string(); + assert_parse_rule(Rule::BlockBlock, &(text + &new_block)); + } + */ #[test] fn parse_file_rule() { - //File = { SOI ~ (NEWLINE | BlockContent | Knot )* ~ EOI } + //File = { SOI ~ (NEWLINE | BlockBlock | Knot )* ~ EOI } let unparsed_file = include_str!("../../examples/story-example.cuentitos"); assert_parse_rule(Rule::File, &unparsed_file); } diff --git a/palabritas-parser/src/palabritas.pest b/palabritas/src/palabritas.pest similarity index 72% rename from palabritas-parser/src/palabritas.pest rename to palabritas/src/palabritas.pest index c50d7b7..6fafe2e 100644 --- a/palabritas-parser/src/palabritas.pest +++ b/palabritas/src/palabritas.pest @@ -1,9 +1,9 @@ -Char = { ASCII_ALPHANUMERIC | "." | "_" | "/" | "," | ";" | "'" | " " | "?" | "!" | "¿" | "¡"} +Char = { (!NEWLINE ~ ANY)+ } Integer = { "-"? ~ ASCII_DIGIT+ } Float = { Integer ~ "." ~ ASCII_DIGIT* } Percentage = { Integer ~ "%" } -Indentation = { " " | "\t" } -String = { Char+ } +Indentation = { " " } +String = @{ Char+ } ComparisonOperator = { "!=" | "=" | "<=" | ">=" | "<" | ">" | "!" } SnakeCase = { ASCII_ALPHA_LOWER ~ (ASCII_ALPHA_LOWER | "_" | ASCII_DIGIT)* } @@ -15,13 +15,14 @@ Requirement = { "req" ~ " "+ ~ Condition } Frequency = { "freq" ~ " "+ ~ Condition ~ " "+ ~ ( Float | Integer ) } Modifier = { "mod" ~ " "+ ~ Identifier ~ " "+ ~ Value} Divert = { "->" ~ " "* ~ Identifier ~ ("." ~ Identifier)? } +Function = {"`" ~ SnakeCase ~ (" " ~ Value)* ~ "`"} -Command = {NEWLINE ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert) } +Command = {NEWLINE ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert | Function) } Probability = { "(" ~ " "* ~ ( Percentage | Float | Integer ) ~ " "* ~ ")" ~ " "* } -Knot = {"===" ~ " "* ~ Identifier ~ " "* ~"===" ~ " "* ~ NEWLINE ~ ( NEWLINE | BlockContent | Stitch )* } -Stitch = {"=" ~ " "* ~ Identifier} +Section = {"#" ~ " "* ~ Identifier ~ " "* ~ NEWLINE ~ ( NEWLINE | Block | Subsection )* } +Subsection = { "##" ~ " "* ~ Identifier ~ " "* ~ (NEWLINE | EOI) ~ NewBlock*} Text = { Probability? ~ String } Choice = { "*" ~ " "* ~ Probability? ~ String } @@ -29,15 +30,15 @@ NamedBucket = { "[" ~ " "* ~ Probability? ~ SnakeCase ~ " "* ~ "]" } NewBlock = { // The first line in the block - PEEK_ALL ~ PUSH( Indentation+ ) ~ BlockContent ~ + PEEK_ALL ~ PUSH( Indentation+ ) ~ Block ~ // Subsequent lines in the block - (PEEK_ALL ~ BlockContent)* ~ + (PEEK_ALL ~ Block)* ~ // Remove the last layer of indentation from the stack when exiting the block DROP } -BlockContent = { +Block = { (NamedBucket | Choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* } -File = { SOI ~ (NEWLINE | BlockContent | Knot )* ~ EOI } \ No newline at end of file +File = { SOI ~ (NEWLINE | Block | Section )* ~ EOI } \ No newline at end of file diff --git a/runtime-c/Cargo.toml b/runtime-c/Cargo.toml deleted file mode 100644 index bbe70e9..0000000 --- a/runtime-c/Cargo.toml +++ /dev/null @@ -1,19 +0,0 @@ -[package] -name = "cuentitos-runtime-c" -version = "0.1.0" -edition = "2021" - -[lib] -crate-type = ["staticlib"] - -[build-dependencies] -cbindgen = "0.1.29" - -[dependencies] -cuentitos-common = { path = "../common" } -cuentitos-runtime = { path = "../runtime" } - -serde = { version = "1.0.144", features = ["derive"] } -rmp-serde = "1.1.1" -rmp = "^0.8" -libc = "0.2.139" diff --git a/runtime-c/src/lib.rs b/runtime-c/src/lib.rs deleted file mode 100644 index e1f4185..0000000 --- a/runtime-c/src/lib.rs +++ /dev/null @@ -1,369 +0,0 @@ -use core::fmt::Display; -use cuentitos_common::Database; -use cuentitos_runtime::Runtime; -use rmp_serde::Serializer; -use serde::Serialize; -use std::ffi::CStr; -use std::slice; - -type Cstring = *const libc::c_char; -type RuntimeId = usize; -type DatabaseId = usize; - -#[repr(C)] -pub enum TimeOfDay { - Morning, - Noon, - Evening, - Night, -} - -static mut DATABASES: Vec = vec![]; -static mut RUNTIMES: Vec = vec![]; - -#[no_mangle] -pub extern "C" fn cuentitos_load_db(buffer: *const u8, length: usize) -> DatabaseId { - if buffer.is_null() { - return 0; - } - - let rust_buffer: &[u8] = unsafe { slice::from_raw_parts(buffer, length as usize) }; - let db = Database::from_u8(rust_buffer); - - match db { - Ok(db) => unsafe { - let id = DATABASES.len(); - DATABASES.push(db); - id - }, - Err(err) => { - println!("Error Loading DB: {}", err); - 0 - } - } -} - -#[no_mangle] -pub extern "C" fn cuentitos_new_runtime(id: DatabaseId) -> RuntimeId { - unsafe { - if DATABASES.len() > id { - let runtime = Runtime::new(DATABASES[id].clone()); - let id = RUNTIMES.len(); - RUNTIMES.push(runtime); - id - } else { - panic!("Database {} does not exist.", id) - } - } -} - -pub extern "C" fn cuentitos_set_locale(id: RuntimeId, locale: Cstring) -> bool { - if invalid_runtime(id) { - return false; - } - - get_runtime(id).set_locale(rust_string(locale)) == Ok(()) -} - -#[no_mangle] -pub extern "C" fn cuentitos_set_seed(id: RuntimeId, seed: u64) { - if invalid_runtime(id) { - return; - } - get_runtime(id).set_seed(seed); -} - -#[no_mangle] -pub extern "C" fn cuentitos_set_int_variable(id: RuntimeId, variable: Cstring, value: i32) -> bool { - set_variable(id, variable, value) -} - -#[no_mangle] -pub extern "C" fn cuentitos_set_float_variable( - id: RuntimeId, - variable: Cstring, - value: f32, -) -> bool { - set_variable(id, variable, value) -} - -#[no_mangle] -pub extern "C" fn cuentitos_set_bool_variable( - id: RuntimeId, - variable: Cstring, - value: bool, -) -> bool { - set_variable(id, variable, value) -} - -#[no_mangle] -pub extern "C" fn cuentitos_get_int_variable( - id: RuntimeId, - variable: Cstring, - value: *mut i32, -) -> bool { - get_variable(id, variable, value) -} - -#[no_mangle] -pub extern "C" fn cuentitos_get_float_variable( - id: RuntimeId, - variable: Cstring, - value: *mut f32, -) -> bool { - get_variable(id, variable, value) -} - -#[no_mangle] -pub extern "C" fn cuentitos_get_bool_variable( - id: RuntimeId, - variable: Cstring, - value: *mut bool, -) -> bool { - get_variable(id, variable, value) -} - -#[no_mangle] -pub extern "C" fn cuentitos_set_item(id: RuntimeId, item: Cstring, value: u8) -> bool { - if invalid_runtime(id) { - return false; - } - if item.is_null() { - return false; - } - let item = rust_string(item); - Ok(()) == get_runtime(id).set_item(item, value) -} - -#[no_mangle] -pub extern "C" fn cuentitos_set_time_of_day(id: RuntimeId, time_of_day: TimeOfDay) -> bool { - if invalid_runtime(id) { - return false; - } - - match time_of_day { - TimeOfDay::Morning => get_runtime(id).set_time_of_day(cuentitos_common::TimeOfDay::Morning), - TimeOfDay::Noon => get_runtime(id).set_time_of_day(cuentitos_common::TimeOfDay::Noon), - TimeOfDay::Evening => get_runtime(id).set_time_of_day(cuentitos_common::TimeOfDay::Evening), - TimeOfDay::Night => get_runtime(id).set_time_of_day(cuentitos_common::TimeOfDay::Night), - } - true -} - -#[no_mangle] -pub extern "C" fn cuentitos_get_reputation( - id: RuntimeId, - reputation: Cstring, - value: *mut i32, -) -> bool { - if invalid_runtime(id) { - return false; - } - if reputation.is_null() { - return false; - } - if value.is_null() { - return false; - } - - let reputation = rust_string(reputation); - if let Ok(reputation_value) = get_runtime(id).get_reputation(reputation) { - unsafe { *value = reputation_value } - return true; - } - false -} - -#[no_mangle] -pub extern "C" fn cuentitos_get_decision( - id: RuntimeId, - decision: Cstring, - value: *mut bool, -) -> bool { - if invalid_runtime(id) { - return false; - } - if decision.is_null() { - return false; - } - if value.is_null() { - return false; - } - - let decision = rust_string(decision); - unsafe { *value = get_runtime(id).decision_taken(decision) } - true -} - -#[no_mangle] -pub extern "C" fn cuentitos_get_items(id: usize, buffer: *mut u8, length: *mut usize) { - if buffer.is_null() { - return; - } - if length.is_null() { - return; - } - if invalid_runtime(id) { - return; - } - - serialize_to_buffer(&get_runtime(id).database.items, buffer, length); -} - -#[no_mangle] -pub extern "C" fn cuentitos_next_event(id: usize, buffer: *mut u8, length: *mut usize) { - if buffer.is_null() { - return; - } - if length.is_null() { - return; - } - if invalid_runtime(id) { - return; - } - - if let Some(event) = get_runtime(id).next_event() { - serialize_to_buffer(&event, buffer, length); - } else { - zero(length) - } -} - -#[no_mangle] -pub extern "C" fn cuentitos_set_choice( - id: usize, - choice_id: usize, - buffer: *mut u8, - length: *mut usize, -) -> bool { - if buffer.is_null() { - return false; - } - if length.is_null() { - return false; - } - if invalid_runtime(id) { - return false; - } - - match get_runtime(id).set_choice(choice_id) { - Ok(modifiers) => { - serialize_to_buffer(&modifiers, buffer, length); - true - } - Err(_) => false, - } -} - -#[no_mangle] -pub extern "C" fn cuentitos_current_modifiers( - id: usize, - buffer: *mut u8, - length: *mut usize, -) -> bool { - if buffer.is_null() { - return false; - } - if length.is_null() { - return false; - } - if invalid_runtime(id) { - return false; - } - - if let Some(modifiers) = get_runtime(id).current_modifiers() { - serialize_to_buffer(&modifiers, buffer, length); - return true; - } - - false -} - -fn set_variable(id: RuntimeId, variable: Cstring, value: T) -> bool -where - T: Display, -{ - if invalid_runtime(id) { - return false; - } - if variable.is_null() { - return false; - } - let variable = rust_string(variable); - Ok(()) == get_runtime(id).set_variable(variable, value) -} - -fn get_variable(id: RuntimeId, variable: Cstring, value: *mut T) -> bool -where - T: Display + std::str::FromStr + std::default::Default, -{ - if invalid_runtime(id) { - return false; - } - if variable.is_null() { - return false; - } - if value.is_null() { - return false; - } - - let runtime = get_runtime(id); - let variable = rust_string(variable); - if let Ok(variable_value) = runtime.get_variable(variable) { - unsafe { - *value = variable_value; - return true; - } - } - false -} - -fn invalid_runtime(id: usize) -> bool { - unsafe { id >= RUNTIMES.len() } -} - -fn get_runtime(id: usize) -> &'static mut Runtime { - unsafe { &mut RUNTIMES[id] } -} - -fn rust_string(string: Cstring) -> String { - unsafe { CStr::from_ptr(string) } - .to_str() - .unwrap_or_default() - .to_string() -} - -fn serialize(element: U) -> cuentitos_common::Result> -where - U: Serialize, -{ - let mut result: Vec = Vec::new(); - element.serialize(&mut Serializer::new(&mut result))?; - Ok(result) -} - -fn serialize_to_buffer(element: &U, buffer: *mut u8, length: *mut usize) -where - U: Serialize, -{ - if buffer.is_null() { - return; - } - if length.is_null() { - return; - } - let serialized = serialize(element).unwrap_or_default(); - unsafe { - *length = serialized.len(); - std::ptr::copy_nonoverlapping(serialized.as_ptr(), buffer, serialized.len()); - } -} - -fn zero(length: *mut usize) { - if length.is_null() { - return; - } - unsafe { - *length = 0; - } -} diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index f2fbb2a..d7aaa9b 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cuentitos-runtime" -version = "0.1.0" +version = "0.2.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/runtime/src/game_state.rs b/runtime/src/game_state.rs deleted file mode 100644 index c5b36c4..0000000 --- a/runtime/src/game_state.rs +++ /dev/null @@ -1,16 +0,0 @@ -use cuentitos_common::ItemId; -use cuentitos_common::ReputationId; -use cuentitos_common::TimeOfDay; -use cuentitos_common::VariableId; -use serde::{Deserialize, Serialize}; -use std::collections::HashMap; - -#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Clone, Eq)] -pub struct GameState { - pub variables: HashMap, - pub items: HashMap, - pub reputations: HashMap, - pub time_of_day: TimeOfDay, - pub decisions: Vec, - pub tile: String, -} diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index ac5c26c..427a2ab 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -1,15 +1,4 @@ mod runtime; -pub use runtime::Runtime; - -mod runtime_state; -pub use runtime_state::RuntimeState; - -mod game_state; -pub use game_state::GameState; - -mod runtime_datatypes; pub use cuentitos_common::Database; -pub use runtime_datatypes::Event; -pub use runtime_datatypes::EventChoice; -pub use runtime_datatypes::EventResult; -pub use runtime_datatypes::Modifier; +pub use runtime::Block; +pub use runtime::Runtime; diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index c79eae9..1ebb99a 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -1,1951 +1,560 @@ -use cuentitos_common::EventChoice; -use cuentitos_common::EventResult; -use cuentitos_common::Modifier; -use cuentitos_common::ReputationId; -use cuentitos_common::TimeOfDay; - -use cuentitos_common::Condition; -use cuentitos_common::Event; -use cuentitos_common::EventRequirement; -use cuentitos_common::VariableKind; -use rand::Rng; -use rand::SeedableRng; - -use crate::GameState; -use crate::RuntimeState; +use std::println; +use cuentitos_common::BlockId; use cuentitos_common::Database; -use cuentitos_common::EventId; +use rand::Rng; +use rand::SeedableRng; use rand_pcg::Pcg32; - -use rmp_serde::Deserializer; -use rmp_serde::Serializer; use serde::{Deserialize, Serialize}; -use std::collections::HashMap; -use std::fmt::Display; -use std::fs; -use std::fs::File; -use std::io::Read; -use std::io::Write; -use std::path::Path; - -#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Clone, Eq)] + +#[derive(Debug, Default, Serialize, Deserialize, PartialEq)] +pub struct Block { + pub text: String, + pub choices: Vec, +} + +#[derive(Debug, Default, Serialize, Deserialize, PartialEq)] pub struct Runtime { - pub database: Database, - id_to_index: HashMap, - state: RuntimeState, - game_state: GameState, + pub file: Database, + pub block_stack: Vec, #[serde(skip)] rng: Option, seed: u64, } impl Runtime { - pub fn new(database: Database) -> Runtime { - let mut runtime = Runtime { - database, + pub fn new(file: Database) -> Runtime { + Runtime { + file, ..Default::default() - }; - - for index in 0..runtime.database.events.len() { - let id = &runtime.database.events[index].id; - runtime.id_to_index.insert(id.clone(), index); - } - - runtime.state.current_locale = runtime.database.i18n.default_locale.clone(); - - runtime - } - - pub fn get(&self, event_id: EventId) -> Option<&Event> { - match self.id_to_index.get(&event_id) { - Some(index) => self.database.events.get(*index), - None => None, } } - pub fn next_event(&mut self) -> Option { - // Update previous event frequencies - for value in self.state.previous_event_cooldown.values_mut() { - *value += self.database.config.runtime.event_frequency_cooldown as i32; - } - - // Use frequency of each event given current state for the random selection - let frequencies = frequency_sum(self.event_frequencies()); - - if let Some(max) = frequencies.last() { - if let Some(num) = random_with_max(self, *max) { - let mut index = 0; - - for freq in frequencies { - if num <= freq { - let event_id = self.available_events()[index].clone(); - return self.load_event(event_id); - } else { - index += 1; - }; - } - } - None - } else { - None - } - } - - pub fn load_event(&mut self, event_id: T) -> Option - where - T: AsRef, - { - let event_id = event_id.as_ref().to_string(); - - let index = *self.id_to_index.get(&event_id)?; - let event = &self.database.events[index]; - - self.state.current_event = Some(index); - - // Disable event if unique - if event.unique { - self.state.disabled_events.push(event_id.clone()) - } - - // Add current event to previous events list - if !self.state.previous_events.contains(&event_id) { - self.state.previous_events.push(event_id.clone()) - }; - - // Add new frequency penalty for current event - self.state.previous_event_cooldown.insert( - event.id.clone(), - self.database.config.runtime.chosen_event_frequency_penalty, - ); - - Some(crate::Event::from_cuentitos( - event, - &self.database.i18n, - &self.state.current_locale, - )) - } - pub fn set_seed(&mut self, seed: u64) { self.seed = seed; self.rng = Some(Pcg32::seed_from_u64(seed)); } - pub fn set_locale(&mut self, locale: T) -> Result<(), String> - where - T: AsRef, - { - let locale = locale.as_ref().to_string(); - if self.database.i18n.has_locale(&locale) { - self.state.current_locale = locale; - return Ok(()); - } else { - return Err("Missing Locale".to_string()); + pub fn next_block(&mut self) -> Option { + if self.file.blocks.is_empty() { + return None; } - } - pub fn set_choice(&mut self, choice_id: usize) -> Result { - if let Some(event) = current_event(self) { - if event.choices.len() > choice_id { - let choice = &event.choices[choice_id]; + self.update_stack(); - let mut available = true; + while !self.roll_chances_for_next_block() { + self.update_stack(); + } - for requirement in &choice.requirements { - available = available && self.requirement_met(&requirement); - } + self.get_next_block_output() + } - if available { - self.state.current_choice = Some(choice_id); - if let Some(result) = self.random_result() { - if let Some(modifiers) = self.current_modifiers() { - let event_result = crate::EventResult::from_cuentitos( - &result, - &self.database.i18n, - &self.state.current_locale, - modifiers, - ); - return Ok(event_result); - } else { - return Err("Invalid modifiers".to_string()); - } - } else { - return Err("Invalid results".to_string()); + pub fn roll_chances_for_next_block(&mut self) -> bool { + if let Some(last_block) = self.block_stack.last() { + let chance = self.get_block(*last_block).get_settings().chance; + match chance { + Some(chance) => { + if let Some(random_number) = self.random_float() { + return random_number < chance; } - } else { - self.state.current_event = None; - return Err("Requirements for choice not met".to_string()); + return false; } - } else { - self.state.current_choice = None; + None => return true, } - Err("Invalid choice".to_string()) - } else { - self.state.current_event = None; - Err("No event has been drawn".to_string()) } + false } - pub fn current_modifiers(&self) -> Option> { - let mut v = vec![]; - - let result = current_result(self)?; - for modifier in &result.modifiers { - let modifier = modifier.clone(); - match modifier { - Modifier::Variable { id, value } => v.push(crate::Modifier { - kind: "variable".to_string(), - id, - value, - }), - Modifier::Item { id, value } => v.push(crate::Modifier { - kind: "item".to_string(), - id, - value, - }), - Modifier::Reputation { id, value } => v.push(crate::Modifier { - kind: "reputation".to_string(), - id, - value, - }), - Modifier::Decision(id) => v.push(crate::Modifier { - kind: "decision".to_string(), - id, - value: String::default(), - }), - Modifier::Achievement(id) => v.push(crate::Modifier { - kind: "achievement".to_string(), - id, - value: String::default(), - }), - _ => {} - } + pub fn pick_choice(&mut self, choice: usize) -> Option { + if self.file.blocks.is_empty() { + return None; } - Some(v) - } + let choices = self.get_choices(); - pub fn set_variable(&mut self, variable: R, value: T) -> Result<(), String> - where - T: Display, - R: AsRef, - { - let variable = variable.as_ref().to_string(); - if self.database.config.variables.contains_key(&variable) { - let t = std::any::type_name::(); - if (t == "i32" && self.database.config.variables[&variable] == VariableKind::Integer) - || (t == "f32" && self.database.config.variables[&variable] == VariableKind::Float) - || (t == "bool" && self.database.config.variables[&variable] == VariableKind::Bool) - { - self - .game_state - .variables - .insert(variable, value.to_string()); - } else { - return Err("Invalid Variable Type".to_string()); - } - } else { - return Err("Invalid Variable".to_string()); + if choices.is_empty() { + println!("There are no choices"); + return None; } - Ok(()) - } - pub fn get_variable_kind(&self, variable: R) -> Option - where - R: AsRef, - { - let variable = variable.as_ref(); - - if self.database.config.variables.contains_key(variable) { - Some(self.database.config.variables[variable].clone()) - } else { - None + if choice >= choices.len() { + println!("There's only {} options", choices.len()); + return None; } - } - pub fn get_variable(&self, variable: R) -> Result - where - T: Display + std::str::FromStr + Default, - R: AsRef, - { - let variable = variable.as_ref().to_string(); - if self.database.config.variables.contains_key(&variable) { - let t = std::any::type_name::(); - - if (t == "i32" && self.database.config.variables[&variable] == VariableKind::Integer) - || (t == "f32" && self.database.config.variables[&variable] == VariableKind::Float) - || (t == "bool" && self.database.config.variables[&variable] == VariableKind::Bool) - { - let value = match self.game_state.variables.get(&variable) { - Some(value) => value.clone(), - None => T::default().to_string(), - }; - - if let Ok(value) = value.parse::() { - return Ok(value); - } else { - return Err("Unknown Parsing Error".to_string()); - } - } - } else { - return Err("Invalid Variable".to_string()); + if choices[choice] >= self.file.blocks.len() { + println!("Invalid option"); + return None; } - return Err("Invalid Variable".to_string()); - } - pub fn set_item(&mut self, item: T, count: u8) -> Result<(), String> - where - T: AsRef, - { - let item = item.as_ref().to_string(); - if self - .database - .items - .iter() - .map(|i| i.id.clone()) - .collect::() - .contains(&item) - { - self.game_state.items.insert(item, count); - Ok(()) - } else { - Err("Invalid Item".to_string()) - } - } - - pub fn set_time_of_day(&mut self, time_of_day: TimeOfDay) { - self.game_state.time_of_day = time_of_day; + self.block_stack.push(choices[choice]); + self.next_block() } - pub fn get_reputation(&self, reputation_id: T) -> Result - where - T: AsRef, - { - let reputation = self.game_state.reputations.get(reputation_id.as_ref()); - match reputation { - Some(reputation) => Ok(*reputation), - None => { - validate_reputation(&self.database.config.reputations, reputation_id)?; - Ok(0) - } + fn random_float(&mut self) -> Option { + if self.rng.is_none() { + self.rng = Some(Pcg32::from_entropy()) } - } - pub fn decision_taken(&self, decision_id: T) -> bool - where - T: AsRef, - { - self - .game_state - .decisions - .contains(&decision_id.as_ref().to_string()) - } + let mut rng = self.rng.as_ref()?.clone(); + let num = rng.gen(); - pub fn save(&self, path: T) -> cuentitos_common::Result<()> - where - T: AsRef, - { - let mut buf: Vec = Vec::new(); - let mut serializer = Serializer::new(&mut buf); - self.serialize(&mut serializer)?; - let mut file = File::create(path)?; - file.write_all(&buf)?; - Ok(()) + self.rng = Some(rng); + Some(num) } - pub fn load(path: T) -> cuentitos_common::Result - where - T: AsRef, - { - let mut f = File::open(&path)?; - let metadata = fs::metadata(&path)?; - let mut buffer = vec![0; metadata.len() as usize]; - f.read_exact(&mut buffer)?; - let buf: &[u8] = &buffer; - let mut de = Deserializer::new(buf); - let runtime: std::result::Result = - Deserialize::deserialize(&mut de); - match runtime { - Ok(runtime) => Ok(runtime), - Err(error) => Err(Box::new(error)), + fn get_next_block_output(&self) -> Option { + let id = self.block_stack.last().unwrap(); + let block = self.get_block(*id); + if let cuentitos_common::Block::Text { id, settings: _ } = block { + println!("USE I18n!!!"); + return Some(Block { + text: id.clone(), + choices: self.get_choices_strings(), + }); } - } - - fn add_reputation(&mut self, reputation_id: T, value: i32) -> Result<(), String> - where - T: AsRef, - { - validate_reputation(&self.database.config.reputations, &reputation_id)?; - let reputation_id = reputation_id.as_ref(); - let reputation = self.game_state.reputations.get(reputation_id); - match reputation { - Some(reputation) => self - .game_state - .reputations - .insert(reputation_id.to_string(), reputation + value), - None => self - .game_state - .reputations - .insert(reputation_id.to_string(), value), - }; - Ok(()) - } - fn set_decision(&mut self, decision_id: T) - where - T: AsRef, - { - self - .game_state - .decisions - .push(decision_id.as_ref().to_string()); + None } - fn random_result(&mut self) -> Option { - self.state.current_result = None; - - let choice = current_choice(self)?.clone(); - let frequencies = choice.results.iter().map(|r| r.chance).collect(); - let frequencies = frequency_sum(frequencies); - let max = frequencies.last()?; - let num = random_with_max(self, *max)?; - - let index = index_for_freq(num, frequencies); - let result = choice.results.get(index)?; - for modifier in &result.modifiers { - if let Ok(()) = self.apply_modifier(modifier) {} + fn update_stack(&mut self) { + if self.block_stack.is_empty() { + self.block_stack.push(0); + return; } - self.state.current_result = Some(index); - Some(result.clone()) - } + let last_block_id = self.block_stack.last().unwrap(); - fn apply_modifier(&mut self, modifier: &cuentitos_common::Modifier) -> Result<(), String> { - match modifier { - Modifier::Reputation { id, value } => match value.parse::() { - Ok(value) => self.add_reputation(id, value), - Err(error) => Err(format!("Couldn't parse value: {}", error)), - }, - Modifier::Decision(id) => Ok(self.set_decision(id)), - _ => Ok(()), + if last_block_id >= &self.file.blocks.len() { + return; } - } - - fn available_events(&self) -> Vec { - let mut result = vec![]; - - for event in &self.database.events { - if !self.state.disabled_events.contains(&event.id) && // Event is not disabled (unique that was chosen) - (!self.state.previous_event_cooldown.contains_key(&event.id) // Event has not been chosen before, or cooldown happened - || self.state.previous_event_cooldown[&event.id] >= 0) && // + let last_block = self.get_block(*last_block_id); - self.variable_requirements_met(event) + let settings = last_block.get_settings(); + if !settings.children.is_empty() { + if let cuentitos_common::Block::Choice { id: _, settings: _ } = + self.get_block(settings.children[0]) { - result.push(event.id.clone()); + println!("Make a choice\n"); + return; } + self.block_stack.push(settings.children[0]); + return; } - result + + self.pop_stack_and_find_next(); } - fn variable_requirements_met(&self, event: &Event) -> bool { - let mut result = true; + fn pop_stack_and_find_next(&mut self) { + let last_block_id = *self.block_stack.last().unwrap(); - for requirement in &event.requirements { - result = result && self.requirement_met(requirement) - } + let last_block = self.get_block(last_block_id).clone(); - result - } - - fn requirement_met(&self, requirement: &EventRequirement) -> bool { - match requirement { - EventRequirement::Variable { - variable, - condition, - value, - } => { - let current_value = self - .game_state - .variables - .get(&variable.id) - .unwrap_or(&"0".to_string()) - .clone(); - match &variable.kind { - VariableKind::Integer => { - let cv = current_value.parse::().unwrap_or(0); - let a = value.parse::().unwrap_or(0); - match condition { - Condition::Equals => return cv == a, - Condition::HigherThan => return cv > a, - Condition::LessThan => return cv < a, - _ => return true, - } - } - VariableKind::Float => { - let cv = current_value.parse::().unwrap_or(0.0); - let a = value.parse::().unwrap_or(0.0); - match condition { - Condition::Equals => return cv == a, - Condition::HigherThan => return cv > a, - Condition::LessThan => return cv < a, - _ => return true, - } - } - VariableKind::Bool => { - let cv = current_value.parse::().unwrap_or(false); - let a = value.parse::().unwrap_or(false); - - if condition == &Condition::Equals { - return cv == a; - } - return true; - } - VariableKind::Enum { .. } => { - if condition == &Condition::Equals { - return current_value == *value; - } else { - return current_value != *value; - } - } - } + let last_settings = last_block.get_settings(); + match &last_settings.next { + cuentitos_common::NextBlock::None => {} + cuentitos_common::NextBlock::BlockId(other_id) => { + self.block_stack.pop(); + self.block_stack.push(*other_id); + return; } - EventRequirement::Item { - id, - condition, - value, - } => { - let cv = *self.game_state.items.get(id).unwrap_or(&0); - let a = value.parse::().unwrap_or(0); - match condition { - Condition::Equals => return cv == a, - Condition::HigherThan => return cv > a, - Condition::LessThan => return cv < a, - _ => return true, - } - } - EventRequirement::Reputation { - id, - condition, - value, - } => { - let cv = *self.game_state.reputations.get(id).unwrap_or(&0); - let a = value.parse::().unwrap_or(0); - match condition { - Condition::Equals => return cv == a, - Condition::HigherThan => return cv > a, - Condition::LessThan => return cv < a, - _ => return true, - } - } - EventRequirement::TimeOfDay { id, condition } => { - let cv = self.game_state.time_of_day.clone(); - match condition { - Condition::Equals => return cv == *id, - Condition::MutEx => return cv != *id, - _ => return true, - } + cuentitos_common::NextBlock::EndOfFile => { + println!("Story finished\n"); + self.block_stack = vec![0]; + return; } - EventRequirement::Decision { id, condition } => match condition { - Condition::Depends => return self.game_state.decisions.contains(id), - Condition::MutEx => return !self.game_state.decisions.contains(id), - _ => return true, - }, - EventRequirement::Event { id, condition } => match condition { - Condition::Depends => return self.state.previous_events.contains(id), - Condition::MutEx => return !self.state.previous_events.contains(id), - _ => return true, - }, - EventRequirement::Empty => true, + cuentitos_common::NextBlock::Section(_) => todo!(), } - } - fn event_frequencies(&self) -> Vec { - let mut result = vec![]; + self.block_stack.pop(); + + if self.block_stack.is_empty() { + self.block_stack.push(last_block_id + 1); + return; + } - for idx in self.available_events() { - let mut freq: u32 = 50; - for requirement in &self.database.events[self.id_to_index[&idx]].requirements { - if self.requirement_met(&requirement) { - freq += self.database.config.runtime.met_requirement_frequency_boost; + let parent_settings = self.file.blocks[*self.block_stack.last().unwrap()].get_settings(); + let mut child_found = false; + for child in &parent_settings.children { + if child_found { + if let cuentitos_common::Block::Choice { id: _, settings: _ } = self.get_block(*child) { + continue; } + self.block_stack.push(*child); + return; + } + if *child == last_block_id { + child_found = true; } - result.push(freq); } - result - } -} - -fn validate_reputation(reputations: &Vec, reputation_id: T) -> Result<(), String> -where - T: AsRef, -{ - if reputations.iter().any(|rep| rep == reputation_id.as_ref()) { - Ok(()) - } else { - Err("Invalid Reputation".to_string()) + self.pop_stack_and_find_next() } -} -fn random_with_max(runtime: &mut Runtime, max: u32) -> Option { - if runtime.rng == None { - runtime.rng = Some(Pcg32::from_entropy()) + fn get_block(&self, id: BlockId) -> &cuentitos_common::Block { + &self.file.blocks[id] } - let mut rng = runtime.rng.as_ref()?.clone(); - let num = rng.gen_range(0..max); - - runtime.rng = Some(rng); - Some(num) -} + fn get_choices_strings(&self) -> Vec { + let choices = self.get_choices(); -fn frequency_sum(frequencies: Vec) -> Vec { - let mut result = vec![]; + let mut choices_strings = Vec::default(); + println!("USE I18n!!!"); + for choice in choices { + if let cuentitos_common::Block::Choice { id, settings: _ } = self.get_block(choice) { + choices_strings.push(id.clone()); + } + } - for freq in frequencies { - let prev = result.last().unwrap_or(&0); - result.push(prev + freq) + choices_strings } - result -} + fn get_choices(&self) -> Vec { + let mut choices = Vec::default(); -fn index_for_freq(num: u32, frequencies: Vec) -> usize { - let mut index = 0; - for freq in frequencies { - if num <= freq { - return index; - } else { - index += 1; + if self.block_stack.is_empty() { + return choices; } - } - return index; -} -fn current_event(runtime: &Runtime) -> Option<&Event> { - let current_event = runtime.state.current_event?; - runtime.database.events.get(current_event) -} + let last_block_id = self.block_stack.last().unwrap(); + let last_block = self.get_block(*last_block_id).clone(); -fn current_choice(runtime: &Runtime) -> Option<&EventChoice> { - let event = current_event(runtime)?; - let choice_id = runtime.state.current_choice?; - event.choices.get(choice_id) -} + let settings = last_block.get_settings(); -fn current_result(runtime: &Runtime) -> Option<&EventResult> { - let choice = current_choice(runtime)?; - let result_id = runtime.state.current_result?; - choice.results.get(result_id) + for child in &settings.children { + if *child < self.file.blocks.len() { + if let cuentitos_common::Block::Choice { id: _, settings: _ } = self.get_block(*child) { + choices.push(*child) + } + } + } + choices + } } #[cfg(test)] mod test { - use crate::runtime::Runtime; - use crate::GameState; - use cuentitos_common::Database; - use cuentitos_common::Event; - use cuentitos_common::*; - use std::collections::HashMap; - #[test] - fn new_runtime_accepts_database() { - let database = Database::default(); - let runtime = Runtime::new(database.clone()); - assert_eq!(runtime.database, database) - } + use std::vec; - #[test] - fn runtime_can_be_saved_and_loaded() { - // TODO(fran): fix this - // let mut path = std::env::temp_dir().to_path_buf(); - // path.push("state_save.mp"); + use crate::Runtime; + use cuentitos_common::{Block, BlockSettings, Database}; - // let db = load_mp_fixture("database").unwrap(); - // let database = Database::from_u8(&db).unwrap(); - // let runtime = Runtime::new(database.clone()); - - // runtime.save(&path).unwrap(); - - // let runtime2 = Runtime::load(path).unwrap(); - - // assert_eq!(runtime, runtime2); + #[test] + fn new_runtime_works_correctly() { + let file = Database { + blocks: vec![Block::default()], + }; + let runtime = Runtime::new(file.clone()); + assert_eq!(runtime.file, file); } #[test] - fn random_event_stores_it_in_current_and_previous_events() { - let db = Database { - events: vec![ - Event { - id: "event-1".to_string(), - ..Default::default() - }, - Event { - id: "event-2".to_string(), - ..Default::default() - }, - ], + fn get_choices_works_correctly() { + let settings = BlockSettings { + children: vec![1, 2, 3], ..Default::default() }; - let mut runtime = Runtime::new(db); - runtime.set_seed(1); + let parent = Block::Text { + id: String::default(), + settings, + }; - let event = runtime.next_event(); + let choice_1 = Block::Choice { + id: String::default(), + settings: BlockSettings::default(), + }; - assert_ne!(event, None); + let choice_2 = Block::Choice { + id: String::default(), + settings: BlockSettings::default(), + }; - assert_eq!(runtime.state.current_event, Some(0)); + let child_text = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; - assert!(runtime - .state - .previous_event_cooldown - .contains_key("event-1")); - runtime.next_event().unwrap(); - assert!(runtime - .state - .previous_event_cooldown - .contains_key("event-2")); - } + let file = Database { + blocks: vec![parent.clone(), choice_1, choice_2, child_text], + }; - #[test] - fn unique_events_show_up_once() { - let db = Database { - events: vec![ - Event { - id: "event-1".to_string(), - unique: true, - ..Default::default() - }, - Event { - id: "event-2".to_string(), - ..Default::default() - }, - ], + let runtime = Runtime { + file, + block_stack: vec![0], ..Default::default() }; - let mut runtime = Runtime::new(db); - runtime.set_seed(1); - runtime.next_event().unwrap(); - assert_eq!(runtime.state.disabled_events, ["event-1"]); - assert_eq!(runtime.available_events(), ["event-2"]); - } + let choices = runtime.get_choices(); + let expected_result = vec![1, 2]; + assert_eq!(choices, expected_result); + } #[test] - fn available_events_ignores_previous_events_in_cooldown_mode() { - let db = Database { - events: vec![ - Event { - id: "event-1".to_string(), - ..Default::default() - }, - Event { - id: "event-2".to_string(), - ..Default::default() - }, - ], + fn get_choices_strings_works_correctly() { + let settings = BlockSettings { + children: vec![1, 2, 3], ..Default::default() }; - let mut runtime = Runtime::new(db); - runtime.set_seed(1); - - let game_state = GameState::default(); - runtime.game_state = game_state; - - assert_eq!(runtime.available_events(), ["event-1", "event-2"]); - assert_eq!(runtime.event_frequencies(), [50, 50]); - - runtime.next_event().unwrap(); - assert_eq!(runtime.available_events(), ["event-2"]); - assert_eq!(runtime.event_frequencies(), [50]); - runtime.next_event().unwrap(); - assert!(runtime.available_events().is_empty()); - assert!(runtime.event_frequencies().is_empty()); - assert_eq!(runtime.next_event(), None); - - // Make sure that after a while it shows up again - for _ in 0..7 { - runtime.next_event(); - } + let parent = Block::Text { + id: String::default(), + settings, + }; - let event = runtime.next_event().unwrap(); - assert_eq!( - event, - crate::Event::from_cuentitos( - &runtime.database.events[0], - &runtime.database.i18n, - &runtime.state.current_locale - ) - ); - assert!(runtime.available_events().is_empty()); - assert!(runtime.event_frequencies().is_empty()); - } + let choice_1 = Block::Choice { + id: "a".to_string(), + settings: BlockSettings::default(), + }; - #[test] - fn requirements_on_integer_variable_are_honored() { - let db = Database { - events: vec![ - Event { - id: "event-variable-integer-higher-than".to_string(), - requirements: vec![EventRequirement::Variable { - variable: Variable { - id: "variable-1".to_string(), - kind: VariableKind::Integer, - }, - condition: Condition::HigherThan, - value: "10".to_string(), - }], - ..Default::default() - }, - Event { - id: "event-variable-integer-less-than".to_string(), - requirements: vec![EventRequirement::Variable { - variable: Variable { - id: "variable-1".to_string(), - kind: VariableKind::Integer, - }, - condition: Condition::LessThan, - value: "10".to_string(), - }], - ..Default::default() - }, - Event { - id: "event-variable-integer-equals".to_string(), - requirements: vec![EventRequirement::Variable { - variable: Variable { - id: "variable-1".to_string(), - kind: VariableKind::Integer, - }, - condition: Condition::Equals, - value: "10".to_string(), - }], - ..Default::default() - }, - ], - ..Default::default() + let choice_2 = Block::Choice { + id: "b".to_string(), + settings: BlockSettings::default(), }; - let variable = "variable-1".to_string(); - - let mut runtime = Runtime::new(db); - - runtime - .game_state - .variables - .insert(variable.clone(), "2".to_string()); - assert_eq!( - runtime.available_events(), - ["event-variable-integer-less-than"] - ); - - assert_eq!(runtime.event_frequencies(), [100]); - - runtime - .game_state - .variables - .insert(variable.clone(), "12".to_string()); - assert_eq!( - runtime.available_events(), - ["event-variable-integer-higher-than"] - ); - - assert_eq!(runtime.event_frequencies(), [100]); - - runtime - .game_state - .variables - .insert(variable, "10".to_string()); - assert_eq!( - runtime.available_events(), - ["event-variable-integer-equals"] - ); - - assert_eq!(runtime.event_frequencies(), [100]); - } + let child_text = Block::Text { + id: "c".to_string(), + settings: BlockSettings::default(), + }; - #[test] - fn requirements_on_float_variable_are_honored() { - let db = Database { - events: vec![ - Event { - id: "event-variable-float-higher-than".to_string(), - requirements: vec![EventRequirement::Variable { - variable: Variable { - id: "variable-1".to_string(), - kind: VariableKind::Float, - }, - condition: Condition::HigherThan, - value: "10.5".to_string(), - }], - ..Default::default() - }, - Event { - id: "event-variable-float-less-than".to_string(), - requirements: vec![EventRequirement::Variable { - variable: Variable { - id: "variable-1".to_string(), - kind: VariableKind::Float, - }, - condition: Condition::LessThan, - value: "10.5".to_string(), - }], - ..Default::default() - }, - Event { - id: "event-variable-float-equals".to_string(), - requirements: vec![EventRequirement::Variable { - variable: Variable { - id: "variable-1".to_string(), - kind: VariableKind::Float, - }, - condition: Condition::Equals, - value: "10.5".to_string(), - }], - ..Default::default() - }, - ], + let file = Database { + blocks: vec![parent.clone(), choice_1, choice_2, child_text], + }; + let runtime = Runtime { + file, + block_stack: vec![0], ..Default::default() }; - - let variable = "variable-1".to_string(); - - let mut runtime = Runtime::new(db); - - runtime - .game_state - .variables - .insert(variable.clone(), "2.5".to_string()); - assert_eq!( - runtime.available_events(), - ["event-variable-float-less-than"] - ); - assert_eq!(runtime.event_frequencies(), [100]); - - runtime - .game_state - .variables - .insert(variable.clone(), "12.5".to_string()); - assert_eq!( - runtime.available_events(), - ["event-variable-float-higher-than"] - ); - - assert_eq!(runtime.event_frequencies(), [100]); - - runtime - .game_state - .variables - .insert(variable, "10.5".to_string()); - assert_eq!(runtime.available_events(), ["event-variable-float-equals"]); - - assert_eq!(runtime.event_frequencies(), [100]); + let choices = runtime.get_choices_strings(); + let expected_result = vec!["a".to_string(), "b".to_string()]; + assert_eq!(choices, expected_result); } - #[test] - fn requirements_on_bool_variable_are_honored() { - let db = Database { - events: vec![ - Event { - id: "event-variable-bool-equals-true".to_string(), - requirements: vec![EventRequirement::Variable { - variable: Variable { - id: "variable-1".to_string(), - kind: VariableKind::Bool, - }, - condition: Condition::Equals, - value: "true".to_string(), - }], - ..Default::default() - }, - Event { - id: "event-variable-bool-equals-false".to_string(), - requirements: vec![EventRequirement::Variable { - variable: Variable { - id: "variable-1".to_string(), - kind: VariableKind::Bool, - }, - condition: Condition::Equals, - value: "false".to_string(), - }], - ..Default::default() - }, - ], + fn updates_stack_to_first_child_correctly() { + let settings = BlockSettings { + children: vec![1, 2], ..Default::default() }; + let parent = Block::Text { + id: String::default(), + settings, + }; - let variable = "variable-1".to_string(); - - let mut runtime = Runtime::new(db); - - runtime - .game_state - .variables - .insert(variable.clone(), "true".to_string()); - assert_eq!( - runtime.available_events(), - ["event-variable-bool-equals-true"] - ); - assert_eq!(runtime.event_frequencies(), [100]); - - runtime - .game_state - .variables - .insert(variable.clone(), "false".to_string()); - assert_eq!( - runtime.available_events(), - ["event-variable-bool-equals-false"] - ); - assert_eq!(runtime.event_frequencies(), [100]); - } + let child_1 = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; - #[test] - fn requirements_on_enum_variable_are_honored() { - let values = vec!["value".to_string(), "another-value".to_string()]; - let db = Database { - events: vec![ - Event { - id: "event-variable-bool-equals-value".to_string(), - requirements: vec![EventRequirement::Variable { - variable: Variable { - id: "variable-1".to_string(), - kind: VariableKind::Enum { - values: values.clone(), - }, - }, - condition: Condition::Equals, - value: "value".to_string(), - }], - ..Default::default() - }, - Event { - id: "event-variable-bool-equals-another-value".to_string(), - requirements: vec![EventRequirement::Variable { - variable: Variable { - id: "variable-1".to_string(), - kind: VariableKind::Enum { - values: values.clone(), - }, - }, - condition: Condition::Equals, - value: "another-value".to_string(), - }], - ..Default::default() - }, - ], - ..Default::default() + let child_2 = Block::Text { + id: String::default(), + settings: BlockSettings::default(), }; - let variable = "variable-1".to_string(); - - let mut runtime = Runtime::new(db); - - runtime - .game_state - .variables - .insert(variable.clone(), "value".to_string()); - assert_eq!( - runtime.available_events(), - ["event-variable-bool-equals-value"] - ); - assert_eq!(runtime.event_frequencies(), [100]); - - runtime - .game_state - .variables - .insert(variable.clone(), "another-value".to_string()); - assert_eq!( - runtime.available_events(), - ["event-variable-bool-equals-another-value"] - ); - assert_eq!(runtime.event_frequencies(), [100]); - } + let file = Database { + blocks: vec![parent.clone(), child_1.clone(), child_2.clone()], + }; - #[test] - fn requirements_on_items_are_honored() { - let db = Database { - events: vec![ - Event { - id: "event-item-equals".to_string(), - requirements: vec![EventRequirement::Item { - id: "item".to_string(), - condition: Condition::Equals, - value: "10".to_string(), - }], - ..Default::default() - }, - Event { - id: "event-item-higher-than".to_string(), - requirements: vec![EventRequirement::Item { - id: "item".to_string(), - condition: Condition::HigherThan, - value: "10".to_string(), - }], - ..Default::default() - }, - Event { - id: "event-item-less-than".to_string(), - requirements: vec![EventRequirement::Item { - id: "item".to_string(), - condition: Condition::LessThan, - value: "10".to_string(), - }], - ..Default::default() - }, - Event { - id: "event-item-missing-higher".to_string(), - requirements: vec![EventRequirement::Item { - id: "missing".to_string(), - condition: Condition::HigherThan, - value: "10".to_string(), - }], - ..Default::default() - }, - Event { - id: "event-item-missing-less".to_string(), - requirements: vec![EventRequirement::Item { - id: "missing".to_string(), - condition: Condition::LessThan, - value: "10".to_string(), - }], - ..Default::default() - }, - ], + let mut runtime = Runtime { + file, + block_stack: vec![0], ..Default::default() }; - - let item = "item".to_string(); - let mut runtime = Runtime::new(db); - - runtime.game_state.items.insert(item.clone(), 1); - assert_eq!( - runtime.available_events(), - ["event-item-less-than", "event-item-missing-less"] - ); - assert_eq!(runtime.event_frequencies(), [100, 100]); - - runtime.game_state.items.insert(item.clone(), 15); - assert_eq!( - runtime.available_events(), - ["event-item-higher-than", "event-item-missing-less"] - ); - assert_eq!(runtime.event_frequencies(), [100, 100]); - - runtime.game_state.items.insert(item.clone(), 10); - assert_eq!( - runtime.available_events(), - ["event-item-equals", "event-item-missing-less"] - ); - assert_eq!(runtime.event_frequencies(), [100, 100]); + runtime.update_stack(); + assert_eq!(*runtime.block_stack.last().unwrap(), 1); } #[test] - fn requirements_on_reputations_are_honored() { - let db = Database { - events: vec![ - Event { - id: "event-reputation-equals".to_string(), - requirements: vec![EventRequirement::Reputation { - id: "reputation".to_string(), - condition: Condition::Equals, - value: "10".to_string(), - }], - ..Default::default() - }, - Event { - id: "event-reputation-higher-than".to_string(), - requirements: vec![EventRequirement::Reputation { - id: "reputation".to_string(), - condition: Condition::HigherThan, - value: "10".to_string(), - }], - ..Default::default() - }, - Event { - id: "event-reputation-less-than".to_string(), - requirements: vec![EventRequirement::Reputation { - id: "reputation".to_string(), - condition: Condition::LessThan, - value: "10".to_string(), - }], - ..Default::default() - }, - Event { - id: "event-reputation-missing-higher".to_string(), - requirements: vec![EventRequirement::Reputation { - id: "missing".to_string(), - condition: Condition::HigherThan, - value: "10".to_string(), - }], - ..Default::default() - }, - Event { - id: "event-reputation-missing-less".to_string(), - requirements: vec![EventRequirement::Reputation { - id: "missing".to_string(), - condition: Condition::LessThan, - value: "10".to_string(), - }], - ..Default::default() - }, - ], + fn update_stack_to_next_sibling_correctly() { + let settings = BlockSettings { + children: vec![2, 3, 4], ..Default::default() }; - let reputation = "reputation".to_string(); - let mut runtime = Runtime::new(db); - - runtime.game_state.reputations.insert(reputation.clone(), 1); - assert_eq!( - runtime.available_events(), - [ - "event-reputation-less-than", - "event-reputation-missing-less" - ] - ); - assert_eq!(runtime.event_frequencies(), [100, 100]); - - runtime - .game_state - .reputations - .insert(reputation.clone(), 15); - assert_eq!( - runtime.available_events(), - [ - "event-reputation-higher-than", - "event-reputation-missing-less" - ] - ); - assert_eq!(runtime.event_frequencies(), [100, 100]); - - runtime - .game_state - .reputations - .insert(reputation.clone(), 10); - assert_eq!( - runtime.available_events(), - ["event-reputation-equals", "event-reputation-missing-less"] - ); - assert_eq!(runtime.event_frequencies(), [100, 100]); - } - - #[test] - fn requirements_on_time_of_day_are_honored() { - let db = Database { - events: vec![ - Event { - id: "event-tod-morning".to_string(), - requirements: vec![EventRequirement::TimeOfDay { - id: TimeOfDay::Morning, - condition: Condition::Equals, - }], - ..Default::default() - }, - Event { - id: "event-tod-mutex-night".to_string(), - requirements: vec![EventRequirement::TimeOfDay { - id: TimeOfDay::Night, - condition: Condition::MutEx, - }], - ..Default::default() - }, - ], - ..Default::default() + let parent = Block::Text { + id: String::default(), + settings, }; - let mut runtime = Runtime::new(db); + let sibling = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; - runtime.game_state.time_of_day = TimeOfDay::Morning; - assert_eq!( - runtime.available_events(), - ["event-tod-morning", "event-tod-mutex-night"] - ); - assert_eq!(runtime.event_frequencies(), [100, 100]); + let child_1 = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; - runtime.game_state.time_of_day = TimeOfDay::Evening; - assert_eq!(runtime.available_events(), ["event-tod-mutex-night"]); - assert_eq!(runtime.event_frequencies(), [100]); + let child_2 = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; - runtime.game_state.time_of_day = TimeOfDay::Night; - assert!(runtime.available_events().is_empty()); - } + let child_3 = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; - #[test] - fn requirements_on_decisions_are_honored() { - let db = Database { - events: vec![ - Event { - id: "event-decision".to_string(), - requirements: vec![EventRequirement::Decision { - id: "decision".to_string(), - condition: Condition::Depends, - }], - ..Default::default() - }, - Event { - id: "event-decision-2".to_string(), - requirements: vec![EventRequirement::Decision { - id: "decision-2".to_string(), - condition: Condition::MutEx, - }], - ..Default::default() - }, + let file = Database { + blocks: vec![ + parent.clone(), + sibling.clone(), + child_1.clone(), + child_2.clone(), + child_3.clone(), ], - ..Default::default() }; - let mut runtime = Runtime::new(db); - - runtime.game_state.decisions = vec![]; - assert_eq!(runtime.available_events(), ["event-decision-2"]); - assert_eq!(runtime.event_frequencies(), [100]); - - runtime.game_state.decisions = vec!["decision".to_string()]; - assert_eq!( - runtime.available_events(), - ["event-decision", "event-decision-2"] - ); - assert_eq!(runtime.event_frequencies(), [100, 100]); - - runtime.game_state.decisions = vec!["decision".to_string(), "decision-2".to_string()]; - assert_eq!(runtime.available_events(), ["event-decision"]); - assert_eq!(runtime.event_frequencies(), [100]); - } - - #[test] - fn requirements_on_events_are_honored() { - let db = Database { - events: vec![ - Event { - id: "event-depends".to_string(), - requirements: vec![EventRequirement::Event { - id: "event-1".to_string(), - condition: Condition::Depends, - }], - ..Default::default() - }, - Event { - id: "event-mutex".to_string(), - requirements: vec![EventRequirement::Event { - id: "event-2".to_string(), - condition: Condition::MutEx, - }], - ..Default::default() - }, - ], + let mut runtime = Runtime { + file, + block_stack: vec![0, 2], ..Default::default() }; - let mut runtime = Runtime::new(db); - - runtime.state.previous_events = vec![]; - assert_eq!(runtime.available_events(), ["event-mutex"]); - assert_eq!(runtime.event_frequencies(), [100]); - - runtime.state.previous_events = vec!["event-1".to_string()]; - assert_eq!(runtime.available_events(), ["event-depends", "event-mutex"]); - assert_eq!(runtime.event_frequencies(), [100, 100]); - - runtime.state.previous_events = vec!["event-1".to_string(), "event-2".to_string()]; - assert_eq!(runtime.available_events(), ["event-depends"]); - assert_eq!(runtime.event_frequencies(), [100]); + runtime.update_stack(); + assert_eq!(*runtime.block_stack.last().unwrap(), 3); + runtime.update_stack(); + assert_eq!(*runtime.block_stack.last().unwrap(), 4); + runtime.update_stack(); + assert_eq!(*runtime.block_stack.last().unwrap(), 1); } #[test] - fn set_choice_with_valid_choice_works() { - let db = Database { - events: vec![Event { - id: "event-1".to_string(), - choices: vec![cuentitos_common::EventChoice { - results: vec![cuentitos_common::EventResult { - chance: 1, - ..Default::default() - }], - ..Default::default() - }], - ..Default::default() - }], + fn get_next_block_output_works_correctly() { + let settings = BlockSettings { + children: vec![1, 2], ..Default::default() }; + let parent = Block::Text { + id: "parent".to_string(), + settings, + }; - let mut runtime = Runtime::new(db); - - assert_eq!(runtime.state.current_event, None); - - runtime.next_event().unwrap(); - - assert_eq!(runtime.state.current_event, Some(0)); - assert_eq!(runtime.state.current_choice, None); + let choice_1 = Block::Choice { + id: "1".to_string(), + settings: BlockSettings::default(), + }; - runtime.set_choice(0).unwrap(); + let choice_2 = Block::Choice { + id: "2".to_string(), + settings: BlockSettings::default(), + }; - assert_eq!(runtime.state.current_choice, Some(0)); - } + let file = Database { + blocks: vec![parent.clone(), choice_1.clone(), choice_2], + }; - #[test] - fn set_choice_when_requirements_not_met_choice_does_not_work() { - let db = Database { - events: vec![Event { - id: "event-1".to_string(), - choices: vec![cuentitos_common::EventChoice { - requirements: vec![cuentitos_common::EventRequirement::Item { - id: "my-item".to_string(), - condition: cuentitos_common::Condition::Equals, - value: 1.to_string(), - }], - ..Default::default() - }], - ..Default::default() - }], + let runtime = Runtime { + file, + block_stack: vec![0], ..Default::default() }; - let mut runtime = Runtime::new(db); - match runtime.set_choice(0) { - Ok(_) => assert!(false), - Err(string) => { - assert_eq!(string, "No event has been drawn"); - assert_eq!(runtime.state.current_choice, None) - } - } - - runtime.next_event().unwrap(); - - match runtime.set_choice(10) { - Ok(_) => assert!(false), - Err(string) => { - assert_eq!(string, "Invalid choice"); - assert_eq!(runtime.state.current_choice, None) - } - } + let output = runtime.get_next_block_output(); + let expected_output = Some(crate::Block { + text: "parent".to_string(), + choices: vec!["1".to_string(), "2".to_string()], + }); - match runtime.set_choice(0) { - Ok(_) => assert!(false), - Err(string) => { - assert_eq!(string, "Requirements for choice not met"); - assert_eq!(runtime.state.current_choice, None) - } - } + assert_eq!(output, expected_output); } #[test] - fn set_item_works() { - let db = Database { - items: vec![Item { - id: "item".to_string(), - ..Default::default() - }], + fn next_block_works_correctly() { + let settings = BlockSettings { + children: vec![1, 2], ..Default::default() }; - let mut runtime = Runtime::new(db); - - assert_eq!(runtime.game_state.items.get("item"), None); - - runtime.set_item("item", 3).unwrap(); - - assert_eq!(*runtime.game_state.items.get("item").unwrap(), 3 as u8); - - assert_eq!( - runtime.set_item("missing_item", 3), - Err("Invalid Item".to_string()) - ); - } - - #[test] - fn set_game_state_variable() { - let mut db = Database::default(); - db.config - .variables - .insert("variable-int".to_string(), VariableKind::Integer); - db.config - .variables - .insert("variable-float".to_string(), VariableKind::Float); - db.config - .variables - .insert("variable-bool".to_string(), VariableKind::Bool); - - let mut runtime = Runtime::new(db); - - assert_eq!( - runtime.set_variable("invalid".to_string(), 1), - Err("Invalid Variable".to_string()) - ); - - assert_eq!( - runtime.set_variable("variable-int".to_string(), 10.5), - Err("Invalid Variable Type".to_string()) - ); - assert_eq!( - runtime.set_variable("variable-float".to_string(), true), - Err("Invalid Variable Type".to_string()) - ); - assert_eq!( - runtime.set_variable("variable-bool".to_string(), 10), - Err("Invalid Variable Type".to_string()) - ); - - runtime.set_variable("variable-int", 10).unwrap(); - runtime.set_variable("variable-float", 10.5 as f32).unwrap(); - runtime.set_variable("variable-bool", true).unwrap(); - - assert_eq!( - runtime.get_variable::<&str, i32>("variable-int").unwrap(), - 10 - ); - assert_eq!( - runtime.get_variable::<&str, f32>("variable-float").unwrap(), - 10.5 - ); - assert_eq!( - runtime.get_variable::<&str, bool>("variable-bool").unwrap(), - true - ); - } - - #[test] - fn set_time_of_day() { - let db = Database::default(); - let mut runtime = Runtime::new(db); - - runtime.set_time_of_day(TimeOfDay::Night); - assert_eq!(runtime.game_state.time_of_day, TimeOfDay::Night); - - runtime.set_time_of_day(TimeOfDay::Noon); - assert_eq!(runtime.game_state.time_of_day, TimeOfDay::Noon); - - runtime.set_time_of_day(TimeOfDay::Morning); - assert_eq!(runtime.game_state.time_of_day, TimeOfDay::Morning); - - runtime.set_time_of_day(TimeOfDay::Evening); - assert_eq!(runtime.game_state.time_of_day, TimeOfDay::Evening); - } - - #[test] - fn add_reputation() { - let mut db = Database::default(); - db.config.reputations.push("reputation-1".to_string()); - - let mut runtime = Runtime::new(db); - - match runtime.get_reputation(&"no-reputation".to_string()) { - Ok(_) => assert!(false), - Err(string) => { - assert_eq!(string, "Invalid Reputation"); - } - } + let parent = Block::Text { + id: "parent".to_string(), + settings, + }; - match runtime.add_reputation(&"no-reputation".to_string(), 1) { - Ok(_) => assert!(false), - Err(string) => { - assert_eq!(string, "Invalid Reputation"); - } - } + let choice_1 = Block::Choice { + id: "1".to_string(), + settings: BlockSettings::default(), + }; - assert_eq!( - runtime.get_reputation(&"reputation-1".to_string()).unwrap(), - 0 - ); - - assert_eq!( - runtime.add_reputation(&"reputation-1".to_string(), 1), - Ok(()) - ); - assert_eq!( - runtime.get_reputation(&"reputation-1".to_string()).unwrap(), - 1 - ); - - assert_eq!( - runtime.add_reputation(&"reputation-1".to_string(), -1), - Ok(()) - ); - assert_eq!( - runtime.get_reputation(&"reputation-1".to_string()).unwrap(), - 0 - ); - - assert_eq!( - runtime.add_reputation(&"reputation-1".to_string(), -1), - Ok(()) - ); - assert_eq!( - runtime.get_reputation(&"reputation-1".to_string()).unwrap(), - -1 - ); - } + let choice_2 = Block::Choice { + id: "2".to_string(), + settings: BlockSettings::default(), + }; - #[test] - fn current_modifiers_returns_modifiers_correctly() { - let mut db = Database { - events: vec![Event { - id: "event-1".to_string(), - choices: vec![cuentitos_common::EventChoice { - results: vec![cuentitos_common::EventResult { - chance: 100, - modifiers: vec![ - Modifier::Variable { - id: "variable-1".to_string(), - value: "1".to_string(), - }, - Modifier::Variable { - id: "variable-2".to_string(), - value: "-1".to_string(), - }, - Modifier::Variable { - id: "variable-3".to_string(), - value: "1.5".to_string(), - }, - Modifier::Variable { - id: "variable-4".to_string(), - value: "-1.5".to_string(), - }, - Modifier::Variable { - id: "variable-5".to_string(), - value: "true".to_string(), - }, - Modifier::Variable { - id: "variable-6".to_string(), - value: "false".to_string(), - }, - Modifier::Item { - id: "item-1".to_string(), - value: "1".to_string(), - }, - Modifier::Item { - id: "item-2".to_string(), - value: "-1".to_string(), - }, - Modifier::Reputation { - id: "reputation-1".to_string(), - value: "1".to_string(), - }, - Modifier::Reputation { - id: "reputation-2".to_string(), - value: "-1".to_string(), - }, - Modifier::Decision("decision-1".to_string()), - Modifier::Achievement("achievement-1".to_string()), - ], - ..Default::default() - }], - ..Default::default() - }], - ..Default::default() - }], + let file = Database { + blocks: vec![parent.clone(), choice_1.clone(), choice_2.clone()], + }; + let mut runtime = Runtime { + file, ..Default::default() }; - db.config - .variables - .insert("variable-1".to_string(), VariableKind::Integer); - db.config - .variables - .insert("variable-2".to_string(), VariableKind::Integer); - db.config - .variables - .insert("variable-3".to_string(), VariableKind::Float); - db.config - .variables - .insert("variable-4".to_string(), VariableKind::Float); - db.config - .variables - .insert("variable-5".to_string(), VariableKind::Bool); - db.config - .variables - .insert("variable-6".to_string(), VariableKind::Bool); - db.config.reputations.push("reputation-1".to_string()); - db.config.reputations.push("reputation-2".to_string()); - - db.items.push(Item { - id: "item-1".to_string(), - ..Default::default() - }); - db.items.push(Item { - id: "item-2".to_string(), - ..Default::default() + let output = runtime.next_block(); + let expected_output = Some(crate::Block { + text: "parent".to_string(), + choices: vec!["1".to_string(), "2".to_string()], }); - let mut runtime = Runtime::new(db); - - assert_eq!( - runtime.next_event().unwrap(), - crate::Event::from_cuentitos( - &runtime.database.events[0], - &runtime.database.i18n, - &runtime.state.current_locale - ) - ); - - runtime.set_choice(0).unwrap(); - let modifiers = runtime.current_modifiers().unwrap(); - - assert_eq!( - modifiers[0], - crate::Modifier { - kind: "variable".to_string(), - id: "variable-1".to_string(), - value: "1".to_string(), - } - ); - - assert_eq!( - modifiers[1], - crate::Modifier { - kind: "variable".to_string(), - id: "variable-2".to_string(), - value: "-1".to_string(), - } - ); - - assert_eq!( - modifiers[2], - crate::Modifier { - kind: "variable".to_string(), - id: "variable-3".to_string(), - value: "1.5".to_string(), - } - ); - - assert_eq!( - modifiers[3], - crate::Modifier { - kind: "variable".to_string(), - id: "variable-4".to_string(), - value: "-1.5".to_string(), - } - ); - - assert_eq!( - modifiers[4], - crate::Modifier { - kind: "variable".to_string(), - id: "variable-5".to_string(), - value: "true".to_string(), - } - ); - - assert_eq!( - modifiers[5], - crate::Modifier { - kind: "variable".to_string(), - id: "variable-6".to_string(), - value: "false".to_string(), - } - ); - - assert_eq!( - modifiers[6], - crate::Modifier { - kind: "item".to_string(), - id: "item-1".to_string(), - value: "1".to_string(), - } - ); - - assert_eq!( - modifiers[7], - crate::Modifier { - kind: "item".to_string(), - id: "item-2".to_string(), - value: "-1".to_string(), - } - ); - - assert_eq!( - modifiers[8], - crate::Modifier { - kind: "reputation".to_string(), - id: "reputation-1".to_string(), - value: "1".to_string(), - } - ); - - assert_eq!( - modifiers[9], - crate::Modifier { - kind: "reputation".to_string(), - id: "reputation-2".to_string(), - value: "-1".to_string(), - } - ); - - assert_eq!( - modifiers[10], - crate::Modifier { - kind: "decision".to_string(), - id: "decision-1".to_string(), - value: "".to_string(), - } - ); - - assert_eq!( - modifiers[11], - crate::Modifier { - kind: "achievement".to_string(), - id: "achievement-1".to_string(), - value: "".to_string(), - } - ); + assert_eq!(output, expected_output); + assert_eq!(runtime.block_stack, vec![0]); } #[test] - fn when_choice_has_modifications_on_reputation_and_decisions_they_are_computed() { - let mut db = Database { - events: vec![Event { - id: "event-1".to_string(), - choices: vec![cuentitos_common::EventChoice { - results: vec![cuentitos_common::EventResult { - chance: 100, - modifiers: vec![ - Modifier::Reputation { - id: "reputation-1".to_string(), - value: "1".to_string(), - }, - Modifier::Reputation { - id: "reputation-2".to_string(), - value: "-1".to_string(), - }, - Modifier::Decision("decision-1".to_string()), - ], - ..Default::default() - }], - ..Default::default() - }], - ..Default::default() - }], - ..Default::default() - }; - - db.config.reputations.push("reputation-1".to_string()); - db.config.reputations.push("reputation-2".to_string()); - - let mut runtime = Runtime::new(db); - - assert_eq!(runtime.get_reputation("reputation-1"), Ok(0)); - assert_eq!(runtime.get_reputation("reputation-2"), Ok(0)); - assert_eq!(runtime.decision_taken("decision-1"), false); - - assert_eq!( - runtime.next_event().unwrap(), - crate::Event::from_cuentitos( - &runtime.database.events[0], - &runtime.database.i18n, - &runtime.state.current_locale - ) - ); - - runtime.set_choice(0).unwrap(); - assert_eq!(runtime.get_reputation("reputation-1"), Ok(1)); - assert_eq!(runtime.get_reputation("reputation-2"), Ok(-1)); - assert_eq!(runtime.decision_taken("decision-1"), true); + fn next_output_doesnt_work_with_empty_file() { + let mut runtime = Runtime::new(Database::default()); + assert_eq!(runtime.next_block(), None); } #[test] - fn set_locale_with_existing_locale_works() { - let database = Database { - i18n: I18n { - locales: vec!["en".to_string(), "es".to_string()], - default_locale: "en".to_string(), - ..Default::default() - }, + fn roll_chances_for_next_block_works_correctly() { + let settings = BlockSettings { + chance: None, ..Default::default() }; - let mut runtime = Runtime::new(database.clone()); - - assert_eq!(runtime.state.current_locale, "en".to_string()); - runtime.set_locale("es").unwrap(); - assert_eq!(runtime.state.current_locale, "es".to_string()); - } + let text_with_no_chances = Block::Text { + id: String::default(), + settings, + }; - #[test] - fn set_locale_with_wrong_locale_fails() { - let database = Database { - i18n: I18n { - locales: vec!["en".to_string(), "es".to_string()], - default_locale: "en".to_string(), - ..Default::default() - }, + let settings = BlockSettings { + chance: Some(1.), ..Default::default() }; - let mut runtime = Runtime::new(database.clone()); - - assert_eq!( - runtime.set_locale("missing"), - Err("Missing Locale".to_string()) - ); - } + let text_with_100_chances = Block::Text { + id: String::default(), + settings, + }; - #[test] - fn event_workflow_supports_i18n() { - let mut event_strings: LanguageDb = HashMap::new(); - event_strings.insert("event-1-title".to_string(), "a title".to_string()); - event_strings.insert( - "event-1-description".to_string(), - "a description".to_string(), - ); - event_strings.insert("event-1-choice-0".to_string(), "a choice".to_string()); - event_strings.insert( - "event-1-choice-0-result-0-text".to_string(), - "a result".to_string(), - ); - - let mut strings: HashMap = HashMap::new(); - strings.insert("en".to_string(), event_strings); - - let db = Database { - events: vec![Event { - id: "1".to_string(), - title: "event-1-title".to_string(), - description: "event-1-description".to_string(), - choices: vec![EventChoice { - text: "event-1-choice-0".to_string(), - results: vec![EventResult { - chance: 100, - text: "event-1-choice-0-result-0-text".to_string(), - ..Default::default() - }], - ..Default::default() - }], - ..Default::default() - }], - i18n: I18n { - locales: vec!["en".to_string()], - default_locale: "en".to_string(), - strings, - }, + let settings = BlockSettings { + chance: Some(0.), ..Default::default() }; - let mut runtime = Runtime::new(db); - runtime.set_seed(1); - - let event = runtime.next_event().unwrap(); - - assert_eq!(event.title, "a title"); - assert_eq!(event.description, "a description"); - assert_eq!(event.choices[0].text, "a choice"); - - let result = runtime.set_choice(0).unwrap(); - assert_eq!(result.text, "a result"); - } + let text_with_0_chances = Block::Text { + id: String::default(), + settings, + }; - #[test] - fn load_event_works() { - let db = Database { - events: vec![Event { - id: "event-1".to_string(), - ..Default::default() - }], + let file = Database { + blocks: vec![ + text_with_no_chances, + text_with_100_chances, + text_with_0_chances, + ], + }; + let mut runtime = Runtime { + file, + block_stack: vec![0], ..Default::default() }; - let mut runtime = Runtime::new(db); - runtime.load_event("event-1"); - - assert_eq!(runtime.state.current_event.unwrap(), 0); + assert_eq!(runtime.roll_chances_for_next_block(), true); + runtime.update_stack(); + assert_eq!(runtime.roll_chances_for_next_block(), true); + runtime.update_stack(); + assert_eq!(runtime.roll_chances_for_next_block(), false); } } diff --git a/runtime/src/runtime_datatypes.rs b/runtime/src/runtime_datatypes.rs deleted file mode 100644 index 6243adc..0000000 --- a/runtime/src/runtime_datatypes.rs +++ /dev/null @@ -1,84 +0,0 @@ -use cuentitos_common::LanguageId; -use serde::{Deserialize, Serialize}; -use std::collections::HashMap; - -// These are stripped down versions of the structs that -// that are sent through the runtime to the game engine. - -#[derive(Deserialize, Serialize, Debug, Default, Clone, PartialEq)] -pub struct Event { - pub title: String, - pub description: String, - pub choices: Vec, - pub settings: HashMap, -} - -#[derive(Deserialize, Serialize, Debug, Default, Clone, PartialEq)] -pub struct EventChoice { - pub id: usize, - pub text: String, -} - -#[derive(Deserialize, Serialize, Debug, Default, Clone, PartialEq)] -pub struct EventResult { - pub text: String, - pub modifiers: Vec, -} - -#[derive(Deserialize, Serialize, Debug, Default, Clone, PartialEq)] -pub struct Modifier { - pub kind: String, - pub id: String, - pub value: String, -} - -impl Event { - pub fn from_cuentitos( - event: &cuentitos_common::Event, - i18n: &cuentitos_common::I18n, - locale: &LanguageId, - ) -> crate::Event { - let mut choices = vec![]; - - for (id, choice) in event.choices.iter().enumerate() { - choices.push(EventChoice::from_cuentitos(id, choice, i18n, locale)) - } - - let settings = event.settings.clone(); - - crate::Event { - title: i18n.get_translation(locale, &event.title), - description: i18n.get_translation(locale, &event.description), - choices, - settings, - } - } -} - -impl EventChoice { - pub fn from_cuentitos( - id: usize, - choice: &cuentitos_common::EventChoice, - i18n: &cuentitos_common::I18n, - locale: &LanguageId, - ) -> crate::EventChoice { - crate::EventChoice { - id, - text: i18n.get_translation(locale, &choice.text), - } - } -} - -impl EventResult { - pub fn from_cuentitos( - result: &cuentitos_common::EventResult, - i18n: &cuentitos_common::I18n, - locale: &LanguageId, - modifiers: Vec, - ) -> EventResult { - crate::EventResult { - text: i18n.get_translation(locale, &result.text), - modifiers, - } - } -} diff --git a/runtime/src/runtime_state.rs b/runtime/src/runtime_state.rs deleted file mode 100644 index 5af8c7a..0000000 --- a/runtime/src/runtime_state.rs +++ /dev/null @@ -1,15 +0,0 @@ -use cuentitos_common::EventId; -use cuentitos_common::LanguageId; -use serde::{Deserialize, Serialize}; -use std::collections::HashMap; - -#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Clone, Eq)] -pub struct RuntimeState { - pub previous_events: Vec, - pub previous_event_cooldown: HashMap, - pub disabled_events: Vec, - pub current_event: Option, - pub current_choice: Option, - pub current_result: Option, - pub current_locale: LanguageId, -} From e21dd822d1ccfcb0b9c2d8d6d86a72cbc6b6a658 Mon Sep 17 00:00:00 2001 From: Fran Tufro Date: Wed, 14 Jun 2023 19:54:24 -0300 Subject: [PATCH 16/94] Added unique and tags to docs. --- definitions/palabritas.md | 28 +++++++++++++++++++++++++++- examples/story-example.cuentitos | 3 +++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/definitions/palabritas.md b/definitions/palabritas.md index 5526b4f..16dd7fc 100644 --- a/definitions/palabritas.md +++ b/definitions/palabritas.md @@ -323,9 +323,14 @@ For example: You wake up feeling refreshed. Let's see what this day brings. ``` -### Finishing the game +### Finishing +Any time you want to tell the runtime that you're done (with a section, with a dialogue, whatever it is you're doing), you can divert to `END`. + `-> END` +Depending on your game, you'll interpret what `END` means. It could be the end of the game, or it could just be the end of the current section or dialog. +The runtime won't execute anything after you go to `END`. You'll have to manually divert to a section from the runtime for the execution to continue. + ## Comments A line that starts with `//` is ignored. @@ -353,6 +358,27 @@ You can use an arbitrary amount of parameters, they will be passed to the runtim It's up to the runtime how to interpret `0.3` in this case, and cuentitos will just pass it through. You can always use variables as a way to communicate with the runtime and check for types in compile time. +## Unique + +There's an important feature that can be used to avoid repetition, if you tag a block as `unique`, it will only be displayed once, if the runtime hits that line again it will be ignored. + +```cuentitos +# second_day_happy + A new day in the new city. + unique +``` + +In this case the line "A new day in the new city" will only be shown the first time the runtime enters `second_day_happy`. Anytime you divert to the section again, it will not show up. + +## Tags + +You can use tags to communicate things to the runtime that don't belong to the game state as the variables. For example, you can use it to display an icon saying that a given option is dangerous: + +```cuentitos + * Explore a museum + tag dangerous +``` + ## Configuration ### Variables #### Bool diff --git a/examples/story-example.cuentitos b/examples/story-example.cuentitos index 46f4320..d259067 100644 --- a/examples/story-example.cuentitos +++ b/examples/story-example.cuentitos @@ -79,9 +79,12 @@ You decide to focus on the now... // This is a comment # second_day_happy + A new day in the new city. + unique You wake up feeling refreshed. Let's see what this day brings. `play_sound alarm 0.3` * Explore a museum + tag dangerous -> second_day.museum * Go to the Farmer's Market -> second_day.farmers_market From 0f5c18b10520053af737d1a7535b1c7e107943ed Mon Sep 17 00:00:00 2001 From: loomstyla <30666022+loomstyla@users.noreply.github.com> Date: Thu, 29 Jun 2023 12:48:12 -0300 Subject: [PATCH 17/94] Buckets support (#9) * Small typo fixed. * buckets * Error handling + missing tests * clippy + fmt * Update parser.rs * Updated parser * Fixed bad merge * Added better compiler errors * New line fixes * Fixes to parser * Buckets fix * choice buckets * renaming file and probability/chance * Sections (#20) * sections parsing * Dont use reserved keywords on random strings * diverts * tests * Variables (#21) * ints and floats * Strings + cli update * enum variables * Fixes to grammar --------- Co-authored-by: Fran Tufro --------- Co-authored-by: Fran Tufro --------- Co-authored-by: Fran Tufro --- cli/src/console.rs | 91 +- cli/src/main.rs | 1 - common/Cargo.toml | 1 + common/src/block.rs | 31 +- common/src/config.rs | 41 + common/src/database.rs | 13 +- common/src/lib.rs | 3 + common/src/variable.rs | 35 +- compiler/src/lib.rs | 35 +- definitions/palabritas.md | 2 +- examples/cuentitos.toml | 11 + examples/story-example.cuentitos | 1 + palabritas/src/error.rs | 94 ++ palabritas/src/lib.rs | 1228 +------------------ palabritas/src/palabritas.pest | 31 +- palabritas/src/parser.rs | 1900 ++++++++++++++++++++++++++++++ runtime/src/game_state.rs | 18 + runtime/src/lib.rs | 4 + runtime/src/runtime.rs | 669 +++++++++-- 19 files changed, 2854 insertions(+), 1355 deletions(-) create mode 100644 common/src/config.rs create mode 100644 examples/cuentitos.toml create mode 100644 palabritas/src/error.rs create mode 100644 palabritas/src/parser.rs create mode 100644 runtime/src/game_state.rs diff --git a/cli/src/console.rs b/cli/src/console.rs index 32629d8..e3fea23 100644 --- a/cli/src/console.rs +++ b/cli/src/console.rs @@ -31,17 +31,45 @@ impl Console { loop { let input = Self::prompt("> "); - let mut args = input.split(' '); - match args.next() { - Some("") => { + match input.as_str() { + "" => { if let Some(output_text) = runtime.next_block() { print_output_text(output_text); } } - Some("q") => break, - Some(str) => { - if let Ok(choice) = str.parse::() { + "sections" => { + println!("Sections:"); + for section in runtime.database.sections.keys() { + println!("{:?}", section); + } + } + "q" => break, + "variables" => print_variables(&runtime), + str => { + if str.starts_with("set ") { + let substr: String = str.chars().skip(4).collect(); + let mut splitted = substr.split(' '); + if let Some(variable) = splitted.next() { + if let Some(value) = splitted.next() { + set_variable_value(variable, value, &mut runtime); + } + } + } else if str.starts_with("->") { + let substr: String = str.chars().skip(2).collect(); + let mut splitted = substr.split('.'); + if let Some(section) = splitted.next() { + if let Some(subsection) = splitted.next() { + runtime.jump_to_section(section.to_string(), Some(subsection.to_string())); + } else { + runtime.jump_to_section(section.to_string(), None); + } + + if let Some(output_text) = runtime.next_block() { + print_output_text(output_text); + } + } + } else if let Ok(choice) = str.parse::() { if choice == 0 { println!("invalid option"); continue; @@ -51,12 +79,61 @@ impl Console { } } } - None => {} } } } } +fn set_variable_value(variable: &str, value: &str, runtime: &mut Runtime) { + for (variable_name, kind) in runtime.database.config.variables.clone() { + if variable_name == variable { + match kind { + VariableKind::Integer => { + let int: i32 = value.parse().unwrap(); + runtime.set_variable(variable, int).unwrap(); + } + VariableKind::Float => { + let float: f32 = value.parse().unwrap(); + runtime.set_variable(variable, float).unwrap(); + } + VariableKind::Bool => { + let bool: bool = value.parse().unwrap(); + runtime.set_variable(variable, bool).unwrap(); + } + VariableKind::String => { + runtime.set_variable(variable, value.to_string()).unwrap(); + } + VariableKind::Enum(_) => match runtime.set_variable(variable, value.to_string()) { + Ok(_) => {} + Err(err) => println!("{}", err), + }, + } + } + } +} + +fn print_variables(runtime: &Runtime) { + for (variable, kind) in &runtime.database.config.variables { + match kind { + VariableKind::Integer => { + let int: i32 = runtime.get_variable(variable).unwrap(); + println!("{}: {}", variable, int); + } + VariableKind::Float => { + let float: f32 = runtime.get_variable(variable).unwrap(); + println!("{}: {}", variable, float); + } + VariableKind::Bool => { + let bool: bool = runtime.get_variable(variable).unwrap(); + println!("{}: {}", variable, bool); + } + _ => { + let string: String = runtime.get_variable(variable).unwrap(); + println!("{}: {}", variable, string); + } + } + } +} fn print_output_text(output_text: Block) { println!("{}", output_text.text); for i in 0..output_text.choices.len() { diff --git a/cli/src/main.rs b/cli/src/main.rs index 7305115..1d5de87 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -14,7 +14,6 @@ struct Cli { #[derive(Subcommand, Debug)] enum Commands { Compile { - #[clap(default_value = ".")] source_path: std::path::PathBuf, #[clap(default_value = "./build/cuentitos.db")] build_path: std::path::PathBuf, diff --git a/common/Cargo.toml b/common/Cargo.toml index 229845a..2eea6e4 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -8,4 +8,5 @@ rand = "0.8.5" serde = { version = "1.0.144", features = ["derive"] } rmp-serde = "1.1.1" rmp = "^0.8" +toml = "0.7.4" typetag = "0.2" \ No newline at end of file diff --git a/common/src/block.rs b/common/src/block.rs index b606a43..11d9f62 100644 --- a/common/src/block.rs +++ b/common/src/block.rs @@ -2,28 +2,41 @@ use crate::{FrequencyModifier, I18nId, Modifier, Requirement}; use serde::{Deserialize, Serialize}; pub type BlockId = usize; -pub type SectionId = usize; pub type BucketName = String; +#[derive(Debug, Default, Serialize, Deserialize, Eq, PartialEq, Clone, Hash)] +pub struct SectionKey { + pub section: String, + pub subsection: Option, +} + #[derive(Debug, Default, Serialize, Deserialize, PartialEq, Clone)] pub enum NextBlock { #[default] None, BlockId(BlockId), EndOfFile, - Section(SectionId), + Section(SectionKey), } #[derive(Debug, Serialize, Deserialize, Default, PartialEq, Clone)] pub struct BlockSettings { pub children: Vec, pub next: NextBlock, - pub chance: Option, + pub chance: Chance, pub frequency_modifiers: Vec, pub requirements: Vec, pub modifiers: Vec, } +#[derive(Debug, Serialize, Deserialize, Default, PartialEq, Clone)] +pub enum Chance { + #[default] + None, + Frequency(u32), + Probability(f32), +} + #[derive(Debug, Serialize, Deserialize, PartialEq, Clone)] pub enum Block { Text { @@ -38,6 +51,14 @@ pub enum Block { name: Option, settings: BlockSettings, }, + Section { + id: I18nId, + settings: BlockSettings, + }, + Subsection { + id: I18nId, + settings: BlockSettings, + }, } impl Block { @@ -46,6 +67,8 @@ impl Block { Block::Text { id: _, settings } => settings, Block::Choice { id: _, settings } => settings, Block::Bucket { name: _, settings } => settings, + Block::Section { id: _, settings } => settings, + Block::Subsection { id: _, settings } => settings, } } pub fn get_settings(&self) -> &BlockSettings { @@ -53,6 +76,8 @@ impl Block { Block::Text { id: _, settings } => settings, Block::Choice { id: _, settings } => settings, Block::Bucket { name: _, settings } => settings, + Block::Section { id: _, settings } => settings, + Block::Subsection { id: _, settings } => settings, } } } diff --git a/common/src/config.rs b/common/src/config.rs new file mode 100644 index 0000000..25ffa3d --- /dev/null +++ b/common/src/config.rs @@ -0,0 +1,41 @@ +use std::path::Path; + +use std::collections::HashMap; + +use crate::Result; +use crate::VariableKind; + +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Clone, Eq)] +pub struct Config { + #[serde(default)] + pub variables: HashMap, +} + +impl Config { + pub fn load(source_path: T) -> Result + where + T: AsRef, + { + let mut filename = source_path.as_ref().to_path_buf(); + filename.push("cuentitos.toml"); + let contents = match std::fs::read_to_string(&filename) { + Ok(c) => c, + Err(err) => { + eprintln!("Could not read config file `{}`", filename.display()); + return Err(Box::new(err)); + } + }; + + let config: Config = match toml::from_str(&contents) { + Ok(d) => d, + Err(err) => { + eprintln!("Unable to load data from `{}`", filename.display()); + return Err(Box::new(err)); + } + }; + + Ok(config) + } +} diff --git a/common/src/database.rs b/common/src/database.rs index e61e69c..f8c6253 100644 --- a/common/src/database.rs +++ b/common/src/database.rs @@ -1,19 +1,22 @@ -use crate::{Block, Result}; +use crate::{Block, BlockId, Config, Result, SectionKey}; use rmp_serde::Deserializer; use serde::{Deserialize, Serialize}; +use std::collections::HashMap; -#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Clone)] +#[derive(Debug, Default, Serialize, PartialEq, Deserialize, Clone)] pub struct Database { pub blocks: Vec, + pub sections: HashMap, + pub config: Config, } impl Database { pub fn from_u8(bytes: &[u8]) -> Result { let mut de = Deserializer::new(bytes); - let file: std::result::Result = + let db: std::result::Result = Deserialize::deserialize(&mut de); - match file { - Ok(file) => Ok(file), + match db { + Ok(db) => Ok(db), Err(error) => Err(Box::new(error)), } } diff --git a/common/src/lib.rs b/common/src/lib.rs index d406306..77b2c73 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -28,6 +28,9 @@ pub use divert::*; mod modifier; pub use modifier::*; +mod config; +pub use config::*; + pub type Result = std::result::Result>; mod i18n; diff --git a/common/src/variable.rs b/common/src/variable.rs index 500d7b7..5700e65 100644 --- a/common/src/variable.rs +++ b/common/src/variable.rs @@ -3,14 +3,32 @@ pub type VariableId = String; use serde::{Deserialize, Serialize}; #[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] +#[serde(rename_all = "snake_case")] pub enum VariableKind { #[default] Integer, Float, Bool, - Enum { - values: Vec, - }, + String, + Enum(Vec), +} + +impl VariableKind { + pub fn get_default_value(&self) -> String { + match self { + VariableKind::Integer => "0".to_string(), + VariableKind::Float => "0.0".to_string(), + VariableKind::Bool => "false".to_string(), + VariableKind::String => "".to_string(), + VariableKind::Enum(values) => { + if values.is_empty() { + "".to_string() + } else { + values[0].clone() + } + } + } + } } #[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] @@ -40,15 +58,8 @@ mod test { let variable_kind = VariableKind::Bool; assert!(variable_kind == VariableKind::Bool); - let variable_kind = VariableKind::Enum { - values: vec!["a-value".to_string()], - }; - assert!( - variable_kind - == VariableKind::Enum { - values: vec!["a-value".to_string()] - } - ); + let variable_kind = VariableKind::Enum(vec!["a-value".to_string()]); + assert!(variable_kind == VariableKind::Enum(vec!["a-value".to_string()])); } #[test] diff --git a/compiler/src/lib.rs b/compiler/src/lib.rs index d1145c2..756aefc 100644 --- a/compiler/src/lib.rs +++ b/compiler/src/lib.rs @@ -1,40 +1,33 @@ use palabritas::parse_database_from_path; use rmp_serde::Serializer; use serde::Serialize; -use std::error; -use std::fmt; use std::fs::File; use std::io::Write; use std::path::Path; -#[derive(Debug)] -pub enum CompileError { - SourceNotDirectory, - DestinationNotDirectory, -} - -impl error::Error for CompileError {} - -impl fmt::Display for CompileError { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { - CompileError::SourceNotDirectory => write!(f, "Source is not a folder."), - CompileError::DestinationNotDirectory => write!(f, "Destination is not a folder."), - } - } -} - pub fn compile(source_path: T, destination_path: U) where T: AsRef, U: AsRef, { - let db = parse_database_from_path(source_path).unwrap(); + let db_result = parse_database_from_path(source_path); + + let db = match db_result { + Ok(db) => db, + Err(_) => { + println!("{}", db_result.unwrap_err()); + return; + } + }; let mut buf: Vec = Vec::new(); let mut serializer = Serializer::new(&mut buf); - db.serialize(&mut serializer).unwrap(); + let serialize_result = db.serialize(&mut serializer); + if serialize_result.is_err() { + println!("{}", serialize_result.unwrap_err()); + return; + } let destination_path = destination_path.as_ref().to_path_buf(); let mut file = File::create(destination_path).unwrap(); diff --git a/definitions/palabritas.md b/definitions/palabritas.md index 16dd7fc..1e57c61 100644 --- a/definitions/palabritas.md +++ b/definitions/palabritas.md @@ -199,7 +199,7 @@ You decide to focus on the now... req time_of_day_night ``` -Thse three lines will only show at night, after `The moonlight gives...`. The second one only if the player is low on energy. +These three lines will only show at night, after `The moonlight gives...`. The second one only if the player is low on energy. You can also add requirements to options. diff --git a/examples/cuentitos.toml b/examples/cuentitos.toml new file mode 100644 index 0000000..76c2cba --- /dev/null +++ b/examples/cuentitos.toml @@ -0,0 +1,11 @@ +[variables] +health = "integer" +time = "integer" +money = "integer" +donkey = "bool" +food = "integer" +time_mod = "integer" +energized = "float" +message = "string" +[variables.time_of_day] +enum = ["Day", "Night"] \ No newline at end of file diff --git a/examples/story-example.cuentitos b/examples/story-example.cuentitos index d259067..3e050a5 100644 --- a/examples/story-example.cuentitos +++ b/examples/story-example.cuentitos @@ -81,6 +81,7 @@ You decide to focus on the now... # second_day_happy A new day in the new city. unique + // This is a nested comment You wake up feeling refreshed. Let's see what this day brings. `play_sound alarm 0.3` * Explore a museum diff --git a/palabritas/src/error.rs b/palabritas/src/error.rs new file mode 100644 index 0000000..8380ee4 --- /dev/null +++ b/palabritas/src/error.rs @@ -0,0 +1,94 @@ +use std::{error::Error, fmt::Display, path::PathBuf}; + +use crate::parser::Rule; +#[derive(Debug, PartialEq, Eq)] +pub enum PalabritasError { + FileIsEmpty, + ParseError { + file: String, + line: usize, + col: usize, + reason: String, + }, + PathIsNotAFile(PathBuf), + PathDoesntExist(PathBuf), + CantReadFile { + path: PathBuf, + message: String, + }, + BucketSumIsNot1(ErrorInfo), + BucketHasFrequenciesAndChances(ErrorInfo), + BucketMissingProbability(ErrorInfo), + UnexpectedRule { + info: ErrorInfo, + expected_rule: Rule, + rule_found: Rule, + }, +} + +#[derive(Debug, PartialEq, Eq)] +pub struct ErrorInfo { + pub line: usize, + pub string: String, +} + +impl Display for ErrorInfo { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + write!(f, "Line {}: {}", self.line, self.string) + } +} +impl Error for PalabritasError {} +impl Display for PalabritasError { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + match self { + PalabritasError::FileIsEmpty => { + write!(f, "File provided is empty.") + } + PalabritasError::ParseError { + file, + line, + col, + reason, + } => { + write!(f, "{}:{}:{}\n {}", file, line, col, reason) + } + PalabritasError::BucketSumIsNot1(info) => { + write!( + f, + "The sum of the probabilities in a bucket must be 100%.\n{}", + info + ) + } + PalabritasError::BucketHasFrequenciesAndChances(info) => { + write!( + f, + "Buckets can't have frequency notations and percentage notations at the same time.\n{}", + info + ) + } + PalabritasError::UnexpectedRule { + info, + expected_rule, + rule_found, + } => { + write!( + f, + "Expected {:?} but found {:?}.\n{}", + expected_rule, rule_found, info + ) + } + PalabritasError::BucketMissingProbability(info) => { + write!(f, "Missing probability for bucket element.\n{}", info) + } + PalabritasError::CantReadFile { path, message } => { + write!(f, "Can't read file {:?}\n{}", path, message) + } + PalabritasError::PathIsNotAFile(path) => { + write!(f, "{:?} is not a file", path) + } + PalabritasError::PathDoesntExist(path) => { + write!(f, "Path provided doesn't exist: {:?}", path) + } + } + } +} diff --git a/palabritas/src/lib.rs b/palabritas/src/lib.rs index 555a8ff..0904f70 100644 --- a/palabritas/src/lib.rs +++ b/palabritas/src/lib.rs @@ -1,1227 +1,7 @@ -extern crate pest; +mod parser; +pub use parser::parse_database; +pub use parser::parse_database_from_path; #[macro_use] extern crate pest_derive; -use std::path::Path; - -use cuentitos_common::{ - Block, BlockSettings, Condition, Database, FrequencyModifier, Modifier, NextBlock, Operator, - Requirement, -}; -use pest::{iterators::Pair, Parser}; - -#[derive(Parser)] -#[grammar = "palabritas.pest"] -pub struct PalabritasParser; - -pub fn parse_database_from_path

(path: P) -> Option -where - P: AsRef, -{ - let str = std::fs::read_to_string(path).expect("cannot read File"); - let token = PalabritasParser::parse(Rule::File, &str) - .expect("unsuccessful parse") // unwrap the parse result - .next() - .unwrap(); - - parse_file(token) -} - -pub fn parse_file(token: Pair) -> Option { - if token.as_rule() != Rule::File { - return None; - } - - let mut blocks: Vec> = Vec::default(); - for inner_token in token.into_inner() { - if inner_token.as_rule() == Rule::Block { - parse_block(inner_token, &mut blocks, 0); - } - } - - if blocks.is_empty() { - return None; - } - - if let Some(last) = blocks[0].last_mut() { - last.get_settings_mut().next = NextBlock::EndOfFile; - } - - let mut ordered_blocks = Vec::default(); - - for child_level in 0..blocks.len() { - let mut index_offset = 0; - for childs_in_level in blocks.iter().take(child_level + 1) { - index_offset += childs_in_level.len(); - } - - for block in &mut blocks[child_level] { - let settings = block.get_settings_mut(); - for child in &mut settings.children { - *child += index_offset; - } - - ordered_blocks.push(block.clone()); - } - } - - Some(Database { - blocks: ordered_blocks, - }) -} - -fn parse_block(token: Pair, blocks: &mut Vec>, child_order: usize) { - if token.as_rule() != Rule::Block { - return; - } - - // (NamedBucket | Choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* - let mut block = Block::default(); - for inner_token in token.into_inner() { - match inner_token.as_rule() { - Rule::Text => { - if let Some(text) = parse_text(inner_token) { - block = text; - } - } - /*Rule::NamedBucket => { - if let Some(named_bucket) = parse_named_bucket(inner_token) { - block = named_bucket; - } - } */ - Rule::Choice => { - if let Some(choice) = parse_choice(inner_token) { - block = choice; - } - } - Rule::Command => { - add_command_to_block(inner_token, &mut block); - } - Rule::NewBlock => { - for inner_blocks_token in get_blocks_from_new_block(inner_token) { - let settings = block.get_settings_mut(); - parse_block(inner_blocks_token, blocks, child_order + 1); - settings.children.push(blocks[child_order + 1].len() - 1); - } - } - _ => {} - } - } - - while child_order >= blocks.len() { - blocks.push(Vec::default()); - } - - blocks[child_order].push(block); -} - -fn get_blocks_from_new_block(token: Pair) -> Vec> { - let mut blocks = Vec::default(); - - if token.as_rule() != Rule::NewBlock { - return blocks; - } - - for inner_token in token.into_inner() { - if inner_token.as_rule() == Rule::Block { - blocks.push(inner_token); - } - } - blocks -} -/* -fn parse_named_bucket(token: Pair) -> Option { - if token.as_rule() != Rule::NamedBucket { - return None; - } - - let mut blocks = Block { - // blocks_type: BlockType::NamedBucket, - ..Default::default() - }; - - for inner_token in token.into_inner() { - match inner_token.as_rule() { - Rule::Probability => { - blocks.probability = parse_probability(inner_token); - } - Rule::SnakeCase => { - blocks.text = inner_token.as_str().to_string(); - } - _ => {} - } - } - - Some(blocks) -} -*/ -fn parse_choice(token: Pair) -> Option { - if token.as_rule() != Rule::Choice { - return None; - } - - let mut text = String::default(); - let mut settings = BlockSettings::default(); - - for inner_token in token.into_inner() { - match inner_token.as_rule() { - Rule::Probability => { - settings.chance = parse_probability(inner_token); - } - Rule::String => { - text = inner_token.as_str().to_string(); - } - _ => {} - } - } - - Some(Block::Choice { id: text, settings }) -} - -fn parse_text(token: Pair) -> Option { - if token.as_rule() != Rule::Text { - return None; - } - - let mut text = String::default(); - let mut settings = BlockSettings::default(); - for inner_token in token.into_inner() { - match inner_token.as_rule() { - Rule::Probability => { - settings.chance = parse_probability(inner_token); - } - Rule::String => { - text = inner_token.as_str().to_string(); - } - _ => {} - } - } - - Some(Block::Text { id: text, settings }) -} - -fn add_command_to_settings(token: Pair, settings: &mut BlockSettings) { - if token.as_rule() != Rule::Command { - return; - } - - for inner_token in token.into_inner() { - match inner_token.as_rule() { - //Command = {NEWLINE ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert) } - Rule::Requirement => { - if let Some(requirement) = parse_requirement(inner_token) { - settings.requirements.push(requirement); - } - } - Rule::Frequency => { - if let Some(frequency) = parse_frequency(inner_token) { - settings.frequency_modifiers.push(frequency); - } - } - Rule::Modifier => { - if let Some(modifier) = parse_modifier(inner_token) { - settings.modifiers.push(modifier); - } - } - /* Rule::Divert => { - if let Some(divert) = parse_divert(inner_token) { - settings.divert.push(divert); - } - } */ - _ => {} - } - } -} -fn add_command_to_block(token: Pair, block: &mut Block) { - match block { - Block::Text { id: _, settings } => { - add_command_to_settings(token, settings); - } - Block::Choice { id: _, settings } => { - add_command_to_settings(token, settings); - } - _ => {} - } -} -/* -fn parse_divert(token: Pair) -> Option { - if token.as_rule() != Rule::Divert { - return None; - } - //Divert = { "->" ~ " "* ~ Identifier ~ ("." ~ Identifier)? } - - let mut knot: Option = None; - let mut stitch: Option = None; - - for inner_token in token.into_inner() { - if inner_token.as_rule() == Rule::Identifier { - if knot.is_none() { - knot = Some(inner_token.as_str().to_string()); - } else { - stitch = Some(inner_token.as_str().to_string()); - } - } - } - - knot.as_ref()?; - - Some(Divert { - knot: knot.unwrap(), - stitch, - }) -} */ - -fn parse_modifier(token: Pair) -> Option { - if token.as_rule() != Rule::Modifier { - return None; - } - //Modifier = { "mod" ~ " "+ ~ Identifier ~ " "+ ~ Value} - - let mut modifier = Modifier::default(); - for inner_token in token.into_inner() { - match inner_token.as_rule() { - Rule::Identifier => { - modifier.variable.id = inner_token.as_str().to_string(); - //TODO KIND - } - - Rule::Value => { - modifier.new_value = inner_token.as_str().to_string(); - } - _ => {} - } - } - Some(modifier) -} - -fn parse_frequency(token: Pair) -> Option { - if token.as_rule() != Rule::Frequency { - return None; - } - - let mut frequency = FrequencyModifier::default(); - for inner_token in token.into_inner() { - match inner_token.as_rule() { - Rule::Condition => { - if let Some(condition) = parse_condition(inner_token) { - frequency.condition = condition; - } - } - - Rule::Float | Rule::Integer => { - let value = inner_token.as_str().parse::().unwrap(); - frequency.value = value; - } - _ => {} - } - } - - Some(frequency) -} - -fn parse_requirement(token: Pair) -> Option { - if token.as_rule() != Rule::Requirement { - return None; - } - - for inner_token in token.into_inner() { - if inner_token.as_rule() == Rule::Condition { - if let Some(condition) = parse_condition(inner_token) { - return Some(Requirement { condition }); - } - } - } - None -} - -fn parse_condition(token: Pair) -> Option { - if token.as_rule() != Rule::Condition { - return None; - } - /*Condition = { Identifier ~ " "* ~ (ComparisonOperator ~ " "*)? ~ Value } */ - - let mut condition = Condition::default(); - - for inner_token in token.into_inner() { - match inner_token.as_rule() { - Rule::Identifier => { - condition.variable.id = inner_token.as_str().to_string(); - //TODO KIND - } - Rule::ComparisonOperator => { - if let Some(operator) = parse_comparison_operator(inner_token) { - condition.operator = operator; - } - } - Rule::Value => { - condition.value = inner_token.as_str().to_string(); - } - _ => {} - } - } - Some(condition) -} - -fn parse_comparison_operator(token: Pair) -> Option { - if token.as_rule() != Rule::ComparisonOperator { - return None; - } - - match token.as_str() { - "!=" => Some(Operator::NotEqual), - "!" => Some(Operator::NotEqual), - "=" => Some(Operator::Equal), - "<=" => Some(Operator::LessOrEqualThan), - ">=" => Some(Operator::GreaterOrEqualThan), - "<" => Some(Operator::LessThan), - ">" => Some(Operator::GreaterThan), - _ => None, - } -} - -//TODO: Integer -fn parse_probability(token: Pair) -> Option { - if token.as_rule() != Rule::Probability { - return None; - } - - for inner_token in token.into_inner() { - if inner_token.as_rule() == Rule::Float { - let value = inner_token.as_str().parse::().unwrap(); - - return Some(value); - } - if inner_token.as_rule() == Rule::Percentage { - if let Some(integer) = inner_token.into_inner().next() { - let value = integer.as_str().parse::().unwrap(); - return Some(value as f32 / 100.); - } - } - } - - None -} - -#[cfg(test)] -mod test { - use crate::*; - use cuentitos_common::{ - Block, BlockSettings, Condition, FrequencyModifier, Modifier, Operator, Requirement, Variable, - }; - use pest::iterators::Pair; - use pest::Parser; - use rand::distributions::Alphanumeric; - use rand::{self, Rng}; - - const SPECIAL_CHARACTERS: [&str; 11] = [".", "_", "/", ",", ";", "'", " ", "?", "!", "¿", "¡"]; - - const COMPARISON_OPERATORS: [&str; 7] = ["=", "!=", "<", ">", "<=", ">=", "!"]; - - const INDENTATIONS: [&str; 1] = [" "]; - - #[test] - fn parse_file_from_path_correctly() { - parse_database_from_path("../examples/story-example.cuentitos").unwrap(); - //TODO: compare with fixture - } - - #[test] - fn parse_file_correctly() { - let unparsed_file = include_str!("../../examples/story-example.cuentitos"); - let token = short_parse(Rule::File, &unparsed_file); - parse_file(token).unwrap(); - //TODO: compare with fixture - } - - /*#[test] - fn parse_blocks_correctly() { - /* - - BlockBlock = { - (NamedBucket | Choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* - } - - */ - - let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); - let probability_string = format!("({})", float); - - let string = make_random_string(); - let child_string = make_random_string(); - - let text_string = format!("{} {}", probability_string, string); - - let probability_token = short_parse(Rule::Probability, &probability_string); - let probability = parse_probability(probability_token); - - let knot = make_random_identifier(); - let divert_string = format!("\n -> {}", knot); - - let blocks_string = format!("{}{}\n\t{}", text_string, divert_string, child_string); - - let expected_divert = Divert { - knot: knot.clone(), - stitch: None, - }; - - let child_blocks = Block { - text: child_string, - blocks_type: BlockType::Text, - ..Default::default() - }; - - let expected_blocks = Block { - text: string, - probability: probability, - blocks_type: BlockType::Text, - divert: vec![expected_divert], - blocks: vec![child_blocks], - ..Default::default() - }; - - let blocks_token = short_parse(Rule::BlockBlock, &blocks_string); - let blocks = parse_blocks(blocks_token).unwrap(); - - assert_eq!(blocks, expected_blocks); - } - #[test] - fn get_blocks_from_new_block_correctly() { - let string = make_random_string(); - let new_block_string = format!("\t{}", string); - - let expected_blocks = Block { - text: string, - ..Default::default() - }; - - let new_block_token = short_parse(Rule::NewBlock, &new_block_string); - let blocks_token = get_blocks_from_new_block(new_block_token); - let blocks = parse_blocks(blocks_token[0].clone()).unwrap(); - - assert_eq!(blocks, expected_blocks); - } - #[test] - fn parse_named_bucket_correctly() { - //NamedBucket = { "[" ~ " "* ~ Probability? ~ SnakeCase ~ " "* ~ "]" } - - let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); - let probability_string = format!("({})", float); - - let snake_case = make_random_snake_case(); - - let named_bucket_string = format!("[{} {}]", probability_string, snake_case); - let token = short_parse(Rule::NamedBucket, &named_bucket_string); - let named_bucket = parse_named_bucket(token).unwrap(); - - let probability_token = short_parse(Rule::Probability, &probability_string); - let probability = parse_probability(probability_token); - - let expected_value = Block { - text: snake_case, - probability: probability, - blocks_type: BlockType::NamedBucket, - ..Default::default() - }; - assert_eq!(named_bucket, expected_value); - } - */ - #[test] - fn parse_choice_correctly() { - //Choice = { "*" ~ " "* ~ Probability? ~ String } - - let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); - let probability_string = format!("({})", float); - - let string = make_random_string(); - - let choice_string = format!("*{} {}", probability_string, string); - let token = short_parse(Rule::Choice, &choice_string); - let choice = parse_choice(token).unwrap(); - - let probability_token = short_parse(Rule::Probability, &probability_string); - let probability = parse_probability(probability_token); - - let expected_settings = BlockSettings { - chance: probability, - ..Default::default() - }; - let expected_value = Block::Choice { - id: string, - settings: expected_settings, - }; - assert_eq!(choice, expected_value); - } - - #[test] - fn parse_text_correctly() { - //Text = { Probability? ~ String } - - let float = rand::thread_rng().gen_range(0 as f32..1 as f32); - let probability_string = format!("({})", float); - - let string = make_random_string(); - - let text_string = format!("{} {}", probability_string, string); - let token = short_parse(Rule::Text, &text_string); - let text = parse_text(token).unwrap(); - - let probability_token = short_parse(Rule::Probability, &probability_string); - let probability = parse_probability(probability_token); - - let expected_settings = BlockSettings { - chance: probability, - ..Default::default() - }; - - let expected_value = Block::Text { - id: string, - settings: expected_settings, - }; - assert_eq!(text, expected_value); - } - - #[test] - fn command_gets_added_to_blocks_correctly() { - let text_id = make_random_string(); - let mut block = Block::Text { - id: text_id.clone(), - settings: BlockSettings::default(), - }; - - let mut block_settings = BlockSettings::default(); - // //Command = {NEWLINE ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert) } - - //Modifier - let identifier = make_random_identifier(); - let new_value = rand::thread_rng().gen::().to_string(); - let modifier_string = format!("\n mod {} {}", identifier, new_value); - - let expected_modifier = Modifier { - variable: Variable { - id: identifier, - ..Default::default() - }, - new_value, - }; - - block_settings.modifiers.push(expected_modifier); - - let token = short_parse(Rule::Command, &modifier_string); - add_command_to_block(token, &mut block); - - /* //Divert - let knot = make_random_identifier(); - let divert_string = format!("\n -> {}", knot); - - let expected_divert = Divert { - knot: knot.clone(), - stitch: None, - }; - expected_blocks.divert.push(expected_divert); - - let token = short_parse(Rule::Command, &divert_string); - add_command_to_blocks(token, &mut blocks); */ - - //Frequency - - let condition_string = make_random_condition(); - let condition_token = short_parse(Rule::Condition, &condition_string); - let condition = parse_condition(condition_token).unwrap(); - - let change_value: f32 = rand::thread_rng().gen(); - let frequency_string = format!("\n freq {} {}", condition_string, change_value); - let expected_frequency = FrequencyModifier { - condition, - value: change_value, - }; - - block_settings.frequency_modifiers.push(expected_frequency); - - let token = short_parse(Rule::Command, &frequency_string); - add_command_to_block(token, &mut block); - - //Requirement - - let condition_string = make_random_condition(); - let condition_token = short_parse(Rule::Condition, &condition_string); - let condition = parse_condition(condition_token).unwrap(); - - let requirement_string = format!("\n req {}", condition_string); - let expected_requirement = Requirement { condition }; - - block_settings.requirements.push(expected_requirement); - - let token = short_parse(Rule::Command, &requirement_string); - add_command_to_block(token, &mut block); - - let expected_block = Block::Text { - id: text_id, - settings: block_settings, - }; - - assert_eq!(block, expected_block); - } - /* - #[test] - fn parse_divert_correctly() { - //Divert = { "->" ~ " "* ~ Identifier ~ ("." ~ Identifier)? } - let knot = make_random_identifier(); - let divert_string = format!("-> {}", knot); - - let expected_value = Divert { - knot: knot.clone(), - stitch: None, - }; - - let token = short_parse(Rule::Divert, &divert_string); - let divert = parse_divert(token).unwrap(); - - assert_eq!(divert, expected_value); - - let stitch = make_random_identifier(); - - let divert_string = format!("-> {}.{}", knot, stitch); - - let expected_value = Divert { - knot, - stitch: Some(stitch), - }; - - let token = short_parse(Rule::Divert, &divert_string); - let divert = parse_divert(token).unwrap(); - - assert_eq!(divert, expected_value); - } */ - - #[test] - fn parse_modifier_correctly() { - //Modifier = { "mod" ~ " "+ ~ Identifier ~ " "+ ~ Value} - let identifier = make_random_identifier(); - let new_value = rand::thread_rng().gen::().to_string(); - let modifier_string = format!("mod {} {}", identifier, new_value); - - let expected_value = Modifier { - variable: Variable { - id: identifier, - ..Default::default() - }, - new_value, - }; - - let token = short_parse(Rule::Modifier, &modifier_string); - let modifier = parse_modifier(token).unwrap(); - - assert_eq!(modifier, expected_value); - } - - #[test] - fn parse_frequency_correctly() { - //Frequency = { "freq" ~ " "+ ~ Condition ~ " "+ ~ ( Float | Integer ) } - let condition_string = make_random_condition(); - let condition_token = short_parse(Rule::Condition, &condition_string); - let condition = parse_condition(condition_token).unwrap(); - - let change_value: f32 = rand::thread_rng().gen(); - let frequency_string = format!("freq {} {}", condition_string, change_value); - let expected_value = FrequencyModifier { - condition, - value: change_value, - }; - - let token = short_parse(Rule::Frequency, &frequency_string); - let frequency = parse_frequency(token).unwrap(); - - assert_eq!(frequency, expected_value); - } - - #[test] - fn parse_requirement_correctly() { - //Requirement = { "req" ~ " "+ ~ Condition } - let condition_string = make_random_condition(); - let condition_token = short_parse(Rule::Condition, &condition_string); - let condition = parse_condition(condition_token).unwrap(); - - let requirement_string = format!("req {}", condition_string); - let expected_value = Requirement { condition }; - - let token = short_parse(Rule::Requirement, &requirement_string); - let requirement = parse_requirement(token).unwrap(); - - assert_eq!(requirement, expected_value); - } - - #[test] - fn parse_condition_correctly() { - /*Condition = { Identifier ~ " "* ~ (ComparisonOperator ~ " "*)? ~ Value } */ - let identifier = make_random_identifier(); - - let operator_string = - COMPARISON_OPERATORS[rand::thread_rng().gen_range(0..COMPARISON_OPERATORS.len())]; - let operator_token = short_parse(Rule::ComparisonOperator, operator_string); - let operator = parse_comparison_operator(operator_token).unwrap(); - - let value: f32 = rand::thread_rng().gen(); - - let condition_string = format!("{} {} {}", identifier, operator_string, value); - - let expected_value = Condition { - variable: Variable { - id: identifier, - ..Default::default() - }, - operator: operator, - value: value.to_string(), - }; - - let token = short_parse(Rule::Condition, &condition_string); - let condition = parse_condition(token).unwrap(); - - assert_eq!(condition, expected_value); - } - - #[test] - fn parse_operators_correctly() { - let token = short_parse(Rule::ComparisonOperator, "="); - assert_eq!(parse_comparison_operator(token).unwrap(), Operator::Equal); - - let token = short_parse(Rule::ComparisonOperator, "!="); - assert_eq!( - parse_comparison_operator(token).unwrap(), - Operator::NotEqual - ); - - let token = short_parse(Rule::ComparisonOperator, "<"); - assert_eq!( - parse_comparison_operator(token).unwrap(), - Operator::LessThan - ); - - let token = short_parse(Rule::ComparisonOperator, ">"); - assert_eq!( - parse_comparison_operator(token).unwrap(), - Operator::GreaterThan - ); - - let token = short_parse(Rule::ComparisonOperator, "<="); - assert_eq!( - parse_comparison_operator(token).unwrap(), - Operator::LessOrEqualThan - ); - - let token = short_parse(Rule::ComparisonOperator, ">="); - assert_eq!( - parse_comparison_operator(token).unwrap(), - Operator::GreaterOrEqualThan - ); - - let token = short_parse(Rule::ComparisonOperator, "!"); - assert_eq!( - parse_comparison_operator(token).unwrap(), - Operator::NotEqual - ); - } - /* #[test] - fn percentage_probability_parse_correctly() { - //probability = { "(" ~ " "* ~ ( percentage | float | integer ) ~ " "* ~ ")" ~ " "* } - let percentage = rand::thread_rng().gen_range(u8::MIN..u8::MAX); - let expected_value: PercentageProbability = PercentageProbability { value: percentage }; - - let probability_string = format!("({}%)", percentage); - - let token = short_parse(Rule::Probability, &probability_string); - - let probability = parse_probability(token).unwrap(); - let probability = probability - .as_any() - .downcast_ref::() - .unwrap(); - - assert_eq!(*probability, expected_value); - } - - #[test] - fn float_probability_parse_correctly() { - let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); - let expected_value = FloatProbability { value: float }; - - let probability_string = format!("({})", float); - - let token = PalabritasParser::parse(Rule::Probability, &probability_string) - .expect("unsuccessful parse") - .next() - .unwrap(); - - let probability = parse_probability(token).unwrap(); - let probability = probability - .as_any() - .downcast_ref::() - .unwrap(); - - assert_eq!(*probability, expected_value); - } - */ - #[test] - fn parse_char_rule() { - //char = { ASCII_ALPHANUMERIC | "." | "_" | "/" | "," | ";" | "'" | " " | "?" | "!" | "¿" | "¡"} - let alphanumeric_char = (rand::thread_rng().sample(&Alphanumeric) as char).to_string(); - assert_parse_rule(Rule::Char, &alphanumeric_char); - - for special_character in SPECIAL_CHARACTERS { - assert_parse_rule(Rule::Char, special_character); - } - } - - #[test] - fn parse_integer_rule() { - //integer = { "-"? ~ ASCII_DIGIT+ } - let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); - assert_parse_rule(Rule::Integer, &integer); - } - - #[test] - fn parse_float_rule() { - //float = { integer ~ "." ~ ASCII_DIGIT* } - let float = rand::thread_rng() - .gen_range(i8::MIN as f32..i8::MAX as f32) - .to_string(); - assert_parse_rule(Rule::Float, &float); - } - - #[test] - fn parse_percentage_rule() { - //percentage = { integer ~ "%" } - let percentage = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string() + "%"; - assert_parse_rule(Rule::Percentage, &percentage); - } - - #[test] - fn parse_indentation_rule() { - //indentation = { " } - for indentation in INDENTATIONS { - assert_parse_rule(Rule::Indentation, &indentation); - } - } - - #[test] - fn parse_string_rule() { - //string = { char+ } - assert_parse_rule(Rule::String, &make_random_string()); - } - - #[test] - fn parse_comparison_operator_rule() { - //comparison_operator = { "!=" | "=" | "<=" | ">=" | "<" | ">" | "!" } - for operator in COMPARISON_OPERATORS { - assert_parse_rule(Rule::ComparisonOperator, operator); - } - } - - #[test] - fn parse_snake_case_rule() { - //snake_case = { ASCII_ALPHA_LOWER ~ (ASCII_ALPHA_LOWER | "_" | ASCII_DIGIT)* } - assert_parse_rule(Rule::SnakeCase, &make_random_snake_case()); - } - - #[test] - fn parse_identifier_rule() { - //identifier = { (ASCII_ALPHA | "_" ) ~ (ASCII_ALPHANUMERIC | "_")* } - assert_parse_rule(Rule::Identifier, &make_random_identifier()); - } - - #[test] - fn parse_value_rule() { - //value = { identifier | float | percentage | integer} - let identifier = make_random_identifier(); - assert_parse_rule(Rule::Value, &identifier); - - let float = rand::thread_rng() - .gen_range(i8::MIN as f32..i8::MAX as f32) - .to_string(); - assert_parse_rule(Rule::Value, &float); - - let percentage = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string() + "%"; - assert_parse_rule(Rule::Value, &percentage); - - let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); - assert_parse_rule(Rule::Value, &integer); - } - - #[test] - fn parse_condition_rule() { - //condition = { identifier ~ " "* ~ (comparison_operator ~ " "*)? ~ value } - let identifier = make_random_identifier(); - let comparison_operator = - COMPARISON_OPERATORS[rand::thread_rng().gen_range(0..COMPARISON_OPERATORS.len())]; - let value = make_random_identifier(); - - assert_parse_rule(Rule::Condition, &(identifier.clone() + " " + &value)); - assert_parse_rule( - Rule::Condition, - &(identifier + comparison_operator + &value), - ); - } - - #[test] - fn parse_requirement_rule() { - //requirement = { "req" ~ " "+ ~ condition } - let condition = make_random_condition(); - assert_parse_rule(Rule::Requirement, &("req ".to_string() + &condition)); - } - #[test] - fn parse_frequency_rule() { - //frequency = { "freq" ~ " "+ ~ condition ~ " "+ ~ ( float | integer ) } - let condition = make_random_condition(); - let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); - let float = rand::thread_rng() - .gen_range(i8::MIN as f32..i8::MAX as f32) - .to_string(); - - assert_parse_rule( - Rule::Frequency, - &("freq ".to_string() + &condition + " " + &integer), - ); - assert_parse_rule( - Rule::Frequency, - &("freq ".to_string() + &condition + " " + &float), - ); - } - - #[test] - fn parse_modifier_rule() { - //modifier = { "mod" ~ " "+ ~ identifier ~ " "+ ~ value} - let identifier = make_random_identifier(); - let value = make_random_identifier(); - - assert_parse_rule( - Rule::Modifier, - &("mod ".to_string() + &identifier + " " + &value), - ); - } - - #[test] - fn parse_divert_rule() { - //divert = { "->" ~ " "* ~ identifier ~ ("." ~ identifier)? } - let knot = make_random_identifier(); - let stitch = make_random_identifier(); - - assert_parse_rule(Rule::Divert, &("->".to_string() + &knot)); - assert_parse_rule(Rule::Divert, &("->".to_string() + &knot + "." + &stitch)); - } - - #[test] - fn parse_command_rule() { - //Command = {NEWLINE ~ Indentation* ~ (Requirement | Frequency | Modifier | Divert) } - let requirement = "\nreq ".to_string() + &(make_random_condition()); - assert_parse_rule(Rule::Command, &(requirement)); - - let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); - let frequency = "\nfreq ".to_string() + &make_random_condition() + " " + &integer; - assert_parse_rule(Rule::Command, &(frequency)); - - let modifier = - "\nmod ".to_string() + &make_random_identifier() + " " + &make_random_identifier(); - assert_parse_rule(Rule::Command, &(modifier)); - - let divert = "\n->".to_string() + &make_random_identifier(); - assert_parse_rule(Rule::Command, &(divert)); - } - - #[test] - fn parse_probability_rule() { - //probability = { "(" ~ " "* ~ ( percentage | float | integer ) ~ " "* ~ ")" ~ " "* } - let percentage = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string() + "%"; - assert_parse_rule(Rule::Probability, &("(".to_string() + &percentage + ")")); - - let float = rand::thread_rng() - .gen_range(i8::MIN as f32..i8::MAX as f32) - .to_string(); - assert_parse_rule(Rule::Probability, &("(".to_string() + &float + ")")); - - let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); - assert_parse_rule(Rule::Probability, &("(".to_string() + &integer + ")")); - } - - #[test] - fn parse_section_rule() { - //Knot = {"===" ~ " "* ~ Identifier ~ " "* ~"===" ~ " "* ~ NEWLINE ~ ( NEWLINE | BlockBlock | Stitch | NamedBucket )* } - let identifier = make_random_identifier(); - assert_parse_rule(Rule::Section, &("#".to_string() + &identifier + "\n")); - } - - #[test] - fn parse_subsection_rule() { - //stitch = {"=" ~ " "* ~ identifier ~ " "*} - let identifier = make_random_identifier(); - assert_parse_rule(Rule::Subsection, &("##".to_string() + &identifier)); - } - - #[test] - fn parse_text_rule() { - //text = { probability? ~ string } - let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); - let probability = "(".to_string() + &integer + ")"; - assert_parse_rule(Rule::Text, &make_random_string()); - assert_parse_rule(Rule::Text, &(probability + &make_random_string())); - } - - #[test] - fn parse_choice_rule() { - //choice = { "*" ~ " "* ~ text } - let text = make_random_string(); - assert_parse_rule(Rule::Choice, &("*".to_string() + &text)); - } - - #[test] - fn parse_named_bucket_rule() { - //named_bucket = { "[" ~ " "* ~ probability? ~ snake_case ~ " "* ~ "]"} - let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); - let probability = "(".to_string() + &integer + ")"; - - assert_parse_rule( - Rule::NamedBucket, - &("[".to_string() + &make_random_snake_case() + "]"), - ); - - assert_parse_rule( - Rule::NamedBucket, - &("[".to_string() + &probability + &make_random_snake_case() + "]"), - ); - } - - /* #[test] - fn parse_block_blocks_rule() { - //BlockBlock = { - // (choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* - //} - - let choice = "*".to_string() + &make_random_string(); - assert_parse_rule(Rule::BlockBlock, &choice); - - let text = make_random_string(); - assert_parse_rule(Rule::BlockBlock, &text); - - let new_block = "\n ".to_string() + &make_random_string(); - assert_parse_rule(Rule::BlockBlock, &(text + &new_block)); - } - */ - #[test] - fn parse_file_rule() { - //File = { SOI ~ (NEWLINE | BlockBlock | Knot )* ~ EOI } - let unparsed_file = include_str!("../../examples/story-example.cuentitos"); - assert_parse_rule(Rule::File, &unparsed_file); - } - - fn assert_parse_rule(rule: Rule, input: &str) { - let pair = PalabritasParser::parse(rule, input) - .expect("unsuccessful parse") - .next() - .unwrap(); - assert_eq!(pair.as_rule(), rule); - assert_eq!(pair.as_str(), input); - } - - fn make_random_condition() -> String { - make_random_identifier() + " " + &make_random_identifier() - } - - fn make_random_snake_case() -> String { - let alphanumeric_size = rand::thread_rng().gen_range(1..20); - let underscore_size = rand::thread_rng().gen_range(1..5); - - //Making alphanumeric string - let snake_case: Vec = rand::thread_rng() - .sample_iter(&Alphanumeric) - .take(alphanumeric_size) - .collect(); - - let mut snake_case = std::str::from_utf8(&snake_case).unwrap().to_string(); - - //Adding underscores - for _ in 0..underscore_size { - snake_case += "_"; - } - shuffle_string(&mut snake_case); - - //Making sure starting character is not a number - let mut starting_char = rand::thread_rng().sample(&Alphanumeric) as char; - while starting_char.is_numeric() { - starting_char = rand::thread_rng().sample(&Alphanumeric) as char; - } - - snake_case = starting_char.to_string() + &snake_case; - - snake_case.to_lowercase() - } - - fn make_random_identifier() -> String { - let alphanumeric_size = rand::thread_rng().gen_range(1..20); - let underscore_size = rand::thread_rng().gen_range(1..5); - - //Making alphanumeric string - let identifier: Vec = rand::thread_rng() - .sample_iter(&Alphanumeric) - .take(alphanumeric_size) - .collect(); - - let mut identifier = std::str::from_utf8(&identifier).unwrap().to_string(); - - //Adding underscores - for _ in 0..underscore_size { - identifier += "_"; - } - shuffle_string(&mut identifier); - - //Making sure starting character is not a number - let mut starting_char = rand::thread_rng().sample(&Alphanumeric) as char; - while starting_char.is_numeric() { - starting_char = rand::thread_rng().sample(&Alphanumeric) as char; - } - - identifier = starting_char.to_string() + &identifier; - - identifier - } - - fn make_random_string() -> String { - let alphanumeric_size = rand::thread_rng().gen_range(1..20); - let special_characters_size = rand::thread_rng().gen_range(1..20); - - //Making alphanumeric string - let string: Vec = rand::thread_rng() - .sample_iter(&Alphanumeric) - .take(alphanumeric_size) - .collect(); - - let mut string = std::str::from_utf8(&string).unwrap().to_string(); - - //Adding special characters - for _ in 0..special_characters_size { - string += SPECIAL_CHARACTERS[rand::thread_rng().gen_range(0..SPECIAL_CHARACTERS.len())]; - } - - shuffle_string(&mut string); - string.trim().to_string() - } - - fn shuffle_string(string: &mut String) { - //Shuffling characters - let mut final_string = String::default(); - - while !string.is_empty() { - let mut index = rand::thread_rng().gen_range(0..string.len()); - while !string.is_char_boundary(index) { - index -= 1; - } - final_string += &string.remove(index).to_string(); - } - - *string = final_string; - } - - fn short_parse(rule: Rule, input: &str) -> Pair { - PalabritasParser::parse(rule, input) - .expect("unsuccessful parse") - .next() - .unwrap() - } -} +mod error; diff --git a/palabritas/src/palabritas.pest b/palabritas/src/palabritas.pest index 6fafe2e..d162e5b 100644 --- a/palabritas/src/palabritas.pest +++ b/palabritas/src/palabritas.pest @@ -1,4 +1,5 @@ -Char = { (!NEWLINE ~ ANY)+ } +ReservedKeywords = { "req" | "freq" | "mod" | "->" | "`" | "*" | "#" | "##" | "//" } +Char = { (!NewLine ~ ANY)+ } Integer = { "-"? ~ ASCII_DIGIT+ } Float = { Integer ~ "." ~ ASCII_DIGIT* } Percentage = { Integer ~ "%" } @@ -8,25 +9,25 @@ ComparisonOperator = { "!=" | "=" | "<=" | ">=" | "<" | ">" | "!" } SnakeCase = { ASCII_ALPHA_LOWER ~ (ASCII_ALPHA_LOWER | "_" | ASCII_DIGIT)* } Identifier = { (ASCII_ALPHA | "_" ) ~ (ASCII_ALPHANUMERIC | "_")* } -Value = { Identifier | Float | Percentage | Integer} -Condition = { Identifier ~ " "* ~ (ComparisonOperator ~ " "*)? ~ Value } +Value = { Identifier | "="? ~ Float | Percentage | "="? ~ Integer } +Condition = { "!"? ~ Identifier ~ " "* ~ (ComparisonOperator ~ " "*)? ~ Value? } Requirement = { "req" ~ " "+ ~ Condition } Frequency = { "freq" ~ " "+ ~ Condition ~ " "+ ~ ( Float | Integer ) } -Modifier = { "mod" ~ " "+ ~ Identifier ~ " "+ ~ Value} +Modifier = { "mod" ~ " "+ ~ Identifier ~ " "+ ~ Value } Divert = { "->" ~ " "* ~ Identifier ~ ("." ~ Identifier)? } Function = {"`" ~ SnakeCase ~ (" " ~ Value)* ~ "`"} -Command = {NEWLINE ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert | Function) } +Command = {NewLine ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert | Function) } -Probability = { "(" ~ " "* ~ ( Percentage | Float | Integer ) ~ " "* ~ ")" ~ " "* } +Chance = { "(" ~ " "* ~ ( Percentage | Float | Integer ) ~ " "* ~ ")" ~ " "* } -Section = {"#" ~ " "* ~ Identifier ~ " "* ~ NEWLINE ~ ( NEWLINE | Block | Subsection )* } -Subsection = { "##" ~ " "* ~ Identifier ~ " "* ~ (NEWLINE | EOI) ~ NewBlock*} +Section = {"#" ~ " "* ~ Identifier ~ " "* ~ Command* ~ NewLine ~ ( NewLine | NewBlock | Subsection )* } +Subsection = { "##" ~ " "* ~ Identifier ~ " "* ~ Command* ~ (NewLine | EOI) ~ (NewBlock | NewLine)*} -Text = { Probability? ~ String } -Choice = { "*" ~ " "* ~ Probability? ~ String } -NamedBucket = { "[" ~ " "* ~ Probability? ~ SnakeCase ~ " "* ~ "]" } +Text = { !Indentation ~ !ReservedKeywords ~ Chance? ~ String } +Choice = { "*" ~ " "* ~ Chance? ~ String } +NamedBucket = { "[" ~ " "* ~ Chance? ~ SnakeCase ~ " "* ~ "]" } NewBlock = { // The first line in the block @@ -38,7 +39,11 @@ NewBlock = { } Block = { - (NamedBucket | Choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* + (NamedBucket | Choice | Text) ~ " "* ~ Command* ~ " "* ~ (NewLine | EOI) ~ NewBlock* } -File = { SOI ~ (NEWLINE | Block | Section )* ~ EOI } \ No newline at end of file +Database = { SOI ~ (NewLine | Block | Section )* ~ EOI } + +COMMENT = _{ "//" ~ (!(NewLine | EOI) ~ ANY)* ~ (NewLine | EOI) } +NewLine = _{ EmptyLine | NEWLINE } +EmptyLine = _{" "* ~ NEWLINE } \ No newline at end of file diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs new file mode 100644 index 0000000..441f249 --- /dev/null +++ b/palabritas/src/parser.rs @@ -0,0 +1,1900 @@ +extern crate pest; +use std::collections::HashMap; +use std::path::Path; + +use cuentitos_common::{ + Block, BlockId, BlockSettings, Chance, Condition, Config, Database, FrequencyModifier, Modifier, + NextBlock, Operator, Requirement, SectionKey, VariableKind +}; +use pest::{iterators::Pair, Parser}; + +use pest::error::LineColLocation; + +use crate::error::{ErrorInfo, PalabritasError}; + +#[derive(Parser)] +#[grammar = "palabritas.pest"] +pub struct PalabritasParser; + +pub fn parse_database_from_path

(path: P) -> Result +where + P: AsRef, +{ + if !path.as_ref().exists() { + return Err(PalabritasError::PathDoesntExist( + path.as_ref().to_path_buf(), + )); + } + let palabritas_path = match path.as_ref().is_file() { + true => path.as_ref().to_path_buf(), + false => { + //TODO: search for it instead + return Err(PalabritasError::PathIsNotAFile(path.as_ref().to_path_buf())); + } + }; + let mut config_path = palabritas_path.clone(); + config_path.pop(); + let config = match Config::load(&config_path) { + Ok(config) => config, + Err(err) => { + return Err(PalabritasError::CantReadFile { + path: config_path, + message: err.to_string(), + }); + } + }; + + let str = match std::fs::read_to_string(&palabritas_path) { + Ok(str) => str, + Err(e) => { + return Err(PalabritasError::CantReadFile { + path: palabritas_path, + message: e.to_string(), + }); + } + }; + + match PalabritasParser::parse(Rule::Database, &str) { + Ok(mut result) => parse_database(result.next().unwrap(), config), + Err(error) => { + let (line, col) = match error.line_col { + LineColLocation::Pos(line_col) => line_col, + LineColLocation::Span(start, _) => (start.0, start.1), + }; + + Err(PalabritasError::ParseError { + file: palabritas_path.display().to_string(), + line, + col, + reason: error.to_string(), + }) + } + } +} + +pub fn parse_database(token: Pair, config: Config) -> Result { + match_rule(&token, Rule::Database)?; + + let mut blocks: Vec> = Vec::default(); + let mut sections = HashMap::default(); // pub sections: HashMap + for inner_token in token.into_inner() { + match inner_token.as_rule() { + Rule::Block => { + parse_block(inner_token, &mut blocks, 0)?; + } + Rule::Section => { + parse_section(inner_token, &mut blocks, &mut sections)?; + } + _ => {} + } + } + + if blocks.is_empty() { + return Err(PalabritasError::FileIsEmpty); + } + + if let Some(last) = blocks[0].last_mut() { + last.get_settings_mut().next = NextBlock::EndOfFile; + } + + let mut ordered_blocks = Vec::default(); + + for child_level in 0..blocks.len() { + let mut index_offset = 0; + for childs_in_level in blocks.iter().take(child_level + 1) { + index_offset += childs_in_level.len(); + } + + for block in &mut blocks[child_level] { + let settings = block.get_settings_mut(); + for child in &mut settings.children { + *child += index_offset; + } + + ordered_blocks.push(block.clone()); + } + } + + Ok(Database { + blocks: ordered_blocks, + sections, + config, + }) +} + +fn parse_section( + token: Pair, + blocks: &mut Vec>, + sections: &mut HashMap, +) -> Result<(), PalabritasError> { + match_rule(&token, Rule::Section)?; + if blocks.is_empty() { + blocks.push(Vec::default()); + } + + blocks[0].push(Block::default()); + let block_id = blocks[0].len() - 1; + + let mut settings = BlockSettings::default(); + let mut id: String = String::default(); + //Section = {"#" ~ " "* ~ Identifier ~ " "* ~ Command* ~ NewLine ~ ( NewLine | NewBlock | Subsection )* } + for inner_token in token.into_inner() { + match inner_token.as_rule() { + Rule::Identifier => { + id = inner_token.as_str().to_string(); + } + Rule::Command => { + add_command_to_settings(inner_token, &mut settings); + } + Rule::NewBlock => { + for inner_blocks_token in get_blocks_from_new_block(inner_token) { + parse_block(inner_blocks_token, blocks, 1)?; + settings.children.push(blocks[1].len() - 1); + } + } + Rule::Subsection => { + parse_subsection(inner_token, blocks, &id, sections)?; + } + _ => {} + } + } + + sections.insert( + SectionKey { + section: id.clone(), + subsection: None, + }, + block_id, + ); + + blocks[0][block_id] = Block::Section { id, settings }; + + Ok(()) +} + +fn parse_subsection( + token: Pair, + blocks: &mut Vec>, + section_name: &str, + sections: &mut HashMap, +) -> Result<(), PalabritasError> { + match_rule(&token, Rule::Subsection)?; + + if blocks.is_empty() { + blocks.push(Vec::default()); + } + + blocks[0].push(Block::default()); + let block_id = blocks[0].len() - 1; + + let mut settings = BlockSettings::default(); + let mut id: String = String::default(); + let mut subsections = Vec::default(); + //Section = {"#" ~ " "* ~ Identifier ~ " "* ~ Command* ~ NewLine ~ ( NewLine | NewBlock | Subsection )* } + for inner_token in token.into_inner() { + match inner_token.as_rule() { + Rule::Identifier => { + id = inner_token.as_str().to_string(); + } + Rule::Command => { + add_command_to_settings(inner_token, &mut settings); + } + Rule::NewBlock => { + for inner_blocks_token in get_blocks_from_new_block(inner_token) { + parse_block(inner_blocks_token, blocks, 1)?; + settings.children.push(blocks[1].len() - 1); + } + } + Rule::Subsection => { + parse_subsection(inner_token, blocks, section_name, sections)?; + subsections.push(blocks[0].len() - 1); + } + _ => {} + } + } + + sections.insert( + SectionKey { + section: section_name.to_string(), + subsection: Some(id.clone()), + }, + block_id, + ); + + blocks[0][block_id] = Block::Section { id, settings }; + Ok(()) +} +fn parse_block( + token: Pair, + blocks: &mut Vec>, + child_order: usize, +) -> Result<(), PalabritasError> { + match_rule(&token, Rule::Block)?; + + // (NamedBucket | Choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* + let mut block = Block::default(); + let current_line = token.line_col().0; + for inner_token in token.into_inner() { + match inner_token.as_rule() { + Rule::Text => { + if let Some(text) = parse_text(inner_token) { + block = text; + } + } + Rule::NamedBucket => { + if let Some(named_bucket) = parse_named_bucket(inner_token) { + block = named_bucket; + } + } + Rule::Choice => { + if let Some(choice) = parse_choice(inner_token) { + block = choice; + } + } + Rule::Command => { + add_command_to_block(inner_token, &mut block); + } + Rule::NewBlock => { + for inner_blocks_token in get_blocks_from_new_block(inner_token) { + let settings = block.get_settings_mut(); + parse_block(inner_blocks_token, blocks, child_order + 1)?; + settings.children.push(blocks[child_order + 1].len() - 1); + } + } + _ => {} + } + } + + while child_order >= blocks.len() { + blocks.push(Vec::default()); + } + + blocks[child_order].push(block); + + let block_id = blocks[child_order].len() - 1; + if let Block::Bucket { + name: _, + settings: _, + } = blocks[child_order][block_id] + { + validate_bucket_data(block_id, blocks, child_order, current_line)?; + update_children_probabilities_to_frequency(blocks[child_order].len() - 1, blocks, child_order); + } else if is_child_unnamed_bucket(block_id, blocks, child_order) { + make_childs_bucket(block_id, blocks, child_order); + } + + Ok(()) +} + +fn is_child_unnamed_bucket(block: usize, blocks: &Vec>, child_order: usize) -> bool { + let block = &blocks[child_order][block]; + let children = &block.get_settings().children; + + if children.len() < 2 || child_order + 1 >= blocks.len() { + return false; + } + + let mut total_probability = 0.; + let mut is_frequency: bool = false; + for i in 0..blocks[child_order + 1].len() { + for child in children { + if *child == i { + match blocks[child_order + 1][i].get_settings().chance { + cuentitos_common::Chance::None => { + return false; + } + cuentitos_common::Chance::Frequency(_) => { + is_frequency = true; + } + cuentitos_common::Chance::Probability(value) => { + total_probability += value; + } + } + } + } + } + + if is_frequency && total_probability > 0. { + return false; + } + + if is_frequency { + return true; + } + + total_probability == 1. +} + +fn make_childs_bucket(block_id: usize, blocks: &mut Vec>, child_order: usize) { + if child_order + 1 >= blocks.len() { + return; + } + + update_children_probabilities_to_frequency(block_id, blocks, child_order); + + let block = blocks[child_order][block_id].clone(); + let block_settings = block.get_settings(); + let bucket = Block::Bucket { + name: None, + settings: BlockSettings { + children: block_settings.children.clone(), + ..Default::default() + }, + }; + + blocks[child_order].push(bucket); + + move_to_lower_level(blocks[child_order].len() - 1, blocks, child_order); + + let new_children = vec![blocks[child_order + 1].len() - 1]; + let block = &mut blocks[child_order][block_id]; + let block_settings = block.get_settings_mut(); + block_settings.children = new_children; +} + +fn validate_bucket_data( + bucket: usize, + blocks: &mut [Vec], + child_order: usize, + current_line: usize, +) -> Result<(), PalabritasError> { + let bucket = &blocks[child_order][bucket]; + let settings = bucket.get_settings(); + + let bucket_name = match bucket { + Block::Bucket { + name: Some(string), + settings: _, + } => string.clone(), + _ => String::default(), + }; + let mut frequency_found = false; + let mut chance_found = false; + let mut total_probability = 0.; + + let mut inner_line = current_line; + for child in &settings.children { + inner_line += 1; + let child_block = &blocks[child_order + 1][*child]; + let child_settings = child_block.get_settings(); + match child_settings.chance { + Chance::None => { + let string = match child_block { + Block::Bucket { + name: Some(name), + settings: _, + } => name.clone(), + Block::Text { id, settings: _ } => id.clone(), + Block::Choice { id, settings: _ } => id.clone(), + _ => String::default(), + }; + return Err(PalabritasError::BucketMissingProbability(ErrorInfo { + line: inner_line, + string, + })); + } + Chance::Frequency(_) => frequency_found = true, + Chance::Probability(probability) => { + chance_found = true; + total_probability += probability; + } + } + + if frequency_found && chance_found { + return Err(PalabritasError::BucketHasFrequenciesAndChances(ErrorInfo { + line: current_line, + string: bucket_name, + })); + } + } + + if chance_found && total_probability != 1. { + return Err(PalabritasError::BucketSumIsNot1(ErrorInfo { + line: current_line, + string: bucket_name, + })); + } + + Ok(()) +} + +fn move_to_lower_level(index: usize, blocks: &mut Vec>, child_order: usize) { + update_higher_level(index, blocks, child_order); + + let child_count = blocks[child_order][index].get_settings().children.len(); + for i in 0..child_count { + for e in i..child_count { + if blocks[child_order][index].get_settings().children[e] + > blocks[child_order][index].get_settings().children[i] + { + blocks[child_order][index].get_settings_mut().children[e] -= 1; + } + } + + let child_index = blocks[child_order][index].get_settings().children[i]; + move_to_lower_level(child_index, blocks, child_order + 1); + } + + let mut block: Block = blocks[child_order].remove(index); + if blocks.len() <= child_order + 1 { + blocks.push(Vec::default()); + } + + let mut new_children = Vec::default(); + for i in 0..child_count { + let new_child_index = blocks[child_order + 2].len() - 1 - i; + new_children.push(new_child_index); + } + + new_children.reverse(); + + block.get_settings_mut().children = new_children; + blocks[child_order + 1].push(block); + + fn update_higher_level(index: usize, blocks: &mut [Vec], child_order: usize) { + if child_order == 0 { + return; + } + for higher_level_block in &mut blocks[child_order - 1] { + let higher_level_settings = higher_level_block.get_settings_mut(); + if higher_level_settings.children.contains(&index) { + continue; + } + for i in 0..higher_level_settings.children.len() { + if higher_level_settings.children[i] > index { + higher_level_settings.children[i] -= 1; + } + } + } + } +} + +fn update_children_probabilities_to_frequency( + block: usize, + blocks: &mut Vec>, + child_order: usize, +) { + if child_order + 1 >= blocks.len() { + return; + } + let block = blocks[child_order][block].clone(); + let children = &block.get_settings().children; + + for child in children.iter().rev() { + let child = &mut blocks[child_order + 1][*child]; + let mut child_settings = child.get_settings_mut(); + if let Chance::Probability(chance) = child_settings.chance { + child_settings.chance = Chance::Frequency((chance * 100.) as u32); + } + } +} + +fn get_blocks_from_new_block(token: Pair) -> Vec> { + let mut blocks = Vec::default(); + + if token.as_rule() != Rule::NewBlock { + return blocks; + } + + for inner_token in token.into_inner() { + if inner_token.as_rule() == Rule::Block { + blocks.push(inner_token); + } + } + blocks +} + +fn parse_named_bucket(token: Pair) -> Option { + if token.as_rule() != Rule::NamedBucket { + return None; + } + + let mut name = None; + let mut settings = BlockSettings::default(); + for inner_token in token.into_inner() { + match inner_token.as_rule() { + Rule::Chance => { + settings.chance = parse_chance(inner_token); + } + Rule::SnakeCase => { + name = Some(inner_token.as_str().to_string()); + } + _ => {} + } + } + + Some(Block::Bucket { name, settings }) +} + +fn parse_choice(token: Pair) -> Option { + if token.as_rule() != Rule::Choice { + return None; + } + + let mut text = String::default(); + let mut settings = BlockSettings::default(); + + for inner_token in token.into_inner() { + match inner_token.as_rule() { + Rule::Chance => { + settings.chance = parse_chance(inner_token); + } + Rule::String => { + text = inner_token.as_str().to_string(); + } + _ => {} + } + } + + Some(Block::Choice { id: text, settings }) +} + +fn parse_text(token: Pair) -> Option { + if token.as_rule() != Rule::Text { + return None; + } + + let mut text = String::default(); + let mut settings = BlockSettings::default(); + for inner_token in token.into_inner() { + match inner_token.as_rule() { + Rule::Chance => { + settings.chance = parse_chance(inner_token); + } + Rule::String => { + text = inner_token.as_str().to_string(); + } + _ => {} + } + } + + Some(Block::Text { id: text, settings }) +} + +fn add_command_to_settings(token: Pair, settings: &mut BlockSettings) { + if token.as_rule() != Rule::Command { + return; + } + + for inner_token in token.into_inner() { + match inner_token.as_rule() { + //Command = {NEWLINE ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert) } + Rule::Requirement => { + if let Some(requirement) = parse_requirement(inner_token) { + settings.requirements.push(requirement); + } + } + Rule::Frequency => { + if let Some(frequency) = parse_frequency(inner_token) { + settings.frequency_modifiers.push(frequency); + } + } + Rule::Modifier => { + if let Some(modifier) = parse_modifier(inner_token) { + settings.modifiers.push(modifier); + } + } + Rule::Divert => { + if let Some(divert) = parse_divert(inner_token) { + settings.next = divert; + } + } + _ => {} + } + } +} +fn add_command_to_block(token: Pair, block: &mut Block) { + match block { + Block::Text { id: _, settings } => { + add_command_to_settings(token, settings); + } + Block::Choice { id: _, settings } => { + add_command_to_settings(token, settings); + } + _ => {} + } +} + +fn parse_divert(token: Pair) -> Option { + if token.as_rule() != Rule::Divert { + return None; + } + //Divert = { "->" ~ " "* ~ Identifier ~ ("." ~ Identifier)? } + + let mut section: Option = None; + let mut subsection: Option = None; + + for inner_token in token.into_inner() { + if inner_token.as_rule() == Rule::Identifier { + if section.is_none() { + section = Some(inner_token.as_str().to_string()); + } else { + subsection = Some(inner_token.as_str().to_string()); + } + } + } + + section.map(|section| { + NextBlock::Section(SectionKey { + section, + subsection, + }) + }) +} + +fn parse_modifier(token: Pair) -> Option { + if token.as_rule() != Rule::Modifier { + return None; + } + //Modifier = { "mod" ~ " "+ ~ Identifier ~ " "+ ~ Value} + + let mut modifier = Modifier::default(); + for inner_token in token.into_inner() { + match inner_token.as_rule() { + Rule::Identifier => { + modifier.variable.id = inner_token.as_str().to_string(); + //TODO KIND + } + + Rule::Value => { + modifier.new_value = inner_token.as_str().to_string(); + } + _ => {} + } + } + Some(modifier) +} + +fn parse_frequency(token: Pair) -> Option { + if token.as_rule() != Rule::Frequency { + return None; + } + + let mut frequency = FrequencyModifier::default(); + for inner_token in token.into_inner() { + match inner_token.as_rule() { + Rule::Condition => { + if let Some(condition) = parse_condition(inner_token) { + frequency.condition = condition; + } + } + + Rule::Float | Rule::Integer => { + let value = inner_token.as_str().parse::().unwrap(); + frequency.value = value; + } + _ => {} + } + } + + Some(frequency) +} + +fn parse_requirement(token: Pair) -> Option { + if token.as_rule() != Rule::Requirement { + return None; + } + + for inner_token in token.into_inner() { + if inner_token.as_rule() == Rule::Condition { + if let Some(condition) = parse_condition(inner_token) { + return Some(Requirement { condition }); + } + } + } + None +} + +fn parse_condition(token: Pair) -> Option { + if token.as_rule() != Rule::Condition { + return None; + } + /*Condition = { Identifier ~ " "* ~ (ComparisonOperator ~ " "*)? ~ Value } */ + + let mut condition = Condition::default(); + + for inner_token in token.into_inner() { + match inner_token.as_rule() { + Rule::Identifier => { + condition.variable.id = inner_token.as_str().to_string(); + //TODO KIND + } + Rule::ComparisonOperator => { + if let Some(operator) = parse_comparison_operator(inner_token) { + condition.operator = operator; + } + } + Rule::Value => { + condition.value = inner_token.as_str().to_string(); + } + _ => {} + } + } + Some(condition) +} + +fn parse_comparison_operator(token: Pair) -> Option { + if token.as_rule() != Rule::ComparisonOperator { + return None; + } + + match token.as_str() { + "!=" => Some(Operator::NotEqual), + "!" => Some(Operator::NotEqual), + "=" => Some(Operator::Equal), + "<=" => Some(Operator::LessOrEqualThan), + ">=" => Some(Operator::GreaterOrEqualThan), + "<" => Some(Operator::LessThan), + ">" => Some(Operator::GreaterThan), + _ => None, + } +} + +fn parse_chance(token: Pair) -> Chance { + if token.as_rule() != Rule::Chance { + return Chance::None; + } + + for inner_token in token.into_inner() { + match inner_token.as_rule() { + Rule::Float => { + let value = inner_token.as_str().parse::().unwrap(); + return Chance::Probability(value); + } + Rule::Percentage => { + if let Some(integer) = inner_token.into_inner().next() { + let value = integer.as_str().parse::().unwrap(); + return Chance::Probability(value as f32 / 100.); + } + } + Rule::Integer => { + let value = inner_token.as_str().parse::().unwrap(); + return Chance::Frequency(value); + } + _ => {} + } + } + + Chance::None +} + +fn match_rule(token: &Pair, expected_rule: Rule) -> Result<(), PalabritasError> { + if token.as_rule() != expected_rule { + return Err(PalabritasError::UnexpectedRule { + info: ErrorInfo { + line: 0, + string: token.as_str().to_string(), + }, + expected_rule, + rule_found: token.as_rule(), + }); + } + + Ok(()) +} + +#[cfg(test)] +mod test { + + use crate::parser::*; + use cuentitos_common::{ + Block, BlockSettings, Condition, FrequencyModifier, Modifier, Operator, Requirement, Variable, + }; + use pest::iterators::Pair; + use rand::distributions::Alphanumeric; + use rand::{self, Rng}; + + const SPECIAL_CHARACTERS: [&str; 11] = [".", "_", "/", ",", ";", "'", " ", "?", "!", "¿", "¡"]; + + const COMPARISON_OPERATORS: [&str; 7] = ["=", "!=", "<", ">", "<=", ">=", "!"]; + + const INDENTATIONS: [&str; 1] = [" "]; + + const RESERVED_KEYWORDS: [&str; 9] = ["req", "freq", "mod", "->", "`", "*", "#", "##", "//"]; + + #[test] + fn parse_database_from_path_correctly() { + parse_database_from_path("../examples/story-example.cuentitos").unwrap(); + //TODO: compare with fixture + } + + #[test] + fn parse_database_correctly() { + let unparsed_file = include_str!("../../examples/story-example.cuentitos"); + let token = short_parse(Rule::Database, &unparsed_file); + parse_database(token, Config::default()).unwrap(); + //TODO: compare with fixture + } + + /*#[test] + fn parse_blocks_correctly() { + /* + + BlockBlock = { + (NamedBucket | Choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* + } + + */ + + let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); + let chance_string = format!("({})", float); + + let string = make_random_string(); + let child_string = make_random_string(); + + let text_string = format!("{} {}", chance_string, string); + + let chance_token = short_parse(Rule::Chance, &chance_string); + let probability = parse_chance(chance_token); + + let knot = make_random_identifier(); + let divert_string = format!("\n -> {}", knot); + + let blocks_string = format!("{}{}\n\t{}", text_string, divert_string, child_string); + + let expected_divert = Divert { + knot: knot.clone(), + stitch: None, + }; + + let child_blocks = Block { + text: child_string, + blocks_type: BlockType::Text, + ..Default::default() + }; + + let expected_blocks = Block { + text: string, + probability: probability, + blocks_type: BlockType::Text, + divert: vec![expected_divert], + blocks: vec![child_blocks], + ..Default::default() + }; + + let blocks_token = short_parse(Rule::BlockBlock, &blocks_string); + let blocks = parse_blocks(blocks_token).unwrap(); + + assert_eq!(blocks, expected_blocks); + } + #[test] + fn get_blocks_from_new_block_correctly() { + let string = make_random_string(); + let new_block_string = format!("\t{}", string); + + let expected_blocks = Block { + text: string, + ..Default::default() + }; + + let new_block_token = short_parse(Rule::NewBlock, &new_block_string); + let blocks_token = get_blocks_from_new_block(new_block_token); + let blocks = parse_blocks(blocks_token[0].clone()).unwrap(); + + assert_eq!(blocks, expected_blocks); + }*/ + + #[test] + fn buckets_chance_must_sum_1() { + let snake_case = make_random_snake_case(); + + let frequency_1 = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); + let child_1 = make_random_string(); + let mut frequency_2 = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); + while frequency_1 + frequency_1 == 1. { + frequency_2 = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); + } + + let child_2 = make_random_string(); + let named_bucket_string = format!( + "[{}]\n ({}){}\n ({}){}", + snake_case, frequency_1, child_1, frequency_2, child_2 + ); + let token = short_parse(Rule::Block, &named_bucket_string); + let mut blocks = Vec::default(); + let named_bucket = parse_block(token, &mut blocks, 0).unwrap_err(); + + assert_eq!( + named_bucket, + PalabritasError::BucketSumIsNot1(ErrorInfo { + line: 1, + string: snake_case + }) + ); + } + + #[test] + fn buckets_cant_have_frequency_and_chance() { + let snake_case = make_random_snake_case(); + let frequency = rand::thread_rng().gen_range(1..100); + let child_1 = make_random_string(); + let chance: f32 = rand::thread_rng().gen_range(0. ..1.); + let child_2 = make_random_string(); + let named_bucket_string = format!( + "[{}]\n ({}){}\n ({}){}", + snake_case, frequency, child_1, chance, child_2 + ); + let token = short_parse(Rule::Block, &named_bucket_string); + let mut blocks = Vec::default(); + let named_bucket = parse_block(token, &mut blocks, 0).unwrap_err(); + + assert_eq!( + named_bucket, + PalabritasError::BucketHasFrequenciesAndChances(ErrorInfo { + line: 1, + string: snake_case + }) + ); + } + + #[test] + fn buckets_cant_have_missing_probabilities() { + let snake_case = make_random_snake_case(); + let frequency = rand::thread_rng().gen_range(1..100); + let child_1 = make_random_string(); + let child_2 = make_random_string(); + let named_bucket_string = format!( + "[{}]\n ({}){}\n {}", + snake_case, frequency, child_1, child_2 + ); + let token = short_parse(Rule::Block, &named_bucket_string); + let mut blocks = Vec::default(); + let named_bucket = parse_block(token, &mut blocks, 0).unwrap_err(); + + assert_eq!( + named_bucket, + PalabritasError::BucketMissingProbability(ErrorInfo { + line: 3, + string: child_2 + }) + ); + } + #[test] + fn parse_named_bucket_correctly() { + //NamedBucket = { "[" ~ " "* ~ Probability? ~ SnakeCase ~ " "* ~ "]" } + + let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); + let chance_string = format!("({})", float); + + let snake_case = make_random_snake_case(); + + let frequency_1 = rand::thread_rng().gen_range(1..100); + let child_1 = make_random_string(); + let frequency_2 = rand::thread_rng().gen_range(1..100); + let child_2 = make_random_string(); + let named_bucket_string = format!( + "[{} {}]\n ({}){}\n ({}){}", + chance_string, snake_case, frequency_1, child_1, frequency_2, child_2 + ); + let token = short_parse(Rule::NamedBucket, &named_bucket_string); + let named_bucket = parse_named_bucket(token).unwrap(); + + let chance_token = short_parse(Rule::Chance, &chance_string); + let chance = parse_chance(chance_token); + + let expected_value = Block::Bucket { + name: Some(snake_case.clone()), + settings: BlockSettings { + chance: chance.clone(), + ..Default::default() + }, + }; + assert_eq!(named_bucket, expected_value); + + let mut blocks = Vec::default(); + let token = short_parse(Rule::Block, &named_bucket_string); + parse_block(token, &mut blocks, 0).unwrap(); + + let expected_value = Block::Bucket { + name: Some(snake_case), + settings: BlockSettings { + chance, + children: vec![0, 1], + ..Default::default() + }, + }; + + assert_eq!(blocks[0][0], expected_value); + } + + #[test] + fn parse_unnamed_bucket_correctly() { + let parent = make_random_string(); + let child_1 = make_random_string(); + let float: f32 = rand::thread_rng().gen(); + let probabiliy_1 = format!("({})", float); + let child_2 = make_random_string(); + let float = 1. - float; + let probabiliy_2 = format!("({})", float); + let block_string = format!( + "{}\n {}{}\n {}{}", + parent, probabiliy_1, child_1, probabiliy_2, child_2 + ); + + let token = short_parse(Rule::Block, &block_string); + + let mut blocks = Vec::default(); + + parse_block(token, &mut blocks, 0).unwrap(); + + let expected_text = Block::Text { + id: parent, + settings: BlockSettings { + children: vec![0], + ..Default::default() + }, + }; + + let expected_bucket = Block::Bucket { + name: None, + settings: BlockSettings { + children: vec![0, 1], + ..Default::default() + }, + }; + + assert_eq!(blocks[0][0], expected_text); + assert_eq!(blocks[1][0], expected_bucket); + } + + #[test] + fn parse_choice_correctly() { + //Choice = { "*" ~ " "* ~ Probability? ~ String } + + let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); + let chance_string = format!("({})", float); + + let string = make_random_string(); + + let choice_string = format!("*{} {}", chance_string, string); + let token = short_parse(Rule::Choice, &choice_string); + let choice = parse_choice(token).unwrap(); + + let chance_token = short_parse(Rule::Chance, &chance_string); + let chance = parse_chance(chance_token); + + let expected_settings = BlockSettings { + chance, + ..Default::default() + }; + let expected_value = Block::Choice { + id: string, + settings: expected_settings, + }; + assert_eq!(choice, expected_value); + } + + #[test] + fn parse_section_correctly() { + //Section = {"#" ~ " "* ~ Identifier ~ " "* ~ Command* ~ NewLine ~ ( NewLine | NewBlock | Subsection )* } + + let identifier = make_random_snake_case(); + + let section_string = format!("#{}\n", identifier); + let token = short_parse(Rule::Section, §ion_string); + let mut blocks = Vec::default(); + let mut sections = HashMap::default(); + parse_section(token, &mut blocks, &mut sections).unwrap(); + + let section = blocks[0][0].clone(); + + let expected_value = Block::Section { + id: identifier, + settings: BlockSettings::default(), + }; + assert_eq!(section, expected_value); + } + + #[test] + fn parse_section_commands_correctly() { + let identifier = make_random_snake_case(); + + let section_string = format!("# {}\n req test", identifier); + let token = short_parse(Rule::Section, §ion_string); + let mut blocks = Vec::default(); + let mut sections = HashMap::default(); + parse_section(token, &mut blocks, &mut sections).unwrap(); + + let section = blocks[0][0].clone(); + + let expected_value = Block::Section { + id: identifier, + settings: BlockSettings { + requirements: vec![ Requirement { + condition: Condition { + variable: Variable { id: "test".to_string(), kind: VariableKind::Bool }, + operator: Operator::Equal, + value: "true".to_string() + } + }], + ..Default::default() + }, + }; + assert_eq!(section, expected_value); + + } + + #[test] + fn parse_section_with_subsections_correctly() { + //Section = {"#" ~ " "* ~ Identifier ~ " "* ~ Command* ~ NewLine ~ ( NewLine | NewBlock | Subsection )* } + + let section_identifier = make_random_snake_case(); + + let subsection_identifier_1 = make_random_snake_case(); + let subsection_identifier_2 = make_random_snake_case(); + + let section_string = format!( + "#{}\n##{}\n##{}", + section_identifier, subsection_identifier_1, subsection_identifier_2 + ); + + let token = short_parse(Rule::Section, §ion_string); + let mut blocks = Vec::default(); + let mut sections = HashMap::default(); + parse_section(token, &mut blocks, &mut sections).unwrap(); + + let section = blocks[0][0].clone(); + + let expected_value = Block::Section { + id: section_identifier, + settings: BlockSettings::default(), + }; + assert_eq!(section, expected_value); + } + #[test] + fn parse_text_correctly() { + //Text = { Probability? ~ String } + + let float = rand::thread_rng().gen_range(0 as f32..1 as f32); + let chance_string = format!("({})", float); + + let string = make_random_string(); + + let text_string = format!("{} {}", chance_string, string); + let token = short_parse(Rule::Text, &text_string); + let text = parse_text(token).unwrap(); + + let chance_token = short_parse(Rule::Chance, &chance_string); + let chance = parse_chance(chance_token); + + let expected_settings = BlockSettings { + chance, + ..Default::default() + }; + + let expected_value = Block::Text { + id: string, + settings: expected_settings, + }; + assert_eq!(text, expected_value); + } + + #[test] + fn command_gets_added_to_blocks_correctly() { + let text_id = make_random_string(); + let mut block = Block::Text { + id: text_id.clone(), + settings: BlockSettings::default(), + }; + + let mut block_settings = BlockSettings::default(); + // //Command = {NEWLINE ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert) } + + //Modifier + let identifier = make_random_identifier(); + let new_value = rand::thread_rng().gen::().to_string(); + let modifier_string = format!("\n mod {} {}", identifier, new_value); + + let expected_modifier = Modifier { + variable: Variable { + id: identifier, + ..Default::default() + }, + new_value, + }; + + block_settings.modifiers.push(expected_modifier); + + let token = short_parse(Rule::Command, &modifier_string); + add_command_to_block(token, &mut block); + + /* //Divert + let knot = make_random_identifier(); + let divert_string = format!("\n -> {}", knot); + + let expected_divert = Divert { + knot: knot.clone(), + stitch: None, + }; + expected_blocks.divert.push(expected_divert); + + let token = short_parse(Rule::Command, &divert_string); + add_command_to_blocks(token, &mut blocks); */ + + //Frequency + + let condition_string = make_random_condition(); + let condition_token = short_parse(Rule::Condition, &condition_string); + let condition = parse_condition(condition_token).unwrap(); + + let change_value: f32 = rand::thread_rng().gen(); + let frequency_string = format!("\n freq {} {}", condition_string, change_value); + let expected_frequency = FrequencyModifier { + condition, + value: change_value, + }; + + block_settings.frequency_modifiers.push(expected_frequency); + + let token = short_parse(Rule::Command, &frequency_string); + add_command_to_block(token, &mut block); + + //Requirement + + let condition_string = make_random_condition(); + let condition_token = short_parse(Rule::Condition, &condition_string); + let condition = parse_condition(condition_token).unwrap(); + + let requirement_string = format!("\n req {}", condition_string); + let expected_requirement = Requirement { condition }; + + block_settings.requirements.push(expected_requirement); + + let token = short_parse(Rule::Command, &requirement_string); + add_command_to_block(token, &mut block); + + let expected_block = Block::Text { + id: text_id, + settings: block_settings, + }; + + assert_eq!(block, expected_block); + } + + #[test] + fn database_sections_get_added_correctly() {} + #[test] + fn parse_divert_correctly() { + //Divert = { "->" ~ " "* ~ Identifier ~ ("." ~ Identifier)? } + let section = make_random_identifier(); + let divert_string = format!("-> {}", section); + + let expected_value = NextBlock::Section(SectionKey { + section: section.clone(), + subsection: None, + }); + + let token = short_parse(Rule::Divert, &divert_string); + let divert = parse_divert(token).unwrap(); + + assert_eq!(divert, expected_value); + + let subsection = make_random_identifier(); + + let divert_string = format!("-> {}.{}", section, subsection); + + let expected_value = NextBlock::Section(SectionKey { + section, + subsection: Some(subsection), + }); + + let token = short_parse(Rule::Divert, &divert_string); + let divert = parse_divert(token).unwrap(); + + assert_eq!(divert, expected_value); + } + + #[test] + fn parse_modifier_correctly() { + //Modifier = { "mod" ~ " "+ ~ Identifier ~ " "+ ~ Value} + let identifier = make_random_identifier(); + let new_value = rand::thread_rng().gen::().to_string(); + let modifier_string = format!("mod {} {}", identifier, new_value); + + let expected_value = Modifier { + variable: Variable { + id: identifier, + ..Default::default() + }, + new_value, + }; + + let token = short_parse(Rule::Modifier, &modifier_string); + let modifier = parse_modifier(token).unwrap(); + + assert_eq!(modifier, expected_value); + } + + #[test] + fn parse_modifier_with_set_command_in_floats() { + let identifier = make_random_identifier(); + let new_value = rand::thread_rng().gen::().to_string(); + let modifier_string = format!("mod {} ={}", identifier, new_value); + + let expected_value = Modifier { + variable: Variable { + id: identifier, + ..Default::default() + }, + new_value: format!("={}", new_value), + }; + + let token = short_parse(Rule::Modifier, &modifier_string); + + let modifier = parse_modifier(token).unwrap(); + + assert_eq!(modifier, expected_value); + } + + #[test] + fn parse_modifier_with_set_command_in_integers() { + let identifier = make_random_identifier(); + let new_value = rand::thread_rng().gen::().to_string(); + let modifier_string = format!("mod {} ={}", identifier, new_value); + + let expected_value = Modifier { + variable: Variable { + id: identifier, + ..Default::default() + }, + new_value: format!("={}", new_value), + }; + + let token = short_parse(Rule::Modifier, &modifier_string); + + let modifier = parse_modifier(token).unwrap(); + + assert_eq!(modifier, expected_value); + } + + #[test] + fn parse_frequency_correctly() { + //Frequency = { "freq" ~ " "+ ~ Condition ~ " "+ ~ ( Float | Integer ) } + let condition_string = make_random_condition(); + let condition_token = short_parse(Rule::Condition, &condition_string); + let condition = parse_condition(condition_token).unwrap(); + + let change_value: f32 = rand::thread_rng().gen(); + let frequency_string = format!("freq {} {}", condition_string, change_value); + let expected_value = FrequencyModifier { + condition, + value: change_value, + }; + + let token = short_parse(Rule::Frequency, &frequency_string); + let frequency = parse_frequency(token).unwrap(); + + assert_eq!(frequency, expected_value); + } + + #[test] + fn parse_requirement_correctly() { + //Requirement = { "req" ~ " "+ ~ Condition } + let condition_string = make_random_condition(); + let condition_token = short_parse(Rule::Condition, &condition_string); + let condition = parse_condition(condition_token).unwrap(); + + let requirement_string = format!("req {}", condition_string); + let expected_value = Requirement { condition }; + + let token = short_parse(Rule::Requirement, &requirement_string); + let requirement = parse_requirement(token).unwrap(); + + assert_eq!(requirement, expected_value); + } + + #[test] + fn parse_condition_correctly() { + /*Condition = { Identifier ~ " "* ~ (ComparisonOperator ~ " "*)? ~ Value } */ + let identifier = make_random_identifier(); + + let operator_string = + COMPARISON_OPERATORS[rand::thread_rng().gen_range(0..COMPARISON_OPERATORS.len())]; + let operator_token = short_parse(Rule::ComparisonOperator, operator_string); + let operator = parse_comparison_operator(operator_token).unwrap(); + + let value: f32 = rand::thread_rng().gen(); + + let condition_string = format!("{} {} {}", identifier, operator_string, value); + + let expected_value = Condition { + variable: Variable { + id: identifier, + ..Default::default() + }, + operator: operator, + value: value.to_string(), + }; + + let token = short_parse(Rule::Condition, &condition_string); + let condition = parse_condition(token).unwrap(); + + assert_eq!(condition, expected_value); + } + + #[test] + fn parse_operators_correctly() { + let token = short_parse(Rule::ComparisonOperator, "="); + assert_eq!(parse_comparison_operator(token).unwrap(), Operator::Equal); + + let token = short_parse(Rule::ComparisonOperator, "!="); + assert_eq!( + parse_comparison_operator(token).unwrap(), + Operator::NotEqual + ); + + let token = short_parse(Rule::ComparisonOperator, "<"); + assert_eq!( + parse_comparison_operator(token).unwrap(), + Operator::LessThan + ); + + let token = short_parse(Rule::ComparisonOperator, ">"); + assert_eq!( + parse_comparison_operator(token).unwrap(), + Operator::GreaterThan + ); + + let token = short_parse(Rule::ComparisonOperator, "<="); + assert_eq!( + parse_comparison_operator(token).unwrap(), + Operator::LessOrEqualThan + ); + + let token = short_parse(Rule::ComparisonOperator, ">="); + assert_eq!( + parse_comparison_operator(token).unwrap(), + Operator::GreaterOrEqualThan + ); + + let token = short_parse(Rule::ComparisonOperator, "!"); + assert_eq!( + parse_comparison_operator(token).unwrap(), + Operator::NotEqual + ); + } + /* #[test] + fn percentage_probability_parse_correctly() { + //probability = { "(" ~ " "* ~ ( percentage | float | integer ) ~ " "* ~ ")" ~ " "* } + let percentage = rand::thread_rng().gen_range(u8::MIN..u8::MAX); + let expected_value: PercentageProbability = PercentageProbability { value: percentage }; + + let chance_string = format!("({}%)", percentage); + + let token = short_parse(Rule::Chance, &chance_string); + + let probability = parse_chance(token).unwrap(); + let probability = probability + .as_any() + .downcast_ref::() + .unwrap(); + + assert_eq!(*probability, expected_value); + } + + #[test] + fn float_probability_parse_correctly() { + let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); + let expected_value = FloatProbability { value: float }; + + let chance_string = format!("({})", float); + + let token = PalabritasParser::parse(Rule::Chance, &chance_string) + .expect("unsuccessful parse") + .next() + .unwrap(); + + let probability = parse_chance(token).unwrap(); + let probability = probability + .as_any() + .downcast_ref::() + .unwrap(); + + assert_eq!(*probability, expected_value); + } + */ + #[test] + fn parse_char_rule() { + //char = { ASCII_ALPHANUMERIC | "." | "_" | "/" | "," | ";" | "'" | " " | "?" | "!" | "¿" | "¡"} + let alphanumeric_char = (rand::thread_rng().sample(&Alphanumeric) as char).to_string(); + assert_parse_rule(Rule::Char, &alphanumeric_char); + + for special_character in SPECIAL_CHARACTERS { + assert_parse_rule(Rule::Char, special_character); + } + } + + #[test] + fn parse_integer_rule() { + //integer = { "-"? ~ ASCII_DIGIT+ } + let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); + assert_parse_rule(Rule::Integer, &integer); + } + + #[test] + fn parse_float_rule() { + //float = { integer ~ "." ~ ASCII_DIGIT* } + let float = rand::thread_rng() + .gen_range(i8::MIN as f32..i8::MAX as f32) + .to_string(); + assert_parse_rule(Rule::Float, &float); + } + + #[test] + fn parse_percentage_rule() { + //percentage = { integer ~ "%" } + let percentage = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string() + "%"; + assert_parse_rule(Rule::Percentage, &percentage); + } + + #[test] + fn parse_indentation_rule() { + //indentation = { " } + for indentation in INDENTATIONS { + assert_parse_rule(Rule::Indentation, &indentation); + } + } + + #[test] + fn parse_string_rule() { + //string = { char+ } + assert_parse_rule(Rule::String, &make_random_string()); + } + + #[test] + fn parse_comparison_operator_rule() { + //comparison_operator = { "!=" | "=" | "<=" | ">=" | "<" | ">" | "!" } + for operator in COMPARISON_OPERATORS { + assert_parse_rule(Rule::ComparisonOperator, operator); + } + } + + #[test] + fn parse_snake_case_rule() { + //snake_case = { ASCII_ALPHA_LOWER ~ (ASCII_ALPHA_LOWER | "_" | ASCII_DIGIT)* } + assert_parse_rule(Rule::SnakeCase, &make_random_snake_case()); + } + + #[test] + fn parse_identifier_rule() { + //identifier = { (ASCII_ALPHA | "_" ) ~ (ASCII_ALPHANUMERIC | "_")* } + assert_parse_rule(Rule::Identifier, &make_random_identifier()); + } + + #[test] + fn parse_value_rule() { + //value = { identifier | float | percentage | integer} + let identifier = make_random_identifier(); + assert_parse_rule(Rule::Value, &identifier); + + let float = rand::thread_rng() + .gen_range(i8::MIN as f32..i8::MAX as f32) + .to_string(); + assert_parse_rule(Rule::Value, &float); + + let percentage = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string() + "%"; + assert_parse_rule(Rule::Value, &percentage); + + let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); + assert_parse_rule(Rule::Value, &integer); + } + + #[test] + fn parse_condition_rule() { + //condition = { identifier ~ " "* ~ (comparison_operator ~ " "*)? ~ value } + let identifier = make_random_identifier(); + let comparison_operator = + COMPARISON_OPERATORS[rand::thread_rng().gen_range(0..COMPARISON_OPERATORS.len())]; + let value = make_random_identifier(); + + assert_parse_rule(Rule::Condition, &(identifier.clone() + " " + &value)); + assert_parse_rule( + Rule::Condition, + &(identifier + comparison_operator + &value), + ); + } + + #[test] + fn parse_requirement_rule() { + //requirement = { "req" ~ " "+ ~ condition } + let condition = make_random_condition(); + assert_parse_rule(Rule::Requirement, &("req ".to_string() + &condition)); + } + #[test] + fn parse_frequency_rule() { + //frequency = { "freq" ~ " "+ ~ condition ~ " "+ ~ ( float | integer ) } + let condition = make_random_condition(); + let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); + let float = rand::thread_rng() + .gen_range(i8::MIN as f32..i8::MAX as f32) + .to_string(); + + assert_parse_rule( + Rule::Frequency, + &("freq ".to_string() + &condition + " " + &integer), + ); + assert_parse_rule( + Rule::Frequency, + &("freq ".to_string() + &condition + " " + &float), + ); + } + + #[test] + fn parse_modifier_rule() { + //modifier = { "mod" ~ " "+ ~ identifier ~ " "+ ~ value} + let identifier = make_random_identifier(); + let value = make_random_identifier(); + + assert_parse_rule( + Rule::Modifier, + &("mod ".to_string() + &identifier + " " + &value), + ); + } + + #[test] + fn parse_divert_rule() { + //divert = { "->" ~ " "* ~ identifier ~ ("." ~ identifier)? } + let knot = make_random_identifier(); + let stitch = make_random_identifier(); + + assert_parse_rule(Rule::Divert, &("->".to_string() + &knot)); + assert_parse_rule(Rule::Divert, &("->".to_string() + &knot + "." + &stitch)); + } + + #[test] + fn parse_command_rule() { + //Command = {NEWLINE ~ Indentation* ~ (Requirement | Frequency | Modifier | Divert) } + let requirement = "\nreq ".to_string() + &(make_random_condition()); + assert_parse_rule(Rule::Command, &(requirement)); + + let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); + let frequency = "\nfreq ".to_string() + &make_random_condition() + " " + &integer; + assert_parse_rule(Rule::Command, &(frequency)); + + let modifier = + "\nmod ".to_string() + &make_random_identifier() + " " + &make_random_identifier(); + assert_parse_rule(Rule::Command, &(modifier)); + + let divert = "\n->".to_string() + &make_random_identifier(); + assert_parse_rule(Rule::Command, &(divert)); + } + + #[test] + fn parse_chance_rule() { + //probability = { "(" ~ " "* ~ ( percentage | float | integer ) ~ " "* ~ ")" ~ " "* } + let percentage = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string() + "%"; + assert_parse_rule(Rule::Chance, &("(".to_string() + &percentage + ")")); + + let float = rand::thread_rng() + .gen_range(i8::MIN as f32..i8::MAX as f32) + .to_string(); + assert_parse_rule(Rule::Chance, &("(".to_string() + &float + ")")); + + let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); + assert_parse_rule(Rule::Chance, &("(".to_string() + &integer + ")")); + } + + #[test] + fn parses_file_that_starts_with_a_section() { + assert_parse_rule(Rule::Database, format!("# intro\n\n# previa\n").as_str()); + } + + #[test] + fn parse_section_rule() { + //Knot = {"===" ~ " "* ~ Identifier ~ " "* ~"===" ~ " "* ~ NEWLINE ~ ( NEWLINE | BlockBlock | Stitch | NamedBucket )* } + let identifier = make_random_identifier(); + assert_parse_rule(Rule::Section, &("#".to_string() + &identifier + "\n")); + } + + #[test] + fn parse_subsection_rule() { + //stitch = {"=" ~ " "* ~ identifier ~ " "*} + let identifier = make_random_identifier(); + assert_parse_rule(Rule::Subsection, &("##".to_string() + &identifier)); + } + + #[test] + fn parse_text_rule() { + //text = { probability? ~ string } + let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); + let probability = "(".to_string() + &integer + ")"; + assert_parse_rule(Rule::Text, &make_random_string()); + assert_parse_rule(Rule::Text, &(probability + &make_random_string())); + } + + #[test] + fn parse_choice_rule() { + //choice = { "*" ~ " "* ~ text } + let text = make_random_string(); + assert_parse_rule(Rule::Choice, &("*".to_string() + &text)); + } + + #[test] + fn parse_named_bucket_rule() { + //named_bucket = { "[" ~ " "* ~ probability? ~ snake_case ~ " "* ~ "]"} + let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); + let probability = "(".to_string() + &integer + ")"; + + assert_parse_rule( + Rule::NamedBucket, + &("[".to_string() + &make_random_snake_case() + "]"), + ); + + assert_parse_rule( + Rule::NamedBucket, + &("[".to_string() + &probability + &make_random_snake_case() + "]"), + ); + } + + /* #[test] + fn parse_block_blocks_rule() { + //BlockBlock = { + // (choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* + //} + + let choice = "*".to_string() + &make_random_string(); + assert_parse_rule(Rule::BlockBlock, &choice); + + let text = make_random_string(); + assert_parse_rule(Rule::BlockBlock, &text); + + let new_block = "\n ".to_string() + &make_random_string(); + assert_parse_rule(Rule::BlockBlock, &(text + &new_block)); + } + */ + #[test] + fn parse_database_rule() { + //File = { SOI ~ (NEWLINE | BlockBlock | Knot )* ~ EOI } + let unparsed_file = include_str!("../../examples/story-example.cuentitos"); + assert_parse_rule(Rule::Database, &unparsed_file); + } + + fn assert_parse_rule(rule: Rule, input: &str) { + let pair = PalabritasParser::parse(rule, input) + .expect("unsuccessful parse") + .next() + .unwrap(); + assert_eq!(pair.as_rule(), rule); + assert_eq!(pair.as_str(), input); + } + + fn make_random_condition() -> String { + make_random_identifier() + " " + &make_random_identifier() + } + + fn make_random_snake_case() -> String { + let alphanumeric_size = rand::thread_rng().gen_range(1..20); + let underscore_size = rand::thread_rng().gen_range(1..5); + + //Making alphanumeric string + let snake_case: Vec = rand::thread_rng() + .sample_iter(&Alphanumeric) + .take(alphanumeric_size) + .collect(); + + let mut snake_case = std::str::from_utf8(&snake_case).unwrap().to_string(); + + //Adding underscores + for _ in 0..underscore_size { + snake_case += "_"; + } + shuffle_string(&mut snake_case); + + //Making sure starting character is not a number + let mut starting_char = rand::thread_rng().sample(&Alphanumeric) as char; + while starting_char.is_numeric() { + starting_char = rand::thread_rng().sample(&Alphanumeric) as char; + } + + snake_case = starting_char.to_string() + &snake_case; + + snake_case = snake_case.to_lowercase(); + + for keyword in RESERVED_KEYWORDS { + while snake_case.starts_with(keyword) { + snake_case = make_random_snake_case(); + } + } + + snake_case + } + + fn make_random_identifier() -> String { + let alphanumeric_size = rand::thread_rng().gen_range(1..20); + let underscore_size = rand::thread_rng().gen_range(1..5); + + //Making alphanumeric string + let identifier: Vec = rand::thread_rng() + .sample_iter(&Alphanumeric) + .take(alphanumeric_size) + .collect(); + + let mut identifier = std::str::from_utf8(&identifier).unwrap().to_string(); + + //Adding underscores + for _ in 0..underscore_size { + identifier += "_"; + } + shuffle_string(&mut identifier); + + //Making sure starting character is not a number + let mut starting_char = rand::thread_rng().sample(&Alphanumeric) as char; + while starting_char.is_numeric() { + starting_char = rand::thread_rng().sample(&Alphanumeric) as char; + } + + identifier = starting_char.to_string() + &identifier; + + identifier + } + + fn make_random_string() -> String { + let alphanumeric_size = rand::thread_rng().gen_range(1..20); + let special_characters_size = rand::thread_rng().gen_range(1..20); + + //Making alphanumeric string + let string: Vec = rand::thread_rng() + .sample_iter(&Alphanumeric) + .take(alphanumeric_size) + .collect(); + + let mut string = std::str::from_utf8(&string).unwrap().to_string(); + + //Adding special characters + for _ in 0..special_characters_size { + string += SPECIAL_CHARACTERS[rand::thread_rng().gen_range(0..SPECIAL_CHARACTERS.len())]; + } + + shuffle_string(&mut string); + string = string.trim().to_string(); + for keyword in RESERVED_KEYWORDS { + while string.starts_with(keyword) { + string = make_random_string(); + } + } + + string + } + + fn shuffle_string(string: &mut String) { + //Shuffling characters + let mut final_string = String::default(); + + while !string.is_empty() { + let mut index = rand::thread_rng().gen_range(0..string.len()); + while !string.is_char_boundary(index) { + index -= 1; + } + final_string += &string.remove(index).to_string(); + } + + *string = final_string; + } + + fn short_parse(rule: Rule, input: &str) -> Pair { + PalabritasParser::parse(rule, input) + .expect("unsuccessful parse") + .next() + .unwrap() + } +} diff --git a/runtime/src/game_state.rs b/runtime/src/game_state.rs new file mode 100644 index 0000000..08c89fa --- /dev/null +++ b/runtime/src/game_state.rs @@ -0,0 +1,18 @@ +use cuentitos_common::{Config, VariableId}; +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; + +#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Clone, Eq)] +pub struct GameState { + pub variables: HashMap, +} + +impl GameState { + pub fn from_config(config: &Config) -> Self { + let mut variables = HashMap::default(); + for (key, kind) in &config.variables { + variables.insert(key.clone(), kind.get_default_value()); + } + GameState { variables } + } +} diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 427a2ab..7d67833 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -2,3 +2,7 @@ mod runtime; pub use cuentitos_common::Database; pub use runtime::Block; pub use runtime::Runtime; + +mod game_state; +pub use cuentitos_common::VariableKind; +pub use game_state::GameState; diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index 1ebb99a..d383ed7 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -1,7 +1,12 @@ +use std::fmt::Display; use std::println; +use crate::GameState; use cuentitos_common::BlockId; +use cuentitos_common::BlockSettings; use cuentitos_common::Database; +use cuentitos_common::SectionKey; +use cuentitos_common::VariableKind; use rand::Rng; use rand::SeedableRng; use rand_pcg::Pcg32; @@ -15,17 +20,21 @@ pub struct Block { #[derive(Debug, Default, Serialize, Deserialize, PartialEq)] pub struct Runtime { - pub file: Database, + pub database: Database, pub block_stack: Vec, + pub choices: Vec, #[serde(skip)] rng: Option, seed: u64, + game_state: GameState, } impl Runtime { - pub fn new(file: Database) -> Runtime { + pub fn new(database: Database) -> Runtime { + let game_state: GameState = GameState::from_config(&database.config); Runtime { - file, + database, + game_state, ..Default::default() } } @@ -35,8 +44,21 @@ impl Runtime { self.rng = Some(Pcg32::seed_from_u64(seed)); } + pub fn jump_to_section(&mut self, section: String, subsection: Option) { + let key = SectionKey { + section, + subsection, + }; + if let Some(block_id) = self.database.sections.get(&key) { + self.block_stack.clear(); + self.block_stack.push(*block_id); + } else { + println!("Can't find section: {:?}", key); + } + } + pub fn next_block(&mut self) -> Option { - if self.file.blocks.is_empty() { + if self.database.blocks.is_empty() { return None; } @@ -49,28 +71,33 @@ impl Runtime { self.get_next_block_output() } - pub fn roll_chances_for_next_block(&mut self) -> bool { - if let Some(last_block) = self.block_stack.last() { - let chance = self.get_block(*last_block).get_settings().chance; - match chance { - Some(chance) => { - if let Some(random_number) = self.random_float() { - return random_number < chance; - } - return false; + pub fn roll_chances_for_block(&mut self, id: BlockId) -> bool { + match self.get_block(id).get_settings().chance { + cuentitos_common::Chance::None => true, + cuentitos_common::Chance::Frequency(_) => true, + cuentitos_common::Chance::Probability(probability) => { + if let Some(random_number) = self.random_float() { + random_number < probability + } else { + false } - None => return true, } } + } + + pub fn roll_chances_for_next_block(&mut self) -> bool { + if let Some(last_block) = self.block_stack.last() { + return self.roll_chances_for_block(*last_block); + } false } pub fn pick_choice(&mut self, choice: usize) -> Option { - if self.file.blocks.is_empty() { + if self.database.blocks.is_empty() { return None; } - let choices = self.get_choices(); + let choices = &self.choices; if choices.is_empty() { println!("There are no choices"); @@ -82,7 +109,7 @@ impl Runtime { return None; } - if choices[choice] >= self.file.blocks.len() { + if choices[choice] >= self.database.blocks.len() { println!("Invalid option"); return None; } @@ -91,6 +118,113 @@ impl Runtime { self.next_block() } + pub fn set_variable(&mut self, variable: R, value: T) -> Result<(), String> + where + T: Display + std::str::FromStr + Default, + R: AsRef, + { + let variable = variable.as_ref().to_string(); + if self.database.config.variables.contains_key(&variable) { + let t = std::any::type_name::(); + if (t == "i32" && self.database.config.variables[&variable] == VariableKind::Integer) + || (t == "f32" && self.database.config.variables[&variable] == VariableKind::Float) + || (t == "bool" && self.database.config.variables[&variable] == VariableKind::Bool) + || (t == "alloc::string::String" + && self.database.config.variables[&variable] == VariableKind::String) + || (t == "&str" && self.database.config.variables[&variable] == VariableKind::String) + || self.is_valid_enum::(&value.to_string()) + { + self + .game_state + .variables + .insert(variable, value.to_string()); + } else { + return Err("Invalid Variable Type".to_string()); + } + } else { + return Err("Invalid Variable".to_string()); + } + Ok(()) + } + + pub fn get_variable_kind(&self, variable: R) -> Option + where + R: AsRef, + { + let variable = variable.as_ref(); + + if self.database.config.variables.contains_key(variable) { + Some(self.database.config.variables[variable].clone()) + } else { + None + } + } + + pub fn get_variable(&self, variable: R) -> Result + where + T: Display + std::str::FromStr + Default, + R: AsRef, + { + let variable = variable.as_ref().to_string(); + let value = match self.game_state.variables.get(&variable) { + Some(value) => value.clone(), + None => T::default().to_string(), + }; + if self.database.config.variables.contains_key(&variable) { + let t = std::any::type_name::(); + if (t == "i32" && self.database.config.variables[&variable] == VariableKind::Integer) + || (t == "f32" && self.database.config.variables[&variable] == VariableKind::Float) + || (t == "bool" && self.database.config.variables[&variable] == VariableKind::Bool) + || (t == "alloc::string::String" + && self.database.config.variables[&variable] == VariableKind::String) + || (t == "&str" && self.database.config.variables[&variable] == VariableKind::String) + || self.is_valid_enum::(&value) + { + if let Ok(value) = value.parse::() { + return Ok(value); + } else { + return Err("Unknown Parsing Error".to_string()); + } + } + } else { + return Err("Invalid Variable".to_string()); + } + + Err("Invalid Variable".to_string()) + } + + fn is_valid_enum(&self, value: &String) -> bool + where + T: Display + std::str::FromStr + Default, + { + for kind in self.database.config.variables.values() { + if let VariableKind::Enum(possible_values) = kind { + let mut value_found = false; + for possible_value in possible_values { + if value == possible_value { + value_found = true; + break; + } + } + + if value_found { + let mut all_values_parse = true; + for possible_value in possible_values { + if possible_value.parse::().is_err() { + all_values_parse = false; + break; + } + } + if all_values_parse { + return true; + } + } + } + } + + false + } + fn random_float(&mut self) -> Option { if self.rng.is_none() { self.rng = Some(Pcg32::from_entropy()) @@ -103,7 +237,19 @@ impl Runtime { Some(num) } - fn get_next_block_output(&self) -> Option { + fn random_with_max(&mut self, max: u32) -> Option { + if self.rng.is_none() { + self.rng = Some(Pcg32::from_entropy()) + } + + let mut rng = self.rng.as_ref()?.clone(); + let num = rng.gen_range(0..max); + + self.rng = Some(rng); + Some(num) + } + + fn get_next_block_output(&mut self) -> Option { let id = self.block_stack.last().unwrap(); let block = self.get_block(*id); if let cuentitos_common::Block::Text { id, settings: _ } = block { @@ -120,12 +266,23 @@ impl Runtime { fn update_stack(&mut self) { if self.block_stack.is_empty() { self.block_stack.push(0); + let last_block_id = *self.block_stack.last().unwrap(); + let last_block = self.get_block(last_block_id).clone(); + match last_block { + cuentitos_common::Block::Section { id: _, settings: _ } => { + self.update_stack(); + } + cuentitos_common::Block::Subsection { id: _, settings: _ } => { + self.update_stack(); + } + _ => {} + } return; } let last_block_id = self.block_stack.last().unwrap(); - if last_block_id >= &self.file.blocks.len() { + if last_block_id >= &self.database.blocks.len() { return; } @@ -133,19 +290,54 @@ impl Runtime { let settings = last_block.get_settings(); if !settings.children.is_empty() { - if let cuentitos_common::Block::Choice { id: _, settings: _ } = - self.get_block(settings.children[0]) - { - println!("Make a choice\n"); - return; + match self.get_block(settings.children[0]) { + cuentitos_common::Block::Text { id: _, settings: _ } => { + self.block_stack.push(settings.children[0]); + return; + } + cuentitos_common::Block::Choice { id: _, settings: _ } => { + println!("Make a choice\n"); + return; + } + cuentitos_common::Block::Bucket { name: _, settings } => { + if let Some(new_block) = self.get_random_block_from_bucket(&settings.clone()) { + self.block_stack.push(new_block); + return; + } + } + _ => {} } - self.block_stack.push(settings.children[0]); - return; } self.pop_stack_and_find_next(); } + fn get_random_block_from_bucket(&mut self, settings: &BlockSettings) -> Option { + let mut total_frequency = 0; + for child in &settings.children { + if let cuentitos_common::Chance::Frequency(frequency) = + self.get_block(*child).get_settings().chance + { + total_frequency += frequency; + } + } + + //TODO remove unwrap + let mut random_number = self.random_with_max(total_frequency).unwrap(); + + for child in &settings.children { + if let cuentitos_common::Chance::Frequency(frequency) = + self.get_block(*child).get_settings().chance + { + if random_number <= frequency { + return Some(*child); + } + random_number -= frequency; + } + } + None + } + fn pop_stack_and_find_next(&mut self) { let last_block_id = *self.block_stack.last().unwrap(); @@ -164,20 +356,50 @@ impl Runtime { self.block_stack = vec![0]; return; } - cuentitos_common::NextBlock::Section(_) => todo!(), + cuentitos_common::NextBlock::Section(key) => { + self.jump_to_section(key.section.clone(), key.subsection.clone()); + self.update_stack(); + } } self.block_stack.pop(); if self.block_stack.is_empty() { self.block_stack.push(last_block_id + 1); + let last_block_id = *self.block_stack.last().unwrap(); + let last_block = self.get_block(last_block_id).clone(); + match last_block { + cuentitos_common::Block::Section { id: _, settings: _ } => { + self.update_stack(); + } + cuentitos_common::Block::Subsection { id: _, settings: _ } => { + self.update_stack(); + } + _ => {} + } return; } - let parent_settings = self.file.blocks[*self.block_stack.last().unwrap()].get_settings(); + let parent = &self.database.blocks[*self.block_stack.last().unwrap()].clone(); + let parent_settings = parent.get_settings(); let mut child_found = false; for child in &parent_settings.children { if child_found { + match self.get_block(*child).clone() { + cuentitos_common::Block::Text { id: _, settings: _ } => self.block_stack.push(*child), + cuentitos_common::Block::Choice { id: _, settings: _ } => { + continue; + } + cuentitos_common::Block::Bucket { name: _, settings } => { + if let Some(new_block) = self.get_random_block_from_bucket(&settings.clone()) { + self.block_stack.push(new_block); + return; + } + } + _ => { + continue; + } + } if let cuentitos_common::Block::Choice { id: _, settings: _ } = self.get_block(*child) { continue; } @@ -193,16 +415,15 @@ impl Runtime { } fn get_block(&self, id: BlockId) -> &cuentitos_common::Block { - &self.file.blocks[id] + &self.database.blocks[id] } - fn get_choices_strings(&self) -> Vec { - let choices = self.get_choices(); - + fn get_choices_strings(&mut self) -> Vec { + self.update_choices(); let mut choices_strings = Vec::default(); println!("USE I18n!!!"); - for choice in choices { - if let cuentitos_common::Block::Choice { id, settings: _ } = self.get_block(choice) { + for choice in &self.choices { + if let cuentitos_common::Block::Choice { id, settings: _ } = self.get_block(*choice) { choices_strings.push(id.clone()); } } @@ -210,11 +431,11 @@ impl Runtime { choices_strings } - fn get_choices(&self) -> Vec { - let mut choices = Vec::default(); + fn update_choices(&mut self) { + self.choices = Vec::default(); if self.block_stack.is_empty() { - return choices; + return; } let last_block_id = self.block_stack.last().unwrap(); @@ -223,31 +444,115 @@ impl Runtime { let settings = last_block.get_settings(); for child in &settings.children { - if *child < self.file.blocks.len() { - if let cuentitos_common::Block::Choice { id: _, settings: _ } = self.get_block(*child) { - choices.push(*child) + if *child < self.database.blocks.len() { + match self.get_block(*child) { + cuentitos_common::Block::Choice { id: _, settings: _ } => { + if self.roll_chances_for_block(*child) { + self.choices.push(*child) + } + } + cuentitos_common::Block::Bucket { name: _, settings } => { + if let Some(picked_block) = self.get_random_block_from_bucket(&settings.clone()) { + if let cuentitos_common::Block::Choice { id: _, settings: _ } = + self.get_block(picked_block) + { + self.choices.push(picked_block); + } + } + } + _ => {} } } } - choices } } #[cfg(test)] mod test { - use std::vec; + use std::{collections::HashMap, fmt::Display, str::FromStr, vec}; use crate::Runtime; - use cuentitos_common::{Block, BlockSettings, Database}; + use cuentitos_common::{Block, BlockSettings, Config, Database, SectionKey, VariableKind}; #[test] fn new_runtime_works_correctly() { - let file = Database { + let database = Database { blocks: vec![Block::default()], + sections: HashMap::default(), + config: Config::default(), + }; + let runtime = Runtime::new(database.clone()); + assert_eq!(runtime.database, database); + } + + #[test] + fn jump_to_section_works_correctly() { + let section_1 = Block::Section { + id: "section_1".to_string(), + settings: BlockSettings { + children: vec![3], + ..Default::default() + }, + }; + let section_2 = Block::Section { + id: "section_1".to_string(), + settings: BlockSettings::default(), + }; + let subsection = Block::Subsection { + id: "subsection".to_string(), + settings: BlockSettings { + children: vec![4], + ..Default::default() + }, + }; + let text_1 = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; + let text_2 = Block::Text { + id: String::default(), + settings: BlockSettings::default(), }; - let runtime = Runtime::new(file.clone()); - assert_eq!(runtime.file, file); + + let mut sections: HashMap = HashMap::default(); + sections.insert( + SectionKey { + section: "section_1".to_string(), + subsection: None, + }, + 0, + ); + sections.insert( + SectionKey { + section: "section_2".to_string(), + subsection: None, + }, + 1, + ); + sections.insert( + SectionKey { + section: "section_2".to_string(), + subsection: Some("subsection".to_string()), + }, + 2, + ); + let database = Database { + blocks: vec![section_1, section_2, subsection, text_1, text_2], + sections, + config: Config::default(), + }; + + let mut runtime = Runtime { + database, + ..Default::default() + }; + runtime.jump_to_section("section_2".to_string(), Some("subsection".to_string())); + runtime.update_stack(); + assert_eq!(runtime.block_stack, vec![2, 4]); + runtime.jump_to_section("section_1".to_string(), None); + runtime.update_stack(); + assert_eq!(runtime.block_stack, vec![0, 3]); } #[test] @@ -277,19 +582,21 @@ mod test { settings: BlockSettings::default(), }; - let file = Database { + let database = Database { blocks: vec![parent.clone(), choice_1, choice_2, child_text], + sections: HashMap::default(), + config: Config::default(), }; - let runtime = Runtime { - file, + let mut runtime = Runtime { + database, block_stack: vec![0], ..Default::default() }; - let choices = runtime.get_choices(); + runtime.update_choices(); let expected_result = vec![1, 2]; - assert_eq!(choices, expected_result); + assert_eq!(runtime.choices, expected_result); } #[test] fn get_choices_strings_works_correctly() { @@ -318,11 +625,13 @@ mod test { settings: BlockSettings::default(), }; - let file = Database { + let database = Database { blocks: vec![parent.clone(), choice_1, choice_2, child_text], + sections: HashMap::default(), + config: Config::default(), }; - let runtime = Runtime { - file, + let mut runtime = Runtime { + database, block_stack: vec![0], ..Default::default() }; @@ -351,12 +660,14 @@ mod test { settings: BlockSettings::default(), }; - let file = Database { + let database = Database { blocks: vec![parent.clone(), child_1.clone(), child_2.clone()], + sections: HashMap::default(), + config: Config::default(), }; let mut runtime = Runtime { - file, + database, block_stack: vec![0], ..Default::default() }; @@ -396,7 +707,7 @@ mod test { settings: BlockSettings::default(), }; - let file = Database { + let database = Database { blocks: vec![ parent.clone(), sibling.clone(), @@ -404,10 +715,12 @@ mod test { child_2.clone(), child_3.clone(), ], + sections: HashMap::default(), + config: Config::default(), }; let mut runtime = Runtime { - file, + database, block_stack: vec![0, 2], ..Default::default() }; @@ -441,12 +754,14 @@ mod test { settings: BlockSettings::default(), }; - let file = Database { + let database = Database { blocks: vec![parent.clone(), choice_1.clone(), choice_2], + sections: HashMap::default(), + config: Config::default(), }; - let runtime = Runtime { - file, + let mut runtime = Runtime { + database, block_stack: vec![0], ..Default::default() }; @@ -482,11 +797,14 @@ mod test { settings: BlockSettings::default(), }; - let file = Database { + let database = Database { blocks: vec![parent.clone(), choice_1.clone(), choice_2.clone()], + sections: HashMap::default(), + config: Config::default(), }; + let mut runtime = Runtime { - file, + database, ..Default::default() }; @@ -506,10 +824,223 @@ mod test { assert_eq!(runtime.next_block(), None); } + #[test] + fn get_random_block_from_bucket_works_correctly() { + let settings = BlockSettings { + children: vec![1, 2], + ..Default::default() + }; + + let bucket = Block::Bucket { + name: None, + settings, + }; + + let settings = BlockSettings { + chance: cuentitos_common::Chance::Frequency(50), + ..Default::default() + }; + + let text_1 = Block::Text { + id: String::default(), + settings, + }; + + let settings = BlockSettings { + chance: cuentitos_common::Chance::Frequency(50), + ..Default::default() + }; + + let text_2 = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![bucket, text_1, text_2], + sections: HashMap::default(), + config: Config::default(), + }; + let mut runtime = Runtime { + database, + block_stack: vec![0], + ..Default::default() + }; + + runtime.set_seed(2); + + let bucket_settings = runtime.get_block(0).get_settings().clone(); + let id = runtime + .get_random_block_from_bucket(&bucket_settings) + .unwrap(); + assert_eq!(id, 1); + runtime.block_stack.push(1); + let bucket_settings = runtime.get_block(0).get_settings().clone(); + let id = runtime + .get_random_block_from_bucket(&bucket_settings) + .unwrap(); + assert_eq!(id, 2); + } + + #[test] + fn int_variables_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Integer; + variables.insert("health".to_string(), variable_kind.clone()); + let config = Config { variables }; + + let database = Database { + blocks: Vec::default(), + sections: HashMap::default(), + config, + }; + + let mut runtime = Runtime::new(database); + + let current_health: i32 = runtime.get_variable("health").unwrap(); + let expected_value = variable_kind.get_default_value().parse().unwrap(); + assert_eq!(current_health, expected_value); + + runtime.set_variable("health", 100).unwrap(); + let current_health: i32 = runtime.get_variable("health").unwrap(); + assert_eq!(current_health, 100); + } + + #[test] + fn float_variables_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Float; + variables.insert("speed".to_string(), variable_kind.clone()); + let config = Config { variables }; + + let database = Database { + blocks: Vec::default(), + sections: HashMap::default(), + config, + }; + + let mut runtime = Runtime::new(database); + + let current_speed: f32 = runtime.get_variable("speed").unwrap(); + let expected_value = variable_kind.get_default_value().parse().unwrap(); + assert_eq!(current_speed, expected_value); + + runtime.set_variable("speed", 1.5 as f32).unwrap(); + let current_speed: f32 = runtime.get_variable("speed").unwrap(); + assert_eq!(current_speed, 1.5); + } + + #[test] + fn bool_variables_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Bool; + variables.insert("bike".to_string(), variable_kind.clone()); + let config = Config { variables }; + + let database = Database { + blocks: Vec::default(), + sections: HashMap::default(), + config, + }; + + let mut runtime = Runtime::new(database); + + let current_bike: bool = runtime.get_variable("bike").unwrap(); + let expected_value = variable_kind.get_default_value().parse().unwrap(); + assert_eq!(current_bike, expected_value); + + runtime.set_variable("bike", true).unwrap(); + let current_speed: bool = runtime.get_variable("bike").unwrap(); + assert_eq!(current_speed, true); + } + + #[test] + fn string_variables_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::String; + variables.insert("message".to_string(), variable_kind.clone()); + let config = Config { variables }; + + let database = Database { + blocks: Vec::default(), + sections: HashMap::default(), + config, + }; + + let mut runtime = Runtime::new(database); + + let current_message: String = runtime.get_variable("message").unwrap(); + let expected_value = variable_kind.get_default_value(); + assert_eq!(current_message, expected_value); + + runtime + .set_variable("message", "hello".to_string()) + .unwrap(); + let current_message: String = runtime.get_variable("message").unwrap(); + assert_eq!(current_message, "hello".to_string()); + } + + #[test] + fn enum_variables_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Enum(vec!["Day".to_string(), "Night".to_string()]); + variables.insert("time_of_day".to_string(), variable_kind.clone()); + let config = Config { variables }; + + let database = Database { + blocks: Vec::default(), + sections: HashMap::default(), + config, + }; + + let mut runtime = Runtime::new(database); + + let current_time_of_day: TimeOfDay = runtime.get_variable("time_of_day").unwrap(); + let expected_value = variable_kind.get_default_value().parse().unwrap(); + assert_eq!(current_time_of_day, expected_value); + + runtime + .set_variable("time_of_day", TimeOfDay::Night) + .unwrap(); + let current_time_of_day: TimeOfDay = runtime.get_variable("time_of_day").unwrap(); + assert_eq!(current_time_of_day, TimeOfDay::Night); + + #[derive(Debug, Default, PartialEq, Eq)] + enum TimeOfDay { + #[default] + Day, + Night, + } + + #[derive(Debug, PartialEq, Eq)] + struct TestError; + + impl FromStr for TimeOfDay { + type Err = TestError; + + fn from_str(s: &str) -> Result { + match s { + "Day" => Ok(TimeOfDay::Day), + "Night" => Ok(TimeOfDay::Night), + _ => Err(TestError), + } + } + } + impl Display for TimeOfDay { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{:?}", self) + } + } + } + #[test] fn roll_chances_for_next_block_works_correctly() { let settings = BlockSettings { - chance: None, ..Default::default() }; @@ -519,7 +1050,7 @@ mod test { }; let settings = BlockSettings { - chance: Some(1.), + chance: cuentitos_common::Chance::Probability(1.), ..Default::default() }; @@ -529,7 +1060,7 @@ mod test { }; let settings = BlockSettings { - chance: Some(0.), + chance: cuentitos_common::Chance::Probability(0.), ..Default::default() }; @@ -538,15 +1069,17 @@ mod test { settings, }; - let file = Database { + let database = Database { blocks: vec![ text_with_no_chances, text_with_100_chances, text_with_0_chances, ], + sections: HashMap::default(), + config: Config::default(), }; let mut runtime = Runtime { - file, + database, block_stack: vec![0], ..Default::default() }; From 74d8b53af334623991d9350376f3bdd62c5ae470 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Thu, 29 Jun 2023 17:19:18 -0300 Subject: [PATCH 18/94] merge fixes --- cli/src/console.rs | 24 +- cli/src/main.rs | 54 + common/src/block.rs | 36 +- common/src/condition.rs | 17 +- common/src/config.rs | 2 + common/src/database.rs | 3 +- common/src/frequency.rs | 11 +- common/src/{divert.rs => function.rs} | 6 +- common/src/knot.rs | 9 - common/src/lib.rs | 12 +- common/src/modifier.rs | 8 +- common/src/requirement.rs | 6 - common/src/stitch.rs | 8 - compiler/en.csv | 51 + compiler/fixtures/cuentitos.toml | 8 - compiler/fixtures/en_export.csv | 1 - compiler/fixtures/events/01-basic.event | 2 - compiler/fixtures/events/02-choices.event | 4 - compiler/fixtures/events/03-results.event | 8 - .../fixtures/events/04-requirements.event | 21 - compiler/fixtures/events/05-modifiers.event | 15 - compiler/fixtures/events/06-settings.event | 4 - compiler/fixtures/items/00-moon-wolf.item | 2 - compiler/fixtures/items/01-mushroom.item | 4 - compiler/fixtures/items/02-dirt.item | 3 - compiler/fixtures/locales/es.csv | 4 - compiler/src/i18n.rs | 84 + compiler/src/lib.rs | 21 +- definitions/palabritas.md | 30 +- examples/cuentitos.toml | 16 +- examples/story-example.cuentitos | 38 +- palabritas/src/palabritas.pest | 13 +- palabritas/src/parser.rs | 418 ++-- runtime/fixtures/database.mp | 4 - runtime/fixtures/state_save.mp | 4 - runtime/src/game_state.rs | 10 +- runtime/src/runtime.rs | 1913 +++++++++++++++-- 37 files changed, 2258 insertions(+), 616 deletions(-) rename common/src/{divert.rs => function.rs} (60%) delete mode 100644 common/src/knot.rs delete mode 100644 common/src/stitch.rs create mode 100644 compiler/en.csv delete mode 100644 compiler/fixtures/cuentitos.toml delete mode 100644 compiler/fixtures/en_export.csv delete mode 100644 compiler/fixtures/events/01-basic.event delete mode 100644 compiler/fixtures/events/02-choices.event delete mode 100644 compiler/fixtures/events/03-results.event delete mode 100644 compiler/fixtures/events/04-requirements.event delete mode 100644 compiler/fixtures/events/05-modifiers.event delete mode 100644 compiler/fixtures/events/06-settings.event delete mode 100644 compiler/fixtures/items/00-moon-wolf.item delete mode 100644 compiler/fixtures/items/01-mushroom.item delete mode 100644 compiler/fixtures/items/02-dirt.item delete mode 100644 compiler/fixtures/locales/es.csv create mode 100644 compiler/src/i18n.rs delete mode 100644 runtime/fixtures/database.mp delete mode 100644 runtime/fixtures/state_save.mp diff --git a/cli/src/console.rs b/cli/src/console.rs index e3fea23..ed83068 100644 --- a/cli/src/console.rs +++ b/cli/src/console.rs @@ -9,9 +9,23 @@ use std::path::PathBuf; #[derive(Debug)] pub struct Console {} impl Console { - fn prompt(name: &str) -> String { + fn prompt(section: Option, subsection: Option) -> String { let mut line = String::new(); - print!("{}", name); + + let mut prompt_str = String::from("\n"); + + if let Some(section) = section { + prompt_str.push_str(§ion); + } + + if let Some(subsection) = subsection { + prompt_str.push('/'); + prompt_str.push_str(&subsection); + } + + prompt_str.push_str(" > "); + + print!("{}", prompt_str); std::io::stdout().flush().unwrap(); std::io::stdin() .read_line(&mut line) @@ -30,7 +44,9 @@ impl Console { let mut runtime = Runtime::new(file); loop { - let input = Self::prompt("> "); + let section = runtime.game_state.current_section.clone(); + let subsection = runtime.game_state.current_subsection.clone(); + let input = Self::prompt(section, subsection); match input.as_str() { "" => { @@ -57,7 +73,7 @@ impl Console { } } else if str.starts_with("->") { let substr: String = str.chars().skip(2).collect(); - let mut splitted = substr.split('.'); + let mut splitted = substr.split('/'); if let Some(section) = splitted.next() { if let Some(subsection) = splitted.next() { runtime.jump_to_section(section.to_string(), Some(subsection.to_string())); diff --git a/cli/src/main.rs b/cli/src/main.rs index 1d5de87..eda955c 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -1,4 +1,7 @@ use clap::{Parser, Subcommand}; +use notify::event::AccessKind::Close; +use notify::event::AccessMode::Write; +use notify::{EventKind, RecursiveMode, Result, Watcher}; use std::path::Path; mod console; @@ -23,6 +26,13 @@ enum Commands { #[clap(default_value = "./cuentitos.db")] source_path: std::path::PathBuf, }, + + Watch { + #[clap(default_value = ".")] + source_path: std::path::PathBuf, + #[clap(default_value = "./cuentitos.db")] + build_path: std::path::PathBuf, + }, } fn compile(source_path: T, destination_path: U) @@ -46,6 +56,50 @@ fn main() { Some(Commands::Run { source_path }) => { Console::start(source_path); } + Some(Commands::Watch { + source_path, + build_path, + }) => { + watch(source_path, build_path).unwrap(); + } None => {} } } + +fn watch(source_path: T, destination_path: U) -> Result<()> +where + T: AsRef, + U: AsRef, +{ + compile(&source_path, &destination_path); + let source_path_moved = source_path.as_ref().to_path_buf(); + let destination_path = destination_path.as_ref().to_path_buf(); + + let mut watcher = notify::recommended_watcher(move |res: Result| match res { + Ok(event) => { + if event.kind == EventKind::Access(Close(Write)) { + compile(&source_path_moved, &destination_path); + } + } + Err(e) => println!("watch error: {:?}", e), + }) + .unwrap(); + + // Add a path to be watched. All files and directories at that path and + // below will be monitored for changes. + let mut listening_paths = source_path.as_ref().to_path_buf(); + listening_paths.push("events"); + watcher + .watch(&listening_paths, RecursiveMode::Recursive) + .unwrap(); + + let mut listening_paths = source_path.as_ref().to_path_buf(); + listening_paths.push("items"); + if listening_paths.is_dir() { + watcher + .watch(&listening_paths, RecursiveMode::Recursive) + .unwrap(); + } + + loop {} +} diff --git a/common/src/block.rs b/common/src/block.rs index 11d9f62..e124bf2 100644 --- a/common/src/block.rs +++ b/common/src/block.rs @@ -1,15 +1,30 @@ -use crate::{FrequencyModifier, I18nId, Modifier, Requirement}; +use crate::{FrequencyModifier, Function, I18nId, Modifier, Requirement}; +use core::fmt; use serde::{Deserialize, Serialize}; pub type BlockId = usize; pub type BucketName = String; +pub type SectionName = String; #[derive(Debug, Default, Serialize, Deserialize, Eq, PartialEq, Clone, Hash)] pub struct SectionKey { pub section: String, pub subsection: Option, } +impl fmt::Display for SectionKey { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let mut key = String::new(); + key.push_str(&self.section); + + if let Some(subsection) = &self.subsection { + key.push('/'); + key.push_str(subsection); + } + + write!(f, "{}", key) + } +} #[derive(Debug, Default, Serialize, Deserialize, PartialEq, Clone)] pub enum NextBlock { #[default] @@ -27,6 +42,9 @@ pub struct BlockSettings { pub frequency_modifiers: Vec, pub requirements: Vec, pub modifiers: Vec, + pub unique: bool, + pub tags: Vec, + pub functions: Vec, } #[derive(Debug, Serialize, Deserialize, Default, PartialEq, Clone)] @@ -52,11 +70,11 @@ pub enum Block { settings: BlockSettings, }, Section { - id: I18nId, + id: SectionName, settings: BlockSettings, }, Subsection { - id: I18nId, + id: SectionName, settings: BlockSettings, }, } @@ -80,6 +98,18 @@ impl Block { Block::Subsection { id: _, settings } => settings, } } + pub fn get_i18n_id(&self) -> Option { + match self { + Block::Text { id, settings: _ } => Some(id.clone()), + Block::Choice { id, settings: _ } => Some(id.clone()), + Block::Bucket { + name: _, + settings: _, + } => None, + Block::Section { id: _, settings: _ } => None, + Block::Subsection { id: _, settings: _ } => None, + } + } } impl Default for Block { diff --git a/common/src/condition.rs b/common/src/condition.rs index df859e5..594fea4 100644 --- a/common/src/condition.rs +++ b/common/src/condition.rs @@ -1,4 +1,4 @@ -use crate::Variable; +use crate::VariableId; use serde::{Deserialize, Serialize}; @@ -13,16 +13,19 @@ pub enum Operator { LessOrEqualThan, } -#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)] pub struct Condition { - pub variable: Variable, + pub variable: VariableId, pub operator: Operator, pub value: String, } -impl Condition { - pub fn meets_condition(&self) -> bool { - //TODO - true +impl Default for Condition { + fn default() -> Self { + Self { + variable: Default::default(), + operator: Default::default(), + value: "true".to_string(), + } } } diff --git a/common/src/config.rs b/common/src/config.rs index 25ffa3d..9b2c5d6 100644 --- a/common/src/config.rs +++ b/common/src/config.rs @@ -11,6 +11,8 @@ use serde::{Deserialize, Serialize}; pub struct Config { #[serde(default)] pub variables: HashMap, + pub locales: Vec, + pub default_locale: String, } impl Config { diff --git a/common/src/database.rs b/common/src/database.rs index f8c6253..02a4ba2 100644 --- a/common/src/database.rs +++ b/common/src/database.rs @@ -1,4 +1,4 @@ -use crate::{Block, BlockId, Config, Result, SectionKey}; +use crate::{Block, BlockId, Config, I18n, Result, SectionKey}; use rmp_serde::Deserializer; use serde::{Deserialize, Serialize}; use std::collections::HashMap; @@ -8,6 +8,7 @@ pub struct Database { pub blocks: Vec, pub sections: HashMap, pub config: Config, + pub i18n: I18n, } impl Database { diff --git a/common/src/frequency.rs b/common/src/frequency.rs index 0b38ddc..58c49b3 100644 --- a/common/src/frequency.rs +++ b/common/src/frequency.rs @@ -4,14 +4,5 @@ use serde::{Deserialize, Serialize}; #[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)] pub struct FrequencyModifier { pub condition: Condition, - pub value: f32, -} - -impl FrequencyModifier { - pub fn change_frequency(&self) -> f32 { - match self.condition.meets_condition() { - true => self.value, - false => 0., - } - } + pub value: i32, } diff --git a/common/src/divert.rs b/common/src/function.rs similarity index 60% rename from common/src/divert.rs rename to common/src/function.rs index 7952faf..8021f1f 100644 --- a/common/src/divert.rs +++ b/common/src/function.rs @@ -1,7 +1,7 @@ use serde::{Deserialize, Serialize}; #[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] -pub struct Divert { - pub knot: String, - pub stitch: Option, +pub struct Function { + pub name: String, + pub parameters: Vec, } diff --git a/common/src/knot.rs b/common/src/knot.rs deleted file mode 100644 index adf5deb..0000000 --- a/common/src/knot.rs +++ /dev/null @@ -1,9 +0,0 @@ -use crate::{Block, Stitch}; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Default, Serialize, Deserialize, PartialEq)] -pub struct Knot { - pub identifier: String, - pub blocks: Vec, - pub stitches: Vec, -} diff --git a/common/src/lib.rs b/common/src/lib.rs index 77b2c73..e3c070a 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -1,12 +1,6 @@ mod database; pub use database::*; -mod knot; -pub use knot::*; - -mod stitch; -pub use stitch::*; - mod block; pub use block::*; @@ -22,9 +16,6 @@ pub use variable::*; mod frequency; pub use frequency::*; -mod divert; -pub use divert::*; - mod modifier; pub use modifier::*; @@ -35,3 +26,6 @@ pub type Result = std::result::Result>; mod i18n; pub use i18n::*; + +mod function; +pub use function::*; diff --git a/common/src/modifier.rs b/common/src/modifier.rs index 87b078d..2ae5865 100644 --- a/common/src/modifier.rs +++ b/common/src/modifier.rs @@ -1,8 +1,10 @@ -use crate::Variable; use serde::{Deserialize, Serialize}; +use crate::VariableId; + #[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] pub struct Modifier { - pub variable: Variable, - pub new_value: String, + pub variable: VariableId, + pub added_value: String, + pub is_override: bool, } diff --git a/common/src/requirement.rs b/common/src/requirement.rs index aa3ac6e..a6f874e 100644 --- a/common/src/requirement.rs +++ b/common/src/requirement.rs @@ -5,9 +5,3 @@ use serde::{Deserialize, Serialize}; pub struct Requirement { pub condition: Condition, } - -impl Requirement { - pub fn meets_requirement(&self) -> bool { - self.condition.meets_condition() - } -} diff --git a/common/src/stitch.rs b/common/src/stitch.rs deleted file mode 100644 index 06e089a..0000000 --- a/common/src/stitch.rs +++ /dev/null @@ -1,8 +0,0 @@ -use crate::Block; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Default, Serialize, Deserialize, PartialEq)] -pub struct Stitch { - pub identifier: String, - pub blocks: Vec, -} diff --git a/compiler/en.csv b/compiler/en.csv new file mode 100644 index 0000000..f0830bc --- /dev/null +++ b/compiler/en.csv @@ -0,0 +1,51 @@ +Id,Text +A good cup of tea is always good to regulate after the sensory overload of the city.,A good cup of tea is always good to regulate after the sensory overload of the city. +"I nod when the musician looks my way, to show I really enjoy the music.","I nod when the musician looks my way, to show I really enjoy the music." +Go to the Farmer's Market,Go to the Farmer's Market +I make some tea,I make some tea +You start to think about all the stuff you need to do tomorrow.,You start to think about all the stuff you need to do tomorrow. +"You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction.","You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction." +You decide to focus on the now...,You decide to focus on the now... +"As you enter the peaceful sanctuary of your room, you take a deep breath, relieved to have a quiet space where you can recharge and prepare for the challenges ahead.","As you enter the peaceful sanctuary of your room, you take a deep breath, relieved to have a quiet space where you can recharge and prepare for the challenges ahead." +That makes you feel overwhelmed.,That makes you feel overwhelmed. +You get to the farmer's market. It's very early and some stands are still being set up.,You get to the farmer's market. It's very early and some stands are still being set up. +You sit in the couch to enjoy your tea. Drink half of the cup and fall asleep.,You sit in the couch to enjoy your tea. Drink half of the cup and fall asleep. +"As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses.","As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses." +"You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts.","You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts." +"You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer.","You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer." +"The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers.","The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers." +"I keep walking, even if the murals look good, the darkness of the alley is unsettling.","I keep walking, even if the murals look good, the darkness of the alley is unsettling." +You decide it's now time to go to sleep.,You decide it's now time to go to sleep. +"You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape.","You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape." +You get to the museum door. You watch through the window. It seems crowded.,You get to the museum door. You watch through the window. It seems crowded. +I take a walk through a nearby park to relax and acclimate to the city.,I take a walk through a nearby park to relax and acclimate to the city. +"As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment.","As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment." +I go to bed,I go to bed +"The phone rings twice, and dad picks up. You have a good chat.","The phone rings twice, and dad picks up. You have a good chat." +"This unexpected oasis of visual tranquility provides a respite from the chaos of the city, inspiring you to explore more of the urban canvas and the stories it holds.","This unexpected oasis of visual tranquility provides a respite from the chaos of the city, inspiring you to explore more of the urban canvas and the stories it holds." +You feel they're too busy to bother them with questions.,You feel they're too busy to bother them with questions. +"You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations.","You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations." +This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city.,This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. +"You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand.","You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand." +"A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise.","A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise." +The moonlight gives the room a peaceful tone.,The moonlight gives the room a peaceful tone. +I call my parents,I call my parents +"Feeling mentally and physically exhausted from the day's adventures, you decide it's time to head back to your hotel.","Feeling mentally and physically exhausted from the day's adventures, you decide it's time to head back to your hotel." +"The skyline reaches for the clouds, and the sounds of traffic and people surround you.","The skyline reaches for the clouds, and the sounds of traffic and people surround you." +"You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them.","You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them." +"Wandering the market, you stumble upon a hidden alley adorned with vibrant street art.","Wandering the market, you stumble upon a hidden alley adorned with vibrant street art." +"The phone rings ten times, nobody is at home.","The phone rings ten times, nobody is at home." +I grab my phone and take pictures of the murals.,I grab my phone and take pictures of the murals. +The musician smiles and nods thanking you.,The musician smiles and nods thanking you. +"You've just arrived in the bustling city, full of excitement and anticipation for your new job.","You've just arrived in the bustling city, full of excitement and anticipation for your new job." +"The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise.","The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise." +I leave two dollars to the artist.,I leave two dollars to the artist. +The sun shines bright through the window.,The sun shines bright through the window. +You wake up feeling refreshed. Let's see what this day brings.,You wake up feeling refreshed. Let's see what this day brings. +I visit a popular street market to experience the city's unique flavors and energy.,I visit a popular street market to experience the city's unique flavors and energy. +"The phone rings twice, and mom picks up. You have a good chat.","The phone rings twice, and mom picks up. You have a good chat." +"At the bustling street market, you discover a food stand offering mouthwa tering delicacies.","At the bustling street market, you discover a food stand offering mouthwa tering delicacies." +"Each colorful mural tells a different story, capturing your imagination and sparking your creativity.","Each colorful mural tells a different story, capturing your imagination and sparking your creativity." +"Feeling depleted of spoons, you go right back to bed.","Feeling depleted of spoons, you go right back to bed." +Explore a museum,Explore a museum +"As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician.","As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician." diff --git a/compiler/fixtures/cuentitos.toml b/compiler/fixtures/cuentitos.toml deleted file mode 100644 index 2dca840..0000000 --- a/compiler/fixtures/cuentitos.toml +++ /dev/null @@ -1,8 +0,0 @@ -reputations = [ "rep_1", "rep_2" ] -locales = ['en', 'es', 'ru'] -default_locale = 'en' - -[variables] -health = "integer" -happy = "bool" -tile = { enum = { values = ["forest"] }} diff --git a/compiler/fixtures/en_export.csv b/compiler/fixtures/en_export.csv deleted file mode 100644 index 28cc662..0000000 --- a/compiler/fixtures/en_export.csv +++ /dev/null @@ -1 +0,0 @@ -id,value diff --git a/compiler/fixtures/events/01-basic.event b/compiler/fixtures/events/01-basic.event deleted file mode 100644 index 6a5aed4..0000000 --- a/compiler/fixtures/events/01-basic.event +++ /dev/null @@ -1,2 +0,0 @@ -A Basic Event -This event has no options, just title and description \ No newline at end of file diff --git a/compiler/fixtures/events/02-choices.event b/compiler/fixtures/events/02-choices.event deleted file mode 100644 index a04d496..0000000 --- a/compiler/fixtures/events/02-choices.event +++ /dev/null @@ -1,4 +0,0 @@ -A Basic Event -This event has options - * An Option without requirements - * Another option without requirements \ No newline at end of file diff --git a/compiler/fixtures/events/03-results.event b/compiler/fixtures/events/03-results.event deleted file mode 100644 index 1312b73..0000000 --- a/compiler/fixtures/events/03-results.event +++ /dev/null @@ -1,8 +0,0 @@ -A Basic Event -This event has options with results, none have requirements - * An Option - (10) One Result - (90) Another Result - * Another option - (90) One more Result - (10) Yet another Result diff --git a/compiler/fixtures/events/04-requirements.event b/compiler/fixtures/events/04-requirements.event deleted file mode 100644 index 0ff4055..0000000 --- a/compiler/fixtures/events/04-requirements.event +++ /dev/null @@ -1,21 +0,0 @@ -Conditions -This event has conditions - unique - require var health <100 - require item wooden_figure - require reputation rep_1 5 - require time_of_day night - require event !choices - require decision a_decision - require var tile forest - * An Option - require var health =100 - require time_of_day night - require event choices - (10) One Result - require var happy true - require time_of_day morning - require time_of_day !noon - (90) Another Result - require var happy false - require time_of_day evening diff --git a/compiler/fixtures/events/05-modifiers.event b/compiler/fixtures/events/05-modifiers.event deleted file mode 100644 index 724aaec..0000000 --- a/compiler/fixtures/events/05-modifiers.event +++ /dev/null @@ -1,15 +0,0 @@ -A Basic Event with mods -This event has options with results and mods - * An Option - (100) One Result - mod item wooden_figure - mod item wooden_figure -1 - mod var health -2 - mod var health 5 - mod var happy true - mod var happy false - mod reputation rep_1 2 - mod reputation rep_2 -2 - mod decision a_decision - mod achievement an_achievement - diff --git a/compiler/fixtures/events/06-settings.event b/compiler/fixtures/events/06-settings.event deleted file mode 100644 index 42dab97..0000000 --- a/compiler/fixtures/events/06-settings.event +++ /dev/null @@ -1,4 +0,0 @@ -A Basic Event -This event has no options, just title and description -set character laidaxai -set character_voice strong diff --git a/compiler/fixtures/items/00-moon-wolf.item b/compiler/fixtures/items/00-moon-wolf.item deleted file mode 100644 index 9340627..0000000 --- a/compiler/fixtures/items/00-moon-wolf.item +++ /dev/null @@ -1,2 +0,0 @@ -Moon Wolf -A woolf with blue eyes that shine at night \ No newline at end of file diff --git a/compiler/fixtures/items/01-mushroom.item b/compiler/fixtures/items/01-mushroom.item deleted file mode 100644 index e7fe704..0000000 --- a/compiler/fixtures/items/01-mushroom.item +++ /dev/null @@ -1,4 +0,0 @@ -Mushroom -Delicious and nutritious -ingredient -6 \ No newline at end of file diff --git a/compiler/fixtures/items/02-dirt.item b/compiler/fixtures/items/02-dirt.item deleted file mode 100644 index 177d2f4..0000000 --- a/compiler/fixtures/items/02-dirt.item +++ /dev/null @@ -1,3 +0,0 @@ -Dirt -A dirt lump you dug -6 \ No newline at end of file diff --git a/compiler/fixtures/locales/es.csv b/compiler/fixtures/locales/es.csv deleted file mode 100644 index 4b80de0..0000000 --- a/compiler/fixtures/locales/es.csv +++ /dev/null @@ -1,4 +0,0 @@ -id,value -event-01-basic-title,"Un evento básico" -, -event, diff --git a/compiler/src/i18n.rs b/compiler/src/i18n.rs new file mode 100644 index 0000000..9e0287f --- /dev/null +++ b/compiler/src/i18n.rs @@ -0,0 +1,84 @@ +use std::path::Path; + +use cuentitos_common::{Database, LanguageDb}; + +type Record = (String, String); + +pub struct I18n {} + +impl I18n { + pub fn process( + database: &Database, + base_path: T, + destination_path: U, + ) -> std::io::Result + where + T: AsRef, + U: AsRef, + { + let mut i18n = cuentitos_common::I18n { + locales: database.config.locales.clone(), + default_locale: database.config.default_locale.clone(), + ..Default::default() + }; + + for locale in &i18n.locales { + i18n + .strings + .insert(locale.to_string(), LanguageDb::default()); + } + + // Setup default locale + for block in &database.blocks { + if let Some(i18n_id) = block.get_i18n_id() { + if let Some(db) = i18n.strings.get_mut(&i18n.default_locale) { + db.insert(i18n_id.clone(), i18n_id); + } + } + } + + // Load existing locales + let mut base_path = base_path.as_ref().to_path_buf(); + base_path.push("locales"); + + for locale in &i18n.locales { + if locale != &i18n.default_locale { + let mut path = base_path.clone(); + path.push(format!("{}.csv", locale)); + + if path.is_file() { + let mut reader = csv::Reader::from_path(path)?; + + if let Some(db) = i18n.strings.get_mut(locale) { + for result in reader.deserialize() { + let record: Record = result?; + if record.0.is_empty() && record.1.is_empty() { + db.insert(record.0, record.1); + } + } + } + } + } + } + + // Generate main translation file + let mut path = destination_path.as_ref().to_path_buf(); + + if path.extension().is_some() { + path = path.parent().unwrap().to_path_buf(); + } + + std::fs::create_dir_all(&path)?; + + path.push(format!("{}.csv", i18n.default_locale)); + + let mut wtr = csv::Writer::from_path(path)?; + wtr.write_record(["Id", "Text"])?; + + for record in i18n.strings[&i18n.default_locale].iter() { + wtr.serialize(record)?; + } + + Ok(i18n) + } +} diff --git a/compiler/src/lib.rs b/compiler/src/lib.rs index 756aefc..8cfcfb1 100644 --- a/compiler/src/lib.rs +++ b/compiler/src/lib.rs @@ -1,3 +1,4 @@ +use i18n::I18n; use palabritas::parse_database_from_path; use rmp_serde::Serializer; use serde::Serialize; @@ -5,21 +6,33 @@ use std::fs::File; use std::io::Write; use std::path::Path; +mod i18n; + pub fn compile(source_path: T, destination_path: U) where T: AsRef, U: AsRef, { - let db_result = parse_database_from_path(source_path); + let db_result = parse_database_from_path(&source_path); - let db = match db_result { + let mut db = match db_result { Ok(db) => db, - Err(_) => { - println!("{}", db_result.unwrap_err()); + Err(e) => { + println!("{}", e); + return; + } + }; + + let i18n = match I18n::process(&db, source_path, &destination_path) { + Ok(i18n) => i18n, + Err(e) => { + println!("{}", e); return; } }; + db.i18n = i18n; + let mut buf: Vec = Vec::new(); let mut serializer = Serializer::new(&mut buf); diff --git a/definitions/palabritas.md b/definitions/palabritas.md index 1e57c61..5526b4f 100644 --- a/definitions/palabritas.md +++ b/definitions/palabritas.md @@ -199,7 +199,7 @@ You decide to focus on the now... req time_of_day_night ``` -These three lines will only show at night, after `The moonlight gives...`. The second one only if the player is low on energy. +Thse three lines will only show at night, after `The moonlight gives...`. The second one only if the player is low on energy. You can also add requirements to options. @@ -323,14 +323,9 @@ For example: You wake up feeling refreshed. Let's see what this day brings. ``` -### Finishing -Any time you want to tell the runtime that you're done (with a section, with a dialogue, whatever it is you're doing), you can divert to `END`. - +### Finishing the game `-> END` -Depending on your game, you'll interpret what `END` means. It could be the end of the game, or it could just be the end of the current section or dialog. -The runtime won't execute anything after you go to `END`. You'll have to manually divert to a section from the runtime for the execution to continue. - ## Comments A line that starts with `//` is ignored. @@ -358,27 +353,6 @@ You can use an arbitrary amount of parameters, they will be passed to the runtim It's up to the runtime how to interpret `0.3` in this case, and cuentitos will just pass it through. You can always use variables as a way to communicate with the runtime and check for types in compile time. -## Unique - -There's an important feature that can be used to avoid repetition, if you tag a block as `unique`, it will only be displayed once, if the runtime hits that line again it will be ignored. - -```cuentitos -# second_day_happy - A new day in the new city. - unique -``` - -In this case the line "A new day in the new city" will only be shown the first time the runtime enters `second_day_happy`. Anytime you divert to the section again, it will not show up. - -## Tags - -You can use tags to communicate things to the runtime that don't belong to the game state as the variables. For example, you can use it to display an icon saying that a given option is dangerous: - -```cuentitos - * Explore a museum - tag dangerous -``` - ## Configuration ### Variables #### Bool diff --git a/examples/cuentitos.toml b/examples/cuentitos.toml index 76c2cba..58294aa 100644 --- a/examples/cuentitos.toml +++ b/examples/cuentitos.toml @@ -1,11 +1,9 @@ +locales = ['en'] +default_locale = 'en' + [variables] -health = "integer" -time = "integer" -money = "integer" -donkey = "bool" -food = "integer" -time_mod = "integer" -energized = "float" -message = "string" +energy = "integer" +time = "float" + [variables.time_of_day] -enum = ["Day", "Night"] \ No newline at end of file +enum = ["day", "night"] \ No newline at end of file diff --git a/examples/story-example.cuentitos b/examples/story-example.cuentitos index 3e050a5..5d2c026 100644 --- a/examples/story-example.cuentitos +++ b/examples/story-example.cuentitos @@ -7,16 +7,16 @@ As you take your first steps in this urban jungle, you feel a mix of emotions, h (50%) A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise. This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. * I visit a popular street market to experience the city's unique flavors and energy. - (50) At the bustling street market, you discover a food stand offering mouthwatering delicacies. - [morning_vendor] + (50) At the bustling street market, you discover a food stand offering mouthwa tering delicacies. + [(50%) happy_vendor] req time_of_day morning - [(100) happy_vendor] - (50%) You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer. - (50%) You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations. - [(25) tired_vendor] - (50%) You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand. - (50%) You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them. - [night_vendor] + (50%) You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer. + (50%) You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations. + [(50%) tired_vendor] + req time_of_day morning + (50%) You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand. + (50%) You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them. + [tired_vendor] req time_of_day night (50%) You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction. (50%) The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers. @@ -62,10 +62,10 @@ You decide to focus on the now... req energy >10 [call] (30) The phone rings twice, and dad picks up. You have a good chat. - req energy >20 + req energy>20 mod energy -10 (10) The phone rings twice, and mom picks up. You have a good chat. - req energy >20 + req energy>20 freq time_of_day morning 100 mod energy -10 (40) The phone rings ten times, nobody is at home. @@ -74,24 +74,16 @@ You decide to focus on the now... mod energy 10 mod time -7.5 -> second_day --> END - -// This is a comment -# second_day_happy - A new day in the new city. - unique - // This is a nested comment +# second_day You wake up feeling refreshed. Let's see what this day brings. - `play_sound alarm 0.3` * Explore a museum - tag dangerous - -> second_day.museum + -> second_day/museum * Go to the Farmer's Market - -> second_day.farmers_market + -> second_day/farmers_market ## museum You get to the museum door. You watch through the window. It seems crowded. ## farmers_market - You get to the farmer's market. It's very early and some stands are still being set up. + You get to the farmer's market. It's very early and some stands are still being set up. \ No newline at end of file diff --git a/palabritas/src/palabritas.pest b/palabritas/src/palabritas.pest index d162e5b..68421c1 100644 --- a/palabritas/src/palabritas.pest +++ b/palabritas/src/palabritas.pest @@ -1,4 +1,4 @@ -ReservedKeywords = { "req" | "freq" | "mod" | "->" | "`" | "*" | "#" | "##" | "//" } +ReservedKeywords = { "req" | "freq" | "mod" | "unique" | "->" | "`" | "*" | "#" | "##" | "//" } Char = { (!NewLine ~ ANY)+ } Integer = { "-"? ~ ASCII_DIGIT+ } Float = { Integer ~ "." ~ ASCII_DIGIT* } @@ -6,19 +6,22 @@ Percentage = { Integer ~ "%" } Indentation = { " " } String = @{ Char+ } ComparisonOperator = { "!=" | "=" | "<=" | ">=" | "<" | ">" | "!" } +NotOperator = {"!"} SnakeCase = { ASCII_ALPHA_LOWER ~ (ASCII_ALPHA_LOWER | "_" | ASCII_DIGIT)* } Identifier = { (ASCII_ALPHA | "_" ) ~ (ASCII_ALPHANUMERIC | "_")* } Value = { Identifier | "="? ~ Float | Percentage | "="? ~ Integer } -Condition = { "!"? ~ Identifier ~ " "* ~ (ComparisonOperator ~ " "*)? ~ Value? } +Condition = { ( Identifier ~ " "* ~ ( ComparisonOperator ~ " "* )? ~ Value? ) | ( NotOperator? ~ " "* ~ Identifier ~ " "*) } Requirement = { "req" ~ " "+ ~ Condition } Frequency = { "freq" ~ " "+ ~ Condition ~ " "+ ~ ( Float | Integer ) } Modifier = { "mod" ~ " "+ ~ Identifier ~ " "+ ~ Value } -Divert = { "->" ~ " "* ~ Identifier ~ ("." ~ Identifier)? } -Function = {"`" ~ SnakeCase ~ (" " ~ Value)* ~ "`"} +Divert = { "->" ~ " "* ~ Identifier ~ ("/" ~ Identifier)? } +Function = {"`" ~ " "* ~ Identifier ~ (" " ~ Value)* ~ " "* ~ "`"} +Tag = {"tag" ~ " "+ ~ Identifier} +Unique = {"unique"} -Command = {NewLine ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert | Function) } +Command = {NewLine ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert | Function | Unique | Tag) } Chance = { "(" ~ " "* ~ ( Percentage | Float | Integer ) ~ " "* ~ ")" ~ " "* } diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index 441f249..ffa4df9 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -3,8 +3,8 @@ use std::collections::HashMap; use std::path::Path; use cuentitos_common::{ - Block, BlockId, BlockSettings, Chance, Condition, Config, Database, FrequencyModifier, Modifier, - NextBlock, Operator, Requirement, SectionKey, VariableKind + Block, BlockId, BlockSettings, Chance, Condition, Config, Database, FrequencyModifier, Function, + Modifier, NextBlock, Operator, Requirement, SectionKey, }; use pest::{iterators::Pair, Parser}; @@ -119,6 +119,7 @@ pub fn parse_database(token: Pair, config: Config) -> Result, settings: &mut BlockSettings) { for inner_token in token.into_inner() { match inner_token.as_rule() { - //Command = {NEWLINE ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert) } + //Command = {NewLine ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert | Function | Unique | Tag) } Rule::Requirement => { if let Some(requirement) = parse_requirement(inner_token) { settings.requirements.push(requirement); @@ -599,22 +600,56 @@ fn add_command_to_settings(token: Pair, settings: &mut BlockSettings) { settings.next = divert; } } + Rule::Unique => { + settings.unique = true; + } + Rule::Tag => { + if let Some(tag) = parse_tag(inner_token) { + settings.tags.push(tag); + } + } + Rule::Function => { + if let Some(function) = parse_function(inner_token) { + settings.functions.push(function); + } + } _ => {} } } } fn add_command_to_block(token: Pair, block: &mut Block) { - match block { - Block::Text { id: _, settings } => { - add_command_to_settings(token, settings); + let settings = block.get_settings_mut(); + add_command_to_settings(token, settings); +} + +fn parse_function(token: Pair) -> Option { + if token.as_rule() != Rule::Function { + return None; + } + let mut name = String::default(); + let mut parameters = Vec::default(); + for inner_token in token.into_inner() { + if inner_token.as_rule() == Rule::Identifier { + name = inner_token.as_str().to_string(); } - Block::Choice { id: _, settings } => { - add_command_to_settings(token, settings); + if inner_token.as_rule() == Rule::Value { + parameters.push(inner_token.as_str().to_string()); } - _ => {} } + Some(Function { name, parameters }) } +fn parse_tag(token: Pair) -> Option { + if token.as_rule() != Rule::Tag { + return None; + } + for inner_token in token.into_inner() { + if inner_token.as_rule() == Rule::Identifier { + return Some(inner_token.as_str().to_string()); + } + } + None +} fn parse_divert(token: Pair) -> Option { if token.as_rule() != Rule::Divert { return None; @@ -634,6 +669,9 @@ fn parse_divert(token: Pair) -> Option { } } + if section.is_some() && subsection.is_none() && section.clone().unwrap() == "END" { + return Some(NextBlock::EndOfFile); + } section.map(|section| { NextBlock::Section(SectionKey { section, @@ -652,12 +690,16 @@ fn parse_modifier(token: Pair) -> Option { for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Identifier => { - modifier.variable.id = inner_token.as_str().to_string(); - //TODO KIND + modifier.variable = inner_token.as_str().to_string(); } Rule::Value => { - modifier.new_value = inner_token.as_str().to_string(); + if inner_token.as_str().starts_with('=') { + modifier.is_override = true; + modifier.added_value = inner_token.as_str()[1..].to_string(); + } else { + modifier.added_value = inner_token.as_str().to_string(); + } } _ => {} } @@ -680,7 +722,7 @@ fn parse_frequency(token: Pair) -> Option { } Rule::Float | Rule::Integer => { - let value = inner_token.as_str().parse::().unwrap(); + let value = inner_token.as_str().parse::().unwrap(); frequency.value = value; } _ => {} @@ -709,21 +751,23 @@ fn parse_condition(token: Pair) -> Option { if token.as_rule() != Rule::Condition { return None; } - /*Condition = { Identifier ~ " "* ~ (ComparisonOperator ~ " "*)? ~ Value } */ + //Condition = { ( Identifier ~ " "* ~ ( ComparisonOperator ~ " "* )? ~ Value? ) | ( NotEqualOperator? ~ " "* ~ Identifier ~ " "*) } let mut condition = Condition::default(); for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Identifier => { - condition.variable.id = inner_token.as_str().to_string(); - //TODO KIND + condition.variable = inner_token.as_str().to_string(); } Rule::ComparisonOperator => { if let Some(operator) = parse_comparison_operator(inner_token) { condition.operator = operator; } } + Rule::NotOperator => { + condition.operator = Operator::NotEqual; + } Rule::Value => { condition.value = inner_token.as_str().to_string(); } @@ -796,9 +840,11 @@ fn match_rule(token: &Pair, expected_rule: Rule) -> Result<(), PalabritasE #[cfg(test)] mod test { + use std::vec; + use crate::parser::*; use cuentitos_common::{ - Block, BlockSettings, Condition, FrequencyModifier, Modifier, Operator, Requirement, Variable, + Block, BlockSettings, Condition, FrequencyModifier, Modifier, Operator, Requirement, }; use pest::iterators::Pair; use rand::distributions::Alphanumeric; @@ -1104,36 +1150,6 @@ mod test { }; assert_eq!(section, expected_value); } - - #[test] - fn parse_section_commands_correctly() { - let identifier = make_random_snake_case(); - - let section_string = format!("# {}\n req test", identifier); - let token = short_parse(Rule::Section, §ion_string); - let mut blocks = Vec::default(); - let mut sections = HashMap::default(); - parse_section(token, &mut blocks, &mut sections).unwrap(); - - let section = blocks[0][0].clone(); - - let expected_value = Block::Section { - id: identifier, - settings: BlockSettings { - requirements: vec![ Requirement { - condition: Condition { - variable: Variable { id: "test".to_string(), kind: VariableKind::Bool }, - operator: Operator::Equal, - value: "true".to_string() - } - }], - ..Default::default() - }, - }; - assert_eq!(section, expected_value); - - } - #[test] fn parse_section_with_subsections_correctly() { //Section = {"#" ~ " "* ~ Identifier ~ " "* ~ Command* ~ NewLine ~ ( NewLine | NewBlock | Subsection )* } @@ -1160,6 +1176,22 @@ mod test { settings: BlockSettings::default(), }; assert_eq!(section, expected_value); + + let sub_section_1 = blocks[0][1].clone(); + + let expected_value = Block::Subsection { + id: subsection_identifier_1, + settings: BlockSettings::default(), + }; + assert_eq!(sub_section_1, expected_value); + + let sub_section_2 = blocks[0][2].clone(); + + let expected_value = Block::Subsection { + id: subsection_identifier_2, + settings: BlockSettings::default(), + }; + assert_eq!(sub_section_2, expected_value); } #[test] fn parse_text_correctly() { @@ -1201,16 +1233,14 @@ mod test { // //Command = {NEWLINE ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert) } //Modifier - let identifier = make_random_identifier(); - let new_value = rand::thread_rng().gen::().to_string(); - let modifier_string = format!("\n mod {} {}", identifier, new_value); + let variable = make_random_identifier(); + let added_value = rand::thread_rng().gen::().to_string(); + let modifier_string = format!("\n mod {} {}", variable, added_value); let expected_modifier = Modifier { - variable: Variable { - id: identifier, - ..Default::default() - }, - new_value, + variable, + added_value, + is_override: false, }; block_settings.modifiers.push(expected_modifier); @@ -1218,18 +1248,23 @@ mod test { let token = short_parse(Rule::Command, &modifier_string); add_command_to_block(token, &mut block); - /* //Divert - let knot = make_random_identifier(); - let divert_string = format!("\n -> {}", knot); + //Divert + let section = make_random_identifier(); + let divert_string = format!("\n -> {}", section); - let expected_divert = Divert { - knot: knot.clone(), - stitch: None, - }; - expected_blocks.divert.push(expected_divert); + block_settings.next = NextBlock::Section(SectionKey { + section, + subsection: None, + }); let token = short_parse(Rule::Command, &divert_string); - add_command_to_blocks(token, &mut blocks); */ + add_command_to_block(token, &mut block); + + //Unique + + block_settings.unique = true; + let token = short_parse(Rule::Command, "\n unique"); + add_command_to_block(token, &mut block); //Frequency @@ -1237,7 +1272,7 @@ mod test { let condition_token = short_parse(Rule::Condition, &condition_string); let condition = parse_condition(condition_token).unwrap(); - let change_value: f32 = rand::thread_rng().gen(); + let change_value: i32 = rand::thread_rng().gen(); let frequency_string = format!("\n freq {} {}", condition_string, change_value); let expected_frequency = FrequencyModifier { condition, @@ -1272,10 +1307,39 @@ mod test { } #[test] - fn database_sections_get_added_correctly() {} + fn parse_tag_correctly() { + //Tag = {"tag" ~ " "+ ~ Identifier} + let identifier = make_random_identifier(); + let tag_string = format!("tag {}", identifier); + + let token = short_parse(Rule::Tag, &tag_string); + let value = parse_tag(token).unwrap(); + + assert_eq!(value, identifier); + } + + #[test] + fn parse_function_correctly() { + //Function = {"`" ~ " "* ~ Identifier ~ (" " ~ Value)* ~ " "* ~ "`"} + let name = make_random_identifier(); + let parameter_1 = make_random_identifier(); + let parameter_2 = make_random_identifier(); + let function_string = format!("`{} {} {}`", name, parameter_1, parameter_2); + + let token = short_parse(Rule::Function, &function_string); + let value = parse_function(token).unwrap(); + + let expected_value = Function { + name, + parameters: vec![parameter_1, parameter_2], + }; + + assert_eq!(value, expected_value); + } + #[test] fn parse_divert_correctly() { - //Divert = { "->" ~ " "* ~ Identifier ~ ("." ~ Identifier)? } + //Divert = { "->" ~ " "* ~ Identifier ~ ("/" ~ Identifier)? } let section = make_random_identifier(); let divert_string = format!("-> {}", section); @@ -1291,7 +1355,7 @@ mod test { let subsection = make_random_identifier(); - let divert_string = format!("-> {}.{}", section, subsection); + let divert_string = format!("-> {}/{}", section, subsection); let expected_value = NextBlock::Section(SectionKey { section, @@ -1307,16 +1371,14 @@ mod test { #[test] fn parse_modifier_correctly() { //Modifier = { "mod" ~ " "+ ~ Identifier ~ " "+ ~ Value} - let identifier = make_random_identifier(); - let new_value = rand::thread_rng().gen::().to_string(); - let modifier_string = format!("mod {} {}", identifier, new_value); + let variable = make_random_identifier(); + let added_value = rand::thread_rng().gen::().to_string(); + let modifier_string = format!("mod {} {}", variable, added_value); let expected_value = Modifier { - variable: Variable { - id: identifier, - ..Default::default() - }, - new_value, + variable, + added_value, + is_override: false, }; let token = short_parse(Rule::Modifier, &modifier_string); @@ -1325,48 +1387,6 @@ mod test { assert_eq!(modifier, expected_value); } - #[test] - fn parse_modifier_with_set_command_in_floats() { - let identifier = make_random_identifier(); - let new_value = rand::thread_rng().gen::().to_string(); - let modifier_string = format!("mod {} ={}", identifier, new_value); - - let expected_value = Modifier { - variable: Variable { - id: identifier, - ..Default::default() - }, - new_value: format!("={}", new_value), - }; - - let token = short_parse(Rule::Modifier, &modifier_string); - - let modifier = parse_modifier(token).unwrap(); - - assert_eq!(modifier, expected_value); - } - - #[test] - fn parse_modifier_with_set_command_in_integers() { - let identifier = make_random_identifier(); - let new_value = rand::thread_rng().gen::().to_string(); - let modifier_string = format!("mod {} ={}", identifier, new_value); - - let expected_value = Modifier { - variable: Variable { - id: identifier, - ..Default::default() - }, - new_value: format!("={}", new_value), - }; - - let token = short_parse(Rule::Modifier, &modifier_string); - - let modifier = parse_modifier(token).unwrap(); - - assert_eq!(modifier, expected_value); - } - #[test] fn parse_frequency_correctly() { //Frequency = { "freq" ~ " "+ ~ Condition ~ " "+ ~ ( Float | Integer ) } @@ -1374,7 +1394,7 @@ mod test { let condition_token = short_parse(Rule::Condition, &condition_string); let condition = parse_condition(condition_token).unwrap(); - let change_value: f32 = rand::thread_rng().gen(); + let change_value: i32 = rand::thread_rng().gen(); let frequency_string = format!("freq {} {}", condition_string, change_value); let expected_value = FrequencyModifier { condition, @@ -1406,7 +1426,7 @@ mod test { #[test] fn parse_condition_correctly() { /*Condition = { Identifier ~ " "* ~ (ComparisonOperator ~ " "*)? ~ Value } */ - let identifier = make_random_identifier(); + let variable = make_random_identifier(); let operator_string = COMPARISON_OPERATORS[rand::thread_rng().gen_range(0..COMPARISON_OPERATORS.len())]; @@ -1415,13 +1435,10 @@ mod test { let value: f32 = rand::thread_rng().gen(); - let condition_string = format!("{} {} {}", identifier, operator_string, value); + let condition_string = format!("{} {} {}", variable, operator_string, value); let expected_value = Condition { - variable: Variable { - id: identifier, - ..Default::default() - }, + variable, operator: operator, value: value.to_string(), }; @@ -1432,6 +1449,24 @@ mod test { assert_eq!(condition, expected_value); } + #[test] + fn parse_not_equal_condition_correctly() { + /*Condition = { Identifier ~ " "* ~ (ComparisonOperator ~ " "*)? ~ Value } */ + let variable = make_random_identifier(); + + let condition_string = format!("!{}", variable); + + let expected_value = Condition { + variable, + operator: Operator::NotEqual, + value: "true".to_string(), + }; + + let token = short_parse(Rule::Condition, &condition_string); + let condition = parse_condition(token).unwrap(); + + assert_eq!(condition, expected_value); + } #[test] fn parse_operators_correctly() { let token = short_parse(Rule::ComparisonOperator, "="); @@ -1473,46 +1508,7 @@ mod test { Operator::NotEqual ); } - /* #[test] - fn percentage_probability_parse_correctly() { - //probability = { "(" ~ " "* ~ ( percentage | float | integer ) ~ " "* ~ ")" ~ " "* } - let percentage = rand::thread_rng().gen_range(u8::MIN..u8::MAX); - let expected_value: PercentageProbability = PercentageProbability { value: percentage }; - - let chance_string = format!("({}%)", percentage); - - let token = short_parse(Rule::Chance, &chance_string); - - let probability = parse_chance(token).unwrap(); - let probability = probability - .as_any() - .downcast_ref::() - .unwrap(); - - assert_eq!(*probability, expected_value); - } - #[test] - fn float_probability_parse_correctly() { - let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); - let expected_value = FloatProbability { value: float }; - - let chance_string = format!("({})", float); - - let token = PalabritasParser::parse(Rule::Chance, &chance_string) - .expect("unsuccessful parse") - .next() - .unwrap(); - - let probability = parse_chance(token).unwrap(); - let probability = probability - .as_any() - .downcast_ref::() - .unwrap(); - - assert_eq!(*probability, expected_value); - } - */ #[test] fn parse_char_rule() { //char = { ASCII_ALPHANUMERIC | "." | "_" | "/" | "," | ";" | "'" | " " | "?" | "!" | "¿" | "¡"} @@ -1658,7 +1654,7 @@ mod test { let stitch = make_random_identifier(); assert_parse_rule(Rule::Divert, &("->".to_string() + &knot)); - assert_parse_rule(Rule::Divert, &("->".to_string() + &knot + "." + &stitch)); + assert_parse_rule(Rule::Divert, &("->".to_string() + &knot + "/" + &stitch)); } #[test] @@ -1763,12 +1759,102 @@ mod test { } */ #[test] + fn parse_section_commands_correctly() { + let identifier = make_random_snake_case(); + + let section_string = format!("# {}\n req test\n", identifier); + let token = short_parse(Rule::Section, §ion_string); + let mut blocks = Vec::default(); + let mut sections = HashMap::default(); + parse_section(token, &mut blocks, &mut sections).unwrap(); + + let section = blocks[0][0].clone(); + + let expected_value = Block::Section { + id: identifier, + settings: BlockSettings { + requirements: vec![Requirement { + condition: Condition { + variable: "test".to_string(), + operator: Operator::Equal, + value: "true".to_string(), + }, + }], + ..Default::default() + }, + }; + assert_eq!(section, expected_value); + } + #[test] + fn parse_modifier_with_set_command_in_floats() { + let variable = make_random_identifier(); + let new_value = rand::thread_rng().gen::().to_string(); + let modifier_string = format!("mod {} ={}", variable, new_value); + + let expected_value = Modifier { + variable, + added_value: format!("{}", new_value), + is_override: true, + }; + + let token = short_parse(Rule::Modifier, &modifier_string); + + let modifier = parse_modifier(token).unwrap(); + + assert_eq!(modifier, expected_value); + } + + #[test] + fn parse_modifier_with_set_command_in_integers() { + let variable = make_random_identifier(); + let new_value = rand::thread_rng().gen::().to_string(); + let modifier_string = format!("mod {} ={}", variable, new_value); + + let expected_value = Modifier { + variable, + added_value: format!("{}", new_value), + is_override: true, + }; + + let token = short_parse(Rule::Modifier, &modifier_string); + + let modifier = parse_modifier(token).unwrap(); + + assert_eq!(modifier, expected_value); + } + #[test] fn parse_database_rule() { //File = { SOI ~ (NEWLINE | BlockBlock | Knot )* ~ EOI } let unparsed_file = include_str!("../../examples/story-example.cuentitos"); assert_parse_rule(Rule::Database, &unparsed_file); } + #[test] + fn parse_unique_rule() { + //Unique = {"unique"} + assert_parse_rule(Rule::Unique, "unique"); + } + + #[test] + fn parse_tag_rule() { + //Tag = {"tag" ~ " "+ ~ Identifier} + let identifier = make_random_identifier(); + assert_parse_rule(Rule::Tag, &format!("tag {}", identifier)); + } + + #[test] + fn parse_function_rule() { + //Function = {"`" ~ " "* ~ Identifier ~ (" " ~ Value)* ~ " "* ~ "`"} + let function = make_random_identifier(); + assert_parse_rule(Rule::Function, &format!("`{}`", function)); + let parameter_1 = make_random_identifier(); + let parameter_2 = make_random_identifier(); + assert_parse_rule( + Rule::Function, + &format!("`{} {} {}`", function, parameter_1, parameter_2), + ); + } + fn assert_parse_rule(rule: Rule, input: &str) { let pair = PalabritasParser::parse(rule, input) .expect("unsuccessful parse") diff --git a/runtime/fixtures/database.mp b/runtime/fixtures/database.mp deleted file mode 100644 index a4414e2..0000000 --- a/runtime/fixtures/database.mp +++ /dev/null @@ -1,4 +0,0 @@ -happyboolhealthintegerrep_1rep_2forestchoices­A Basic EventThis event has optionsAn Option without requirements#Another option without requirementsbasic­A Basic Event5This event has no options, just title and descriptionrequirementsªConditionsThis event has conditionsAn OptionResourcehealthintegerEquals100TimeOfDayNightEqualsEventchoicesDepends -One ResultResourcehappyboolEqualstrueTimeOfDayMorningEqualsTimeOfDayNoonMutExZAnother ResultResourcehappyboolEqualsfalseTimeOfDayEveningEqualsResourcehealthintegerLessThan100Itemwooden_figureEquals1Reputationrep_1HigherThan5TimeOfDayNightEqualsEventchoicesMutExDecisiona_decisionDependsTileforestDependsmodifiers·A Basic Event with mods,This event has options with results and modsAn OptiondOne ResultItemwooden_figure1Itemwooden_figure-1Resourcehealthinteger-2Resourcehealthinteger5ResourcehappybooltrueResourcehappyboolfalseReputationrep_12Reputationrep_2-2Decisiona_decisionAchievementan_achievementresults­A Basic Event;This event has options with results, none have requirementsAn Option -One ResultZAnother ResultAnother optionZOne more Result -Yet another Result diff --git a/runtime/fixtures/state_save.mp b/runtime/fixtures/state_save.mp deleted file mode 100644 index f6236f5..0000000 --- a/runtime/fixtures/state_save.mp +++ /dev/null @@ -1,4 +0,0 @@ -healthintegerhappyboolrep_1rep_2forestchoices­A Basic EventThis event has optionsAn Option without requirements#Another option without requirementsbasic­A Basic Event5This event has no options, just title and descriptionrequirementsªConditionsThis event has conditionsAn OptionResourcehealthintegerEquals100TimeOfDayNightEqualsEventchoicesDepends -One ResultResourcehappyboolEqualstrueTimeOfDayMorningEqualsTimeOfDayNoonMutExZAnother ResultResourcehappyboolEqualsfalseTimeOfDayEveningEqualsResourcehealthintegerLessThan100Itemwooden_figureEquals1Reputationrep_1HigherThan5TimeOfDayNightEqualsEventchoicesMutExDecisiona_decisionDependsTileforestDependsmodifiers·A Basic Event with mods,This event has options with results and modsAn OptiondOne ResultItemwooden_figure1Itemwooden_figure-1Resourcehealthinteger-2Resourcehealthinteger5ResourcehappybooltrueResourcehappyboolfalseReputationrep_12Reputationrep_2-2Decisiona_decisionAchievementan_achievementresults­A Basic Event;This event has options with results, none have requirementsAn Option -One ResultZAnother ResultAnother optionZOne more Result -Yet another Result diff --git a/runtime/src/game_state.rs b/runtime/src/game_state.rs index 08c89fa..7b70a8b 100644 --- a/runtime/src/game_state.rs +++ b/runtime/src/game_state.rs @@ -1,10 +1,13 @@ -use cuentitos_common::{Config, VariableId}; +use cuentitos_common::{BlockId, Config, VariableId}; use serde::{Deserialize, Serialize}; use std::collections::HashMap; #[derive(Debug, Default, Serialize, Deserialize, PartialEq, Clone, Eq)] pub struct GameState { pub variables: HashMap, + pub current_section: Option, + pub current_subsection: Option, + pub uniques_played: Vec, } impl GameState { @@ -13,6 +16,9 @@ impl GameState { for (key, kind) in &config.variables { variables.insert(key.clone(), kind.get_default_value()); } - GameState { variables } + GameState { + variables, + ..Default::default() + } } } diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index d383ed7..8411e61 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -4,7 +4,10 @@ use std::println; use crate::GameState; use cuentitos_common::BlockId; use cuentitos_common::BlockSettings; +use cuentitos_common::Condition; use cuentitos_common::Database; +use cuentitos_common::Function; +use cuentitos_common::LanguageId; use cuentitos_common::SectionKey; use cuentitos_common::VariableKind; use rand::Rng; @@ -16,6 +19,8 @@ use serde::{Deserialize, Serialize}; pub struct Block { pub text: String, pub choices: Vec, + pub tags: Vec, + pub functions: Vec, } #[derive(Debug, Default, Serialize, Deserialize, PartialEq)] @@ -24,36 +29,70 @@ pub struct Runtime { pub block_stack: Vec, pub choices: Vec, #[serde(skip)] + pub game_state: GameState, + #[serde(skip)] rng: Option, seed: u64, - game_state: GameState, + pub current_locale: LanguageId, } impl Runtime { pub fn new(database: Database) -> Runtime { let game_state: GameState = GameState::from_config(&database.config); + let current_locale = database.i18n.default_locale.clone(); Runtime { database, game_state, + current_locale, ..Default::default() } } + pub fn set_locale(&mut self, locale: T) -> Result<(), String> + where + T: AsRef, + { + let locale = locale.as_ref().to_string(); + if self.database.i18n.has_locale(&locale) { + self.current_locale = locale; + Ok(()) + } else { + Err("Missing Locale".to_string()) + } + } + pub fn set_seed(&mut self, seed: u64) { self.seed = seed; self.rng = Some(Pcg32::seed_from_u64(seed)); } - pub fn jump_to_section(&mut self, section: String, subsection: Option) { + pub fn jump_to_section(&mut self, section: String, subsection: Option) -> bool { + let current_section = self.game_state.current_section.clone(); + if subsection.is_none() { + if let Some(current_section) = current_section { + let key = SectionKey { + section: current_section, + subsection: Some(section.clone()), + }; + if let Some(block_id) = self.database.sections.get(&key) { + self.block_stack.clear(); + return self.push_stack(*block_id); + } + } + } + let key = SectionKey { section, subsection, }; if let Some(block_id) = self.database.sections.get(&key) { self.block_stack.clear(); - self.block_stack.push(*block_id); + self.game_state.current_section = Some(key.section); + self.game_state.current_subsection = None; + self.push_stack(*block_id) } else { println!("Can't find section: {:?}", key); + false } } @@ -62,34 +101,14 @@ impl Runtime { return None; } - self.update_stack(); - - while !self.roll_chances_for_next_block() { - self.update_stack(); - } - - self.get_next_block_output() - } - - pub fn roll_chances_for_block(&mut self, id: BlockId) -> bool { - match self.get_block(id).get_settings().chance { - cuentitos_common::Chance::None => true, - cuentitos_common::Chance::Frequency(_) => true, - cuentitos_common::Chance::Probability(probability) => { - if let Some(random_number) = self.random_float() { - random_number < probability - } else { - false - } - } + if !self.update_stack() { + return None; } - } - pub fn roll_chances_for_next_block(&mut self) -> bool { - if let Some(last_block) = self.block_stack.last() { - return self.roll_chances_for_block(*last_block); + while !self.next_block_meets_requirements() { + self.pop_stack_and_find_next(); } - false + self.get_next_block_output() } pub fn pick_choice(&mut self, choice: usize) -> Option { @@ -114,7 +133,7 @@ impl Runtime { return None; } - self.block_stack.push(choices[choice]); + self.push_stack(choices[choice]); self.next_block() } @@ -193,6 +212,104 @@ impl Runtime { Err("Invalid Variable".to_string()) } + fn next_block_meets_requirements(&mut self) -> bool { + if let Some(id) = self.block_stack.last() { + self.meets_requirements(*id) + } else { + false + } + } + + fn meets_requirements(&mut self, id: BlockId) -> bool { + for requirement in &self.get_block(id).get_settings().requirements { + if !self.meets_condition(&requirement.condition) { + return false; + } + } + self.roll_chances_for_block(id) + } + + fn meets_condition(&self, condition: &Condition) -> bool { + if let Some(kind) = self.get_variable_kind(condition.variable.clone()) { + match kind { + VariableKind::Integer => { + if let Ok(current_value) = self.get_variable::<&str, i32>(&condition.variable) { + if let Ok(condition_value) = condition.value.parse::() { + match condition.operator { + cuentitos_common::Operator::Equal => return current_value == condition_value, + cuentitos_common::Operator::NotEqual => return current_value != condition_value, + cuentitos_common::Operator::GreaterThan => return current_value > condition_value, + cuentitos_common::Operator::LessThan => return current_value < condition_value, + cuentitos_common::Operator::GreaterOrEqualThan => { + return current_value >= condition_value + } + cuentitos_common::Operator::LessOrEqualThan => { + return current_value <= condition_value + } + } + } + } + } + VariableKind::Float => { + if let Ok(current_value) = self.get_variable::<&str, f32>(&condition.variable) { + if let Ok(condition_value) = condition.value.parse::() { + match condition.operator { + cuentitos_common::Operator::Equal => return current_value == condition_value, + cuentitos_common::Operator::NotEqual => return current_value != condition_value, + cuentitos_common::Operator::GreaterThan => return current_value > condition_value, + cuentitos_common::Operator::LessThan => return current_value < condition_value, + cuentitos_common::Operator::GreaterOrEqualThan => { + return current_value >= condition_value + } + cuentitos_common::Operator::LessOrEqualThan => { + return current_value <= condition_value + } + } + } + } + } + VariableKind::Bool => { + if let Ok(current_value) = self.get_variable::<&str, bool>(&condition.variable) { + if let Ok(condition_value) = condition.value.parse::() { + match condition.operator { + cuentitos_common::Operator::Equal => return current_value == condition_value, + cuentitos_common::Operator::NotEqual => return current_value != condition_value, + _ => {} + } + } + } + } + _ => { + if let Ok(current_value) = self.get_variable::<&str, String>(&condition.variable) { + if let Ok(condition_value) = condition.value.parse::() { + match condition.operator { + cuentitos_common::Operator::Equal => return current_value == condition_value, + cuentitos_common::Operator::NotEqual => return current_value != condition_value, + _ => {} + } + } + } + } + } + } + + false + } + + fn roll_chances_for_block(&mut self, id: BlockId) -> bool { + match self.get_block(id).get_settings().chance { + cuentitos_common::Chance::None => true, + cuentitos_common::Chance::Frequency(_) => true, + cuentitos_common::Chance::Probability(probability) => { + if let Some(random_number) = self.random_float() { + random_number < probability + } else { + false + } + } + } + } + fn is_valid_enum(&self, value: &String) -> bool where T: Display + std::str::FromStr + Default, @@ -252,168 +369,260 @@ impl Runtime { fn get_next_block_output(&mut self) -> Option { let id = self.block_stack.last().unwrap(); let block = self.get_block(*id); + let settings = block.get_settings(); + let tags = settings.tags.clone(); + let functions = settings.functions.clone(); if let cuentitos_common::Block::Text { id, settings: _ } = block { - println!("USE I18n!!!"); return Some(Block { - text: id.clone(), + text: self.database.i18n.get_translation(&self.current_locale, id), choices: self.get_choices_strings(), + tags, + functions, }); } None } - fn update_stack(&mut self) { - if self.block_stack.is_empty() { - self.block_stack.push(0); - let last_block_id = *self.block_stack.last().unwrap(); - let last_block = self.get_block(last_block_id).clone(); - match last_block { - cuentitos_common::Block::Section { id: _, settings: _ } => { - self.update_stack(); + fn get_frequency_with_modifier(&self, settings: &BlockSettings) -> u32 { + match settings.chance { + cuentitos_common::Chance::None => 0, + cuentitos_common::Chance::Frequency(frequency) => { + let mut final_frequency = frequency as i32; + for freq_mod in &settings.frequency_modifiers { + if self.meets_condition(&freq_mod.condition) { + final_frequency += freq_mod.value; + } + } + final_frequency as u32 + } + cuentitos_common::Chance::Probability(_) => 0, + } + } + fn apply_modifiers(&mut self) { + let id = self.block_stack.last().unwrap(); + let block = self.get_block(*id); + for modifier in block.get_settings().modifiers.clone() { + match self.get_variable_kind(&modifier.variable) { + Some(kind) => { + let result = match kind { + VariableKind::Integer => { + let value = &modifier.added_value.parse::(); + match value { + Ok(value) => { + if modifier.is_override { + self.set_variable(&modifier.variable, *value) + } else if let Ok(previous_value) = + self.get_variable::<&str, i32>(&modifier.variable) + { + self.set_variable(&modifier.variable, *value + previous_value) + } else { + self.set_variable(&modifier.variable, *value) + } + } + Err(e) => Err(e.to_string()), + } + } + VariableKind::Float => { + let value = &modifier.added_value.parse::(); + match value { + Ok(value) => { + if modifier.is_override { + self.set_variable(&modifier.variable, *value) + } else if let Ok(previous_value) = + self.get_variable::<&str, f32>(&modifier.variable) + { + self.set_variable(&modifier.variable, *value + previous_value) + } else { + self.set_variable(&modifier.variable, *value) + } + } + Err(e) => Err(e.to_string()), + } + } + VariableKind::Bool => { + let value = &modifier.added_value.parse::(); + match value { + Ok(value) => self.set_variable(&modifier.variable, *value), + Err(e) => Err(e.to_string()), + } + } + _ => self.set_variable(&modifier.variable, modifier.added_value), + }; + + if result.is_err() { + println!("{}", result.unwrap_err()); + } } - cuentitos_common::Block::Subsection { id: _, settings: _ } => { - self.update_stack(); + None => { + println!( + "Can't modify variable {:?} because it doesn't exists.", + modifier.variable + ) } - _ => {} } - return; + } + } + + fn push_stack(&mut self, id: BlockId) -> bool { + self.block_stack.push(id); + self.apply_modifiers(); + + if self.get_block(id).get_settings().unique { + if self.game_state.uniques_played.contains(&id) { + return false; + } else { + self.game_state.uniques_played.push(id); + } + } + + match self.get_block(id) { + cuentitos_common::Block::Section { id, settings: _ } => { + self.game_state.current_section = Some(id.clone()); + self.game_state.current_subsection = None; + return self.update_stack(); + } + cuentitos_common::Block::Subsection { id, settings: _ } => { + self.game_state.current_subsection = Some(id.clone()); + return self.update_stack(); + } + _ => {} + } + + true + } + + fn update_stack(&mut self) -> bool { + if self.block_stack.is_empty() { + return self.push_stack(0); } let last_block_id = self.block_stack.last().unwrap(); if last_block_id >= &self.database.blocks.len() { - return; + return false; } - let last_block = self.get_block(*last_block_id); + let settings = self.get_block(*last_block_id).get_settings().clone(); - let settings = last_block.get_settings(); if !settings.children.is_empty() { - match self.get_block(settings.children[0]) { - cuentitos_common::Block::Text { id: _, settings: _ } => { - self.block_stack.push(settings.children[0]); - return; - } - cuentitos_common::Block::Choice { id: _, settings: _ } => { - println!("Make a choice\n"); - return; - } - cuentitos_common::Block::Bucket { name: _, settings } => { - if let Some(new_block) = self.get_random_block_from_bucket(&settings.clone()) { - self.block_stack.push(new_block); - return; - } - } - _ => {} - } + return self.push_first_child_in_stack(&settings); } - self.pop_stack_and_find_next(); + if self.push_next_block() { + true + } else { + self.pop_stack_and_find_next() + } } - fn get_random_block_from_bucket(&mut self, settings: &BlockSettings) -> Option { - let mut total_frequency = 0; - for child in &settings.children { - if let cuentitos_common::Chance::Frequency(frequency) = - self.get_block(*child).get_settings().chance - { - total_frequency += frequency; + fn push_first_child_in_stack(&mut self, settings: &BlockSettings) -> bool { + match self.get_block(settings.children[0]) { + cuentitos_common::Block::Text { id: _, settings: _ } => self.push_stack(settings.children[0]), + cuentitos_common::Block::Choice { id: _, settings: _ } => { + println!("Make a choice"); + false } - } - - //TODO remove unwrap - let mut random_number = self.random_with_max(total_frequency).unwrap(); - - for child in &settings.children { - if let cuentitos_common::Chance::Frequency(frequency) = - self.get_block(*child).get_settings().chance - { - if random_number <= frequency { - return Some(*child); + cuentitos_common::Block::Bucket { name: _, settings } => { + if let Some(new_block) = self.get_random_block_from_bucket(&settings.clone()) { + if let cuentitos_common::Block::Choice { id: _, settings: _ } = self.get_block(new_block) + { + println!("Make a choice"); + false + } else { + self.push_stack(new_block) + } + } else { + false } - random_number -= frequency; } + _ => false, } - None } - fn pop_stack_and_find_next(&mut self) { + fn push_next_block(&mut self) -> bool { let last_block_id = *self.block_stack.last().unwrap(); let last_block = self.get_block(last_block_id).clone(); - let last_settings = last_block.get_settings(); match &last_settings.next { - cuentitos_common::NextBlock::None => {} + cuentitos_common::NextBlock::None => false, cuentitos_common::NextBlock::BlockId(other_id) => { - self.block_stack.pop(); - self.block_stack.push(*other_id); - return; + self.block_stack.clear(); + self.push_stack(*other_id) } cuentitos_common::NextBlock::EndOfFile => { println!("Story finished\n"); self.block_stack = vec![0]; - return; + self.game_state = GameState::from_config(&self.database.config); + true } cuentitos_common::NextBlock::Section(key) => { - self.jump_to_section(key.section.clone(), key.subsection.clone()); - self.update_stack(); + self.jump_to_section(key.section.clone(), key.subsection.clone()) } } + } + fn pop_stack_and_find_next(&mut self) -> bool { + let last_block_id = *self.block_stack.last().unwrap(); self.block_stack.pop(); - if self.block_stack.is_empty() { - self.block_stack.push(last_block_id + 1); - let last_block_id = *self.block_stack.last().unwrap(); - let last_block = self.get_block(last_block_id).clone(); - match last_block { - cuentitos_common::Block::Section { id: _, settings: _ } => { - self.update_stack(); - } - cuentitos_common::Block::Subsection { id: _, settings: _ } => { - self.update_stack(); - } - _ => {} - } - return; + return self.push_stack(last_block_id + 1); } let parent = &self.database.blocks[*self.block_stack.last().unwrap()].clone(); let parent_settings = parent.get_settings(); - let mut child_found = false; - for child in &parent_settings.children { - if child_found { - match self.get_block(*child).clone() { - cuentitos_common::Block::Text { id: _, settings: _ } => self.block_stack.push(*child), - cuentitos_common::Block::Choice { id: _, settings: _ } => { - continue; + let mut previous_block_found = false; + for sibling in &parent_settings.children { + if previous_block_found { + match self.get_block(*sibling).clone() { + cuentitos_common::Block::Text { id: _, settings: _ } => { + return self.push_stack(*sibling); } cuentitos_common::Block::Bucket { name: _, settings } => { if let Some(new_block) = self.get_random_block_from_bucket(&settings.clone()) { - self.block_stack.push(new_block); - return; + return self.push_stack(new_block); } } _ => { continue; } } - if let cuentitos_common::Block::Choice { id: _, settings: _ } = self.get_block(*child) { - continue; - } - self.block_stack.push(*child); - return; } - if *child == last_block_id { - child_found = true; + if *sibling == last_block_id { + previous_block_found = true; } } self.pop_stack_and_find_next() } + fn get_random_block_from_bucket(&mut self, settings: &BlockSettings) -> Option { + let mut total_frequency = 0; + for child in &settings.children { + if self.meets_requirements(*child) { + let child_settings = self.get_block(*child).get_settings(); + let frequency = self.get_frequency_with_modifier(child_settings); + total_frequency += frequency; + } + } + + //TODO remove unwrap + let mut random_number = self.random_with_max(total_frequency).unwrap(); + + for child in &settings.children { + if self.meets_requirements(*child) { + let child_settings = self.get_block(*child).get_settings(); + let frequency = self.get_frequency_with_modifier(child_settings); + if random_number <= frequency { + return Some(*child); + } + random_number -= frequency; + } + } + None + } + fn get_block(&self, id: BlockId) -> &cuentitos_common::Block { &self.database.blocks[id] } @@ -421,10 +630,9 @@ impl Runtime { fn get_choices_strings(&mut self) -> Vec { self.update_choices(); let mut choices_strings = Vec::default(); - println!("USE I18n!!!"); for choice in &self.choices { if let cuentitos_common::Block::Choice { id, settings: _ } = self.get_block(*choice) { - choices_strings.push(id.clone()); + choices_strings.push(self.database.i18n.get_translation(&self.current_locale, id)); } } @@ -447,7 +655,7 @@ impl Runtime { if *child < self.database.blocks.len() { match self.get_block(*child) { cuentitos_common::Block::Choice { id: _, settings: _ } => { - if self.roll_chances_for_block(*child) { + if self.meets_requirements(*child) { self.choices.push(*child) } } @@ -473,15 +681,14 @@ mod test { use std::{collections::HashMap, fmt::Display, str::FromStr, vec}; use crate::Runtime; - use cuentitos_common::{Block, BlockSettings, Config, Database, SectionKey, VariableKind}; + use cuentitos_common::{ + Block, BlockSettings, Chance, Condition, Config, Database, FrequencyModifier, Function, I18n, + LanguageDb, LanguageId, Modifier, NextBlock, Requirement, SectionKey, VariableKind, + }; #[test] fn new_runtime_works_correctly() { - let database = Database { - blocks: vec![Block::default()], - sections: HashMap::default(), - config: Config::default(), - }; + let database = Database::default(); let runtime = Runtime::new(database.clone()); assert_eq!(runtime.database, database); } @@ -540,7 +747,7 @@ mod test { let database = Database { blocks: vec![section_1, section_2, subsection, text_1, text_2], sections, - config: Config::default(), + ..Default::default() }; let mut runtime = Runtime { @@ -548,10 +755,8 @@ mod test { ..Default::default() }; runtime.jump_to_section("section_2".to_string(), Some("subsection".to_string())); - runtime.update_stack(); assert_eq!(runtime.block_stack, vec![2, 4]); runtime.jump_to_section("section_1".to_string(), None); - runtime.update_stack(); assert_eq!(runtime.block_stack, vec![0, 3]); } @@ -584,8 +789,7 @@ mod test { let database = Database { blocks: vec![parent.clone(), choice_1, choice_2, child_text], - sections: HashMap::default(), - config: Config::default(), + ..Default::default() }; let mut runtime = Runtime { @@ -625,14 +829,29 @@ mod test { settings: BlockSettings::default(), }; + let mut en: LanguageDb = HashMap::default(); + en.insert("a".to_string(), "a".to_string()); + en.insert("b".to_string(), "b".to_string()); + en.insert("c".to_string(), "c".to_string()); + let mut strings: HashMap = HashMap::default(); + strings.insert("en".to_string(), en); + + let i18n = I18n { + locales: vec!["en".to_string()], + default_locale: "en".to_string(), + strings, + }; + let database = Database { blocks: vec![parent.clone(), choice_1, choice_2, child_text], - sections: HashMap::default(), - config: Config::default(), + i18n, + ..Default::default() }; + let mut runtime = Runtime { database, block_stack: vec![0], + current_locale: "en".to_string(), ..Default::default() }; let choices = runtime.get_choices_strings(); @@ -662,8 +881,7 @@ mod test { let database = Database { blocks: vec![parent.clone(), child_1.clone(), child_2.clone()], - sections: HashMap::default(), - config: Config::default(), + ..Default::default() }; let mut runtime = Runtime { @@ -715,8 +933,7 @@ mod test { child_2.clone(), child_3.clone(), ], - sections: HashMap::default(), - config: Config::default(), + ..Default::default() }; let mut runtime = Runtime { @@ -754,15 +971,29 @@ mod test { settings: BlockSettings::default(), }; + let mut en: LanguageDb = HashMap::default(); + en.insert("1".to_string(), "1".to_string()); + en.insert("2".to_string(), "2".to_string()); + en.insert("parent".to_string(), "parent".to_string()); + let mut strings: HashMap = HashMap::default(); + strings.insert("en".to_string(), en); + + let i18n = I18n { + locales: vec!["en".to_string()], + default_locale: "en".to_string(), + strings, + }; + let database = Database { blocks: vec![parent.clone(), choice_1.clone(), choice_2], - sections: HashMap::default(), - config: Config::default(), + i18n, + ..Default::default() }; let mut runtime = Runtime { database, block_stack: vec![0], + current_locale: "en".to_string(), ..Default::default() }; @@ -770,6 +1001,7 @@ mod test { let expected_output = Some(crate::Block { text: "parent".to_string(), choices: vec!["1".to_string(), "2".to_string()], + ..Default::default() }); assert_eq!(output, expected_output); @@ -797,14 +1029,28 @@ mod test { settings: BlockSettings::default(), }; + let mut en: LanguageDb = HashMap::default(); + en.insert("1".to_string(), "1".to_string()); + en.insert("2".to_string(), "2".to_string()); + en.insert("parent".to_string(), "parent".to_string()); + let mut strings: HashMap = HashMap::default(); + strings.insert("en".to_string(), en); + + let i18n = I18n { + locales: vec!["en".to_string()], + default_locale: "en".to_string(), + strings, + }; + let database = Database { blocks: vec![parent.clone(), choice_1.clone(), choice_2.clone()], - sections: HashMap::default(), - config: Config::default(), + i18n, + ..Default::default() }; let mut runtime = Runtime { database, + current_locale: "en".to_string(), ..Default::default() }; @@ -812,6 +1058,7 @@ mod test { let expected_output = Some(crate::Block { text: "parent".to_string(), choices: vec!["1".to_string(), "2".to_string()], + ..Default::default() }); assert_eq!(output, expected_output); @@ -858,8 +1105,7 @@ mod test { let database = Database { blocks: vec![bucket, text_1, text_2], - sections: HashMap::default(), - config: Config::default(), + ..Default::default() }; let mut runtime = Runtime { database, @@ -874,7 +1120,7 @@ mod test { .get_random_block_from_bucket(&bucket_settings) .unwrap(); assert_eq!(id, 1); - runtime.block_stack.push(1); + runtime.push_stack(1); let bucket_settings = runtime.get_block(0).get_settings().clone(); let id = runtime .get_random_block_from_bucket(&bucket_settings) @@ -888,12 +1134,16 @@ mod test { let variable_kind = VariableKind::Integer; variables.insert("health".to_string(), variable_kind.clone()); - let config = Config { variables }; + let config = Config { + variables, + ..Default::default() + }; let database = Database { blocks: Vec::default(), sections: HashMap::default(), config, + ..Default::default() }; let mut runtime = Runtime::new(database); @@ -908,51 +1158,359 @@ mod test { } #[test] - fn float_variables_work() { + fn integer_modifiers_work() { let mut variables = HashMap::default(); - let variable_kind = VariableKind::Float; - variables.insert("speed".to_string(), variable_kind.clone()); - let config = Config { variables }; + let variable_kind = VariableKind::Integer; + variables.insert("health".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let modifier = Modifier { + variable: "health".to_string(), + added_value: "100".to_string(), + is_override: false, + }; + let settings = BlockSettings { + modifiers: vec![modifier], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; let database = Database { - blocks: Vec::default(), - sections: HashMap::default(), + blocks: vec![block], config, + ..Default::default() }; let mut runtime = Runtime::new(database); - - let current_speed: f32 = runtime.get_variable("speed").unwrap(); + runtime.block_stack = vec![0]; + let current_health: i32 = runtime.get_variable("health").unwrap(); let expected_value = variable_kind.get_default_value().parse().unwrap(); - assert_eq!(current_speed, expected_value); - - runtime.set_variable("speed", 1.5 as f32).unwrap(); - let current_speed: f32 = runtime.get_variable("speed").unwrap(); - assert_eq!(current_speed, 1.5); + assert_eq!(current_health, expected_value); + runtime.apply_modifiers(); + let current_health: i32 = runtime.get_variable("health").unwrap(); + assert_eq!(current_health, expected_value + 100); + runtime.apply_modifiers(); + let current_health: i32 = runtime.get_variable("health").unwrap(); + assert_eq!(current_health, expected_value + 200); } #[test] - fn bool_variables_work() { + fn float_modifiers_work() { let mut variables = HashMap::default(); - let variable_kind = VariableKind::Bool; - variables.insert("bike".to_string(), variable_kind.clone()); - let config = Config { variables }; + let variable_kind = VariableKind::Float; + variables.insert("speed".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let modifier = Modifier { + variable: "speed".to_string(), + added_value: "1.5".to_string(), + is_override: false, + }; + let settings = BlockSettings { + modifiers: vec![modifier], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; let database = Database { - blocks: Vec::default(), - sections: HashMap::default(), + blocks: vec![block], config, + ..Default::default() }; let mut runtime = Runtime::new(database); - - let current_bike: bool = runtime.get_variable("bike").unwrap(); + runtime.block_stack = vec![0]; + let current_speed: f32 = runtime.get_variable("speed").unwrap(); let expected_value = variable_kind.get_default_value().parse().unwrap(); - assert_eq!(current_bike, expected_value); + assert_eq!(current_speed, expected_value); + runtime.apply_modifiers(); + let current_speed: f32 = runtime.get_variable("speed").unwrap(); + assert_eq!(current_speed, expected_value + 1.5); + runtime.apply_modifiers(); + let current_speed: f32 = runtime.get_variable("speed").unwrap(); + assert_eq!(current_speed, expected_value + 3.); + } - runtime.set_variable("bike", true).unwrap(); + #[test] + fn integer_override_modifiers_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Integer; + variables.insert("health".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let modifier = Modifier { + variable: "health".to_string(), + added_value: "100".to_string(), + is_override: true, + }; + let settings = BlockSettings { + modifiers: vec![modifier], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let current_health: i32 = runtime.get_variable("health").unwrap(); + let expected_value = variable_kind.get_default_value().parse().unwrap(); + assert_eq!(current_health, expected_value); + runtime.apply_modifiers(); + let current_health: i32 = runtime.get_variable("health").unwrap(); + assert_eq!(current_health, 100); + runtime.apply_modifiers(); + let current_health: i32 = runtime.get_variable("health").unwrap(); + assert_eq!(current_health, 100); + } + + #[test] + fn float_override_modifiers_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Float; + variables.insert("speed".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let modifier = Modifier { + variable: "speed".to_string(), + added_value: "1.5".to_string(), + is_override: true, + }; + let settings = BlockSettings { + modifiers: vec![modifier], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let current_speed: f32 = runtime.get_variable("speed").unwrap(); + let expected_value = variable_kind.get_default_value().parse().unwrap(); + assert_eq!(current_speed, expected_value); + runtime.apply_modifiers(); + let current_speed: f32 = runtime.get_variable("speed").unwrap(); + assert_eq!(current_speed, 1.5); + runtime.apply_modifiers(); + let current_speed: f32 = runtime.get_variable("speed").unwrap(); + assert_eq!(current_speed, 1.5); + } + + #[test] + fn bool_modifiers_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Bool; + variables.insert("bike".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let modifier = Modifier { + variable: "bike".to_string(), + added_value: "true".to_string(), + is_override: false, + }; + let settings = BlockSettings { + modifiers: vec![modifier], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let current_bike: bool = runtime.get_variable("bike").unwrap(); + let expected_value = variable_kind.get_default_value().parse().unwrap(); + assert_eq!(current_bike, expected_value); + runtime.apply_modifiers(); + let current_bike: bool = runtime.get_variable("bike").unwrap(); + assert_eq!(current_bike, true); + } + + #[test] + fn string_modifiers_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::String; + variables.insert("message".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let modifier = Modifier { + variable: "message".to_string(), + added_value: "hello".to_string(), + is_override: false, + }; + let settings = BlockSettings { + modifiers: vec![modifier], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let current_message: String = runtime.get_variable("message").unwrap(); + let expected_value = variable_kind.get_default_value(); + assert_eq!(current_message, expected_value); + + runtime.apply_modifiers(); + let current_message: String = runtime.get_variable("message").unwrap(); + assert_eq!(current_message, "hello".to_string()); + } + + #[test] + fn enum_modifiers_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Enum(vec!["Day".to_string(), "Night".to_string()]); + variables.insert("time_of_day".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let modifier = Modifier { + variable: "time_of_day".to_string(), + added_value: "Night".to_string(), + is_override: false, + }; + let settings = BlockSettings { + modifiers: vec![modifier], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + + let current_time_of_day: TimeOfDay = runtime.get_variable("time_of_day").unwrap(); + let expected_value = variable_kind.get_default_value().parse().unwrap(); + assert_eq!(current_time_of_day, expected_value); + + runtime.apply_modifiers(); + let current_time_of_day: TimeOfDay = runtime.get_variable("time_of_day").unwrap(); + assert_eq!(current_time_of_day, TimeOfDay::Night); + } + + #[test] + fn float_variables_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Float; + variables.insert("speed".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let database = Database { + blocks: Vec::default(), + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + + let current_speed: f32 = runtime.get_variable("speed").unwrap(); + let expected_value = variable_kind.get_default_value().parse().unwrap(); + assert_eq!(current_speed, expected_value); + + runtime.set_variable("speed", 1.5 as f32).unwrap(); + let current_speed: f32 = runtime.get_variable("speed").unwrap(); + assert_eq!(current_speed, 1.5); + } + + #[test] + fn bool_variables_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Bool; + variables.insert("bike".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let database = Database { + blocks: Vec::default(), + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + + let current_bike: bool = runtime.get_variable("bike").unwrap(); + let expected_value = variable_kind.get_default_value().parse().unwrap(); + assert_eq!(current_bike, expected_value); + + runtime.set_variable("bike", true).unwrap(); let current_speed: bool = runtime.get_variable("bike").unwrap(); assert_eq!(current_speed, true); } @@ -963,12 +1521,15 @@ mod test { let variable_kind = VariableKind::String; variables.insert("message".to_string(), variable_kind.clone()); - let config = Config { variables }; + let config = Config { + variables, + ..Default::default() + }; let database = Database { blocks: Vec::default(), - sections: HashMap::default(), config, + ..Default::default() }; let mut runtime = Runtime::new(database); @@ -990,12 +1551,15 @@ mod test { let variable_kind = VariableKind::Enum(vec!["Day".to_string(), "Night".to_string()]); variables.insert("time_of_day".to_string(), variable_kind.clone()); - let config = Config { variables }; + let config = Config { + variables, + ..Default::default() + }; let database = Database { blocks: Vec::default(), - sections: HashMap::default(), config, + ..Default::default() }; let mut runtime = Runtime::new(database); @@ -1009,85 +1573,970 @@ mod test { .unwrap(); let current_time_of_day: TimeOfDay = runtime.get_variable("time_of_day").unwrap(); assert_eq!(current_time_of_day, TimeOfDay::Night); - - #[derive(Debug, Default, PartialEq, Eq)] - enum TimeOfDay { - #[default] - Day, - Night, - } - - #[derive(Debug, PartialEq, Eq)] - struct TestError; - - impl FromStr for TimeOfDay { - type Err = TestError; - - fn from_str(s: &str) -> Result { - match s { - "Day" => Ok(TimeOfDay::Day), - "Night" => Ok(TimeOfDay::Night), - _ => Err(TestError), - } - } - } - impl Display for TimeOfDay { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{:?}", self) - } - } } #[test] - fn roll_chances_for_next_block_works_correctly() { - let settings = BlockSettings { + fn integer_equal_requirements_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Integer; + variables.insert("health".to_string(), variable_kind.clone()); + let config = Config { + variables, ..Default::default() }; - let text_with_no_chances = Block::Text { + let requirement = Requirement { + condition: Condition { + variable: "health".to_string(), + operator: cuentitos_common::Operator::Equal, + value: "100".to_string(), + }, + }; + let settings = BlockSettings { + requirements: vec![requirement], + ..Default::default() + }; + let block = Block::Text { id: String::default(), settings, }; - let settings = BlockSettings { - chance: cuentitos_common::Chance::Probability(1.), + let database = Database { + blocks: vec![block], + config, ..Default::default() }; - let text_with_100_chances = Block::Text { - id: String::default(), - settings, + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + runtime.set_variable("health", 100).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + runtime.set_variable("health", 150).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + } + + #[test] + fn integer_greater_or_equal_requirements_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Integer; + variables.insert("health".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() }; + let requirement = Requirement { + condition: Condition { + variable: "health".to_string(), + operator: cuentitos_common::Operator::GreaterOrEqualThan, + value: "100".to_string(), + }, + }; let settings = BlockSettings { - chance: cuentitos_common::Chance::Probability(0.), + requirements: vec![requirement], ..Default::default() }; - - let text_with_0_chances = Block::Text { + let block = Block::Text { id: String::default(), settings, }; let database = Database { - blocks: vec![ - text_with_no_chances, - text_with_100_chances, - text_with_0_chances, - ], - sections: HashMap::default(), - config: Config::default(), - }; - let mut runtime = Runtime { - database, - block_stack: vec![0], + blocks: vec![block], + config, ..Default::default() }; - assert_eq!(runtime.roll_chances_for_next_block(), true); - runtime.update_stack(); - assert_eq!(runtime.roll_chances_for_next_block(), true); - runtime.update_stack(); - assert_eq!(runtime.roll_chances_for_next_block(), false); + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + runtime.set_variable("health", 100).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + runtime.set_variable("health", 150).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + } + + #[test] + fn integer_greater_requirements_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Integer; + variables.insert("health".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let requirement = Requirement { + condition: Condition { + variable: "health".to_string(), + operator: cuentitos_common::Operator::GreaterThan, + value: "100".to_string(), + }, + }; + let settings = BlockSettings { + requirements: vec![requirement], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + runtime.set_variable("health", 100).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + runtime.set_variable("health", 150).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + } + + #[test] + fn integer_less_or_equal_requirements_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Integer; + variables.insert("health".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let requirement = Requirement { + condition: Condition { + variable: "health".to_string(), + operator: cuentitos_common::Operator::LessOrEqualThan, + value: "100".to_string(), + }, + }; + let settings = BlockSettings { + requirements: vec![requirement], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + runtime.set_variable("health", 100).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + runtime.set_variable("health", 150).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + } + #[test] + fn integer_less_requirements_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Integer; + variables.insert("health".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let requirement = Requirement { + condition: Condition { + variable: "health".to_string(), + operator: cuentitos_common::Operator::LessThan, + value: "100".to_string(), + }, + }; + let settings = BlockSettings { + requirements: vec![requirement], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + runtime.set_variable("health", 100).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + runtime.set_variable("health", 150).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + } + #[test] + fn integer_not_equal_requirements_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Integer; + variables.insert("health".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let requirement = Requirement { + condition: Condition { + variable: "health".to_string(), + operator: cuentitos_common::Operator::NotEqual, + value: "100".to_string(), + }, + }; + let settings = BlockSettings { + requirements: vec![requirement], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + runtime.set_variable("health", 100).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + runtime.set_variable("health", 150).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + } + #[test] + fn float_equal_requirements_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Float; + variables.insert("speed".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let requirement = Requirement { + condition: Condition { + variable: "speed".to_string(), + operator: cuentitos_common::Operator::Equal, + value: "1.5".to_string(), + }, + }; + let settings = BlockSettings { + requirements: vec![requirement], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + runtime.set_variable("speed", 1.5 as f32).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + runtime.set_variable("speed", 2. as f32).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + } + + #[test] + fn float_greater_or_equal_requirements_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Float; + variables.insert("speed".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let requirement = Requirement { + condition: Condition { + variable: "speed".to_string(), + operator: cuentitos_common::Operator::GreaterOrEqualThan, + value: "1.5".to_string(), + }, + }; + let settings = BlockSettings { + requirements: vec![requirement], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + runtime.set_variable("speed", 1.5 as f32).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + runtime.set_variable("speed", 2. as f32).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + } + + #[test] + fn float_greater_requirements_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Float; + variables.insert("speed".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let requirement = Requirement { + condition: Condition { + variable: "speed".to_string(), + operator: cuentitos_common::Operator::GreaterThan, + value: "1.5".to_string(), + }, + }; + let settings = BlockSettings { + requirements: vec![requirement], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + runtime.set_variable("speed", 1.5 as f32).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + runtime.set_variable("speed", 2. as f32).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + } + + #[test] + fn float_less_or_equal_requirements_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Float; + variables.insert("speed".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let requirement = Requirement { + condition: Condition { + variable: "speed".to_string(), + operator: cuentitos_common::Operator::LessOrEqualThan, + value: "1.5".to_string(), + }, + }; + let settings = BlockSettings { + requirements: vec![requirement], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + runtime.set_variable("speed", 1.5 as f32).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + runtime.set_variable("speed", 2. as f32).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + } + #[test] + fn float_less_requirements_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Float; + variables.insert("speed".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let requirement = Requirement { + condition: Condition { + variable: "speed".to_string(), + operator: cuentitos_common::Operator::LessThan, + value: "1.5".to_string(), + }, + }; + let settings = BlockSettings { + requirements: vec![requirement], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + runtime.set_variable("speed", 1.5 as f32).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + runtime.set_variable("speed", 2. as f32).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + } + #[test] + fn float_not_equal_requirements_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Float; + variables.insert("speed".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let requirement = Requirement { + condition: Condition { + variable: "speed".to_string(), + operator: cuentitos_common::Operator::NotEqual, + value: "1.5".to_string(), + }, + }; + let settings = BlockSettings { + requirements: vec![requirement], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + runtime.set_variable("speed", 1.5 as f32).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + runtime.set_variable("speed", 2. as f32).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + } + + #[test] + fn bool_equal_requirements_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Bool; + variables.insert("bike".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let requirement = Requirement { + condition: Condition { + variable: "bike".to_string(), + operator: cuentitos_common::Operator::Equal, + value: "true".to_string(), + }, + }; + let settings = BlockSettings { + requirements: vec![requirement], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + runtime.set_variable("bike", true).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + } + + #[test] + fn bool_not_equal_requirements_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Bool; + variables.insert("bike".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let requirement = Requirement { + condition: Condition { + variable: "bike".to_string(), + operator: cuentitos_common::Operator::NotEqual, + value: "true".to_string(), + }, + }; + let settings = BlockSettings { + requirements: vec![requirement], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + runtime.set_variable("bike", true).unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + } + + #[test] + fn string_equal_requirements_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::String; + variables.insert("message".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let requirement = Requirement { + condition: Condition { + variable: "message".to_string(), + operator: cuentitos_common::Operator::Equal, + value: "hello".to_string(), + }, + }; + let settings = BlockSettings { + requirements: vec![requirement], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + runtime + .set_variable("message", "hello".to_string()) + .unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + } + + #[test] + fn string_not_equal_requirements_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::String; + variables.insert("message".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let requirement = Requirement { + condition: Condition { + variable: "message".to_string(), + operator: cuentitos_common::Operator::NotEqual, + value: "hello".to_string(), + }, + }; + let settings = BlockSettings { + requirements: vec![requirement], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + runtime + .set_variable("message", "hello".to_string()) + .unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + } + + #[test] + fn enum_equal_requirements_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Enum(vec!["Day".to_string(), "Night".to_string()]); + variables.insert("time_of_day".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let requirement = Requirement { + condition: Condition { + variable: "time_of_day".to_string(), + operator: cuentitos_common::Operator::Equal, + value: "Night".to_string(), + }, + }; + let settings = BlockSettings { + requirements: vec![requirement], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + runtime + .set_variable("time_of_day", TimeOfDay::Night) + .unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + } + + #[test] + fn enum_not_equal_requirements_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Enum(vec!["Day".to_string(), "Night".to_string()]); + variables.insert("time_of_day".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let requirement = Requirement { + condition: Condition { + variable: "time_of_day".to_string(), + operator: cuentitos_common::Operator::NotEqual, + value: "Night".to_string(), + }, + }; + let settings = BlockSettings { + requirements: vec![requirement], + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let meets_requirement = runtime.meets_requirements(0); + assert!(meets_requirement); + runtime + .set_variable("time_of_day", TimeOfDay::Night) + .unwrap(); + let meets_requirement = runtime.meets_requirements(0); + assert!(!meets_requirement); + } + + #[test] + fn frequency_modifiers_work() { + let mut variables = HashMap::default(); + + let variable_kind = VariableKind::Bool; + variables.insert("bike".to_string(), variable_kind.clone()); + let config = Config { + variables, + ..Default::default() + }; + + let freq_mod = FrequencyModifier { + condition: Condition { + variable: "bike".to_string(), + operator: cuentitos_common::Operator::Equal, + value: "true".to_string(), + }, + value: -100, + }; + let settings = BlockSettings { + frequency_modifiers: vec![freq_mod], + chance: Chance::Frequency(100), + ..Default::default() + }; + let block = Block::Text { + id: String::default(), + settings: settings.clone(), + }; + + let database = Database { + blocks: vec![block], + config, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.block_stack = vec![0]; + let frequency_with_modifier = runtime.get_frequency_with_modifier(&settings); + assert_eq!(frequency_with_modifier, 100); + runtime.set_variable("bike", true).unwrap(); + let frequency_with_modifier = runtime.get_frequency_with_modifier(&settings); + assert_eq!(frequency_with_modifier, 0); + } + + #[test] + fn unique_only_plays_once() { + let section = Block::Section { + id: "section".to_string(), + settings: BlockSettings { + children: vec![1, 2], + ..Default::default() + }, + }; + + let mut sections: HashMap = HashMap::default(); + sections.insert( + SectionKey { + section: "section".to_string(), + subsection: None, + }, + 0, + ); + + let settings = BlockSettings { + unique: true, + ..Default::default() + }; + let text_1 = Block::Text { + id: String::default(), + settings, + }; + + let settings = BlockSettings { + next: NextBlock::Section(SectionKey { + section: "section".to_string(), + subsection: None, + }), + ..Default::default() + }; + let text_2 = Block::Text { + id: String::default(), + settings, + }; + + let database = Database { + blocks: vec![section, text_1, text_2], + sections, + ..Default::default() + }; + + let mut runtime = Runtime::new(database); + runtime.update_stack(); + assert_eq!(1, *runtime.block_stack.last().unwrap()); + runtime.update_stack(); + assert_eq!(2, *runtime.block_stack.last().unwrap()); + runtime.update_stack(); + assert_eq!(2, *runtime.block_stack.last().unwrap()); + } + + #[test] + fn tags_work() { + let tags = vec!["a_tag".to_string()]; + let text = Block::Text { + id: String::default(), + settings: BlockSettings { + tags: tags.clone(), + ..Default::default() + }, + }; + + let database = Database { + blocks: vec![text], + ..Default::default() + }; + let mut runtime = Runtime::new(database); + let output_tags = runtime.next_block().unwrap().tags; + assert_eq!(tags, output_tags); + } + + #[test] + fn functions_work() { + let functions = vec![Function { + name: "a_function".to_string(), + parameters: vec!["parameter".to_string()], + }]; + + let text = Block::Text { + id: String::default(), + settings: BlockSettings { + functions: functions.clone(), + ..Default::default() + }, + }; + + let database = Database { + blocks: vec![text], + ..Default::default() + }; + let mut runtime = Runtime::new(database); + let output_functions = runtime.next_block().unwrap().functions; + assert_eq!(functions, output_functions); + } + + #[derive(Debug, Default, PartialEq, Eq)] + enum TimeOfDay { + #[default] + Day, + Night, + } + + #[derive(Debug, PartialEq, Eq)] + struct TestError; + + impl FromStr for TimeOfDay { + type Err = TestError; + + fn from_str(s: &str) -> Result { + match s { + "Day" => Ok(TimeOfDay::Day), + "Night" => Ok(TimeOfDay::Night), + _ => Err(TestError), + } + } + } + impl Display for TimeOfDay { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{:?}", self) + } } } From ebcf90666e1106eb48b63f83eab69536b1c15543 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Thu, 29 Jun 2023 17:24:02 -0300 Subject: [PATCH 19/94] divert fix --- cli/src/console.rs | 2 +- compiler/en.csv | 78 +++++++++++++++++++++--------------------- runtime/src/runtime.rs | 46 +++++++++++++------------ 3 files changed, 64 insertions(+), 62 deletions(-) diff --git a/cli/src/console.rs b/cli/src/console.rs index ed83068..7edfc3f 100644 --- a/cli/src/console.rs +++ b/cli/src/console.rs @@ -81,7 +81,7 @@ impl Console { runtime.jump_to_section(section.to_string(), None); } - if let Some(output_text) = runtime.next_block() { + if let Some(output_text) = runtime.current_block() { print_output_text(output_text); } } diff --git a/compiler/en.csv b/compiler/en.csv index f0830bc..9785ad0 100644 --- a/compiler/en.csv +++ b/compiler/en.csv @@ -1,51 +1,51 @@ Id,Text -A good cup of tea is always good to regulate after the sensory overload of the city.,A good cup of tea is always good to regulate after the sensory overload of the city. -"I nod when the musician looks my way, to show I really enjoy the music.","I nod when the musician looks my way, to show I really enjoy the music." -Go to the Farmer's Market,Go to the Farmer's Market -I make some tea,I make some tea -You start to think about all the stuff you need to do tomorrow.,You start to think about all the stuff you need to do tomorrow. -"You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction.","You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction." -You decide to focus on the now...,You decide to focus on the now... +I call my parents,I call my parents "As you enter the peaceful sanctuary of your room, you take a deep breath, relieved to have a quiet space where you can recharge and prepare for the challenges ahead.","As you enter the peaceful sanctuary of your room, you take a deep breath, relieved to have a quiet space where you can recharge and prepare for the challenges ahead." -That makes you feel overwhelmed.,That makes you feel overwhelmed. -You get to the farmer's market. It's very early and some stands are still being set up.,You get to the farmer's market. It's very early and some stands are still being set up. -You sit in the couch to enjoy your tea. Drink half of the cup and fall asleep.,You sit in the couch to enjoy your tea. Drink half of the cup and fall asleep. -"As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses.","As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses." -"You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts.","You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts." -"You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer.","You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer." -"The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers.","The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers." -"I keep walking, even if the murals look good, the darkness of the alley is unsettling.","I keep walking, even if the murals look good, the darkness of the alley is unsettling." -You decide it's now time to go to sleep.,You decide it's now time to go to sleep. "You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape.","You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape." -You get to the museum door. You watch through the window. It seems crowded.,You get to the museum door. You watch through the window. It seems crowded. -I take a walk through a nearby park to relax and acclimate to the city.,I take a walk through a nearby park to relax and acclimate to the city. "As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment.","As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment." -I go to bed,I go to bed -"The phone rings twice, and dad picks up. You have a good chat.","The phone rings twice, and dad picks up. You have a good chat." +A good cup of tea is always good to regulate after the sensory overload of the city.,A good cup of tea is always good to regulate after the sensory overload of the city. "This unexpected oasis of visual tranquility provides a respite from the chaos of the city, inspiring you to explore more of the urban canvas and the stories it holds.","This unexpected oasis of visual tranquility provides a respite from the chaos of the city, inspiring you to explore more of the urban canvas and the stories it holds." +"Wandering the market, you stumble upon a hidden alley adorned with vibrant street art.","Wandering the market, you stumble upon a hidden alley adorned with vibrant street art." +"At the bustling street market, you discover a food stand offering mouthwa tering delicacies.","At the bustling street market, you discover a food stand offering mouthwa tering delicacies." +"You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer.","You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer." +"You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction.","You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction." +"The phone rings twice, and dad picks up. You have a good chat.","The phone rings twice, and dad picks up. You have a good chat." +You decide to focus on the now...,You decide to focus on the now... +You wake up feeling refreshed. Let's see what this day brings.,You wake up feeling refreshed. Let's see what this day brings. +Go to the Farmer's Market,Go to the Farmer's Market +"The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise.","The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise." You feel they're too busy to bother them with questions.,You feel they're too busy to bother them with questions. -"You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations.","You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations." -This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city.,This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. -"You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand.","You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand." -"A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise.","A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise." -The moonlight gives the room a peaceful tone.,The moonlight gives the room a peaceful tone. -I call my parents,I call my parents -"Feeling mentally and physically exhausted from the day's adventures, you decide it's time to head back to your hotel.","Feeling mentally and physically exhausted from the day's adventures, you decide it's time to head back to your hotel." +"As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses.","As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses." +I take a walk through a nearby park to relax and acclimate to the city.,I take a walk through a nearby park to relax and acclimate to the city. +"Each colorful mural tells a different story, capturing your imagination and sparking your creativity.","Each colorful mural tells a different story, capturing your imagination and sparking your creativity." +"The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers.","The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers." +You start to think about all the stuff you need to do tomorrow.,You start to think about all the stuff you need to do tomorrow. +"Feeling depleted of spoons, you go right back to bed.","Feeling depleted of spoons, you go right back to bed." "The skyline reaches for the clouds, and the sounds of traffic and people surround you.","The skyline reaches for the clouds, and the sounds of traffic and people surround you." +I go to bed,I go to bed +"The phone rings twice, and mom picks up. You have a good chat.","The phone rings twice, and mom picks up. You have a good chat." +"I nod when the musician looks my way, to show I really enjoy the music.","I nod when the musician looks my way, to show I really enjoy the music." +"You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts.","You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts." +You decide it's now time to go to sleep.,You decide it's now time to go to sleep. +"As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician.","As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician." "You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them.","You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them." -"Wandering the market, you stumble upon a hidden alley adorned with vibrant street art.","Wandering the market, you stumble upon a hidden alley adorned with vibrant street art." -"The phone rings ten times, nobody is at home.","The phone rings ten times, nobody is at home." -I grab my phone and take pictures of the murals.,I grab my phone and take pictures of the murals. +You get to the farmer's market. It's very early and some stands are still being set up.,You get to the farmer's market. It's very early and some stands are still being set up. The musician smiles and nods thanking you.,The musician smiles and nods thanking you. +I grab my phone and take pictures of the murals.,I grab my phone and take pictures of the murals. +"I keep walking, even if the murals look good, the darkness of the alley is unsettling.","I keep walking, even if the murals look good, the darkness of the alley is unsettling." +"Feeling mentally and physically exhausted from the day's adventures, you decide it's time to head back to your hotel.","Feeling mentally and physically exhausted from the day's adventures, you decide it's time to head back to your hotel." +Explore a museum,Explore a museum "You've just arrived in the bustling city, full of excitement and anticipation for your new job.","You've just arrived in the bustling city, full of excitement and anticipation for your new job." -"The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise.","The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise." -I leave two dollars to the artist.,I leave two dollars to the artist. +You get to the museum door. You watch through the window. It seems crowded.,You get to the museum door. You watch through the window. It seems crowded. The sun shines bright through the window.,The sun shines bright through the window. -You wake up feeling refreshed. Let's see what this day brings.,You wake up feeling refreshed. Let's see what this day brings. +That makes you feel overwhelmed.,That makes you feel overwhelmed. +I leave two dollars to the artist.,I leave two dollars to the artist. +"You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand.","You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand." +The moonlight gives the room a peaceful tone.,The moonlight gives the room a peaceful tone. I visit a popular street market to experience the city's unique flavors and energy.,I visit a popular street market to experience the city's unique flavors and energy. -"The phone rings twice, and mom picks up. You have a good chat.","The phone rings twice, and mom picks up. You have a good chat." -"At the bustling street market, you discover a food stand offering mouthwa tering delicacies.","At the bustling street market, you discover a food stand offering mouthwa tering delicacies." -"Each colorful mural tells a different story, capturing your imagination and sparking your creativity.","Each colorful mural tells a different story, capturing your imagination and sparking your creativity." -"Feeling depleted of spoons, you go right back to bed.","Feeling depleted of spoons, you go right back to bed." -Explore a museum,Explore a museum -"As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician.","As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician." +"The phone rings ten times, nobody is at home.","The phone rings ten times, nobody is at home." +This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city.,This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. +I make some tea,I make some tea +"You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations.","You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations." +You sit in the couch to enjoy your tea. Drink half of the cup and fall asleep.,You sit in the couch to enjoy your tea. Drink half of the cup and fall asleep. +"A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise.","A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise." diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index 8411e61..0bf428b 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -108,7 +108,25 @@ impl Runtime { while !self.next_block_meets_requirements() { self.pop_stack_and_find_next(); } - self.get_next_block_output() + self.current_block() + } + + pub fn current_block(&mut self) -> Option { + let id = self.block_stack.last().unwrap(); + let block = self.get_block(*id); + let settings = block.get_settings(); + let tags = settings.tags.clone(); + let functions = settings.functions.clone(); + if let cuentitos_common::Block::Text { id, settings: _ } = block { + return Some(Block { + text: self.database.i18n.get_translation(&self.current_locale, id), + choices: self.get_choices_strings(), + tags, + functions, + }); + } + + None } pub fn pick_choice(&mut self, choice: usize) -> Option { @@ -366,24 +384,6 @@ impl Runtime { Some(num) } - fn get_next_block_output(&mut self) -> Option { - let id = self.block_stack.last().unwrap(); - let block = self.get_block(*id); - let settings = block.get_settings(); - let tags = settings.tags.clone(); - let functions = settings.functions.clone(); - if let cuentitos_common::Block::Text { id, settings: _ } = block { - return Some(Block { - text: self.database.i18n.get_translation(&self.current_locale, id), - choices: self.get_choices_strings(), - tags, - functions, - }); - } - - None - } - fn get_frequency_with_modifier(&self, settings: &BlockSettings) -> u32 { match settings.chance { cuentitos_common::Chance::None => 0, @@ -467,6 +467,7 @@ impl Runtime { fn push_stack(&mut self, id: BlockId) -> bool { self.block_stack.push(id); self.apply_modifiers(); + self.update_choices(); if self.get_block(id).get_settings().unique { if self.game_state.uniques_played.contains(&id) { @@ -628,7 +629,6 @@ impl Runtime { } fn get_choices_strings(&mut self) -> Vec { - self.update_choices(); let mut choices_strings = Vec::default(); for choice in &self.choices { if let cuentitos_common::Block::Choice { id, settings: _ } = self.get_block(*choice) { @@ -854,6 +854,7 @@ mod test { current_locale: "en".to_string(), ..Default::default() }; + runtime.update_choices(); let choices = runtime.get_choices_strings(); let expected_result = vec!["a".to_string(), "b".to_string()]; assert_eq!(choices, expected_result); @@ -951,7 +952,7 @@ mod test { } #[test] - fn get_next_block_output_works_correctly() { + fn current_block_works_correctly() { let settings = BlockSettings { children: vec![1, 2], ..Default::default() @@ -997,7 +998,8 @@ mod test { ..Default::default() }; - let output = runtime.get_next_block_output(); + runtime.update_choices(); + let output = runtime.current_block(); let expected_output = Some(crate::Block { text: "parent".to_string(), choices: vec!["1".to_string(), "2".to_string()], From f43aa63635e6967e3af52521c2e9f1a47930d2cc Mon Sep 17 00:00:00 2001 From: loomstyla Date: Thu, 29 Jun 2023 19:49:15 -0300 Subject: [PATCH 20/94] Feedback cli + bug fixes --- cli/src/console.rs | 29 ++++++++++++++--- palabritas/src/parser.rs | 68 ---------------------------------------- runtime/src/runtime.rs | 37 ++++++++++++++++------ 3 files changed, 51 insertions(+), 83 deletions(-) diff --git a/cli/src/console.rs b/cli/src/console.rs index 7edfc3f..7fa92f8 100644 --- a/cli/src/console.rs +++ b/cli/src/console.rs @@ -52,6 +52,8 @@ impl Console { "" => { if let Some(output_text) = runtime.next_block() { print_output_text(output_text); + } else if let Some(output_text) = runtime.current_block() { + print_output_text(output_text); } } "sections" => { @@ -75,14 +77,18 @@ impl Console { let substr: String = str.chars().skip(2).collect(); let mut splitted = substr.split('/'); if let Some(section) = splitted.next() { + let jump_ok; if let Some(subsection) = splitted.next() { - runtime.jump_to_section(section.to_string(), Some(subsection.to_string())); + jump_ok = + runtime.jump_to_section(section.to_string(), Some(subsection.to_string())); } else { - runtime.jump_to_section(section.to_string(), None); + jump_ok = runtime.jump_to_section(section.to_string(), None); } - if let Some(output_text) = runtime.current_block() { - print_output_text(output_text); + if jump_ok { + if let Some(output_text) = runtime.current_block() { + print_output_text(output_text); + } } } } else if let Ok(choice) = str.parse::() { @@ -93,6 +99,8 @@ impl Console { if let Some(output_text) = runtime.pick_choice(choice - 1) { print_output_text(output_text); } + } else { + println!("Unkown command: {}", str); } } } @@ -107,20 +115,31 @@ fn set_variable_value(variable: &str, value: &str, runtime: &mut Runtime) { VariableKind::Integer => { let int: i32 = value.parse().unwrap(); runtime.set_variable(variable, int).unwrap(); + let result: i32 = runtime.get_variable(variable).unwrap(); + println!("{} = {}", variable, result); } VariableKind::Float => { let float: f32 = value.parse().unwrap(); runtime.set_variable(variable, float).unwrap(); + let result: f32 = runtime.get_variable(variable).unwrap(); + println!("{} = {}", variable, result); } VariableKind::Bool => { let bool: bool = value.parse().unwrap(); runtime.set_variable(variable, bool).unwrap(); + let result: bool = runtime.get_variable(variable).unwrap(); + println!("{} = {}", variable, result); } VariableKind::String => { runtime.set_variable(variable, value.to_string()).unwrap(); + let result: String = runtime.get_variable(variable).unwrap(); + println!("{} = {}", variable, result); } VariableKind::Enum(_) => match runtime.set_variable(variable, value.to_string()) { - Ok(_) => {} + Ok(_) => { + let result: String = runtime.get_variable(variable).unwrap(); + println!("{} = {}", variable, result); + } Err(err) => println!("{}", err), }, } diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index ffa4df9..02fdb09 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -872,74 +872,6 @@ mod test { //TODO: compare with fixture } - /*#[test] - fn parse_blocks_correctly() { - /* - - BlockBlock = { - (NamedBucket | Choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* - } - - */ - - let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); - let chance_string = format!("({})", float); - - let string = make_random_string(); - let child_string = make_random_string(); - - let text_string = format!("{} {}", chance_string, string); - - let chance_token = short_parse(Rule::Chance, &chance_string); - let probability = parse_chance(chance_token); - - let knot = make_random_identifier(); - let divert_string = format!("\n -> {}", knot); - - let blocks_string = format!("{}{}\n\t{}", text_string, divert_string, child_string); - - let expected_divert = Divert { - knot: knot.clone(), - stitch: None, - }; - - let child_blocks = Block { - text: child_string, - blocks_type: BlockType::Text, - ..Default::default() - }; - - let expected_blocks = Block { - text: string, - probability: probability, - blocks_type: BlockType::Text, - divert: vec![expected_divert], - blocks: vec![child_blocks], - ..Default::default() - }; - - let blocks_token = short_parse(Rule::BlockBlock, &blocks_string); - let blocks = parse_blocks(blocks_token).unwrap(); - - assert_eq!(blocks, expected_blocks); - } - #[test] - fn get_blocks_from_new_block_correctly() { - let string = make_random_string(); - let new_block_string = format!("\t{}", string); - - let expected_blocks = Block { - text: string, - ..Default::default() - }; - - let new_block_token = short_parse(Rule::NewBlock, &new_block_string); - let blocks_token = get_blocks_from_new_block(new_block_token); - let blocks = parse_blocks(blocks_token[0].clone()).unwrap(); - - assert_eq!(blocks, expected_blocks); - }*/ - #[test] fn buckets_chance_must_sum_1() { let snake_case = make_random_snake_case(); diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index 0bf428b..00d2a4e 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -507,7 +507,9 @@ impl Runtime { let settings = self.get_block(*last_block_id).get_settings().clone(); if !settings.children.is_empty() { - return self.push_first_child_in_stack(&settings); + if let Some(result) = self.push_next_child_in_stack(&settings, 0) { + return result; + } } if self.push_next_block() { @@ -517,27 +519,42 @@ impl Runtime { } } - fn push_first_child_in_stack(&mut self, settings: &BlockSettings) -> bool { - match self.get_block(settings.children[0]) { - cuentitos_common::Block::Text { id: _, settings: _ } => self.push_stack(settings.children[0]), + fn push_next_child_in_stack( + &mut self, + settings: &BlockSettings, + next_child: usize, + ) -> Option { + if next_child >= settings.children.len() { + return None; + } + + let id = settings.children[next_child]; + match self.get_block(id) { + cuentitos_common::Block::Text { id: _, settings: _ } => { + Some(self.push_stack(settings.children[0])) + } cuentitos_common::Block::Choice { id: _, settings: _ } => { - println!("Make a choice"); - false + if self.choices.contains(&id) { + println!("Make a choice"); + Some(false) + } else { + self.push_next_child_in_stack(settings, next_child + 1) + } } cuentitos_common::Block::Bucket { name: _, settings } => { if let Some(new_block) = self.get_random_block_from_bucket(&settings.clone()) { if let cuentitos_common::Block::Choice { id: _, settings: _ } = self.get_block(new_block) { println!("Make a choice"); - false + Some(false) } else { - self.push_stack(new_block) + Some(self.push_stack(new_block)) } } else { - false + Some(false) } } - _ => false, + _ => Some(false), } } From 953e5dafd8015c6642aa48a8624cfce0e7df50ad Mon Sep 17 00:00:00 2001 From: loomstyla Date: Fri, 30 Jun 2023 10:42:50 -0300 Subject: [PATCH 21/94] Modifier fix --- common/src/condition.rs | 4 +- common/src/frequency.rs | 1 + common/src/lib.rs | 8 +- common/src/modifier.rs | 14 +- compiler/en.csv | 78 +++---- examples/story-example.cuentitos | 18 +- palabritas/src/error.rs | 4 + palabritas/src/palabritas.pest | 9 +- palabritas/src/parser.rs | 286 +++++++++++++++--------- runtime/src/runtime.rs | 367 ++++++++++++++----------------- 10 files changed, 426 insertions(+), 363 deletions(-) diff --git a/common/src/condition.rs b/common/src/condition.rs index 594fea4..e85fc4f 100644 --- a/common/src/condition.rs +++ b/common/src/condition.rs @@ -3,7 +3,7 @@ use crate::VariableId; use serde::{Deserialize, Serialize}; #[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] -pub enum Operator { +pub enum ComparisonOperator { #[default] Equal, NotEqual, @@ -16,7 +16,7 @@ pub enum Operator { #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)] pub struct Condition { pub variable: VariableId, - pub operator: Operator, + pub operator: ComparisonOperator, pub value: String, } diff --git a/common/src/frequency.rs b/common/src/frequency.rs index 58c49b3..546049f 100644 --- a/common/src/frequency.rs +++ b/common/src/frequency.rs @@ -1,4 +1,5 @@ use crate::Condition; + use serde::{Deserialize, Serialize}; #[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)] diff --git a/common/src/lib.rs b/common/src/lib.rs index e3c070a..8a05c66 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -7,8 +7,8 @@ pub use block::*; mod requirement; pub use requirement::*; -mod condition; -pub use condition::*; +pub mod condition; +pub use condition::Condition; mod variable; pub use variable::*; @@ -16,8 +16,8 @@ pub use variable::*; mod frequency; pub use frequency::*; -mod modifier; -pub use modifier::*; +pub mod modifier; +pub use modifier::Modifier; mod config; pub use config::*; diff --git a/common/src/modifier.rs b/common/src/modifier.rs index 2ae5865..d4bf47b 100644 --- a/common/src/modifier.rs +++ b/common/src/modifier.rs @@ -5,6 +5,16 @@ use crate::VariableId; #[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] pub struct Modifier { pub variable: VariableId, - pub added_value: String, - pub is_override: bool, + pub value: String, + pub operator: ModifierOperator, +} + +#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] +pub enum ModifierOperator { + #[default] + Set, + Add, + Substract, + Multiply, + Divide, } diff --git a/compiler/en.csv b/compiler/en.csv index 9785ad0..defef69 100644 --- a/compiler/en.csv +++ b/compiler/en.csv @@ -1,51 +1,51 @@ Id,Text -I call my parents,I call my parents -"As you enter the peaceful sanctuary of your room, you take a deep breath, relieved to have a quiet space where you can recharge and prepare for the challenges ahead.","As you enter the peaceful sanctuary of your room, you take a deep breath, relieved to have a quiet space where you can recharge and prepare for the challenges ahead." -"You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape.","You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape." -"As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment.","As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment." -A good cup of tea is always good to regulate after the sensory overload of the city.,A good cup of tea is always good to regulate after the sensory overload of the city. -"This unexpected oasis of visual tranquility provides a respite from the chaos of the city, inspiring you to explore more of the urban canvas and the stories it holds.","This unexpected oasis of visual tranquility provides a respite from the chaos of the city, inspiring you to explore more of the urban canvas and the stories it holds." -"Wandering the market, you stumble upon a hidden alley adorned with vibrant street art.","Wandering the market, you stumble upon a hidden alley adorned with vibrant street art." -"At the bustling street market, you discover a food stand offering mouthwa tering delicacies.","At the bustling street market, you discover a food stand offering mouthwa tering delicacies." -"You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer.","You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer." -"You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction.","You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction." -"The phone rings twice, and dad picks up. You have a good chat.","The phone rings twice, and dad picks up. You have a good chat." +"As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses.","As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses." +"I keep walking, even if the murals look good, the darkness of the alley is unsettling.","I keep walking, even if the murals look good, the darkness of the alley is unsettling." +"You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand.","You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand." +You get to the museum door. You watch through the window. It seems crowded.,You get to the museum door. You watch through the window. It seems crowded. +Explore a museum,Explore a museum You decide to focus on the now...,You decide to focus on the now... -You wake up feeling refreshed. Let's see what this day brings.,You wake up feeling refreshed. Let's see what this day brings. -Go to the Farmer's Market,Go to the Farmer's Market -"The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise.","The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise." You feel they're too busy to bother them with questions.,You feel they're too busy to bother them with questions. -"As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses.","As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses." -I take a walk through a nearby park to relax and acclimate to the city.,I take a walk through a nearby park to relax and acclimate to the city. -"Each colorful mural tells a different story, capturing your imagination and sparking your creativity.","Each colorful mural tells a different story, capturing your imagination and sparking your creativity." -"The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers.","The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers." -You start to think about all the stuff you need to do tomorrow.,You start to think about all the stuff you need to do tomorrow. "Feeling depleted of spoons, you go right back to bed.","Feeling depleted of spoons, you go right back to bed." -"The skyline reaches for the clouds, and the sounds of traffic and people surround you.","The skyline reaches for the clouds, and the sounds of traffic and people surround you." +Go to the Farmer's Market,Go to the Farmer's Market +"The phone rings twice, and dad picks up. You have a good chat.","The phone rings twice, and dad picks up. You have a good chat." +I make some tea,I make some tea +The moonlight gives the room a peaceful tone.,The moonlight gives the room a peaceful tone. +"Wandering the market, you stumble upon a hidden alley adorned with vibrant street art.","Wandering the market, you stumble upon a hidden alley adorned with vibrant street art." +"Each colorful mural tells a different story, capturing your imagination and sparking your creativity.","Each colorful mural tells a different story, capturing your imagination and sparking your creativity." +"As you enter the peaceful sanctuary of your room, you take a deep breath, relieved to have a quiet space where you can recharge and prepare for the challenges ahead.","As you enter the peaceful sanctuary of your room, you take a deep breath, relieved to have a quiet space where you can recharge and prepare for the challenges ahead." +I call my parents,I call my parents +"A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise.","A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise." I go to bed,I go to bed -"The phone rings twice, and mom picks up. You have a good chat.","The phone rings twice, and mom picks up. You have a good chat." -"I nod when the musician looks my way, to show I really enjoy the music.","I nod when the musician looks my way, to show I really enjoy the music." -"You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts.","You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts." -You decide it's now time to go to sleep.,You decide it's now time to go to sleep. -"As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician.","As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician." -"You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them.","You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them." -You get to the farmer's market. It's very early and some stands are still being set up.,You get to the farmer's market. It's very early and some stands are still being set up. -The musician smiles and nods thanking you.,The musician smiles and nods thanking you. -I grab my phone and take pictures of the murals.,I grab my phone and take pictures of the murals. -"I keep walking, even if the murals look good, the darkness of the alley is unsettling.","I keep walking, even if the murals look good, the darkness of the alley is unsettling." "Feeling mentally and physically exhausted from the day's adventures, you decide it's time to head back to your hotel.","Feeling mentally and physically exhausted from the day's adventures, you decide it's time to head back to your hotel." -Explore a museum,Explore a museum +I take a walk through a nearby park to relax and acclimate to the city.,I take a walk through a nearby park to relax and acclimate to the city. "You've just arrived in the bustling city, full of excitement and anticipation for your new job.","You've just arrived in the bustling city, full of excitement and anticipation for your new job." -You get to the museum door. You watch through the window. It seems crowded.,You get to the museum door. You watch through the window. It seems crowded. +"This unexpected oasis of visual tranquility provides a respite from the chaos of the city, inspiring you to explore more of the urban canvas and the stories it holds.","This unexpected oasis of visual tranquility provides a respite from the chaos of the city, inspiring you to explore more of the urban canvas and the stories it holds." +"You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer.","You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer." +You start to think about all the stuff you need to do tomorrow.,You start to think about all the stuff you need to do tomorrow. +"At the bustling street market, you discover a food stand offering mouthwa tering delicacies.","At the bustling street market, you discover a food stand offering mouthwa tering delicacies." The sun shines bright through the window.,The sun shines bright through the window. -That makes you feel overwhelmed.,That makes you feel overwhelmed. +"The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers.","The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers." I leave two dollars to the artist.,I leave two dollars to the artist. -"You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand.","You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand." -The moonlight gives the room a peaceful tone.,The moonlight gives the room a peaceful tone. +This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city.,This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. +You sit in the couch to enjoy your tea. Drink half of the cup and fall asleep.,You sit in the couch to enjoy your tea. Drink half of the cup and fall asleep. +You decide it's now time to go to sleep.,You decide it's now time to go to sleep. +You wake up feeling refreshed. Let's see what this day brings.,You wake up feeling refreshed. Let's see what this day brings. +You get to the farmer's market. It's very early and some stands are still being set up.,You get to the farmer's market. It's very early and some stands are still being set up. +A good cup of tea is always good to regulate after the sensory overload of the city.,A good cup of tea is always good to regulate after the sensory overload of the city. +"You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape.","You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape." +That makes you feel overwhelmed.,That makes you feel overwhelmed. +"You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them.","You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them." +"I nod when the musician looks my way, to show I really enjoy the music.","I nod when the musician looks my way, to show I really enjoy the music." +"The skyline reaches for the clouds, and the sounds of traffic and people surround you.","The skyline reaches for the clouds, and the sounds of traffic and people surround you." +"As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment.","As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment." I visit a popular street market to experience the city's unique flavors and energy.,I visit a popular street market to experience the city's unique flavors and energy. +"As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician.","As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician." +"You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts.","You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts." +"The phone rings twice, and mom picks up. You have a good chat.","The phone rings twice, and mom picks up. You have a good chat." "The phone rings ten times, nobody is at home.","The phone rings ten times, nobody is at home." -This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city.,This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. -I make some tea,I make some tea +"The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise.","The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise." "You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations.","You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations." -You sit in the couch to enjoy your tea. Drink half of the cup and fall asleep.,You sit in the couch to enjoy your tea. Drink half of the cup and fall asleep. -"A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise.","A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise." +"You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction.","You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction." +The musician smiles and nods thanking you.,The musician smiles and nods thanking you. +I grab my phone and take pictures of the murals.,I grab my phone and take pictures of the murals. diff --git a/examples/story-example.cuentitos b/examples/story-example.cuentitos index 5d2c026..e6204d7 100644 --- a/examples/story-example.cuentitos +++ b/examples/story-example.cuentitos @@ -50,29 +50,29 @@ You decide to focus on the now... req item tea A good cup of tea is always good to regulate after the sensory overload of the city. You sit in the couch to enjoy your tea. Drink half of the cup and fall asleep. - mod energy 5 - mod time -7.5 + set energy +5 + set time -7.5 -> second_day * I go to bed Feeling depleted of spoons, you go right back to bed. - mod energy 10 - mod time -7.5 + set energy +10 + set time -7.5 -> second_day * I call my parents req energy >10 [call] (30) The phone rings twice, and dad picks up. You have a good chat. req energy>20 - mod energy -10 + set energy -10 (10) The phone rings twice, and mom picks up. You have a good chat. req energy>20 freq time_of_day morning 100 - mod energy -10 + set energy -10 (40) The phone rings ten times, nobody is at home. - mod energy 10 + set energy +10 You decide it's now time to go to sleep. - mod energy 10 - mod time -7.5 + set energy +10 + set time -7.5 -> second_day # second_day diff --git a/palabritas/src/error.rs b/palabritas/src/error.rs index 8380ee4..650d895 100644 --- a/palabritas/src/error.rs +++ b/palabritas/src/error.rs @@ -24,6 +24,7 @@ pub enum PalabritasError { expected_rule: Rule, rule_found: Rule, }, + DivisionByZero(ErrorInfo), } #[derive(Debug, PartialEq, Eq)] @@ -89,6 +90,9 @@ impl Display for PalabritasError { PalabritasError::PathDoesntExist(path) => { write!(f, "Path provided doesn't exist: {:?}", path) } + PalabritasError::DivisionByZero(path) => { + write!(f, "Can't divide by zero: {:?}", path) + } } } } diff --git a/palabritas/src/palabritas.pest b/palabritas/src/palabritas.pest index 68421c1..d93fe11 100644 --- a/palabritas/src/palabritas.pest +++ b/palabritas/src/palabritas.pest @@ -7,16 +7,17 @@ Indentation = { " " } String = @{ Char+ } ComparisonOperator = { "!=" | "=" | "<=" | ">=" | "<" | ">" | "!" } NotOperator = {"!"} +ModifierOperator = {"+" | "-" | "*" | "/" | "="} SnakeCase = { ASCII_ALPHA_LOWER ~ (ASCII_ALPHA_LOWER | "_" | ASCII_DIGIT)* } Identifier = { (ASCII_ALPHA | "_" ) ~ (ASCII_ALPHANUMERIC | "_")* } Value = { Identifier | "="? ~ Float | Percentage | "="? ~ Integer } Condition = { ( Identifier ~ " "* ~ ( ComparisonOperator ~ " "* )? ~ Value? ) | ( NotOperator? ~ " "* ~ Identifier ~ " "*) } -Requirement = { "req" ~ " "+ ~ Condition } -Frequency = { "freq" ~ " "+ ~ Condition ~ " "+ ~ ( Float | Integer ) } -Modifier = { "mod" ~ " "+ ~ Identifier ~ " "+ ~ Value } -Divert = { "->" ~ " "* ~ Identifier ~ ("/" ~ Identifier)? } +Requirement = { "req" ~ " "+ ~ Condition ~ " "* } +Frequency = { "freq" ~ " "+ ~ Condition ~ " "+ ~ ( Float | Integer ) ~ " "* } +Modifier = { "set" ~ " "+ ~ ( (Identifier ~ " "+ ~ ModifierOperator? ~ " "* ~ Value) | (NotOperator? ~ " "* ~ Identifier) ) ~ " "* } +Divert = { "->" ~ " "* ~ Identifier ~ ("/" ~ Identifier)? ~ " "*} Function = {"`" ~ " "* ~ Identifier ~ (" " ~ Value)* ~ " "* ~ "`"} Tag = {"tag" ~ " "+ ~ Identifier} Unique = {"unique"} diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index 02fdb09..a4bd7d2 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -2,9 +2,11 @@ extern crate pest; use std::collections::HashMap; use std::path::Path; +use cuentitos_common::condition::ComparisonOperator; +use cuentitos_common::modifier::ModifierOperator; use cuentitos_common::{ Block, BlockId, BlockSettings, Chance, Condition, Config, Database, FrequencyModifier, Function, - Modifier, NextBlock, Operator, Requirement, SectionKey, + Modifier, NextBlock, Requirement, SectionKey, }; use pest::{iterators::Pair, Parser}; @@ -145,7 +147,7 @@ fn parse_section( id = inner_token.as_str().to_string(); } Rule::Command => { - add_command_to_settings(inner_token, &mut settings); + add_command_to_settings(inner_token, &mut settings)?; } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { @@ -198,7 +200,7 @@ fn parse_subsection( id = inner_token.as_str().to_string(); } Rule::Command => { - add_command_to_settings(inner_token, &mut settings); + add_command_to_settings(inner_token, &mut settings)?; } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { @@ -253,7 +255,7 @@ fn parse_block( } } Rule::Command => { - add_command_to_block(inner_token, &mut block); + add_command_to_block(inner_token, &mut block)?; } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { @@ -572,10 +574,11 @@ fn parse_text(token: Pair) -> Option { Some(Block::Text { id: text, settings }) } -fn add_command_to_settings(token: Pair, settings: &mut BlockSettings) { - if token.as_rule() != Rule::Command { - return; - } +fn add_command_to_settings( + token: Pair, + settings: &mut BlockSettings, +) -> Result<(), PalabritasError> { + match_rule(&token, Rule::Command)?; for inner_token in token.into_inner() { match inner_token.as_rule() { @@ -591,9 +594,8 @@ fn add_command_to_settings(token: Pair, settings: &mut BlockSettings) { } } Rule::Modifier => { - if let Some(modifier) = parse_modifier(inner_token) { - settings.modifiers.push(modifier); - } + let modifier = parse_modifier(inner_token)?; + settings.modifiers.push(modifier); } Rule::Divert => { if let Some(divert) = parse_divert(inner_token) { @@ -616,10 +618,12 @@ fn add_command_to_settings(token: Pair, settings: &mut BlockSettings) { _ => {} } } + + Ok(()) } -fn add_command_to_block(token: Pair, block: &mut Block) { +fn add_command_to_block(token: Pair, block: &mut Block) -> Result<(), PalabritasError> { let settings = block.get_settings_mut(); - add_command_to_settings(token, settings); + add_command_to_settings(token, settings) } fn parse_function(token: Pair) -> Option { @@ -680,12 +684,11 @@ fn parse_divert(token: Pair) -> Option { }) } -fn parse_modifier(token: Pair) -> Option { - if token.as_rule() != Rule::Modifier { - return None; - } - //Modifier = { "mod" ~ " "+ ~ Identifier ~ " "+ ~ Value} - +fn parse_modifier(token: Pair) -> Result { + match_rule(&token, Rule::Modifier)?; + //Modifier = { "set" ~ " "+ ~ ( (Identifier ~ " "+ ~ ModifierOperator? ~ Value) | (NotOperator? ~ " "* ~ Identifier) ) ~ " "* } + let line = token.line_col().0; + let string = token.as_str().to_string(); let mut modifier = Modifier::default(); for inner_token in token.into_inner() { match inner_token.as_rule() { @@ -694,19 +697,45 @@ fn parse_modifier(token: Pair) -> Option { } Rule::Value => { - if inner_token.as_str().starts_with('=') { - modifier.is_override = true; - modifier.added_value = inner_token.as_str()[1..].to_string(); - } else { - modifier.added_value = inner_token.as_str().to_string(); + modifier.value = inner_token.as_str().to_string(); + } + + Rule::ModifierOperator => { + if let Some(operator) = parse_modifier_operator(inner_token) { + modifier.operator = operator; } } + + Rule::NotOperator => { + modifier.value = false.to_string(); + } + _ => {} } } - Some(modifier) + + if modifier.operator == ModifierOperator::Divide && modifier.value == *"0" { + Err(PalabritasError::DivisionByZero(ErrorInfo { line, string })) + } else { + Ok(modifier) + } } +fn parse_modifier_operator(token: Pair) -> Option { + //ModifierOperator = {"+" | "-" | "*" | "/" | "="} + if token.as_rule() != Rule::ModifierOperator { + return None; + } + + match token.as_str() { + "+" => Some(ModifierOperator::Add), + "-" => Some(ModifierOperator::Substract), + "*" => Some(ModifierOperator::Multiply), + "/" => Some(ModifierOperator::Divide), + "=" => Some(ModifierOperator::Set), + _ => None, + } +} fn parse_frequency(token: Pair) -> Option { if token.as_rule() != Rule::Frequency { return None; @@ -766,7 +795,7 @@ fn parse_condition(token: Pair) -> Option { } } Rule::NotOperator => { - condition.operator = Operator::NotEqual; + condition.operator = ComparisonOperator::NotEqual; } Rule::Value => { condition.value = inner_token.as_str().to_string(); @@ -777,19 +806,19 @@ fn parse_condition(token: Pair) -> Option { Some(condition) } -fn parse_comparison_operator(token: Pair) -> Option { +fn parse_comparison_operator(token: Pair) -> Option { if token.as_rule() != Rule::ComparisonOperator { return None; } match token.as_str() { - "!=" => Some(Operator::NotEqual), - "!" => Some(Operator::NotEqual), - "=" => Some(Operator::Equal), - "<=" => Some(Operator::LessOrEqualThan), - ">=" => Some(Operator::GreaterOrEqualThan), - "<" => Some(Operator::LessThan), - ">" => Some(Operator::GreaterThan), + "!=" => Some(ComparisonOperator::NotEqual), + "!" => Some(ComparisonOperator::NotEqual), + "=" => Some(ComparisonOperator::Equal), + "<=" => Some(ComparisonOperator::LessOrEqualThan), + ">=" => Some(ComparisonOperator::GreaterOrEqualThan), + "<" => Some(ComparisonOperator::LessThan), + ">" => Some(ComparisonOperator::GreaterThan), _ => None, } } @@ -844,7 +873,7 @@ mod test { use crate::parser::*; use cuentitos_common::{ - Block, BlockSettings, Condition, FrequencyModifier, Modifier, Operator, Requirement, + Block, BlockSettings, Condition, FrequencyModifier, Modifier, Requirement, }; use pest::iterators::Pair; use rand::distributions::Alphanumeric; @@ -854,6 +883,8 @@ mod test { const COMPARISON_OPERATORS: [&str; 7] = ["=", "!=", "<", ">", "<=", ">=", "!"]; + const MODIFIER_OPERATORS: [&str; 5] = ["+", "-", "*", "/", "="]; + const INDENTATIONS: [&str; 1] = [" "]; const RESERVED_KEYWORDS: [&str; 9] = ["req", "freq", "mod", "->", "`", "*", "#", "##", "//"]; @@ -1166,19 +1197,19 @@ mod test { //Modifier let variable = make_random_identifier(); - let added_value = rand::thread_rng().gen::().to_string(); - let modifier_string = format!("\n mod {} {}", variable, added_value); + let value = rand::thread_rng().gen::().to_string(); + let modifier_string = format!("\n set {} {}", variable, value); let expected_modifier = Modifier { variable, - added_value, - is_override: false, + value, + operator: ModifierOperator::Set, }; block_settings.modifiers.push(expected_modifier); let token = short_parse(Rule::Command, &modifier_string); - add_command_to_block(token, &mut block); + add_command_to_block(token, &mut block).unwrap(); //Divert let section = make_random_identifier(); @@ -1190,13 +1221,13 @@ mod test { }); let token = short_parse(Rule::Command, &divert_string); - add_command_to_block(token, &mut block); + add_command_to_block(token, &mut block).unwrap(); //Unique block_settings.unique = true; let token = short_parse(Rule::Command, "\n unique"); - add_command_to_block(token, &mut block); + add_command_to_block(token, &mut block).unwrap(); //Frequency @@ -1214,7 +1245,7 @@ mod test { block_settings.frequency_modifiers.push(expected_frequency); let token = short_parse(Rule::Command, &frequency_string); - add_command_to_block(token, &mut block); + add_command_to_block(token, &mut block).unwrap(); //Requirement @@ -1228,7 +1259,7 @@ mod test { block_settings.requirements.push(expected_requirement); let token = short_parse(Rule::Command, &requirement_string); - add_command_to_block(token, &mut block); + add_command_to_block(token, &mut block).unwrap(); let expected_block = Block::Text { id: text_id, @@ -1250,6 +1281,23 @@ mod test { assert_eq!(value, identifier); } + #[test] + fn division_by_zero_throws_error() { + let identifier = make_random_identifier(); + let tag_string = format!("set {} / 0", identifier); + + let token = short_parse(Rule::Modifier, &tag_string); + let value = parse_modifier(token).unwrap_err(); + + assert_eq!( + value, + PalabritasError::DivisionByZero(ErrorInfo { + line: 1, + string: tag_string + }) + ); + } + #[test] fn parse_function_correctly() { //Function = {"`" ~ " "* ~ Identifier ~ (" " ~ Value)* ~ " "* ~ "`"} @@ -1302,15 +1350,15 @@ mod test { #[test] fn parse_modifier_correctly() { - //Modifier = { "mod" ~ " "+ ~ Identifier ~ " "+ ~ Value} + //Modifier = { "set" ~ " "+ ~ ( (Identifier ~ " "+ ~ Value) | (NotOperator? ~ " "* ~ Identifier) ) ~ " "* } let variable = make_random_identifier(); - let added_value = rand::thread_rng().gen::().to_string(); - let modifier_string = format!("mod {} {}", variable, added_value); + let value = rand::thread_rng().gen::().to_string(); + let modifier_string = format!("set {} {}", variable, value); let expected_value = Modifier { variable, - added_value, - is_override: false, + value, + operator: ModifierOperator::Set, }; let token = short_parse(Rule::Modifier, &modifier_string); @@ -1381,6 +1429,62 @@ mod test { assert_eq!(condition, expected_value); } + #[test] + fn parse_comparison_operator_correctly() { + //ComparisonOperator = { "!=" | "=" | "<=" | ">=" | "<" | ">" | "!" } + let operator_token = short_parse(Rule::ComparisonOperator, "!="); + let operator = parse_comparison_operator(operator_token).unwrap(); + assert_eq!(operator, ComparisonOperator::NotEqual); + + let operator_token = short_parse(Rule::ComparisonOperator, "="); + let operator = parse_comparison_operator(operator_token).unwrap(); + assert_eq!(operator, ComparisonOperator::Equal); + + let operator_token = short_parse(Rule::ComparisonOperator, "<="); + let operator = parse_comparison_operator(operator_token).unwrap(); + assert_eq!(operator, ComparisonOperator::LessOrEqualThan); + + let operator_token = short_parse(Rule::ComparisonOperator, ">="); + let operator = parse_comparison_operator(operator_token).unwrap(); + assert_eq!(operator, ComparisonOperator::GreaterOrEqualThan); + + let operator_token = short_parse(Rule::ComparisonOperator, "<"); + let operator = parse_comparison_operator(operator_token).unwrap(); + assert_eq!(operator, ComparisonOperator::LessThan); + + let operator_token = short_parse(Rule::ComparisonOperator, ">"); + let operator = parse_comparison_operator(operator_token).unwrap(); + assert_eq!(operator, ComparisonOperator::GreaterThan); + + let operator_token = short_parse(Rule::ComparisonOperator, "!"); + let operator = parse_comparison_operator(operator_token).unwrap(); + assert_eq!(operator, ComparisonOperator::NotEqual); + } + + #[test] + fn parse_modifier_operator_correctly() { + //ModifierOperator = {"+" | "-" | "*" | "/" | "="} + let operator_token = short_parse(Rule::ModifierOperator, "+"); + let operator = parse_modifier_operator(operator_token).unwrap(); + assert_eq!(operator, ModifierOperator::Add); + + let operator_token = short_parse(Rule::ModifierOperator, "-"); + let operator = parse_modifier_operator(operator_token).unwrap(); + assert_eq!(operator, ModifierOperator::Substract); + + let operator_token = short_parse(Rule::ModifierOperator, "*"); + let operator = parse_modifier_operator(operator_token).unwrap(); + assert_eq!(operator, ModifierOperator::Multiply); + + let operator_token = short_parse(Rule::ModifierOperator, "/"); + let operator = parse_modifier_operator(operator_token).unwrap(); + assert_eq!(operator, ModifierOperator::Divide); + + let operator_token = short_parse(Rule::ModifierOperator, "="); + let operator = parse_modifier_operator(operator_token).unwrap(); + assert_eq!(operator, ModifierOperator::Set); + } + #[test] fn parse_not_equal_condition_correctly() { /*Condition = { Identifier ~ " "* ~ (ComparisonOperator ~ " "*)? ~ Value } */ @@ -1390,7 +1494,7 @@ mod test { let expected_value = Condition { variable, - operator: Operator::NotEqual, + operator: ComparisonOperator::NotEqual, value: "true".to_string(), }; @@ -1402,42 +1506,45 @@ mod test { #[test] fn parse_operators_correctly() { let token = short_parse(Rule::ComparisonOperator, "="); - assert_eq!(parse_comparison_operator(token).unwrap(), Operator::Equal); + assert_eq!( + parse_comparison_operator(token).unwrap(), + ComparisonOperator::Equal + ); let token = short_parse(Rule::ComparisonOperator, "!="); assert_eq!( parse_comparison_operator(token).unwrap(), - Operator::NotEqual + ComparisonOperator::NotEqual ); let token = short_parse(Rule::ComparisonOperator, "<"); assert_eq!( parse_comparison_operator(token).unwrap(), - Operator::LessThan + ComparisonOperator::LessThan ); let token = short_parse(Rule::ComparisonOperator, ">"); assert_eq!( parse_comparison_operator(token).unwrap(), - Operator::GreaterThan + ComparisonOperator::GreaterThan ); let token = short_parse(Rule::ComparisonOperator, "<="); assert_eq!( parse_comparison_operator(token).unwrap(), - Operator::LessOrEqualThan + ComparisonOperator::LessOrEqualThan ); let token = short_parse(Rule::ComparisonOperator, ">="); assert_eq!( parse_comparison_operator(token).unwrap(), - Operator::GreaterOrEqualThan + ComparisonOperator::GreaterOrEqualThan ); let token = short_parse(Rule::ComparisonOperator, "!"); assert_eq!( parse_comparison_operator(token).unwrap(), - Operator::NotEqual + ComparisonOperator::NotEqual ); } @@ -1497,6 +1604,14 @@ mod test { } } + #[test] + fn parse_modifier_operator_rule() { + //ModifierOperator = {"+" | "-" | "*" | "/" | "="} + for operator in MODIFIER_OPERATORS { + assert_parse_rule(Rule::ModifierOperator, operator); + } + } + #[test] fn parse_snake_case_rule() { //snake_case = { ASCII_ALPHA_LOWER ~ (ASCII_ALPHA_LOWER | "_" | ASCII_DIGIT)* } @@ -1569,14 +1684,21 @@ mod test { #[test] fn parse_modifier_rule() { - //modifier = { "mod" ~ " "+ ~ identifier ~ " "+ ~ value} + //Modifier = { "set" ~ " "+ ~ ( (Identifier ~ " "+ ~ ModifierOperator? ~ " "* ~ Value) | (NotOperator? ~ " "* ~ Identifier) ) ~ " "* } + let identifier = make_random_identifier(); let value = make_random_identifier(); - assert_parse_rule( - Rule::Modifier, - &("mod ".to_string() + &identifier + " " + &value), - ); + assert_parse_rule(Rule::Modifier, &format!("set {} {}", &identifier, &value)); + + for operator in MODIFIER_OPERATORS { + assert_parse_rule( + Rule::Modifier, + &format!("set {} {} {}", &identifier, operator, &value), + ); + } + + assert_parse_rule(Rule::Modifier, &format!("set !{}", &identifier)); } #[test] @@ -1600,7 +1722,7 @@ mod test { assert_parse_rule(Rule::Command, &(frequency)); let modifier = - "\nmod ".to_string() + &make_random_identifier() + " " + &make_random_identifier(); + "\nset ".to_string() + &make_random_identifier() + " " + &make_random_identifier(); assert_parse_rule(Rule::Command, &(modifier)); let divert = "\n->".to_string() + &make_random_identifier(); @@ -1708,7 +1830,7 @@ mod test { requirements: vec![Requirement { condition: Condition { variable: "test".to_string(), - operator: Operator::Equal, + operator: ComparisonOperator::Equal, value: "true".to_string(), }, }], @@ -1717,43 +1839,7 @@ mod test { }; assert_eq!(section, expected_value); } - #[test] - fn parse_modifier_with_set_command_in_floats() { - let variable = make_random_identifier(); - let new_value = rand::thread_rng().gen::().to_string(); - let modifier_string = format!("mod {} ={}", variable, new_value); - let expected_value = Modifier { - variable, - added_value: format!("{}", new_value), - is_override: true, - }; - - let token = short_parse(Rule::Modifier, &modifier_string); - - let modifier = parse_modifier(token).unwrap(); - - assert_eq!(modifier, expected_value); - } - - #[test] - fn parse_modifier_with_set_command_in_integers() { - let variable = make_random_identifier(); - let new_value = rand::thread_rng().gen::().to_string(); - let modifier_string = format!("mod {} ={}", variable, new_value); - - let expected_value = Modifier { - variable, - added_value: format!("{}", new_value), - is_override: true, - }; - - let token = short_parse(Rule::Modifier, &modifier_string); - - let modifier = parse_modifier(token).unwrap(); - - assert_eq!(modifier, expected_value); - } #[test] fn parse_database_rule() { //File = { SOI ~ (NEWLINE | BlockBlock | Knot )* ~ EOI } diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index 00d2a4e..39234eb 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -2,6 +2,8 @@ use std::fmt::Display; use std::println; use crate::GameState; +use cuentitos_common::condition::ComparisonOperator; +use cuentitos_common::modifier::ModifierOperator; use cuentitos_common::BlockId; use cuentitos_common::BlockSettings; use cuentitos_common::Condition; @@ -254,16 +256,12 @@ impl Runtime { if let Ok(current_value) = self.get_variable::<&str, i32>(&condition.variable) { if let Ok(condition_value) = condition.value.parse::() { match condition.operator { - cuentitos_common::Operator::Equal => return current_value == condition_value, - cuentitos_common::Operator::NotEqual => return current_value != condition_value, - cuentitos_common::Operator::GreaterThan => return current_value > condition_value, - cuentitos_common::Operator::LessThan => return current_value < condition_value, - cuentitos_common::Operator::GreaterOrEqualThan => { - return current_value >= condition_value - } - cuentitos_common::Operator::LessOrEqualThan => { - return current_value <= condition_value - } + ComparisonOperator::Equal => return current_value == condition_value, + ComparisonOperator::NotEqual => return current_value != condition_value, + ComparisonOperator::GreaterThan => return current_value > condition_value, + ComparisonOperator::LessThan => return current_value < condition_value, + ComparisonOperator::GreaterOrEqualThan => return current_value >= condition_value, + ComparisonOperator::LessOrEqualThan => return current_value <= condition_value, } } } @@ -272,16 +270,12 @@ impl Runtime { if let Ok(current_value) = self.get_variable::<&str, f32>(&condition.variable) { if let Ok(condition_value) = condition.value.parse::() { match condition.operator { - cuentitos_common::Operator::Equal => return current_value == condition_value, - cuentitos_common::Operator::NotEqual => return current_value != condition_value, - cuentitos_common::Operator::GreaterThan => return current_value > condition_value, - cuentitos_common::Operator::LessThan => return current_value < condition_value, - cuentitos_common::Operator::GreaterOrEqualThan => { - return current_value >= condition_value - } - cuentitos_common::Operator::LessOrEqualThan => { - return current_value <= condition_value - } + ComparisonOperator::Equal => return current_value == condition_value, + ComparisonOperator::NotEqual => return current_value != condition_value, + ComparisonOperator::GreaterThan => return current_value > condition_value, + ComparisonOperator::LessThan => return current_value < condition_value, + ComparisonOperator::GreaterOrEqualThan => return current_value >= condition_value, + ComparisonOperator::LessOrEqualThan => return current_value <= condition_value, } } } @@ -290,8 +284,8 @@ impl Runtime { if let Ok(current_value) = self.get_variable::<&str, bool>(&condition.variable) { if let Ok(condition_value) = condition.value.parse::() { match condition.operator { - cuentitos_common::Operator::Equal => return current_value == condition_value, - cuentitos_common::Operator::NotEqual => return current_value != condition_value, + ComparisonOperator::Equal => return current_value == condition_value, + ComparisonOperator::NotEqual => return current_value != condition_value, _ => {} } } @@ -301,8 +295,8 @@ impl Runtime { if let Ok(current_value) = self.get_variable::<&str, String>(&condition.variable) { if let Ok(condition_value) = condition.value.parse::() { match condition.operator { - cuentitos_common::Operator::Equal => return current_value == condition_value, - cuentitos_common::Operator::NotEqual => return current_value != condition_value, + ComparisonOperator::Equal => return current_value == condition_value, + ComparisonOperator::NotEqual => return current_value != condition_value, _ => {} } } @@ -399,74 +393,97 @@ impl Runtime { cuentitos_common::Chance::Probability(_) => 0, } } - fn apply_modifiers(&mut self) { + + fn apply_integer_modifier( + &mut self, + variable: &String, + value: i32, + operator: &ModifierOperator, + ) -> Result<(), String> { + let previous_value = self.get_variable::<&str, i32>(variable); + match previous_value { + Ok(previous_value) => match operator { + ModifierOperator::Set => self.set_variable(variable, value), + ModifierOperator::Add => self.set_variable(variable, previous_value + value), + ModifierOperator::Substract => self.set_variable(variable, previous_value - value), + ModifierOperator::Multiply => self.set_variable(variable, previous_value * value), + ModifierOperator::Divide => self.set_variable(variable, previous_value / value), + }, + Err(e) => Err(e), + } + } + + fn apply_float_modifier( + &mut self, + variable: &String, + value: f32, + operator: &ModifierOperator, + ) -> Result<(), String> { + let previous_value = self.get_variable::<&str, f32>(variable); + match previous_value { + Ok(previous_value) => match operator { + ModifierOperator::Set => self.set_variable(variable, value), + ModifierOperator::Add => self.set_variable(variable, previous_value + value), + ModifierOperator::Substract => self.set_variable(variable, previous_value - value), + ModifierOperator::Multiply => self.set_variable(variable, previous_value * value), + ModifierOperator::Divide => self.set_variable(variable, previous_value / value), + }, + Err(e) => Err(e), + } + } + + fn apply_modifiers(&mut self) -> Result<(), String> { let id = self.block_stack.last().unwrap(); let block = self.get_block(*id); for modifier in block.get_settings().modifiers.clone() { match self.get_variable_kind(&modifier.variable) { - Some(kind) => { - let result = match kind { - VariableKind::Integer => { - let value = &modifier.added_value.parse::(); - match value { - Ok(value) => { - if modifier.is_override { - self.set_variable(&modifier.variable, *value) - } else if let Ok(previous_value) = - self.get_variable::<&str, i32>(&modifier.variable) - { - self.set_variable(&modifier.variable, *value + previous_value) - } else { - self.set_variable(&modifier.variable, *value) - } - } - Err(e) => Err(e.to_string()), + Some(kind) => match kind { + VariableKind::Integer => { + let value = &modifier.value.parse::(); + match value { + Ok(value) => { + self.apply_integer_modifier(&modifier.variable, *value, &modifier.operator)?; } + Err(e) => return Err(e.to_string()), } - VariableKind::Float => { - let value = &modifier.added_value.parse::(); - match value { - Ok(value) => { - if modifier.is_override { - self.set_variable(&modifier.variable, *value) - } else if let Ok(previous_value) = - self.get_variable::<&str, f32>(&modifier.variable) - { - self.set_variable(&modifier.variable, *value + previous_value) - } else { - self.set_variable(&modifier.variable, *value) - } - } - Err(e) => Err(e.to_string()), + } + VariableKind::Float => { + let value = &modifier.value.parse::(); + match value { + Ok(value) => { + self.apply_float_modifier(&modifier.variable, *value, &modifier.operator)?; } + Err(e) => return Err(e.to_string()), } - VariableKind::Bool => { - let value = &modifier.added_value.parse::(); - match value { - Ok(value) => self.set_variable(&modifier.variable, *value), - Err(e) => Err(e.to_string()), + } + VariableKind::Bool => { + let value = &modifier.value.parse::(); + match value { + Ok(value) => { + self.set_variable(&modifier.variable, *value)?; } + Err(e) => return Err(e.to_string()), } - _ => self.set_variable(&modifier.variable, modifier.added_value), - }; - - if result.is_err() { - println!("{}", result.unwrap_err()); } - } + _ => { + self.set_variable(&modifier.variable, modifier.value)?; + } + }, None => { - println!( - "Can't modify variable {:?} because it doesn't exists.", - modifier.variable - ) + return Err("Can't modify variable {:?} because it doesn't exists.".to_string()); } } } + + Ok(()) } fn push_stack(&mut self, id: BlockId) -> bool { self.block_stack.push(id); - self.apply_modifiers(); + match self.apply_modifiers() { + Ok(_) => {} + Err(e) => println!("{}", e), + } self.update_choices(); if self.get_block(id).get_settings().unique { @@ -699,8 +716,9 @@ mod test { use crate::Runtime; use cuentitos_common::{ - Block, BlockSettings, Chance, Condition, Config, Database, FrequencyModifier, Function, I18n, - LanguageDb, LanguageId, Modifier, NextBlock, Requirement, SectionKey, VariableKind, + condition::ComparisonOperator, modifier::ModifierOperator, Block, BlockSettings, Chance, + Condition, Config, Database, FrequencyModifier, Function, I18n, LanguageDb, LanguageId, + Modifier, NextBlock, Requirement, SectionKey, VariableKind, }; #[test] @@ -876,6 +894,7 @@ mod test { let expected_result = vec!["a".to_string(), "b".to_string()]; assert_eq!(choices, expected_result); } + #[test] fn updates_stack_to_first_child_correctly() { let settings = BlockSettings { @@ -1187,13 +1206,31 @@ mod test { ..Default::default() }; - let modifier = Modifier { + let modifier_1 = Modifier { variable: "health".to_string(), - added_value: "100".to_string(), - is_override: false, + value: "100".to_string(), + operator: ModifierOperator::Set, }; + let modifier_2 = Modifier { + variable: "health".to_string(), + value: "50".to_string(), + operator: ModifierOperator::Substract, + }; + + let modifier_3 = Modifier { + variable: "health".to_string(), + value: "3".to_string(), + operator: ModifierOperator::Multiply, + }; + + let modifier_4 = Modifier { + variable: "health".to_string(), + value: "2".to_string(), + operator: ModifierOperator::Divide, + }; + let settings = BlockSettings { - modifiers: vec![modifier], + modifiers: vec![modifier_1, modifier_2, modifier_3, modifier_4], ..Default::default() }; let block = Block::Text { @@ -1212,12 +1249,9 @@ mod test { let current_health: i32 = runtime.get_variable("health").unwrap(); let expected_value = variable_kind.get_default_value().parse().unwrap(); assert_eq!(current_health, expected_value); - runtime.apply_modifiers(); - let current_health: i32 = runtime.get_variable("health").unwrap(); - assert_eq!(current_health, expected_value + 100); - runtime.apply_modifiers(); + runtime.apply_modifiers().unwrap(); let current_health: i32 = runtime.get_variable("health").unwrap(); - assert_eq!(current_health, expected_value + 200); + assert_eq!(current_health, 75); } #[test] @@ -1231,101 +1265,31 @@ mod test { ..Default::default() }; - let modifier = Modifier { + let modifier_1 = Modifier { variable: "speed".to_string(), - added_value: "1.5".to_string(), - is_override: false, - }; - let settings = BlockSettings { - modifiers: vec![modifier], - ..Default::default() - }; - let block = Block::Text { - id: String::default(), - settings, - }; - - let database = Database { - blocks: vec![block], - config, - ..Default::default() - }; - - let mut runtime = Runtime::new(database); - runtime.block_stack = vec![0]; - let current_speed: f32 = runtime.get_variable("speed").unwrap(); - let expected_value = variable_kind.get_default_value().parse().unwrap(); - assert_eq!(current_speed, expected_value); - runtime.apply_modifiers(); - let current_speed: f32 = runtime.get_variable("speed").unwrap(); - assert_eq!(current_speed, expected_value + 1.5); - runtime.apply_modifiers(); - let current_speed: f32 = runtime.get_variable("speed").unwrap(); - assert_eq!(current_speed, expected_value + 3.); - } - - #[test] - fn integer_override_modifiers_work() { - let mut variables = HashMap::default(); - - let variable_kind = VariableKind::Integer; - variables.insert("health".to_string(), variable_kind.clone()); - let config = Config { - variables, - ..Default::default() + value: "1".to_string(), + operator: ModifierOperator::Set, }; - - let modifier = Modifier { - variable: "health".to_string(), - added_value: "100".to_string(), - is_override: true, - }; - let settings = BlockSettings { - modifiers: vec![modifier], - ..Default::default() - }; - let block = Block::Text { - id: String::default(), - settings, - }; - - let database = Database { - blocks: vec![block], - config, - ..Default::default() + let modifier_2 = Modifier { + variable: "speed".to_string(), + value: "0.5".to_string(), + operator: ModifierOperator::Substract, }; - let mut runtime = Runtime::new(database); - runtime.block_stack = vec![0]; - let current_health: i32 = runtime.get_variable("health").unwrap(); - let expected_value = variable_kind.get_default_value().parse().unwrap(); - assert_eq!(current_health, expected_value); - runtime.apply_modifiers(); - let current_health: i32 = runtime.get_variable("health").unwrap(); - assert_eq!(current_health, 100); - runtime.apply_modifiers(); - let current_health: i32 = runtime.get_variable("health").unwrap(); - assert_eq!(current_health, 100); - } - - #[test] - fn float_override_modifiers_work() { - let mut variables = HashMap::default(); - - let variable_kind = VariableKind::Float; - variables.insert("speed".to_string(), variable_kind.clone()); - let config = Config { - variables, - ..Default::default() + let modifier_3 = Modifier { + variable: "speed".to_string(), + value: "3".to_string(), + operator: ModifierOperator::Multiply, }; - let modifier = Modifier { + let modifier_4 = Modifier { variable: "speed".to_string(), - added_value: "1.5".to_string(), - is_override: true, + value: "2".to_string(), + operator: ModifierOperator::Divide, }; + let settings = BlockSettings { - modifiers: vec![modifier], + modifiers: vec![modifier_1, modifier_2, modifier_3, modifier_4], ..Default::default() }; let block = Block::Text { @@ -1344,12 +1308,9 @@ mod test { let current_speed: f32 = runtime.get_variable("speed").unwrap(); let expected_value = variable_kind.get_default_value().parse().unwrap(); assert_eq!(current_speed, expected_value); - runtime.apply_modifiers(); - let current_speed: f32 = runtime.get_variable("speed").unwrap(); - assert_eq!(current_speed, 1.5); - runtime.apply_modifiers(); + runtime.apply_modifiers().unwrap(); let current_speed: f32 = runtime.get_variable("speed").unwrap(); - assert_eq!(current_speed, 1.5); + assert_eq!(current_speed, 0.75); } #[test] @@ -1365,8 +1326,8 @@ mod test { let modifier = Modifier { variable: "bike".to_string(), - added_value: "true".to_string(), - is_override: false, + value: "true".to_string(), + ..Default::default() }; let settings = BlockSettings { modifiers: vec![modifier], @@ -1388,7 +1349,7 @@ mod test { let current_bike: bool = runtime.get_variable("bike").unwrap(); let expected_value = variable_kind.get_default_value().parse().unwrap(); assert_eq!(current_bike, expected_value); - runtime.apply_modifiers(); + runtime.apply_modifiers().unwrap(); let current_bike: bool = runtime.get_variable("bike").unwrap(); assert_eq!(current_bike, true); } @@ -1406,8 +1367,8 @@ mod test { let modifier = Modifier { variable: "message".to_string(), - added_value: "hello".to_string(), - is_override: false, + value: "hello".to_string(), + ..Default::default() }; let settings = BlockSettings { modifiers: vec![modifier], @@ -1430,7 +1391,7 @@ mod test { let expected_value = variable_kind.get_default_value(); assert_eq!(current_message, expected_value); - runtime.apply_modifiers(); + runtime.apply_modifiers().unwrap(); let current_message: String = runtime.get_variable("message").unwrap(); assert_eq!(current_message, "hello".to_string()); } @@ -1448,8 +1409,8 @@ mod test { let modifier = Modifier { variable: "time_of_day".to_string(), - added_value: "Night".to_string(), - is_override: false, + value: "Night".to_string(), + ..Default::default() }; let settings = BlockSettings { modifiers: vec![modifier], @@ -1473,7 +1434,7 @@ mod test { let expected_value = variable_kind.get_default_value().parse().unwrap(); assert_eq!(current_time_of_day, expected_value); - runtime.apply_modifiers(); + runtime.apply_modifiers().unwrap(); let current_time_of_day: TimeOfDay = runtime.get_variable("time_of_day").unwrap(); assert_eq!(current_time_of_day, TimeOfDay::Night); } @@ -1608,7 +1569,7 @@ mod test { let requirement = Requirement { condition: Condition { variable: "health".to_string(), - operator: cuentitos_common::Operator::Equal, + operator: ComparisonOperator::Equal, value: "100".to_string(), }, }; @@ -1653,7 +1614,7 @@ mod test { let requirement = Requirement { condition: Condition { variable: "health".to_string(), - operator: cuentitos_common::Operator::GreaterOrEqualThan, + operator: ComparisonOperator::GreaterOrEqualThan, value: "100".to_string(), }, }; @@ -1698,7 +1659,7 @@ mod test { let requirement = Requirement { condition: Condition { variable: "health".to_string(), - operator: cuentitos_common::Operator::GreaterThan, + operator: ComparisonOperator::GreaterThan, value: "100".to_string(), }, }; @@ -1743,7 +1704,7 @@ mod test { let requirement = Requirement { condition: Condition { variable: "health".to_string(), - operator: cuentitos_common::Operator::LessOrEqualThan, + operator: ComparisonOperator::LessOrEqualThan, value: "100".to_string(), }, }; @@ -1787,7 +1748,7 @@ mod test { let requirement = Requirement { condition: Condition { variable: "health".to_string(), - operator: cuentitos_common::Operator::LessThan, + operator: ComparisonOperator::LessThan, value: "100".to_string(), }, }; @@ -1831,7 +1792,7 @@ mod test { let requirement = Requirement { condition: Condition { variable: "health".to_string(), - operator: cuentitos_common::Operator::NotEqual, + operator: ComparisonOperator::NotEqual, value: "100".to_string(), }, }; @@ -1875,7 +1836,7 @@ mod test { let requirement = Requirement { condition: Condition { variable: "speed".to_string(), - operator: cuentitos_common::Operator::Equal, + operator: ComparisonOperator::Equal, value: "1.5".to_string(), }, }; @@ -1920,7 +1881,7 @@ mod test { let requirement = Requirement { condition: Condition { variable: "speed".to_string(), - operator: cuentitos_common::Operator::GreaterOrEqualThan, + operator: ComparisonOperator::GreaterOrEqualThan, value: "1.5".to_string(), }, }; @@ -1965,7 +1926,7 @@ mod test { let requirement = Requirement { condition: Condition { variable: "speed".to_string(), - operator: cuentitos_common::Operator::GreaterThan, + operator: ComparisonOperator::GreaterThan, value: "1.5".to_string(), }, }; @@ -2010,7 +1971,7 @@ mod test { let requirement = Requirement { condition: Condition { variable: "speed".to_string(), - operator: cuentitos_common::Operator::LessOrEqualThan, + operator: ComparisonOperator::LessOrEqualThan, value: "1.5".to_string(), }, }; @@ -2054,7 +2015,7 @@ mod test { let requirement = Requirement { condition: Condition { variable: "speed".to_string(), - operator: cuentitos_common::Operator::LessThan, + operator: ComparisonOperator::LessThan, value: "1.5".to_string(), }, }; @@ -2098,7 +2059,7 @@ mod test { let requirement = Requirement { condition: Condition { variable: "speed".to_string(), - operator: cuentitos_common::Operator::NotEqual, + operator: ComparisonOperator::NotEqual, value: "1.5".to_string(), }, }; @@ -2143,7 +2104,7 @@ mod test { let requirement = Requirement { condition: Condition { variable: "bike".to_string(), - operator: cuentitos_common::Operator::Equal, + operator: ComparisonOperator::Equal, value: "true".to_string(), }, }; @@ -2185,7 +2146,7 @@ mod test { let requirement = Requirement { condition: Condition { variable: "bike".to_string(), - operator: cuentitos_common::Operator::NotEqual, + operator: ComparisonOperator::NotEqual, value: "true".to_string(), }, }; @@ -2227,7 +2188,7 @@ mod test { let requirement = Requirement { condition: Condition { variable: "message".to_string(), - operator: cuentitos_common::Operator::Equal, + operator: ComparisonOperator::Equal, value: "hello".to_string(), }, }; @@ -2271,7 +2232,7 @@ mod test { let requirement = Requirement { condition: Condition { variable: "message".to_string(), - operator: cuentitos_common::Operator::NotEqual, + operator: ComparisonOperator::NotEqual, value: "hello".to_string(), }, }; @@ -2315,7 +2276,7 @@ mod test { let requirement = Requirement { condition: Condition { variable: "time_of_day".to_string(), - operator: cuentitos_common::Operator::Equal, + operator: ComparisonOperator::Equal, value: "Night".to_string(), }, }; @@ -2359,7 +2320,7 @@ mod test { let requirement = Requirement { condition: Condition { variable: "time_of_day".to_string(), - operator: cuentitos_common::Operator::NotEqual, + operator: ComparisonOperator::NotEqual, value: "Night".to_string(), }, }; @@ -2403,7 +2364,7 @@ mod test { let freq_mod = FrequencyModifier { condition: Condition { variable: "bike".to_string(), - operator: cuentitos_common::Operator::Equal, + operator: ComparisonOperator::Equal, value: "true".to_string(), }, value: -100, From 1068a648ea577cb384c6a306e53672c0e0602be8 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Fri, 30 Jun 2023 13:54:16 -0300 Subject: [PATCH 22/94] set in cli + parser refactoring --- cli/Cargo.toml | 2 + cli/src/console.rs | 83 +++--- palabritas/src/lib.rs | 4 +- palabritas/src/parser.rs | 567 ++++++++++++++++++--------------------- runtime/src/runtime.rs | 75 +++--- 5 files changed, 337 insertions(+), 394 deletions(-) diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 00ef760..44370a2 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -11,5 +11,7 @@ path = "src/main.rs" clap = { version = "4.0.17", features = ["derive"] } cuentitos-compiler = { path = "../compiler" } cuentitos-runtime = { path = "../runtime" } +palabritas = { path = "../palabritas" } regex = "1.7.0" notify = "5.1.0" +pest = "2.0" diff --git a/cli/src/console.rs b/cli/src/console.rs index 7fa92f8..001ff69 100644 --- a/cli/src/console.rs +++ b/cli/src/console.rs @@ -1,4 +1,5 @@ use cuentitos_runtime::*; +use palabritas::parse_modifier_str; use std::fs; use std::fs::File; use std::io::Read; @@ -65,13 +66,15 @@ impl Console { "q" => break, "variables" => print_variables(&runtime), str => { - if str.starts_with("set ") { - let substr: String = str.chars().skip(4).collect(); - let mut splitted = substr.split(' '); - if let Some(variable) = splitted.next() { - if let Some(value) = splitted.next() { - set_variable_value(variable, value, &mut runtime); - } + if str.starts_with("set") { + match parse_modifier_str(str) { + Ok(modifier) => match runtime.apply_modifier(&modifier) { + Ok(_) => { + print_variable(&runtime, &modifier.variable); + } + Err(error) => println!("{}", error), + }, + Err(error) => println!("{}", error), } } else if str.starts_with("->") { let substr: String = str.chars().skip(2).collect(); @@ -108,45 +111,6 @@ impl Console { } } -fn set_variable_value(variable: &str, value: &str, runtime: &mut Runtime) { - for (variable_name, kind) in runtime.database.config.variables.clone() { - if variable_name == variable { - match kind { - VariableKind::Integer => { - let int: i32 = value.parse().unwrap(); - runtime.set_variable(variable, int).unwrap(); - let result: i32 = runtime.get_variable(variable).unwrap(); - println!("{} = {}", variable, result); - } - VariableKind::Float => { - let float: f32 = value.parse().unwrap(); - runtime.set_variable(variable, float).unwrap(); - let result: f32 = runtime.get_variable(variable).unwrap(); - println!("{} = {}", variable, result); - } - VariableKind::Bool => { - let bool: bool = value.parse().unwrap(); - runtime.set_variable(variable, bool).unwrap(); - let result: bool = runtime.get_variable(variable).unwrap(); - println!("{} = {}", variable, result); - } - VariableKind::String => { - runtime.set_variable(variable, value.to_string()).unwrap(); - let result: String = runtime.get_variable(variable).unwrap(); - println!("{} = {}", variable, result); - } - VariableKind::Enum(_) => match runtime.set_variable(variable, value.to_string()) { - Ok(_) => { - let result: String = runtime.get_variable(variable).unwrap(); - println!("{} = {}", variable, result); - } - Err(err) => println!("{}", err), - }, - } - } - } -} - fn print_variables(runtime: &Runtime) { for (variable, kind) in &runtime.database.config.variables { match kind { @@ -169,6 +133,33 @@ fn print_variables(runtime: &Runtime) { } } } + +fn print_variable(runtime: &Runtime, variable: &String) { + for (runtime_variable, kind) in &runtime.database.config.variables { + if runtime_variable == variable { + match kind { + VariableKind::Integer => { + let int: i32 = runtime.get_variable(variable).unwrap(); + println!("{}: {}", variable, int); + } + VariableKind::Float => { + let float: f32 = runtime.get_variable(variable).unwrap(); + println!("{}: {}", variable, float); + } + VariableKind::Bool => { + let bool: bool = runtime.get_variable(variable).unwrap(); + println!("{}: {}", variable, bool); + } + _ => { + let string: String = runtime.get_variable(variable).unwrap(); + println!("{}: {}", variable, string); + } + } + return; + } + } + println!("Variable {} doesn't exist", variable) +} fn print_output_text(output_text: Block) { println!("{}", output_text.text); for i in 0..output_text.choices.len() { diff --git a/palabritas/src/lib.rs b/palabritas/src/lib.rs index 0904f70..96eb5c7 100644 --- a/palabritas/src/lib.rs +++ b/palabritas/src/lib.rs @@ -1,6 +1,6 @@ mod parser; -pub use parser::parse_database; -pub use parser::parse_database_from_path; +pub use parser::*; + #[macro_use] extern crate pest_derive; diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index a4bd7d2..abbf15a 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -16,7 +16,7 @@ use crate::error::{ErrorInfo, PalabritasError}; #[derive(Parser)] #[grammar = "palabritas.pest"] -pub struct PalabritasParser; +struct PalabritasParser; pub fn parse_database_from_path

(path: P) -> Result where @@ -57,7 +57,13 @@ where }; match PalabritasParser::parse(Rule::Database, &str) { - Ok(mut result) => parse_database(result.next().unwrap(), config), + Ok(mut result) => match parse_database(result.next().unwrap()) { + Ok(mut database) => { + database.config = config; + Ok(database) + } + Err(error) => Err(error), + }, Err(error) => { let (line, col) = match error.line_col { LineColLocation::Pos(line_col) => line_col, @@ -74,7 +80,7 @@ where } } -pub fn parse_database(token: Pair, config: Config) -> Result { +pub fn parse_database(token: Pair) -> Result { match_rule(&token, Rule::Database)?; let mut blocks: Vec> = Vec::default(); @@ -120,16 +126,117 @@ pub fn parse_database(token: Pair, config: Config) -> Result Result { + let token = parse_str(input, Rule::Database)?; + parse_database(token) +} + +pub fn parse_text_str(input: &str) -> Result { + let token = parse_str(input, Rule::Text)?; + parse_text(token) +} + +pub fn parse_named_bucket_str(input: &str) -> Result { + let token = parse_str(input, Rule::NamedBucket)?; + parse_named_bucket(token) +} + +pub fn parse_chance_str(input: &str) -> Result { + let token = parse_str(input, Rule::Chance)?; + parse_chance(token) +} + +pub fn parse_condition_str(input: &str) -> Result { + let token = parse_str(input, Rule::Condition)?; + parse_condition(token) +} + +pub fn parse_choice_str(input: &str) -> Result { + let token = parse_str(input, Rule::Choice)?; + parse_choice(token) +} + +pub fn parse_section_str(input: &str) -> Result { + let token = parse_str(input, Rule::Section)?; + parse_section(token, &mut Vec::default(), &mut HashMap::default()) +} + +pub fn parse_tag_str(input: &str) -> Result { + let token = parse_str(input, Rule::Tag)?; + parse_tag(token) +} + +pub fn parse_function_str(input: &str) -> Result { + let token = parse_str(input, Rule::Function)?; + parse_function(token) +} + +pub fn parse_divert_str(input: &str) -> Result { + let token = parse_str(input, Rule::Divert)?; + parse_divert(token) +} + +pub fn parse_modifier_str(input: &str) -> Result { + let token = parse_str(input, Rule::Modifier)?; + parse_modifier(token) +} + +pub fn parse_frequency_str(input: &str) -> Result { + let token = parse_str(input, Rule::Frequency)?; + parse_frequency(token) +} + +pub fn parse_requirement_str(input: &str) -> Result { + let token = parse_str(input, Rule::Requirement)?; + parse_requirement(token) +} + +pub fn parse_comparison_operator_str(input: &str) -> Result { + let token = parse_str(input, Rule::ComparisonOperator)?; + parse_comparison_operator(token) +} + +pub fn parse_modifier_operator_str(input: &str) -> Result { + let token = parse_str(input, Rule::ModifierOperator)?; + parse_modifier_operator(token) +} + +fn parse_str(input: &str, rule: Rule) -> Result, PalabritasError> { + match PalabritasParser::parse(rule, input) { + Ok(mut pairs) => match pairs.next() { + Some(token) => Ok(token), + None => Err(PalabritasError::ParseError { + file: input.to_string(), + line: 1, + col: 1, + reason: "Modifier not found".to_string(), + }), + }, + Err(error) => { + let (line, col) = match error.line_col { + LineColLocation::Pos(line_col) => line_col, + LineColLocation::Span(start, _) => (start.0, start.1), + }; + + Err(PalabritasError::ParseError { + file: input.to_string(), + line, + col, + reason: error.to_string(), + }) + } + } +} + fn parse_section( token: Pair, blocks: &mut Vec>, sections: &mut HashMap, -) -> Result<(), PalabritasError> { +) -> Result { match_rule(&token, Rule::Section)?; if blocks.is_empty() { blocks.push(Vec::default()); @@ -170,9 +277,10 @@ fn parse_section( block_id, ); - blocks[0][block_id] = Block::Section { id, settings }; + let section = Block::Section { id, settings }; + blocks[0][block_id] = section.clone(); - Ok(()) + Ok(section) } fn parse_subsection( @@ -192,8 +300,7 @@ fn parse_subsection( let mut settings = BlockSettings::default(); let mut id: String = String::default(); - let mut subsections = Vec::default(); - //Section = {"#" ~ " "* ~ Identifier ~ " "* ~ Command* ~ NewLine ~ ( NewLine | NewBlock | Subsection )* } + for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Identifier => { @@ -210,7 +317,6 @@ fn parse_subsection( } Rule::Subsection => { parse_subsection(inner_token, blocks, section_name, sections)?; - subsections.push(blocks[0].len() - 1); } _ => {} } @@ -240,19 +346,13 @@ fn parse_block( for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Text => { - if let Some(text) = parse_text(inner_token) { - block = text; - } + block = parse_text(inner_token)?; } Rule::NamedBucket => { - if let Some(named_bucket) = parse_named_bucket(inner_token) { - block = named_bucket; - } + block = parse_named_bucket(inner_token)?; } Rule::Choice => { - if let Some(choice) = parse_choice(inner_token) { - block = choice; - } + block = parse_choice(inner_token)?; } Rule::Command => { add_command_to_block(inner_token, &mut block)?; @@ -507,17 +607,15 @@ fn get_blocks_from_new_block(token: Pair) -> Vec> { blocks } -fn parse_named_bucket(token: Pair) -> Option { - if token.as_rule() != Rule::NamedBucket { - return None; - } +fn parse_named_bucket(token: Pair) -> Result { + match_rule(&token, Rule::NamedBucket)?; let mut name = None; let mut settings = BlockSettings::default(); for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Chance => { - settings.chance = parse_chance(inner_token); + settings.chance = parse_chance(inner_token)?; } Rule::SnakeCase => { name = Some(inner_token.as_str().to_string()); @@ -526,13 +624,11 @@ fn parse_named_bucket(token: Pair) -> Option { } } - Some(Block::Bucket { name, settings }) + Ok(Block::Bucket { name, settings }) } -fn parse_choice(token: Pair) -> Option { - if token.as_rule() != Rule::Choice { - return None; - } +fn parse_choice(token: Pair) -> Result { + match_rule(&token, Rule::Choice)?; let mut text = String::default(); let mut settings = BlockSettings::default(); @@ -540,7 +636,7 @@ fn parse_choice(token: Pair) -> Option { for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Chance => { - settings.chance = parse_chance(inner_token); + settings.chance = parse_chance(inner_token)?; } Rule::String => { text = inner_token.as_str().to_string(); @@ -549,20 +645,18 @@ fn parse_choice(token: Pair) -> Option { } } - Some(Block::Choice { id: text, settings }) + Ok(Block::Choice { id: text, settings }) } -fn parse_text(token: Pair) -> Option { - if token.as_rule() != Rule::Text { - return None; - } +fn parse_text(token: Pair) -> Result { + match_rule(&token, Rule::Text)?; let mut text = String::default(); let mut settings = BlockSettings::default(); for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Chance => { - settings.chance = parse_chance(inner_token); + settings.chance = parse_chance(inner_token)?; } Rule::String => { text = inner_token.as_str().to_string(); @@ -571,7 +665,7 @@ fn parse_text(token: Pair) -> Option { } } - Some(Block::Text { id: text, settings }) + Ok(Block::Text { id: text, settings }) } fn add_command_to_settings( @@ -584,36 +678,30 @@ fn add_command_to_settings( match inner_token.as_rule() { //Command = {NewLine ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert | Function | Unique | Tag) } Rule::Requirement => { - if let Some(requirement) = parse_requirement(inner_token) { - settings.requirements.push(requirement); - } + let requirement = parse_requirement(inner_token)?; + settings.requirements.push(requirement); } Rule::Frequency => { - if let Some(frequency) = parse_frequency(inner_token) { - settings.frequency_modifiers.push(frequency); - } + let frequency = parse_frequency(inner_token)?; + settings.frequency_modifiers.push(frequency); } Rule::Modifier => { let modifier = parse_modifier(inner_token)?; settings.modifiers.push(modifier); } Rule::Divert => { - if let Some(divert) = parse_divert(inner_token) { - settings.next = divert; - } + settings.next = parse_divert(inner_token)?; } Rule::Unique => { settings.unique = true; } Rule::Tag => { - if let Some(tag) = parse_tag(inner_token) { - settings.tags.push(tag); - } + let tag = parse_tag(inner_token)?; + settings.tags.push(tag); } Rule::Function => { - if let Some(function) = parse_function(inner_token) { - settings.functions.push(function); - } + let function = parse_function(inner_token)?; + settings.functions.push(function); } _ => {} } @@ -626,10 +714,9 @@ fn add_command_to_block(token: Pair, block: &mut Block) -> Result<(), Pala add_command_to_settings(token, settings) } -fn parse_function(token: Pair) -> Option { - if token.as_rule() != Rule::Function { - return None; - } +fn parse_function(token: Pair) -> Result { + match_rule(&token, Rule::Function)?; + let mut name = String::default(); let mut parameters = Vec::default(); for inner_token in token.into_inner() { @@ -640,24 +727,22 @@ fn parse_function(token: Pair) -> Option { parameters.push(inner_token.as_str().to_string()); } } - Some(Function { name, parameters }) + Ok(Function { name, parameters }) } -fn parse_tag(token: Pair) -> Option { - if token.as_rule() != Rule::Tag { - return None; - } +fn parse_tag(token: Pair) -> Result { + match_rule(&token, Rule::Tag)?; + + let mut name = String::default(); for inner_token in token.into_inner() { if inner_token.as_rule() == Rule::Identifier { - return Some(inner_token.as_str().to_string()); + name = inner_token.as_str().to_string(); } } - None + Ok(name) } -fn parse_divert(token: Pair) -> Option { - if token.as_rule() != Rule::Divert { - return None; - } +fn parse_divert(token: Pair) -> Result { + match_rule(&token, Rule::Divert)?; //Divert = { "->" ~ " "* ~ Identifier ~ ("." ~ Identifier)? } let mut section: Option = None; @@ -674,14 +759,17 @@ fn parse_divert(token: Pair) -> Option { } if section.is_some() && subsection.is_none() && section.clone().unwrap() == "END" { - return Some(NextBlock::EndOfFile); + return Ok(NextBlock::EndOfFile); } - section.map(|section| { - NextBlock::Section(SectionKey { + + if let Some(section) = section { + Ok(NextBlock::Section(SectionKey { section, subsection, - }) - }) + })) + } else { + Ok(NextBlock::None) + } } fn parse_modifier(token: Pair) -> Result { @@ -701,9 +789,7 @@ fn parse_modifier(token: Pair) -> Result { } Rule::ModifierOperator => { - if let Some(operator) = parse_modifier_operator(inner_token) { - modifier.operator = operator; - } + modifier.operator = parse_modifier_operator(inner_token)?; } Rule::NotOperator => { @@ -721,33 +807,27 @@ fn parse_modifier(token: Pair) -> Result { } } -fn parse_modifier_operator(token: Pair) -> Option { +fn parse_modifier_operator(token: Pair) -> Result { //ModifierOperator = {"+" | "-" | "*" | "/" | "="} - if token.as_rule() != Rule::ModifierOperator { - return None; - } + match_rule(&token, Rule::ModifierOperator)?; match token.as_str() { - "+" => Some(ModifierOperator::Add), - "-" => Some(ModifierOperator::Substract), - "*" => Some(ModifierOperator::Multiply), - "/" => Some(ModifierOperator::Divide), - "=" => Some(ModifierOperator::Set), - _ => None, + "+" => Ok(ModifierOperator::Add), + "-" => Ok(ModifierOperator::Substract), + "*" => Ok(ModifierOperator::Multiply), + "/" => Ok(ModifierOperator::Divide), + "=" => Ok(ModifierOperator::Set), + _ => Ok(ModifierOperator::default()), } } -fn parse_frequency(token: Pair) -> Option { - if token.as_rule() != Rule::Frequency { - return None; - } +fn parse_frequency(token: Pair) -> Result { + match_rule(&token, Rule::Frequency)?; let mut frequency = FrequencyModifier::default(); for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Condition => { - if let Some(condition) = parse_condition(inner_token) { - frequency.condition = condition; - } + frequency.condition = parse_condition(inner_token)?; } Rule::Float | Rule::Integer => { @@ -758,28 +838,24 @@ fn parse_frequency(token: Pair) -> Option { } } - Some(frequency) + Ok(frequency) } -fn parse_requirement(token: Pair) -> Option { - if token.as_rule() != Rule::Requirement { - return None; - } +fn parse_requirement(token: Pair) -> Result { + match_rule(&token, Rule::Requirement)?; + let mut condition = Condition::default(); for inner_token in token.into_inner() { if inner_token.as_rule() == Rule::Condition { - if let Some(condition) = parse_condition(inner_token) { - return Some(Requirement { condition }); - } + condition = parse_condition(inner_token)?; } } - None + + Ok(Requirement { condition }) } -fn parse_condition(token: Pair) -> Option { - if token.as_rule() != Rule::Condition { - return None; - } +fn parse_condition(token: Pair) -> Result { + match_rule(&token, Rule::Condition)?; //Condition = { ( Identifier ~ " "* ~ ( ComparisonOperator ~ " "* )? ~ Value? ) | ( NotEqualOperator? ~ " "* ~ Identifier ~ " "*) } let mut condition = Condition::default(); @@ -790,9 +866,7 @@ fn parse_condition(token: Pair) -> Option { condition.variable = inner_token.as_str().to_string(); } Rule::ComparisonOperator => { - if let Some(operator) = parse_comparison_operator(inner_token) { - condition.operator = operator; - } + condition.operator = parse_comparison_operator(inner_token)?; } Rule::NotOperator => { condition.operator = ComparisonOperator::NotEqual; @@ -803,52 +877,48 @@ fn parse_condition(token: Pair) -> Option { _ => {} } } - Some(condition) + Ok(condition) } -fn parse_comparison_operator(token: Pair) -> Option { - if token.as_rule() != Rule::ComparisonOperator { - return None; - } +fn parse_comparison_operator(token: Pair) -> Result { + match_rule(&token, Rule::ComparisonOperator)?; match token.as_str() { - "!=" => Some(ComparisonOperator::NotEqual), - "!" => Some(ComparisonOperator::NotEqual), - "=" => Some(ComparisonOperator::Equal), - "<=" => Some(ComparisonOperator::LessOrEqualThan), - ">=" => Some(ComparisonOperator::GreaterOrEqualThan), - "<" => Some(ComparisonOperator::LessThan), - ">" => Some(ComparisonOperator::GreaterThan), - _ => None, + "!=" => Ok(ComparisonOperator::NotEqual), + "!" => Ok(ComparisonOperator::NotEqual), + "=" => Ok(ComparisonOperator::Equal), + "<=" => Ok(ComparisonOperator::LessOrEqualThan), + ">=" => Ok(ComparisonOperator::GreaterOrEqualThan), + "<" => Ok(ComparisonOperator::LessThan), + ">" => Ok(ComparisonOperator::GreaterThan), + _ => Ok(ComparisonOperator::default()), } } -fn parse_chance(token: Pair) -> Chance { - if token.as_rule() != Rule::Chance { - return Chance::None; - } +fn parse_chance(token: Pair) -> Result { + match_rule(&token, Rule::Chance)?; for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Float => { let value = inner_token.as_str().parse::().unwrap(); - return Chance::Probability(value); + return Ok(Chance::Probability(value)); } Rule::Percentage => { if let Some(integer) = inner_token.into_inner().next() { let value = integer.as_str().parse::().unwrap(); - return Chance::Probability(value as f32 / 100.); + return Ok(Chance::Probability(value as f32 / 100.)); } } Rule::Integer => { let value = inner_token.as_str().parse::().unwrap(); - return Chance::Frequency(value); + return Ok(Chance::Frequency(value)); } _ => {} } } - Chance::None + Ok(Chance::None) } fn match_rule(token: &Pair, expected_rule: Rule) -> Result<(), PalabritasError> { @@ -875,7 +945,7 @@ mod test { use cuentitos_common::{ Block, BlockSettings, Condition, FrequencyModifier, Modifier, Requirement, }; - use pest::iterators::Pair; + use rand::distributions::Alphanumeric; use rand::{self, Rng}; @@ -898,8 +968,7 @@ mod test { #[test] fn parse_database_correctly() { let unparsed_file = include_str!("../../examples/story-example.cuentitos"); - let token = short_parse(Rule::Database, &unparsed_file); - parse_database(token, Config::default()).unwrap(); + parse_database_str(unparsed_file).unwrap(); //TODO: compare with fixture } @@ -919,9 +988,8 @@ mod test { "[{}]\n ({}){}\n ({}){}", snake_case, frequency_1, child_1, frequency_2, child_2 ); - let token = short_parse(Rule::Block, &named_bucket_string); - let mut blocks = Vec::default(); - let named_bucket = parse_block(token, &mut blocks, 0).unwrap_err(); + + let named_bucket = parse_block_str(&named_bucket_string).unwrap_err(); assert_eq!( named_bucket, @@ -943,9 +1011,8 @@ mod test { "[{}]\n ({}){}\n ({}){}", snake_case, frequency, child_1, chance, child_2 ); - let token = short_parse(Rule::Block, &named_bucket_string); - let mut blocks = Vec::default(); - let named_bucket = parse_block(token, &mut blocks, 0).unwrap_err(); + + let named_bucket = parse_block_str(&named_bucket_string).unwrap_err(); assert_eq!( named_bucket, @@ -966,9 +1033,8 @@ mod test { "[{}]\n ({}){}\n {}", snake_case, frequency, child_1, child_2 ); - let token = short_parse(Rule::Block, &named_bucket_string); - let mut blocks = Vec::default(); - let named_bucket = parse_block(token, &mut blocks, 0).unwrap_err(); + + let named_bucket = parse_block_str(&named_bucket_string).unwrap_err(); assert_eq!( named_bucket, @@ -995,11 +1061,10 @@ mod test { "[{} {}]\n ({}){}\n ({}){}", chance_string, snake_case, frequency_1, child_1, frequency_2, child_2 ); - let token = short_parse(Rule::NamedBucket, &named_bucket_string); - let named_bucket = parse_named_bucket(token).unwrap(); - let chance_token = short_parse(Rule::Chance, &chance_string); - let chance = parse_chance(chance_token); + let named_bucket = parse_named_bucket_str(&named_bucket_string).unwrap(); + + let chance = parse_chance_str(&chance_string).unwrap(); let expected_value = Block::Bucket { name: Some(snake_case.clone()), @@ -1010,9 +1075,7 @@ mod test { }; assert_eq!(named_bucket, expected_value); - let mut blocks = Vec::default(); - let token = short_parse(Rule::Block, &named_bucket_string); - parse_block(token, &mut blocks, 0).unwrap(); + let blocks = parse_block_str(&named_bucket_string).unwrap(); let expected_value = Block::Bucket { name: Some(snake_case), @@ -1040,11 +1103,7 @@ mod test { parent, probabiliy_1, child_1, probabiliy_2, child_2 ); - let token = short_parse(Rule::Block, &block_string); - - let mut blocks = Vec::default(); - - parse_block(token, &mut blocks, 0).unwrap(); + let blocks = parse_block_str(&block_string).unwrap(); let expected_text = Block::Text { id: parent, @@ -1072,15 +1131,11 @@ mod test { let float = rand::thread_rng().gen_range(i8::MIN as f32..i8::MAX as f32); let chance_string = format!("({})", float); + let chance = parse_chance_str(&chance_string).unwrap(); let string = make_random_string(); - let choice_string = format!("*{} {}", chance_string, string); - let token = short_parse(Rule::Choice, &choice_string); - let choice = parse_choice(token).unwrap(); - - let chance_token = short_parse(Rule::Chance, &chance_string); - let chance = parse_chance(chance_token); + let choice = parse_choice_str(&choice_string).unwrap(); let expected_settings = BlockSettings { chance, @@ -1100,12 +1155,7 @@ mod test { let identifier = make_random_snake_case(); let section_string = format!("#{}\n", identifier); - let token = short_parse(Rule::Section, §ion_string); - let mut blocks = Vec::default(); - let mut sections = HashMap::default(); - parse_section(token, &mut blocks, &mut sections).unwrap(); - - let section = blocks[0][0].clone(); + let section = parse_section_str(§ion_string).unwrap(); let expected_value = Block::Section { id: identifier, @@ -1127,7 +1177,7 @@ mod test { section_identifier, subsection_identifier_1, subsection_identifier_2 ); - let token = short_parse(Rule::Section, §ion_string); + let token = parse_str(§ion_string, Rule::Section).unwrap(); let mut blocks = Vec::default(); let mut sections = HashMap::default(); parse_section(token, &mut blocks, &mut sections).unwrap(); @@ -1166,11 +1216,8 @@ mod test { let string = make_random_string(); let text_string = format!("{} {}", chance_string, string); - let token = short_parse(Rule::Text, &text_string); - let text = parse_text(token).unwrap(); - - let chance_token = short_parse(Rule::Chance, &chance_string); - let chance = parse_chance(chance_token); + let text = parse_text_str(&text_string).unwrap(); + let chance = parse_chance_str(&chance_string).unwrap(); let expected_settings = BlockSettings { chance, @@ -1208,7 +1255,7 @@ mod test { block_settings.modifiers.push(expected_modifier); - let token = short_parse(Rule::Command, &modifier_string); + let token = parse_str(&modifier_string, Rule::Command).unwrap(); add_command_to_block(token, &mut block).unwrap(); //Divert @@ -1220,20 +1267,19 @@ mod test { subsection: None, }); - let token = short_parse(Rule::Command, &divert_string); + let token = parse_str(&divert_string, Rule::Command).unwrap(); add_command_to_block(token, &mut block).unwrap(); //Unique block_settings.unique = true; - let token = short_parse(Rule::Command, "\n unique"); + let token = parse_str("\n unique", Rule::Command).unwrap(); add_command_to_block(token, &mut block).unwrap(); //Frequency let condition_string = make_random_condition(); - let condition_token = short_parse(Rule::Condition, &condition_string); - let condition = parse_condition(condition_token).unwrap(); + let condition = parse_condition_str(&condition_string).unwrap(); let change_value: i32 = rand::thread_rng().gen(); let frequency_string = format!("\n freq {} {}", condition_string, change_value); @@ -1244,21 +1290,20 @@ mod test { block_settings.frequency_modifiers.push(expected_frequency); - let token = short_parse(Rule::Command, &frequency_string); + let token = parse_str(&frequency_string, Rule::Command).unwrap(); add_command_to_block(token, &mut block).unwrap(); //Requirement let condition_string = make_random_condition(); - let condition_token = short_parse(Rule::Condition, &condition_string); - let condition = parse_condition(condition_token).unwrap(); + let condition = parse_condition_str(&condition_string).unwrap(); let requirement_string = format!("\n req {}", condition_string); let expected_requirement = Requirement { condition }; block_settings.requirements.push(expected_requirement); - let token = short_parse(Rule::Command, &requirement_string); + let token = parse_str(&requirement_string, Rule::Command).unwrap(); add_command_to_block(token, &mut block).unwrap(); let expected_block = Block::Text { @@ -1272,22 +1317,18 @@ mod test { #[test] fn parse_tag_correctly() { //Tag = {"tag" ~ " "+ ~ Identifier} - let identifier = make_random_identifier(); - let tag_string = format!("tag {}", identifier); - - let token = short_parse(Rule::Tag, &tag_string); - let value = parse_tag(token).unwrap(); + let tag_name = make_random_identifier(); + let tag_string = format!("tag {}", tag_name); + let tag = parse_tag_str(&tag_string).unwrap(); - assert_eq!(value, identifier); + assert_eq!(tag, tag_name); } #[test] fn division_by_zero_throws_error() { let identifier = make_random_identifier(); let tag_string = format!("set {} / 0", identifier); - - let token = short_parse(Rule::Modifier, &tag_string); - let value = parse_modifier(token).unwrap_err(); + let value = parse_modifier_str(&tag_string).unwrap_err(); assert_eq!( value, @@ -1305,10 +1346,7 @@ mod test { let parameter_1 = make_random_identifier(); let parameter_2 = make_random_identifier(); let function_string = format!("`{} {} {}`", name, parameter_1, parameter_2); - - let token = short_parse(Rule::Function, &function_string); - let value = parse_function(token).unwrap(); - + let value = parse_function_str(&function_string).unwrap(); let expected_value = Function { name, parameters: vec![parameter_1, parameter_2], @@ -1322,28 +1360,20 @@ mod test { //Divert = { "->" ~ " "* ~ Identifier ~ ("/" ~ Identifier)? } let section = make_random_identifier(); let divert_string = format!("-> {}", section); - let expected_value = NextBlock::Section(SectionKey { section: section.clone(), subsection: None, }); - - let token = short_parse(Rule::Divert, &divert_string); - let divert = parse_divert(token).unwrap(); - + let divert = parse_divert_str(&divert_string).unwrap(); assert_eq!(divert, expected_value); let subsection = make_random_identifier(); - let divert_string = format!("-> {}/{}", section, subsection); - let expected_value = NextBlock::Section(SectionKey { section, subsection: Some(subsection), }); - - let token = short_parse(Rule::Divert, &divert_string); - let divert = parse_divert(token).unwrap(); + let divert = parse_divert_str(&divert_string).unwrap(); assert_eq!(divert, expected_value); } @@ -1354,15 +1384,12 @@ mod test { let variable = make_random_identifier(); let value = rand::thread_rng().gen::().to_string(); let modifier_string = format!("set {} {}", variable, value); - let expected_value = Modifier { variable, value, operator: ModifierOperator::Set, }; - - let token = short_parse(Rule::Modifier, &modifier_string); - let modifier = parse_modifier(token).unwrap(); + let modifier = parse_modifier_str(&modifier_string).unwrap(); assert_eq!(modifier, expected_value); } @@ -1371,18 +1398,14 @@ mod test { fn parse_frequency_correctly() { //Frequency = { "freq" ~ " "+ ~ Condition ~ " "+ ~ ( Float | Integer ) } let condition_string = make_random_condition(); - let condition_token = short_parse(Rule::Condition, &condition_string); - let condition = parse_condition(condition_token).unwrap(); - + let condition = parse_condition_str(&condition_string).unwrap(); let change_value: i32 = rand::thread_rng().gen(); let frequency_string = format!("freq {} {}", condition_string, change_value); let expected_value = FrequencyModifier { condition, value: change_value, }; - - let token = short_parse(Rule::Frequency, &frequency_string); - let frequency = parse_frequency(token).unwrap(); + let frequency = parse_frequency_str(&frequency_string).unwrap(); assert_eq!(frequency, expected_value); } @@ -1391,14 +1414,10 @@ mod test { fn parse_requirement_correctly() { //Requirement = { "req" ~ " "+ ~ Condition } let condition_string = make_random_condition(); - let condition_token = short_parse(Rule::Condition, &condition_string); - let condition = parse_condition(condition_token).unwrap(); - + let condition = parse_condition_str(&condition_string).unwrap(); let requirement_string = format!("req {}", condition_string); let expected_value = Requirement { condition }; - - let token = short_parse(Rule::Requirement, &requirement_string); - let requirement = parse_requirement(token).unwrap(); + let requirement = parse_requirement_str(&requirement_string).unwrap(); assert_eq!(requirement, expected_value); } @@ -1410,8 +1429,7 @@ mod test { let operator_string = COMPARISON_OPERATORS[rand::thread_rng().gen_range(0..COMPARISON_OPERATORS.len())]; - let operator_token = short_parse(Rule::ComparisonOperator, operator_string); - let operator = parse_comparison_operator(operator_token).unwrap(); + let operator = parse_comparison_operator_str(&operator_string).unwrap(); let value: f32 = rand::thread_rng().gen(); @@ -1423,65 +1441,51 @@ mod test { value: value.to_string(), }; - let token = short_parse(Rule::Condition, &condition_string); - let condition = parse_condition(token).unwrap(); - + let condition = parse_condition_str(&condition_string).unwrap(); assert_eq!(condition, expected_value); } #[test] fn parse_comparison_operator_correctly() { //ComparisonOperator = { "!=" | "=" | "<=" | ">=" | "<" | ">" | "!" } - let operator_token = short_parse(Rule::ComparisonOperator, "!="); - let operator = parse_comparison_operator(operator_token).unwrap(); + let operator = parse_comparison_operator_str("!=").unwrap(); assert_eq!(operator, ComparisonOperator::NotEqual); - let operator_token = short_parse(Rule::ComparisonOperator, "="); - let operator = parse_comparison_operator(operator_token).unwrap(); + let operator = parse_comparison_operator_str("=").unwrap(); assert_eq!(operator, ComparisonOperator::Equal); - let operator_token = short_parse(Rule::ComparisonOperator, "<="); - let operator = parse_comparison_operator(operator_token).unwrap(); + let operator = parse_comparison_operator_str("<=").unwrap(); assert_eq!(operator, ComparisonOperator::LessOrEqualThan); - let operator_token = short_parse(Rule::ComparisonOperator, ">="); - let operator = parse_comparison_operator(operator_token).unwrap(); + let operator = parse_comparison_operator_str(">=").unwrap(); assert_eq!(operator, ComparisonOperator::GreaterOrEqualThan); - let operator_token = short_parse(Rule::ComparisonOperator, "<"); - let operator = parse_comparison_operator(operator_token).unwrap(); + let operator = parse_comparison_operator_str("<").unwrap(); assert_eq!(operator, ComparisonOperator::LessThan); - let operator_token = short_parse(Rule::ComparisonOperator, ">"); - let operator = parse_comparison_operator(operator_token).unwrap(); + let operator = parse_comparison_operator_str(">").unwrap(); assert_eq!(operator, ComparisonOperator::GreaterThan); - let operator_token = short_parse(Rule::ComparisonOperator, "!"); - let operator = parse_comparison_operator(operator_token).unwrap(); + let operator = parse_comparison_operator_str("!").unwrap(); assert_eq!(operator, ComparisonOperator::NotEqual); } #[test] fn parse_modifier_operator_correctly() { //ModifierOperator = {"+" | "-" | "*" | "/" | "="} - let operator_token = short_parse(Rule::ModifierOperator, "+"); - let operator = parse_modifier_operator(operator_token).unwrap(); + let operator = parse_modifier_operator_str("+").unwrap(); assert_eq!(operator, ModifierOperator::Add); - let operator_token = short_parse(Rule::ModifierOperator, "-"); - let operator = parse_modifier_operator(operator_token).unwrap(); + let operator = parse_modifier_operator_str("-").unwrap(); assert_eq!(operator, ModifierOperator::Substract); - let operator_token = short_parse(Rule::ModifierOperator, "*"); - let operator = parse_modifier_operator(operator_token).unwrap(); + let operator = parse_modifier_operator_str("*").unwrap(); assert_eq!(operator, ModifierOperator::Multiply); - let operator_token = short_parse(Rule::ModifierOperator, "/"); - let operator = parse_modifier_operator(operator_token).unwrap(); + let operator = parse_modifier_operator_str("/").unwrap(); assert_eq!(operator, ModifierOperator::Divide); - let operator_token = short_parse(Rule::ModifierOperator, "="); - let operator = parse_modifier_operator(operator_token).unwrap(); + let operator = parse_modifier_operator_str("=").unwrap(); assert_eq!(operator, ModifierOperator::Set); } @@ -1489,64 +1493,16 @@ mod test { fn parse_not_equal_condition_correctly() { /*Condition = { Identifier ~ " "* ~ (ComparisonOperator ~ " "*)? ~ Value } */ let variable = make_random_identifier(); - let condition_string = format!("!{}", variable); - let expected_value = Condition { variable, operator: ComparisonOperator::NotEqual, value: "true".to_string(), }; - - let token = short_parse(Rule::Condition, &condition_string); - let condition = parse_condition(token).unwrap(); + let condition = parse_condition_str(&condition_string).unwrap(); assert_eq!(condition, expected_value); } - #[test] - fn parse_operators_correctly() { - let token = short_parse(Rule::ComparisonOperator, "="); - assert_eq!( - parse_comparison_operator(token).unwrap(), - ComparisonOperator::Equal - ); - - let token = short_parse(Rule::ComparisonOperator, "!="); - assert_eq!( - parse_comparison_operator(token).unwrap(), - ComparisonOperator::NotEqual - ); - - let token = short_parse(Rule::ComparisonOperator, "<"); - assert_eq!( - parse_comparison_operator(token).unwrap(), - ComparisonOperator::LessThan - ); - - let token = short_parse(Rule::ComparisonOperator, ">"); - assert_eq!( - parse_comparison_operator(token).unwrap(), - ComparisonOperator::GreaterThan - ); - - let token = short_parse(Rule::ComparisonOperator, "<="); - assert_eq!( - parse_comparison_operator(token).unwrap(), - ComparisonOperator::LessOrEqualThan - ); - - let token = short_parse(Rule::ComparisonOperator, ">="); - assert_eq!( - parse_comparison_operator(token).unwrap(), - ComparisonOperator::GreaterOrEqualThan - ); - - let token = short_parse(Rule::ComparisonOperator, "!"); - assert_eq!( - parse_comparison_operator(token).unwrap(), - ComparisonOperator::NotEqual - ); - } #[test] fn parse_char_rule() { @@ -1817,12 +1773,7 @@ mod test { let identifier = make_random_snake_case(); let section_string = format!("# {}\n req test\n", identifier); - let token = short_parse(Rule::Section, §ion_string); - let mut blocks = Vec::default(); - let mut sections = HashMap::default(); - parse_section(token, &mut blocks, &mut sections).unwrap(); - - let section = blocks[0][0].clone(); + let section = parse_section_str(§ion_string).unwrap(); let expected_value = Block::Section { id: identifier, @@ -1995,10 +1946,10 @@ mod test { *string = final_string; } - fn short_parse(rule: Rule, input: &str) -> Pair { - PalabritasParser::parse(rule, input) - .expect("unsuccessful parse") - .next() - .unwrap() + fn parse_block_str(input: &str) -> Result>, PalabritasError> { + let token = parse_str(input, Rule::Block)?; + let mut blocks = Vec::default(); + parse_block(token, &mut blocks, 0)?; + Ok(blocks) } } diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index 39234eb..2544fbb 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -10,6 +10,7 @@ use cuentitos_common::Condition; use cuentitos_common::Database; use cuentitos_common::Function; use cuentitos_common::LanguageId; +use cuentitos_common::Modifier; use cuentitos_common::SectionKey; use cuentitos_common::VariableKind; use rand::Rng; @@ -232,6 +233,41 @@ impl Runtime { Err("Invalid Variable".to_string()) } + pub fn apply_modifier(&mut self, modifier: &Modifier) -> Result<(), String> { + match self.get_variable_kind(&modifier.variable) { + Some(kind) => match kind { + VariableKind::Integer => { + let value = &modifier.value.parse::(); + match value { + Ok(value) => { + self.apply_integer_modifier(&modifier.variable, *value, &modifier.operator) + } + Err(e) => Err(e.to_string()), + } + } + VariableKind::Float => { + let value = &modifier.value.parse::(); + match value { + Ok(value) => self.apply_float_modifier(&modifier.variable, *value, &modifier.operator), + Err(e) => Err(e.to_string()), + } + } + VariableKind::Bool => { + let value = &modifier.value.parse::(); + match value { + Ok(value) => self.set_variable(&modifier.variable, *value), + Err(e) => Err(e.to_string()), + } + } + _ => self.set_variable(&modifier.variable, modifier.value.clone()), + }, + None => Err(format!( + "Can't modify variable {}, because it doesn't exists", + modifier.variable + )), + } + } + fn next_block_meets_requirements(&mut self) -> bool { if let Some(id) = self.block_stack.last() { self.meets_requirements(*id) @@ -436,45 +472,8 @@ impl Runtime { let id = self.block_stack.last().unwrap(); let block = self.get_block(*id); for modifier in block.get_settings().modifiers.clone() { - match self.get_variable_kind(&modifier.variable) { - Some(kind) => match kind { - VariableKind::Integer => { - let value = &modifier.value.parse::(); - match value { - Ok(value) => { - self.apply_integer_modifier(&modifier.variable, *value, &modifier.operator)?; - } - Err(e) => return Err(e.to_string()), - } - } - VariableKind::Float => { - let value = &modifier.value.parse::(); - match value { - Ok(value) => { - self.apply_float_modifier(&modifier.variable, *value, &modifier.operator)?; - } - Err(e) => return Err(e.to_string()), - } - } - VariableKind::Bool => { - let value = &modifier.value.parse::(); - match value { - Ok(value) => { - self.set_variable(&modifier.variable, *value)?; - } - Err(e) => return Err(e.to_string()), - } - } - _ => { - self.set_variable(&modifier.variable, modifier.value)?; - } - }, - None => { - return Err("Can't modify variable {:?} because it doesn't exists.".to_string()); - } - } + self.apply_modifier(&modifier)?; } - Ok(()) } From d9c5a0e75448cf8af3c8d969b04771e6cb0e476d Mon Sep 17 00:00:00 2001 From: loomstyla Date: Fri, 30 Jun 2023 17:49:50 -0300 Subject: [PATCH 23/94] i18n refactor --- common/src/i18n.rs | 15 ++++++ compiler/.csv | 1 + compiler/en.csv | 100 +++++++++++++++++++-------------------- compiler/src/i18n.rs | 39 ++++----------- compiler/src/lib.rs | 13 ++--- palabritas/src/parser.rs | 67 +++++++++++++++++++------- 6 files changed, 128 insertions(+), 107 deletions(-) create mode 100644 compiler/.csv diff --git a/common/src/i18n.rs b/common/src/i18n.rs index dd24261..18276b7 100644 --- a/common/src/i18n.rs +++ b/common/src/i18n.rs @@ -1,6 +1,8 @@ use serde::{Deserialize, Serialize}; use std::collections::HashMap; +use crate::Config; + pub type I18nId = String; pub type LanguageDb = HashMap; pub type LanguageId = String; @@ -16,7 +18,20 @@ impl I18n { pub fn has_locale(&self, locale: &String) -> bool { self.locales.contains(locale) } + pub fn from_config(config: &Config) -> Self { + let mut i18n = I18n { + locales: config.locales.clone(), + default_locale: config.default_locale.clone(), + ..Default::default() + }; + for locale in &i18n.locales { + i18n + .strings + .insert(locale.to_string(), LanguageDb::default()); + } + i18n + } pub fn get_translation(&self, locale: &str, text: &str) -> String { if let Some(strings) = self.strings.get(locale) { match strings.get(text) { diff --git a/compiler/.csv b/compiler/.csv new file mode 100644 index 0000000..290d89b --- /dev/null +++ b/compiler/.csv @@ -0,0 +1 @@ +Id,Text diff --git a/compiler/en.csv b/compiler/en.csv index defef69..6b74221 100644 --- a/compiler/en.csv +++ b/compiler/en.csv @@ -1,51 +1,51 @@ Id,Text -"As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses.","As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses." -"I keep walking, even if the murals look good, the darkness of the alley is unsettling.","I keep walking, even if the murals look good, the darkness of the alley is unsettling." -"You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand.","You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand." -You get to the museum door. You watch through the window. It seems crowded.,You get to the museum door. You watch through the window. It seems crowded. -Explore a museum,Explore a museum -You decide to focus on the now...,You decide to focus on the now... -You feel they're too busy to bother them with questions.,You feel they're too busy to bother them with questions. -"Feeling depleted of spoons, you go right back to bed.","Feeling depleted of spoons, you go right back to bed." -Go to the Farmer's Market,Go to the Farmer's Market -"The phone rings twice, and dad picks up. You have a good chat.","The phone rings twice, and dad picks up. You have a good chat." -I make some tea,I make some tea -The moonlight gives the room a peaceful tone.,The moonlight gives the room a peaceful tone. -"Wandering the market, you stumble upon a hidden alley adorned with vibrant street art.","Wandering the market, you stumble upon a hidden alley adorned with vibrant street art." -"Each colorful mural tells a different story, capturing your imagination and sparking your creativity.","Each colorful mural tells a different story, capturing your imagination and sparking your creativity." -"As you enter the peaceful sanctuary of your room, you take a deep breath, relieved to have a quiet space where you can recharge and prepare for the challenges ahead.","As you enter the peaceful sanctuary of your room, you take a deep breath, relieved to have a quiet space where you can recharge and prepare for the challenges ahead." -I call my parents,I call my parents -"A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise.","A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise." -I go to bed,I go to bed -"Feeling mentally and physically exhausted from the day's adventures, you decide it's time to head back to your hotel.","Feeling mentally and physically exhausted from the day's adventures, you decide it's time to head back to your hotel." -I take a walk through a nearby park to relax and acclimate to the city.,I take a walk through a nearby park to relax and acclimate to the city. -"You've just arrived in the bustling city, full of excitement and anticipation for your new job.","You've just arrived in the bustling city, full of excitement and anticipation for your new job." -"This unexpected oasis of visual tranquility provides a respite from the chaos of the city, inspiring you to explore more of the urban canvas and the stories it holds.","This unexpected oasis of visual tranquility provides a respite from the chaos of the city, inspiring you to explore more of the urban canvas and the stories it holds." -"You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer.","You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer." -You start to think about all the stuff you need to do tomorrow.,You start to think about all the stuff you need to do tomorrow. -"At the bustling street market, you discover a food stand offering mouthwa tering delicacies.","At the bustling street market, you discover a food stand offering mouthwa tering delicacies." -The sun shines bright through the window.,The sun shines bright through the window. -"The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers.","The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers." -I leave two dollars to the artist.,I leave two dollars to the artist. -This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city.,This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. -You sit in the couch to enjoy your tea. Drink half of the cup and fall asleep.,You sit in the couch to enjoy your tea. Drink half of the cup and fall asleep. -You decide it's now time to go to sleep.,You decide it's now time to go to sleep. -You wake up feeling refreshed. Let's see what this day brings.,You wake up feeling refreshed. Let's see what this day brings. -You get to the farmer's market. It's very early and some stands are still being set up.,You get to the farmer's market. It's very early and some stands are still being set up. -A good cup of tea is always good to regulate after the sensory overload of the city.,A good cup of tea is always good to regulate after the sensory overload of the city. -"You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape.","You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape." -That makes you feel overwhelmed.,That makes you feel overwhelmed. -"You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them.","You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them." -"I nod when the musician looks my way, to show I really enjoy the music.","I nod when the musician looks my way, to show I really enjoy the music." -"The skyline reaches for the clouds, and the sounds of traffic and people surround you.","The skyline reaches for the clouds, and the sounds of traffic and people surround you." -"As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment.","As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment." -I visit a popular street market to experience the city's unique flavors and energy.,I visit a popular street market to experience the city's unique flavors and energy. -"As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician.","As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician." -"You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts.","You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts." -"The phone rings twice, and mom picks up. You have a good chat.","The phone rings twice, and mom picks up. You have a good chat." -"The phone rings ten times, nobody is at home.","The phone rings ten times, nobody is at home." -"The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise.","The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise." -"You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations.","You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations." -"You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction.","You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction." -The musician smiles and nods thanking you.,The musician smiles and nods thanking you. -I grab my phone and take pictures of the murals.,I grab my phone and take pictures of the murals. +6,"You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts." +22,"The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers." +25,"The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise." +31,"Each colorful mural tells a different story, capturing your imagination and sparking your creativity." +40,The moonlight gives the room a peaceful tone. +64,"The phone rings twice, and dad picks up. You have a good chat." +86,You get to the museum door. You watch through the window. It seems crowded. +57,"Feeling depleted of spoons, you go right back to bed." +4,I take a walk through a nearby park to relax and acclimate to the city. +27,I leave two dollars to the artist. +34,"This unexpected oasis of visual tranquility provides a respite from the chaos of the city, inspiring you to explore more of the urban canvas and the stories it holds." +42,You start to think about all the stuff you need to do tomorrow. +36,"Feeling mentally and physically exhausted from the day's adventures, you decide it's time to head back to your hotel." +79,You wake up feeling refreshed. Let's see what this day brings. +21,"You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction." +13,"You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer." +80,Explore a museum +14,"You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations." +17,"You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand." +3,"As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment." +1,"You've just arrived in the bustling city, full of excitement and anticipation for your new job." +18,"You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them." +38,The sun shines bright through the window. +56,I go to bed +44,That makes you feel overwhelmed. +9,I visit a popular street market to experience the city's unique flavors and energy. +67,"The phone rings twice, and mom picks up. You have a good chat." +7,"A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise." +26,"You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape." +51,A good cup of tea is always good to regulate after the sensory overload of the city. +52,You sit in the couch to enjoy your tea. Drink half of the cup and fall asleep. +5,"As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses." +49,I make some tea +71,"The phone rings ten times, nobody is at home." +61,I call my parents +82,Go to the Farmer's Market +23,You feel they're too busy to bother them with questions. +32,I grab my phone and take pictures of the murals. +89,You get to the farmer's market. It's very early and some stands are still being set up. +73,You decide it's now time to go to sleep. +28,The musician smiles and nods thanking you. +47,You decide to focus on the now... +37,"As you enter the peaceful sanctuary of your room, you take a deep breath, relieved to have a quiet space where you can recharge and prepare for the challenges ahead." +2,"The skyline reaches for the clouds, and the sounds of traffic and people surround you." +10,"At the bustling street market, you discover a food stand offering mouthwa tering delicacies." +29,"I nod when the musician looks my way, to show I really enjoy the music." +33,"I keep walking, even if the murals look good, the darkness of the alley is unsettling." +30,"Wandering the market, you stumble upon a hidden alley adorned with vibrant street art." +24,"As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician." +8,This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. diff --git a/compiler/src/i18n.rs b/compiler/src/i18n.rs index 9e0287f..9e974e6 100644 --- a/compiler/src/i18n.rs +++ b/compiler/src/i18n.rs @@ -1,6 +1,6 @@ use std::path::Path; -use cuentitos_common::{Database, LanguageDb}; +use cuentitos_common::Database; type Record = (String, String); @@ -8,48 +8,27 @@ pub struct I18n {} impl I18n { pub fn process( - database: &Database, + database: &mut Database, base_path: T, destination_path: U, - ) -> std::io::Result + ) -> std::io::Result<()> where T: AsRef, U: AsRef, { - let mut i18n = cuentitos_common::I18n { - locales: database.config.locales.clone(), - default_locale: database.config.default_locale.clone(), - ..Default::default() - }; - - for locale in &i18n.locales { - i18n - .strings - .insert(locale.to_string(), LanguageDb::default()); - } - - // Setup default locale - for block in &database.blocks { - if let Some(i18n_id) = block.get_i18n_id() { - if let Some(db) = i18n.strings.get_mut(&i18n.default_locale) { - db.insert(i18n_id.clone(), i18n_id); - } - } - } - // Load existing locales let mut base_path = base_path.as_ref().to_path_buf(); base_path.push("locales"); - for locale in &i18n.locales { - if locale != &i18n.default_locale { + for locale in &database.i18n.locales { + if locale != &database.i18n.default_locale { let mut path = base_path.clone(); path.push(format!("{}.csv", locale)); if path.is_file() { let mut reader = csv::Reader::from_path(path)?; - if let Some(db) = i18n.strings.get_mut(locale) { + if let Some(db) = database.i18n.strings.get_mut(locale) { for result in reader.deserialize() { let record: Record = result?; if record.0.is_empty() && record.1.is_empty() { @@ -70,15 +49,15 @@ impl I18n { std::fs::create_dir_all(&path)?; - path.push(format!("{}.csv", i18n.default_locale)); + path.push(format!("{}.csv", database.i18n.default_locale)); let mut wtr = csv::Writer::from_path(path)?; wtr.write_record(["Id", "Text"])?; - for record in i18n.strings[&i18n.default_locale].iter() { + for record in database.i18n.strings[&database.i18n.default_locale].iter() { wtr.serialize(record)?; } - Ok(i18n) + Ok(()) } } diff --git a/compiler/src/lib.rs b/compiler/src/lib.rs index 8cfcfb1..d504eaf 100644 --- a/compiler/src/lib.rs +++ b/compiler/src/lib.rs @@ -23,15 +23,10 @@ where } }; - let i18n = match I18n::process(&db, source_path, &destination_path) { - Ok(i18n) => i18n, - Err(e) => { - println!("{}", e); - return; - } - }; - - db.i18n = i18n; + if let Err(error) = I18n::process(&mut db, source_path, &destination_path) { + println!("{}", error); + return; + } let mut buf: Vec = Vec::new(); let mut serializer = Serializer::new(&mut buf); diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index abbf15a..cb52be8 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -6,7 +6,7 @@ use cuentitos_common::condition::ComparisonOperator; use cuentitos_common::modifier::ModifierOperator; use cuentitos_common::{ Block, BlockId, BlockSettings, Chance, Condition, Config, Database, FrequencyModifier, Function, - Modifier, NextBlock, Requirement, SectionKey, + I18n, Modifier, NextBlock, Requirement, SectionKey, }; use pest::{iterators::Pair, Parser}; @@ -57,11 +57,8 @@ where }; match PalabritasParser::parse(Rule::Database, &str) { - Ok(mut result) => match parse_database(result.next().unwrap()) { - Ok(mut database) => { - database.config = config; - Ok(database) - } + Ok(mut result) => match parse_database(result.next().unwrap(), config) { + Ok(database) => Ok(database), Err(error) => Err(error), }, Err(error) => { @@ -80,18 +77,20 @@ where } } -pub fn parse_database(token: Pair) -> Result { +pub fn parse_database(token: Pair, config: Config) -> Result { match_rule(&token, Rule::Database)?; let mut blocks: Vec> = Vec::default(); + let mut i18n = I18n::from_config(&config); + let mut sections = HashMap::default(); // pub sections: HashMap for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Block => { - parse_block(inner_token, &mut blocks, 0)?; + parse_block(inner_token, &mut blocks, 0, &mut i18n)?; } Rule::Section => { - parse_section(inner_token, &mut blocks, &mut sections)?; + parse_section(inner_token, &mut blocks, &mut sections, &mut i18n)?; } _ => {} } @@ -126,13 +125,14 @@ pub fn parse_database(token: Pair) -> Result { Ok(Database { blocks: ordered_blocks, sections, + i18n, ..Default::default() }) } pub fn parse_database_str(input: &str) -> Result { let token = parse_str(input, Rule::Database)?; - parse_database(token) + parse_database(token, Config::default()) } pub fn parse_text_str(input: &str) -> Result { @@ -162,7 +162,12 @@ pub fn parse_choice_str(input: &str) -> Result { pub fn parse_section_str(input: &str) -> Result { let token = parse_str(input, Rule::Section)?; - parse_section(token, &mut Vec::default(), &mut HashMap::default()) + parse_section( + token, + &mut Vec::default(), + &mut HashMap::default(), + &mut I18n::default(), + ) } pub fn parse_tag_str(input: &str) -> Result { @@ -236,6 +241,7 @@ fn parse_section( token: Pair, blocks: &mut Vec>, sections: &mut HashMap, + i18n: &mut I18n, ) -> Result { match_rule(&token, Rule::Section)?; if blocks.is_empty() { @@ -258,12 +264,12 @@ fn parse_section( } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { - parse_block(inner_blocks_token, blocks, 1)?; + parse_block(inner_blocks_token, blocks, 1, i18n)?; settings.children.push(blocks[1].len() - 1); } } Rule::Subsection => { - parse_subsection(inner_token, blocks, &id, sections)?; + parse_subsection(inner_token, blocks, &id, sections, i18n)?; } _ => {} } @@ -288,6 +294,7 @@ fn parse_subsection( blocks: &mut Vec>, section_name: &str, sections: &mut HashMap, + i18n: &mut I18n, ) -> Result<(), PalabritasError> { match_rule(&token, Rule::Subsection)?; @@ -311,12 +318,12 @@ fn parse_subsection( } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { - parse_block(inner_blocks_token, blocks, 1)?; + parse_block(inner_blocks_token, blocks, 1, i18n)?; settings.children.push(blocks[1].len() - 1); } } Rule::Subsection => { - parse_subsection(inner_token, blocks, section_name, sections)?; + parse_subsection(inner_token, blocks, section_name, sections, i18n)?; } _ => {} } @@ -337,6 +344,7 @@ fn parse_block( token: Pair, blocks: &mut Vec>, child_order: usize, + i18n: &mut I18n, ) -> Result<(), PalabritasError> { match_rule(&token, Rule::Block)?; @@ -360,7 +368,7 @@ fn parse_block( Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { let settings = block.get_settings_mut(); - parse_block(inner_blocks_token, blocks, child_order + 1)?; + parse_block(inner_blocks_token, blocks, child_order + 1, i18n)?; settings.children.push(blocks[child_order + 1].len() - 1); } } @@ -372,6 +380,29 @@ fn parse_block( blocks.push(Vec::default()); } + if let Some(i18n_id) = block.get_i18n_id() { + if let Some(db) = i18n.strings.get_mut(&i18n.default_locale) { + let new_id = current_line.to_string(); + db.insert(new_id.clone(), i18n_id); + + match block { + Block::Text { id: _, settings } => { + block = Block::Text { + id: new_id, + settings, + }; + } + Block::Choice { id: _, settings } => { + block = Block::Choice { + id: new_id, + settings, + }; + } + _ => {} + } + } + } + blocks[child_order].push(block); let block_id = blocks[child_order].len() - 1; @@ -1180,7 +1211,7 @@ mod test { let token = parse_str(§ion_string, Rule::Section).unwrap(); let mut blocks = Vec::default(); let mut sections = HashMap::default(); - parse_section(token, &mut blocks, &mut sections).unwrap(); + parse_section(token, &mut blocks, &mut sections, &mut I18n::default()).unwrap(); let section = blocks[0][0].clone(); @@ -1949,7 +1980,7 @@ mod test { fn parse_block_str(input: &str) -> Result>, PalabritasError> { let token = parse_str(input, Rule::Block)?; let mut blocks = Vec::default(); - parse_block(token, &mut blocks, 0)?; + parse_block(token, &mut blocks, 0, &mut I18n::default())?; Ok(blocks) } } From b56cbbe74892495a5e90e1a2c2ba10714eed2e4a Mon Sep 17 00:00:00 2001 From: loomstyla Date: Fri, 30 Jun 2023 18:49:15 -0300 Subject: [PATCH 24/94] varaible validations --- palabritas/src/error.rs | 27 +++++- palabritas/src/parser.rs | 196 +++++++++++++++++++++++++++++++-------- 2 files changed, 185 insertions(+), 38 deletions(-) diff --git a/palabritas/src/error.rs b/palabritas/src/error.rs index 650d895..9f217bc 100644 --- a/palabritas/src/error.rs +++ b/palabritas/src/error.rs @@ -25,9 +25,19 @@ pub enum PalabritasError { rule_found: Rule, }, DivisionByZero(ErrorInfo), + VariableDoesntExist { + info: ErrorInfo, + variable: String, + }, + InvalidVariableValue { + info: ErrorInfo, + variable: String, + value: String, + variable_type: String, + }, } -#[derive(Debug, PartialEq, Eq)] +#[derive(Debug, PartialEq, Eq, Clone)] pub struct ErrorInfo { pub line: usize, pub string: String, @@ -93,6 +103,21 @@ impl Display for PalabritasError { PalabritasError::DivisionByZero(path) => { write!(f, "Can't divide by zero: {:?}", path) } + PalabritasError::VariableDoesntExist { info, variable } => { + write!(f, "Variable {} doesn't exist.\n{}", variable, info) + } + PalabritasError::InvalidVariableValue { + info, + variable, + value, + variable_type, + } => { + write!( + f, + "Invalid value for variable {}. Expected {}, but found {}\n{}", + variable, value, variable_type, info + ) + } } } } diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index cb52be8..04be2fa 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -87,10 +87,10 @@ pub fn parse_database(token: Pair, config: Config) -> Result { - parse_block(inner_token, &mut blocks, 0, &mut i18n)?; + parse_block(inner_token, &mut blocks, 0, &mut i18n, &config)?; } Rule::Section => { - parse_section(inner_token, &mut blocks, &mut sections, &mut i18n)?; + parse_section(inner_token, &mut blocks, &mut sections, &mut i18n, &config)?; } _ => {} } @@ -152,7 +152,7 @@ pub fn parse_chance_str(input: &str) -> Result { pub fn parse_condition_str(input: &str) -> Result { let token = parse_str(input, Rule::Condition)?; - parse_condition(token) + parse_condition(token, &Config::default()) } pub fn parse_choice_str(input: &str) -> Result { @@ -167,6 +167,7 @@ pub fn parse_section_str(input: &str) -> Result { &mut Vec::default(), &mut HashMap::default(), &mut I18n::default(), + &Config::default(), ) } @@ -187,17 +188,17 @@ pub fn parse_divert_str(input: &str) -> Result { pub fn parse_modifier_str(input: &str) -> Result { let token = parse_str(input, Rule::Modifier)?; - parse_modifier(token) + parse_modifier(token, &Config::default()) } pub fn parse_frequency_str(input: &str) -> Result { let token = parse_str(input, Rule::Frequency)?; - parse_frequency(token) + parse_frequency(token, &Config::default()) } pub fn parse_requirement_str(input: &str) -> Result { let token = parse_str(input, Rule::Requirement)?; - parse_requirement(token) + parse_requirement(token, &Config::default()) } pub fn parse_comparison_operator_str(input: &str) -> Result { @@ -242,6 +243,7 @@ fn parse_section( blocks: &mut Vec>, sections: &mut HashMap, i18n: &mut I18n, + config: &Config, ) -> Result { match_rule(&token, Rule::Section)?; if blocks.is_empty() { @@ -260,16 +262,16 @@ fn parse_section( id = inner_token.as_str().to_string(); } Rule::Command => { - add_command_to_settings(inner_token, &mut settings)?; + add_command_to_settings(inner_token, &mut settings, config)?; } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { - parse_block(inner_blocks_token, blocks, 1, i18n)?; + parse_block(inner_blocks_token, blocks, 1, i18n, config)?; settings.children.push(blocks[1].len() - 1); } } Rule::Subsection => { - parse_subsection(inner_token, blocks, &id, sections, i18n)?; + parse_subsection(inner_token, blocks, &id, sections, i18n, config)?; } _ => {} } @@ -295,6 +297,7 @@ fn parse_subsection( section_name: &str, sections: &mut HashMap, i18n: &mut I18n, + config: &Config, ) -> Result<(), PalabritasError> { match_rule(&token, Rule::Subsection)?; @@ -314,16 +317,16 @@ fn parse_subsection( id = inner_token.as_str().to_string(); } Rule::Command => { - add_command_to_settings(inner_token, &mut settings)?; + add_command_to_settings(inner_token, &mut settings, config)?; } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { - parse_block(inner_blocks_token, blocks, 1, i18n)?; + parse_block(inner_blocks_token, blocks, 1, i18n, config)?; settings.children.push(blocks[1].len() - 1); } } Rule::Subsection => { - parse_subsection(inner_token, blocks, section_name, sections, i18n)?; + parse_subsection(inner_token, blocks, section_name, sections, i18n, config)?; } _ => {} } @@ -345,6 +348,7 @@ fn parse_block( blocks: &mut Vec>, child_order: usize, i18n: &mut I18n, + config: &Config, ) -> Result<(), PalabritasError> { match_rule(&token, Rule::Block)?; @@ -363,12 +367,12 @@ fn parse_block( block = parse_choice(inner_token)?; } Rule::Command => { - add_command_to_block(inner_token, &mut block)?; + add_command_to_block(inner_token, &mut block, config)?; } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { let settings = block.get_settings_mut(); - parse_block(inner_blocks_token, blocks, child_order + 1, i18n)?; + parse_block(inner_blocks_token, blocks, child_order + 1, i18n, config)?; settings.children.push(blocks[child_order + 1].len() - 1); } } @@ -702,6 +706,7 @@ fn parse_text(token: Pair) -> Result { fn add_command_to_settings( token: Pair, settings: &mut BlockSettings, + config: &Config, ) -> Result<(), PalabritasError> { match_rule(&token, Rule::Command)?; @@ -709,15 +714,15 @@ fn add_command_to_settings( match inner_token.as_rule() { //Command = {NewLine ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert | Function | Unique | Tag) } Rule::Requirement => { - let requirement = parse_requirement(inner_token)?; + let requirement = parse_requirement(inner_token, config)?; settings.requirements.push(requirement); } Rule::Frequency => { - let frequency = parse_frequency(inner_token)?; + let frequency = parse_frequency(inner_token, config)?; settings.frequency_modifiers.push(frequency); } Rule::Modifier => { - let modifier = parse_modifier(inner_token)?; + let modifier = parse_modifier(inner_token, config)?; settings.modifiers.push(modifier); } Rule::Divert => { @@ -740,9 +745,13 @@ fn add_command_to_settings( Ok(()) } -fn add_command_to_block(token: Pair, block: &mut Block) -> Result<(), PalabritasError> { +fn add_command_to_block( + token: Pair, + block: &mut Block, + config: &Config, +) -> Result<(), PalabritasError> { let settings = block.get_settings_mut(); - add_command_to_settings(token, settings) + add_command_to_settings(token, settings, config) } fn parse_function(token: Pair) -> Result { @@ -803,11 +812,13 @@ fn parse_divert(token: Pair) -> Result { } } -fn parse_modifier(token: Pair) -> Result { +fn parse_modifier(token: Pair, config: &Config) -> Result { match_rule(&token, Rule::Modifier)?; //Modifier = { "set" ~ " "+ ~ ( (Identifier ~ " "+ ~ ModifierOperator? ~ Value) | (NotOperator? ~ " "* ~ Identifier) ) ~ " "* } - let line = token.line_col().0; - let string = token.as_str().to_string(); + let error_info = ErrorInfo { + line: token.line_col().0, + string: token.as_str().to_string(), + }; let mut modifier = Modifier::default(); for inner_token in token.into_inner() { match inner_token.as_rule() { @@ -831,13 +842,85 @@ fn parse_modifier(token: Pair) -> Result { } } + check_variable_existance(&modifier.variable, config, &error_info)?; + check_variable_value_matches_type(&modifier.variable, &modifier.value, config, &error_info)?; + if modifier.operator == ModifierOperator::Divide && modifier.value == *"0" { - Err(PalabritasError::DivisionByZero(ErrorInfo { line, string })) + Err(PalabritasError::DivisionByZero(error_info)) } else { Ok(modifier) } } +fn check_variable_existance( + variable: &str, + config: &Config, + error_info: &ErrorInfo, +) -> Result<(), PalabritasError> { + if config.variables.get(variable).is_some() { + Ok(()) + } else { + Err(PalabritasError::VariableDoesntExist { + info: error_info.clone(), + variable: variable.to_string(), + }) + } +} + +fn check_variable_value_matches_type( + variable: &str, + value: &str, + config: &Config, + error_info: &ErrorInfo, +) -> Result<(), PalabritasError> { + if let Some(kind) = config.variables.get(variable) { + match kind { + cuentitos_common::VariableKind::Integer => { + if value.parse::().is_ok() { + Ok(()) + } else { + Err(PalabritasError::InvalidVariableValue { + info: error_info.clone(), + variable: variable.to_string(), + value: value.to_string(), + variable_type: format!("{:?}", kind), + }) + } + } + cuentitos_common::VariableKind::Float => { + if value.parse::().is_ok() { + Ok(()) + } else { + Err(PalabritasError::InvalidVariableValue { + info: error_info.clone(), + variable: variable.to_string(), + value: value.to_string(), + variable_type: format!("{:?}", kind), + }) + } + } + cuentitos_common::VariableKind::Bool => { + if value.parse::().is_ok() { + Ok(()) + } else { + Err(PalabritasError::InvalidVariableValue { + info: error_info.clone(), + variable: variable.to_string(), + value: value.to_string(), + variable_type: format!("{:?}", kind), + }) + } + } + _ => Ok(()), + } + } else { + Err(PalabritasError::VariableDoesntExist { + info: error_info.clone(), + variable: variable.to_string(), + }) + } +} + fn parse_modifier_operator(token: Pair) -> Result { //ModifierOperator = {"+" | "-" | "*" | "/" | "="} match_rule(&token, Rule::ModifierOperator)?; @@ -851,14 +934,17 @@ fn parse_modifier_operator(token: Pair) -> Result Ok(ModifierOperator::default()), } } -fn parse_frequency(token: Pair) -> Result { +fn parse_frequency( + token: Pair, + config: &Config, +) -> Result { match_rule(&token, Rule::Frequency)?; let mut frequency = FrequencyModifier::default(); for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Condition => { - frequency.condition = parse_condition(inner_token)?; + frequency.condition = parse_condition(inner_token, config)?; } Rule::Float | Rule::Integer => { @@ -872,22 +958,26 @@ fn parse_frequency(token: Pair) -> Result) -> Result { +fn parse_requirement(token: Pair, config: &Config) -> Result { match_rule(&token, Rule::Requirement)?; let mut condition = Condition::default(); for inner_token in token.into_inner() { if inner_token.as_rule() == Rule::Condition { - condition = parse_condition(inner_token)?; + condition = parse_condition(inner_token, config)?; } } Ok(Requirement { condition }) } -fn parse_condition(token: Pair) -> Result { +fn parse_condition(token: Pair, config: &Config) -> Result { match_rule(&token, Rule::Condition)?; //Condition = { ( Identifier ~ " "* ~ ( ComparisonOperator ~ " "* )? ~ Value? ) | ( NotEqualOperator? ~ " "* ~ Identifier ~ " "*) } + let error_info = ErrorInfo { + line: token.line_col().0, + string: token.as_str().to_string(), + }; let mut condition = Condition::default(); @@ -908,6 +998,9 @@ fn parse_condition(token: Pair) -> Result { _ => {} } } + + check_variable_existance(&condition.variable, config, &error_info)?; + check_variable_value_matches_type(&condition.variable, &condition.value, config, &error_info)?; Ok(condition) } @@ -974,7 +1067,7 @@ mod test { use crate::parser::*; use cuentitos_common::{ - Block, BlockSettings, Condition, FrequencyModifier, Modifier, Requirement, + Block, BlockSettings, Condition, FrequencyModifier, Modifier, Requirement, VariableKind, }; use rand::distributions::Alphanumeric; @@ -1211,7 +1304,14 @@ mod test { let token = parse_str(§ion_string, Rule::Section).unwrap(); let mut blocks = Vec::default(); let mut sections = HashMap::default(); - parse_section(token, &mut blocks, &mut sections, &mut I18n::default()).unwrap(); + parse_section( + token, + &mut blocks, + &mut sections, + &mut I18n::default(), + &Config::default(), + ) + .unwrap(); let section = blocks[0][0].clone(); @@ -1278,6 +1378,14 @@ mod test { let value = rand::thread_rng().gen::().to_string(); let modifier_string = format!("\n set {} {}", variable, value); + let mut variables = HashMap::default(); + variables.insert(variable.clone(), VariableKind::Float); + + let mut config = Config { + variables, + ..Default::default() + }; + let expected_modifier = Modifier { variable, value, @@ -1287,7 +1395,7 @@ mod test { block_settings.modifiers.push(expected_modifier); let token = parse_str(&modifier_string, Rule::Command).unwrap(); - add_command_to_block(token, &mut block).unwrap(); + add_command_to_block(token, &mut block, &config).unwrap(); //Divert let section = make_random_identifier(); @@ -1299,20 +1407,24 @@ mod test { }); let token = parse_str(&divert_string, Rule::Command).unwrap(); - add_command_to_block(token, &mut block).unwrap(); + add_command_to_block(token, &mut block, &config).unwrap(); //Unique block_settings.unique = true; let token = parse_str("\n unique", Rule::Command).unwrap(); - add_command_to_block(token, &mut block).unwrap(); + add_command_to_block(token, &mut block, &config).unwrap(); //Frequency let condition_string = make_random_condition(); let condition = parse_condition_str(&condition_string).unwrap(); - let change_value: i32 = rand::thread_rng().gen(); + + config + .variables + .insert(condition.variable.clone(), VariableKind::String); + let frequency_string = format!("\n freq {} {}", condition_string, change_value); let expected_frequency = FrequencyModifier { condition, @@ -1322,20 +1434,24 @@ mod test { block_settings.frequency_modifiers.push(expected_frequency); let token = parse_str(&frequency_string, Rule::Command).unwrap(); - add_command_to_block(token, &mut block).unwrap(); + add_command_to_block(token, &mut block, &config).unwrap(); //Requirement let condition_string = make_random_condition(); let condition = parse_condition_str(&condition_string).unwrap(); + config + .variables + .insert(condition.variable.clone(), VariableKind::String); + let requirement_string = format!("\n req {}", condition_string); let expected_requirement = Requirement { condition }; block_settings.requirements.push(expected_requirement); let token = parse_str(&requirement_string, Rule::Command).unwrap(); - add_command_to_block(token, &mut block).unwrap(); + add_command_to_block(token, &mut block, &config).unwrap(); let expected_block = Block::Text { id: text_id, @@ -1980,7 +2096,13 @@ mod test { fn parse_block_str(input: &str) -> Result>, PalabritasError> { let token = parse_str(input, Rule::Block)?; let mut blocks = Vec::default(); - parse_block(token, &mut blocks, 0, &mut I18n::default())?; + parse_block( + token, + &mut blocks, + 0, + &mut I18n::default(), + &Config::default(), + )?; Ok(blocks) } } From 475110653f1d252b1dc26ce69ca6fc44d7886e36 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Mon, 3 Jul 2023 11:20:29 -0300 Subject: [PATCH 25/94] test fixes --- cli/src/console.rs | 2 +- common/src/config.rs | 16 ++++ compiler/en.csv | 78 ++++++++--------- examples/cuentitos.toml | 5 +- palabritas/src/parser.rs | 175 ++++++++++++++++++++++++++++----------- 5 files changed, 188 insertions(+), 88 deletions(-) diff --git a/cli/src/console.rs b/cli/src/console.rs index 001ff69..7cfa378 100644 --- a/cli/src/console.rs +++ b/cli/src/console.rs @@ -67,7 +67,7 @@ impl Console { "variables" => print_variables(&runtime), str => { if str.starts_with("set") { - match parse_modifier_str(str) { + match parse_modifier_str(str, &runtime.database.config) { Ok(modifier) => match runtime.apply_modifier(&modifier) { Ok(_) => { print_variable(&runtime, &modifier.variable); diff --git a/common/src/config.rs b/common/src/config.rs index 9b2c5d6..d379224 100644 --- a/common/src/config.rs +++ b/common/src/config.rs @@ -1,6 +1,7 @@ use std::path::Path; use std::collections::HashMap; +use std::str::FromStr; use crate::Result; use crate::VariableKind; @@ -41,3 +42,18 @@ impl Config { Ok(config) } } + +impl FromStr for Config { + type Err = toml::de::Error; + fn from_str(s: &str) -> std::result::Result { + let config: Config = match toml::from_str(s) { + Ok(d) => d, + Err(err) => { + eprintln!("Unable to load data from \n`{}`", s); + return Err(err); + } + }; + + Ok(config) + } +} diff --git a/compiler/en.csv b/compiler/en.csv index 6b74221..fc43a08 100644 --- a/compiler/en.csv +++ b/compiler/en.csv @@ -1,51 +1,51 @@ Id,Text -6,"You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts." -22,"The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers." -25,"The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise." +10,"At the bustling street market, you discover a food stand offering mouthwa tering delicacies." +71,"The phone rings ten times, nobody is at home." +28,The musician smiles and nods thanking you. +33,"I keep walking, even if the murals look good, the darkness of the alley is unsettling." +5,"As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses." 31,"Each colorful mural tells a different story, capturing your imagination and sparking your creativity." -40,The moonlight gives the room a peaceful tone. -64,"The phone rings twice, and dad picks up. You have a good chat." +73,You decide it's now time to go to sleep. 86,You get to the museum door. You watch through the window. It seems crowded. -57,"Feeling depleted of spoons, you go right back to bed." -4,I take a walk through a nearby park to relax and acclimate to the city. -27,I leave two dollars to the artist. +17,"You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand." +14,"You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations." 34,"This unexpected oasis of visual tranquility provides a respite from the chaos of the city, inspiring you to explore more of the urban canvas and the stories it holds." -42,You start to think about all the stuff you need to do tomorrow. +24,"As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician." 36,"Feeling mentally and physically exhausted from the day's adventures, you decide it's time to head back to your hotel." -79,You wake up feeling refreshed. Let's see what this day brings. -21,"You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction." -13,"You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer." -80,Explore a museum -14,"You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations." -17,"You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand." -3,"As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment." -1,"You've just arrived in the bustling city, full of excitement and anticipation for your new job." -18,"You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them." -38,The sun shines bright through the window. -56,I go to bed -44,That makes you feel overwhelmed. -9,I visit a popular street market to experience the city's unique flavors and energy. -67,"The phone rings twice, and mom picks up. You have a good chat." -7,"A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise." -26,"You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape." +32,I grab my phone and take pictures of the murals. 51,A good cup of tea is always good to regulate after the sensory overload of the city. +29,"I nod when the musician looks my way, to show I really enjoy the music." 52,You sit in the couch to enjoy your tea. Drink half of the cup and fall asleep. -5,"As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses." -49,I make some tea -71,"The phone rings ten times, nobody is at home." -61,I call my parents -82,Go to the Farmer's Market +64,"The phone rings twice, and dad picks up. You have a good chat." +40,The moonlight gives the room a peaceful tone. +25,"The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise." +7,"A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise." +18,"You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them." 23,You feel they're too busy to bother them with questions. -32,I grab my phone and take pictures of the murals. -89,You get to the farmer's market. It's very early and some stands are still being set up. -73,You decide it's now time to go to sleep. -28,The musician smiles and nods thanking you. +61,I call my parents +27,I leave two dollars to the artist. 47,You decide to focus on the now... +9,I visit a popular street market to experience the city's unique flavors and energy. 37,"As you enter the peaceful sanctuary of your room, you take a deep breath, relieved to have a quiet space where you can recharge and prepare for the challenges ahead." +26,"You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape." +6,"You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts." +80,Explore a museum +79,You wake up feeling refreshed. Let's see what this day brings. +89,You get to the farmer's market. It's very early and some stands are still being set up. +4,I take a walk through a nearby park to relax and acclimate to the city. 2,"The skyline reaches for the clouds, and the sounds of traffic and people surround you." -10,"At the bustling street market, you discover a food stand offering mouthwa tering delicacies." -29,"I nod when the musician looks my way, to show I really enjoy the music." -33,"I keep walking, even if the murals look good, the darkness of the alley is unsettling." -30,"Wandering the market, you stumble upon a hidden alley adorned with vibrant street art." -24,"As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician." +38,The sun shines bright through the window. 8,This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. +3,"As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment." +44,That makes you feel overwhelmed. +67,"The phone rings twice, and mom picks up. You have a good chat." +82,Go to the Farmer's Market +22,"The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers." +1,"You've just arrived in the bustling city, full of excitement and anticipation for your new job." +42,You start to think about all the stuff you need to do tomorrow. +49,I make some tea +56,I go to bed +21,"You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction." +30,"Wandering the market, you stumble upon a hidden alley adorned with vibrant street art." +13,"You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer." +57,"Feeling depleted of spoons, you go right back to bed." diff --git a/examples/cuentitos.toml b/examples/cuentitos.toml index 58294aa..703565b 100644 --- a/examples/cuentitos.toml +++ b/examples/cuentitos.toml @@ -6,4 +6,7 @@ energy = "integer" time = "float" [variables.time_of_day] -enum = ["day", "night"] \ No newline at end of file +enum = ["day", "night"] + +[variables.item] +enum = ["tea"] \ No newline at end of file diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index 04be2fa..ebe15d5 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -57,7 +57,7 @@ where }; match PalabritasParser::parse(Rule::Database, &str) { - Ok(mut result) => match parse_database(result.next().unwrap(), config) { + Ok(mut result) => match parse_database(result.next().unwrap(), &config) { Ok(database) => Ok(database), Err(error) => Err(error), }, @@ -77,20 +77,20 @@ where } } -pub fn parse_database(token: Pair, config: Config) -> Result { +pub fn parse_database(token: Pair, config: &Config) -> Result { match_rule(&token, Rule::Database)?; let mut blocks: Vec> = Vec::default(); - let mut i18n = I18n::from_config(&config); + let mut i18n = I18n::from_config(config); let mut sections = HashMap::default(); // pub sections: HashMap for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Block => { - parse_block(inner_token, &mut blocks, 0, &mut i18n, &config)?; + parse_block(inner_token, &mut blocks, 0, &mut i18n, config)?; } Rule::Section => { - parse_section(inner_token, &mut blocks, &mut sections, &mut i18n, &config)?; + parse_section(inner_token, &mut blocks, &mut sections, &mut i18n, config)?; } _ => {} } @@ -130,9 +130,9 @@ pub fn parse_database(token: Pair, config: Config) -> Result Result { +pub fn parse_database_str(input: &str, config: &Config) -> Result { let token = parse_str(input, Rule::Database)?; - parse_database(token, Config::default()) + parse_database(token, config) } pub fn parse_text_str(input: &str) -> Result { @@ -150,9 +150,9 @@ pub fn parse_chance_str(input: &str) -> Result { parse_chance(token) } -pub fn parse_condition_str(input: &str) -> Result { +pub fn parse_condition_str(input: &str, config: &Config) -> Result { let token = parse_str(input, Rule::Condition)?; - parse_condition(token, &Config::default()) + parse_condition(token, config) } pub fn parse_choice_str(input: &str) -> Result { @@ -160,14 +160,14 @@ pub fn parse_choice_str(input: &str) -> Result { parse_choice(token) } -pub fn parse_section_str(input: &str) -> Result { +pub fn parse_section_str(input: &str, config: &Config) -> Result { let token = parse_str(input, Rule::Section)?; parse_section( token, &mut Vec::default(), &mut HashMap::default(), &mut I18n::default(), - &Config::default(), + config, ) } @@ -186,19 +186,22 @@ pub fn parse_divert_str(input: &str) -> Result { parse_divert(token) } -pub fn parse_modifier_str(input: &str) -> Result { +pub fn parse_modifier_str(input: &str, config: &Config) -> Result { let token = parse_str(input, Rule::Modifier)?; - parse_modifier(token, &Config::default()) + parse_modifier(token, config) } -pub fn parse_frequency_str(input: &str) -> Result { +pub fn parse_frequency_str( + input: &str, + config: &Config, +) -> Result { let token = parse_str(input, Rule::Frequency)?; - parse_frequency(token, &Config::default()) + parse_frequency(token, config) } -pub fn parse_requirement_str(input: &str) -> Result { +pub fn parse_requirement_str(input: &str, config: &Config) -> Result { let token = parse_str(input, Rule::Requirement)?; - parse_requirement(token, &Config::default()) + parse_requirement(token, config) } pub fn parse_comparison_operator_str(input: &str) -> Result { @@ -1063,6 +1066,7 @@ fn match_rule(token: &Pair, expected_rule: Rule) -> Result<(), PalabritasE #[cfg(test)] mod test { + use std::str::FromStr; use std::vec; use crate::parser::*; @@ -1092,7 +1096,9 @@ mod test { #[test] fn parse_database_correctly() { let unparsed_file = include_str!("../../examples/story-example.cuentitos"); - parse_database_str(unparsed_file).unwrap(); + let unparsed_config = include_str!("../../examples/cuentitos.toml"); + let config = Config::from_str(unparsed_config).unwrap(); + parse_database_str(unparsed_file, &config).unwrap(); //TODO: compare with fixture } @@ -1279,7 +1285,7 @@ mod test { let identifier = make_random_snake_case(); let section_string = format!("#{}\n", identifier); - let section = parse_section_str(§ion_string).unwrap(); + let section = parse_section_str(§ion_string, &Config::default()).unwrap(); let expected_value = Block::Section { id: identifier, @@ -1417,8 +1423,11 @@ mod test { //Frequency - let condition_string = make_random_condition(); - let condition = parse_condition_str(&condition_string).unwrap(); + let variable = make_random_identifier(); + let condition_string = variable.clone() + " " + &make_random_identifier(); + config.variables.insert(variable, VariableKind::String); + + let condition = parse_condition_str(&condition_string, &config).unwrap(); let change_value: i32 = rand::thread_rng().gen(); config @@ -1438,8 +1447,11 @@ mod test { //Requirement - let condition_string = make_random_condition(); - let condition = parse_condition_str(&condition_string).unwrap(); + let variable = make_random_identifier(); + let condition_string = variable.clone() + " " + &make_random_identifier(); + config.variables.insert(variable, VariableKind::String); + + let condition = parse_condition_str(&condition_string, &config).unwrap(); config .variables @@ -1475,7 +1487,28 @@ mod test { fn division_by_zero_throws_error() { let identifier = make_random_identifier(); let tag_string = format!("set {} / 0", identifier); - let value = parse_modifier_str(&tag_string).unwrap_err(); + let mut variables = HashMap::default(); + variables.insert(identifier, VariableKind::Integer); + + let mut config = Config { + variables, + ..Default::default() + }; + let value: PalabritasError = parse_modifier_str(&tag_string, &config).unwrap_err(); + + assert_eq!( + value, + PalabritasError::DivisionByZero(ErrorInfo { + line: 1, + string: tag_string + }) + ); + + let identifier = make_random_identifier(); + let tag_string = format!("set {} / 0", identifier); + config.variables.insert(identifier, VariableKind::Float); + + let value: PalabritasError = parse_modifier_str(&tag_string, &config).unwrap_err(); assert_eq!( value, @@ -1531,12 +1564,22 @@ mod test { let variable = make_random_identifier(); let value = rand::thread_rng().gen::().to_string(); let modifier_string = format!("set {} {}", variable, value); + + let mut variables = HashMap::default(); + variables.insert(variable.clone(), VariableKind::Float); + + let config = Config { + variables, + ..Default::default() + }; + let expected_value = Modifier { variable, value, operator: ModifierOperator::Set, }; - let modifier = parse_modifier_str(&modifier_string).unwrap(); + + let modifier = parse_modifier_str(&modifier_string, &config).unwrap(); assert_eq!(modifier, expected_value); } @@ -1544,15 +1587,24 @@ mod test { #[test] fn parse_frequency_correctly() { //Frequency = { "freq" ~ " "+ ~ Condition ~ " "+ ~ ( Float | Integer ) } - let condition_string = make_random_condition(); - let condition = parse_condition_str(&condition_string).unwrap(); + let variable = make_random_identifier(); + let condition_string = variable.clone() + " " + &make_random_identifier(); + let mut variables = HashMap::default(); + variables.insert(variable, VariableKind::String); + let config = Config { + variables, + ..Default::default() + }; + + let condition = parse_condition_str(&condition_string, &config).unwrap(); let change_value: i32 = rand::thread_rng().gen(); let frequency_string = format!("freq {} {}", condition_string, change_value); + let expected_value = FrequencyModifier { condition, value: change_value, }; - let frequency = parse_frequency_str(&frequency_string).unwrap(); + let frequency = parse_frequency_str(&frequency_string, &config).unwrap(); assert_eq!(frequency, expected_value); } @@ -1560,11 +1612,19 @@ mod test { #[test] fn parse_requirement_correctly() { //Requirement = { "req" ~ " "+ ~ Condition } - let condition_string = make_random_condition(); - let condition = parse_condition_str(&condition_string).unwrap(); + let variable = make_random_identifier(); + let condition_string = variable.clone() + " " + &make_random_identifier(); + let mut variables = HashMap::default(); + variables.insert(variable, VariableKind::String); + let config = Config { + variables, + ..Default::default() + }; + + let condition = parse_condition_str(&condition_string, &config).unwrap(); let requirement_string = format!("req {}", condition_string); let expected_value = Requirement { condition }; - let requirement = parse_requirement_str(&requirement_string).unwrap(); + let requirement = parse_requirement_str(&requirement_string, &config).unwrap(); assert_eq!(requirement, expected_value); } @@ -1582,13 +1642,20 @@ mod test { let condition_string = format!("{} {} {}", variable, operator_string, value); + let mut variables = HashMap::default(); + variables.insert(variable.clone(), VariableKind::Float); + let config = Config { + variables, + ..Default::default() + }; + let expected_value = Condition { variable, operator: operator, value: value.to_string(), }; - let condition = parse_condition_str(&condition_string).unwrap(); + let condition = parse_condition_str(&condition_string, &config).unwrap(); assert_eq!(condition, expected_value); } @@ -1641,13 +1708,21 @@ mod test { /*Condition = { Identifier ~ " "* ~ (ComparisonOperator ~ " "*)? ~ Value } */ let variable = make_random_identifier(); let condition_string = format!("!{}", variable); + + let mut variables = HashMap::default(); + variables.insert(variable.clone(), VariableKind::Bool); + let config = Config { + variables, + ..Default::default() + }; + let expected_value = Condition { variable, operator: ComparisonOperator::NotEqual, value: "true".to_string(), }; - let condition = parse_condition_str(&condition_string).unwrap(); + let condition = parse_condition_str(&condition_string, &config).unwrap(); assert_eq!(condition, expected_value); } @@ -1763,13 +1838,14 @@ mod test { #[test] fn parse_requirement_rule() { //requirement = { "req" ~ " "+ ~ condition } - let condition = make_random_condition(); + let variable = make_random_identifier(); + let condition = variable + " " + &make_random_identifier(); assert_parse_rule(Rule::Requirement, &("req ".to_string() + &condition)); } #[test] fn parse_frequency_rule() { //frequency = { "freq" ~ " "+ ~ condition ~ " "+ ~ ( float | integer ) } - let condition = make_random_condition(); + let condition = make_random_condition_str(); let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); let float = rand::thread_rng() .gen_range(i8::MIN as f32..i8::MAX as f32) @@ -1807,21 +1883,24 @@ mod test { #[test] fn parse_divert_rule() { //divert = { "->" ~ " "* ~ identifier ~ ("." ~ identifier)? } - let knot = make_random_identifier(); - let stitch = make_random_identifier(); + let section = make_random_identifier(); + let subsection = make_random_identifier(); - assert_parse_rule(Rule::Divert, &("->".to_string() + &knot)); - assert_parse_rule(Rule::Divert, &("->".to_string() + &knot + "/" + &stitch)); + assert_parse_rule(Rule::Divert, &("->".to_string() + §ion)); + assert_parse_rule( + Rule::Divert, + &("->".to_string() + §ion + "/" + &subsection), + ); } #[test] fn parse_command_rule() { //Command = {NEWLINE ~ Indentation* ~ (Requirement | Frequency | Modifier | Divert) } - let requirement = "\nreq ".to_string() + &(make_random_condition()); + let requirement = "\nreq ".to_string() + &(make_random_condition_str()); assert_parse_rule(Rule::Command, &(requirement)); let integer = rand::thread_rng().gen_range(i8::MIN..i8::MAX).to_string(); - let frequency = "\nfreq ".to_string() + &make_random_condition() + " " + &integer; + let frequency = "\nfreq ".to_string() + &make_random_condition_str() + " " + &integer; assert_parse_rule(Rule::Command, &(frequency)); let modifier = @@ -1919,8 +1998,11 @@ mod test { fn parse_section_commands_correctly() { let identifier = make_random_snake_case(); - let section_string = format!("# {}\n req test\n", identifier); - let section = parse_section_str(§ion_string).unwrap(); + let mut config = Config::default(); + config + .variables + .insert("test".to_string(), VariableKind::Bool); + let section = parse_section_str(&format!("# {}\n req test\n", identifier), &config).unwrap(); let expected_value = Block::Section { id: identifier, @@ -1980,10 +2062,6 @@ mod test { assert_eq!(pair.as_str(), input); } - fn make_random_condition() -> String { - make_random_identifier() + " " + &make_random_identifier() - } - fn make_random_snake_case() -> String { let alphanumeric_size = rand::thread_rng().gen_range(1..20); let underscore_size = rand::thread_rng().gen_range(1..5); @@ -2105,4 +2183,7 @@ mod test { )?; Ok(blocks) } + fn make_random_condition_str() -> String { + make_random_identifier() + " " + &make_random_identifier() + } } From 5d6251a8af1c905cfa29f034046b7410aedd76cf Mon Sep 17 00:00:00 2001 From: loomstyla Date: Mon, 3 Jul 2023 13:25:02 -0300 Subject: [PATCH 26/94] Section existance and invalid operators check --- compiler/en.csv | 78 ++++----- palabritas/src/error.rs | 27 +++ palabritas/src/parser.rs | 347 ++++++++++++++++++++++++++++++++------- 3 files changed, 351 insertions(+), 101 deletions(-) diff --git a/compiler/en.csv b/compiler/en.csv index fc43a08..707f6e2 100644 --- a/compiler/en.csv +++ b/compiler/en.csv @@ -1,51 +1,51 @@ Id,Text -10,"At the bustling street market, you discover a food stand offering mouthwa tering delicacies." -71,"The phone rings ten times, nobody is at home." -28,The musician smiles and nods thanking you. -33,"I keep walking, even if the murals look good, the darkness of the alley is unsettling." +80,Explore a museum +29,"I nod when the musician looks my way, to show I really enjoy the music." +9,I visit a popular street market to experience the city's unique flavors and energy. +82,Go to the Farmer's Market +79,You wake up feeling refreshed. Let's see what this day brings. +23,You feel they're too busy to bother them with questions. 5,"As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses." -31,"Each colorful mural tells a different story, capturing your imagination and sparking your creativity." -73,You decide it's now time to go to sleep. -86,You get to the museum door. You watch through the window. It seems crowded. +42,You start to think about all the stuff you need to do tomorrow. +4,I take a walk through a nearby park to relax and acclimate to the city. +26,"You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape." 17,"You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand." -14,"You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations." +71,"The phone rings ten times, nobody is at home." +7,"A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise." +32,I grab my phone and take pictures of the murals. +89,You get to the farmer's market. It's very early and some stands are still being set up. +64,"The phone rings twice, and dad picks up. You have a good chat." 34,"This unexpected oasis of visual tranquility provides a respite from the chaos of the city, inspiring you to explore more of the urban canvas and the stories it holds." -24,"As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician." +6,"You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts." 36,"Feeling mentally and physically exhausted from the day's adventures, you decide it's time to head back to your hotel." -32,I grab my phone and take pictures of the murals. 51,A good cup of tea is always good to regulate after the sensory overload of the city. -29,"I nod when the musician looks my way, to show I really enjoy the music." -52,You sit in the couch to enjoy your tea. Drink half of the cup and fall asleep. -64,"The phone rings twice, and dad picks up. You have a good chat." -40,The moonlight gives the room a peaceful tone. -25,"The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise." -7,"A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise." +3,"As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment." +57,"Feeling depleted of spoons, you go right back to bed." 18,"You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them." -23,You feel they're too busy to bother them with questions. -61,I call my parents +33,"I keep walking, even if the murals look good, the darkness of the alley is unsettling." +28,The musician smiles and nods thanking you. +21,"You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction." +8,This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. +31,"Each colorful mural tells a different story, capturing your imagination and sparking your creativity." +14,"You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations." +25,"The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise." +13,"You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer." 27,I leave two dollars to the artist. -47,You decide to focus on the now... -9,I visit a popular street market to experience the city's unique flavors and energy. +40,The moonlight gives the room a peaceful tone. +49,I make some tea +61,I call my parents +86,You get to the museum door. You watch through the window. It seems crowded. +22,"The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers." +30,"Wandering the market, you stumble upon a hidden alley adorned with vibrant street art." 37,"As you enter the peaceful sanctuary of your room, you take a deep breath, relieved to have a quiet space where you can recharge and prepare for the challenges ahead." -26,"You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape." -6,"You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts." -80,Explore a museum -79,You wake up feeling refreshed. Let's see what this day brings. -89,You get to the farmer's market. It's very early and some stands are still being set up. -4,I take a walk through a nearby park to relax and acclimate to the city. -2,"The skyline reaches for the clouds, and the sounds of traffic and people surround you." -38,The sun shines bright through the window. -8,This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. -3,"As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment." +24,"As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician." 44,That makes you feel overwhelmed. -67,"The phone rings twice, and mom picks up. You have a good chat." -82,Go to the Farmer's Market -22,"The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers." 1,"You've just arrived in the bustling city, full of excitement and anticipation for your new job." -42,You start to think about all the stuff you need to do tomorrow. -49,I make some tea +10,"At the bustling street market, you discover a food stand offering mouthwa tering delicacies." +52,You sit in the couch to enjoy your tea. Drink half of the cup and fall asleep. +73,You decide it's now time to go to sleep. +38,The sun shines bright through the window. +47,You decide to focus on the now... +67,"The phone rings twice, and mom picks up. You have a good chat." +2,"The skyline reaches for the clouds, and the sounds of traffic and people surround you." 56,I go to bed -21,"You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction." -30,"Wandering the market, you stumble upon a hidden alley adorned with vibrant street art." -13,"You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer." -57,"Feeling depleted of spoons, you go right back to bed." diff --git a/palabritas/src/error.rs b/palabritas/src/error.rs index 9f217bc..c36c224 100644 --- a/palabritas/src/error.rs +++ b/palabritas/src/error.rs @@ -1,5 +1,7 @@ use std::{error::Error, fmt::Display, path::PathBuf}; +use cuentitos_common::SectionKey; + use crate::parser::Rule; #[derive(Debug, PartialEq, Eq)] pub enum PalabritasError { @@ -25,6 +27,10 @@ pub enum PalabritasError { rule_found: Rule, }, DivisionByZero(ErrorInfo), + SectionDoesntExist { + info: ErrorInfo, + section: SectionKey, + }, VariableDoesntExist { info: ErrorInfo, variable: String, @@ -35,6 +41,12 @@ pub enum PalabritasError { value: String, variable_type: String, }, + InvalidVariableOperator { + info: ErrorInfo, + variable: String, + operator: String, + variable_type: String, + }, } #[derive(Debug, PartialEq, Eq, Clone)] @@ -106,6 +118,9 @@ impl Display for PalabritasError { PalabritasError::VariableDoesntExist { info, variable } => { write!(f, "Variable {} doesn't exist.\n{}", variable, info) } + PalabritasError::SectionDoesntExist { info, section } => { + write!(f, "Section {} doesn't exist.\n{}", section, info) + } PalabritasError::InvalidVariableValue { info, variable, @@ -118,6 +133,18 @@ impl Display for PalabritasError { variable, value, variable_type, info ) } + PalabritasError::InvalidVariableOperator { + info, + variable, + operator, + variable_type, + } => { + write!( + f, + "Invalid operator for variable {}. Operator {} can't be applied to {}\n{}", + variable, operator, variable_type, info + ) + } } } } diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index ebe15d5..2b375b2 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -77,20 +77,46 @@ where } } +pub fn find_all_section_list(token: &Pair) -> Result, PalabritasError> { + match_rule(token, Rule::Database)?; + let mut section_list = Vec::default(); // pub section_list: HashMap + for inner_token in token.clone().into_inner() { + if inner_token.as_rule() == Rule::Section { + parse_section_key(inner_token, &mut section_list)?; + } + } + + Ok(section_list) +} pub fn parse_database(token: Pair, config: &Config) -> Result { match_rule(&token, Rule::Database)?; let mut blocks: Vec> = Vec::default(); let mut i18n = I18n::from_config(config); - let mut sections = HashMap::default(); // pub sections: HashMap + let mut section_map = HashMap::default(); + let section_list = find_all_section_list(&token)?; for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Block => { - parse_block(inner_token, &mut blocks, 0, &mut i18n, config)?; + parse_block( + inner_token, + &mut blocks, + 0, + &mut i18n, + config, + §ion_list, + )?; } Rule::Section => { - parse_section(inner_token, &mut blocks, &mut sections, &mut i18n, config)?; + parse_section( + inner_token, + &mut blocks, + &mut section_map, + &mut i18n, + config, + §ion_list, + )?; } _ => {} } @@ -124,7 +150,7 @@ pub fn parse_database(token: Pair, config: &Config) -> Result Result { parse_choice(token) } -pub fn parse_section_str(input: &str, config: &Config) -> Result { +pub fn parse_section_str( + input: &str, + config: &Config, + section_list: &Vec, +) -> Result { let token = parse_str(input, Rule::Section)?; parse_section( token, @@ -168,6 +198,7 @@ pub fn parse_section_str(input: &str, config: &Config) -> Result Result { parse_function(token) } -pub fn parse_divert_str(input: &str) -> Result { +pub fn parse_divert_str( + input: &str, + section_list: &[SectionKey], +) -> Result { let token = parse_str(input, Rule::Divert)?; - parse_divert(token) + parse_divert(token, section_list) } pub fn parse_modifier_str(input: &str, config: &Config) -> Result { @@ -241,12 +275,64 @@ fn parse_str(input: &str, rule: Rule) -> Result, PalabritasError> } } +fn parse_section_key( + token: Pair, + section_list: &mut Vec, +) -> Result<(), PalabritasError> { + match_rule(&token, Rule::Section)?; + let mut id = String::default(); + for inner_token in token.into_inner() { + match inner_token.as_rule() { + Rule::Identifier => { + id = inner_token.as_str().to_string(); + } + Rule::Subsection => { + parse_subsection_key(inner_token, &id, section_list)?; + } + _ => {} + } + } + section_list.push(SectionKey { + section: id.clone(), + subsection: None, + }); + + Ok(()) +} + +fn parse_subsection_key( + token: Pair, + section: &str, + section_list: &mut Vec, +) -> Result<(), PalabritasError> { + match_rule(&token, Rule::Subsection)?; + let mut id = String::default(); + for inner_token in token.into_inner() { + match inner_token.as_rule() { + Rule::Identifier => { + id = inner_token.as_str().to_string(); + } + Rule::Subsection => { + parse_subsection_key(inner_token, &id, section_list)?; + } + _ => {} + } + } + section_list.push(SectionKey { + section: section.to_string(), + subsection: Some(id), + }); + + Ok(()) +} + fn parse_section( token: Pair, blocks: &mut Vec>, - sections: &mut HashMap, + section_map: &mut HashMap, i18n: &mut I18n, config: &Config, + section_list: &Vec, ) -> Result { match_rule(&token, Rule::Section)?; if blocks.is_empty() { @@ -265,22 +351,30 @@ fn parse_section( id = inner_token.as_str().to_string(); } Rule::Command => { - add_command_to_settings(inner_token, &mut settings, config)?; + add_command_to_settings(inner_token, &mut settings, config, section_list)?; } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { - parse_block(inner_blocks_token, blocks, 1, i18n, config)?; + parse_block(inner_blocks_token, blocks, 1, i18n, config, section_list)?; settings.children.push(blocks[1].len() - 1); } } Rule::Subsection => { - parse_subsection(inner_token, blocks, &id, sections, i18n, config)?; + parse_subsection( + inner_token, + blocks, + &id, + section_map, + i18n, + config, + section_list, + )?; } _ => {} } } - sections.insert( + section_map.insert( SectionKey { section: id.clone(), subsection: None, @@ -298,9 +392,10 @@ fn parse_subsection( token: Pair, blocks: &mut Vec>, section_name: &str, - sections: &mut HashMap, + section_map: &mut HashMap, i18n: &mut I18n, config: &Config, + section_list: &Vec, ) -> Result<(), PalabritasError> { match_rule(&token, Rule::Subsection)?; @@ -320,22 +415,30 @@ fn parse_subsection( id = inner_token.as_str().to_string(); } Rule::Command => { - add_command_to_settings(inner_token, &mut settings, config)?; + add_command_to_settings(inner_token, &mut settings, config, section_list)?; } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { - parse_block(inner_blocks_token, blocks, 1, i18n, config)?; + parse_block(inner_blocks_token, blocks, 1, i18n, config, section_list)?; settings.children.push(blocks[1].len() - 1); } } Rule::Subsection => { - parse_subsection(inner_token, blocks, section_name, sections, i18n, config)?; + parse_subsection( + inner_token, + blocks, + section_name, + section_map, + i18n, + config, + section_list, + )?; } _ => {} } } - sections.insert( + section_map.insert( SectionKey { section: section_name.to_string(), subsection: Some(id.clone()), @@ -352,6 +455,7 @@ fn parse_block( child_order: usize, i18n: &mut I18n, config: &Config, + section_list: &Vec, ) -> Result<(), PalabritasError> { match_rule(&token, Rule::Block)?; @@ -370,12 +474,19 @@ fn parse_block( block = parse_choice(inner_token)?; } Rule::Command => { - add_command_to_block(inner_token, &mut block, config)?; + add_command_to_block(inner_token, &mut block, config, section_list)?; } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { let settings = block.get_settings_mut(); - parse_block(inner_blocks_token, blocks, child_order + 1, i18n, config)?; + parse_block( + inner_blocks_token, + blocks, + child_order + 1, + i18n, + config, + section_list, + )?; settings.children.push(blocks[child_order + 1].len() - 1); } } @@ -710,6 +821,7 @@ fn add_command_to_settings( token: Pair, settings: &mut BlockSettings, config: &Config, + section_list: &[SectionKey], ) -> Result<(), PalabritasError> { match_rule(&token, Rule::Command)?; @@ -729,7 +841,7 @@ fn add_command_to_settings( settings.modifiers.push(modifier); } Rule::Divert => { - settings.next = parse_divert(inner_token)?; + settings.next = parse_divert(inner_token, section_list)?; } Rule::Unique => { settings.unique = true; @@ -752,9 +864,10 @@ fn add_command_to_block( token: Pair, block: &mut Block, config: &Config, + section_list: &[SectionKey], ) -> Result<(), PalabritasError> { let settings = block.get_settings_mut(); - add_command_to_settings(token, settings, config) + add_command_to_settings(token, settings, config, section_list) } fn parse_function(token: Pair) -> Result { @@ -784,13 +897,21 @@ fn parse_tag(token: Pair) -> Result { } Ok(name) } -fn parse_divert(token: Pair) -> Result { +fn parse_divert( + token: Pair, + section_list: &[SectionKey], +) -> Result { match_rule(&token, Rule::Divert)?; //Divert = { "->" ~ " "* ~ Identifier ~ ("." ~ Identifier)? } let mut section: Option = None; let mut subsection: Option = None; + let error_info = ErrorInfo { + line: token.line_col().0, + string: token.as_str().to_string(), + }; + for inner_token in token.into_inner() { if inner_token.as_rule() == Rule::Identifier { if section.is_none() { @@ -806,10 +927,13 @@ fn parse_divert(token: Pair) -> Result { } if let Some(section) = section { - Ok(NextBlock::Section(SectionKey { + let section_key = SectionKey { section, subsection, - })) + }; + + check_section_existance(§ion_key, section_list, &error_info)?; + Ok(NextBlock::Section(section_key)) } else { Ok(NextBlock::None) } @@ -847,6 +971,12 @@ fn parse_modifier(token: Pair, config: &Config) -> Result Result<(), PalabritasError> { + if section_list.contains(section_key) { + Ok(()) + } else { + Err(PalabritasError::SectionDoesntExist { + info: error_info.clone(), + section: section_key.clone(), + }) + } +} + fn check_variable_value_matches_type( variable: &str, value: &str, @@ -924,6 +1069,63 @@ fn check_variable_value_matches_type( } } +fn check_variable_modifier_operator_matches_type( + variable: &str, + operator: &ModifierOperator, + config: &Config, + error_info: &ErrorInfo, +) -> Result<(), PalabritasError> { + if let Some(kind) = config.variables.get(variable) { + match kind { + cuentitos_common::VariableKind::Integer => Ok(()), + cuentitos_common::VariableKind::Float => Ok(()), + _ => match operator { + ModifierOperator::Set => Ok(()), + _ => Err(PalabritasError::InvalidVariableOperator { + info: error_info.clone(), + variable: variable.to_string(), + operator: format!("{:?}", operator), + variable_type: format!("{:?}", kind), + }), + }, + } + } else { + Err(PalabritasError::VariableDoesntExist { + info: error_info.clone(), + variable: variable.to_string(), + }) + } +} + +fn check_variable_comparison_operator_matches_type( + variable: &str, + operator: &ComparisonOperator, + config: &Config, + error_info: &ErrorInfo, +) -> Result<(), PalabritasError> { + if let Some(kind) = config.variables.get(variable) { + match kind { + cuentitos_common::VariableKind::Integer => Ok(()), + cuentitos_common::VariableKind::Float => Ok(()), + _ => match operator { + ComparisonOperator::Equal => Ok(()), + ComparisonOperator::NotEqual => Ok(()), + _ => Err(PalabritasError::InvalidVariableOperator { + info: error_info.clone(), + variable: variable.to_string(), + operator: format!("{:?}", operator), + variable_type: format!("{:?}", kind), + }), + }, + } + } else { + Err(PalabritasError::VariableDoesntExist { + info: error_info.clone(), + variable: variable.to_string(), + }) + } +} + fn parse_modifier_operator(token: Pair) -> Result { //ModifierOperator = {"+" | "-" | "*" | "/" | "="} match_rule(&token, Rule::ModifierOperator)?; @@ -1004,6 +1206,12 @@ fn parse_condition(token: Pair, config: &Config) -> Result {}", section); + + block_settings.next = NextBlock::Section(SectionKey { + section, + subsection: None, + }); + + let token = parse_str(&divert_string, Rule::Command).unwrap(); + add_command_to_block(token, &mut block, &config, §ion_list).unwrap(); //Modifier let variable = make_random_identifier(); let value = rand::thread_rng().gen::().to_string(); let modifier_string = format!("\n set {} {}", variable, value); - - let mut variables = HashMap::default(); - variables.insert(variable.clone(), VariableKind::Float); - - let mut config = Config { - variables, - ..Default::default() - }; + config + .variables + .insert(variable.clone(), VariableKind::Float); let expected_modifier = Modifier { variable, @@ -1401,25 +1622,13 @@ mod test { block_settings.modifiers.push(expected_modifier); let token = parse_str(&modifier_string, Rule::Command).unwrap(); - add_command_to_block(token, &mut block, &config).unwrap(); - - //Divert - let section = make_random_identifier(); - let divert_string = format!("\n -> {}", section); - - block_settings.next = NextBlock::Section(SectionKey { - section, - subsection: None, - }); - - let token = parse_str(&divert_string, Rule::Command).unwrap(); - add_command_to_block(token, &mut block, &config).unwrap(); + add_command_to_block(token, &mut block, &config, §ion_list).unwrap(); //Unique block_settings.unique = true; let token = parse_str("\n unique", Rule::Command).unwrap(); - add_command_to_block(token, &mut block, &config).unwrap(); + add_command_to_block(token, &mut block, &config, §ion_list).unwrap(); //Frequency @@ -1443,7 +1652,7 @@ mod test { block_settings.frequency_modifiers.push(expected_frequency); let token = parse_str(&frequency_string, Rule::Command).unwrap(); - add_command_to_block(token, &mut block, &config).unwrap(); + add_command_to_block(token, &mut block, &config, §ion_list).unwrap(); //Requirement @@ -1463,7 +1672,7 @@ mod test { block_settings.requirements.push(expected_requirement); let token = parse_str(&requirement_string, Rule::Command).unwrap(); - add_command_to_block(token, &mut block, &config).unwrap(); + add_command_to_block(token, &mut block, &config, §ion_list).unwrap(); let expected_block = Block::Text { id: text_id, @@ -1538,23 +1747,31 @@ mod test { #[test] fn parse_divert_correctly() { //Divert = { "->" ~ " "* ~ Identifier ~ ("/" ~ Identifier)? } + //Section let section = make_random_identifier(); let divert_string = format!("-> {}", section); - let expected_value = NextBlock::Section(SectionKey { + let section_key = SectionKey { section: section.clone(), subsection: None, - }); - let divert = parse_divert_str(&divert_string).unwrap(); + }; + let expected_value = NextBlock::Section(section_key.clone()); + let mut section_list = vec![section_key]; + + let divert = parse_divert_str(&divert_string, §ion_list).unwrap(); assert_eq!(divert, expected_value); + //Subsection let subsection = make_random_identifier(); let divert_string = format!("-> {}/{}", section, subsection); - let expected_value = NextBlock::Section(SectionKey { - section, - subsection: Some(subsection), - }); - let divert = parse_divert_str(&divert_string).unwrap(); + let section_key = SectionKey { + section: section.clone(), + subsection: Some(subsection.clone()), + }; + + let expected_value = NextBlock::Section(section_key.clone()); + section_list.push(section_key); + let divert = parse_divert_str(&divert_string, §ion_list).unwrap(); assert_eq!(divert, expected_value); } @@ -2002,7 +2219,12 @@ mod test { config .variables .insert("test".to_string(), VariableKind::Bool); - let section = parse_section_str(&format!("# {}\n req test\n", identifier), &config).unwrap(); + let section = parse_section_str( + &format!("# {}\n req test\n", identifier), + &config, + &Vec::default(), + ) + .unwrap(); let expected_value = Block::Section { id: identifier, @@ -2180,6 +2402,7 @@ mod test { 0, &mut I18n::default(), &Config::default(), + &Vec::default(), )?; Ok(blocks) } From 5ced14c1c812981a5169178d17f92341396a427a Mon Sep 17 00:00:00 2001 From: loomstyla Date: Mon, 3 Jul 2023 14:52:44 -0300 Subject: [PATCH 27/94] Tests --- common/src/condition.rs | 15 +++ common/src/modifier.rs | 15 +++ common/src/variable.rs | 9 ++ compiler/en.csv | 70 ++++++------ palabritas/src/parser.rs | 227 +++++++++++++++++++++++++++++++++++++-- 5 files changed, 294 insertions(+), 42 deletions(-) diff --git a/common/src/condition.rs b/common/src/condition.rs index e85fc4f..b45be1e 100644 --- a/common/src/condition.rs +++ b/common/src/condition.rs @@ -1,3 +1,5 @@ +use std::fmt::Display; + use crate::VariableId; use serde::{Deserialize, Serialize}; @@ -13,6 +15,19 @@ pub enum ComparisonOperator { LessOrEqualThan, } +impl Display for ComparisonOperator +{ + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self{ + ComparisonOperator::Equal => write!(f, "="), + ComparisonOperator::NotEqual => write!(f, "!"), + ComparisonOperator::GreaterThan => write!(f, ">"), + ComparisonOperator::LessThan => write!(f, "<"), + ComparisonOperator::GreaterOrEqualThan => write!(f, ">="), + ComparisonOperator::LessOrEqualThan => write!(f, "<="), + } + } +} #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)] pub struct Condition { pub variable: VariableId, diff --git a/common/src/modifier.rs b/common/src/modifier.rs index d4bf47b..4eaf1eb 100644 --- a/common/src/modifier.rs +++ b/common/src/modifier.rs @@ -1,3 +1,5 @@ +use std::fmt::Display; + use serde::{Deserialize, Serialize}; use crate::VariableId; @@ -18,3 +20,16 @@ pub enum ModifierOperator { Multiply, Divide, } + +impl Display for ModifierOperator +{ + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self{ + ModifierOperator::Set => write!(f, "="), + ModifierOperator::Add => write!(f, "+"), + ModifierOperator::Substract => write!(f, "-"), + ModifierOperator::Multiply => write!(f, "*"), + ModifierOperator::Divide => write!(f, "/"), + } + } +} \ No newline at end of file diff --git a/common/src/variable.rs b/common/src/variable.rs index 5700e65..30d8835 100644 --- a/common/src/variable.rs +++ b/common/src/variable.rs @@ -1,5 +1,7 @@ pub type VariableId = String; +use std::fmt::Display; + use serde::{Deserialize, Serialize}; #[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] @@ -31,6 +33,13 @@ impl VariableKind { } } +impl Display for VariableKind +{ + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{:?}", self) + } +} + #[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] pub struct Variable { pub id: VariableId, diff --git a/compiler/en.csv b/compiler/en.csv index 707f6e2..196222a 100644 --- a/compiler/en.csv +++ b/compiler/en.csv @@ -1,51 +1,51 @@ Id,Text -80,Explore a museum -29,"I nod when the musician looks my way, to show I really enjoy the music." +61,I call my parents +64,"The phone rings twice, and dad picks up. You have a good chat." +4,I take a walk through a nearby park to relax and acclimate to the city. +28,The musician smiles and nods thanking you. +67,"The phone rings twice, and mom picks up. You have a good chat." +27,I leave two dollars to the artist. +32,I grab my phone and take pictures of the murals. +2,"The skyline reaches for the clouds, and the sounds of traffic and people surround you." +8,This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. +13,"You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer." +22,"The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers." 9,I visit a popular street market to experience the city's unique flavors and energy. -82,Go to the Farmer's Market -79,You wake up feeling refreshed. Let's see what this day brings. 23,You feel they're too busy to bother them with questions. -5,"As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses." -42,You start to think about all the stuff you need to do tomorrow. -4,I take a walk through a nearby park to relax and acclimate to the city. 26,"You take a moment to appreciate the beauty of the music, feeling a connection to the artist and the vibrant energy they bring to the urban landscape." +14,"You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations." 17,"You come across a vendor with furrowed brows and a tense expression, their voice raised as they heatedly argue with a customer over a transaction at their stand." -71,"The phone rings ten times, nobody is at home." 7,"A solitary figure sits on the bench, engrossed in a book, seemingly unfazed by the surrounding city noise." -32,I grab my phone and take pictures of the murals. -89,You get to the farmer's market. It's very early and some stands are still being set up. -64,"The phone rings twice, and dad picks up. You have a good chat." 34,"This unexpected oasis of visual tranquility provides a respite from the chaos of the city, inspiring you to explore more of the urban canvas and the stories it holds." -6,"You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts." +29,"I nod when the musician looks my way, to show I really enjoy the music." +30,"Wandering the market, you stumble upon a hidden alley adorned with vibrant street art." +37,"As you enter the peaceful sanctuary of your room, you take a deep breath, relieved to have a quiet space where you can recharge and prepare for the challenges ahead." +5,"As you stroll through the nearby park, the soothing sounds of rustling leaves and chirping birds help calm your senses." 36,"Feeling mentally and physically exhausted from the day's adventures, you decide it's time to head back to your hotel." -51,A good cup of tea is always good to regulate after the sensory overload of the city. -3,"As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment." -57,"Feeling depleted of spoons, you go right back to bed." -18,"You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them." +42,You start to think about all the stuff you need to do tomorrow. +71,"The phone rings ten times, nobody is at home." 33,"I keep walking, even if the murals look good, the darkness of the alley is unsettling." -28,The musician smiles and nods thanking you. -21,"You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction." -8,This serene oasis gives you the confidence to face the challenges ahead as you acclimate to your new life in the bustling city. -31,"Each colorful mural tells a different story, capturing your imagination and sparking your creativity." -14,"You see the owner beaming with joy, their infectious smile and animated gestures inviting customers to try their delectable creations." -25,"The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise." -13,"You notice the stand owner, their eyes sparkling with joy as they animatedly describe their homemade offerings to an eager customer." -27,I leave two dollars to the artist. +10,"At the bustling street market, you discover a food stand offering mouthwa tering delicacies." +80,Explore a museum +18,"You spot a visibly agitated vendor, their clenched fists and piercing glare making it clear that they're unhappy with the current situation unfolding before them." +6,"You find a quiet bench to sit on, taking a moment to breathe deeply and gather your thoughts." +1,"You've just arrived in the bustling city, full of excitement and anticipation for your new job." 40,The moonlight gives the room a peaceful tone. 49,I make some tea -61,I call my parents -86,You get to the museum door. You watch through the window. It seems crowded. -22,"The vendor at a nearby food stand appears worn, their movements slow and deliberate, as they attempt to maintain a smile while attending to the seemingly endless stream of customers." -30,"Wandering the market, you stumble upon a hidden alley adorned with vibrant street art." -37,"As you enter the peaceful sanctuary of your room, you take a deep breath, relieved to have a quiet space where you can recharge and prepare for the challenges ahead." -24,"As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician." 44,That makes you feel overwhelmed. -1,"You've just arrived in the bustling city, full of excitement and anticipation for your new job." -10,"At the bustling street market, you discover a food stand offering mouthwa tering delicacies." -52,You sit in the couch to enjoy your tea. Drink half of the cup and fall asleep. +57,"Feeling depleted of spoons, you go right back to bed." 73,You decide it's now time to go to sleep. 38,The sun shines bright through the window. +82,Go to the Farmer's Market +86,You get to the museum door. You watch through the window. It seems crowded. +89,You get to the farmer's market. It's very early and some stands are still being set up. +21,"You observe a vendor at a small food stand, their shoulders slumped and eyes slightly glazed as they quietly serve customers, mustering just enough energy to complete each transaction." +24,"As you try to navigate the crowded market, you're drawn to the entrancing melody of a street musician." +3,"As you take your first steps in this urban jungle, you feel a mix of emotions, hoping to find your place in this new environment." +31,"Each colorful mural tells a different story, capturing your imagination and sparking your creativity." +51,A good cup of tea is always good to regulate after the sensory overload of the city. +52,You sit in the couch to enjoy your tea. Drink half of the cup and fall asleep. 47,You decide to focus on the now... -67,"The phone rings twice, and mom picks up. You have a good chat." -2,"The skyline reaches for the clouds, and the sounds of traffic and people surround you." +79,You wake up feeling refreshed. Let's see what this day brings. +25,"The captivating sound creates a soothing bubble, momentarily transporting you away from the city's noise." 56,I go to bed diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index 2b375b2..75b61a3 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -1031,7 +1031,7 @@ fn check_variable_value_matches_type( info: error_info.clone(), variable: variable.to_string(), value: value.to_string(), - variable_type: format!("{:?}", kind), + variable_type: format!("{}", kind), }) } } @@ -1043,7 +1043,7 @@ fn check_variable_value_matches_type( info: error_info.clone(), variable: variable.to_string(), value: value.to_string(), - variable_type: format!("{:?}", kind), + variable_type: format!("{}", kind), }) } } @@ -1055,7 +1055,7 @@ fn check_variable_value_matches_type( info: error_info.clone(), variable: variable.to_string(), value: value.to_string(), - variable_type: format!("{:?}", kind), + variable_type: format!("{}", kind), }) } } @@ -1084,8 +1084,8 @@ fn check_variable_modifier_operator_matches_type( _ => Err(PalabritasError::InvalidVariableOperator { info: error_info.clone(), variable: variable.to_string(), - operator: format!("{:?}", operator), - variable_type: format!("{:?}", kind), + operator: format!("{}", operator), + variable_type: format!("{}", kind), }), }, } @@ -1113,8 +1113,8 @@ fn check_variable_comparison_operator_matches_type( _ => Err(PalabritasError::InvalidVariableOperator { info: error_info.clone(), variable: variable.to_string(), - operator: format!("{:?}", operator), - variable_type: format!("{:?}", kind), + operator: format!("{}", operator), + variable_type: format!("{}", kind), }), }, } @@ -1728,6 +1728,219 @@ mod test { ); } + #[test] + fn diverts_to_non_existent_sections_throws_error() { + let error = parse_database_str("Text\n ->Section", &Config::default()).unwrap_err(); + assert_eq!( + error, + PalabritasError::SectionDoesntExist { + info: ErrorInfo { + line: 2, + string: "->Section".to_string() + }, + section: SectionKey { + section: "Section".to_string(), + subsection: None + } + } + ); + } + + #[test] + fn requirement_with_non_existent_variable_throws_error() { + //Requirement = { "req" ~ " "+ ~ Condition ~ " "* } + + let error = parse_database_str("Text\n req variable = value", &Config::default()).unwrap_err(); + assert_eq!( + error, + PalabritasError::VariableDoesntExist { + info: ErrorInfo { + line: 2, + string: "variable = value".to_string() + }, + variable: "variable".to_string() + } + ); + } + + #[test] + fn frequency_with_non_existent_variable_throws_error() { + //Frequency = { "freq" ~ " "+ ~ Condition ~ " "+ ~ ( Float | Integer ) ~ " "* } + + let error = + parse_database_str("Text\n freq variable = value 10", &Config::default()).unwrap_err(); + assert_eq!( + error, + PalabritasError::VariableDoesntExist { + info: ErrorInfo { + line: 2, + string: "variable = value".to_string() + }, + variable: "variable".to_string() + } + ); + } + + #[test] + fn modifier_with_non_existent_variable_throws_error() { + //Modifier = { "set" ~ " "+ ~ ( (Identifier ~ " "+ ~ ModifierOperator? ~ " "* ~ Value) | (NotOperator? ~ " "* ~ Identifier) ) ~ " "* } + + let error = parse_database_str("Text\n set variable value", &Config::default()).unwrap_err(); + assert_eq!( + error, + PalabritasError::VariableDoesntExist { + info: ErrorInfo { + line: 2, + string: "set variable value".to_string() + }, + variable: "variable".to_string() + } + ); + } + + #[test] + fn requirement_with_invalid_variable_value_throws_error() { + //Requirement = { "req" ~ " "+ ~ Condition ~ " "* } + + let mut config = Config::default(); + config + .variables + .insert("variable".to_string(), VariableKind::Integer); + let error = parse_database_str("Text\n req variable = value", &config).unwrap_err(); + assert_eq!( + error, + PalabritasError::InvalidVariableValue { + info: ErrorInfo { + line: 2, + string: "variable = value".to_string() + }, + variable: "variable".to_string(), + value: "value".to_string(), + variable_type: "Integer".to_string() + } + ); + } + + #[test] + fn frequency_with_invalid_variable_value_throws_error() { + //Frequency = { "freq" ~ " "+ ~ Condition ~ " "+ ~ ( Float | Integer ) ~ " "* } + let mut config = Config::default(); + config + .variables + .insert("variable".to_string(), VariableKind::Integer); + let error = + parse_database_str("Text\n freq variable = value 10", &config).unwrap_err(); + assert_eq!( + error, + PalabritasError::InvalidVariableValue { + info: ErrorInfo { + line: 2, + string: "variable = value".to_string() + }, + variable: "variable".to_string(), + value: "value".to_string(), + variable_type: "Integer".to_string() + } + ); + } + + #[test] + fn modifier_with_invalid_variable_value_throws_error() { + //Modifier = { "set" ~ " "+ ~ ( (Identifier ~ " "+ ~ ModifierOperator? ~ " "* ~ Value) | (NotOperator? ~ " "* ~ Identifier) ) ~ " "* } + let mut config = Config::default(); + config + .variables + .insert("variable".to_string(), VariableKind::Integer); + let error = parse_database_str("Text\n set variable value", &config).unwrap_err(); + assert_eq!( + error, + PalabritasError::InvalidVariableValue { + info: ErrorInfo { + line: 2, + string: "set variable value".to_string() + }, + variable: "variable".to_string(), + value: "value".to_string(), + variable_type: "Integer".to_string() + } + ); + } + + #[test] + fn requirement_with_invalid_operator_throws_error() { + //Requirement = { "req" ~ " "+ ~ Condition ~ " "* } + + let mut config = Config::default(); + config + .variables + .insert("variable".to_string(), VariableKind::String); + let error = parse_database_str("Text\n req variable > value", &config).unwrap_err(); + assert_eq!( + error, + PalabritasError::InvalidVariableOperator { + info: ErrorInfo { + line: 2, + string: "variable > value".to_string() + }, + variable: "variable".to_string(), + operator: ">".to_string(), + variable_type: "String".to_string() + } + ); + } + + #[test] + fn frequency_with_invalid_operator_throws_error() { + //Frequency = { "freq" ~ " "+ ~ Condition ~ " "+ ~ ( Float | Integer ) ~ " "* } + let mut config = Config::default(); + config + .variables + .insert("variable".to_string(), VariableKind::String); + let error = + parse_database_str("Text\n freq variable > value 10", &config).unwrap_err(); + assert_eq!( + error, + PalabritasError::InvalidVariableOperator { + info: ErrorInfo { + line: 2, + string: "variable > value".to_string() + }, + variable: "variable".to_string(), + operator: ">".to_string(), + variable_type: "String".to_string() + } + ); + } + + #[test] + fn modifier_with_invalid_operator_throws_error() { + //Modifier = { "set" ~ " "+ ~ ( (Identifier ~ " "+ ~ ModifierOperator? ~ " "* ~ Value) | (NotOperator? ~ " "* ~ Identifier) ) ~ " "* } + let mut config = Config::default(); + config + .variables + .insert("variable".to_string(), VariableKind::String); + let error = parse_database_str("Text\n set variable +1", &config).unwrap_err(); + assert_eq!( + error, + PalabritasError::InvalidVariableOperator { + info: ErrorInfo { + line: 2, + string: "set variable +1".to_string() + }, + variable: "variable".to_string(), + operator: "+".to_string(), + variable_type: "String".to_string() + } + ); + } + + /* + InvalidVariableOperator { + info: ErrorInfo, + variable: String, + operator: String, + variable_type: String, + }, */ #[test] fn parse_function_correctly() { //Function = {"`" ~ " "* ~ Identifier ~ (" " ~ Value)* ~ " "* ~ "`"} From e7c1b81f6233d9ac56ae0d2c9cb00e9bc949c1a9 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Mon, 3 Jul 2023 14:57:19 -0300 Subject: [PATCH 28/94] Update parser.rs --- palabritas/src/parser.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index 75b61a3..4f70036 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -152,7 +152,7 @@ pub fn parse_database(token: Pair, config: &Config) -> Result Date: Mon, 3 Jul 2023 14:59:55 -0300 Subject: [PATCH 29/94] Update error.rs --- palabritas/src/error.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/palabritas/src/error.rs b/palabritas/src/error.rs index c36c224..d1d4eb5 100644 --- a/palabritas/src/error.rs +++ b/palabritas/src/error.rs @@ -116,10 +116,10 @@ impl Display for PalabritasError { write!(f, "Can't divide by zero: {:?}", path) } PalabritasError::VariableDoesntExist { info, variable } => { - write!(f, "Variable {} doesn't exist.\n{}", variable, info) + write!(f, "Variable '{}' doesn't exist.\n{}", variable, info) } PalabritasError::SectionDoesntExist { info, section } => { - write!(f, "Section {} doesn't exist.\n{}", section, info) + write!(f, "Section '{}' doesn't exist.\n{}", section, info) } PalabritasError::InvalidVariableValue { info, @@ -129,8 +129,8 @@ impl Display for PalabritasError { } => { write!( f, - "Invalid value for variable {}. Expected {}, but found {}\n{}", - variable, value, variable_type, info + "Invalid value for variable '{}'. Expected {}, but found '{}'\n{}", + variable, variable_type, value, info ) } PalabritasError::InvalidVariableOperator { @@ -141,7 +141,7 @@ impl Display for PalabritasError { } => { write!( f, - "Invalid operator for variable {}. Operator {} can't be applied to {}\n{}", + "Invalid operator for variable '{}'. Operator '{}' can't be applied to {}\n{}", variable, operator, variable_type, info ) } From 112ee3f37169216b89813cbc007c2d2c730c67c2 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Mon, 3 Jul 2023 15:52:01 -0300 Subject: [PATCH 30/94] error messages refactor --- common/src/condition.rs | 21 +++++---- common/src/modifier.rs | 21 +++++---- common/src/variable.rs | 9 ++-- palabritas/src/error.rs | 42 ++++++++---------- palabritas/src/parser.rs | 96 +++++++++++++++++++++++++--------------- 5 files changed, 103 insertions(+), 86 deletions(-) diff --git a/common/src/condition.rs b/common/src/condition.rs index b45be1e..fff0da3 100644 --- a/common/src/condition.rs +++ b/common/src/condition.rs @@ -15,18 +15,17 @@ pub enum ComparisonOperator { LessOrEqualThan, } -impl Display for ComparisonOperator -{ - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self{ - ComparisonOperator::Equal => write!(f, "="), - ComparisonOperator::NotEqual => write!(f, "!"), - ComparisonOperator::GreaterThan => write!(f, ">"), - ComparisonOperator::LessThan => write!(f, "<"), - ComparisonOperator::GreaterOrEqualThan => write!(f, ">="), - ComparisonOperator::LessOrEqualThan => write!(f, "<="), - } +impl Display for ComparisonOperator { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + ComparisonOperator::Equal => write!(f, "="), + ComparisonOperator::NotEqual => write!(f, "!"), + ComparisonOperator::GreaterThan => write!(f, ">"), + ComparisonOperator::LessThan => write!(f, "<"), + ComparisonOperator::GreaterOrEqualThan => write!(f, ">="), + ComparisonOperator::LessOrEqualThan => write!(f, "<="), } + } } #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)] pub struct Condition { diff --git a/common/src/modifier.rs b/common/src/modifier.rs index 4eaf1eb..31e5b67 100644 --- a/common/src/modifier.rs +++ b/common/src/modifier.rs @@ -21,15 +21,14 @@ pub enum ModifierOperator { Divide, } -impl Display for ModifierOperator -{ - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self{ - ModifierOperator::Set => write!(f, "="), - ModifierOperator::Add => write!(f, "+"), - ModifierOperator::Substract => write!(f, "-"), - ModifierOperator::Multiply => write!(f, "*"), - ModifierOperator::Divide => write!(f, "/"), - } +impl Display for ModifierOperator { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + ModifierOperator::Set => write!(f, "="), + ModifierOperator::Add => write!(f, "+"), + ModifierOperator::Substract => write!(f, "-"), + ModifierOperator::Multiply => write!(f, "*"), + ModifierOperator::Divide => write!(f, "/"), } -} \ No newline at end of file + } +} diff --git a/common/src/variable.rs b/common/src/variable.rs index 30d8835..10ce588 100644 --- a/common/src/variable.rs +++ b/common/src/variable.rs @@ -33,11 +33,10 @@ impl VariableKind { } } -impl Display for VariableKind -{ - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{:?}", self) - } +impl Display for VariableKind { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{:?}", self) + } } #[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] diff --git a/palabritas/src/error.rs b/palabritas/src/error.rs index d1d4eb5..86e071b 100644 --- a/palabritas/src/error.rs +++ b/palabritas/src/error.rs @@ -8,9 +8,7 @@ pub enum PalabritasError { FileIsEmpty, ParseError { file: String, - line: usize, - col: usize, - reason: String, + info: ErrorInfo, }, PathIsNotAFile(PathBuf), PathDoesntExist(PathBuf), @@ -52,12 +50,13 @@ pub enum PalabritasError { #[derive(Debug, PartialEq, Eq, Clone)] pub struct ErrorInfo { pub line: usize, + pub col: usize, pub string: String, } impl Display for ErrorInfo { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(f, "Line {}: {}", self.line, self.string) + write!(f, "{}:{}\n {}", self.line, self.col, self.string) } } impl Error for PalabritasError {} @@ -67,25 +66,20 @@ impl Display for PalabritasError { PalabritasError::FileIsEmpty => { write!(f, "File provided is empty.") } - PalabritasError::ParseError { - file, - line, - col, - reason, - } => { - write!(f, "{}:{}:{}\n {}", file, line, col, reason) + PalabritasError::ParseError { file, info } => { + write!(f, "{}:{}", file, info) } PalabritasError::BucketSumIsNot1(info) => { write!( f, - "The sum of the probabilities in a bucket must be 100%.\n{}", + "{}\n The sum of the probabilities in a bucket must be 100%.", info ) } PalabritasError::BucketHasFrequenciesAndChances(info) => { write!( f, - "Buckets can't have frequency notations and percentage notations at the same time.\n{}", + "{}\n Buckets can't have frequency notations and percentage notations at the same time.", info ) } @@ -96,12 +90,12 @@ impl Display for PalabritasError { } => { write!( f, - "Expected {:?} but found {:?}.\n{}", - expected_rule, rule_found, info + "{}\n Expected {:?} but found {:?}.", + info, expected_rule, rule_found ) } PalabritasError::BucketMissingProbability(info) => { - write!(f, "Missing probability for bucket element.\n{}", info) + write!(f, "{}\n Missing probability for bucket element.\n", info) } PalabritasError::CantReadFile { path, message } => { write!(f, "Can't read file {:?}\n{}", path, message) @@ -112,14 +106,14 @@ impl Display for PalabritasError { PalabritasError::PathDoesntExist(path) => { write!(f, "Path provided doesn't exist: {:?}", path) } - PalabritasError::DivisionByZero(path) => { - write!(f, "Can't divide by zero: {:?}", path) + PalabritasError::DivisionByZero(info) => { + write!(f, "{}\n Can't divide by zero.", info) } PalabritasError::VariableDoesntExist { info, variable } => { - write!(f, "Variable '{}' doesn't exist.\n{}", variable, info) + write!(f, "{}\n Variable '{}' doesn't exist.", info, variable) } PalabritasError::SectionDoesntExist { info, section } => { - write!(f, "Section '{}' doesn't exist.\n{}", section, info) + write!(f, "{}\n Section '{}' doesn't exist.", info, section) } PalabritasError::InvalidVariableValue { info, @@ -129,8 +123,8 @@ impl Display for PalabritasError { } => { write!( f, - "Invalid value for variable '{}'. Expected {}, but found '{}'\n{}", - variable, variable_type, value, info + "{}\n Invalid value for variable '{}'. Expected {}, but found '{}'", + info, variable, variable_type, value, ) } PalabritasError::InvalidVariableOperator { @@ -141,8 +135,8 @@ impl Display for PalabritasError { } => { write!( f, - "Invalid operator for variable '{}'. Operator '{}' can't be applied to {}\n{}", - variable, operator, variable_type, info + "{}\n Invalid operator for variable '{}'. Operator '{}' can't be applied to {}", + info, variable, operator, variable_type ) } } diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index 4f70036..ed812a9 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -69,9 +69,11 @@ where Err(PalabritasError::ParseError { file: palabritas_path.display().to_string(), - line, - col, - reason: error.to_string(), + info: ErrorInfo { + line, + col, + string: error.to_string(), + }, }) } } @@ -152,7 +154,7 @@ pub fn parse_database(token: Pair, config: &Config) -> Result Result, PalabritasError> Some(token) => Ok(token), None => Err(PalabritasError::ParseError { file: input.to_string(), - line: 1, - col: 1, - reason: "Modifier not found".to_string(), + info: ErrorInfo { + line: 1, + col: 1, + string: "Modifier not found".to_string(), + }, }), }, Err(error) => { @@ -267,9 +271,11 @@ fn parse_str(input: &str, rule: Rule) -> Result, PalabritasError> Err(PalabritasError::ParseError { file: input.to_string(), - line, - col, - reason: error.to_string(), + info: ErrorInfo { + line, + col, + string: error.to_string(), + }, }) } } @@ -461,7 +467,7 @@ fn parse_block( // (NamedBucket | Choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* let mut block = Block::default(); - let current_line = token.line_col().0; + let line_col = token.line_col(); for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Text => { @@ -500,7 +506,7 @@ fn parse_block( if let Some(i18n_id) = block.get_i18n_id() { if let Some(db) = i18n.strings.get_mut(&i18n.default_locale) { - let new_id = current_line.to_string(); + let new_id = line_col.0.to_string(); db.insert(new_id.clone(), i18n_id); match block { @@ -529,7 +535,7 @@ fn parse_block( settings: _, } = blocks[child_order][block_id] { - validate_bucket_data(block_id, blocks, child_order, current_line)?; + validate_bucket_data(block_id, blocks, child_order, line_col)?; update_children_probabilities_to_frequency(blocks[child_order].len() - 1, blocks, child_order); } else if is_child_unnamed_bucket(block_id, blocks, child_order) { make_childs_bucket(block_id, blocks, child_order); @@ -608,7 +614,7 @@ fn validate_bucket_data( bucket: usize, blocks: &mut [Vec], child_order: usize, - current_line: usize, + line_col: (usize, usize), ) -> Result<(), PalabritasError> { let bucket = &blocks[child_order][bucket]; let settings = bucket.get_settings(); @@ -624,7 +630,7 @@ fn validate_bucket_data( let mut chance_found = false; let mut total_probability = 0.; - let mut inner_line = current_line; + let mut inner_line = line_col.0; for child in &settings.children { inner_line += 1; let child_block = &blocks[child_order + 1][*child]; @@ -642,6 +648,7 @@ fn validate_bucket_data( }; return Err(PalabritasError::BucketMissingProbability(ErrorInfo { line: inner_line, + col: 1, string, })); } @@ -654,7 +661,8 @@ fn validate_bucket_data( if frequency_found && chance_found { return Err(PalabritasError::BucketHasFrequenciesAndChances(ErrorInfo { - line: current_line, + line: line_col.0, + col: line_col.1, string: bucket_name, })); } @@ -662,7 +670,8 @@ fn validate_bucket_data( if chance_found && total_probability != 1. { return Err(PalabritasError::BucketSumIsNot1(ErrorInfo { - line: current_line, + line: line_col.0, + col: line_col.1, string: bucket_name, })); } @@ -909,6 +918,7 @@ fn parse_divert( let error_info = ErrorInfo { line: token.line_col().0, + col: token.line_col().1, string: token.as_str().to_string(), }; @@ -944,6 +954,7 @@ fn parse_modifier(token: Pair, config: &Config) -> Result, config: &Config) -> Result, expected_rule: Rule) -> Result<(), PalabritasE if token.as_rule() != expected_rule { return Err(PalabritasError::UnexpectedRule { info: ErrorInfo { - line: 0, + line: token.line_col().0, + col: token.line_col().1, string: token.as_str().to_string(), }, expected_rule, @@ -1333,6 +1346,7 @@ mod test { named_bucket, PalabritasError::BucketSumIsNot1(ErrorInfo { line: 1, + col: 1, string: snake_case }) ); @@ -1356,6 +1370,7 @@ mod test { named_bucket, PalabritasError::BucketHasFrequenciesAndChances(ErrorInfo { line: 1, + col: 1, string: snake_case }) ); @@ -1378,6 +1393,7 @@ mod test { named_bucket, PalabritasError::BucketMissingProbability(ErrorInfo { line: 3, + col: 1, string: child_2 }) ); @@ -1709,6 +1725,7 @@ mod test { value, PalabritasError::DivisionByZero(ErrorInfo { line: 1, + col: 1, string: tag_string }) ); @@ -1723,6 +1740,7 @@ mod test { value, PalabritasError::DivisionByZero(ErrorInfo { line: 1, + col: 1, string: tag_string }) ); @@ -1736,6 +1754,7 @@ mod test { PalabritasError::SectionDoesntExist { info: ErrorInfo { line: 2, + col: 3, string: "->Section".to_string() }, section: SectionKey { @@ -1756,6 +1775,7 @@ mod test { PalabritasError::VariableDoesntExist { info: ErrorInfo { line: 2, + col: 7, string: "variable = value".to_string() }, variable: "variable".to_string() @@ -1774,6 +1794,7 @@ mod test { PalabritasError::VariableDoesntExist { info: ErrorInfo { line: 2, + col: 8, string: "variable = value".to_string() }, variable: "variable".to_string() @@ -1791,6 +1812,7 @@ mod test { PalabritasError::VariableDoesntExist { info: ErrorInfo { line: 2, + col: 3, string: "set variable value".to_string() }, variable: "variable".to_string() @@ -1812,6 +1834,7 @@ mod test { PalabritasError::InvalidVariableValue { info: ErrorInfo { line: 2, + col: 7, string: "variable = value".to_string() }, variable: "variable".to_string(), @@ -1828,13 +1851,13 @@ mod test { config .variables .insert("variable".to_string(), VariableKind::Integer); - let error = - parse_database_str("Text\n freq variable = value 10", &config).unwrap_err(); + let error = parse_database_str("Text\n freq variable = value 10", &config).unwrap_err(); assert_eq!( error, PalabritasError::InvalidVariableValue { info: ErrorInfo { line: 2, + col: 8, string: "variable = value".to_string() }, variable: "variable".to_string(), @@ -1857,6 +1880,7 @@ mod test { PalabritasError::InvalidVariableValue { info: ErrorInfo { line: 2, + col: 3, string: "set variable value".to_string() }, variable: "variable".to_string(), @@ -1880,6 +1904,7 @@ mod test { PalabritasError::InvalidVariableOperator { info: ErrorInfo { line: 2, + col: 7, string: "variable > value".to_string() }, variable: "variable".to_string(), @@ -1896,20 +1921,20 @@ mod test { config .variables .insert("variable".to_string(), VariableKind::String); - let error = - parse_database_str("Text\n freq variable > value 10", &config).unwrap_err(); - assert_eq!( - error, - PalabritasError::InvalidVariableOperator { - info: ErrorInfo { - line: 2, - string: "variable > value".to_string() - }, - variable: "variable".to_string(), - operator: ">".to_string(), - variable_type: "String".to_string() - } - ); + let error = parse_database_str("Text\n freq variable > value 10", &config).unwrap_err(); + assert_eq!( + error, + PalabritasError::InvalidVariableOperator { + info: ErrorInfo { + line: 2, + col: 8, + string: "variable > value".to_string() + }, + variable: "variable".to_string(), + operator: ">".to_string(), + variable_type: "String".to_string() + } + ); } #[test] @@ -1925,6 +1950,7 @@ mod test { PalabritasError::InvalidVariableOperator { info: ErrorInfo { line: 2, + col: 3, string: "set variable +1".to_string() }, variable: "variable".to_string(), @@ -1933,7 +1959,7 @@ mod test { } ); } - + /* InvalidVariableOperator { info: ErrorInfo, From ff09c6dcb866d5695f41cb95aae5c7c036d1cd18 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Mon, 3 Jul 2023 19:01:26 -0300 Subject: [PATCH 31/94] runtime errors --- cli/src/console.rs | 90 ++++++--- palabritas/src/error.rs | 2 +- runtime/src/error.rs | 133 +++++++++++++ runtime/src/lib.rs | 4 + runtime/src/runtime.rs | 406 +++++++++++++++++++++++----------------- 5 files changed, 430 insertions(+), 205 deletions(-) create mode 100644 runtime/src/error.rs diff --git a/cli/src/console.rs b/cli/src/console.rs index 7cfa378..c1a12bf 100644 --- a/cli/src/console.rs +++ b/cli/src/console.rs @@ -51,11 +51,7 @@ impl Console { match input.as_str() { "" => { - if let Some(output_text) = runtime.next_block() { - print_output_text(output_text); - } else if let Some(output_text) = runtime.current_block() { - print_output_text(output_text); - } + print_output_text(runtime.next_block(), &runtime); } "sections" => { println!("Sections:"); @@ -63,6 +59,13 @@ impl Console { println!("{:?}", section); } } + "?" => { + if let Some(current_id) = runtime.block_stack.last() { + println!("Current Text Id: {}", current_id); + } + println!("Variables: "); + print_variables(&runtime) + } "q" => break, "variables" => print_variables(&runtime), str => { @@ -79,19 +82,21 @@ impl Console { } else if str.starts_with("->") { let substr: String = str.chars().skip(2).collect(); let mut splitted = substr.split('/'); - if let Some(section) = splitted.next() { - let jump_ok; - if let Some(subsection) = splitted.next() { - jump_ok = - runtime.jump_to_section(section.to_string(), Some(subsection.to_string())); - } else { - jump_ok = runtime.jump_to_section(section.to_string(), None); - } - - if jump_ok { - if let Some(output_text) = runtime.current_block() { - print_output_text(output_text); - } + if let Some(section_str) = splitted.next() { + let subsection = splitted.next(); + let section = match subsection { + Some(subsection) => Section { + section: section_str.to_string(), + subsection: Some(subsection.to_string()), + }, + None => Section { + section: section_str.to_string(), + subsection: None, + }, + }; + match runtime.jump_to_section(section) { + Ok(_) => print_output_text(runtime.current_block(), &runtime), + Err(err) => println!("{}", err), } } } else if let Ok(choice) = str.parse::() { @@ -99,9 +104,7 @@ impl Console { println!("invalid option"); continue; } - if let Some(output_text) = runtime.pick_choice(choice - 1) { - print_output_text(output_text); - } + print_output_text(runtime.pick_choice(choice - 1), &runtime); } else { println!("Unkown command: {}", str); } @@ -116,19 +119,19 @@ fn print_variables(runtime: &Runtime) { match kind { VariableKind::Integer => { let int: i32 = runtime.get_variable(variable).unwrap(); - println!("{}: {}", variable, int); + println!(" - {}: {}", variable, int); } VariableKind::Float => { let float: f32 = runtime.get_variable(variable).unwrap(); - println!("{}: {}", variable, float); + println!(" - {}: {}", variable, float); } VariableKind::Bool => { let bool: bool = runtime.get_variable(variable).unwrap(); - println!("{}: {}", variable, bool); + println!(" - {}: {}", variable, bool); } _ => { let string: String = runtime.get_variable(variable).unwrap(); - println!("{}: {}", variable, string); + println!(" - {}: {}", variable, string); } } } @@ -160,9 +163,38 @@ fn print_variable(runtime: &Runtime, variable: &String) { } println!("Variable {} doesn't exist", variable) } -fn print_output_text(output_text: Block) { - println!("{}", output_text.text); - for i in 0..output_text.choices.len() { - println!(" ({}){}", i + 1, output_text.choices[i]); +fn print_output_text(output_text: Result, runtime: &Runtime) { + match output_text { + Ok(output_text) => { + println!("{}", output_text.text); + print_choices(output_text.choices); + } + Err(err) => match err { + RuntimeError::WaitingForChoice(choices) => { + println!("Make a choice:\n"); + print_choices(choices); + } + RuntimeError::InvalidChoice { + total_choices, + choice_picked, + } => { + println!( + "Can't pick {}, because there's only {} options", + choice_picked + 1, + total_choices + ); + println!("Make a choice:\n"); + print_choices(runtime.get_choices_strings()); + } + _ => { + println!("{}", err) + } + }, + } +} + +fn print_choices(choices: Vec) { + for (i, choice) in choices.iter().enumerate() { + println!(" ({}){}", i + 1, choice); } } diff --git a/palabritas/src/error.rs b/palabritas/src/error.rs index 86e071b..6ace5a8 100644 --- a/palabritas/src/error.rs +++ b/palabritas/src/error.rs @@ -56,7 +56,7 @@ pub struct ErrorInfo { impl Display for ErrorInfo { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(f, "{}:{}\n {}", self.line, self.col, self.string) + write!(f, "{}:{} {}", self.line, self.col, self.string) } } impl Error for PalabritasError {} diff --git a/runtime/src/error.rs b/runtime/src/error.rs new file mode 100644 index 0000000..991e65d --- /dev/null +++ b/runtime/src/error.rs @@ -0,0 +1,133 @@ +use std::{ + error::Error, + fmt::Display, + num::{ParseFloatError, ParseIntError}, + str::ParseBoolError, +}; + +use cuentitos_common::{BlockId, SectionName}; + +use crate::Section; +type VariableName = String; + +#[derive(Debug, PartialEq, Eq)] +pub enum RuntimeError { + InvalidBlockId(BlockId), + WaitingForChoice(Vec), + SectionAtLowerLevel(SectionName), + StoryFinished, + SectionDoesntExist(Section), + UnexpectedBlock { + expected_block: String, + block_found: String, + }, + EmptyStack, + EmptyDatabase, + NoChoices, + InvalidChoice { + total_choices: usize, + choice_picked: usize, + }, + UnsupportedVariableType { + type_found: String, + }, + VariableDoesntExist(VariableName), + ParseIntError(ParseIntError), + ParseFloatError(ParseFloatError), + ParseBoolError(ParseBoolError), + UnknownParsingError, +} + +#[derive(Debug, PartialEq, Eq, Clone)] +pub struct ErrorInfo { + pub line: usize, + pub col: usize, + pub string: String, +} + +impl Display for ErrorInfo { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + write!(f, "{}:{}\n {}", self.line, self.col, self.string) + } +} +impl Error for RuntimeError {} +impl Display for RuntimeError { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + match self { + RuntimeError::InvalidBlockId(id) => { + write!(f, "Attempted to access invalid block id {}.", id) + } + RuntimeError::WaitingForChoice(choices) => { + let mut choices_str = String::default(); + for choice in choices { + choices_str += &format!("\n -{}", choice) + } + write!( + f, + "Can't progress story without making a choice.{}", + choices_str + ) + } + RuntimeError::SectionAtLowerLevel(section_name) => { + write!( + f, + "Invalid section `{}`. Sections can't be children. ", + section_name + ) + } + RuntimeError::StoryFinished => { + write!(f, "Story finished.") + } + RuntimeError::SectionDoesntExist(section_name) => { + write!(f, "Section `{}` doesnt exist.", section_name) + } + RuntimeError::UnexpectedBlock { + expected_block, + block_found, + } => { + write!( + f, + "Expected `{}` but found `{}`", + expected_block, block_found + ) + } + RuntimeError::EmptyDatabase => { + write!(f, "Story is empty.") + } + RuntimeError::NoChoices => { + write!(f, "Can't make a choice because there are no options.") + } + RuntimeError::InvalidChoice { + total_choices, + choice_picked, + } => { + write!( + f, + "Can't pick choice `{}` because there's only `{}` options.", + choice_picked, total_choices + ) + } + RuntimeError::UnsupportedVariableType { type_found } => { + write!(f, "`{}` is not a supported type for variables.\nSupported types:\n -Integer\n -Float\n -Bool\n -String\n -Enum", type_found) + } + RuntimeError::VariableDoesntExist(variable) => { + write!(f, "Variable `{}` does not exist.", variable) + } + RuntimeError::ParseIntError(e) => { + write!(f, "{}", e) + } + RuntimeError::ParseFloatError(e) => { + write!(f, "{}", e) + } + RuntimeError::ParseBoolError(e) => { + write!(f, "{}", e) + } + RuntimeError::UnknownParsingError => { + write!(f, "Unknown parsing error.") + } + RuntimeError::EmptyStack => { + write!(f, "The story has not been started.") + } + } + } +} diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 7d67833..a831783 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -2,7 +2,11 @@ mod runtime; pub use cuentitos_common::Database; pub use runtime::Block; pub use runtime::Runtime; +pub use runtime::Section; mod game_state; pub use cuentitos_common::VariableKind; pub use game_state::GameState; + +mod error; +pub use error::RuntimeError; diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index 2544fbb..51353ba 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -1,7 +1,7 @@ use std::fmt::Display; -use std::println; use crate::GameState; +use crate::RuntimeError; use cuentitos_common::condition::ComparisonOperator; use cuentitos_common::modifier::ModifierOperator; use cuentitos_common::BlockId; @@ -26,6 +26,8 @@ pub struct Block { pub functions: Vec, } +pub type Section = SectionKey; + #[derive(Debug, Default, Serialize, Deserialize, PartialEq)] pub struct Runtime { pub database: Database, @@ -51,6 +53,13 @@ impl Runtime { } } + pub fn reset(&mut self) { + self.block_stack.clear(); + self.choices.clear(); + self.game_state = GameState::from_config(&self.database.config); + self.set_seed(self.seed); + } + pub fn set_locale(&mut self, locale: T) -> Result<(), String> where T: AsRef, @@ -69,13 +78,13 @@ impl Runtime { self.rng = Some(Pcg32::seed_from_u64(seed)); } - pub fn jump_to_section(&mut self, section: String, subsection: Option) -> bool { + pub fn jump_to_section(&mut self, section: Section) -> Result<(), RuntimeError> { let current_section = self.game_state.current_section.clone(); - if subsection.is_none() { + if section.subsection.is_none() { if let Some(current_section) = current_section { let key = SectionKey { section: current_section, - subsection: Some(section.clone()), + subsection: Some(section.section.clone()), }; if let Some(block_id) = self.database.sections.get(&key) { self.block_stack.clear(); @@ -84,81 +93,101 @@ impl Runtime { } } - let key = SectionKey { - section, - subsection, - }; - if let Some(block_id) = self.database.sections.get(&key) { + if let Some(block_id) = self.database.sections.get(§ion) { self.block_stack.clear(); - self.game_state.current_section = Some(key.section); + self.game_state.current_section = Some(section.section); self.game_state.current_subsection = None; self.push_stack(*block_id) } else { - println!("Can't find section: {:?}", key); - false + Err(RuntimeError::SectionDoesntExist(section)) } } - pub fn next_block(&mut self) -> Option { + pub fn next_block(&mut self) -> Result { if self.database.blocks.is_empty() { - return None; + return Err(RuntimeError::EmptyDatabase); } - if !self.update_stack() { - return None; - } + self.update_stack()?; while !self.next_block_meets_requirements() { - self.pop_stack_and_find_next(); + self.pop_stack_and_find_next()?; } self.current_block() } - pub fn current_block(&mut self) -> Option { - let id = self.block_stack.last().unwrap(); + pub fn current_block(&mut self) -> Result { + let id = match self.block_stack.last() { + Some(id) => id, + None => return Err(RuntimeError::EmptyStack), + }; + let block = self.get_block(*id); let settings = block.get_settings(); let tags = settings.tags.clone(); let functions = settings.functions.clone(); - if let cuentitos_common::Block::Text { id, settings: _ } = block { - return Some(Block { + match block { + cuentitos_common::Block::Text { id, settings: _ } => Ok(Block { text: self.database.i18n.get_translation(&self.current_locale, id), choices: self.get_choices_strings(), tags, functions, - }); + }), + cuentitos_common::Block::Choice { id: _, settings: _ } => { + Err(RuntimeError::UnexpectedBlock { + expected_block: "text".to_string(), + block_found: "choice".to_string(), + }) + } + cuentitos_common::Block::Bucket { + name: _, + settings: _, + } => Err(RuntimeError::UnexpectedBlock { + expected_block: "text".to_string(), + block_found: "bucket".to_string(), + }), + cuentitos_common::Block::Section { id: _, settings: _ } => { + Err(RuntimeError::UnexpectedBlock { + expected_block: "text".to_string(), + block_found: "section".to_string(), + }) + } + cuentitos_common::Block::Subsection { id: _, settings: _ } => { + Err(RuntimeError::UnexpectedBlock { + expected_block: "text".to_string(), + block_found: "subsection".to_string(), + }) + } } - - None } - pub fn pick_choice(&mut self, choice: usize) -> Option { + pub fn pick_choice(&mut self, choice: usize) -> Result { if self.database.blocks.is_empty() { - return None; + return Err(RuntimeError::EmptyDatabase); } let choices = &self.choices; if choices.is_empty() { - println!("There are no choices"); - return None; + return Err(RuntimeError::NoChoices); } if choice >= choices.len() { - println!("There's only {} options", choices.len()); - return None; + return Err(RuntimeError::InvalidChoice { + total_choices: choices.len(), + choice_picked: choice, + }); } if choices[choice] >= self.database.blocks.len() { - println!("Invalid option"); - return None; + return Err(RuntimeError::InvalidBlockId(choices[choice])); } - self.push_stack(choices[choice]); + self.push_stack(choices[choice])?; self.next_block() } - pub fn set_variable(&mut self, variable: R, value: T) -> Result<(), String> + pub fn set_variable(&mut self, variable: R, value: T) -> Result<(), RuntimeError> where T: Display + std::str::FromStr + Default, R: AsRef, @@ -179,10 +208,12 @@ impl Runtime { .variables .insert(variable, value.to_string()); } else { - return Err("Invalid Variable Type".to_string()); + return Err(RuntimeError::UnsupportedVariableType { + type_found: t.to_string(), + }); } } else { - return Err("Invalid Variable".to_string()); + return Err(RuntimeError::VariableDoesntExist(variable)); } Ok(()) } @@ -200,7 +231,7 @@ impl Runtime { } } - pub fn get_variable(&self, variable: R) -> Result + pub fn get_variable(&self, variable: R) -> Result where T: Display + std::str::FromStr + Default, R: AsRef, @@ -210,6 +241,7 @@ impl Runtime { Some(value) => value.clone(), None => T::default().to_string(), }; + if self.database.config.variables.contains_key(&variable) { let t = std::any::type_name::(); if (t == "i32" && self.database.config.variables[&variable] == VariableKind::Integer) @@ -220,20 +252,21 @@ impl Runtime { || (t == "&str" && self.database.config.variables[&variable] == VariableKind::String) || self.is_valid_enum::(&value) { - if let Ok(value) = value.parse::() { - return Ok(value); - } else { - return Err("Unknown Parsing Error".to_string()); + match value.parse::() { + Ok(value) => Ok(value), + Err(_) => Err(RuntimeError::UnknownParsingError), } + } else { + Err(RuntimeError::UnsupportedVariableType { + type_found: t.to_string(), + }) } } else { - return Err("Invalid Variable".to_string()); + Err(RuntimeError::VariableDoesntExist(variable)) } - - Err("Invalid Variable".to_string()) } - pub fn apply_modifier(&mut self, modifier: &Modifier) -> Result<(), String> { + pub fn apply_modifier(&mut self, modifier: &Modifier) -> Result<(), RuntimeError> { match self.get_variable_kind(&modifier.variable) { Some(kind) => match kind { VariableKind::Integer => { @@ -242,30 +275,38 @@ impl Runtime { Ok(value) => { self.apply_integer_modifier(&modifier.variable, *value, &modifier.operator) } - Err(e) => Err(e.to_string()), + Err(e) => Err(RuntimeError::ParseIntError(e.clone())), } } VariableKind::Float => { let value = &modifier.value.parse::(); match value { Ok(value) => self.apply_float_modifier(&modifier.variable, *value, &modifier.operator), - Err(e) => Err(e.to_string()), + Err(e) => Err(RuntimeError::ParseFloatError(e.clone())), } } VariableKind::Bool => { let value = &modifier.value.parse::(); match value { Ok(value) => self.set_variable(&modifier.variable, *value), - Err(e) => Err(e.to_string()), + Err(e) => Err(RuntimeError::ParseBoolError(e.clone())), } } _ => self.set_variable(&modifier.variable, modifier.value.clone()), }, - None => Err(format!( - "Can't modify variable {}, because it doesn't exists", - modifier.variable - )), + None => Err(RuntimeError::VariableDoesntExist(modifier.variable.clone())), + } + } + + pub fn get_choices_strings(&self) -> Vec { + let mut choices_strings = Vec::default(); + for choice in &self.choices { + if let cuentitos_common::Block::Choice { id, settings: _ } = self.get_block(*choice) { + choices_strings.push(self.database.i18n.get_translation(&self.current_locale, id)); + } } + + choices_strings } fn next_block_meets_requirements(&mut self) -> bool { @@ -348,13 +389,7 @@ impl Runtime { match self.get_block(id).get_settings().chance { cuentitos_common::Chance::None => true, cuentitos_common::Chance::Frequency(_) => true, - cuentitos_common::Chance::Probability(probability) => { - if let Some(random_number) = self.random_float() { - random_number < probability - } else { - false - } - } + cuentitos_common::Chance::Probability(probability) => self.random_float() < probability, } } @@ -390,28 +425,26 @@ impl Runtime { false } - fn random_float(&mut self) -> Option { - if self.rng.is_none() { - self.rng = Some(Pcg32::from_entropy()) - } - - let mut rng = self.rng.as_ref()?.clone(); + fn random_float(&mut self) -> f32 { + let mut rng = match &self.rng { + Some(rng) => rng.clone(), + None => Pcg32::from_entropy(), + }; let num = rng.gen(); self.rng = Some(rng); - Some(num) + num } - fn random_with_max(&mut self, max: u32) -> Option { - if self.rng.is_none() { - self.rng = Some(Pcg32::from_entropy()) - } + fn random_with_max(&mut self, max: u32) -> u32 { + let mut rng = match &self.rng { + Some(rng) => rng.clone(), + None => Pcg32::from_entropy(), + }; - let mut rng = self.rng.as_ref()?.clone(); let num = rng.gen_range(0..max); - self.rng = Some(rng); - Some(num) + num } fn get_frequency_with_modifier(&self, settings: &BlockSettings) -> u32 { @@ -435,7 +468,7 @@ impl Runtime { variable: &String, value: i32, operator: &ModifierOperator, - ) -> Result<(), String> { + ) -> Result<(), RuntimeError> { let previous_value = self.get_variable::<&str, i32>(variable); match previous_value { Ok(previous_value) => match operator { @@ -454,7 +487,7 @@ impl Runtime { variable: &String, value: f32, operator: &ModifierOperator, - ) -> Result<(), String> { + ) -> Result<(), RuntimeError> { let previous_value = self.get_variable::<&str, f32>(variable); match previous_value { Ok(previous_value) => match operator { @@ -468,8 +501,11 @@ impl Runtime { } } - fn apply_modifiers(&mut self) -> Result<(), String> { - let id = self.block_stack.last().unwrap(); + fn apply_modifiers(&mut self) -> Result<(), RuntimeError> { + let id = match self.block_stack.last() { + Some(id) => id, + None => return Err(RuntimeError::EmptyStack), + }; let block = self.get_block(*id); for modifier in block.get_settings().modifiers.clone() { self.apply_modifier(&modifier)?; @@ -477,134 +513,135 @@ impl Runtime { Ok(()) } - fn push_stack(&mut self, id: BlockId) -> bool { + fn push_stack(&mut self, id: BlockId) -> Result<(), RuntimeError> { self.block_stack.push(id); - match self.apply_modifiers() { - Ok(_) => {} - Err(e) => println!("{}", e), - } - self.update_choices(); if self.get_block(id).get_settings().unique { if self.game_state.uniques_played.contains(&id) { - return false; + return self.pop_stack_and_find_next(); } else { self.game_state.uniques_played.push(id); } } + self.apply_modifiers()?; + self.update_choices()?; + match self.get_block(id) { cuentitos_common::Block::Section { id, settings: _ } => { self.game_state.current_section = Some(id.clone()); self.game_state.current_subsection = None; - return self.update_stack(); + self.update_stack() } cuentitos_common::Block::Subsection { id, settings: _ } => { self.game_state.current_subsection = Some(id.clone()); - return self.update_stack(); + self.update_stack() } - _ => {} + _ => Ok(()), } - - true } - fn update_stack(&mut self) -> bool { + fn update_stack(&mut self) -> Result<(), RuntimeError> { if self.block_stack.is_empty() { return self.push_stack(0); } - let last_block_id = self.block_stack.last().unwrap(); + let last_block_id = match self.block_stack.last() { + Some(id) => id, + None => return Err(RuntimeError::EmptyStack), + }; if last_block_id >= &self.database.blocks.len() { - return false; + return Err(RuntimeError::InvalidBlockId(*last_block_id)); } let settings = self.get_block(*last_block_id).get_settings().clone(); if !settings.children.is_empty() { - if let Some(result) = self.push_next_child_in_stack(&settings, 0) { - return result; + if let Some(child) = self.push_next_child_in_stack(&settings, 0)? { + return self.push_stack(child); } } - if self.push_next_block() { - true - } else { - self.pop_stack_and_find_next() + match settings.next { + cuentitos_common::NextBlock::None => {} + cuentitos_common::NextBlock::BlockId(id) => { + self.block_stack.clear(); + return self.push_stack(id); + } + cuentitos_common::NextBlock::EndOfFile => { + self.reset(); + return Err(RuntimeError::StoryFinished); + } + cuentitos_common::NextBlock::Section(section) => { + return self.jump_to_section(section); + } } + + self.pop_stack_and_find_next() } fn push_next_child_in_stack( &mut self, settings: &BlockSettings, next_child: usize, - ) -> Option { + ) -> Result, RuntimeError> { if next_child >= settings.children.len() { - return None; + return Ok(None); } let id = settings.children[next_child]; match self.get_block(id) { - cuentitos_common::Block::Text { id: _, settings: _ } => { - Some(self.push_stack(settings.children[0])) - } + cuentitos_common::Block::Text { id: _, settings: _ } => Ok(Some(settings.children[0])), cuentitos_common::Block::Choice { id: _, settings: _ } => { if self.choices.contains(&id) { - println!("Make a choice"); - Some(false) + Err(RuntimeError::WaitingForChoice(self.get_choices_strings())) } else { self.push_next_child_in_stack(settings, next_child + 1) } } - cuentitos_common::Block::Bucket { name: _, settings } => { - if let Some(new_block) = self.get_random_block_from_bucket(&settings.clone()) { + cuentitos_common::Block::Bucket { + name: _, + settings: bucket_settings, + } => { + if let Some(new_block) = self.get_random_block_from_bucket(&bucket_settings.clone()) { if let cuentitos_common::Block::Choice { id: _, settings: _ } = self.get_block(new_block) { - println!("Make a choice"); - Some(false) + Err(RuntimeError::WaitingForChoice(self.get_choices_strings())) } else { - Some(self.push_stack(new_block)) + Ok(Some(new_block)) } } else { - Some(false) + self.push_next_child_in_stack(settings, next_child + 1) } } - _ => Some(false), - } - } - - fn push_next_block(&mut self) -> bool { - let last_block_id = *self.block_stack.last().unwrap(); - - let last_block = self.get_block(last_block_id).clone(); - let last_settings = last_block.get_settings(); - match &last_settings.next { - cuentitos_common::NextBlock::None => false, - cuentitos_common::NextBlock::BlockId(other_id) => { - self.block_stack.clear(); - self.push_stack(*other_id) - } - cuentitos_common::NextBlock::EndOfFile => { - println!("Story finished\n"); - self.block_stack = vec![0]; - self.game_state = GameState::from_config(&self.database.config); - true + cuentitos_common::Block::Section { id, settings: _ } => { + Err(RuntimeError::SectionAtLowerLevel(id.clone())) } - cuentitos_common::NextBlock::Section(key) => { - self.jump_to_section(key.section.clone(), key.subsection.clone()) + cuentitos_common::Block::Subsection { id, settings: _ } => { + Err(RuntimeError::SectionAtLowerLevel(id.clone())) } } } - fn pop_stack_and_find_next(&mut self) -> bool { - let last_block_id = *self.block_stack.last().unwrap(); + fn pop_stack_and_find_next(&mut self) -> Result<(), RuntimeError> { + let last_block_id: usize = match self.block_stack.last() { + Some(id) => *id, + None => return Err(RuntimeError::EmptyStack), + }; + self.block_stack.pop(); if self.block_stack.is_empty() { return self.push_stack(last_block_id + 1); } - let parent = &self.database.blocks[*self.block_stack.last().unwrap()].clone(); + let new_block_id: &usize = match self.block_stack.last() { + Some(id) => id, + None => return Err(RuntimeError::EmptyStack), + }; + + let parent = &self.database.blocks[*new_block_id].clone(); + let parent_settings = parent.get_settings(); let mut previous_block_found = false; for sibling in &parent_settings.children { @@ -628,6 +665,21 @@ impl Runtime { } } + match &parent_settings.next { + cuentitos_common::NextBlock::None => {} + cuentitos_common::NextBlock::BlockId(id) => { + self.block_stack.clear(); + return self.push_stack(*id); + } + cuentitos_common::NextBlock::EndOfFile => { + self.reset(); + return Err(RuntimeError::StoryFinished); + } + cuentitos_common::NextBlock::Section(section) => { + return self.jump_to_section(section.clone()); + } + } + self.pop_stack_and_find_next() } @@ -641,8 +693,7 @@ impl Runtime { } } - //TODO remove unwrap - let mut random_number = self.random_with_max(total_frequency).unwrap(); + let mut random_number = self.random_with_max(total_frequency); for child in &settings.children { if self.meets_requirements(*child) { @@ -661,25 +712,18 @@ impl Runtime { &self.database.blocks[id] } - fn get_choices_strings(&mut self) -> Vec { - let mut choices_strings = Vec::default(); - for choice in &self.choices { - if let cuentitos_common::Block::Choice { id, settings: _ } = self.get_block(*choice) { - choices_strings.push(self.database.i18n.get_translation(&self.current_locale, id)); - } - } - - choices_strings - } - - fn update_choices(&mut self) { + fn update_choices(&mut self) -> Result<(), RuntimeError> { self.choices = Vec::default(); if self.block_stack.is_empty() { - return; + return Err(RuntimeError::EmptyStack); } - let last_block_id = self.block_stack.last().unwrap(); + let last_block_id: &usize = match self.block_stack.last() { + Some(id) => id, + None => return Err(RuntimeError::EmptyStack), + }; + let last_block = self.get_block(*last_block_id).clone(); let settings = last_block.get_settings(); @@ -705,6 +749,8 @@ impl Runtime { } } } + + Ok(()) } } @@ -713,7 +759,7 @@ mod test { use std::{collections::HashMap, fmt::Display, str::FromStr, vec}; - use crate::Runtime; + use crate::{runtime::Section, Runtime}; use cuentitos_common::{ condition::ComparisonOperator, modifier::ModifierOperator, Block, BlockSettings, Chance, Condition, Config, Database, FrequencyModifier, Function, I18n, LanguageDb, LanguageId, @@ -788,9 +834,19 @@ mod test { database, ..Default::default() }; - runtime.jump_to_section("section_2".to_string(), Some("subsection".to_string())); + runtime + .jump_to_section(Section { + section: "section_2".to_string(), + subsection: Some("subsection".to_string()), + }) + .unwrap(); assert_eq!(runtime.block_stack, vec![2, 4]); - runtime.jump_to_section("section_1".to_string(), None); + runtime + .jump_to_section(Section { + section: "section_1".to_string(), + subsection: None, + }) + .unwrap(); assert_eq!(runtime.block_stack, vec![0, 3]); } @@ -832,7 +888,7 @@ mod test { ..Default::default() }; - runtime.update_choices(); + runtime.update_choices().unwrap(); let expected_result = vec![1, 2]; assert_eq!(runtime.choices, expected_result); } @@ -888,7 +944,7 @@ mod test { current_locale: "en".to_string(), ..Default::default() }; - runtime.update_choices(); + runtime.update_choices().unwrap(); let choices = runtime.get_choices_strings(); let expected_result = vec!["a".to_string(), "b".to_string()]; assert_eq!(choices, expected_result); @@ -925,7 +981,7 @@ mod test { block_stack: vec![0], ..Default::default() }; - runtime.update_stack(); + runtime.update_stack().unwrap(); assert_eq!(*runtime.block_stack.last().unwrap(), 1); } @@ -978,11 +1034,11 @@ mod test { ..Default::default() }; - runtime.update_stack(); + runtime.update_stack().unwrap(); assert_eq!(*runtime.block_stack.last().unwrap(), 3); - runtime.update_stack(); + runtime.update_stack().unwrap(); assert_eq!(*runtime.block_stack.last().unwrap(), 4); - runtime.update_stack(); + runtime.update_stack().unwrap(); assert_eq!(*runtime.block_stack.last().unwrap(), 1); } @@ -1033,13 +1089,13 @@ mod test { ..Default::default() }; - runtime.update_choices(); - let output = runtime.current_block(); - let expected_output = Some(crate::Block { + runtime.update_choices().unwrap(); + let output = runtime.current_block().unwrap(); + let expected_output = crate::Block { text: "parent".to_string(), choices: vec!["1".to_string(), "2".to_string()], ..Default::default() - }); + }; assert_eq!(output, expected_output); } @@ -1091,22 +1147,22 @@ mod test { ..Default::default() }; - let output = runtime.next_block(); - let expected_output = Some(crate::Block { + let output = runtime.next_block().unwrap(); + let expected_output = crate::Block { text: "parent".to_string(), choices: vec!["1".to_string(), "2".to_string()], ..Default::default() - }); + }; assert_eq!(output, expected_output); assert_eq!(runtime.block_stack, vec![0]); } - + /* #[test] fn next_output_doesnt_work_with_empty_file() { let mut runtime = Runtime::new(Database::default()); assert_eq!(runtime.next_block(), None); - } + } */ #[test] fn get_random_block_from_bucket_works_correctly() { @@ -1157,7 +1213,7 @@ mod test { .get_random_block_from_bucket(&bucket_settings) .unwrap(); assert_eq!(id, 1); - runtime.push_stack(1); + runtime.push_stack(1).unwrap(); let bucket_settings = runtime.get_block(0).get_settings().clone(); let id = runtime .get_random_block_from_bucket(&bucket_settings) @@ -2440,11 +2496,11 @@ mod test { }; let mut runtime = Runtime::new(database); - runtime.update_stack(); + runtime.update_stack().unwrap(); assert_eq!(1, *runtime.block_stack.last().unwrap()); - runtime.update_stack(); + runtime.update_stack().unwrap(); assert_eq!(2, *runtime.block_stack.last().unwrap()); - runtime.update_stack(); + runtime.update_stack().unwrap(); assert_eq!(2, *runtime.block_stack.last().unwrap()); } From 676f8b554e9d671cd89f12c962e4a600eba78054 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Mon, 3 Jul 2023 20:31:01 -0300 Subject: [PATCH 32/94] tests --- cli/src/console.rs | 2 +- runtime/src/error.rs | 4 + runtime/src/runtime.rs | 699 ++++++++++++++++++++++++++++++++--------- 3 files changed, 552 insertions(+), 153 deletions(-) diff --git a/cli/src/console.rs b/cli/src/console.rs index c1a12bf..85d9bf3 100644 --- a/cli/src/console.rs +++ b/cli/src/console.rs @@ -94,7 +94,7 @@ impl Console { subsection: None, }, }; - match runtime.jump_to_section(section) { + match runtime.jump_to_section(§ion) { Ok(_) => print_output_text(runtime.current_block(), &runtime), Err(err) => println!("{}", err), } diff --git a/runtime/src/error.rs b/runtime/src/error.rs index 991e65d..2e93705 100644 --- a/runtime/src/error.rs +++ b/runtime/src/error.rs @@ -36,6 +36,7 @@ pub enum RuntimeError { ParseFloatError(ParseFloatError), ParseBoolError(ParseBoolError), UnknownParsingError, + FrequencyModifierWithProbability, } #[derive(Debug, PartialEq, Eq, Clone)] @@ -128,6 +129,9 @@ impl Display for RuntimeError { RuntimeError::EmptyStack => { write!(f, "The story has not been started.") } + RuntimeError::FrequencyModifierWithProbability => { + write!(f, "Can't apply a frequency modifier to a probability.") + } } } } diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index 51353ba..45a032f 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -78,7 +78,7 @@ impl Runtime { self.rng = Some(Pcg32::seed_from_u64(seed)); } - pub fn jump_to_section(&mut self, section: Section) -> Result<(), RuntimeError> { + pub fn jump_to_section(&mut self, section: &Section) -> Result<(), RuntimeError> { let current_section = self.game_state.current_section.clone(); if section.subsection.is_none() { if let Some(current_section) = current_section { @@ -93,13 +93,13 @@ impl Runtime { } } - if let Some(block_id) = self.database.sections.get(§ion) { + if let Some(block_id) = self.database.sections.get(section) { self.block_stack.clear(); - self.game_state.current_section = Some(section.section); + self.game_state.current_section = Some(section.section.clone()); self.game_state.current_subsection = None; self.push_stack(*block_id) } else { - Err(RuntimeError::SectionDoesntExist(section)) + Err(RuntimeError::SectionDoesntExist(section.clone())) } } @@ -110,7 +110,7 @@ impl Runtime { self.update_stack()?; - while !self.next_block_meets_requirements() { + while !self.next_block_meets_requirements()? { self.pop_stack_and_find_next()?; } self.current_block() @@ -218,16 +218,16 @@ impl Runtime { Ok(()) } - pub fn get_variable_kind(&self, variable: R) -> Option + pub fn get_variable_kind(&self, variable: R) -> Result where R: AsRef, { let variable = variable.as_ref(); if self.database.config.variables.contains_key(variable) { - Some(self.database.config.variables[variable].clone()) + Ok(self.database.config.variables[variable].clone()) } else { - None + Err(RuntimeError::VariableDoesntExist(variable.to_string())) } } @@ -267,34 +267,29 @@ impl Runtime { } pub fn apply_modifier(&mut self, modifier: &Modifier) -> Result<(), RuntimeError> { - match self.get_variable_kind(&modifier.variable) { - Some(kind) => match kind { - VariableKind::Integer => { - let value = &modifier.value.parse::(); - match value { - Ok(value) => { - self.apply_integer_modifier(&modifier.variable, *value, &modifier.operator) - } - Err(e) => Err(RuntimeError::ParseIntError(e.clone())), - } + match self.get_variable_kind(&modifier.variable)? { + VariableKind::Integer => { + let value = &modifier.value.parse::(); + match value { + Ok(value) => self.apply_integer_modifier(&modifier.variable, *value, &modifier.operator), + Err(e) => Err(RuntimeError::ParseIntError(e.clone())), } - VariableKind::Float => { - let value = &modifier.value.parse::(); - match value { - Ok(value) => self.apply_float_modifier(&modifier.variable, *value, &modifier.operator), - Err(e) => Err(RuntimeError::ParseFloatError(e.clone())), - } + } + VariableKind::Float => { + let value = &modifier.value.parse::(); + match value { + Ok(value) => self.apply_float_modifier(&modifier.variable, *value, &modifier.operator), + Err(e) => Err(RuntimeError::ParseFloatError(e.clone())), } - VariableKind::Bool => { - let value = &modifier.value.parse::(); - match value { - Ok(value) => self.set_variable(&modifier.variable, *value), - Err(e) => Err(RuntimeError::ParseBoolError(e.clone())), - } + } + VariableKind::Bool => { + let value = &modifier.value.parse::(); + match value { + Ok(value) => self.set_variable(&modifier.variable, *value), + Err(e) => Err(RuntimeError::ParseBoolError(e.clone())), } - _ => self.set_variable(&modifier.variable, modifier.value.clone()), - }, - None => Err(RuntimeError::VariableDoesntExist(modifier.variable.clone())), + } + _ => self.set_variable(&modifier.variable, modifier.value.clone()), } } @@ -309,80 +304,84 @@ impl Runtime { choices_strings } - fn next_block_meets_requirements(&mut self) -> bool { + fn next_block_meets_requirements(&mut self) -> Result { if let Some(id) = self.block_stack.last() { self.meets_requirements(*id) } else { - false + Ok(false) } } - fn meets_requirements(&mut self, id: BlockId) -> bool { + fn meets_requirements(&mut self, id: BlockId) -> Result { for requirement in &self.get_block(id).get_settings().requirements { - if !self.meets_condition(&requirement.condition) { - return false; + if !self.meets_condition(&requirement.condition)? { + return Ok(false); } } - self.roll_chances_for_block(id) - } - - fn meets_condition(&self, condition: &Condition) -> bool { - if let Some(kind) = self.get_variable_kind(condition.variable.clone()) { - match kind { - VariableKind::Integer => { - if let Ok(current_value) = self.get_variable::<&str, i32>(&condition.variable) { - if let Ok(condition_value) = condition.value.parse::() { - match condition.operator { - ComparisonOperator::Equal => return current_value == condition_value, - ComparisonOperator::NotEqual => return current_value != condition_value, - ComparisonOperator::GreaterThan => return current_value > condition_value, - ComparisonOperator::LessThan => return current_value < condition_value, - ComparisonOperator::GreaterOrEqualThan => return current_value >= condition_value, - ComparisonOperator::LessOrEqualThan => return current_value <= condition_value, + Ok(self.roll_chances_for_block(id)) + } + + fn meets_condition(&self, condition: &Condition) -> Result { + let kind = self.get_variable_kind(condition.variable.clone())?; + + match kind { + VariableKind::Integer => { + if let Ok(current_value) = self.get_variable::<&str, i32>(&condition.variable) { + if let Ok(condition_value) = condition.value.parse::() { + match condition.operator { + ComparisonOperator::Equal => return Ok(current_value == condition_value), + ComparisonOperator::NotEqual => return Ok(current_value != condition_value), + ComparisonOperator::GreaterThan => return Ok(current_value > condition_value), + ComparisonOperator::LessThan => return Ok(current_value < condition_value), + ComparisonOperator::GreaterOrEqualThan => { + return Ok(current_value >= condition_value) } + ComparisonOperator::LessOrEqualThan => return Ok(current_value <= condition_value), } } } - VariableKind::Float => { - if let Ok(current_value) = self.get_variable::<&str, f32>(&condition.variable) { - if let Ok(condition_value) = condition.value.parse::() { - match condition.operator { - ComparisonOperator::Equal => return current_value == condition_value, - ComparisonOperator::NotEqual => return current_value != condition_value, - ComparisonOperator::GreaterThan => return current_value > condition_value, - ComparisonOperator::LessThan => return current_value < condition_value, - ComparisonOperator::GreaterOrEqualThan => return current_value >= condition_value, - ComparisonOperator::LessOrEqualThan => return current_value <= condition_value, + } + VariableKind::Float => { + if let Ok(current_value) = self.get_variable::<&str, f32>(&condition.variable) { + if let Ok(condition_value) = condition.value.parse::() { + match condition.operator { + ComparisonOperator::Equal => return Ok(current_value == condition_value), + ComparisonOperator::NotEqual => return Ok(current_value != condition_value), + ComparisonOperator::GreaterThan => return Ok(current_value > condition_value), + ComparisonOperator::LessThan => return Ok(current_value < condition_value), + ComparisonOperator::GreaterOrEqualThan => { + return Ok(current_value >= condition_value) } + ComparisonOperator::LessOrEqualThan => return Ok(current_value <= condition_value), } } } - VariableKind::Bool => { - if let Ok(current_value) = self.get_variable::<&str, bool>(&condition.variable) { - if let Ok(condition_value) = condition.value.parse::() { - match condition.operator { - ComparisonOperator::Equal => return current_value == condition_value, - ComparisonOperator::NotEqual => return current_value != condition_value, - _ => {} - } + } + VariableKind::Bool => { + if let Ok(current_value) = self.get_variable::<&str, bool>(&condition.variable) { + if let Ok(condition_value) = condition.value.parse::() { + match condition.operator { + ComparisonOperator::Equal => return Ok(current_value == condition_value), + ComparisonOperator::NotEqual => return Ok(current_value != condition_value), + _ => {} } } } - _ => { - if let Ok(current_value) = self.get_variable::<&str, String>(&condition.variable) { - if let Ok(condition_value) = condition.value.parse::() { - match condition.operator { - ComparisonOperator::Equal => return current_value == condition_value, - ComparisonOperator::NotEqual => return current_value != condition_value, - _ => {} - } + } + _ => { + if let Ok(current_value) = self.get_variable::<&str, String>(&condition.variable) { + if let Ok(condition_value) = condition.value.parse::() { + match condition.operator { + ComparisonOperator::Equal => return Ok(current_value == condition_value), + ComparisonOperator::NotEqual => return Ok(current_value != condition_value), + _ => {} } } } } } - false + Ok(false) } fn roll_chances_for_block(&mut self, id: BlockId) -> bool { @@ -447,19 +446,21 @@ impl Runtime { num } - fn get_frequency_with_modifier(&self, settings: &BlockSettings) -> u32 { + fn get_frequency_with_modifier(&self, settings: &BlockSettings) -> Result { match settings.chance { - cuentitos_common::Chance::None => 0, + cuentitos_common::Chance::None => Ok(0), cuentitos_common::Chance::Frequency(frequency) => { let mut final_frequency = frequency as i32; for freq_mod in &settings.frequency_modifiers { - if self.meets_condition(&freq_mod.condition) { + if self.meets_condition(&freq_mod.condition)? { final_frequency += freq_mod.value; } } - final_frequency as u32 + Ok(final_frequency as u32) + } + cuentitos_common::Chance::Probability(_) => { + Err(RuntimeError::FrequencyModifierWithProbability) } - cuentitos_common::Chance::Probability(_) => 0, } } @@ -542,6 +543,10 @@ impl Runtime { } fn update_stack(&mut self) -> Result<(), RuntimeError> { + if self.database.blocks.is_empty() { + return Err(RuntimeError::EmptyDatabase); + } + if self.block_stack.is_empty() { return self.push_stack(0); } @@ -574,7 +579,7 @@ impl Runtime { return Err(RuntimeError::StoryFinished); } cuentitos_common::NextBlock::Section(section) => { - return self.jump_to_section(section); + return self.jump_to_section(§ion); } } @@ -604,7 +609,7 @@ impl Runtime { name: _, settings: bucket_settings, } => { - if let Some(new_block) = self.get_random_block_from_bucket(&bucket_settings.clone()) { + if let Some(new_block) = self.get_random_block_from_bucket(&bucket_settings.clone())? { if let cuentitos_common::Block::Choice { id: _, settings: _ } = self.get_block(new_block) { Err(RuntimeError::WaitingForChoice(self.get_choices_strings())) @@ -651,7 +656,7 @@ impl Runtime { return self.push_stack(*sibling); } cuentitos_common::Block::Bucket { name: _, settings } => { - if let Some(new_block) = self.get_random_block_from_bucket(&settings.clone()) { + if let Some(new_block) = self.get_random_block_from_bucket(&settings.clone())? { return self.push_stack(new_block); } } @@ -676,19 +681,22 @@ impl Runtime { return Err(RuntimeError::StoryFinished); } cuentitos_common::NextBlock::Section(section) => { - return self.jump_to_section(section.clone()); + return self.jump_to_section(section); } } self.pop_stack_and_find_next() } - fn get_random_block_from_bucket(&mut self, settings: &BlockSettings) -> Option { + fn get_random_block_from_bucket( + &mut self, + settings: &BlockSettings, + ) -> Result, RuntimeError> { let mut total_frequency = 0; for child in &settings.children { - if self.meets_requirements(*child) { + if self.meets_requirements(*child)? { let child_settings = self.get_block(*child).get_settings(); - let frequency = self.get_frequency_with_modifier(child_settings); + let frequency = self.get_frequency_with_modifier(child_settings)?; total_frequency += frequency; } } @@ -696,16 +704,16 @@ impl Runtime { let mut random_number = self.random_with_max(total_frequency); for child in &settings.children { - if self.meets_requirements(*child) { + if self.meets_requirements(*child)? { let child_settings = self.get_block(*child).get_settings(); - let frequency = self.get_frequency_with_modifier(child_settings); + let frequency = self.get_frequency_with_modifier(child_settings)?; if random_number <= frequency { - return Some(*child); + return Ok(Some(*child)); } random_number -= frequency; } } - None + Ok(None) } fn get_block(&self, id: BlockId) -> &cuentitos_common::Block { @@ -732,12 +740,12 @@ impl Runtime { if *child < self.database.blocks.len() { match self.get_block(*child) { cuentitos_common::Block::Choice { id: _, settings: _ } => { - if self.meets_requirements(*child) { + if self.meets_requirements(*child)? { self.choices.push(*child) } } cuentitos_common::Block::Bucket { name: _, settings } => { - if let Some(picked_block) = self.get_random_block_from_bucket(&settings.clone()) { + if let Some(picked_block) = self.get_random_block_from_bucket(&settings.clone())? { if let cuentitos_common::Block::Choice { id: _, settings: _ } = self.get_block(picked_block) { @@ -759,7 +767,7 @@ mod test { use std::{collections::HashMap, fmt::Display, str::FromStr, vec}; - use crate::{runtime::Section, Runtime}; + use crate::{runtime::Section, Runtime, RuntimeError}; use cuentitos_common::{ condition::ComparisonOperator, modifier::ModifierOperator, Block, BlockSettings, Chance, Condition, Config, Database, FrequencyModifier, Function, I18n, LanguageDb, LanguageId, @@ -835,14 +843,14 @@ mod test { ..Default::default() }; runtime - .jump_to_section(Section { + .jump_to_section(&Section { section: "section_2".to_string(), subsection: Some("subsection".to_string()), }) .unwrap(); assert_eq!(runtime.block_stack, vec![2, 4]); runtime - .jump_to_section(Section { + .jump_to_section(&Section { section: "section_1".to_string(), subsection: None, }) @@ -1211,12 +1219,14 @@ mod test { let bucket_settings = runtime.get_block(0).get_settings().clone(); let id = runtime .get_random_block_from_bucket(&bucket_settings) + .unwrap() .unwrap(); assert_eq!(id, 1); runtime.push_stack(1).unwrap(); let bucket_settings = runtime.get_block(0).get_settings().clone(); let id = runtime .get_random_block_from_bucket(&bucket_settings) + .unwrap() .unwrap(); assert_eq!(id, 2); } @@ -1645,13 +1655,13 @@ mod test { let mut runtime = Runtime::new(database); runtime.block_stack = vec![0]; - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); runtime.set_variable("health", 100).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); runtime.set_variable("health", 150).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); } @@ -1690,13 +1700,13 @@ mod test { let mut runtime = Runtime::new(database); runtime.block_stack = vec![0]; - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); runtime.set_variable("health", 100).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); runtime.set_variable("health", 150).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); } @@ -1735,13 +1745,13 @@ mod test { let mut runtime = Runtime::new(database); runtime.block_stack = vec![0]; - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); runtime.set_variable("health", 100).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); runtime.set_variable("health", 150).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); } @@ -1780,13 +1790,13 @@ mod test { let mut runtime = Runtime::new(database); runtime.block_stack = vec![0]; - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); runtime.set_variable("health", 100).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); runtime.set_variable("health", 150).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); } #[test] @@ -1824,13 +1834,13 @@ mod test { let mut runtime = Runtime::new(database); runtime.block_stack = vec![0]; - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); runtime.set_variable("health", 100).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); runtime.set_variable("health", 150).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); } #[test] @@ -1868,13 +1878,13 @@ mod test { let mut runtime = Runtime::new(database); runtime.block_stack = vec![0]; - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); runtime.set_variable("health", 100).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); runtime.set_variable("health", 150).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); } #[test] @@ -1912,13 +1922,13 @@ mod test { let mut runtime = Runtime::new(database); runtime.block_stack = vec![0]; - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); runtime.set_variable("speed", 1.5 as f32).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); runtime.set_variable("speed", 2. as f32).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); } @@ -1957,13 +1967,13 @@ mod test { let mut runtime = Runtime::new(database); runtime.block_stack = vec![0]; - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); runtime.set_variable("speed", 1.5 as f32).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); runtime.set_variable("speed", 2. as f32).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); } @@ -2002,13 +2012,13 @@ mod test { let mut runtime = Runtime::new(database); runtime.block_stack = vec![0]; - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); runtime.set_variable("speed", 1.5 as f32).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); runtime.set_variable("speed", 2. as f32).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); } @@ -2047,13 +2057,13 @@ mod test { let mut runtime = Runtime::new(database); runtime.block_stack = vec![0]; - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); runtime.set_variable("speed", 1.5 as f32).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); runtime.set_variable("speed", 2. as f32).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); } #[test] @@ -2091,13 +2101,13 @@ mod test { let mut runtime = Runtime::new(database); runtime.block_stack = vec![0]; - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); runtime.set_variable("speed", 1.5 as f32).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); runtime.set_variable("speed", 2. as f32).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); } #[test] @@ -2135,13 +2145,13 @@ mod test { let mut runtime = Runtime::new(database); runtime.block_stack = vec![0]; - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); runtime.set_variable("speed", 1.5 as f32).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); runtime.set_variable("speed", 2. as f32).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); } @@ -2180,10 +2190,10 @@ mod test { let mut runtime = Runtime::new(database); runtime.block_stack = vec![0]; - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); runtime.set_variable("bike", true).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); } @@ -2222,10 +2232,10 @@ mod test { let mut runtime = Runtime::new(database); runtime.block_stack = vec![0]; - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); runtime.set_variable("bike", true).unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); } @@ -2264,12 +2274,12 @@ mod test { let mut runtime = Runtime::new(database); runtime.block_stack = vec![0]; - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); runtime .set_variable("message", "hello".to_string()) .unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); } @@ -2308,12 +2318,12 @@ mod test { let mut runtime = Runtime::new(database); runtime.block_stack = vec![0]; - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); runtime .set_variable("message", "hello".to_string()) .unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); } @@ -2352,12 +2362,12 @@ mod test { let mut runtime = Runtime::new(database); runtime.block_stack = vec![0]; - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); runtime .set_variable("time_of_day", TimeOfDay::Night) .unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); } @@ -2396,12 +2406,12 @@ mod test { let mut runtime = Runtime::new(database); runtime.block_stack = vec![0]; - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(meets_requirement); runtime .set_variable("time_of_day", TimeOfDay::Night) .unwrap(); - let meets_requirement = runtime.meets_requirements(0); + let meets_requirement = runtime.meets_requirements(0).unwrap(); assert!(!meets_requirement); } @@ -2442,10 +2452,10 @@ mod test { let mut runtime = Runtime::new(database); runtime.block_stack = vec![0]; - let frequency_with_modifier = runtime.get_frequency_with_modifier(&settings); + let frequency_with_modifier = runtime.get_frequency_with_modifier(&settings).unwrap(); assert_eq!(frequency_with_modifier, 100); runtime.set_variable("bike", true).unwrap(); - let frequency_with_modifier = runtime.get_frequency_with_modifier(&settings); + let frequency_with_modifier = runtime.get_frequency_with_modifier(&settings).unwrap(); assert_eq!(frequency_with_modifier, 0); } @@ -2548,6 +2558,374 @@ mod test { assert_eq!(functions, output_functions); } + #[test] + fn invalid_id_in_stack_throws_error() { + let text = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; + + let database = Database { + blocks: vec![text], + ..Default::default() + }; + let mut runtime = Runtime::new(database); + runtime.block_stack.push(1); + let err = runtime.update_stack().unwrap_err(); + assert_eq!(err, RuntimeError::InvalidBlockId(1)); + } + + #[test] + fn invalid_id_in_choice_throws_error() { + let text = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; + + let database = Database { + blocks: vec![text], + ..Default::default() + }; + let mut runtime = Runtime::new(database); + runtime.choices.push(1); + let err = runtime.pick_choice(0).unwrap_err(); + assert_eq!(err, RuntimeError::InvalidBlockId(1)); + } + + #[test] + fn next_block_throws_error_if_theres_a_choice() { + let text = Block::Text { + id: String::default(), + settings: BlockSettings { + children: vec![2], + ..Default::default() + }, + }; + + let choice = Block::Choice { + id: String::default(), + settings: BlockSettings::default(), + }; + + let text_2 = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; + + let database = Database { + blocks: vec![text, text_2, choice], + ..Default::default() + }; + let mut runtime = Runtime::new(database); + runtime.update_stack().unwrap(); + let err = runtime.update_stack().unwrap_err(); + assert_eq!( + err, + RuntimeError::WaitingForChoice(vec!["MISSING LOCALE ``".to_string()]) + ); + } + + #[test] + fn section_at_lower_level_throws_error() { + let text = Block::Text { + id: String::default(), + settings: BlockSettings { + children: vec![1], + ..Default::default() + }, + }; + + let section = Block::Section { + id: "section".to_string(), + settings: BlockSettings::default(), + }; + + let database = Database { + blocks: vec![text, section], + ..Default::default() + }; + let mut runtime = Runtime::new(database); + runtime.update_stack().unwrap(); + let err = runtime.update_stack().unwrap_err(); + assert_eq!( + err, + RuntimeError::SectionAtLowerLevel("section".to_string()) + ); + } + #[test] + fn throws_error_when_story_finishes() { + let text = Block::Text { + id: String::default(), + settings: BlockSettings { + next: NextBlock::EndOfFile, + ..Default::default() + }, + }; + + let database = Database { + blocks: vec![text], + ..Default::default() + }; + let mut runtime = Runtime::new(database); + runtime.update_stack().unwrap(); + let err = runtime.update_stack().unwrap_err(); + assert_eq!(err, RuntimeError::StoryFinished); + } + + #[test] + fn jump_to_section_throws_error_if_section_doesnt_exist() { + let text = Block::Text { + id: String::default(), + settings: BlockSettings { + next: NextBlock::EndOfFile, + ..Default::default() + }, + }; + + let database = Database { + blocks: vec![text], + ..Default::default() + }; + let mut runtime = Runtime::new(database); + let section_key = SectionKey { + section: "section".to_string(), + subsection: Some("subsection".to_string()), + }; + let err = runtime.jump_to_section(§ion_key.clone()).unwrap_err(); + + assert_eq!(err, RuntimeError::SectionDoesntExist(section_key)); + } + + #[test] + fn current_block_can_only_be_text() { + let choice = Block::Choice { + id: String::default(), + settings: BlockSettings::default(), + }; + + let database = Database { + blocks: vec![choice], + ..Default::default() + }; + let mut runtime = Runtime::new(database); + runtime.block_stack.push(0); + let err = runtime.current_block().unwrap_err(); + + assert_eq!( + err, + RuntimeError::UnexpectedBlock { + expected_block: "text".to_string(), + block_found: "choice".to_string() + } + ); + } + + #[test] + fn current_block_throws_error_on_empty_stack() { + let text = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; + + let database = Database { + blocks: vec![text], + ..Default::default() + }; + let mut runtime = Runtime::new(database); + let err = runtime.current_block().unwrap_err(); + assert_eq!(err, RuntimeError::EmptyStack); + } + + #[test] + fn apply_modifiers_throws_error_on_empty_stack() { + let text = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; + + let database = Database { + blocks: vec![text], + ..Default::default() + }; + let mut runtime = Runtime::new(database); + let err = runtime.apply_modifiers().unwrap_err(); + assert_eq!(err, RuntimeError::EmptyStack); + } + + #[test] + fn empty_database_throws_error() { + let database = Database { + ..Default::default() + }; + let mut runtime = Runtime::new(database); + let err = runtime.next_block().unwrap_err(); + assert_eq!(err, RuntimeError::EmptyDatabase); + let err = runtime.update_stack().unwrap_err(); + assert_eq!(err, RuntimeError::EmptyDatabase); + let err = runtime.pick_choice(0).unwrap_err(); + assert_eq!(err, RuntimeError::EmptyDatabase); + } + + #[test] + fn picking_choice_when_no_options_throws_error() { + let text = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; + + let database = Database { + blocks: vec![text], + ..Default::default() + }; + let mut runtime = Runtime::new(database); + + let err = runtime.pick_choice(0).unwrap_err(); + assert_eq!(err, RuntimeError::NoChoices); + } + + #[test] + fn picking_invalid_choice_throws_error() { + let text = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; + + let database = Database { + blocks: vec![text], + ..Default::default() + }; + let mut runtime = Runtime::new(database); + runtime.choices.push(0); + let err = runtime.pick_choice(1).unwrap_err(); + assert_eq!( + err, + RuntimeError::InvalidChoice { + total_choices: 1, + choice_picked: 1 + } + ); + } + + #[test] + fn setting_unsupported_variable_type_throws_error() { + let text = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; + + let mut config = Config::default(); + config + .variables + .insert("variable".to_string(), VariableKind::Integer); + + let database = Database { + blocks: vec![text], + config, + ..Default::default() + }; + let mut runtime = Runtime::new(database); + + let err = runtime + .set_variable("variable", UnsupportedType::default()) + .unwrap_err(); + assert_eq!( + err, + RuntimeError::UnsupportedVariableType { + type_found: "cuentitos_runtime::runtime::test::UnsupportedType".to_string() + } + ); + } + + #[test] + fn getting_unsupported_variable_type_throws_error() { + let text = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; + + let mut config = Config::default(); + config + .variables + .insert("variable".to_string(), VariableKind::Integer); + + let database = Database { + blocks: vec![text], + config, + ..Default::default() + }; + let runtime = Runtime::new(database); + + let err = runtime + .get_variable::<&str, UnsupportedType>("variable") + .unwrap_err(); + assert_eq!( + err, + RuntimeError::UnsupportedVariableType { + type_found: "cuentitos_runtime::runtime::test::UnsupportedType".to_string() + } + ); + } + + #[test] + fn setting_non_existent_variable_throws_error() { + let text = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; + + let database = Database { + blocks: vec![text], + ..Default::default() + }; + let mut runtime = Runtime::new(database); + + let err = runtime.set_variable("variable", 0).unwrap_err(); + assert_eq!( + err, + RuntimeError::VariableDoesntExist("variable".to_string()) + ); + } + + #[test] + fn getting_non_existent_variable_throws_error() { + let text = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; + + let database = Database { + blocks: vec![text], + ..Default::default() + }; + let runtime = Runtime::new(database); + + let err = runtime.get_variable::<&str, i32>("variable").unwrap_err(); + assert_eq!( + err, + RuntimeError::VariableDoesntExist("variable".to_string()) + ); + } + + #[test] + fn getting_non_existent_variable_kind_throws_error() { + let text = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; + + let database = Database { + blocks: vec![text], + ..Default::default() + }; + let runtime = Runtime::new(database); + + let err: RuntimeError = runtime.get_variable_kind("variable").unwrap_err(); + assert_eq!( + err, + RuntimeError::VariableDoesntExist("variable".to_string()) + ); + } + #[derive(Debug, Default, PartialEq, Eq)] enum TimeOfDay { #[default] @@ -2558,6 +2936,23 @@ mod test { #[derive(Debug, PartialEq, Eq)] struct TestError; + #[derive(Default, Debug)] + struct UnsupportedType; + + impl Display for UnsupportedType { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "") + } + } + + impl FromStr for UnsupportedType { + type Err = TestError; + + fn from_str(_: &str) -> Result { + Ok(UnsupportedType::default()) + } + } + impl FromStr for TimeOfDay { type Err = TestError; From be77d9ac8fcf527559ed53c22706084746a77363 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Tue, 4 Jul 2023 15:00:05 -0300 Subject: [PATCH 33/94] more parser errors --- palabritas/src/error.rs | 16 ++++ palabritas/src/parser.rs | 202 ++++++++++++++++++++++++++++++++++----- 2 files changed, 194 insertions(+), 24 deletions(-) diff --git a/palabritas/src/error.rs b/palabritas/src/error.rs index 6ace5a8..d2a6841 100644 --- a/palabritas/src/error.rs +++ b/palabritas/src/error.rs @@ -45,6 +45,8 @@ pub enum PalabritasError { operator: String, variable_type: String, }, + FrequencyOutOfBucket(ErrorInfo), + FrequencyModifierWithoutFrequencyChance(ErrorInfo), } #[derive(Debug, PartialEq, Eq, Clone)] @@ -139,6 +141,20 @@ impl Display for PalabritasError { info, variable, operator, variable_type ) } + PalabritasError::FrequencyOutOfBucket(info) => { + write!( + f, + "{}\n Frequency notation is only allowed in buckets.", + info + ) + } + PalabritasError::FrequencyModifierWithoutFrequencyChance(info) => { + write!( + f, + "{}\n Frequency modifiers are only allowed for blocks with probabilistic chance and frequency notation.", + info + ) + } } } } diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index ed812a9..1c349fb 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -347,6 +347,11 @@ fn parse_section( blocks[0].push(Block::default()); let block_id = blocks[0].len() - 1; + let error_info = ErrorInfo { + line: token.line_col().0, + col: token.line_col().1, + string: token.as_str().to_string(), + }; let mut settings = BlockSettings::default(); let mut id: String = String::default(); @@ -389,6 +394,7 @@ fn parse_section( ); let section = Block::Section { id, settings }; + check_invalid_frequency(§ion, error_info, blocks, 0)?; blocks[0][block_id] = section.clone(); Ok(section) @@ -404,13 +410,17 @@ fn parse_subsection( section_list: &Vec, ) -> Result<(), PalabritasError> { match_rule(&token, Rule::Subsection)?; - if blocks.is_empty() { blocks.push(Vec::default()); } blocks[0].push(Block::default()); let block_id = blocks[0].len() - 1; + let error_info = ErrorInfo { + line: token.line_col().0, + col: token.line_col().1, + string: token.as_str().to_string(), + }; let mut settings = BlockSettings::default(); let mut id: String = String::default(); @@ -452,7 +462,10 @@ fn parse_subsection( block_id, ); - blocks[0][block_id] = Block::Subsection { id, settings }; + let subsection = Block::Subsection { id, settings }; + check_invalid_frequency(&subsection, error_info, blocks, 0)?; + blocks[0][block_id] = subsection; + Ok(()) } fn parse_block( @@ -468,6 +481,12 @@ fn parse_block( // (NamedBucket | Choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* let mut block = Block::default(); let line_col = token.line_col(); + let error_info = ErrorInfo { + line: token.line_col().0, + col: token.line_col().1, + string: token.as_str().to_string(), + }; + for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Text => { @@ -504,32 +523,12 @@ fn parse_block( blocks.push(Vec::default()); } - if let Some(i18n_id) = block.get_i18n_id() { - if let Some(db) = i18n.strings.get_mut(&i18n.default_locale) { - let new_id = line_col.0.to_string(); - db.insert(new_id.clone(), i18n_id); - - match block { - Block::Text { id: _, settings } => { - block = Block::Text { - id: new_id, - settings, - }; - } - Block::Choice { id: _, settings } => { - block = Block::Choice { - id: new_id, - settings, - }; - } - _ => {} - } - } - } + update_i18n(&mut block, i18n, line_col.0); blocks[child_order].push(block); let block_id = blocks[child_order].len() - 1; + if let Block::Bucket { name: _, settings: _, @@ -541,9 +540,101 @@ fn parse_block( make_childs_bucket(block_id, blocks, child_order); } + check_invalid_frequency( + &blocks[child_order][block_id], + error_info, + blocks, + child_order, + )?; + Ok(()) } +fn check_invalid_frequency( + block: &Block, + error_info: ErrorInfo, + blocks: &[Vec], + child_order: usize, +) -> Result<(), PalabritasError> { + fn freq_modifier_matches_chance( + settings: &BlockSettings, + error_info: &ErrorInfo, + ) -> Result<(), PalabritasError> { + if settings.frequency_modifiers.is_empty() { + Ok(()) + } else { + match settings.chance { + Chance::Frequency(_) => Ok(()), + _ => Err(PalabritasError::FrequencyModifierWithoutFrequencyChance( + error_info.clone(), + )), + } + } + } + + match block { + Block::Bucket { + name: _, + settings: _, + } => freq_modifier_matches_chance(block.get_settings(), &error_info), + + Block::Section { id: _, settings: _ } => { + if let Chance::Frequency(_) = block.get_settings().chance { + Err(PalabritasError::FrequencyOutOfBucket(error_info)) + } else { + Ok(()) + } + } + + Block::Subsection { id: _, settings: _ } => { + if let Chance::Frequency(_) = block.get_settings().chance { + Err(PalabritasError::FrequencyOutOfBucket(error_info)) + } else { + Ok(()) + } + } + + _ => { + freq_modifier_matches_chance(block.get_settings(), &error_info)?; + if child_order == 0 { + if let Chance::Frequency(_) = block.get_settings().chance { + return Err(PalabritasError::FrequencyOutOfBucket(error_info)); + } + } + for child in &block.get_settings().children { + if let Chance::Frequency(_) = blocks[child_order + 1][*child].get_settings().chance { + return Err(PalabritasError::FrequencyOutOfBucket(error_info)); + } + } + Ok(()) + } + } +} +fn update_i18n(block: &mut Block, i18n: &mut I18n, line: usize) { + if let Some(i18n_id) = block.get_i18n_id() { + if let Some(db) = i18n.strings.get_mut(&i18n.default_locale) { + let new_id = line.to_string(); + db.insert(new_id.clone(), i18n_id); + + match block { + Block::Text { + ref mut id, + settings: _, + } => { + *id = new_id; + } + Block::Choice { + ref mut id, + settings: _, + } => { + *id = new_id; + } + _ => {} + } + } + } +} + fn is_child_unnamed_bucket(block: usize, blocks: &Vec>, child_order: usize) -> bool { let block = &blocks[child_order][block]; let children = &block.get_settings().children; @@ -1707,6 +1798,69 @@ mod test { assert_eq!(tag, tag_name); } + #[test] + fn frequency_out_of_bucket_throws_error() { + let text = make_random_string(); + let frequency: u32 = rand::thread_rng().gen_range(0..100); + let database_str = format!("({}) {}", frequency, text); + let err = parse_database_str(&database_str, &Config::default()).unwrap_err(); + assert_eq!( + err, + PalabritasError::FrequencyOutOfBucket(ErrorInfo { + line: 1, + col: 1, + string: database_str + }) + ); + + let choice_str = make_random_string(); + let frequency: u32 = rand::thread_rng().gen_range(0..100); + let database_str = format!("*({}) {}", frequency, choice_str); + let err = parse_database_str(&database_str, &Config::default()).unwrap_err(); + assert_eq!( + err, + PalabritasError::FrequencyOutOfBucket(ErrorInfo { + line: 1, + col: 1, + string: database_str + }) + ); + + let text = make_random_string(); + let choice_str_1 = make_random_string(); + let frequency_1: u32 = rand::thread_rng().gen_range(0..100); + let choice_str_2 = make_random_string(); + let frequency_2: u32 = rand::thread_rng().gen_range(0..100); + let database_str = format!( + "{}\n *({}) {}\n *({}) {}", + text, frequency_1, choice_str_1, frequency_2, choice_str_2 + ); + parse_database_str(&database_str, &Config::default()).unwrap(); + } + + #[test] + fn frequency_modifier_without_frequency_chance_throws_error() { + let text = make_random_string(); + let variable = make_random_identifier(); + let value = rand::thread_rng().gen::().to_string(); + let frequency: u32 = rand::thread_rng().gen_range(0..100); + + let mut config = Config::default(); + config + .variables + .insert(variable.clone(), VariableKind::Float); + + let database_str = format!("{}\n freq {} {} {}", text, variable, value, frequency); + let err = parse_database_str(&database_str, &config).unwrap_err(); + assert_eq!( + err, + PalabritasError::FrequencyModifierWithoutFrequencyChance(ErrorInfo { + line: 1, + col: 1, + string: database_str + }) + ); + } #[test] fn division_by_zero_throws_error() { From 8e52ef720934e0d9f1a40d7837e105dfac14ae2f Mon Sep 17 00:00:00 2001 From: Fran Tufro Date: Tue, 4 Jul 2023 15:30:47 -0300 Subject: [PATCH 34/94] Bumped version of CLI --- cli/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 00ef760..a32dcf4 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cuentitos-cli" -version = "0.0.0" +version = "0.2.0" edition = "2021" [[bin]] From 5dce0358c81ec03b350a65d53e50b40877171ca7 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Tue, 4 Jul 2023 17:35:39 -0300 Subject: [PATCH 35/94] set bool fix --- common/src/modifier.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/common/src/modifier.rs b/common/src/modifier.rs index 31e5b67..da4f663 100644 --- a/common/src/modifier.rs +++ b/common/src/modifier.rs @@ -4,7 +4,7 @@ use serde::{Deserialize, Serialize}; use crate::VariableId; -#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)] pub struct Modifier { pub variable: VariableId, pub value: String, @@ -32,3 +32,14 @@ impl Display for ModifierOperator { } } } + + +impl Default for Modifier { + fn default() -> Self { + Self { + variable: Default::default(), + operator: Default::default(), + value: "true".to_string(), + } + } +} \ No newline at end of file From 1bb6e6f1483833f3a32ce304dab8f3080fb188a4 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Tue, 4 Jul 2023 17:49:55 -0300 Subject: [PATCH 36/94] enum validates value --- common/src/modifier.rs | 3 +- palabritas/src/parser.rs | 118 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 118 insertions(+), 3 deletions(-) diff --git a/common/src/modifier.rs b/common/src/modifier.rs index da4f663..e41c499 100644 --- a/common/src/modifier.rs +++ b/common/src/modifier.rs @@ -33,7 +33,6 @@ impl Display for ModifierOperator { } } - impl Default for Modifier { fn default() -> Self { Self { @@ -42,4 +41,4 @@ impl Default for Modifier { value: "true".to_string(), } } -} \ No newline at end of file +} diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index 1c349fb..5da2680 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -1161,7 +1161,18 @@ fn check_variable_value_matches_type( }) } } - _ => Ok(()), + cuentitos_common::VariableKind::String => Ok(()), + cuentitos_common::VariableKind::Enum(variants) => { + match variants.contains(&value.to_string()) { + true => Ok(()), + false => Err(PalabritasError::InvalidVariableValue { + info: error_info.clone(), + variable: variable.to_string(), + value: value.to_string(), + variable_type: format!("{}", kind), + }), + } + } } } else { Err(PalabritasError::VariableDoesntExist { @@ -1974,6 +1985,111 @@ mod test { ); } + #[test] + fn integer_with_invalid_value_throws_error() { + let mut config = Config::default(); + config + .variables + .insert("variable".to_string(), VariableKind::Integer); + + let error_info = ErrorInfo { + line: 0, + col: 0, + string: String::default(), + }; + + let error = + check_variable_value_matches_type("variable", "hello", &config, &error_info).unwrap_err(); + + let expected_error = PalabritasError::InvalidVariableValue { + info: error_info, + variable: "variable".to_string(), + value: "hello".to_string(), + variable_type: "Integer".to_string(), + }; + + assert_eq!(error, expected_error); + } + + #[test] + fn float_with_invalid_value_throws_error() { + let mut config = Config::default(); + config + .variables + .insert("variable".to_string(), VariableKind::Float); + + let error_info = ErrorInfo { + line: 0, + col: 0, + string: String::default(), + }; + + let error = + check_variable_value_matches_type("variable", "hello", &config, &error_info).unwrap_err(); + + let expected_error = PalabritasError::InvalidVariableValue { + info: error_info, + variable: "variable".to_string(), + value: "hello".to_string(), + variable_type: "Float".to_string(), + }; + + assert_eq!(error, expected_error); + } + + #[test] + fn bool_with_invalid_value_throws_error() { + let mut config = Config::default(); + config + .variables + .insert("variable".to_string(), VariableKind::Bool); + + let error_info = ErrorInfo { + line: 0, + col: 0, + string: String::default(), + }; + + let error = + check_variable_value_matches_type("variable", "hello", &config, &error_info).unwrap_err(); + + let expected_error = PalabritasError::InvalidVariableValue { + info: error_info, + variable: "variable".to_string(), + value: "hello".to_string(), + variable_type: "Bool".to_string(), + }; + + assert_eq!(error, expected_error); + } + + #[test] + fn enum_with_invalid_value_throws_error() { + let mut config = Config::default(); + config.variables.insert( + "variable".to_string(), + VariableKind::Enum(vec!["night".to_string(), "day".to_string()]), + ); + + let error_info = ErrorInfo { + line: 0, + col: 0, + string: String::default(), + }; + + let error = + check_variable_value_matches_type("variable", "hello", &config, &error_info).unwrap_err(); + + let expected_error = PalabritasError::InvalidVariableValue { + info: error_info, + variable: "variable".to_string(), + value: "hello".to_string(), + variable_type: "Enum([\"night\", \"day\"])".to_string(), + }; + + assert_eq!(error, expected_error); + } + #[test] fn requirement_with_invalid_variable_value_throws_error() { //Requirement = { "req" ~ " "+ ~ Condition ~ " "* } From 750260996101cdbd49308f2ac4f5cc084b3e0143 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Tue, 4 Jul 2023 18:11:37 -0300 Subject: [PATCH 37/94] compiler divert fixes --- palabritas/src/parser.rs | 46 +++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index 5da2680..93e111b 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -108,6 +108,7 @@ pub fn parse_database(token: Pair, config: &Config) -> Result { @@ -219,7 +220,7 @@ pub fn parse_divert_str( section_list: &[SectionKey], ) -> Result { let token = parse_str(input, Rule::Divert)?; - parse_divert(token, section_list) + parse_divert(token, section_list, &None) } pub fn parse_modifier_str(input: &str, config: &Config) -> Result { @@ -362,11 +363,11 @@ fn parse_section( id = inner_token.as_str().to_string(); } Rule::Command => { - add_command_to_settings(inner_token, &mut settings, config, section_list)?; + add_command_to_settings(inner_token, &mut settings, config, section_list,&Some(id.clone()))?; } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { - parse_block(inner_blocks_token, blocks, 1, i18n, config, section_list)?; + parse_block(inner_blocks_token, blocks, 1, i18n, config, section_list, &Some(id.clone()))?; settings.children.push(blocks[1].len() - 1); } } @@ -431,11 +432,11 @@ fn parse_subsection( id = inner_token.as_str().to_string(); } Rule::Command => { - add_command_to_settings(inner_token, &mut settings, config, section_list)?; + add_command_to_settings(inner_token, &mut settings, config, section_list, &Some(section_name.to_string()))?; } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { - parse_block(inner_blocks_token, blocks, 1, i18n, config, section_list)?; + parse_block(inner_blocks_token, blocks, 1, i18n, config, section_list,&Some(section_name.to_string()))?; settings.children.push(blocks[1].len() - 1); } } @@ -475,6 +476,7 @@ fn parse_block( i18n: &mut I18n, config: &Config, section_list: &Vec, + current_section: &Option, ) -> Result<(), PalabritasError> { match_rule(&token, Rule::Block)?; @@ -499,7 +501,7 @@ fn parse_block( block = parse_choice(inner_token)?; } Rule::Command => { - add_command_to_block(inner_token, &mut block, config, section_list)?; + add_command_to_block(inner_token, &mut block, config, section_list, current_section)?; } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { @@ -511,6 +513,7 @@ fn parse_block( i18n, config, section_list, + current_section )?; settings.children.push(blocks[child_order + 1].len() - 1); } @@ -922,6 +925,7 @@ fn add_command_to_settings( settings: &mut BlockSettings, config: &Config, section_list: &[SectionKey], + current_section: &Option, ) -> Result<(), PalabritasError> { match_rule(&token, Rule::Command)?; @@ -941,7 +945,7 @@ fn add_command_to_settings( settings.modifiers.push(modifier); } Rule::Divert => { - settings.next = parse_divert(inner_token, section_list)?; + settings.next = parse_divert(inner_token, section_list, current_section)?; } Rule::Unique => { settings.unique = true; @@ -965,9 +969,10 @@ fn add_command_to_block( block: &mut Block, config: &Config, section_list: &[SectionKey], + current_section: &Option ) -> Result<(), PalabritasError> { let settings = block.get_settings_mut(); - add_command_to_settings(token, settings, config, section_list) + add_command_to_settings(token, settings, config, section_list, current_section) } fn parse_function(token: Pair) -> Result { @@ -1000,6 +1005,7 @@ fn parse_tag(token: Pair) -> Result { fn parse_divert( token: Pair, section_list: &[SectionKey], + current_section: &Option, ) -> Result { match_rule(&token, Rule::Divert)?; //Divert = { "->" ~ " "* ~ Identifier ~ ("." ~ Identifier)? } @@ -1033,7 +1039,7 @@ fn parse_divert( subsection, }; - check_section_existance(§ion_key, section_list, &error_info)?; + check_section_existance(§ion_key, section_list, &error_info, ¤t_section)?; Ok(NextBlock::Section(section_key)) } else { Ok(NextBlock::None) @@ -1106,10 +1112,17 @@ fn check_section_existance( section_key: &SectionKey, section_list: &[SectionKey], error_info: &ErrorInfo, + current_section: &Option, ) -> Result<(), PalabritasError> { if section_list.contains(section_key) { Ok(()) - } else { + } else if section_key.subsection.is_none() && current_section.is_some(){ + let new_section_key = SectionKey{ + section: current_section.clone().unwrap(), + subsection: Some(section_key.clone().section), + }; + check_section_existance(&new_section_key, section_list, error_info, current_section) + } else { Err(PalabritasError::SectionDoesntExist { info: error_info.clone(), section: section_key.clone(), @@ -1721,7 +1734,7 @@ mod test { }); let token = parse_str(&divert_string, Rule::Command).unwrap(); - add_command_to_block(token, &mut block, &config, §ion_list).unwrap(); + add_command_to_block(token, &mut block, &config, §ion_list, &None).unwrap(); //Modifier let variable = make_random_identifier(); @@ -1740,13 +1753,13 @@ mod test { block_settings.modifiers.push(expected_modifier); let token = parse_str(&modifier_string, Rule::Command).unwrap(); - add_command_to_block(token, &mut block, &config, §ion_list).unwrap(); + add_command_to_block(token, &mut block, &config, §ion_list,&None).unwrap(); //Unique block_settings.unique = true; let token = parse_str("\n unique", Rule::Command).unwrap(); - add_command_to_block(token, &mut block, &config, §ion_list).unwrap(); + add_command_to_block(token, &mut block, &config, §ion_list,&None).unwrap(); //Frequency @@ -1770,7 +1783,7 @@ mod test { block_settings.frequency_modifiers.push(expected_frequency); let token = parse_str(&frequency_string, Rule::Command).unwrap(); - add_command_to_block(token, &mut block, &config, §ion_list).unwrap(); + add_command_to_block(token, &mut block, &config, §ion_list,&None).unwrap(); //Requirement @@ -1790,7 +1803,7 @@ mod test { block_settings.requirements.push(expected_requirement); let token = parse_str(&requirement_string, Rule::Command).unwrap(); - add_command_to_block(token, &mut block, &config, §ion_list).unwrap(); + add_command_to_block(token, &mut block, &config, §ion_list,&None).unwrap(); let expected_block = Block::Text { id: text_id, @@ -1928,6 +1941,8 @@ mod test { } } ); + + parse_database_str("#Secttion\n Text\n ->Subsection\n##Subsection\n Subtext", &Config::default()).unwrap(); } #[test] @@ -2912,6 +2927,7 @@ mod test { &mut I18n::default(), &Config::default(), &Vec::default(), + &None )?; Ok(blocks) } From 8c28c427bb70b44344daf0ca7fc4ac2d421b61d6 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Tue, 4 Jul 2023 18:11:52 -0300 Subject: [PATCH 38/94] Update cuentitos.toml --- examples/cuentitos.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/cuentitos.toml b/examples/cuentitos.toml index 703565b..fe02273 100644 --- a/examples/cuentitos.toml +++ b/examples/cuentitos.toml @@ -6,7 +6,7 @@ energy = "integer" time = "float" [variables.time_of_day] -enum = ["day", "night"] +enum = ["morning", "night"] [variables.item] enum = ["tea"] \ No newline at end of file From 98f67a0380d5068e5565cbc7d3241b805ed07aef Mon Sep 17 00:00:00 2001 From: loomstyla Date: Tue, 4 Jul 2023 20:13:46 -0300 Subject: [PATCH 39/94] Parser done, runtime wip --- cli/src/console.rs | 4 +- common/src/block.rs | 14 ++- palabritas/src/palabritas.pest | 12 +-- palabritas/src/parser.rs | 163 +++++++++++++++------------------ runtime/src/error.rs | 4 +- runtime/src/lib.rs | 2 +- runtime/src/runtime.rs | 160 ++++++++++++++++++-------------- 7 files changed, 187 insertions(+), 172 deletions(-) diff --git a/cli/src/console.rs b/cli/src/console.rs index 85d9bf3..cc7371c 100644 --- a/cli/src/console.rs +++ b/cli/src/console.rs @@ -85,11 +85,11 @@ impl Console { if let Some(section_str) = splitted.next() { let subsection = splitted.next(); let section = match subsection { - Some(subsection) => Section { + Some(subsection) => Divert { section: section_str.to_string(), subsection: Some(subsection.to_string()), }, - None => Section { + None => Divert { section: section_str.to_string(), subsection: None, }, diff --git a/common/src/block.rs b/common/src/block.rs index e124bf2..b3f209b 100644 --- a/common/src/block.rs +++ b/common/src/block.rs @@ -28,16 +28,14 @@ impl fmt::Display for SectionKey { #[derive(Debug, Default, Serialize, Deserialize, PartialEq, Clone)] pub enum NextBlock { #[default] - None, - BlockId(BlockId), EndOfFile, + BlockId(BlockId), Section(SectionKey), } #[derive(Debug, Serialize, Deserialize, Default, PartialEq, Clone)] pub struct BlockSettings { pub children: Vec, - pub next: NextBlock, pub chance: Chance, pub frequency_modifiers: Vec, pub requirements: Vec, @@ -77,6 +75,10 @@ pub enum Block { id: SectionName, settings: BlockSettings, }, + Divert { + next: NextBlock, + settings: BlockSettings, + }, } impl Block { @@ -87,6 +89,7 @@ impl Block { Block::Bucket { name: _, settings } => settings, Block::Section { id: _, settings } => settings, Block::Subsection { id: _, settings } => settings, + Block::Divert { next: _, settings } => settings, } } pub fn get_settings(&self) -> &BlockSettings { @@ -96,6 +99,7 @@ impl Block { Block::Bucket { name: _, settings } => settings, Block::Section { id: _, settings } => settings, Block::Subsection { id: _, settings } => settings, + Block::Divert { next: _, settings } => settings, } } pub fn get_i18n_id(&self) -> Option { @@ -108,6 +112,10 @@ impl Block { } => None, Block::Section { id: _, settings: _ } => None, Block::Subsection { id: _, settings: _ } => None, + Block::Divert { + next: _, + settings: _, + } => None, } } } diff --git a/palabritas/src/palabritas.pest b/palabritas/src/palabritas.pest index d93fe11..8f4fac2 100644 --- a/palabritas/src/palabritas.pest +++ b/palabritas/src/palabritas.pest @@ -1,4 +1,4 @@ -ReservedKeywords = { "req" | "freq" | "mod" | "unique" | "->" | "`" | "*" | "#" | "##" | "//" } +ReservedKeywords = { "req" | "freq" | "mod" | "unique" | "->" | "`" | "*" | "#" | "##" | "//" | "END" } Char = { (!NewLine ~ ANY)+ } Integer = { "-"? ~ ASCII_DIGIT+ } Float = { Integer ~ "." ~ ASCII_DIGIT* } @@ -17,21 +17,21 @@ Condition = { ( Identifier ~ " "* ~ ( ComparisonOperator ~ " "* )? ~ Value? ) | Requirement = { "req" ~ " "+ ~ Condition ~ " "* } Frequency = { "freq" ~ " "+ ~ Condition ~ " "+ ~ ( Float | Integer ) ~ " "* } Modifier = { "set" ~ " "+ ~ ( (Identifier ~ " "+ ~ ModifierOperator? ~ " "* ~ Value) | (NotOperator? ~ " "* ~ Identifier) ) ~ " "* } -Divert = { "->" ~ " "* ~ Identifier ~ ("/" ~ Identifier)? ~ " "*} Function = {"`" ~ " "* ~ Identifier ~ (" " ~ Value)* ~ " "* ~ "`"} Tag = {"tag" ~ " "+ ~ Identifier} Unique = {"unique"} -Command = {NewLine ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert | Function | Unique | Tag) } +Command = {NewLine ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Function | Unique | Tag) } Chance = { "(" ~ " "* ~ ( Percentage | Float | Integer ) ~ " "* ~ ")" ~ " "* } -Section = {"#" ~ " "* ~ Identifier ~ " "* ~ Command* ~ NewLine ~ ( NewLine | NewBlock | Subsection )* } -Subsection = { "##" ~ " "* ~ Identifier ~ " "* ~ Command* ~ (NewLine | EOI) ~ (NewBlock | NewLine)*} +Section = {"#" ~ " "* ~ !ReservedKeywords ~ Identifier ~ " "* ~ Command* ~ NewLine ~ ( NewLine | NewBlock | Subsection )* } +Subsection = { "##" ~ " "* ~ !ReservedKeywords ~ Identifier ~ " "* ~ Command* ~ (NewLine | EOI) ~ (NewBlock | NewLine)*} Text = { !Indentation ~ !ReservedKeywords ~ Chance? ~ String } Choice = { "*" ~ " "* ~ Chance? ~ String } NamedBucket = { "[" ~ " "* ~ Chance? ~ SnakeCase ~ " "* ~ "]" } +Divert = { Chance? ~ "->" ~ " "* ~ Identifier ~ ("/" ~ Identifier)? ~ " "*} NewBlock = { // The first line in the block @@ -43,7 +43,7 @@ NewBlock = { } Block = { - (NamedBucket | Choice | Text) ~ " "* ~ Command* ~ " "* ~ (NewLine | EOI) ~ NewBlock* + (NamedBucket | Choice | Text | Divert) ~ " "* ~ Command* ~ " "* ~ (NewLine | EOI) ~ NewBlock* } Database = { SOI ~ (NewLine | Block | Section )* ~ EOI } diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index 93e111b..61d93f9 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -108,7 +108,7 @@ pub fn parse_database(token: Pair, config: &Config) -> Result { @@ -129,9 +129,11 @@ pub fn parse_database(token: Pair, config: &Config) -> Result Result { pub fn parse_section_str( input: &str, config: &Config, - section_list: &Vec, + section_list: &[SectionKey], ) -> Result { let token = parse_str(input, Rule::Section)?; parse_section( @@ -218,7 +220,7 @@ pub fn parse_function_str(input: &str) -> Result { pub fn parse_divert_str( input: &str, section_list: &[SectionKey], -) -> Result { +) -> Result { let token = parse_str(input, Rule::Divert)?; parse_divert(token, section_list, &None) } @@ -339,7 +341,7 @@ fn parse_section( section_map: &mut HashMap, i18n: &mut I18n, config: &Config, - section_list: &Vec, + section_list: &[SectionKey], ) -> Result { match_rule(&token, Rule::Section)?; if blocks.is_empty() { @@ -363,11 +365,19 @@ fn parse_section( id = inner_token.as_str().to_string(); } Rule::Command => { - add_command_to_settings(inner_token, &mut settings, config, section_list,&Some(id.clone()))?; + add_command_to_settings(inner_token, &mut settings, config)?; } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { - parse_block(inner_blocks_token, blocks, 1, i18n, config, section_list, &Some(id.clone()))?; + parse_block( + inner_blocks_token, + blocks, + 1, + i18n, + config, + section_list, + &Some(id.clone()), + )?; settings.children.push(blocks[1].len() - 1); } } @@ -408,7 +418,7 @@ fn parse_subsection( section_map: &mut HashMap, i18n: &mut I18n, config: &Config, - section_list: &Vec, + section_list: &[SectionKey], ) -> Result<(), PalabritasError> { match_rule(&token, Rule::Subsection)?; if blocks.is_empty() { @@ -432,11 +442,19 @@ fn parse_subsection( id = inner_token.as_str().to_string(); } Rule::Command => { - add_command_to_settings(inner_token, &mut settings, config, section_list, &Some(section_name.to_string()))?; + add_command_to_settings(inner_token, &mut settings, config)?; } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { - parse_block(inner_blocks_token, blocks, 1, i18n, config, section_list,&Some(section_name.to_string()))?; + parse_block( + inner_blocks_token, + blocks, + 1, + i18n, + config, + section_list, + &Some(section_name.to_string()), + )?; settings.children.push(blocks[1].len() - 1); } } @@ -475,12 +493,12 @@ fn parse_block( child_order: usize, i18n: &mut I18n, config: &Config, - section_list: &Vec, + section_list: &[SectionKey], current_section: &Option, ) -> Result<(), PalabritasError> { match_rule(&token, Rule::Block)?; - // (NamedBucket | Choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* + // (NamedBucket | Choice | Text | Divery) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* let mut block = Block::default(); let line_col = token.line_col(); let error_info = ErrorInfo { @@ -500,8 +518,11 @@ fn parse_block( Rule::Choice => { block = parse_choice(inner_token)?; } + Rule::Divert => { + block = parse_divert(inner_token, section_list, current_section)?; + } Rule::Command => { - add_command_to_block(inner_token, &mut block, config, section_list, current_section)?; + add_command_to_block(inner_token, &mut block, config)?; } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { @@ -513,7 +534,7 @@ fn parse_block( i18n, config, section_list, - current_section + current_section, )?; settings.children.push(blocks[child_order + 1].len() - 1); } @@ -924,14 +945,12 @@ fn add_command_to_settings( token: Pair, settings: &mut BlockSettings, config: &Config, - section_list: &[SectionKey], - current_section: &Option, ) -> Result<(), PalabritasError> { match_rule(&token, Rule::Command)?; for inner_token in token.into_inner() { match inner_token.as_rule() { - //Command = {NewLine ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert | Function | Unique | Tag) } + //Command = {NewLine ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Function | Unique | Tag) } Rule::Requirement => { let requirement = parse_requirement(inner_token, config)?; settings.requirements.push(requirement); @@ -944,9 +963,6 @@ fn add_command_to_settings( let modifier = parse_modifier(inner_token, config)?; settings.modifiers.push(modifier); } - Rule::Divert => { - settings.next = parse_divert(inner_token, section_list, current_section)?; - } Rule::Unique => { settings.unique = true; } @@ -968,11 +984,9 @@ fn add_command_to_block( token: Pair, block: &mut Block, config: &Config, - section_list: &[SectionKey], - current_section: &Option ) -> Result<(), PalabritasError> { let settings = block.get_settings_mut(); - add_command_to_settings(token, settings, config, section_list, current_section) + add_command_to_settings(token, settings, config) } fn parse_function(token: Pair) -> Result { @@ -1006,7 +1020,7 @@ fn parse_divert( token: Pair, section_list: &[SectionKey], current_section: &Option, -) -> Result { +) -> Result { match_rule(&token, Rule::Divert)?; //Divert = { "->" ~ " "* ~ Identifier ~ ("." ~ Identifier)? } @@ -1029,21 +1043,22 @@ fn parse_divert( } } - if section.is_some() && subsection.is_none() && section.clone().unwrap() == "END" { - return Ok(NextBlock::EndOfFile); - } - - if let Some(section) = section { - let section_key = SectionKey { - section, - subsection, - }; + let next = match section.is_some() && subsection.is_none() && section.clone().unwrap() == "END" { + true => NextBlock::EndOfFile, + false => { + let section_key = SectionKey { + section: section.unwrap(), + subsection, + }; + check_section_existance(§ion_key, section_list, &error_info, current_section)?; + NextBlock::Section(section_key) + } + }; - check_section_existance(§ion_key, section_list, &error_info, ¤t_section)?; - Ok(NextBlock::Section(section_key)) - } else { - Ok(NextBlock::None) - } + Ok(Block::Divert { + next, + settings: BlockSettings::default(), + }) } fn parse_modifier(token: Pair, config: &Config) -> Result { @@ -1116,13 +1131,13 @@ fn check_section_existance( ) -> Result<(), PalabritasError> { if section_list.contains(section_key) { Ok(()) - } else if section_key.subsection.is_none() && current_section.is_some(){ - let new_section_key = SectionKey{ + } else if section_key.subsection.is_none() && current_section.is_some() { + let new_section_key = SectionKey { section: current_section.clone().unwrap(), subsection: Some(section_key.clone().section), }; check_section_existance(&new_section_key, section_list, error_info, current_section) - } else { + } else { Err(PalabritasError::SectionDoesntExist { info: error_info.clone(), section: section_key.clone(), @@ -1719,23 +1734,6 @@ mod test { let mut block_settings = BlockSettings::default(); let mut config = Config::default(); - //Divert - let section = make_random_identifier(); - let section_list = vec![SectionKey { - section: section.clone(), - subsection: None, - }]; - - let divert_string = format!("\n -> {}", section); - - block_settings.next = NextBlock::Section(SectionKey { - section, - subsection: None, - }); - - let token = parse_str(&divert_string, Rule::Command).unwrap(); - add_command_to_block(token, &mut block, &config, §ion_list, &None).unwrap(); - //Modifier let variable = make_random_identifier(); let value = rand::thread_rng().gen::().to_string(); @@ -1753,13 +1751,13 @@ mod test { block_settings.modifiers.push(expected_modifier); let token = parse_str(&modifier_string, Rule::Command).unwrap(); - add_command_to_block(token, &mut block, &config, §ion_list,&None).unwrap(); + add_command_to_block(token, &mut block, &config).unwrap(); //Unique block_settings.unique = true; let token = parse_str("\n unique", Rule::Command).unwrap(); - add_command_to_block(token, &mut block, &config, §ion_list,&None).unwrap(); + add_command_to_block(token, &mut block, &config).unwrap(); //Frequency @@ -1783,7 +1781,7 @@ mod test { block_settings.frequency_modifiers.push(expected_frequency); let token = parse_str(&frequency_string, Rule::Command).unwrap(); - add_command_to_block(token, &mut block, &config, §ion_list,&None).unwrap(); + add_command_to_block(token, &mut block, &config).unwrap(); //Requirement @@ -1803,7 +1801,7 @@ mod test { block_settings.requirements.push(expected_requirement); let token = parse_str(&requirement_string, Rule::Command).unwrap(); - add_command_to_block(token, &mut block, &config, §ion_list,&None).unwrap(); + add_command_to_block(token, &mut block, &config).unwrap(); let expected_block = Block::Text { id: text_id, @@ -1942,7 +1940,11 @@ mod test { } ); - parse_database_str("#Secttion\n Text\n ->Subsection\n##Subsection\n Subtext", &Config::default()).unwrap(); + parse_database_str( + "#Secttion\n Text\n ->Subsection\n##Subsection\n Subtext", + &Config::default(), + ) + .unwrap(); } #[test] @@ -2278,7 +2280,10 @@ mod test { section: section.clone(), subsection: None, }; - let expected_value = NextBlock::Section(section_key.clone()); + let expected_value = Block::Divert { + next: NextBlock::Section(section_key.clone()), + settings: BlockSettings::default(), + }; let mut section_list = vec![section_key]; let divert = parse_divert_str(&divert_string, §ion_list).unwrap(); @@ -2292,7 +2297,10 @@ mod test { subsection: Some(subsection.clone()), }; - let expected_value = NextBlock::Section(section_key.clone()); + let expected_value = Block::Divert { + next: NextBlock::Section(section_key.clone()), + settings: BlockSettings::default(), + }; section_list.push(section_key); let divert = parse_divert_str(&divert_string, §ion_list).unwrap(); @@ -2647,9 +2655,6 @@ mod test { let modifier = "\nset ".to_string() + &make_random_identifier() + " " + &make_random_identifier(); assert_parse_rule(Rule::Command, &(modifier)); - - let divert = "\n->".to_string() + &make_random_identifier(); - assert_parse_rule(Rule::Command, &(divert)); } #[test] @@ -2719,22 +2724,6 @@ mod test { ); } - /* #[test] - fn parse_block_blocks_rule() { - //BlockBlock = { - // (choice | Text) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* - //} - - let choice = "*".to_string() + &make_random_string(); - assert_parse_rule(Rule::BlockBlock, &choice); - - let text = make_random_string(); - assert_parse_rule(Rule::BlockBlock, &text); - - let new_block = "\n ".to_string() + &make_random_string(); - assert_parse_rule(Rule::BlockBlock, &(text + &new_block)); - } - */ #[test] fn parse_section_commands_correctly() { let identifier = make_random_snake_case(); @@ -2927,7 +2916,7 @@ mod test { &mut I18n::default(), &Config::default(), &Vec::default(), - &None + &None, )?; Ok(blocks) } diff --git a/runtime/src/error.rs b/runtime/src/error.rs index 2e93705..618a2bf 100644 --- a/runtime/src/error.rs +++ b/runtime/src/error.rs @@ -7,7 +7,7 @@ use std::{ use cuentitos_common::{BlockId, SectionName}; -use crate::Section; +use crate::Divert; type VariableName = String; #[derive(Debug, PartialEq, Eq)] @@ -16,7 +16,7 @@ pub enum RuntimeError { WaitingForChoice(Vec), SectionAtLowerLevel(SectionName), StoryFinished, - SectionDoesntExist(Section), + SectionDoesntExist(Divert), UnexpectedBlock { expected_block: String, block_found: String, diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index a831783..6c4a33d 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -1,8 +1,8 @@ mod runtime; pub use cuentitos_common::Database; pub use runtime::Block; +pub use runtime::Divert; pub use runtime::Runtime; -pub use runtime::Section; mod game_state; pub use cuentitos_common::VariableKind; diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index 45a032f..34214aa 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -11,6 +11,7 @@ use cuentitos_common::Database; use cuentitos_common::Function; use cuentitos_common::LanguageId; use cuentitos_common::Modifier; +use cuentitos_common::NextBlock; use cuentitos_common::SectionKey; use cuentitos_common::VariableKind; use rand::Rng; @@ -26,7 +27,7 @@ pub struct Block { pub functions: Vec, } -pub type Section = SectionKey; +pub type Divert = SectionKey; #[derive(Debug, Default, Serialize, Deserialize, PartialEq)] pub struct Runtime { @@ -43,6 +44,7 @@ pub struct Runtime { impl Runtime { pub fn new(database: Database) -> Runtime { + println!("{:?}", database); let game_state: GameState = GameState::from_config(&database.config); let current_locale = database.i18n.default_locale.clone(); Runtime { @@ -78,13 +80,13 @@ impl Runtime { self.rng = Some(Pcg32::seed_from_u64(seed)); } - pub fn jump_to_section(&mut self, section: &Section) -> Result<(), RuntimeError> { + pub fn jump_to_section(&mut self, divert: &Divert) -> Result<(), RuntimeError> { let current_section = self.game_state.current_section.clone(); - if section.subsection.is_none() { + if divert.subsection.is_none() { if let Some(current_section) = current_section { let key = SectionKey { section: current_section, - subsection: Some(section.section.clone()), + subsection: Some(divert.section.clone()), }; if let Some(block_id) = self.database.sections.get(&key) { self.block_stack.clear(); @@ -93,13 +95,34 @@ impl Runtime { } } - if let Some(block_id) = self.database.sections.get(section) { + if let Some(block_id) = self.database.sections.get(divert) { self.block_stack.clear(); - self.game_state.current_section = Some(section.section.clone()); + self.game_state.current_section = Some(divert.section.clone()); self.game_state.current_subsection = None; self.push_stack(*block_id) } else { - Err(RuntimeError::SectionDoesntExist(section.clone())) + Err(RuntimeError::SectionDoesntExist(divert.clone())) + } + } + + fn get_section_block_id(&mut self, divert: &Divert) -> Result { + let current_section = self.game_state.current_section.clone(); + if divert.subsection.is_none() { + if let Some(current_section) = current_section { + let key = SectionKey { + section: current_section, + subsection: Some(divert.section.clone()), + }; + if let Some(block_id) = self.database.sections.get(&key) { + return Ok(*block_id); + } + } + } + + if let Some(block_id) = self.database.sections.get(divert) { + Ok(*block_id) + } else { + Err(RuntimeError::SectionDoesntExist(divert.clone())) } } @@ -158,6 +181,13 @@ impl Runtime { block_found: "subsection".to_string(), }) } + cuentitos_common::Block::Divert { + next: _, + settings: _, + } => Err(RuntimeError::UnexpectedBlock { + expected_block: "text".to_string(), + block_found: "divert".to_string(), + }), } } @@ -182,7 +212,6 @@ impl Runtime { if choices[choice] >= self.database.blocks.len() { return Err(RuntimeError::InvalidBlockId(choices[choice])); } - self.push_stack(choices[choice])?; self.next_block() } @@ -526,22 +555,53 @@ impl Runtime { } self.apply_modifiers()?; - self.update_choices()?; - match self.get_block(id) { + let block = self.get_block(id).clone(); + match block { cuentitos_common::Block::Section { id, settings: _ } => { - self.game_state.current_section = Some(id.clone()); + self.game_state.current_section = Some(id); self.game_state.current_subsection = None; self.update_stack() } cuentitos_common::Block::Subsection { id, settings: _ } => { - self.game_state.current_subsection = Some(id.clone()); + self.game_state.current_subsection = Some(id); self.update_stack() } - _ => Ok(()), + cuentitos_common::Block::Text { id: _, settings: _ } => { + self.update_choices()?; + Ok(()) + } + cuentitos_common::Block::Choice { id: _, settings: _ } => { + self.update_choices()?; + Ok(()) + } + cuentitos_common::Block::Bucket { + name: _, + settings: _, + } => { + if let Some(next) = self.get_random_block_from_bucket(block.get_settings())? { + self.push_stack(next) + } else { + self.update_choices() + } + } + cuentitos_common::Block::Divert { next, settings: _ } => { + println!("{:?}", self.get_block(id).clone()); + let next = self.get_divert_next(next)?; + self.push_stack(next) + } } } + fn get_divert_next(&mut self, next: NextBlock) -> Result { + match next { + NextBlock::BlockId(id) => Ok(id), + NextBlock::EndOfFile => { + self.reset(); + Err(RuntimeError::FrequencyModifierWithProbability)}, + NextBlock::Section(section_key) => self.get_section_block_id(§ion_key), + } + } fn update_stack(&mut self) -> Result<(), RuntimeError> { if self.database.blocks.is_empty() { return Err(RuntimeError::EmptyDatabase); @@ -563,30 +623,15 @@ impl Runtime { let settings = self.get_block(*last_block_id).get_settings().clone(); if !settings.children.is_empty() { - if let Some(child) = self.push_next_child_in_stack(&settings, 0)? { + if let Some(child) = self.get_next_child_in_stack(&settings, 0)? { return self.push_stack(child); } } - match settings.next { - cuentitos_common::NextBlock::None => {} - cuentitos_common::NextBlock::BlockId(id) => { - self.block_stack.clear(); - return self.push_stack(id); - } - cuentitos_common::NextBlock::EndOfFile => { - self.reset(); - return Err(RuntimeError::StoryFinished); - } - cuentitos_common::NextBlock::Section(section) => { - return self.jump_to_section(§ion); - } - } - self.pop_stack_and_find_next() } - fn push_next_child_in_stack( + fn get_next_child_in_stack( &mut self, settings: &BlockSettings, next_child: usize, @@ -597,27 +642,11 @@ impl Runtime { let id = settings.children[next_child]; match self.get_block(id) { - cuentitos_common::Block::Text { id: _, settings: _ } => Ok(Some(settings.children[0])), cuentitos_common::Block::Choice { id: _, settings: _ } => { if self.choices.contains(&id) { Err(RuntimeError::WaitingForChoice(self.get_choices_strings())) } else { - self.push_next_child_in_stack(settings, next_child + 1) - } - } - cuentitos_common::Block::Bucket { - name: _, - settings: bucket_settings, - } => { - if let Some(new_block) = self.get_random_block_from_bucket(&bucket_settings.clone())? { - if let cuentitos_common::Block::Choice { id: _, settings: _ } = self.get_block(new_block) - { - Err(RuntimeError::WaitingForChoice(self.get_choices_strings())) - } else { - Ok(Some(new_block)) - } - } else { - self.push_next_child_in_stack(settings, next_child + 1) + self.get_next_child_in_stack(settings, next_child + 1) } } cuentitos_common::Block::Section { id, settings: _ } => { @@ -626,6 +655,7 @@ impl Runtime { cuentitos_common::Block::Subsection { id, settings: _ } => { Err(RuntimeError::SectionAtLowerLevel(id.clone())) } + _ => Ok(Some(settings.children[0])), } } @@ -670,21 +700,6 @@ impl Runtime { } } - match &parent_settings.next { - cuentitos_common::NextBlock::None => {} - cuentitos_common::NextBlock::BlockId(id) => { - self.block_stack.clear(); - return self.push_stack(*id); - } - cuentitos_common::NextBlock::EndOfFile => { - self.reset(); - return Err(RuntimeError::StoryFinished); - } - cuentitos_common::NextBlock::Section(section) => { - return self.jump_to_section(section); - } - } - self.pop_stack_and_find_next() } @@ -767,7 +782,7 @@ mod test { use std::{collections::HashMap, fmt::Display, str::FromStr, vec}; - use crate::{runtime::Section, Runtime, RuntimeError}; + use crate::{runtime::Divert, Runtime, RuntimeError}; use cuentitos_common::{ condition::ComparisonOperator, modifier::ModifierOperator, Block, BlockSettings, Chance, Condition, Config, Database, FrequencyModifier, Function, I18n, LanguageDb, LanguageId, @@ -843,14 +858,14 @@ mod test { ..Default::default() }; runtime - .jump_to_section(&Section { + .jump_to_section(&Divert { section: "section_2".to_string(), subsection: Some("subsection".to_string()), }) .unwrap(); assert_eq!(runtime.block_stack, vec![2, 4]); runtime - .jump_to_section(&Section { + .jump_to_section(&Divert { section: "section_1".to_string(), subsection: None, }) @@ -2488,10 +2503,10 @@ mod test { }; let settings = BlockSettings { - next: NextBlock::Section(SectionKey { - section: "section".to_string(), - subsection: None, - }), + //next: NextBlock::Section(SectionKey { + // section: "section".to_string(), + // subsection: None, + //}), ..Default::default() }; let text_2 = Block::Text { @@ -2512,6 +2527,7 @@ mod test { assert_eq!(2, *runtime.block_stack.last().unwrap()); runtime.update_stack().unwrap(); assert_eq!(2, *runtime.block_stack.last().unwrap()); + assert!(false); } #[test] @@ -2657,7 +2673,7 @@ mod test { let text = Block::Text { id: String::default(), settings: BlockSettings { - next: NextBlock::EndOfFile, + // next: NextBlock::EndOfFile, ..Default::default() }, }; @@ -2670,6 +2686,7 @@ mod test { runtime.update_stack().unwrap(); let err = runtime.update_stack().unwrap_err(); assert_eq!(err, RuntimeError::StoryFinished); + assert!(false); } #[test] @@ -2677,7 +2694,7 @@ mod test { let text = Block::Text { id: String::default(), settings: BlockSettings { - next: NextBlock::EndOfFile, + // next: NextBlock::EndOfFile, ..Default::default() }, }; @@ -2694,6 +2711,7 @@ mod test { let err = runtime.jump_to_section(§ion_key.clone()).unwrap_err(); assert_eq!(err, RuntimeError::SectionDoesntExist(section_key)); + assert!(false); } #[test] From 7dd04b9da1c57bbc51d1ed27d3bd53c729c28fb4 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Wed, 5 Jul 2023 13:28:09 -0300 Subject: [PATCH 40/94] runtime --- cli/src/console.rs | 6 +- palabritas/src/palabritas.pest | 2 +- palabritas/src/parser.rs | 2 +- runtime/src/error.rs | 4 +- runtime/src/lib.rs | 2 +- runtime/src/runtime.rs | 128 +++++++++++---------------------- 6 files changed, 51 insertions(+), 93 deletions(-) diff --git a/cli/src/console.rs b/cli/src/console.rs index cc7371c..0b59363 100644 --- a/cli/src/console.rs +++ b/cli/src/console.rs @@ -85,16 +85,16 @@ impl Console { if let Some(section_str) = splitted.next() { let subsection = splitted.next(); let section = match subsection { - Some(subsection) => Divert { + Some(subsection) => DivertData { section: section_str.to_string(), subsection: Some(subsection.to_string()), }, - None => Divert { + None => DivertData { section: section_str.to_string(), subsection: None, }, }; - match runtime.jump_to_section(§ion) { + match runtime.divert(§ion) { Ok(_) => print_output_text(runtime.current_block(), &runtime), Err(err) => println!("{}", err), } diff --git a/palabritas/src/palabritas.pest b/palabritas/src/palabritas.pest index 8f4fac2..1834f61 100644 --- a/palabritas/src/palabritas.pest +++ b/palabritas/src/palabritas.pest @@ -31,7 +31,7 @@ Subsection = { "##" ~ " "* ~ !ReservedKeywords ~ Identifier ~ " "* ~ Command* ~ Text = { !Indentation ~ !ReservedKeywords ~ Chance? ~ String } Choice = { "*" ~ " "* ~ Chance? ~ String } NamedBucket = { "[" ~ " "* ~ Chance? ~ SnakeCase ~ " "* ~ "]" } -Divert = { Chance? ~ "->" ~ " "* ~ Identifier ~ ("/" ~ Identifier)? ~ " "*} +Divert = { Chance? ~ "->" ~ " "* ~ Identifier ~ ("/" ~ Identifier)? } NewBlock = { // The first line in the block diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index 61d93f9..f6ed0f7 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -1730,7 +1730,7 @@ mod test { settings: BlockSettings::default(), }; - // //Command = {NEWLINE ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Divert) } + // //Command = {NEWLINE ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier) } let mut block_settings = BlockSettings::default(); let mut config = Config::default(); diff --git a/runtime/src/error.rs b/runtime/src/error.rs index 618a2bf..131d073 100644 --- a/runtime/src/error.rs +++ b/runtime/src/error.rs @@ -7,7 +7,7 @@ use std::{ use cuentitos_common::{BlockId, SectionName}; -use crate::Divert; +use crate::DivertData; type VariableName = String; #[derive(Debug, PartialEq, Eq)] @@ -16,7 +16,7 @@ pub enum RuntimeError { WaitingForChoice(Vec), SectionAtLowerLevel(SectionName), StoryFinished, - SectionDoesntExist(Divert), + SectionDoesntExist(DivertData), UnexpectedBlock { expected_block: String, block_found: String, diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 6c4a33d..6b22546 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -1,7 +1,7 @@ mod runtime; pub use cuentitos_common::Database; pub use runtime::Block; -pub use runtime::Divert; +pub use runtime::DivertData; pub use runtime::Runtime; mod game_state; diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index 34214aa..ad9b015 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -27,7 +27,7 @@ pub struct Block { pub functions: Vec, } -pub type Divert = SectionKey; +pub type DivertData = SectionKey; #[derive(Debug, Default, Serialize, Deserialize, PartialEq)] pub struct Runtime { @@ -44,7 +44,6 @@ pub struct Runtime { impl Runtime { pub fn new(database: Database) -> Runtime { - println!("{:?}", database); let game_state: GameState = GameState::from_config(&database.config); let current_locale = database.i18n.default_locale.clone(); Runtime { @@ -80,32 +79,12 @@ impl Runtime { self.rng = Some(Pcg32::seed_from_u64(seed)); } - pub fn jump_to_section(&mut self, divert: &Divert) -> Result<(), RuntimeError> { - let current_section = self.game_state.current_section.clone(); - if divert.subsection.is_none() { - if let Some(current_section) = current_section { - let key = SectionKey { - section: current_section, - subsection: Some(divert.section.clone()), - }; - if let Some(block_id) = self.database.sections.get(&key) { - self.block_stack.clear(); - return self.push_stack(*block_id); - } - } - } - - if let Some(block_id) = self.database.sections.get(divert) { - self.block_stack.clear(); - self.game_state.current_section = Some(divert.section.clone()); - self.game_state.current_subsection = None; - self.push_stack(*block_id) - } else { - Err(RuntimeError::SectionDoesntExist(divert.clone())) - } + pub fn divert(&mut self, divert: &DivertData) -> Result<(), RuntimeError> { + let next = self.get_section_block_id(divert)?; + self.push_stack(next) } - fn get_section_block_id(&mut self, divert: &Divert) -> Result { + fn get_section_block_id(&mut self, divert: &DivertData) -> Result { let current_section = self.game_state.current_section.clone(); if divert.subsection.is_none() { if let Some(current_section) = current_section { @@ -139,6 +118,10 @@ impl Runtime { self.current_block() } + pub fn get_block(&self, id: BlockId) -> &cuentitos_common::Block { + &self.database.blocks[id] + } + pub fn current_block(&mut self) -> Result { let id = match self.block_stack.last() { Some(id) => id, @@ -212,6 +195,7 @@ impl Runtime { if choices[choice] >= self.database.blocks.len() { return Err(RuntimeError::InvalidBlockId(choices[choice])); } + self.push_stack(choices[choice])?; self.next_block() } @@ -586,7 +570,6 @@ impl Runtime { } } cuentitos_common::Block::Divert { next, settings: _ } => { - println!("{:?}", self.get_block(id).clone()); let next = self.get_divert_next(next)?; self.push_stack(next) } @@ -598,7 +581,8 @@ impl Runtime { NextBlock::BlockId(id) => Ok(id), NextBlock::EndOfFile => { self.reset(); - Err(RuntimeError::FrequencyModifierWithProbability)}, + Err(RuntimeError::StoryFinished) + } NextBlock::Section(section_key) => self.get_section_block_id(§ion_key), } } @@ -681,19 +665,10 @@ impl Runtime { let mut previous_block_found = false; for sibling in &parent_settings.children { if previous_block_found { - match self.get_block(*sibling).clone() { - cuentitos_common::Block::Text { id: _, settings: _ } => { - return self.push_stack(*sibling); - } - cuentitos_common::Block::Bucket { name: _, settings } => { - if let Some(new_block) = self.get_random_block_from_bucket(&settings.clone())? { - return self.push_stack(new_block); - } - } - _ => { - continue; - } + if let cuentitos_common::Block::Choice { id: _, settings: _ } = self.get_block(*sibling) { + continue; } + return self.push_stack(*sibling); } if *sibling == last_block_id { previous_block_found = true; @@ -731,10 +706,6 @@ impl Runtime { Ok(None) } - fn get_block(&self, id: BlockId) -> &cuentitos_common::Block { - &self.database.blocks[id] - } - fn update_choices(&mut self) -> Result<(), RuntimeError> { self.choices = Vec::default(); @@ -782,11 +753,11 @@ mod test { use std::{collections::HashMap, fmt::Display, str::FromStr, vec}; - use crate::{runtime::Divert, Runtime, RuntimeError}; + use crate::{runtime::DivertData, Runtime, RuntimeError}; use cuentitos_common::{ condition::ComparisonOperator, modifier::ModifierOperator, Block, BlockSettings, Chance, Condition, Config, Database, FrequencyModifier, Function, I18n, LanguageDb, LanguageId, - Modifier, NextBlock, Requirement, SectionKey, VariableKind, + Modifier, Requirement, SectionKey, VariableKind, NextBlock, }; #[test] @@ -797,7 +768,7 @@ mod test { } #[test] - fn jump_to_section_works_correctly() { + fn divert_works_correctly() { let section_1 = Block::Section { id: "section_1".to_string(), settings: BlockSettings { @@ -858,19 +829,19 @@ mod test { ..Default::default() }; runtime - .jump_to_section(&Divert { + .divert(&DivertData { section: "section_2".to_string(), subsection: Some("subsection".to_string()), }) .unwrap(); assert_eq!(runtime.block_stack, vec![2, 4]); runtime - .jump_to_section(&Divert { + .divert(&DivertData { section: "section_1".to_string(), subsection: None, }) .unwrap(); - assert_eq!(runtime.block_stack, vec![0, 3]); + assert_eq!(runtime.block_stack, vec![2, 4, 0, 3]); } #[test] @@ -2479,7 +2450,7 @@ mod test { let section = Block::Section { id: "section".to_string(), settings: BlockSettings { - children: vec![1, 2], + children: vec![1, 2, 3], ..Default::default() }, }; @@ -2502,20 +2473,18 @@ mod test { settings, }; - let settings = BlockSettings { - //next: NextBlock::Section(SectionKey { - // section: "section".to_string(), - // subsection: None, - //}), - ..Default::default() - }; let text_2 = Block::Text { id: String::default(), - settings, + settings: BlockSettings::default(), + }; + + let divert = Block::Divert { + next: NextBlock::Section(SectionKey { section: "section".to_string(), subsection: None }), + settings: BlockSettings::default(), }; let database = Database { - blocks: vec![section, text_1, text_2], + blocks: vec![section, text_1, text_2, divert], sections, ..Default::default() }; @@ -2527,7 +2496,6 @@ mod test { assert_eq!(2, *runtime.block_stack.last().unwrap()); runtime.update_stack().unwrap(); assert_eq!(2, *runtime.block_stack.last().unwrap()); - assert!(false); } #[test] @@ -2670,12 +2638,9 @@ mod test { } #[test] fn throws_error_when_story_finishes() { - let text = Block::Text { - id: String::default(), - settings: BlockSettings { - // next: NextBlock::EndOfFile, - ..Default::default() - }, + let text: Block = Block::Divert { + next: NextBlock::EndOfFile, + settings: BlockSettings::default(), }; let database = Database { @@ -2683,35 +2648,28 @@ mod test { ..Default::default() }; let mut runtime = Runtime::new(database); - runtime.update_stack().unwrap(); let err = runtime.update_stack().unwrap_err(); assert_eq!(err, RuntimeError::StoryFinished); - assert!(false); } #[test] - fn jump_to_section_throws_error_if_section_doesnt_exist() { - let text = Block::Text { - id: String::default(), - settings: BlockSettings { - // next: NextBlock::EndOfFile, - ..Default::default() - }, - }; + fn divert_throws_error_if_section_doesnt_exist() { - let database = Database { - blocks: vec![text], - ..Default::default() - }; - let mut runtime = Runtime::new(database); let section_key = SectionKey { section: "section".to_string(), subsection: Some("subsection".to_string()), }; - let err = runtime.jump_to_section(§ion_key.clone()).unwrap_err(); - + let divert = Block::Divert { + next: NextBlock::Section(section_key.clone()), + settings: BlockSettings::default() + }; + let database = Database { + blocks: vec![divert], + ..Default::default() + }; + let mut runtime = Runtime::new(database); + let err = runtime.divert(§ion_key.clone()).unwrap_err(); assert_eq!(err, RuntimeError::SectionDoesntExist(section_key)); - assert!(false); } #[test] From 61434a9a8e4077c2c23be3867097cd11bcb20160 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Wed, 5 Jul 2023 16:15:24 -0300 Subject: [PATCH 41/94] errors refactor --- palabritas/src/error.rs | 23 +- palabritas/src/parser.rs | 647 +++++++++++++++++++++------------------ runtime/src/runtime.rs | 10 +- 3 files changed, 364 insertions(+), 316 deletions(-) diff --git a/palabritas/src/error.rs b/palabritas/src/error.rs index d2a6841..4706b36 100644 --- a/palabritas/src/error.rs +++ b/palabritas/src/error.rs @@ -1,14 +1,14 @@ use std::{error::Error, fmt::Display, path::PathBuf}; -use cuentitos_common::SectionKey; +use cuentitos_common::{SectionKey, VariableKind}; use crate::parser::Rule; #[derive(Debug, PartialEq, Eq)] pub enum PalabritasError { FileIsEmpty, ParseError { - file: String, info: ErrorInfo, + reason: String, }, PathIsNotAFile(PathBuf), PathDoesntExist(PathBuf), @@ -34,16 +34,16 @@ pub enum PalabritasError { variable: String, }, InvalidVariableValue { - info: ErrorInfo, + info: Box, variable: String, value: String, - variable_type: String, + variable_type: VariableKind, }, InvalidVariableOperator { - info: ErrorInfo, + info: Box, variable: String, operator: String, - variable_type: String, + variable_type: VariableKind, }, FrequencyOutOfBucket(ErrorInfo), FrequencyModifierWithoutFrequencyChance(ErrorInfo), @@ -54,11 +54,16 @@ pub struct ErrorInfo { pub line: usize, pub col: usize, pub string: String, + pub file: String, } impl Display for ErrorInfo { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(f, "{}:{} {}", self.line, self.col, self.string) + write!( + f, + "{}:{}:{} {}", + self.file, self.line, self.col, self.string + ) } } impl Error for PalabritasError {} @@ -68,8 +73,8 @@ impl Display for PalabritasError { PalabritasError::FileIsEmpty => { write!(f, "File provided is empty.") } - PalabritasError::ParseError { file, info } => { - write!(f, "{}:{}", file, info) + PalabritasError::ParseError { info, reason } => { + write!(f, "{}\n{}", info, reason) } PalabritasError::BucketSumIsNot1(info) => { write!( diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index f6ed0f7..43cf71c 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -18,6 +18,29 @@ use crate::error::{ErrorInfo, PalabritasError}; #[grammar = "palabritas.pest"] struct PalabritasParser; +#[derive(Default)] +struct ParsingData { + pub blocks: Vec>, + pub i18n: I18n, + pub config: Config, + pub section_list: Vec, + pub file: String, + pub current_section: Option, +} + +impl ParsingData { + fn new(config: Config, section_list: Vec, file: String) -> Self { + ParsingData { + blocks: Vec::default(), + i18n: I18n::from_config(&config), + config, + section_list, + file, + current_section: None, + } + } +} + pub fn parse_database_from_path

(path: P) -> Result where P: AsRef, @@ -27,14 +50,14 @@ where path.as_ref().to_path_buf(), )); } - let palabritas_path = match path.as_ref().is_file() { + let story_path = match path.as_ref().is_file() { true => path.as_ref().to_path_buf(), false => { //TODO: search for it instead return Err(PalabritasError::PathIsNotAFile(path.as_ref().to_path_buf())); } }; - let mut config_path = palabritas_path.clone(); + let mut config_path = story_path.clone(); config_path.pop(); let config = match Config::load(&config_path) { Ok(config) => config, @@ -46,21 +69,27 @@ where } }; - let str = match std::fs::read_to_string(&palabritas_path) { + let str = match std::fs::read_to_string(&story_path) { Ok(str) => str, Err(e) => { return Err(PalabritasError::CantReadFile { - path: palabritas_path, + path: story_path, message: e.to_string(), }); } }; match PalabritasParser::parse(Rule::Database, &str) { - Ok(mut result) => match parse_database(result.next().unwrap(), &config) { - Ok(database) => Ok(database), - Err(error) => Err(error), - }, + Ok(mut result) => { + let token = result.next().unwrap(); + let file = story_path.display().to_string(); + let parsing_data = ParsingData::new(config, find_all_section_list(&token, &file)?, file); + + match parse_database(token, parsing_data) { + Ok(database) => Ok(database), + Err(error) => Err(error), + } + } Err(error) => { let (line, col) = match error.line_col { LineColLocation::Pos(line_col) => line_col, @@ -68,64 +97,58 @@ where }; Err(PalabritasError::ParseError { - file: palabritas_path.display().to_string(), + reason: error.to_string(), info: ErrorInfo { line, col, - string: error.to_string(), + string: String::default(), + file: story_path.display().to_string(), }, }) } } } -pub fn find_all_section_list(token: &Pair) -> Result, PalabritasError> { - match_rule(token, Rule::Database)?; +pub fn find_all_section_list( + token: &Pair, + file: &str, +) -> Result, PalabritasError> { + match_rule(token, Rule::Database, file)?; let mut section_list = Vec::default(); // pub section_list: HashMap for inner_token in token.clone().into_inner() { if inner_token.as_rule() == Rule::Section { - parse_section_key(inner_token, &mut section_list)?; + parse_section_key(inner_token, &mut section_list, file)?; } } Ok(section_list) } -pub fn parse_database(token: Pair, config: &Config) -> Result { - match_rule(&token, Rule::Database)?; - let mut blocks: Vec> = Vec::default(); - let mut i18n = I18n::from_config(config); +fn parse_database( + token: Pair, + mut parsing_data: ParsingData, +) -> Result { + match_rule(&token, Rule::Database, &parsing_data.file)?; + + //let mut blocks: Vec> = Vec::default(); + // let mut i18n = I18n::from_config(config); let mut section_map = HashMap::default(); - let section_list = find_all_section_list(&token)?; + //let section_list = find_all_section_list(&token)?; + for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Block => { - parse_block( - inner_token, - &mut blocks, - 0, - &mut i18n, - config, - §ion_list, - &None, - )?; + parse_block(inner_token, &mut parsing_data, 0)?; } Rule::Section => { - parse_section( - inner_token, - &mut blocks, - &mut section_map, - &mut i18n, - config, - §ion_list, - )?; + parse_section(inner_token, &mut parsing_data, &mut section_map)?; } _ => {} } } - if blocks.is_empty() { + if parsing_data.blocks.is_empty() { return Err(PalabritasError::FileIsEmpty); } @@ -133,17 +156,17 @@ pub fn parse_database(token: Pair, config: &Config) -> Result, config: &Config) -> Result Result { let token = parse_str(input, Rule::Database)?; - parse_database(token, config) + let parsing_data = ParsingData::new( + config.clone(), + find_all_section_list(&token, &String::default())?, + String::default(), + ); + parse_database(token, parsing_data) } pub fn parse_text_str(input: &str) -> Result { let token = parse_str(input, Rule::Text)?; - parse_text(token) + parse_text(token, &String::default()) } pub fn parse_named_bucket_str(input: &str) -> Result { let token = parse_str(input, Rule::NamedBucket)?; - parse_named_bucket(token) + parse_named_bucket(token, &String::default()) } pub fn parse_chance_str(input: &str) -> Result { let token = parse_str(input, Rule::Chance)?; - parse_chance(token) + parse_chance(token, &String::default()) } pub fn parse_condition_str(input: &str, config: &Config) -> Result { let token = parse_str(input, Rule::Condition)?; - parse_condition(token, config) + parse_condition(token, config, &String::default()) } pub fn parse_choice_str(input: &str) -> Result { let token = parse_str(input, Rule::Choice)?; - parse_choice(token) + parse_choice(token, &String::default()) } pub fn parse_section_str( @@ -197,24 +225,19 @@ pub fn parse_section_str( section_list: &[SectionKey], ) -> Result { let token = parse_str(input, Rule::Section)?; - parse_section( - token, - &mut Vec::default(), - &mut HashMap::default(), - &mut I18n::default(), - config, - section_list, - ) + let mut parsing_data = + ParsingData::new(config.clone(), section_list.to_owned(), String::default()); + parse_section(token, &mut parsing_data, &mut HashMap::default()) } pub fn parse_tag_str(input: &str) -> Result { let token = parse_str(input, Rule::Tag)?; - parse_tag(token) + parse_tag(token, &String::default()) } pub fn parse_function_str(input: &str) -> Result { let token = parse_str(input, Rule::Function)?; - parse_function(token) + parse_function(token, &String::default()) } pub fn parse_divert_str( @@ -222,12 +245,12 @@ pub fn parse_divert_str( section_list: &[SectionKey], ) -> Result { let token = parse_str(input, Rule::Divert)?; - parse_divert(token, section_list, &None) + parse_divert(token, section_list, &None, &String::default()) } pub fn parse_modifier_str(input: &str, config: &Config) -> Result { let token = parse_str(input, Rule::Modifier)?; - parse_modifier(token, config) + parse_modifier(token, config, &String::default()) } pub fn parse_frequency_str( @@ -235,22 +258,22 @@ pub fn parse_frequency_str( config: &Config, ) -> Result { let token = parse_str(input, Rule::Frequency)?; - parse_frequency(token, config) + parse_frequency(token, config, &String::default()) } pub fn parse_requirement_str(input: &str, config: &Config) -> Result { let token = parse_str(input, Rule::Requirement)?; - parse_requirement(token, config) + parse_requirement(token, config, &String::default()) } pub fn parse_comparison_operator_str(input: &str) -> Result { let token = parse_str(input, Rule::ComparisonOperator)?; - parse_comparison_operator(token) + parse_comparison_operator(token, &String::default()) } pub fn parse_modifier_operator_str(input: &str) -> Result { let token = parse_str(input, Rule::ModifierOperator)?; - parse_modifier_operator(token) + parse_modifier_operator(token, &String::default()) } fn parse_str(input: &str, rule: Rule) -> Result, PalabritasError> { @@ -258,11 +281,12 @@ fn parse_str(input: &str, rule: Rule) -> Result, PalabritasError> Ok(mut pairs) => match pairs.next() { Some(token) => Ok(token), None => Err(PalabritasError::ParseError { - file: input.to_string(), + reason: format!("{:?} not found", rule), info: ErrorInfo { line: 1, col: 1, - string: "Modifier not found".to_string(), + string: input.to_string(), + file: String::default(), }, }), }, @@ -273,11 +297,12 @@ fn parse_str(input: &str, rule: Rule) -> Result, PalabritasError> }; Err(PalabritasError::ParseError { - file: input.to_string(), + reason: error.to_string(), info: ErrorInfo { line, col, - string: error.to_string(), + string: input.to_string(), + file: String::default(), }, }) } @@ -287,8 +312,9 @@ fn parse_str(input: &str, rule: Rule) -> Result, PalabritasError> fn parse_section_key( token: Pair, section_list: &mut Vec, + file: &str, ) -> Result<(), PalabritasError> { - match_rule(&token, Rule::Section)?; + match_rule(&token, Rule::Section, file)?; let mut id = String::default(); for inner_token in token.into_inner() { match inner_token.as_rule() { @@ -296,7 +322,7 @@ fn parse_section_key( id = inner_token.as_str().to_string(); } Rule::Subsection => { - parse_subsection_key(inner_token, &id, section_list)?; + parse_subsection_key(inner_token, &id, section_list, file)?; } _ => {} } @@ -313,8 +339,9 @@ fn parse_subsection_key( token: Pair, section: &str, section_list: &mut Vec, + file: &str, ) -> Result<(), PalabritasError> { - match_rule(&token, Rule::Subsection)?; + match_rule(&token, Rule::Subsection, file)?; let mut id = String::default(); for inner_token in token.into_inner() { match inner_token.as_rule() { @@ -322,7 +349,7 @@ fn parse_subsection_key( id = inner_token.as_str().to_string(); } Rule::Subsection => { - parse_subsection_key(inner_token, &id, section_list)?; + parse_subsection_key(inner_token, &id, section_list, file)?; } _ => {} } @@ -337,23 +364,21 @@ fn parse_subsection_key( fn parse_section( token: Pair, - blocks: &mut Vec>, + parsing_data: &mut ParsingData, section_map: &mut HashMap, - i18n: &mut I18n, - config: &Config, - section_list: &[SectionKey], ) -> Result { - match_rule(&token, Rule::Section)?; - if blocks.is_empty() { - blocks.push(Vec::default()); + match_rule(&token, Rule::Section, &parsing_data.file)?; + if parsing_data.blocks.is_empty() { + parsing_data.blocks.push(Vec::default()); } - blocks[0].push(Block::default()); - let block_id = blocks[0].len() - 1; + parsing_data.blocks[0].push(Block::default()); + let block_id = parsing_data.blocks[0].len() - 1; let error_info = ErrorInfo { line: token.line_col().0, col: token.line_col().1, string: token.as_str().to_string(), + file: parsing_data.file.clone(), }; let mut settings = BlockSettings::default(); @@ -363,34 +388,24 @@ fn parse_section( match inner_token.as_rule() { Rule::Identifier => { id = inner_token.as_str().to_string(); + parsing_data.current_section = Some(id.clone()); } Rule::Command => { - add_command_to_settings(inner_token, &mut settings, config)?; + add_command_to_settings( + inner_token, + &mut settings, + &parsing_data.config, + &parsing_data.file, + )?; } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { - parse_block( - inner_blocks_token, - blocks, - 1, - i18n, - config, - section_list, - &Some(id.clone()), - )?; - settings.children.push(blocks[1].len() - 1); + parse_block(inner_blocks_token, parsing_data, 1)?; + settings.children.push(parsing_data.blocks[1].len() - 1); } } Rule::Subsection => { - parse_subsection( - inner_token, - blocks, - &id, - section_map, - i18n, - config, - section_list, - )?; + parse_subsection(inner_token, parsing_data, section_map)?; } _ => {} } @@ -405,32 +420,29 @@ fn parse_section( ); let section = Block::Section { id, settings }; - check_invalid_frequency(§ion, error_info, blocks, 0)?; - blocks[0][block_id] = section.clone(); + check_invalid_frequency(§ion, error_info, &parsing_data.blocks, 0)?; + parsing_data.blocks[0][block_id] = section.clone(); Ok(section) } fn parse_subsection( token: Pair, - blocks: &mut Vec>, - section_name: &str, + parsing_data: &mut ParsingData, section_map: &mut HashMap, - i18n: &mut I18n, - config: &Config, - section_list: &[SectionKey], ) -> Result<(), PalabritasError> { - match_rule(&token, Rule::Subsection)?; - if blocks.is_empty() { - blocks.push(Vec::default()); + match_rule(&token, Rule::Subsection, &parsing_data.file)?; + if parsing_data.blocks.is_empty() { + parsing_data.blocks.push(Vec::default()); } - blocks[0].push(Block::default()); - let block_id = blocks[0].len() - 1; + parsing_data.blocks[0].push(Block::default()); + let block_id = parsing_data.blocks[0].len() - 1; let error_info = ErrorInfo { line: token.line_col().0, col: token.line_col().1, string: token.as_str().to_string(), + file: parsing_data.file.clone(), }; let mut settings = BlockSettings::default(); @@ -442,32 +454,21 @@ fn parse_subsection( id = inner_token.as_str().to_string(); } Rule::Command => { - add_command_to_settings(inner_token, &mut settings, config)?; + add_command_to_settings( + inner_token, + &mut settings, + &parsing_data.config, + &parsing_data.file, + )?; } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { - parse_block( - inner_blocks_token, - blocks, - 1, - i18n, - config, - section_list, - &Some(section_name.to_string()), - )?; - settings.children.push(blocks[1].len() - 1); + parse_block(inner_blocks_token, parsing_data, 1)?; + settings.children.push(parsing_data.blocks[1].len() - 1); } } Rule::Subsection => { - parse_subsection( - inner_token, - blocks, - section_name, - section_map, - i18n, - config, - section_list, - )?; + parse_subsection(inner_token, parsing_data, section_map)?; } _ => {} } @@ -475,28 +476,24 @@ fn parse_subsection( section_map.insert( SectionKey { - section: section_name.to_string(), + section: parsing_data.current_section.clone().unwrap(), subsection: Some(id.clone()), }, block_id, ); let subsection = Block::Subsection { id, settings }; - check_invalid_frequency(&subsection, error_info, blocks, 0)?; - blocks[0][block_id] = subsection; + check_invalid_frequency(&subsection, error_info, &parsing_data.blocks, 0)?; + parsing_data.blocks[0][block_id] = subsection; Ok(()) } fn parse_block( token: Pair, - blocks: &mut Vec>, + parsing_data: &mut ParsingData, child_order: usize, - i18n: &mut I18n, - config: &Config, - section_list: &[SectionKey], - current_section: &Option, ) -> Result<(), PalabritasError> { - match_rule(&token, Rule::Block)?; + match_rule(&token, Rule::Block, &parsing_data.file)?; // (NamedBucket | Choice | Text | Divery) ~ " "* ~ Command* ~ " "* ~ (NEWLINE | EOI) ~ NewBlock* let mut block = Block::default(); @@ -505,69 +502,84 @@ fn parse_block( line: token.line_col().0, col: token.line_col().1, string: token.as_str().to_string(), + file: parsing_data.file.clone(), }; for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Text => { - block = parse_text(inner_token)?; + block = parse_text(inner_token, &parsing_data.file)?; } Rule::NamedBucket => { - block = parse_named_bucket(inner_token)?; + block = parse_named_bucket(inner_token, &parsing_data.file)?; } Rule::Choice => { - block = parse_choice(inner_token)?; + block = parse_choice(inner_token, &parsing_data.file)?; } Rule::Divert => { - block = parse_divert(inner_token, section_list, current_section)?; + block = parse_divert( + inner_token, + &parsing_data.section_list, + &parsing_data.current_section, + &parsing_data.file, + )?; } Rule::Command => { - add_command_to_block(inner_token, &mut block, config)?; + add_command_to_block( + inner_token, + &mut block, + &parsing_data.config, + &parsing_data.file, + )?; } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { let settings = block.get_settings_mut(); - parse_block( - inner_blocks_token, - blocks, - child_order + 1, - i18n, - config, - section_list, - current_section, - )?; - settings.children.push(blocks[child_order + 1].len() - 1); + parse_block(inner_blocks_token, parsing_data, child_order + 1)?; + settings + .children + .push(parsing_data.blocks[child_order + 1].len() - 1); } } _ => {} } } - while child_order >= blocks.len() { - blocks.push(Vec::default()); + while child_order >= parsing_data.blocks.len() { + parsing_data.blocks.push(Vec::default()); } - update_i18n(&mut block, i18n, line_col.0); + update_i18n(&mut block, &mut parsing_data.i18n, line_col.0); - blocks[child_order].push(block); + parsing_data.blocks[child_order].push(block); - let block_id = blocks[child_order].len() - 1; + let block_id = parsing_data.blocks[child_order].len() - 1; if let Block::Bucket { name: _, settings: _, - } = blocks[child_order][block_id] + } = parsing_data.blocks[child_order][block_id] { - validate_bucket_data(block_id, blocks, child_order, line_col)?; - update_children_probabilities_to_frequency(blocks[child_order].len() - 1, blocks, child_order); - } else if is_child_unnamed_bucket(block_id, blocks, child_order) { - make_childs_bucket(block_id, blocks, child_order); + validate_bucket_data( + block_id, + &mut parsing_data.blocks, + child_order, + line_col, + &parsing_data.file, + )?; + update_children_probabilities_to_frequency( + parsing_data.blocks[child_order].len() - 1, + &mut parsing_data.blocks, + child_order, + ); + } else if is_child_unnamed_bucket(block_id, &parsing_data.blocks, child_order) { + make_childs_bucket(block_id, &mut parsing_data.blocks, child_order); } check_invalid_frequency( - &blocks[child_order][block_id], + &parsing_data.blocks[child_order][block_id], error_info, - blocks, + &parsing_data.blocks, child_order, )?; @@ -730,6 +742,7 @@ fn validate_bucket_data( blocks: &mut [Vec], child_order: usize, line_col: (usize, usize), + file: &str, ) -> Result<(), PalabritasError> { let bucket = &blocks[child_order][bucket]; let settings = bucket.get_settings(); @@ -765,6 +778,7 @@ fn validate_bucket_data( line: inner_line, col: 1, string, + file: file.to_string(), })); } Chance::Frequency(_) => frequency_found = true, @@ -779,6 +793,7 @@ fn validate_bucket_data( line: line_col.0, col: line_col.1, string: bucket_name, + file: file.to_string(), })); } } @@ -788,6 +803,7 @@ fn validate_bucket_data( line: line_col.0, col: line_col.1, string: bucket_name, + file: file.to_string(), })); } @@ -880,15 +896,15 @@ fn get_blocks_from_new_block(token: Pair) -> Vec> { blocks } -fn parse_named_bucket(token: Pair) -> Result { - match_rule(&token, Rule::NamedBucket)?; +fn parse_named_bucket(token: Pair, file: &str) -> Result { + match_rule(&token, Rule::NamedBucket, file)?; let mut name = None; let mut settings = BlockSettings::default(); for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Chance => { - settings.chance = parse_chance(inner_token)?; + settings.chance = parse_chance(inner_token, file)?; } Rule::SnakeCase => { name = Some(inner_token.as_str().to_string()); @@ -900,8 +916,8 @@ fn parse_named_bucket(token: Pair) -> Result { Ok(Block::Bucket { name, settings }) } -fn parse_choice(token: Pair) -> Result { - match_rule(&token, Rule::Choice)?; +fn parse_choice(token: Pair, file: &str) -> Result { + match_rule(&token, Rule::Choice, file)?; let mut text = String::default(); let mut settings = BlockSettings::default(); @@ -909,7 +925,7 @@ fn parse_choice(token: Pair) -> Result { for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Chance => { - settings.chance = parse_chance(inner_token)?; + settings.chance = parse_chance(inner_token, file)?; } Rule::String => { text = inner_token.as_str().to_string(); @@ -921,15 +937,15 @@ fn parse_choice(token: Pair) -> Result { Ok(Block::Choice { id: text, settings }) } -fn parse_text(token: Pair) -> Result { - match_rule(&token, Rule::Text)?; +fn parse_text(token: Pair, file: &str) -> Result { + match_rule(&token, Rule::Text, file)?; let mut text = String::default(); let mut settings = BlockSettings::default(); for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Chance => { - settings.chance = parse_chance(inner_token)?; + settings.chance = parse_chance(inner_token, file)?; } Rule::String => { text = inner_token.as_str().to_string(); @@ -945,33 +961,34 @@ fn add_command_to_settings( token: Pair, settings: &mut BlockSettings, config: &Config, + file: &str, ) -> Result<(), PalabritasError> { - match_rule(&token, Rule::Command)?; + match_rule(&token, Rule::Command, file)?; for inner_token in token.into_inner() { match inner_token.as_rule() { //Command = {NewLine ~ (Indentation | " ")* ~ (Requirement | Frequency | Modifier | Function | Unique | Tag) } Rule::Requirement => { - let requirement = parse_requirement(inner_token, config)?; + let requirement = parse_requirement(inner_token, config, file)?; settings.requirements.push(requirement); } Rule::Frequency => { - let frequency = parse_frequency(inner_token, config)?; + let frequency = parse_frequency(inner_token, config, file)?; settings.frequency_modifiers.push(frequency); } Rule::Modifier => { - let modifier = parse_modifier(inner_token, config)?; + let modifier = parse_modifier(inner_token, config, file)?; settings.modifiers.push(modifier); } Rule::Unique => { settings.unique = true; } Rule::Tag => { - let tag = parse_tag(inner_token)?; + let tag = parse_tag(inner_token, file)?; settings.tags.push(tag); } Rule::Function => { - let function = parse_function(inner_token)?; + let function = parse_function(inner_token, file)?; settings.functions.push(function); } _ => {} @@ -984,13 +1001,14 @@ fn add_command_to_block( token: Pair, block: &mut Block, config: &Config, + file: &str, ) -> Result<(), PalabritasError> { let settings = block.get_settings_mut(); - add_command_to_settings(token, settings, config) + add_command_to_settings(token, settings, config, file) } -fn parse_function(token: Pair) -> Result { - match_rule(&token, Rule::Function)?; +fn parse_function(token: Pair, file: &str) -> Result { + match_rule(&token, Rule::Function, file)?; let mut name = String::default(); let mut parameters = Vec::default(); @@ -1005,8 +1023,8 @@ fn parse_function(token: Pair) -> Result { Ok(Function { name, parameters }) } -fn parse_tag(token: Pair) -> Result { - match_rule(&token, Rule::Tag)?; +fn parse_tag(token: Pair, file: &str) -> Result { + match_rule(&token, Rule::Tag, file)?; let mut name = String::default(); for inner_token in token.into_inner() { @@ -1020,8 +1038,9 @@ fn parse_divert( token: Pair, section_list: &[SectionKey], current_section: &Option, + file: &str, ) -> Result { - match_rule(&token, Rule::Divert)?; + match_rule(&token, Rule::Divert, file)?; //Divert = { "->" ~ " "* ~ Identifier ~ ("." ~ Identifier)? } let mut section: Option = None; @@ -1031,6 +1050,7 @@ fn parse_divert( line: token.line_col().0, col: token.line_col().1, string: token.as_str().to_string(), + file: file.to_string(), }; for inner_token in token.into_inner() { @@ -1061,13 +1081,18 @@ fn parse_divert( }) } -fn parse_modifier(token: Pair, config: &Config) -> Result { - match_rule(&token, Rule::Modifier)?; +fn parse_modifier( + token: Pair, + config: &Config, + file: &str, +) -> Result { + match_rule(&token, Rule::Modifier, file)?; //Modifier = { "set" ~ " "+ ~ ( (Identifier ~ " "+ ~ ModifierOperator? ~ Value) | (NotOperator? ~ " "* ~ Identifier) ) ~ " "* } let error_info = ErrorInfo { line: token.line_col().0, col: token.line_col().1, string: token.as_str().to_string(), + file: file.to_string(), }; let mut modifier = Modifier::default(); for inner_token in token.into_inner() { @@ -1081,7 +1106,7 @@ fn parse_modifier(token: Pair, config: &Config) -> Result { - modifier.operator = parse_modifier_operator(inner_token)?; + modifier.operator = parse_modifier_operator(inner_token, file)?; } Rule::NotOperator => { @@ -1158,10 +1183,10 @@ fn check_variable_value_matches_type( Ok(()) } else { Err(PalabritasError::InvalidVariableValue { - info: error_info.clone(), + info: Box::new(error_info.clone()), variable: variable.to_string(), value: value.to_string(), - variable_type: format!("{}", kind), + variable_type: kind.clone(), }) } } @@ -1170,10 +1195,10 @@ fn check_variable_value_matches_type( Ok(()) } else { Err(PalabritasError::InvalidVariableValue { - info: error_info.clone(), + info: Box::new(error_info.clone()), variable: variable.to_string(), value: value.to_string(), - variable_type: format!("{}", kind), + variable_type: kind.clone(), }) } } @@ -1182,10 +1207,10 @@ fn check_variable_value_matches_type( Ok(()) } else { Err(PalabritasError::InvalidVariableValue { - info: error_info.clone(), + info: Box::new(error_info.clone()), variable: variable.to_string(), value: value.to_string(), - variable_type: format!("{}", kind), + variable_type: kind.clone(), }) } } @@ -1194,10 +1219,10 @@ fn check_variable_value_matches_type( match variants.contains(&value.to_string()) { true => Ok(()), false => Err(PalabritasError::InvalidVariableValue { - info: error_info.clone(), + info: Box::new(error_info.clone()), variable: variable.to_string(), value: value.to_string(), - variable_type: format!("{}", kind), + variable_type: kind.clone(), }), } } @@ -1223,10 +1248,10 @@ fn check_variable_modifier_operator_matches_type( _ => match operator { ModifierOperator::Set => Ok(()), _ => Err(PalabritasError::InvalidVariableOperator { - info: error_info.clone(), + info: Box::new(error_info.clone()), variable: variable.to_string(), operator: format!("{}", operator), - variable_type: format!("{}", kind), + variable_type: kind.clone(), }), }, } @@ -1252,10 +1277,10 @@ fn check_variable_comparison_operator_matches_type( ComparisonOperator::Equal => Ok(()), ComparisonOperator::NotEqual => Ok(()), _ => Err(PalabritasError::InvalidVariableOperator { - info: error_info.clone(), + info: Box::new(error_info.clone()), variable: variable.to_string(), operator: format!("{}", operator), - variable_type: format!("{}", kind), + variable_type: kind.clone(), }), }, } @@ -1267,9 +1292,12 @@ fn check_variable_comparison_operator_matches_type( } } -fn parse_modifier_operator(token: Pair) -> Result { +fn parse_modifier_operator( + token: Pair, + file: &str, +) -> Result { //ModifierOperator = {"+" | "-" | "*" | "/" | "="} - match_rule(&token, Rule::ModifierOperator)?; + match_rule(&token, Rule::ModifierOperator, file)?; match token.as_str() { "+" => Ok(ModifierOperator::Add), @@ -1283,14 +1311,15 @@ fn parse_modifier_operator(token: Pair) -> Result, config: &Config, + file: &str, ) -> Result { - match_rule(&token, Rule::Frequency)?; + match_rule(&token, Rule::Frequency, file)?; let mut frequency = FrequencyModifier::default(); for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Condition => { - frequency.condition = parse_condition(inner_token, config)?; + frequency.condition = parse_condition(inner_token, config, file)?; } Rule::Float | Rule::Integer => { @@ -1304,26 +1333,35 @@ fn parse_frequency( Ok(frequency) } -fn parse_requirement(token: Pair, config: &Config) -> Result { - match_rule(&token, Rule::Requirement)?; +fn parse_requirement( + token: Pair, + config: &Config, + file: &str, +) -> Result { + match_rule(&token, Rule::Requirement, file)?; let mut condition = Condition::default(); for inner_token in token.into_inner() { if inner_token.as_rule() == Rule::Condition { - condition = parse_condition(inner_token, config)?; + condition = parse_condition(inner_token, config, file)?; } } Ok(Requirement { condition }) } -fn parse_condition(token: Pair, config: &Config) -> Result { - match_rule(&token, Rule::Condition)?; +fn parse_condition( + token: Pair, + config: &Config, + file: &str, +) -> Result { + match_rule(&token, Rule::Condition, file)?; //Condition = { ( Identifier ~ " "* ~ ( ComparisonOperator ~ " "* )? ~ Value? ) | ( NotEqualOperator? ~ " "* ~ Identifier ~ " "*) } let error_info = ErrorInfo { line: token.line_col().0, col: token.line_col().1, string: token.as_str().to_string(), + file: file.to_string(), }; let mut condition = Condition::default(); @@ -1334,7 +1372,7 @@ fn parse_condition(token: Pair, config: &Config) -> Result { - condition.operator = parse_comparison_operator(inner_token)?; + condition.operator = parse_comparison_operator(inner_token, file)?; } Rule::NotOperator => { condition.operator = ComparisonOperator::NotEqual; @@ -1357,8 +1395,11 @@ fn parse_condition(token: Pair, config: &Config) -> Result) -> Result { - match_rule(&token, Rule::ComparisonOperator)?; +fn parse_comparison_operator( + token: Pair, + file: &str, +) -> Result { + match_rule(&token, Rule::ComparisonOperator, file)?; match token.as_str() { "!=" => Ok(ComparisonOperator::NotEqual), @@ -1372,8 +1413,8 @@ fn parse_comparison_operator(token: Pair) -> Result) -> Result { - match_rule(&token, Rule::Chance)?; +fn parse_chance(token: Pair, file: &str) -> Result { + match_rule(&token, Rule::Chance, file)?; for inner_token in token.into_inner() { match inner_token.as_rule() { @@ -1398,13 +1439,14 @@ fn parse_chance(token: Pair) -> Result { Ok(Chance::None) } -fn match_rule(token: &Pair, expected_rule: Rule) -> Result<(), PalabritasError> { +fn match_rule(token: &Pair, expected_rule: Rule, file: &str) -> Result<(), PalabritasError> { if token.as_rule() != expected_rule { return Err(PalabritasError::UnexpectedRule { info: ErrorInfo { line: token.line_col().0, col: token.line_col().1, string: token.as_str().to_string(), + file: file.to_string(), }, expected_rule, rule_found: token.as_rule(), @@ -1477,7 +1519,8 @@ mod test { PalabritasError::BucketSumIsNot1(ErrorInfo { line: 1, col: 1, - string: snake_case + string: snake_case, + file: String::default() }) ); } @@ -1501,7 +1544,8 @@ mod test { PalabritasError::BucketHasFrequenciesAndChances(ErrorInfo { line: 1, col: 1, - string: snake_case + string: snake_case, + file: String::default() }) ); } @@ -1524,7 +1568,8 @@ mod test { PalabritasError::BucketMissingProbability(ErrorInfo { line: 3, col: 1, - string: child_2 + string: child_2, + file: String::default() }) ); } @@ -1662,18 +1707,10 @@ mod test { ); let token = parse_str(§ion_string, Rule::Section).unwrap(); - let mut blocks = Vec::default(); - parse_section( - token, - &mut blocks, - &mut HashMap::default(), - &mut I18n::default(), - &Config::default(), - &Vec::default(), - ) - .unwrap(); + let mut parsing_data = ParsingData::default(); + parse_section(token, &mut parsing_data, &mut HashMap::default()).unwrap(); - let section = blocks[0][0].clone(); + let section = parsing_data.blocks[0][0].clone(); let expected_value = Block::Section { id: section_identifier, @@ -1681,7 +1718,7 @@ mod test { }; assert_eq!(section, expected_value); - let sub_section_1 = blocks[0][1].clone(); + let sub_section_1 = parsing_data.blocks[0][1].clone(); let expected_value = Block::Subsection { id: subsection_identifier_1, @@ -1689,7 +1726,7 @@ mod test { }; assert_eq!(sub_section_1, expected_value); - let sub_section_2 = blocks[0][2].clone(); + let sub_section_2 = parsing_data.blocks[0][2].clone(); let expected_value = Block::Subsection { id: subsection_identifier_2, @@ -1751,13 +1788,13 @@ mod test { block_settings.modifiers.push(expected_modifier); let token = parse_str(&modifier_string, Rule::Command).unwrap(); - add_command_to_block(token, &mut block, &config).unwrap(); + add_command_to_block(token, &mut block, &config, &String::default()).unwrap(); //Unique block_settings.unique = true; let token = parse_str("\n unique", Rule::Command).unwrap(); - add_command_to_block(token, &mut block, &config).unwrap(); + add_command_to_block(token, &mut block, &config, &String::default()).unwrap(); //Frequency @@ -1781,7 +1818,7 @@ mod test { block_settings.frequency_modifiers.push(expected_frequency); let token = parse_str(&frequency_string, Rule::Command).unwrap(); - add_command_to_block(token, &mut block, &config).unwrap(); + add_command_to_block(token, &mut block, &config, &String::default()).unwrap(); //Requirement @@ -1801,7 +1838,7 @@ mod test { block_settings.requirements.push(expected_requirement); let token = parse_str(&requirement_string, Rule::Command).unwrap(); - add_command_to_block(token, &mut block, &config).unwrap(); + add_command_to_block(token, &mut block, &config, &String::default()).unwrap(); let expected_block = Block::Text { id: text_id, @@ -1831,7 +1868,8 @@ mod test { PalabritasError::FrequencyOutOfBucket(ErrorInfo { line: 1, col: 1, - string: database_str + string: database_str, + file: String::default() }) ); @@ -1844,7 +1882,8 @@ mod test { PalabritasError::FrequencyOutOfBucket(ErrorInfo { line: 1, col: 1, - string: database_str + string: database_str, + file: String::default() }) ); @@ -1879,7 +1918,8 @@ mod test { PalabritasError::FrequencyModifierWithoutFrequencyChance(ErrorInfo { line: 1, col: 1, - string: database_str + string: database_str, + file: String::default() }) ); } @@ -1902,7 +1942,8 @@ mod test { PalabritasError::DivisionByZero(ErrorInfo { line: 1, col: 1, - string: tag_string + string: tag_string, + file: String::default() }) ); @@ -1917,7 +1958,8 @@ mod test { PalabritasError::DivisionByZero(ErrorInfo { line: 1, col: 1, - string: tag_string + string: tag_string, + file: String::default() }) ); } @@ -1931,7 +1973,8 @@ mod test { info: ErrorInfo { line: 2, col: 3, - string: "->Section".to_string() + string: "->Section".to_string(), + file: String::default() }, section: SectionKey { section: "Section".to_string(), @@ -1958,7 +2001,8 @@ mod test { info: ErrorInfo { line: 2, col: 7, - string: "variable = value".to_string() + string: "variable = value".to_string(), + file: String::default() }, variable: "variable".to_string() } @@ -1977,7 +2021,8 @@ mod test { info: ErrorInfo { line: 2, col: 8, - string: "variable = value".to_string() + string: "variable = value".to_string(), + file: String::default() }, variable: "variable".to_string() } @@ -1995,7 +2040,8 @@ mod test { info: ErrorInfo { line: 2, col: 3, - string: "set variable value".to_string() + string: "set variable value".to_string(), + file: String::default() }, variable: "variable".to_string() } @@ -2013,16 +2059,17 @@ mod test { line: 0, col: 0, string: String::default(), + file: String::default(), }; let error = check_variable_value_matches_type("variable", "hello", &config, &error_info).unwrap_err(); let expected_error = PalabritasError::InvalidVariableValue { - info: error_info, + info: Box::new(error_info), variable: "variable".to_string(), value: "hello".to_string(), - variable_type: "Integer".to_string(), + variable_type: VariableKind::Integer, }; assert_eq!(error, expected_error); @@ -2039,16 +2086,17 @@ mod test { line: 0, col: 0, string: String::default(), + file: String::default(), }; let error = check_variable_value_matches_type("variable", "hello", &config, &error_info).unwrap_err(); let expected_error = PalabritasError::InvalidVariableValue { - info: error_info, + info: Box::new(error_info), variable: "variable".to_string(), value: "hello".to_string(), - variable_type: "Float".to_string(), + variable_type: VariableKind::Float, }; assert_eq!(error, expected_error); @@ -2065,16 +2113,17 @@ mod test { line: 0, col: 0, string: String::default(), + file: String::default(), }; let error = check_variable_value_matches_type("variable", "hello", &config, &error_info).unwrap_err(); let expected_error = PalabritasError::InvalidVariableValue { - info: error_info, + info: Box::new(error_info), variable: "variable".to_string(), value: "hello".to_string(), - variable_type: "Bool".to_string(), + variable_type: VariableKind::Bool, }; assert_eq!(error, expected_error); @@ -2083,25 +2132,26 @@ mod test { #[test] fn enum_with_invalid_value_throws_error() { let mut config = Config::default(); - config.variables.insert( - "variable".to_string(), - VariableKind::Enum(vec!["night".to_string(), "day".to_string()]), - ); + let kind = VariableKind::Enum(vec!["night".to_string(), "day".to_string()]); + config + .variables + .insert("variable".to_string(), kind.clone()); let error_info = ErrorInfo { line: 0, col: 0, string: String::default(), + file: String::default(), }; let error = check_variable_value_matches_type("variable", "hello", &config, &error_info).unwrap_err(); let expected_error = PalabritasError::InvalidVariableValue { - info: error_info, + info: Box::new(error_info), variable: "variable".to_string(), value: "hello".to_string(), - variable_type: "Enum([\"night\", \"day\"])".to_string(), + variable_type: kind, }; assert_eq!(error, expected_error); @@ -2119,14 +2169,15 @@ mod test { assert_eq!( error, PalabritasError::InvalidVariableValue { - info: ErrorInfo { + info: Box::new(ErrorInfo { line: 2, col: 7, - string: "variable = value".to_string() - }, + string: "variable = value".to_string(), + file: String::default() + }), variable: "variable".to_string(), value: "value".to_string(), - variable_type: "Integer".to_string() + variable_type: VariableKind::Integer } ); } @@ -2142,14 +2193,15 @@ mod test { assert_eq!( error, PalabritasError::InvalidVariableValue { - info: ErrorInfo { + info: Box::new(ErrorInfo { line: 2, col: 8, - string: "variable = value".to_string() - }, + string: "variable = value".to_string(), + file: String::default() + }), variable: "variable".to_string(), value: "value".to_string(), - variable_type: "Integer".to_string() + variable_type: VariableKind::Integer } ); } @@ -2165,14 +2217,15 @@ mod test { assert_eq!( error, PalabritasError::InvalidVariableValue { - info: ErrorInfo { + info: Box::new(ErrorInfo { line: 2, col: 3, - string: "set variable value".to_string() - }, + string: "set variable value".to_string(), + file: String::default() + }), variable: "variable".to_string(), value: "value".to_string(), - variable_type: "Integer".to_string() + variable_type: VariableKind::Integer } ); } @@ -2189,14 +2242,15 @@ mod test { assert_eq!( error, PalabritasError::InvalidVariableOperator { - info: ErrorInfo { + info: Box::new(ErrorInfo { line: 2, col: 7, - string: "variable > value".to_string() - }, + string: "variable > value".to_string(), + file: String::default() + }), variable: "variable".to_string(), operator: ">".to_string(), - variable_type: "String".to_string() + variable_type: VariableKind::String } ); } @@ -2212,14 +2266,15 @@ mod test { assert_eq!( error, PalabritasError::InvalidVariableOperator { - info: ErrorInfo { + info: Box::new(ErrorInfo { line: 2, col: 8, - string: "variable > value".to_string() - }, + string: "variable > value".to_string(), + file: String::default() + }), variable: "variable".to_string(), operator: ">".to_string(), - variable_type: "String".to_string() + variable_type: VariableKind::String } ); } @@ -2235,25 +2290,19 @@ mod test { assert_eq!( error, PalabritasError::InvalidVariableOperator { - info: ErrorInfo { + info: Box::new(ErrorInfo { line: 2, col: 3, - string: "set variable +1".to_string() - }, + string: "set variable +1".to_string(), + file: String::default() + }), variable: "variable".to_string(), operator: "+".to_string(), - variable_type: "String".to_string() + variable_type: VariableKind::String } ); } - /* - InvalidVariableOperator { - info: ErrorInfo, - variable: String, - operator: String, - variable_type: String, - }, */ #[test] fn parse_function_correctly() { //Function = {"`" ~ " "* ~ Identifier ~ (" " ~ Value)* ~ " "* ~ "`"} @@ -2908,17 +2957,9 @@ mod test { fn parse_block_str(input: &str) -> Result>, PalabritasError> { let token = parse_str(input, Rule::Block)?; - let mut blocks = Vec::default(); - parse_block( - token, - &mut blocks, - 0, - &mut I18n::default(), - &Config::default(), - &Vec::default(), - &None, - )?; - Ok(blocks) + let mut parsing_data = ParsingData::default(); + parse_block(token, &mut parsing_data, 0)?; + Ok(parsing_data.blocks) } fn make_random_condition_str() -> String { make_random_identifier() + " " + &make_random_identifier() diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index ad9b015..e7cf0ae 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -757,7 +757,7 @@ mod test { use cuentitos_common::{ condition::ComparisonOperator, modifier::ModifierOperator, Block, BlockSettings, Chance, Condition, Config, Database, FrequencyModifier, Function, I18n, LanguageDb, LanguageId, - Modifier, Requirement, SectionKey, VariableKind, NextBlock, + Modifier, NextBlock, Requirement, SectionKey, VariableKind, }; #[test] @@ -2479,7 +2479,10 @@ mod test { }; let divert = Block::Divert { - next: NextBlock::Section(SectionKey { section: "section".to_string(), subsection: None }), + next: NextBlock::Section(SectionKey { + section: "section".to_string(), + subsection: None, + }), settings: BlockSettings::default(), }; @@ -2654,14 +2657,13 @@ mod test { #[test] fn divert_throws_error_if_section_doesnt_exist() { - let section_key = SectionKey { section: "section".to_string(), subsection: Some("subsection".to_string()), }; let divert = Block::Divert { next: NextBlock::Section(section_key.clone()), - settings: BlockSettings::default() + settings: BlockSettings::default(), }; let database = Database { blocks: vec![divert], From 48b465291a20b59c662092c5b5d9070193fc90bf Mon Sep 17 00:00:00 2001 From: loomstyla Date: Wed, 5 Jul 2023 16:53:13 -0300 Subject: [PATCH 42/94] now prints sets in story --- cli/src/console.rs | 93 +++++++++++++++++++++++++----------------- runtime/src/lib.rs | 1 + runtime/src/runtime.rs | 65 +++++++++++++++++------------ 3 files changed, 96 insertions(+), 63 deletions(-) diff --git a/cli/src/console.rs b/cli/src/console.rs index 0b59363..fe3bec6 100644 --- a/cli/src/console.rs +++ b/cli/src/console.rs @@ -50,9 +50,13 @@ impl Console { let input = Self::prompt(section, subsection); match input.as_str() { - "" => { - print_output_text(runtime.next_block(), &runtime); - } + "" => match runtime.next_block() { + Ok((block, variables)) => { + print_block(block); + print_variables(&variables, &runtime) + } + Err(error) => print_runtime_error(error, &runtime), + }, "sections" => { println!("Sections:"); for section in runtime.database.sections.keys() { @@ -64,16 +68,16 @@ impl Console { println!("Current Text Id: {}", current_id); } println!("Variables: "); - print_variables(&runtime) + print_all_variables(&runtime) } "q" => break, - "variables" => print_variables(&runtime), + "variables" => print_all_variables(&runtime), str => { if str.starts_with("set") { match parse_modifier_str(str, &runtime.database.config) { Ok(modifier) => match runtime.apply_modifier(&modifier) { Ok(_) => { - print_variable(&runtime, &modifier.variable); + print_variable(&modifier.variable, &runtime); } Err(error) => println!("{}", error), }, @@ -95,8 +99,11 @@ impl Console { }, }; match runtime.divert(§ion) { - Ok(_) => print_output_text(runtime.current_block(), &runtime), - Err(err) => println!("{}", err), + Ok(_) => match runtime.current_block() { + Ok(block) => print_block(block), + Err(error) => print_runtime_error(error, &runtime), + }, + Err(error) => print_runtime_error(error, &runtime), } } } else if let Ok(choice) = str.parse::() { @@ -104,7 +111,13 @@ impl Console { println!("invalid option"); continue; } - print_output_text(runtime.pick_choice(choice - 1), &runtime); + match runtime.pick_choice(choice - 1) { + Ok((block, variables)) => { + print_block(block); + print_variables(&variables, &runtime) + } + Err(error) => print_runtime_error(error, &runtime), + } } else { println!("Unkown command: {}", str); } @@ -114,7 +127,7 @@ impl Console { } } -fn print_variables(runtime: &Runtime) { +fn print_all_variables(runtime: &Runtime) { for (variable, kind) in &runtime.database.config.variables { match kind { VariableKind::Integer => { @@ -137,7 +150,13 @@ fn print_variables(runtime: &Runtime) { } } -fn print_variable(runtime: &Runtime, variable: &String) { +fn print_variables(variables: &ModifiedVariables, runtime: &Runtime) { + for variable in variables { + print_variable(variable, runtime); + } +} + +fn print_variable(variable: &String, runtime: &Runtime) { for (runtime_variable, kind) in &runtime.database.config.variables { if runtime_variable == variable { match kind { @@ -163,33 +182,33 @@ fn print_variable(runtime: &Runtime, variable: &String) { } println!("Variable {} doesn't exist", variable) } -fn print_output_text(output_text: Result, runtime: &Runtime) { - match output_text { - Ok(output_text) => { - println!("{}", output_text.text); - print_choices(output_text.choices); + +fn print_block(block: Block) { + println!("{}", block.text); + print_choices(block.choices); +} + +fn print_runtime_error(error: RuntimeError, runtime: &Runtime) { + match error { + RuntimeError::WaitingForChoice(choices) => { + println!("Make a choice:\n"); + print_choices(choices); + } + RuntimeError::InvalidChoice { + total_choices, + choice_picked, + } => { + println!( + "Can't pick {}, because there's only {} options", + choice_picked + 1, + total_choices + ); + println!("Make a choice:\n"); + print_choices(runtime.get_choices_strings()); + } + _ => { + println!("{}", error) } - Err(err) => match err { - RuntimeError::WaitingForChoice(choices) => { - println!("Make a choice:\n"); - print_choices(choices); - } - RuntimeError::InvalidChoice { - total_choices, - choice_picked, - } => { - println!( - "Can't pick {}, because there's only {} options", - choice_picked + 1, - total_choices - ); - println!("Make a choice:\n"); - print_choices(runtime.get_choices_strings()); - } - _ => { - println!("{}", err) - } - }, } } diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 6b22546..2ad5cf0 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -2,6 +2,7 @@ mod runtime; pub use cuentitos_common::Database; pub use runtime::Block; pub use runtime::DivertData; +pub use runtime::ModifiedVariables; pub use runtime::Runtime; mod game_state; diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index e7cf0ae..5dc83ec 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -28,6 +28,7 @@ pub struct Block { } pub type DivertData = SectionKey; +pub type ModifiedVariables = Vec; #[derive(Debug, Default, Serialize, Deserialize, PartialEq)] pub struct Runtime { @@ -79,7 +80,7 @@ impl Runtime { self.rng = Some(Pcg32::seed_from_u64(seed)); } - pub fn divert(&mut self, divert: &DivertData) -> Result<(), RuntimeError> { + pub fn divert(&mut self, divert: &DivertData) -> Result { let next = self.get_section_block_id(divert)?; self.push_stack(next) } @@ -105,17 +106,19 @@ impl Runtime { } } - pub fn next_block(&mut self) -> Result { + pub fn next_block(&mut self) -> Result<(Block, ModifiedVariables), RuntimeError> { if self.database.blocks.is_empty() { return Err(RuntimeError::EmptyDatabase); } - self.update_stack()?; + let mut modified_variables = self.update_stack()?; while !self.next_block_meets_requirements()? { - self.pop_stack_and_find_next()?; + modified_variables.append(&mut self.pop_stack_and_find_next()?); } - self.current_block() + + let block = self.current_block()?; + Ok((block, modified_variables)) } pub fn get_block(&self, id: BlockId) -> &cuentitos_common::Block { @@ -174,7 +177,7 @@ impl Runtime { } } - pub fn pick_choice(&mut self, choice: usize) -> Result { + pub fn pick_choice(&mut self, choice: usize) -> Result<(Block, ModifiedVariables), RuntimeError> { if self.database.blocks.is_empty() { return Err(RuntimeError::EmptyDatabase); } @@ -515,7 +518,8 @@ impl Runtime { } } - fn apply_modifiers(&mut self) -> Result<(), RuntimeError> { + fn apply_modifiers(&mut self) -> Result { + let mut modified_variables = ModifiedVariables::default(); let id = match self.block_stack.last() { Some(id) => id, None => return Err(RuntimeError::EmptyStack), @@ -523,11 +527,12 @@ impl Runtime { let block = self.get_block(*id); for modifier in block.get_settings().modifiers.clone() { self.apply_modifier(&modifier)?; + modified_variables.push(modifier.variable); } - Ok(()) + Ok(modified_variables) } - fn push_stack(&mut self, id: BlockId) -> Result<(), RuntimeError> { + fn push_stack(&mut self, id: BlockId) -> Result { self.block_stack.push(id); if self.get_block(id).get_settings().unique { @@ -538,40 +543,45 @@ impl Runtime { } } - self.apply_modifiers()?; + let mut modified_variables = self.apply_modifiers()?; let block = self.get_block(id).clone(); match block { cuentitos_common::Block::Section { id, settings: _ } => { self.game_state.current_section = Some(id); self.game_state.current_subsection = None; - self.update_stack() + modified_variables.append(&mut self.update_stack()?); + Ok(modified_variables) } cuentitos_common::Block::Subsection { id, settings: _ } => { self.game_state.current_subsection = Some(id); - self.update_stack() + modified_variables.append(&mut self.update_stack()?); + Ok(modified_variables) } cuentitos_common::Block::Text { id: _, settings: _ } => { self.update_choices()?; - Ok(()) + Ok(modified_variables) } cuentitos_common::Block::Choice { id: _, settings: _ } => { self.update_choices()?; - Ok(()) + Ok(modified_variables) } cuentitos_common::Block::Bucket { name: _, settings: _, } => { if let Some(next) = self.get_random_block_from_bucket(block.get_settings())? { - self.push_stack(next) + modified_variables.append(&mut self.push_stack(next)?); + Ok(modified_variables) } else { - self.update_choices() + self.update_choices()?; + Ok(modified_variables) } } cuentitos_common::Block::Divert { next, settings: _ } => { let next = self.get_divert_next(next)?; - self.push_stack(next) + modified_variables.append(&mut self.push_stack(next)?); + Ok(modified_variables) } } } @@ -586,7 +596,7 @@ impl Runtime { NextBlock::Section(section_key) => self.get_section_block_id(§ion_key), } } - fn update_stack(&mut self) -> Result<(), RuntimeError> { + fn update_stack(&mut self) -> Result { if self.database.blocks.is_empty() { return Err(RuntimeError::EmptyDatabase); } @@ -643,7 +653,7 @@ impl Runtime { } } - fn pop_stack_and_find_next(&mut self) -> Result<(), RuntimeError> { + fn pop_stack_and_find_next(&mut self) -> Result { let last_block_id: usize = match self.block_stack.last() { Some(id) => *id, None => return Err(RuntimeError::EmptyStack), @@ -1142,11 +1152,14 @@ mod test { }; let output = runtime.next_block().unwrap(); - let expected_output = crate::Block { - text: "parent".to_string(), - choices: vec!["1".to_string(), "2".to_string()], - ..Default::default() - }; + let expected_output = ( + crate::Block { + text: "parent".to_string(), + choices: vec!["1".to_string(), "2".to_string()], + ..Default::default() + }, + Vec::default(), + ); assert_eq!(output, expected_output); assert_eq!(runtime.block_stack, vec![0]); @@ -2517,7 +2530,7 @@ mod test { ..Default::default() }; let mut runtime = Runtime::new(database); - let output_tags = runtime.next_block().unwrap().tags; + let output_tags = runtime.next_block().unwrap().0.tags; assert_eq!(tags, output_tags); } @@ -2541,7 +2554,7 @@ mod test { ..Default::default() }; let mut runtime = Runtime::new(database); - let output_functions = runtime.next_block().unwrap().functions; + let output_functions = runtime.next_block().unwrap().0.functions; assert_eq!(functions, output_functions); } From edd4e97104e1e222203f793b9f9c9a9f0880b1e6 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Wed, 5 Jul 2023 18:12:05 -0300 Subject: [PATCH 43/94] ? command --- cli/src/console.rs | 19 ++++- common/src/block.rs | 25 +++++++ palabritas/src/parser.rs | 46 ++++++++++-- runtime/src/runtime.rs | 149 +++++++++++++++++++++------------------ 4 files changed, 162 insertions(+), 77 deletions(-) diff --git a/cli/src/console.rs b/cli/src/console.rs index fe3bec6..93f396d 100644 --- a/cli/src/console.rs +++ b/cli/src/console.rs @@ -64,8 +64,23 @@ impl Console { } } "?" => { - if let Some(current_id) = runtime.block_stack.last() { - println!("Current Text Id: {}", current_id); + if !runtime.block_stack.is_empty() { + match runtime.current_block() { + Ok(block) => { + println!("Current Block:"); + println!(" Text: {}", block.text); + println!(" Script: {}", block.script); + } + Err(error) => print_runtime_error(error, &runtime), + } + match runtime.peek_next_block() { + Ok((block, _)) => { + println!("Next Block:"); + println!(" Text: {}", block.text); + println!(" Script: {}", block.script); + } + Err(error) => print_runtime_error(error, &runtime), + } } println!("Variables: "); print_all_variables(&runtime) diff --git a/common/src/block.rs b/common/src/block.rs index b3f209b..999f25c 100644 --- a/common/src/block.rs +++ b/common/src/block.rs @@ -1,6 +1,7 @@ use crate::{FrequencyModifier, Function, I18nId, Modifier, Requirement}; use core::fmt; use serde::{Deserialize, Serialize}; +use std::fmt::Display; pub type BlockId = usize; pub type BucketName = String; @@ -33,6 +34,29 @@ pub enum NextBlock { Section(SectionKey), } +#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)] +pub struct Script { + pub file: String, + pub line: usize, + pub col: usize, +} + +impl Default for Script { + fn default() -> Self { + Self { + file: Default::default(), + line: 1, + col: 1, + } + } +} + +impl Display for Script { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}:{}:{}", self.file, self.line, self.col) + } +} + #[derive(Debug, Serialize, Deserialize, Default, PartialEq, Clone)] pub struct BlockSettings { pub children: Vec, @@ -43,6 +67,7 @@ pub struct BlockSettings { pub unique: bool, pub tags: Vec, pub functions: Vec, + pub script: Script, } #[derive(Debug, Serialize, Deserialize, Default, PartialEq, Clone)] diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index 43cf71c..47f0e9d 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -6,7 +6,7 @@ use cuentitos_common::condition::ComparisonOperator; use cuentitos_common::modifier::ModifierOperator; use cuentitos_common::{ Block, BlockId, BlockSettings, Chance, Condition, Config, Database, FrequencyModifier, Function, - I18n, Modifier, NextBlock, Requirement, SectionKey, + I18n, Modifier, NextBlock, Requirement, Script, SectionKey, }; use pest::{iterators::Pair, Parser}; @@ -381,7 +381,14 @@ fn parse_section( file: parsing_data.file.clone(), }; - let mut settings = BlockSettings::default(); + let mut settings = BlockSettings { + script: Script { + file: parsing_data.file.clone(), + line: token.line_col().0, + col: token.line_col().1, + }, + ..Default::default() + }; let mut id: String = String::default(); //Section = {"#" ~ " "* ~ Identifier ~ " "* ~ Command* ~ NewLine ~ ( NewLine | NewBlock | Subsection )* } for inner_token in token.into_inner() { @@ -445,7 +452,15 @@ fn parse_subsection( file: parsing_data.file.clone(), }; - let mut settings = BlockSettings::default(); + let mut settings = BlockSettings { + script: Script { + file: parsing_data.file.clone(), + line: token.line_col().0, + col: token.line_col().1, + }, + ..Default::default() + }; + let mut id: String = String::default(); for inner_token in token.into_inner() { @@ -551,6 +566,12 @@ fn parse_block( update_i18n(&mut block, &mut parsing_data.i18n, line_col.0); + block.get_settings_mut().script = Script { + file: parsing_data.file.clone(), + line: line_col.0, + col: line_col.1, + }; + parsing_data.blocks[child_order].push(block); let block_id = parsing_data.blocks[child_order].len() - 1; @@ -567,6 +588,7 @@ fn parse_block( line_col, &parsing_data.file, )?; + update_children_probabilities_to_frequency( parsing_data.blocks[child_order].len() - 1, &mut parsing_data.blocks, @@ -1722,7 +1744,14 @@ mod test { let expected_value = Block::Subsection { id: subsection_identifier_1, - settings: BlockSettings::default(), + settings: BlockSettings { + script: Script { + file: String::default(), + line: 2, + col: 1, + }, + ..Default::default() + }, }; assert_eq!(sub_section_1, expected_value); @@ -1730,7 +1759,14 @@ mod test { let expected_value = Block::Subsection { id: subsection_identifier_2, - settings: BlockSettings::default(), + settings: BlockSettings { + script: Script { + file: String::default(), + line: 3, + col: 1, + }, + ..Default::default() + }, }; assert_eq!(sub_section_2, expected_value); } diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index 5dc83ec..f2222c8 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -12,6 +12,7 @@ use cuentitos_common::Function; use cuentitos_common::LanguageId; use cuentitos_common::Modifier; use cuentitos_common::NextBlock; +use cuentitos_common::Script; use cuentitos_common::SectionKey; use cuentitos_common::VariableKind; use rand::Rng; @@ -25,12 +26,13 @@ pub struct Block { pub choices: Vec, pub tags: Vec, pub functions: Vec, + pub script: Script, } pub type DivertData = SectionKey; pub type ModifiedVariables = Vec; -#[derive(Debug, Default, Serialize, Deserialize, PartialEq)] +#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Clone)] pub struct Runtime { pub database: Database, pub block_stack: Vec, @@ -82,7 +84,7 @@ impl Runtime { pub fn divert(&mut self, divert: &DivertData) -> Result { let next = self.get_section_block_id(divert)?; - self.push_stack(next) + Self::push_stack(self, next) } fn get_section_block_id(&mut self, divert: &DivertData) -> Result { @@ -106,18 +108,26 @@ impl Runtime { } } - pub fn next_block(&mut self) -> Result<(Block, ModifiedVariables), RuntimeError> { + pub fn peek_next_block(&mut self) -> Result<(Block, ModifiedVariables), RuntimeError> { if self.database.blocks.is_empty() { return Err(RuntimeError::EmptyDatabase); } - let mut modified_variables = self.update_stack()?; + let mut peek_runtime = self.clone(); + let modified_variables = Self::update_stack(&mut peek_runtime)?; + let block = peek_runtime.current_block()?; + + Ok((block, modified_variables)) + } - while !self.next_block_meets_requirements()? { - modified_variables.append(&mut self.pop_stack_and_find_next()?); + pub fn next_block(&mut self) -> Result<(Block, ModifiedVariables), RuntimeError> { + if self.database.blocks.is_empty() { + return Err(RuntimeError::EmptyDatabase); } + let modified_variables = Self::update_stack(self)?; let block = self.current_block()?; + Ok((block, modified_variables)) } @@ -141,6 +151,7 @@ impl Runtime { choices: self.get_choices_strings(), tags, functions, + script: settings.script.clone(), }), cuentitos_common::Block::Choice { id: _, settings: _ } => { Err(RuntimeError::UnexpectedBlock { @@ -199,7 +210,7 @@ impl Runtime { return Err(RuntimeError::InvalidBlockId(choices[choice])); } - self.push_stack(choices[choice])?; + Self::push_stack(self, choices[choice])?; self.next_block() } @@ -320,14 +331,6 @@ impl Runtime { choices_strings } - fn next_block_meets_requirements(&mut self) -> Result { - if let Some(id) = self.block_stack.last() { - self.meets_requirements(*id) - } else { - Ok(false) - } - } - fn meets_requirements(&mut self, id: BlockId) -> Result { for requirement in &self.get_block(id).get_settings().requirements { if !self.meets_condition(&requirement.condition)? { @@ -532,55 +535,59 @@ impl Runtime { Ok(modified_variables) } - fn push_stack(&mut self, id: BlockId) -> Result { - self.block_stack.push(id); + fn push_stack(runtime: &mut Runtime, id: BlockId) -> Result { + runtime.block_stack.push(id); + + if !runtime.meets_requirements(id)? { + return Self::pop_stack_and_find_next(runtime); + } - if self.get_block(id).get_settings().unique { - if self.game_state.uniques_played.contains(&id) { - return self.pop_stack_and_find_next(); + if runtime.get_block(id).get_settings().unique { + if runtime.game_state.uniques_played.contains(&id) { + return Self::pop_stack_and_find_next(runtime); } else { - self.game_state.uniques_played.push(id); + runtime.game_state.uniques_played.push(id); } } - let mut modified_variables = self.apply_modifiers()?; + let mut modified_variables = runtime.apply_modifiers()?; - let block = self.get_block(id).clone(); + let block = runtime.get_block(id).clone(); match block { cuentitos_common::Block::Section { id, settings: _ } => { - self.game_state.current_section = Some(id); - self.game_state.current_subsection = None; - modified_variables.append(&mut self.update_stack()?); + runtime.game_state.current_section = Some(id); + runtime.game_state.current_subsection = None; + modified_variables.append(&mut Self::update_stack(runtime)?); Ok(modified_variables) } cuentitos_common::Block::Subsection { id, settings: _ } => { - self.game_state.current_subsection = Some(id); - modified_variables.append(&mut self.update_stack()?); + runtime.game_state.current_subsection = Some(id); + modified_variables.append(&mut Self::update_stack(runtime)?); Ok(modified_variables) } cuentitos_common::Block::Text { id: _, settings: _ } => { - self.update_choices()?; + runtime.update_choices()?; Ok(modified_variables) } cuentitos_common::Block::Choice { id: _, settings: _ } => { - self.update_choices()?; + runtime.update_choices()?; Ok(modified_variables) } cuentitos_common::Block::Bucket { name: _, settings: _, } => { - if let Some(next) = self.get_random_block_from_bucket(block.get_settings())? { - modified_variables.append(&mut self.push_stack(next)?); + if let Some(next) = runtime.get_random_block_from_bucket(block.get_settings())? { + modified_variables.append(&mut Self::push_stack(runtime, next)?); Ok(modified_variables) } else { - self.update_choices()?; + runtime.update_choices()?; Ok(modified_variables) } } cuentitos_common::Block::Divert { next, settings: _ } => { - let next = self.get_divert_next(next)?; - modified_variables.append(&mut self.push_stack(next)?); + let next = runtime.get_divert_next(next)?; + modified_variables.append(&mut Self::push_stack(runtime, next)?); Ok(modified_variables) } } @@ -596,33 +603,34 @@ impl Runtime { NextBlock::Section(section_key) => self.get_section_block_id(§ion_key), } } - fn update_stack(&mut self) -> Result { - if self.database.blocks.is_empty() { + + fn update_stack(runtime: &mut Runtime) -> Result { + if runtime.database.blocks.is_empty() { return Err(RuntimeError::EmptyDatabase); } - if self.block_stack.is_empty() { - return self.push_stack(0); + if runtime.block_stack.is_empty() { + return Self::push_stack(runtime, 0); } - let last_block_id = match self.block_stack.last() { + let last_block_id = match runtime.block_stack.last() { Some(id) => id, None => return Err(RuntimeError::EmptyStack), }; - if last_block_id >= &self.database.blocks.len() { + if last_block_id >= &runtime.database.blocks.len() { return Err(RuntimeError::InvalidBlockId(*last_block_id)); } - let settings = self.get_block(*last_block_id).get_settings().clone(); + let settings = runtime.get_block(*last_block_id).get_settings().clone(); if !settings.children.is_empty() { - if let Some(child) = self.get_next_child_in_stack(&settings, 0)? { - return self.push_stack(child); + if let Some(child) = runtime.get_next_child_in_stack(&settings, 0)? { + return Self::push_stack(runtime, child); } } - self.pop_stack_and_find_next() + Self::pop_stack_and_find_next(runtime) } fn get_next_child_in_stack( @@ -653,39 +661,40 @@ impl Runtime { } } - fn pop_stack_and_find_next(&mut self) -> Result { - let last_block_id: usize = match self.block_stack.last() { + fn pop_stack_and_find_next(runtime: &mut Runtime) -> Result { + let last_block_id: usize = match runtime.block_stack.last() { Some(id) => *id, None => return Err(RuntimeError::EmptyStack), }; - self.block_stack.pop(); - if self.block_stack.is_empty() { - return self.push_stack(last_block_id + 1); + runtime.block_stack.pop(); + if runtime.block_stack.is_empty() { + return Self::push_stack(runtime, last_block_id + 1); } - let new_block_id: &usize = match self.block_stack.last() { + let new_block_id: &usize = match runtime.block_stack.last() { Some(id) => id, None => return Err(RuntimeError::EmptyStack), }; - let parent = &self.database.blocks[*new_block_id].clone(); + let parent = &runtime.database.blocks[*new_block_id].clone(); let parent_settings = parent.get_settings(); let mut previous_block_found = false; for sibling in &parent_settings.children { if previous_block_found { - if let cuentitos_common::Block::Choice { id: _, settings: _ } = self.get_block(*sibling) { + if let cuentitos_common::Block::Choice { id: _, settings: _ } = runtime.get_block(*sibling) + { continue; } - return self.push_stack(*sibling); + return Self::push_stack(runtime, *sibling); } if *sibling == last_block_id { previous_block_found = true; } } - self.pop_stack_and_find_next() + Self::pop_stack_and_find_next(runtime) } fn get_random_block_from_bucket( @@ -985,7 +994,7 @@ mod test { block_stack: vec![0], ..Default::default() }; - runtime.update_stack().unwrap(); + Runtime::update_stack(&mut runtime).unwrap(); assert_eq!(*runtime.block_stack.last().unwrap(), 1); } @@ -1038,11 +1047,11 @@ mod test { ..Default::default() }; - runtime.update_stack().unwrap(); + Runtime::update_stack(&mut runtime).unwrap(); assert_eq!(*runtime.block_stack.last().unwrap(), 3); - runtime.update_stack().unwrap(); + Runtime::update_stack(&mut runtime).unwrap(); assert_eq!(*runtime.block_stack.last().unwrap(), 4); - runtime.update_stack().unwrap(); + Runtime::update_stack(&mut runtime).unwrap(); assert_eq!(*runtime.block_stack.last().unwrap(), 1); } @@ -1221,7 +1230,7 @@ mod test { .unwrap() .unwrap(); assert_eq!(id, 1); - runtime.push_stack(1).unwrap(); + Runtime::push_stack(&mut runtime, 1).unwrap(); let bucket_settings = runtime.get_block(0).get_settings().clone(); let id = runtime .get_random_block_from_bucket(&bucket_settings) @@ -2506,11 +2515,11 @@ mod test { }; let mut runtime = Runtime::new(database); - runtime.update_stack().unwrap(); + Runtime::update_stack(&mut runtime).unwrap(); assert_eq!(1, *runtime.block_stack.last().unwrap()); - runtime.update_stack().unwrap(); + Runtime::update_stack(&mut runtime).unwrap(); assert_eq!(2, *runtime.block_stack.last().unwrap()); - runtime.update_stack().unwrap(); + Runtime::update_stack(&mut runtime).unwrap(); assert_eq!(2, *runtime.block_stack.last().unwrap()); } @@ -2571,7 +2580,7 @@ mod test { }; let mut runtime = Runtime::new(database); runtime.block_stack.push(1); - let err = runtime.update_stack().unwrap_err(); + let err = Runtime::update_stack(&mut runtime).unwrap_err(); assert_eq!(err, RuntimeError::InvalidBlockId(1)); } @@ -2617,8 +2626,8 @@ mod test { ..Default::default() }; let mut runtime = Runtime::new(database); - runtime.update_stack().unwrap(); - let err = runtime.update_stack().unwrap_err(); + Runtime::update_stack(&mut runtime).unwrap(); + let err = Runtime::update_stack(&mut runtime).unwrap_err(); assert_eq!( err, RuntimeError::WaitingForChoice(vec!["MISSING LOCALE ``".to_string()]) @@ -2645,8 +2654,8 @@ mod test { ..Default::default() }; let mut runtime = Runtime::new(database); - runtime.update_stack().unwrap(); - let err = runtime.update_stack().unwrap_err(); + Runtime::update_stack(&mut runtime).unwrap(); + let err = Runtime::update_stack(&mut runtime).unwrap_err(); assert_eq!( err, RuntimeError::SectionAtLowerLevel("section".to_string()) @@ -2664,7 +2673,7 @@ mod test { ..Default::default() }; let mut runtime = Runtime::new(database); - let err = runtime.update_stack().unwrap_err(); + let err = Runtime::update_stack(&mut runtime).unwrap_err(); assert_eq!(err, RuntimeError::StoryFinished); } @@ -2751,7 +2760,7 @@ mod test { let mut runtime = Runtime::new(database); let err = runtime.next_block().unwrap_err(); assert_eq!(err, RuntimeError::EmptyDatabase); - let err = runtime.update_stack().unwrap_err(); + let err = Runtime::update_stack(&mut runtime).unwrap_err(); assert_eq!(err, RuntimeError::EmptyDatabase); let err = runtime.pick_choice(0).unwrap_err(); assert_eq!(err, RuntimeError::EmptyDatabase); From 3d685ed258cb4a07a9e3eda39ea3efeb5d263668 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Thu, 6 Jul 2023 14:23:32 -0300 Subject: [PATCH 44/94] subsections are now sections children --- palabritas/src/parser.rs | 138 +++++++++++++++++++++++++-------------- 1 file changed, 89 insertions(+), 49 deletions(-) diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index 47f0e9d..2221a30 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -5,8 +5,8 @@ use std::path::Path; use cuentitos_common::condition::ComparisonOperator; use cuentitos_common::modifier::ModifierOperator; use cuentitos_common::{ - Block, BlockId, BlockSettings, Chance, Condition, Config, Database, FrequencyModifier, Function, - I18n, Modifier, NextBlock, Requirement, Script, SectionKey, + Block, BlockSettings, Chance, Condition, Config, Database, FrequencyModifier, Function, I18n, + Modifier, NextBlock, Requirement, Script, SectionKey, }; use pest::{iterators::Pair, Parser}; @@ -130,19 +130,13 @@ fn parse_database( ) -> Result { match_rule(&token, Rule::Database, &parsing_data.file)?; - //let mut blocks: Vec> = Vec::default(); - // let mut i18n = I18n::from_config(config); - - let mut section_map = HashMap::default(); - //let section_list = find_all_section_list(&token)?; - for inner_token in token.into_inner() { match inner_token.as_rule() { Rule::Block => { parse_block(inner_token, &mut parsing_data, 0)?; } Rule::Section => { - parse_section(inner_token, &mut parsing_data, &mut section_map)?; + parse_section(inner_token, &mut parsing_data, 0)?; } _ => {} } @@ -176,6 +170,28 @@ fn parse_database( } } + let mut section_map = HashMap::default(); + + for i in 0..ordered_blocks.len() { + if let Block::Section { id: section_id, settings } = &ordered_blocks[i] { + let section_key = SectionKey { + section: section_id.clone(), + subsection: None, + }; + + section_map.insert(section_key, i); + for child in &settings.children { + if let Block::Subsection { id: subsection_id, settings: _ } = &ordered_blocks[*child] { + let section_key = SectionKey { + section: section_id.clone(), + subsection: Some(subsection_id.clone()), + }; + section_map.insert(section_key, *child); + } + } + } + } + Ok(Database { blocks: ordered_blocks, sections: section_map, @@ -227,7 +243,7 @@ pub fn parse_section_str( let token = parse_str(input, Rule::Section)?; let mut parsing_data = ParsingData::new(config.clone(), section_list.to_owned(), String::default()); - parse_section(token, &mut parsing_data, &mut HashMap::default()) + parse_section(token, &mut parsing_data, 0) } pub fn parse_tag_str(input: &str) -> Result { @@ -365,15 +381,15 @@ fn parse_subsection_key( fn parse_section( token: Pair, parsing_data: &mut ParsingData, - section_map: &mut HashMap, + child_order: usize, ) -> Result { match_rule(&token, Rule::Section, &parsing_data.file)?; if parsing_data.blocks.is_empty() { parsing_data.blocks.push(Vec::default()); } - parsing_data.blocks[0].push(Block::default()); - let block_id = parsing_data.blocks[0].len() - 1; + parsing_data.blocks[child_order].push(Block::default()); + let block_id = parsing_data.blocks[child_order].len() - 1; let error_info = ErrorInfo { line: token.line_col().0, col: token.line_col().1, @@ -407,27 +423,24 @@ fn parse_section( } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { - parse_block(inner_blocks_token, parsing_data, 1)?; - settings.children.push(parsing_data.blocks[1].len() - 1); + parse_block(inner_blocks_token, parsing_data, child_order + 1)?; + settings + .children + .push(parsing_data.blocks[child_order + 1].len() - 1); } } Rule::Subsection => { - parse_subsection(inner_token, parsing_data, section_map)?; + parse_subsection(inner_token, parsing_data, child_order + 1)?; + settings + .children + .push(parsing_data.blocks[child_order + 1].len() - 1); } _ => {} } } - section_map.insert( - SectionKey { - section: id.clone(), - subsection: None, - }, - block_id, - ); - let section = Block::Section { id, settings }; - check_invalid_frequency(§ion, error_info, &parsing_data.blocks, 0)?; + check_invalid_frequency(§ion, error_info, &parsing_data.blocks, child_order)?; parsing_data.blocks[0][block_id] = section.clone(); Ok(section) @@ -436,15 +449,15 @@ fn parse_section( fn parse_subsection( token: Pair, parsing_data: &mut ParsingData, - section_map: &mut HashMap, + child_order: usize, ) -> Result<(), PalabritasError> { match_rule(&token, Rule::Subsection, &parsing_data.file)?; - if parsing_data.blocks.is_empty() { + while parsing_data.blocks.len() < 2 { parsing_data.blocks.push(Vec::default()); } - parsing_data.blocks[0].push(Block::default()); - let block_id = parsing_data.blocks[0].len() - 1; + parsing_data.blocks[child_order].push(Block::default()); + let block_id = parsing_data.blocks[child_order].len() - 1; let error_info = ErrorInfo { line: token.line_col().0, col: token.line_col().1, @@ -478,28 +491,25 @@ fn parse_subsection( } Rule::NewBlock => { for inner_blocks_token in get_blocks_from_new_block(inner_token) { - parse_block(inner_blocks_token, parsing_data, 1)?; - settings.children.push(parsing_data.blocks[1].len() - 1); + parse_block(inner_blocks_token, parsing_data, child_order + 1)?; + settings + .children + .push(parsing_data.blocks[child_order + 1].len() - 1); } } Rule::Subsection => { - parse_subsection(inner_token, parsing_data, section_map)?; + parse_subsection(inner_token, parsing_data, child_order + 1)?; + settings + .children + .push(parsing_data.blocks[child_order + 1].len() - 1); } _ => {} } } - section_map.insert( - SectionKey { - section: parsing_data.current_section.clone().unwrap(), - subsection: Some(id.clone()), - }, - block_id, - ); - let subsection = Block::Subsection { id, settings }; - check_invalid_frequency(&subsection, error_info, &parsing_data.blocks, 0)?; - parsing_data.blocks[0][block_id] = subsection; + check_invalid_frequency(&subsection, error_info, &parsing_data.blocks, child_order)?; + parsing_data.blocks[child_order][block_id] = subsection; Ok(()) } @@ -1730,20 +1740,23 @@ mod test { let token = parse_str(§ion_string, Rule::Section).unwrap(); let mut parsing_data = ParsingData::default(); - parse_section(token, &mut parsing_data, &mut HashMap::default()).unwrap(); + parse_section(token, &mut parsing_data, 0).unwrap(); let section = parsing_data.blocks[0][0].clone(); let expected_value = Block::Section { - id: section_identifier, - settings: BlockSettings::default(), + id: section_identifier.clone(), + settings: BlockSettings{ + children: vec![0,1], + ..Default::default() + }, }; assert_eq!(section, expected_value); - let sub_section_1 = parsing_data.blocks[0][1].clone(); + let sub_section_1 = parsing_data.blocks[1][0].clone(); let expected_value = Block::Subsection { - id: subsection_identifier_1, + id: subsection_identifier_1.clone(), settings: BlockSettings { script: Script { file: String::default(), @@ -1755,10 +1768,10 @@ mod test { }; assert_eq!(sub_section_1, expected_value); - let sub_section_2 = parsing_data.blocks[0][2].clone(); + let sub_section_2 = parsing_data.blocks[1][1].clone(); let expected_value = Block::Subsection { - id: subsection_identifier_2, + id: subsection_identifier_2.clone(), settings: BlockSettings { script: Script { file: String::default(), @@ -1769,6 +1782,33 @@ mod test { }, }; assert_eq!(sub_section_2, expected_value); + let token = parse_str(§ion_string, Rule::Database).unwrap(); + let parsing_data = ParsingData::default(); + let database = parse_database(token, parsing_data).unwrap(); + + let section_key = SectionKey { + section: section_identifier.clone(), + subsection: None, + }; + + let id = *database.sections.get(§ion_key).unwrap(); + assert_eq!(id, 0); + + let section_key = SectionKey { + section: section_identifier.clone(), + subsection: Some(subsection_identifier_1), + }; + + let id = *database.sections.get(§ion_key).unwrap(); + assert_eq!(id, 2); + + let section_key = SectionKey { + section: section_identifier, + subsection: Some(subsection_identifier_2), + }; + + let id = *database.sections.get(§ion_key).unwrap(); + assert_eq!(id, 3); } #[test] fn parse_text_correctly() { From 8a064cdeaa36ceab35bdeec1b98db18801c32b9c Mon Sep 17 00:00:00 2001 From: loomstyla Date: Thu, 6 Jul 2023 14:49:01 -0300 Subject: [PATCH 45/94] runtime fix --- runtime/src/runtime.rs | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index f2222c8..e9ec25c 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -535,6 +535,38 @@ impl Runtime { Ok(modified_variables) } + fn update_section(&mut self) + { + self.game_state.current_section = None; + self.game_state.current_subsection = None; + + for block in self.block_stack.iter().rev() + { + match self.get_block(*block) + { + cuentitos_common::Block::Section { id, settings:_ } => { + self.game_state.current_section = Some(id.clone()); + }, + cuentitos_common::Block::Subsection { id, settings:_ } => { + self.game_state.current_subsection = Some(id.clone()); + }, + cuentitos_common::Block::Divert { next, settings:_ } => { + if let NextBlock::Section(section_key) = next{ + if section_key.subsection.is_some() + { + self.game_state.current_section = Some(section_key.section.clone()); + } + } + }, + _=>{} + } + + if self.game_state.current_section.is_some() + { + return; + } + } + } fn push_stack(runtime: &mut Runtime, id: BlockId) -> Result { runtime.block_stack.push(id); @@ -551,17 +583,15 @@ impl Runtime { } let mut modified_variables = runtime.apply_modifiers()?; + runtime.update_section(); let block = runtime.get_block(id).clone(); match block { - cuentitos_common::Block::Section { id, settings: _ } => { - runtime.game_state.current_section = Some(id); - runtime.game_state.current_subsection = None; + cuentitos_common::Block::Section { id:_, settings: _ } => { modified_variables.append(&mut Self::update_stack(runtime)?); Ok(modified_variables) } - cuentitos_common::Block::Subsection { id, settings: _ } => { - runtime.game_state.current_subsection = Some(id); + cuentitos_common::Block::Subsection { id:_, settings: _ } => { modified_variables.append(&mut Self::update_stack(runtime)?); Ok(modified_variables) } From 698c69dfc30c665dc3822d4ebb655406ae5e918e Mon Sep 17 00:00:00 2001 From: loomstyla Date: Thu, 6 Jul 2023 14:56:17 -0300 Subject: [PATCH 46/94] make a choice error now prints text --- cli/src/console.rs | 6 +++--- runtime/src/runtime.rs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cli/src/console.rs b/cli/src/console.rs index 93f396d..e802a3f 100644 --- a/cli/src/console.rs +++ b/cli/src/console.rs @@ -205,9 +205,9 @@ fn print_block(block: Block) { fn print_runtime_error(error: RuntimeError, runtime: &Runtime) { match error { - RuntimeError::WaitingForChoice(choices) => { + RuntimeError::WaitingForChoice(_) => { println!("Make a choice:\n"); - print_choices(choices); + print_block(runtime.current_block().unwrap()); } RuntimeError::InvalidChoice { total_choices, @@ -219,7 +219,7 @@ fn print_runtime_error(error: RuntimeError, runtime: &Runtime) { total_choices ); println!("Make a choice:\n"); - print_choices(runtime.get_choices_strings()); + print_block(runtime.current_block().unwrap()); } _ => { println!("{}", error) diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index e9ec25c..7b6e42a 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -135,7 +135,7 @@ impl Runtime { &self.database.blocks[id] } - pub fn current_block(&mut self) -> Result { + pub fn current_block(&self) -> Result { let id = match self.block_stack.last() { Some(id) => id, None => return Err(RuntimeError::EmptyStack), From 398e70d28aaab0afa8deb3ab13083628e70972f2 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Thu, 6 Jul 2023 15:13:52 -0300 Subject: [PATCH 47/94] update section fix --- runtime/src/runtime.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index 7b6e42a..d50a689 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -548,7 +548,10 @@ impl Runtime { self.game_state.current_section = Some(id.clone()); }, cuentitos_common::Block::Subsection { id, settings:_ } => { - self.game_state.current_subsection = Some(id.clone()); + if self.game_state.current_subsection.is_none() + { + self.game_state.current_subsection = Some(id.clone()); + } }, cuentitos_common::Block::Divert { next, settings:_ } => { if let NextBlock::Section(section_key) = next{ From 92d89bed92293582f4eaa7d258d0946853e6818d Mon Sep 17 00:00:00 2001 From: loomstyla Date: Thu, 6 Jul 2023 17:59:36 -0300 Subject: [PATCH 48/94] divert changes + some refactoring --- cli/src/console.rs | 36 +++--- common/src/block.rs | 15 +-- common/src/database.rs | 4 +- palabritas/src/error.rs | 4 +- palabritas/src/parser.rs | 171 +++++++++++++++---------- runtime/src/error.rs | 6 +- runtime/src/game_state.rs | 5 +- runtime/src/lib.rs | 2 +- runtime/src/runtime.rs | 256 +++++++++++++++++++------------------- 9 files changed, 264 insertions(+), 235 deletions(-) diff --git a/cli/src/console.rs b/cli/src/console.rs index e802a3f..749cfb8 100644 --- a/cli/src/console.rs +++ b/cli/src/console.rs @@ -10,18 +10,17 @@ use std::path::PathBuf; #[derive(Debug)] pub struct Console {} impl Console { - fn prompt(section: Option, subsection: Option) -> String { + fn prompt(section: &Option

) -> String { let mut line = String::new(); let mut prompt_str = String::from("\n"); if let Some(section) = section { - prompt_str.push_str(§ion); - } - - if let Some(subsection) = subsection { - prompt_str.push('/'); - prompt_str.push_str(&subsection); + prompt_str.push_str(§ion.section_name); + if let Some(subsection) = §ion.subsection_name { + prompt_str.push('/'); + prompt_str.push_str(subsection); + } } prompt_str.push_str(" > "); @@ -45,9 +44,7 @@ impl Console { let mut runtime = Runtime::new(file); loop { - let section = runtime.game_state.current_section.clone(); - let subsection = runtime.game_state.current_subsection.clone(); - let input = Self::prompt(section, subsection); + let input = Self::prompt(&runtime.game_state.section); match input.as_str() { "" => match runtime.next_block() { @@ -104,18 +101,21 @@ impl Console { if let Some(section_str) = splitted.next() { let subsection = splitted.next(); let section = match subsection { - Some(subsection) => DivertData { - section: section_str.to_string(), - subsection: Some(subsection.to_string()), + Some(subsection) => Section { + section_name: section_str.to_string(), + subsection_name: Some(subsection.to_string()), }, - None => DivertData { - section: section_str.to_string(), - subsection: None, + None => Section { + section_name: section_str.to_string(), + subsection_name: None, }, }; match runtime.divert(§ion) { - Ok(_) => match runtime.current_block() { - Ok(block) => print_block(block), + Ok(_) => match runtime.next_block() { + Ok((block, choices)) => { + print_block(block); + print_choices(choices); + } Err(error) => print_runtime_error(error, &runtime), }, Err(error) => print_runtime_error(error, &runtime), diff --git a/common/src/block.rs b/common/src/block.rs index 999f25c..b7c2a52 100644 --- a/common/src/block.rs +++ b/common/src/block.rs @@ -8,17 +8,17 @@ pub type BucketName = String; pub type SectionName = String; #[derive(Debug, Default, Serialize, Deserialize, Eq, PartialEq, Clone, Hash)] -pub struct SectionKey { - pub section: String, - pub subsection: Option, +pub struct Section { + pub section_name: SectionName, + pub subsection_name: Option, } -impl fmt::Display for SectionKey { +impl fmt::Display for Section { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { let mut key = String::new(); - key.push_str(&self.section); + key.push_str(&self.section_name); - if let Some(subsection) = &self.subsection { + if let Some(subsection) = &self.subsection_name { key.push('/'); key.push_str(subsection); } @@ -31,7 +31,7 @@ pub enum NextBlock { #[default] EndOfFile, BlockId(BlockId), - Section(SectionKey), + Section(Section), } #[derive(Debug, Serialize, Deserialize, PartialEq, Clone)] @@ -68,6 +68,7 @@ pub struct BlockSettings { pub tags: Vec, pub functions: Vec, pub script: Script, + pub section: Option
, } #[derive(Debug, Serialize, Deserialize, Default, PartialEq, Clone)] diff --git a/common/src/database.rs b/common/src/database.rs index 02a4ba2..03708a4 100644 --- a/common/src/database.rs +++ b/common/src/database.rs @@ -1,4 +1,4 @@ -use crate::{Block, BlockId, Config, I18n, Result, SectionKey}; +use crate::{Block, BlockId, Config, I18n, Result, Section}; use rmp_serde::Deserializer; use serde::{Deserialize, Serialize}; use std::collections::HashMap; @@ -6,7 +6,7 @@ use std::collections::HashMap; #[derive(Debug, Default, Serialize, PartialEq, Deserialize, Clone)] pub struct Database { pub blocks: Vec, - pub sections: HashMap, + pub sections: HashMap, pub config: Config, pub i18n: I18n, } diff --git a/palabritas/src/error.rs b/palabritas/src/error.rs index 4706b36..444fd08 100644 --- a/palabritas/src/error.rs +++ b/palabritas/src/error.rs @@ -1,6 +1,6 @@ use std::{error::Error, fmt::Display, path::PathBuf}; -use cuentitos_common::{SectionKey, VariableKind}; +use cuentitos_common::{Section, VariableKind}; use crate::parser::Rule; #[derive(Debug, PartialEq, Eq)] @@ -27,7 +27,7 @@ pub enum PalabritasError { DivisionByZero(ErrorInfo), SectionDoesntExist { info: ErrorInfo, - section: SectionKey, + section: Section, }, VariableDoesntExist { info: ErrorInfo, diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index 2221a30..b8b6ed5 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -6,7 +6,7 @@ use cuentitos_common::condition::ComparisonOperator; use cuentitos_common::modifier::ModifierOperator; use cuentitos_common::{ Block, BlockSettings, Chance, Condition, Config, Database, FrequencyModifier, Function, I18n, - Modifier, NextBlock, Requirement, Script, SectionKey, + Modifier, NextBlock, Requirement, Script, Section, }; use pest::{iterators::Pair, Parser}; @@ -23,13 +23,13 @@ struct ParsingData { pub blocks: Vec>, pub i18n: I18n, pub config: Config, - pub section_list: Vec, + pub section_list: Vec
, pub file: String, - pub current_section: Option, + pub current_section: Option
, } impl ParsingData { - fn new(config: Config, section_list: Vec, file: String) -> Self { + fn new(config: Config, section_list: Vec
, file: String) -> Self { ParsingData { blocks: Vec::default(), i18n: I18n::from_config(&config), @@ -112,7 +112,7 @@ where pub fn find_all_section_list( token: &Pair, file: &str, -) -> Result, PalabritasError> { +) -> Result, PalabritasError> { match_rule(token, Rule::Database, file)?; let mut section_list = Vec::default(); // pub section_list: HashMap for inner_token in token.clone().into_inner() { @@ -173,18 +173,26 @@ fn parse_database( let mut section_map = HashMap::default(); for i in 0..ordered_blocks.len() { - if let Block::Section { id: section_id, settings } = &ordered_blocks[i] { - let section_key = SectionKey { - section: section_id.clone(), - subsection: None, + if let Block::Section { + id: section_id, + settings, + } = &ordered_blocks[i] + { + let section_key = Section { + section_name: section_id.clone(), + subsection_name: None, }; section_map.insert(section_key, i); for child in &settings.children { - if let Block::Subsection { id: subsection_id, settings: _ } = &ordered_blocks[*child] { - let section_key = SectionKey { - section: section_id.clone(), - subsection: Some(subsection_id.clone()), + if let Block::Subsection { + id: subsection_id, + settings: _, + } = &ordered_blocks[*child] + { + let section_key = Section { + section_name: section_id.clone(), + subsection_name: Some(subsection_id.clone()), }; section_map.insert(section_key, *child); } @@ -238,7 +246,7 @@ pub fn parse_choice_str(input: &str) -> Result { pub fn parse_section_str( input: &str, config: &Config, - section_list: &[SectionKey], + section_list: &[Section], ) -> Result { let token = parse_str(input, Rule::Section)?; let mut parsing_data = @@ -256,10 +264,7 @@ pub fn parse_function_str(input: &str) -> Result { parse_function(token, &String::default()) } -pub fn parse_divert_str( - input: &str, - section_list: &[SectionKey], -) -> Result { +pub fn parse_divert_str(input: &str, section_list: &[Section]) -> Result { let token = parse_str(input, Rule::Divert)?; parse_divert(token, section_list, &None, &String::default()) } @@ -327,7 +332,7 @@ fn parse_str(input: &str, rule: Rule) -> Result, PalabritasError> fn parse_section_key( token: Pair, - section_list: &mut Vec, + section_list: &mut Vec
, file: &str, ) -> Result<(), PalabritasError> { match_rule(&token, Rule::Section, file)?; @@ -343,9 +348,9 @@ fn parse_section_key( _ => {} } } - section_list.push(SectionKey { - section: id.clone(), - subsection: None, + section_list.push(Section { + section_name: id.clone(), + subsection_name: None, }); Ok(()) @@ -354,7 +359,7 @@ fn parse_section_key( fn parse_subsection_key( token: Pair, section: &str, - section_list: &mut Vec, + section_list: &mut Vec
, file: &str, ) -> Result<(), PalabritasError> { match_rule(&token, Rule::Subsection, file)?; @@ -370,9 +375,9 @@ fn parse_subsection_key( _ => {} } } - section_list.push(SectionKey { - section: section.to_string(), - subsection: Some(id), + section_list.push(Section { + section_name: section.to_string(), + subsection_name: Some(id), }); Ok(()) @@ -411,7 +416,11 @@ fn parse_section( match inner_token.as_rule() { Rule::Identifier => { id = inner_token.as_str().to_string(); - parsing_data.current_section = Some(id.clone()); + parsing_data.current_section = Some(Section { + section_name: id.clone(), + subsection_name: None, + }); + settings.section = parsing_data.current_section.clone(); } Rule::Command => { add_command_to_settings( @@ -432,8 +441,8 @@ fn parse_section( Rule::Subsection => { parse_subsection(inner_token, parsing_data, child_order + 1)?; settings - .children - .push(parsing_data.blocks[child_order + 1].len() - 1); + .children + .push(parsing_data.blocks[child_order + 1].len() - 1); } _ => {} } @@ -480,6 +489,10 @@ fn parse_subsection( match inner_token.as_rule() { Rule::Identifier => { id = inner_token.as_str().to_string(); + if let Some(ref mut section) = parsing_data.current_section { + section.subsection_name = Some(id.clone()); + } + settings.section = parsing_data.current_section.clone(); } Rule::Command => { add_command_to_settings( @@ -500,8 +513,8 @@ fn parse_subsection( Rule::Subsection => { parse_subsection(inner_token, parsing_data, child_order + 1)?; settings - .children - .push(parsing_data.blocks[child_order + 1].len() - 1); + .children + .push(parsing_data.blocks[child_order + 1].len() - 1); } _ => {} } @@ -570,6 +583,8 @@ fn parse_block( } } + block.get_settings_mut().section = parsing_data.current_section.clone(); + while child_order >= parsing_data.blocks.len() { parsing_data.blocks.push(Vec::default()); } @@ -1068,8 +1083,8 @@ fn parse_tag(token: Pair, file: &str) -> Result { } fn parse_divert( token: Pair, - section_list: &[SectionKey], - current_section: &Option, + section_list: &[Section], + current_section: &Option
, file: &str, ) -> Result { match_rule(&token, Rule::Divert, file)?; @@ -1098,9 +1113,9 @@ fn parse_divert( let next = match section.is_some() && subsection.is_none() && section.clone().unwrap() == "END" { true => NextBlock::EndOfFile, false => { - let section_key = SectionKey { - section: section.unwrap(), - subsection, + let section_key = Section { + section_name: section.unwrap(), + subsection_name: subsection, }; check_section_existance(§ion_key, section_list, &error_info, current_section)?; NextBlock::Section(section_key) @@ -1181,17 +1196,17 @@ fn check_variable_existance( } fn check_section_existance( - section_key: &SectionKey, - section_list: &[SectionKey], + section_key: &Section, + section_list: &[Section], error_info: &ErrorInfo, - current_section: &Option, + current_section: &Option
, ) -> Result<(), PalabritasError> { if section_list.contains(section_key) { Ok(()) - } else if section_key.subsection.is_none() && current_section.is_some() { - let new_section_key = SectionKey { - section: current_section.clone().unwrap(), - subsection: Some(section_key.clone().section), + } else if section_key.subsection_name.is_none() && current_section.is_some() { + let new_section_key = Section { + section_name: current_section.clone().unwrap().section_name, + subsection_name: Some(section_key.clone().section_name), }; check_section_existance(&new_section_key, section_list, error_info, current_section) } else { @@ -1719,8 +1734,14 @@ mod test { let section = parse_section_str(§ion_string, &Config::default(), &Vec::default()).unwrap(); let expected_value = Block::Section { - id: identifier, - settings: BlockSettings::default(), + id: identifier.clone(), + settings: BlockSettings { + section: Some(Section { + section_name: identifier, + subsection_name: None, + }), + ..Default::default() + }, }; assert_eq!(section, expected_value); } @@ -1746,8 +1767,12 @@ mod test { let expected_value = Block::Section { id: section_identifier.clone(), - settings: BlockSettings{ - children: vec![0,1], + settings: BlockSettings { + section: Some(Section { + section_name: section_identifier.clone(), + subsection_name: None, + }), + children: vec![0, 1], ..Default::default() }, }; @@ -1758,6 +1783,10 @@ mod test { let expected_value = Block::Subsection { id: subsection_identifier_1.clone(), settings: BlockSettings { + section: Some(Section { + section_name: section_identifier.clone(), + subsection_name: Some(subsection_identifier_1.clone()), + }), script: Script { file: String::default(), line: 2, @@ -1773,6 +1802,10 @@ mod test { let expected_value = Block::Subsection { id: subsection_identifier_2.clone(), settings: BlockSettings { + section: Some(Section { + section_name: section_identifier.clone(), + subsection_name: Some(subsection_identifier_2.clone()), + }), script: Script { file: String::default(), line: 3, @@ -1786,25 +1819,25 @@ mod test { let parsing_data = ParsingData::default(); let database = parse_database(token, parsing_data).unwrap(); - let section_key = SectionKey { - section: section_identifier.clone(), - subsection: None, + let section_key = Section { + section_name: section_identifier.clone(), + subsection_name: None, }; let id = *database.sections.get(§ion_key).unwrap(); assert_eq!(id, 0); - let section_key = SectionKey { - section: section_identifier.clone(), - subsection: Some(subsection_identifier_1), + let section_key = Section { + section_name: section_identifier.clone(), + subsection_name: Some(subsection_identifier_1), }; - + let id = *database.sections.get(§ion_key).unwrap(); assert_eq!(id, 2); - let section_key = SectionKey { - section: section_identifier, - subsection: Some(subsection_identifier_2), + let section_key = Section { + section_name: section_identifier, + subsection_name: Some(subsection_identifier_2), }; let id = *database.sections.get(§ion_key).unwrap(); @@ -2052,9 +2085,9 @@ mod test { string: "->Section".to_string(), file: String::default() }, - section: SectionKey { - section: "Section".to_string(), - subsection: None + section: Section { + section_name: "Section".to_string(), + subsection_name: None } } ); @@ -2401,9 +2434,9 @@ mod test { //Section let section = make_random_identifier(); let divert_string = format!("-> {}", section); - let section_key = SectionKey { - section: section.clone(), - subsection: None, + let section_key = Section { + section_name: section.clone(), + subsection_name: None, }; let expected_value = Block::Divert { next: NextBlock::Section(section_key.clone()), @@ -2417,9 +2450,9 @@ mod test { //Subsection let subsection = make_random_identifier(); let divert_string = format!("-> {}/{}", section, subsection); - let section_key = SectionKey { - section: section.clone(), - subsection: Some(subsection.clone()), + let section_key = Section { + section_name: section.clone(), + subsection_name: Some(subsection.clone()), }; let expected_value = Block::Divert { @@ -2865,8 +2898,12 @@ mod test { .unwrap(); let expected_value = Block::Section { - id: identifier, + id: identifier.clone(), settings: BlockSettings { + section: Some(Section { + section_name: identifier, + subsection_name: None, + }), requirements: vec![Requirement { condition: Condition { variable: "test".to_string(), diff --git a/runtime/src/error.rs b/runtime/src/error.rs index 131d073..cc1e24a 100644 --- a/runtime/src/error.rs +++ b/runtime/src/error.rs @@ -5,9 +5,7 @@ use std::{ str::ParseBoolError, }; -use cuentitos_common::{BlockId, SectionName}; - -use crate::DivertData; +use cuentitos_common::{BlockId, Section, SectionName}; type VariableName = String; #[derive(Debug, PartialEq, Eq)] @@ -16,7 +14,7 @@ pub enum RuntimeError { WaitingForChoice(Vec), SectionAtLowerLevel(SectionName), StoryFinished, - SectionDoesntExist(DivertData), + SectionDoesntExist(Section), UnexpectedBlock { expected_block: String, block_found: String, diff --git a/runtime/src/game_state.rs b/runtime/src/game_state.rs index 7b70a8b..95c3a80 100644 --- a/runtime/src/game_state.rs +++ b/runtime/src/game_state.rs @@ -1,12 +1,11 @@ -use cuentitos_common::{BlockId, Config, VariableId}; +use cuentitos_common::{BlockId, Config, Section, VariableId}; use serde::{Deserialize, Serialize}; use std::collections::HashMap; #[derive(Debug, Default, Serialize, Deserialize, PartialEq, Clone, Eq)] pub struct GameState { pub variables: HashMap, - pub current_section: Option, - pub current_subsection: Option, + pub section: Option
, pub uniques_played: Vec, } diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 2ad5cf0..f0c7034 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -1,11 +1,11 @@ mod runtime; pub use cuentitos_common::Database; pub use runtime::Block; -pub use runtime::DivertData; pub use runtime::ModifiedVariables; pub use runtime::Runtime; mod game_state; +pub use cuentitos_common::Section; pub use cuentitos_common::VariableKind; pub use game_state::GameState; diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index d50a689..21fd7cb 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -13,7 +13,7 @@ use cuentitos_common::LanguageId; use cuentitos_common::Modifier; use cuentitos_common::NextBlock; use cuentitos_common::Script; -use cuentitos_common::SectionKey; +use cuentitos_common::Section; use cuentitos_common::VariableKind; use rand::Rng; use rand::SeedableRng; @@ -29,7 +29,6 @@ pub struct Block { pub script: Script, } -pub type DivertData = SectionKey; pub type ModifiedVariables = Vec; #[derive(Debug, Default, Serialize, Deserialize, PartialEq, Clone)] @@ -82,30 +81,53 @@ impl Runtime { self.rng = Some(Pcg32::seed_from_u64(seed)); } - pub fn divert(&mut self, divert: &DivertData) -> Result { - let next = self.get_section_block_id(divert)?; - Self::push_stack(self, next) + pub fn divert(&mut self, section: &Section) -> Result { + let new_stack = self.get_section_blocks_stack(section)?; + self.block_stack.clear(); + let mut modified_variables = ModifiedVariables::default(); + + for block in new_stack { + modified_variables.append(&mut Self::push_stack(self, block)?); + } + + Ok(modified_variables) } - fn get_section_block_id(&mut self, divert: &DivertData) -> Result { - let current_section = self.game_state.current_section.clone(); - if divert.subsection.is_none() { - if let Some(current_section) = current_section { - let key = SectionKey { - section: current_section, - subsection: Some(divert.section.clone()), + fn get_section_blocks_stack(&mut self, section: &Section) -> Result, RuntimeError> { + let mut section = section.clone(); + let section_id = match self.database.sections.get(§ion) { + Some(id) => Some(id), + None => { + if let Some(current_section) = &self.game_state.section { + section = Section { + section_name: current_section.section_name.clone(), + subsection_name: Some(section.section_name.clone()), + }; + self.database.sections.get(§ion) + } else { + return Err(RuntimeError::SectionDoesntExist(section.clone())); + } + } + }; + + let mut stack: Vec = Vec::default(); + + if let Some(block_id) = section_id { + if section.subsection_name.is_some() { + let parent = Section { + section_name: section.section_name.clone(), + subsection_name: None, }; - if let Some(block_id) = self.database.sections.get(&key) { - return Ok(*block_id); + if let Some(parent_id) = self.database.sections.get(&parent) { + stack.push(*parent_id); + } else { + return Err(RuntimeError::SectionDoesntExist(parent.clone())); } } + stack.push(*block_id); } - if let Some(block_id) = self.database.sections.get(divert) { - Ok(*block_id) - } else { - Err(RuntimeError::SectionDoesntExist(divert.clone())) - } + Ok(stack) } pub fn peek_next_block(&mut self) -> Result<(Block, ModifiedVariables), RuntimeError> { @@ -210,7 +232,7 @@ impl Runtime { return Err(RuntimeError::InvalidBlockId(choices[choice])); } - Self::push_stack(self, choices[choice])?; + Self::push_stack_until_text(self, choices[choice])?; self.next_block() } @@ -535,66 +557,19 @@ impl Runtime { Ok(modified_variables) } - fn update_section(&mut self) - { - self.game_state.current_section = None; - self.game_state.current_subsection = None; - - for block in self.block_stack.iter().rev() - { - match self.get_block(*block) - { - cuentitos_common::Block::Section { id, settings:_ } => { - self.game_state.current_section = Some(id.clone()); - }, - cuentitos_common::Block::Subsection { id, settings:_ } => { - if self.game_state.current_subsection.is_none() - { - self.game_state.current_subsection = Some(id.clone()); - } - }, - cuentitos_common::Block::Divert { next, settings:_ } => { - if let NextBlock::Section(section_key) = next{ - if section_key.subsection.is_some() - { - self.game_state.current_section = Some(section_key.section.clone()); - } - } - }, - _=>{} - } - - if self.game_state.current_section.is_some() - { - return; - } - } - } - fn push_stack(runtime: &mut Runtime, id: BlockId) -> Result { - runtime.block_stack.push(id); - - if !runtime.meets_requirements(id)? { - return Self::pop_stack_and_find_next(runtime); - } - - if runtime.get_block(id).get_settings().unique { - if runtime.game_state.uniques_played.contains(&id) { - return Self::pop_stack_and_find_next(runtime); - } else { - runtime.game_state.uniques_played.push(id); - } - } - - let mut modified_variables = runtime.apply_modifiers()?; - runtime.update_section(); - + fn push_stack_until_text( + runtime: &mut Runtime, + id: BlockId, + ) -> Result { + let mut modified_variables = Self::push_stack(runtime, id)?; let block = runtime.get_block(id).clone(); + match block { - cuentitos_common::Block::Section { id:_, settings: _ } => { + cuentitos_common::Block::Section { id: _, settings: _ } => { modified_variables.append(&mut Self::update_stack(runtime)?); Ok(modified_variables) } - cuentitos_common::Block::Subsection { id:_, settings: _ } => { + cuentitos_common::Block::Subsection { id: _, settings: _ } => { modified_variables.append(&mut Self::update_stack(runtime)?); Ok(modified_variables) } @@ -611,7 +586,7 @@ impl Runtime { settings: _, } => { if let Some(next) = runtime.get_random_block_from_bucket(block.get_settings())? { - modified_variables.append(&mut Self::push_stack(runtime, next)?); + modified_variables.append(&mut Self::push_stack_until_text(runtime, next)?); Ok(modified_variables) } else { runtime.update_choices()?; @@ -619,22 +594,41 @@ impl Runtime { } } cuentitos_common::Block::Divert { next, settings: _ } => { - let next = runtime.get_divert_next(next)?; - modified_variables.append(&mut Self::push_stack(runtime, next)?); + match next { + NextBlock::BlockId(id) => { + modified_variables.append(&mut Self::push_stack_until_text(runtime, id)?) + } + NextBlock::EndOfFile => { + runtime.reset(); + return Err(RuntimeError::StoryFinished); + } + NextBlock::Section(section) => { + modified_variables.append(&mut runtime.divert(§ion)?); + modified_variables.append(&mut Self::update_stack(runtime)?) + } + } Ok(modified_variables) } } } - fn get_divert_next(&mut self, next: NextBlock) -> Result { - match next { - NextBlock::BlockId(id) => Ok(id), - NextBlock::EndOfFile => { - self.reset(); - Err(RuntimeError::StoryFinished) + fn push_stack(runtime: &mut Runtime, id: BlockId) -> Result { + runtime.block_stack.push(id); + + if !runtime.meets_requirements(id)? { + return Self::pop_stack_and_find_next(runtime); + } + + if runtime.get_block(id).get_settings().unique { + if runtime.game_state.uniques_played.contains(&id) { + return Self::pop_stack_and_find_next(runtime); + } else { + runtime.game_state.uniques_played.push(id); } - NextBlock::Section(section_key) => self.get_section_block_id(§ion_key), } + + runtime.game_state.section = runtime.get_block(id).get_settings().section.clone(); + runtime.apply_modifiers() } fn update_stack(runtime: &mut Runtime) -> Result { @@ -643,7 +637,7 @@ impl Runtime { } if runtime.block_stack.is_empty() { - return Self::push_stack(runtime, 0); + return Self::push_stack_until_text(runtime, 0); } let last_block_id = match runtime.block_stack.last() { @@ -659,7 +653,7 @@ impl Runtime { if !settings.children.is_empty() { if let Some(child) = runtime.get_next_child_in_stack(&settings, 0)? { - return Self::push_stack(runtime, child); + return Self::push_stack_until_text(runtime, child); } } @@ -687,9 +681,6 @@ impl Runtime { cuentitos_common::Block::Section { id, settings: _ } => { Err(RuntimeError::SectionAtLowerLevel(id.clone())) } - cuentitos_common::Block::Subsection { id, settings: _ } => { - Err(RuntimeError::SectionAtLowerLevel(id.clone())) - } _ => Ok(Some(settings.children[0])), } } @@ -702,7 +693,7 @@ impl Runtime { runtime.block_stack.pop(); if runtime.block_stack.is_empty() { - return Self::push_stack(runtime, last_block_id + 1); + return Self::push_stack_until_text(runtime, last_block_id + 1); } let new_block_id: &usize = match runtime.block_stack.last() { @@ -720,7 +711,7 @@ impl Runtime { { continue; } - return Self::push_stack(runtime, *sibling); + return Self::push_stack_until_text(runtime, *sibling); } if *sibling == last_block_id { previous_block_found = true; @@ -805,11 +796,11 @@ mod test { use std::{collections::HashMap, fmt::Display, str::FromStr, vec}; - use crate::{runtime::DivertData, Runtime, RuntimeError}; + use crate::{Runtime, RuntimeError}; use cuentitos_common::{ condition::ComparisonOperator, modifier::ModifierOperator, Block, BlockSettings, Chance, Condition, Config, Database, FrequencyModifier, Function, I18n, LanguageDb, LanguageId, - Modifier, NextBlock, Requirement, SectionKey, VariableKind, + Modifier, NextBlock, Requirement, Section, VariableKind, }; #[test] @@ -829,8 +820,11 @@ mod test { }, }; let section_2 = Block::Section { - id: "section_1".to_string(), - settings: BlockSettings::default(), + id: "section_2".to_string(), + settings: BlockSettings { + children: vec![2], + ..Default::default() + }, }; let subsection = Block::Subsection { id: "subsection".to_string(), @@ -848,25 +842,25 @@ mod test { settings: BlockSettings::default(), }; - let mut sections: HashMap = HashMap::default(); + let mut sections: HashMap = HashMap::default(); sections.insert( - SectionKey { - section: "section_1".to_string(), - subsection: None, + Section { + section_name: "section_1".to_string(), + subsection_name: None, }, 0, ); sections.insert( - SectionKey { - section: "section_2".to_string(), - subsection: None, + Section { + section_name: "section_2".to_string(), + subsection_name: None, }, 1, ); sections.insert( - SectionKey { - section: "section_2".to_string(), - subsection: Some("subsection".to_string()), + Section { + section_name: "section_2".to_string(), + subsection_name: Some("subsection".to_string()), }, 2, ); @@ -881,19 +875,20 @@ mod test { ..Default::default() }; runtime - .divert(&DivertData { - section: "section_2".to_string(), - subsection: Some("subsection".to_string()), + .divert(&Section { + section_name: "section_2".to_string(), + subsection_name: Some("subsection".to_string()), }) .unwrap(); - assert_eq!(runtime.block_stack, vec![2, 4]); + assert_eq!(runtime.block_stack, vec![1, 2]); + runtime - .divert(&DivertData { - section: "section_1".to_string(), - subsection: None, + .divert(&Section { + section_name: "section_1".to_string(), + subsection_name: None, }) .unwrap(); - assert_eq!(runtime.block_stack, vec![2, 4, 0, 3]); + assert_eq!(runtime.block_stack, vec![0]); } #[test] @@ -1263,7 +1258,7 @@ mod test { .unwrap() .unwrap(); assert_eq!(id, 1); - Runtime::push_stack(&mut runtime, 1).unwrap(); + Runtime::push_stack_until_text(&mut runtime, 1).unwrap(); let bucket_settings = runtime.get_block(0).get_settings().clone(); let id = runtime .get_random_block_from_bucket(&bucket_settings) @@ -2510,22 +2505,21 @@ mod test { }, }; - let mut sections: HashMap = HashMap::default(); + let mut sections: HashMap = HashMap::default(); sections.insert( - SectionKey { - section: "section".to_string(), - subsection: None, + Section { + section_name: "section".to_string(), + subsection_name: None, }, 0, ); - let settings = BlockSettings { - unique: true, - ..Default::default() - }; let text_1 = Block::Text { id: String::default(), - settings, + settings: BlockSettings { + unique: true, + ..Default::default() + }, }; let text_2 = Block::Text { @@ -2534,9 +2528,9 @@ mod test { }; let divert = Block::Divert { - next: NextBlock::Section(SectionKey { - section: "section".to_string(), - subsection: None, + next: NextBlock::Section(Section { + section_name: "section".to_string(), + subsection_name: None, }), settings: BlockSettings::default(), }; @@ -2712,9 +2706,9 @@ mod test { #[test] fn divert_throws_error_if_section_doesnt_exist() { - let section_key = SectionKey { - section: "section".to_string(), - subsection: Some("subsection".to_string()), + let section_key = Section { + section_name: "section".to_string(), + subsection_name: Some("subsection".to_string()), }; let divert = Block::Divert { next: NextBlock::Section(section_key.clone()), @@ -2764,7 +2758,7 @@ mod test { blocks: vec![text], ..Default::default() }; - let mut runtime = Runtime::new(database); + let runtime = Runtime::new(database); let err = runtime.current_block().unwrap_err(); assert_eq!(err, RuntimeError::EmptyStack); } From ecdc428e5dcefe3014fd5e9c25949f2626de8a6d Mon Sep 17 00:00:00 2001 From: loomstyla Date: Thu, 6 Jul 2023 18:01:06 -0300 Subject: [PATCH 49/94] cli divert command now trims blank spaces --- cli/src/console.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/src/console.rs b/cli/src/console.rs index 749cfb8..cea978f 100644 --- a/cli/src/console.rs +++ b/cli/src/console.rs @@ -97,7 +97,7 @@ impl Console { } } else if str.starts_with("->") { let substr: String = str.chars().skip(2).collect(); - let mut splitted = substr.split('/'); + let mut splitted = substr.trim().split('/'); if let Some(section_str) = splitted.next() { let subsection = splitted.next(); let section = match subsection { From c98df0a14494e51db90ecc39e38ba6ff001c0e07 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Thu, 6 Jul 2023 18:35:51 -0300 Subject: [PATCH 50/94] boomerang divert --- common/src/block.rs | 17 +++-- palabritas/src/palabritas.pest | 5 +- palabritas/src/parser.rs | 111 +++++++++++++++++++++++++++++++++ runtime/src/runtime.rs | 34 ++++++++++ 4 files changed, 155 insertions(+), 12 deletions(-) diff --git a/common/src/block.rs b/common/src/block.rs index b7c2a52..4a0afa4 100644 --- a/common/src/block.rs +++ b/common/src/block.rs @@ -105,6 +105,10 @@ pub enum Block { next: NextBlock, settings: BlockSettings, }, + BoomerangDivert { + next: NextBlock, + settings: BlockSettings, + }, } impl Block { @@ -116,6 +120,7 @@ impl Block { Block::Section { id: _, settings } => settings, Block::Subsection { id: _, settings } => settings, Block::Divert { next: _, settings } => settings, + Block::BoomerangDivert { next: _, settings } => settings, } } pub fn get_settings(&self) -> &BlockSettings { @@ -126,22 +131,14 @@ impl Block { Block::Section { id: _, settings } => settings, Block::Subsection { id: _, settings } => settings, Block::Divert { next: _, settings } => settings, + Block::BoomerangDivert { next: _, settings } => settings, } } pub fn get_i18n_id(&self) -> Option { match self { Block::Text { id, settings: _ } => Some(id.clone()), Block::Choice { id, settings: _ } => Some(id.clone()), - Block::Bucket { - name: _, - settings: _, - } => None, - Block::Section { id: _, settings: _ } => None, - Block::Subsection { id: _, settings: _ } => None, - Block::Divert { - next: _, - settings: _, - } => None, + _ => None, } } } diff --git a/palabritas/src/palabritas.pest b/palabritas/src/palabritas.pest index 1834f61..dd061b3 100644 --- a/palabritas/src/palabritas.pest +++ b/palabritas/src/palabritas.pest @@ -1,4 +1,4 @@ -ReservedKeywords = { "req" | "freq" | "mod" | "unique" | "->" | "`" | "*" | "#" | "##" | "//" | "END" } +ReservedKeywords = { "req" | "freq" | "mod" | "unique" | "->" | "`" | "*" | "#" | "##" | "//" | "END" | "<->" } Char = { (!NewLine ~ ANY)+ } Integer = { "-"? ~ ASCII_DIGIT+ } Float = { Integer ~ "." ~ ASCII_DIGIT* } @@ -32,6 +32,7 @@ Text = { !Indentation ~ !ReservedKeywords ~ Chance? ~ String } Choice = { "*" ~ " "* ~ Chance? ~ String } NamedBucket = { "[" ~ " "* ~ Chance? ~ SnakeCase ~ " "* ~ "]" } Divert = { Chance? ~ "->" ~ " "* ~ Identifier ~ ("/" ~ Identifier)? } +BoomerangDivert = { Chance? ~ "<->" ~ " "* ~ Identifier ~ ("/" ~ Identifier)? } NewBlock = { // The first line in the block @@ -43,7 +44,7 @@ NewBlock = { } Block = { - (NamedBucket | Choice | Text | Divert) ~ " "* ~ Command* ~ " "* ~ (NewLine | EOI) ~ NewBlock* + (NamedBucket | Choice | Text | Divert | BoomerangDivert) ~ " "* ~ Command* ~ " "* ~ (NewLine | EOI) ~ NewBlock* } Database = { SOI ~ (NewLine | Block | Section )* ~ EOI } diff --git a/palabritas/src/parser.rs b/palabritas/src/parser.rs index b8b6ed5..26e5c4f 100644 --- a/palabritas/src/parser.rs +++ b/palabritas/src/parser.rs @@ -269,6 +269,14 @@ pub fn parse_divert_str(input: &str, section_list: &[Section]) -> Result Result { + let token = parse_str(input, Rule::BoomerangDivert)?; + parse_boomerang_divert(token, section_list, &None, &String::default()) +} + pub fn parse_modifier_str(input: &str, config: &Config) -> Result { let token = parse_str(input, Rule::Modifier)?; parse_modifier(token, config, &String::default()) @@ -562,6 +570,14 @@ fn parse_block( &parsing_data.file, )?; } + Rule::BoomerangDivert => { + block = parse_boomerang_divert( + inner_token, + &parsing_data.section_list, + &parsing_data.current_section, + &parsing_data.file, + )?; + } Rule::Command => { add_command_to_block( inner_token, @@ -1128,6 +1144,52 @@ fn parse_divert( }) } +fn parse_boomerang_divert( + token: Pair, + section_list: &[Section], + current_section: &Option
, + file: &str, +) -> Result { + match_rule(&token, Rule::BoomerangDivert, file)?; + + let mut section: Option = None; + let mut subsection: Option = None; + + let error_info = ErrorInfo { + line: token.line_col().0, + col: token.line_col().1, + string: token.as_str().to_string(), + file: file.to_string(), + }; + + for inner_token in token.into_inner() { + if inner_token.as_rule() == Rule::Identifier { + if section.is_none() { + section = Some(inner_token.as_str().to_string()); + } else { + subsection = Some(inner_token.as_str().to_string()); + } + } + } + + let next = match section.is_some() && subsection.is_none() && section.clone().unwrap() == "END" { + true => NextBlock::EndOfFile, + false => { + let section_key = Section { + section_name: section.unwrap(), + subsection_name: subsection, + }; + check_section_existance(§ion_key, section_list, &error_info, current_section)?; + NextBlock::Section(section_key) + } + }; + + Ok(Block::BoomerangDivert { + next, + settings: BlockSettings::default(), + }) +} + fn parse_modifier( token: Pair, config: &Config, @@ -2465,6 +2527,42 @@ mod test { assert_eq!(divert, expected_value); } + #[test] + fn parse_boomerang_divert_correctly() { + //Section + let section = make_random_identifier(); + let divert_string = format!("<-> {}", section); + let section_key = Section { + section_name: section.clone(), + subsection_name: None, + }; + let expected_value = Block::BoomerangDivert { + next: NextBlock::Section(section_key.clone()), + settings: BlockSettings::default(), + }; + let mut section_list = vec![section_key]; + + let divert = parse_boomerang_divert_str(&divert_string, §ion_list).unwrap(); + assert_eq!(divert, expected_value); + + //Subsection + let subsection = make_random_identifier(); + let divert_string = format!("<-> {}/{}", section, subsection); + let section_key = Section { + section_name: section.clone(), + subsection_name: Some(subsection.clone()), + }; + + let expected_value = Block::BoomerangDivert { + next: NextBlock::Section(section_key.clone()), + settings: BlockSettings::default(), + }; + section_list.push(section_key); + + let divert = parse_boomerang_divert_str(&divert_string, §ion_list).unwrap(); + assert_eq!(divert, expected_value); + } + #[test] fn parse_modifier_correctly() { //Modifier = { "set" ~ " "+ ~ ( (Identifier ~ " "+ ~ Value) | (NotOperator? ~ " "* ~ Identifier) ) ~ " "* } @@ -2800,6 +2898,19 @@ mod test { ); } + #[test] + fn parse_boomerang_divert_rule() { + //BoomerangDivert = { Chance? ~ "<->" ~ " "* ~ Identifier ~ ("/" ~ Identifier)? } + let section = make_random_identifier(); + let subsection = make_random_identifier(); + + assert_parse_rule(Rule::BoomerangDivert, &("<->".to_string() + §ion)); + assert_parse_rule( + Rule::BoomerangDivert, + &("<->".to_string() + §ion + "/" + &subsection), + ); + } + #[test] fn parse_command_rule() { //Command = {NEWLINE ~ Indentation* ~ (Requirement | Frequency | Modifier | Divert) } diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index 21fd7cb..8efc02f 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -93,6 +93,17 @@ impl Runtime { Ok(modified_variables) } + pub fn boomerang_divert(&mut self, section: &Section) -> Result { + let new_stack = self.get_section_blocks_stack(section)?; + let mut modified_variables = ModifiedVariables::default(); + + for block in new_stack { + modified_variables.append(&mut Self::push_stack(self, block)?); + } + + Ok(modified_variables) + } + fn get_section_blocks_stack(&mut self, section: &Section) -> Result, RuntimeError> { let mut section = section.clone(); let section_id = match self.database.sections.get(§ion) { @@ -207,6 +218,13 @@ impl Runtime { expected_block: "text".to_string(), block_found: "divert".to_string(), }), + cuentitos_common::Block::BoomerangDivert { + next: _, + settings: _, + } => Err(RuntimeError::UnexpectedBlock { + expected_block: "text".to_string(), + block_found: "boomerang divert".to_string(), + }), } } @@ -609,6 +627,22 @@ impl Runtime { } Ok(modified_variables) } + cuentitos_common::Block::BoomerangDivert { next, settings: _ } => { + match next { + NextBlock::BlockId(id) => { + modified_variables.append(&mut Self::push_stack_until_text(runtime, id)?) + } + NextBlock::EndOfFile => { + runtime.reset(); + return Err(RuntimeError::StoryFinished); + } + NextBlock::Section(section) => { + modified_variables.append(&mut runtime.boomerang_divert(§ion)?); + modified_variables.append(&mut Self::update_stack(runtime)?) + } + } + Ok(modified_variables) + } } } From fb277d799e5782f03f88f0389a270e2ec85eca71 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Thu, 6 Jul 2023 18:51:31 -0300 Subject: [PATCH 51/94] boomerang divert test --- runtime/src/runtime.rs | 83 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index 8efc02f..360d48c 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -100,7 +100,6 @@ impl Runtime { for block in new_stack { modified_variables.append(&mut Self::push_stack(self, block)?); } - Ok(modified_variables) } @@ -925,6 +924,88 @@ mod test { assert_eq!(runtime.block_stack, vec![0]); } + + #[test] + fn boomerang_divert_works_correctly() { + let section_1 = Block::Section { + id: "section_1".to_string(), + settings: BlockSettings { + children: vec![3], + ..Default::default() + }, + }; + let section_2 = Block::Section { + id: "section_2".to_string(), + settings: BlockSettings { + children: vec![2], + ..Default::default() + }, + }; + let subsection = Block::Subsection { + id: "subsection".to_string(), + settings: BlockSettings { + children: vec![4], + ..Default::default() + }, + }; + let text_1 = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; + let text_2 = Block::Text { + id: String::default(), + settings: BlockSettings::default(), + }; + + let mut sections: HashMap = HashMap::default(); + sections.insert( + Section { + section_name: "section_1".to_string(), + subsection_name: None, + }, + 0, + ); + sections.insert( + Section { + section_name: "section_2".to_string(), + subsection_name: None, + }, + 1, + ); + sections.insert( + Section { + section_name: "section_2".to_string(), + subsection_name: Some("subsection".to_string()), + }, + 2, + ); + let database = Database { + blocks: vec![section_1, section_2, subsection, text_1, text_2], + sections, + ..Default::default() + }; + + let mut runtime = Runtime { + database, + ..Default::default() + }; + runtime + .boomerang_divert(&Section { + section_name: "section_2".to_string(), + subsection_name: Some("subsection".to_string()), + }) + .unwrap(); + assert_eq!(runtime.block_stack, vec![1, 2]); + + runtime + .boomerang_divert(&Section { + section_name: "section_1".to_string(), + subsection_name: None, + }) + .unwrap(); + assert_eq!(runtime.block_stack, vec![1 , 2 , 0]); + } + #[test] fn get_choices_works_correctly() { let settings = BlockSettings { From c85afef4b35b6c2d9b94374d22b2a70fd76c373c Mon Sep 17 00:00:00 2001 From: loomstyla Date: Fri, 7 Jul 2023 11:22:48 -0300 Subject: [PATCH 52/94] print variables ordered --- cli/src/console.rs | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/cli/src/console.rs b/cli/src/console.rs index cea978f..66473b8 100644 --- a/cli/src/console.rs +++ b/cli/src/console.rs @@ -143,26 +143,14 @@ impl Console { } fn print_all_variables(runtime: &Runtime) { - for (variable, kind) in &runtime.database.config.variables { - match kind { - VariableKind::Integer => { - let int: i32 = runtime.get_variable(variable).unwrap(); - println!(" - {}: {}", variable, int); - } - VariableKind::Float => { - let float: f32 = runtime.get_variable(variable).unwrap(); - println!(" - {}: {}", variable, float); - } - VariableKind::Bool => { - let bool: bool = runtime.get_variable(variable).unwrap(); - println!(" - {}: {}", variable, bool); - } - _ => { - let string: String = runtime.get_variable(variable).unwrap(); - println!(" - {}: {}", variable, string); - } - } + let mut variables = Vec::default(); + + for (variable, _) in &runtime.database.config.variables { + variables.push(variable.clone()); } + + variables.sort(); + print_variables(&variables, runtime); } fn print_variables(variables: &ModifiedVariables, runtime: &Runtime) { From 2c80d499d927d1bdc0409210845b213471fc8dba Mon Sep 17 00:00:00 2001 From: loomstyla Date: Fri, 7 Jul 2023 13:38:09 -0300 Subject: [PATCH 53/94] cli changes cli prints variables sorted alphabetically cli returns status!=0 on compiler errors added cli history --- cli/Cargo.toml | 2 +- cli/src/console.rs | 205 ++++++++++++++++++++++------------------- cli/src/main.rs | 67 ++------------ compiler/src/lib.rs | 33 ++----- runtime/src/runtime.rs | 3 +- 5 files changed, 127 insertions(+), 183 deletions(-) diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 44370a2..3f62339 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -13,5 +13,5 @@ cuentitos-compiler = { path = "../compiler" } cuentitos-runtime = { path = "../runtime" } palabritas = { path = "../palabritas" } regex = "1.7.0" -notify = "5.1.0" pest = "2.0" +rustyline = "12.0.0" diff --git a/cli/src/console.rs b/cli/src/console.rs index 66473b8..ab1a078 100644 --- a/cli/src/console.rs +++ b/cli/src/console.rs @@ -1,18 +1,20 @@ use cuentitos_runtime::*; use palabritas::parse_modifier_str; +use rustyline::{error::ReadlineError, history::FileHistory}; +use rustyline::{DefaultEditor, Editor}; use std::fs; use std::fs::File; use std::io::Read; -use std::io::Write; use std::path::PathBuf; #[derive(Debug)] pub struct Console {} impl Console { - fn prompt(section: &Option
) -> String { - let mut line = String::new(); - + fn prompt( + rl: &mut Editor<(), FileHistory>, + section: &Option
, + ) -> Result { let mut prompt_str = String::from("\n"); if let Some(section) = section { @@ -25,13 +27,7 @@ impl Console { prompt_str.push_str(" > "); - print!("{}", prompt_str); - std::io::stdout().flush().unwrap(); - std::io::stdin() - .read_line(&mut line) - .expect("Error: Could not read a line"); - - return line.trim().to_string(); + rl.readline(&prompt_str) } pub fn start(path: PathBuf) { @@ -43,109 +39,126 @@ impl Console { let mut runtime = Runtime::new(file); + let mut rl = DefaultEditor::new().unwrap(); + rl.load_history("history.txt").unwrap_or_default(); + loop { - let input = Self::prompt(&runtime.game_state.section); + let read_line = Self::prompt(&mut rl, &runtime.game_state.section); - match input.as_str() { - "" => match runtime.next_block() { - Ok((block, variables)) => { - print_block(block); - print_variables(&variables, &runtime) - } - Err(error) => print_runtime_error(error, &runtime), - }, - "sections" => { - println!("Sections:"); - for section in runtime.database.sections.keys() { - println!("{:?}", section); + match read_line { + Ok(line) => { + rl.add_history_entry(line.as_str()).unwrap(); + run_command(line, &mut runtime); + } + Err(ReadlineError::Interrupted) => break, + Err(ReadlineError::Eof) => break, + Err(err) => { + println!("{:?}", err); + break; + } + } + } + + rl.save_history("history.txt").unwrap(); + } +} + +fn run_command(input: String, runtime: &mut Runtime) { + match input.trim() { + "" => match runtime.next_block() { + Ok((block, variables)) => { + print_block(block); + print_variables(&variables, runtime) + } + Err(error) => print_runtime_error(error, runtime), + }, + "sections" => { + println!("Sections:"); + for section in runtime.database.sections.keys() { + println!("{:?}", section); + } + } + "?" => { + if !runtime.block_stack.is_empty() { + match runtime.current_block() { + Ok(block) => { + println!("Current Block:"); + println!(" Text: {}", block.text); + println!(" Script: {}", block.script); } + Err(error) => print_runtime_error(error, runtime), } - "?" => { - if !runtime.block_stack.is_empty() { - match runtime.current_block() { - Ok(block) => { - println!("Current Block:"); - println!(" Text: {}", block.text); - println!(" Script: {}", block.script); - } - Err(error) => print_runtime_error(error, &runtime), - } - match runtime.peek_next_block() { - Ok((block, _)) => { - println!("Next Block:"); - println!(" Text: {}", block.text); - println!(" Script: {}", block.script); - } - Err(error) => print_runtime_error(error, &runtime), - } + match runtime.peek_next_block() { + Ok((block, _)) => { + println!("Next Block:"); + println!(" Text: {}", block.text); + println!(" Script: {}", block.script); } - println!("Variables: "); - print_all_variables(&runtime) + Err(error) => print_runtime_error(error, runtime), } - "q" => break, - "variables" => print_all_variables(&runtime), - str => { - if str.starts_with("set") { - match parse_modifier_str(str, &runtime.database.config) { - Ok(modifier) => match runtime.apply_modifier(&modifier) { - Ok(_) => { - print_variable(&modifier.variable, &runtime); - } - Err(error) => println!("{}", error), - }, - Err(error) => println!("{}", error), - } - } else if str.starts_with("->") { - let substr: String = str.chars().skip(2).collect(); - let mut splitted = substr.trim().split('/'); - if let Some(section_str) = splitted.next() { - let subsection = splitted.next(); - let section = match subsection { - Some(subsection) => Section { - section_name: section_str.to_string(), - subsection_name: Some(subsection.to_string()), - }, - None => Section { - section_name: section_str.to_string(), - subsection_name: None, - }, - }; - match runtime.divert(§ion) { - Ok(_) => match runtime.next_block() { - Ok((block, choices)) => { - print_block(block); - print_choices(choices); - } - Err(error) => print_runtime_error(error, &runtime), - }, - Err(error) => print_runtime_error(error, &runtime), - } - } - } else if let Ok(choice) = str.parse::() { - if choice == 0 { - println!("invalid option"); - continue; + } + println!("Variables: "); + print_all_variables(runtime) + } + "variables" => print_all_variables(runtime), + str => { + if str.starts_with("set") { + match parse_modifier_str(str, &runtime.database.config) { + Ok(modifier) => match runtime.apply_modifier(&modifier) { + Ok(_) => { + print_variable(&modifier.variable, runtime); } - match runtime.pick_choice(choice - 1) { - Ok((block, variables)) => { + Err(error) => println!("{}", error), + }, + Err(error) => println!("{}", error), + } + } else if str.starts_with("->") { + let substr: String = str.chars().skip(2).collect(); + let mut splitted = substr.trim().split('/'); + if let Some(section_str) = splitted.next() { + let subsection = splitted.next(); + let section = match subsection { + Some(subsection) => Section { + section_name: section_str.to_string(), + subsection_name: Some(subsection.to_string()), + }, + None => Section { + section_name: section_str.to_string(), + subsection_name: None, + }, + }; + match runtime.divert(§ion) { + Ok(_) => match runtime.next_block() { + Ok((block, choices)) => { print_block(block); - print_variables(&variables, &runtime) + print_choices(choices); } - Err(error) => print_runtime_error(error, &runtime), - } - } else { - println!("Unkown command: {}", str); + Err(error) => print_runtime_error(error, runtime), + }, + Err(error) => print_runtime_error(error, runtime), + } + } + } else if let Ok(choice) = str.parse::() { + if choice == 0 { + println!("invalid option"); + } + match runtime.pick_choice(choice - 1) { + Ok((block, variables)) => { + print_block(block); + print_variables(&variables, runtime) } + Err(error) => print_runtime_error(error, runtime), } + } else { + println!("Unkown command: {}", str); } } } } - fn print_all_variables(runtime: &Runtime) { let mut variables = Vec::default(); - for (variable, _) in &runtime.database.config.variables { + for variable in runtime.database.config.variables.keys() { variables.push(variable.clone()); } diff --git a/cli/src/main.rs b/cli/src/main.rs index eda955c..a02d03b 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -1,7 +1,4 @@ use clap::{Parser, Subcommand}; -use notify::event::AccessKind::Close; -use notify::event::AccessMode::Write; -use notify::{EventKind, RecursiveMode, Result, Watcher}; use std::path::Path; mod console; @@ -26,80 +23,28 @@ enum Commands { #[clap(default_value = "./cuentitos.db")] source_path: std::path::PathBuf, }, - - Watch { - #[clap(default_value = ".")] - source_path: std::path::PathBuf, - #[clap(default_value = "./cuentitos.db")] - build_path: std::path::PathBuf, - }, } -fn compile(source_path: T, destination_path: U) +fn compile(source_path: T, destination_path: U) -> Result<(), Box> where T: AsRef, U: AsRef, { - cuentitos_compiler::compile(&source_path, destination_path); + cuentitos_compiler::compile(&source_path, destination_path) } -fn main() { +fn main() -> Result<(), Box> { let cli = Cli::parse(); match cli.command { Some(Commands::Compile { source_path, build_path, - }) => { - compile(source_path, build_path); - } + }) => compile(source_path, build_path), Some(Commands::Run { source_path }) => { Console::start(source_path); + Ok(()) } - Some(Commands::Watch { - source_path, - build_path, - }) => { - watch(source_path, build_path).unwrap(); - } - None => {} + None => Ok(()), } } - -fn watch(source_path: T, destination_path: U) -> Result<()> -where - T: AsRef, - U: AsRef, -{ - compile(&source_path, &destination_path); - let source_path_moved = source_path.as_ref().to_path_buf(); - let destination_path = destination_path.as_ref().to_path_buf(); - - let mut watcher = notify::recommended_watcher(move |res: Result| match res { - Ok(event) => { - if event.kind == EventKind::Access(Close(Write)) { - compile(&source_path_moved, &destination_path); - } - } - Err(e) => println!("watch error: {:?}", e), - }) - .unwrap(); - - // Add a path to be watched. All files and directories at that path and - // below will be monitored for changes. - let mut listening_paths = source_path.as_ref().to_path_buf(); - listening_paths.push("events"); - watcher - .watch(&listening_paths, RecursiveMode::Recursive) - .unwrap(); - - let mut listening_paths = source_path.as_ref().to_path_buf(); - listening_paths.push("items"); - if listening_paths.is_dir() { - watcher - .watch(&listening_paths, RecursiveMode::Recursive) - .unwrap(); - } - - loop {} -} diff --git a/compiler/src/lib.rs b/compiler/src/lib.rs index d504eaf..d9cde6a 100644 --- a/compiler/src/lib.rs +++ b/compiler/src/lib.rs @@ -8,39 +8,26 @@ use std::path::Path; mod i18n; -pub fn compile(source_path: T, destination_path: U) +pub fn compile(source_path: T, destination_path: U) -> Result<(), Box> where T: AsRef, U: AsRef, { - let db_result = parse_database_from_path(&source_path); - - let mut db = match db_result { - Ok(db) => db, - Err(e) => { - println!("{}", e); - return; - } - }; - - if let Err(error) = I18n::process(&mut db, source_path, &destination_path) { - println!("{}", error); - return; - } + let mut db = parse_database_from_path(&source_path)?; + + I18n::process(&mut db, source_path, &destination_path)?; let mut buf: Vec = Vec::new(); let mut serializer = Serializer::new(&mut buf); - let serialize_result = db.serialize(&mut serializer); - if serialize_result.is_err() { - println!("{}", serialize_result.unwrap_err()); - return; - } + db.serialize(&mut serializer)?; let destination_path = destination_path.as_ref().to_path_buf(); - let mut file = File::create(destination_path).unwrap(); + let mut file = File::create(destination_path)?; + + file.write_all(&buf)?; - file.write_all(&buf).unwrap(); + Ok(()) } #[cfg(test)] @@ -49,6 +36,6 @@ mod test { #[test] fn compile_works_correctly() { - compile("../examples/story-example.cuentitos", "cuentitos.db"); + compile("../examples/story-example.cuentitos", "cuentitos.db").unwrap(); } } diff --git a/runtime/src/runtime.rs b/runtime/src/runtime.rs index 360d48c..12312a7 100644 --- a/runtime/src/runtime.rs +++ b/runtime/src/runtime.rs @@ -924,7 +924,6 @@ mod test { assert_eq!(runtime.block_stack, vec![0]); } - #[test] fn boomerang_divert_works_correctly() { let section_1 = Block::Section { @@ -1003,7 +1002,7 @@ mod test { subsection_name: None, }) .unwrap(); - assert_eq!(runtime.block_stack, vec![1 , 2 , 0]); + assert_eq!(runtime.block_stack, vec![1, 2, 0]); } #[test] From 78f64d3be7c79f1279ad3ec7e5ce7482d9f73905 Mon Sep 17 00:00:00 2001 From: loomstyla Date: Fri, 7 Jul 2023 17:30:21 -0300 Subject: [PATCH 54/94] errors refactoring + new errors --- common/src/block.rs | 2 +- palabritas/src/error.rs | 159 +++++---- palabritas/src/parser.rs | 745 ++++++++++++++++++++++----------------- 3 files changed, 525 insertions(+), 381 deletions(-) diff --git a/common/src/block.rs b/common/src/block.rs index 4a0afa4..29bc6c8 100644 --- a/common/src/block.rs +++ b/common/src/block.rs @@ -34,7 +34,7 @@ pub enum NextBlock { Section(Section), } -#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)] +#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)] pub struct Script { pub file: String, pub line: usize, diff --git a/palabritas/src/error.rs b/palabritas/src/error.rs index 444fd08..80a261d 100644 --- a/palabritas/src/error.rs +++ b/palabritas/src/error.rs @@ -1,13 +1,12 @@ +use crate::parser::Rule; +use cuentitos_common::{Script, Section, SectionName, VariableKind}; use std::{error::Error, fmt::Display, path::PathBuf}; -use cuentitos_common::{Section, VariableKind}; - -use crate::parser::Rule; #[derive(Debug, PartialEq, Eq)] pub enum PalabritasError { FileIsEmpty, ParseError { - info: ErrorInfo, + script: Script, reason: String, }, PathIsNotAFile(PathBuf), @@ -16,56 +15,52 @@ pub enum PalabritasError { path: PathBuf, message: String, }, - BucketSumIsNot1(ErrorInfo), - BucketHasFrequenciesAndChances(ErrorInfo), - BucketMissingProbability(ErrorInfo), + BucketSumIsNot1(Script, String), + BucketHasFrequenciesAndChances(Script, String), + BucketMissingProbability(Script, String), UnexpectedRule { - info: ErrorInfo, + script: Script, expected_rule: Rule, rule_found: Rule, }, - DivisionByZero(ErrorInfo), + DivisionByZero(Script, String), SectionDoesntExist { - info: ErrorInfo, + script: Script, section: Section, }, + DuplicatedSection { + first_appearance: Box

+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