Ir al contenido

Formato de archivo y modelo de documento

larrygram-vsdx · larrygram-model

El manejo de archivos de Larrygram se divide en dos capas. larrygram-vsdx lee y escribe el archivo; larrygram-model guarda el dibujo en memoria. El modelo no sabe nada de XML ni de archivos zip, así que otros formatos (como el importador de .vsd planificado) se cargan en el mismo modelo.

Un archivo .vsdx, .vssx o .vstx es un paquete OPC: un contenedor zip con [Content_Types].xml, partes de relaciones y partes XML, tal como se describe en la especificación [MS-VSDX] publicada por Microsoft. La capa del paquete solo se ocupa del contenedor. Aplica límites estrictos para que un archivo malformado u hostil no pueda agotar la memoria:

Límite Protege contra
Número de entradas del zip Paquetes con una cantidad enorme de partes
Tamaño sin comprimir de una parte y del paquete completo Entradas sobredimensionadas
Tasa de compresión de una entrada Bombas zip
Profundidad de anidamiento del XML y atributos por elemento XML patológico
Entidad Contiene
Document Tipo (dibujo, galería de símbolos o plantilla), propiedades del documento, páginas, patrones, hojas de estilo
Page Hoja de la página y formas
Master La definición de una forma reutilizable procedente de una galería de símbolos
Shape Secciones, filas y celdas de ShapeSheet; geometría; texto; formas secundarias para los grupos
Stylesheet Estilos de línea, relleno y texto que heredan las formas
Cell La fórmula, el valor en caché y la unidad, guardados por separado

Cada entidad conserva los identificadores propios de Visio (ID, NameU, Name). La herencia de patrones y hojas de estilo se resuelve mediante búsqueda cuando se necesita un valor, nunca se aplana al cargar, así que un archivo guardado conserva su herencia.

Larrygram solo asigna al modelo una parte del formato. Todo lo demás se conserva:

  1. Las partes desconocidas permanecen en el paquete y se copian byte a byte al guardar.
  2. Los atributos e hijos desconocidos de los elementos modelados se guardan en la entidad del modelo y se vuelven a escribir.
  3. Los elementos desconocidos dentro de partes compatibles se conservan en el antecesor modelado más cercano.

Una ida y vuelta no es idéntica byte a byte (el escritor genera las partes de relaciones y el orden de los atributos a su manera), pero produce XML semánticamente equivalente. Todos los archivos del corpus de pruebas del proyecto superan esta comprobación.

Fórmulas de ShapeSheet En desarrollo

Sección titulada «Fórmulas de ShapeSheet »

Cada celda guarda su fórmula como texto junto a su valor en caché. El crate larrygram-shapesheet analiza, imprime y evalúa fórmulas: analiza 976 de las 994 fórmulas distintas del corpus de pruebas y vuelve a imprimir sin cambios todas las que analiza, tiene 42 funciones, resuelve referencias entre formas, patrones, páginas y estilos, y recalcula de forma incremental con detección de ciclos. Aún no está conectado a la edición, la apertura ni el guardado.

larrygram-render construye una escena a partir de los valores de celda en caché y la dibuja en PNG (con tiny-skia) o SVG. El texto se compone con las fuentes Carlito y Selawik incluidas.

Esta página está traducida del inglés. Si algo no se lee bien, avísanos.