release: escpos-vfd 0.3.0
This commit is contained in:
+16
-8
@@ -5,7 +5,7 @@
|
||||
//! функции. Для фоновой сериализации команд из разных частей приложения используйте
|
||||
//! [`crate::VfdWorker`] или `escpos_vfd::tokio::AsyncVfdWorker`.
|
||||
|
||||
use crate::codec::{EpsonCodec, fit_to_width, sanitize_text, truncate_chars};
|
||||
use crate::codec::{EpsonCodec, fit_to_width, truncate_chars};
|
||||
use crate::config::{DisplaySettings, VfdConfig};
|
||||
use crate::error::{Result, VfdError};
|
||||
use serialport::SerialPort;
|
||||
@@ -84,7 +84,7 @@ impl<T: Write> Vfd<T> {
|
||||
/// ```
|
||||
pub fn from_transport(mut transport: T, display: DisplaySettings) -> Result<Self> {
|
||||
display.validate()?;
|
||||
let codec = EpsonCodec::new(display);
|
||||
let codec = EpsonCodec::new(display)?;
|
||||
let init = codec.init();
|
||||
if !init.is_empty() {
|
||||
transport.write_all(&init)?;
|
||||
@@ -138,9 +138,8 @@ impl<T: Write> Vfd<T> {
|
||||
|
||||
/// Выводит подготовленный кадр с начала строки без предварительной очистки.
|
||||
///
|
||||
/// В отличие от [`Vfd::print_line`], метод не выполняет санацию текста. Используйте
|
||||
/// его для заранее подготовленных кадров бегущей строки или тестовых байтовых
|
||||
/// сценариев, когда содержимое уже нормализовано вызывающим кодом.
|
||||
/// В отличие от [`Vfd::print_line`], метод не выполняет типографскую нормализацию до
|
||||
/// подгонки ширины. Управляющие символы всё равно нейтрализуются на этапе кодирования.
|
||||
///
|
||||
/// # Ошибки
|
||||
///
|
||||
@@ -161,11 +160,10 @@ impl<T: Write> Vfd<T> {
|
||||
///
|
||||
/// Возвращает [`VfdError::InvalidCoordinate`] или [`VfdError::Io`].
|
||||
pub fn print_at(&mut self, x: u8, y: u8, text: &str) -> Result<()> {
|
||||
let text = sanitize_text(text);
|
||||
self.print_at_prepared(x, y, &text)
|
||||
self.print_at_prepared(x, y, text)
|
||||
}
|
||||
|
||||
/// Печатает уже подготовленный текст без повторной санации.
|
||||
/// Печатает уже подготовленный текст; управляющие символы нейтрализуются codec-ом.
|
||||
pub(crate) fn print_at_prepared(&mut self, x: u8, y: u8, text: &str) -> Result<()> {
|
||||
self.codec.validate_xy(x, y)?;
|
||||
let remaining = self.columns() - usize::from(x) + 1;
|
||||
@@ -310,4 +308,14 @@ mod tests {
|
||||
vec![0x1B, 0x40, 0x1F, 0x24, 1, 1, 0xF2, b' ', b' ', b' ']
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn high_level_text_neutralizes_protocol_controls() {
|
||||
let display = DisplaySettings::new(8, 1, TextEncoding::Ascii);
|
||||
let mut vfd = Vfd::from_transport(Vec::<u8>::new(), display).unwrap();
|
||||
|
||||
vfd.print_line(1, "A\u{1b}@B\u{0c}C").unwrap();
|
||||
|
||||
assert_eq!(&vfd.into_inner()[6..], b"A @B C ");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user