Removed justify node
This commit is contained in:
parent
3e6ce77549
commit
a6c067ac43
2 changed files with 54 additions and 76 deletions
|
|
@ -134,10 +134,6 @@ impl EscPosBuilder {
|
||||||
self.extend(&[0x1B, b'd', amount])
|
self.extend(&[0x1B, b'd', amount])
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn write_justify(&mut self, justify: JustifyOrientation) {
|
|
||||||
self.extend(&[0x1B, b'a', justify as u8]);
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn write_text(&mut self, text: &str, text_effect: Option<&[TextEffect]>) -> () {
|
pub fn write_text(&mut self, text: &str, text_effect: Option<&[TextEffect]>) -> () {
|
||||||
let mut buf: Vec<u8> = vec![];
|
let mut buf: Vec<u8> = vec![];
|
||||||
buf.reserve(12 + text.len());
|
buf.reserve(12 + text.len());
|
||||||
|
|
|
||||||
126
src/main.rs
126
src/main.rs
|
|
@ -7,8 +7,6 @@ use std::{error::Error, io::stdin};
|
||||||
mod escpos;
|
mod escpos;
|
||||||
use escpos::{BARTextPosition, BARType, EscPosBuilder, ImageOrientation, QREcc, TextEffect};
|
use escpos::{BARTextPosition, BARType, EscPosBuilder, ImageOrientation, QREcc, TextEffect};
|
||||||
|
|
||||||
use crate::escpos::JustifyOrientation;
|
|
||||||
|
|
||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
struct Document {
|
struct Document {
|
||||||
#[serde(rename = "$value")]
|
#[serde(rename = "$value")]
|
||||||
|
|
@ -27,9 +25,6 @@ enum Node {
|
||||||
#[serde(rename = "p")]
|
#[serde(rename = "p")]
|
||||||
Text(Text),
|
Text(Text),
|
||||||
|
|
||||||
#[serde(rename = "justify")]
|
|
||||||
Justify(Justify),
|
|
||||||
|
|
||||||
#[serde(rename = "img")]
|
#[serde(rename = "img")]
|
||||||
Img(Img),
|
Img(Img),
|
||||||
|
|
||||||
|
|
@ -43,15 +38,6 @@ enum Node {
|
||||||
Feed(Feed),
|
Feed(Feed),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize)]
|
|
||||||
struct Justify {
|
|
||||||
#[serde(rename = "@align")]
|
|
||||||
pub align: JustifyOrientation,
|
|
||||||
|
|
||||||
#[serde(rename = "$value")]
|
|
||||||
pub value: Vec<Node>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
struct Heading {
|
struct Heading {
|
||||||
#[serde(rename = "$value")]
|
#[serde(rename = "$value")]
|
||||||
|
|
@ -141,66 +127,62 @@ where
|
||||||
Ok(Some(out))
|
Ok(Some(out))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_node(node: Node, builder: &mut EscPosBuilder) -> Result<(), Box<dyn Error>> {
|
|
||||||
match node {
|
|
||||||
Node::PlainText(ref t) => {
|
|
||||||
builder.write_text(t.trim(), None);
|
|
||||||
builder.write_feed(None);
|
|
||||||
}
|
|
||||||
Node::Heading(t) => {
|
|
||||||
builder.write_text(
|
|
||||||
&t.value,
|
|
||||||
Some(&[TextEffect::DoubleHeight, TextEffect::DoubleWidth]),
|
|
||||||
);
|
|
||||||
builder.write_feed(None);
|
|
||||||
}
|
|
||||||
Node::Text(t) => {
|
|
||||||
if let Some(ref list) = t.style {
|
|
||||||
builder.write_text(&t.value, Some(list));
|
|
||||||
} else {
|
|
||||||
builder.write_text(&t.value, None);
|
|
||||||
}
|
|
||||||
|
|
||||||
builder.write_feed(None);
|
|
||||||
}
|
|
||||||
Node::Justify(t) => {
|
|
||||||
builder.write_justify(t.align);
|
|
||||||
for i in t.value {
|
|
||||||
handle_node(i, builder)?;
|
|
||||||
}
|
|
||||||
builder.write_justify(JustifyOrientation::default());
|
|
||||||
}
|
|
||||||
Node::Img(img) => {
|
|
||||||
let dynimg = image::open(&img.src)?;
|
|
||||||
builder.write_bitmap(&dynimg, img.orientation);
|
|
||||||
}
|
|
||||||
Node::Qr(q) => {
|
|
||||||
let value = q.value;
|
|
||||||
let value = value.trim();
|
|
||||||
|
|
||||||
if value.is_empty() {
|
|
||||||
return Ok(());
|
|
||||||
};
|
|
||||||
builder.write_qr(&value, q.size, q.ecc);
|
|
||||||
}
|
|
||||||
Node::Barcode(b) => {
|
|
||||||
let value = b.value;
|
|
||||||
let value = value.trim();
|
|
||||||
|
|
||||||
if value.is_empty() {
|
|
||||||
return Ok(());
|
|
||||||
};
|
|
||||||
builder.write_barcode(&value, b.height, b.mod_width, b.text_position, b.bar_type)?;
|
|
||||||
}
|
|
||||||
Node::Feed(f) => {
|
|
||||||
builder.write_feed(f.amount);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
fn handle_document(doc: Document, builder: &mut EscPosBuilder) -> Result<(), Box<dyn Error>> {
|
fn handle_document(doc: Document, builder: &mut EscPosBuilder) -> Result<(), Box<dyn Error>> {
|
||||||
for node in doc.children {
|
for node in doc.children {
|
||||||
handle_node(node, builder)?;
|
match node {
|
||||||
|
Node::PlainText(ref t) => {
|
||||||
|
builder.write_text(t.trim(), None);
|
||||||
|
builder.write_feed(None);
|
||||||
|
}
|
||||||
|
Node::Heading(t) => {
|
||||||
|
builder.write_text(
|
||||||
|
&t.value,
|
||||||
|
Some(&[TextEffect::DoubleHeight, TextEffect::DoubleWidth]),
|
||||||
|
);
|
||||||
|
builder.write_feed(None);
|
||||||
|
}
|
||||||
|
Node::Text(t) => {
|
||||||
|
if let Some(ref list) = t.style {
|
||||||
|
builder.write_text(&t.value, Some(list));
|
||||||
|
} else {
|
||||||
|
builder.write_text(&t.value, None);
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.write_feed(None);
|
||||||
|
}
|
||||||
|
|
||||||
|
Node::Img(img) => {
|
||||||
|
let dynimg = image::open(&img.src)?;
|
||||||
|
builder.write_bitmap(&dynimg, img.orientation);
|
||||||
|
}
|
||||||
|
Node::Qr(q) => {
|
||||||
|
let value = q.value;
|
||||||
|
let value = value.trim();
|
||||||
|
|
||||||
|
if value.is_empty() {
|
||||||
|
return Ok(());
|
||||||
|
};
|
||||||
|
builder.write_qr(&value, q.size, q.ecc);
|
||||||
|
}
|
||||||
|
Node::Barcode(b) => {
|
||||||
|
let value = b.value;
|
||||||
|
let value = value.trim();
|
||||||
|
|
||||||
|
if value.is_empty() {
|
||||||
|
return Ok(());
|
||||||
|
};
|
||||||
|
builder.write_barcode(
|
||||||
|
&value,
|
||||||
|
b.height,
|
||||||
|
b.mod_width,
|
||||||
|
b.text_position,
|
||||||
|
b.bar_type,
|
||||||
|
)?;
|
||||||
|
}
|
||||||
|
Node::Feed(f) => {
|
||||||
|
builder.write_feed(f.amount);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue