wip: use stateful buffer
This commit is contained in:
1 parent
79b475798d
commit
a2a194ca40
4 files changed
+29
-6
No files matched your search
@@ -0,0 +1,17 @@
|
|||||||
|
use std::fmt::Result;
|
||||||
|
|
||||||
|
struct Buffer {
|
||||||
|
buf: String,
|
||||||
|
cur_line: usize,
|
||||||
|
cur_indent: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Buffer {
|
||||||
|
fn write_tabs(&mut self, num: usize) -> Result {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn new_line(&mut self) -> Result {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,12 +1,18 @@
|
|||||||
use crate::{util::*, write_ident};
|
use crate::{util::*, write_ident};
|
||||||
use dioxus_rsx::*;
|
use dioxus_rsx::*;
|
||||||
use std::{fmt, fmt::Write};
|
use std::{fmt, fmt::Result, fmt::Write};
|
||||||
|
|
||||||
enum ShortOptimization {
|
enum ShortOptimization {
|
||||||
// Special because we want to print the closing bracket immediately
|
// Special because we want to print the closing bracket immediately
|
||||||
Empty,
|
Empty,
|
||||||
|
|
||||||
|
// Special optimization to put everything on the same line
|
||||||
Oneliner,
|
Oneliner,
|
||||||
|
|
||||||
|
// Optimization where children flow but props remain fixed on top
|
||||||
PropsOnTop,
|
PropsOnTop,
|
||||||
|
|
||||||
|
// The noisiest optimization where everything flows
|
||||||
NoOpt,
|
NoOpt,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -20,9 +26,8 @@ pub fn write_element(
|
|||||||
}: &Element,
|
}: &Element,
|
||||||
buf: &mut String,
|
buf: &mut String,
|
||||||
lines: &[&str],
|
lines: &[&str],
|
||||||
node: &BodyNode,
|
|
||||||
indent: usize,
|
indent: usize,
|
||||||
) -> fmt::Result {
|
) -> Result {
|
||||||
/*
|
/*
|
||||||
1. Write the tag
|
1. Write the tag
|
||||||
2. Write the key
|
2. Write the key
|
||||||
@@ -157,7 +162,7 @@ fn write_attributes(
|
|||||||
attributes: &[ElementAttrNamed],
|
attributes: &[ElementAttrNamed],
|
||||||
sameline: bool,
|
sameline: bool,
|
||||||
indent: usize,
|
indent: usize,
|
||||||
) -> fmt::Result {
|
) -> Result {
|
||||||
let mut attr_iter = attributes.iter().peekable();
|
let mut attr_iter = attributes.iter().peekable();
|
||||||
|
|
||||||
while let Some(attr) = attr_iter.next() {
|
while let Some(attr) = attr_iter.next() {
|
||||||
@@ -178,7 +183,7 @@ fn write_attributes(
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_attribute(buf: &mut String, attr: &ElementAttrNamed, indent: usize) -> fmt::Result {
|
fn write_attribute(buf: &mut String, attr: &ElementAttrNamed, indent: usize) -> Result {
|
||||||
match &attr.attr {
|
match &attr.attr {
|
||||||
ElementAttr::AttrText { name, value } => {
|
ElementAttr::AttrText { name, value } => {
|
||||||
write!(buf, "{name}: \"{value}\"", value = value.value())?;
|
write!(buf, "{name}: \"{value}\"", value = value.value())?;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ pub fn write_ident(
|
|||||||
indent: usize,
|
indent: usize,
|
||||||
) -> fmt::Result {
|
) -> fmt::Result {
|
||||||
match node {
|
match node {
|
||||||
BodyNode::Element(el) => write_element(el, buf, lines, node, indent),
|
BodyNode::Element(el) => write_element(el, buf, lines, indent),
|
||||||
BodyNode::Component(component) => write_component(component, buf, indent, lines),
|
BodyNode::Component(component) => write_component(component, buf, indent, lines),
|
||||||
BodyNode::Text(text) => write_text(text, buf, indent),
|
BodyNode::Text(text) => write_text(text, buf, indent),
|
||||||
BodyNode::RawExpr(exp) => write_raw_expr(exp, indent, lines, buf),
|
BodyNode::RawExpr(exp) => write_raw_expr(exp, indent, lines, buf),
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ use proc_macro2::TokenStream as TokenStream2;
|
|||||||
use quote::ToTokens;
|
use quote::ToTokens;
|
||||||
|
|
||||||
mod block;
|
mod block;
|
||||||
|
mod buffer;
|
||||||
mod children;
|
mod children;
|
||||||
mod component;
|
mod component;
|
||||||
mod element;
|
mod element;
|
||||||
|
|||||||
Reference in new issue
Block a user