Formato de archivo y modelo de documento
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.
La capa del paquete
Sección titulada «La capa del paquete»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 |
El modelo de documento
Sección titulada «El modelo de documento»| 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.
Ida y vuelta sin pérdidas
Sección titulada «Ida y vuelta sin pérdidas»Larrygram solo asigna al modelo una parte del formato. Todo lo demás se conserva:
- Las partes desconocidas permanecen en el paquete y se copian byte a byte al guardar.
- Los atributos e hijos desconocidos de los elementos modelados se guardan en la entidad del modelo y se vuelven a escribir.
- 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.
Renderizado
Sección titulada «Renderizado»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.