diff --git a/FORMATS.md b/FORMATS.md
index cfd4192b..1b8c5ca8 100644
--- a/FORMATS.md
+++ b/FORMATS.md
@@ -245,7 +245,10 @@
Indexed: 1-bit, 8-bit.
RGB: 24-bit, 48-bit.
- Content: Static.
+ Content: Static, Meta data.
+
+ Special properties: Key: "pnm-ascii". Description: True if the image pixels are encoded in ASCII mode.
+ Possible values: bool.
- |
Unsupported |
diff --git a/src/sail-codecs/pnm/helpers.c b/src/sail-codecs/pnm/helpers.c
index 8148514a..05490c80 100644
--- a/src/sail-codecs/pnm/helpers.c
+++ b/src/sail-codecs/pnm/helpers.c
@@ -167,3 +167,26 @@ enum SailPixelFormat pnm_private_rgb_sail_pixel_format(enum SailPnmVersion pnm_v
}
}
+sail_status_t pnm_private_store_ascii(enum SailPnmVersion pnm_version, struct sail_hash_map *special_properties) {
+
+ struct sail_variant *variant;
+ SAIL_TRY(sail_alloc_variant(&variant));
+
+ switch (pnm_version) {
+ case SAIL_PNM_VERSION_P1:
+ case SAIL_PNM_VERSION_P2:
+ case SAIL_PNM_VERSION_P3: {
+ sail_set_variant_bool(variant, true);
+ }
+
+ default: {
+ sail_set_variant_bool(variant, false);
+ }
+ }
+
+ sail_put_hash_map(special_properties, "pnm-ascii", variant);
+
+ sail_destroy_variant(variant);
+
+ return SAIL_OK;
+}
diff --git a/src/sail-codecs/pnm/helpers.h b/src/sail-codecs/pnm/helpers.h
index dcec56e9..0b5db135 100644
--- a/src/sail-codecs/pnm/helpers.h
+++ b/src/sail-codecs/pnm/helpers.h
@@ -56,4 +56,6 @@ SAIL_HIDDEN sail_status_t pnm_private_read_pixels(struct sail_io *io, struct sai
SAIL_HIDDEN enum SailPixelFormat pnm_private_rgb_sail_pixel_format(enum SailPnmVersion pnm_version, unsigned bpc);
+SAIL_HIDDEN sail_status_t pnm_private_store_ascii(enum SailPnmVersion pnm_version, struct sail_hash_map *special_properties);
+
#endif
diff --git a/src/sail-codecs/pnm/pnm.c b/src/sail-codecs/pnm/pnm.c
index 886cf459..db58915c 100644
--- a/src/sail-codecs/pnm/pnm.c
+++ b/src/sail-codecs/pnm/pnm.c
@@ -207,6 +207,14 @@ SAIL_EXPORT sail_status_t sail_codec_load_seek_next_frame_v8_pnm(void *state, st
image_local->source_image->pixel_format = pixel_format;
image_local->source_image->compression = SAIL_COMPRESSION_NONE;
+
+ if (pnm_state->load_options->options & SAIL_OPTION_META_DATA) {
+ SAIL_TRY_OR_CLEANUP(sail_alloc_hash_map(&image_local->source_image->special_properties),
+ /* cleanup */ sail_destroy_image(image_local));
+ SAIL_TRY_OR_CLEANUP(pnm_private_store_ascii(pnm_state->version,
+ image_local->source_image->special_properties),
+ /* cleanup */ sail_destroy_image(image_local));
+ }
}
image_local->width = w;
diff --git a/src/sail-codecs/pnm/pnm.codec.info.in b/src/sail-codecs/pnm/pnm.codec.info.in
index 6e4e991a..4e3dcf47 100644
--- a/src/sail-codecs/pnm/pnm.codec.info.in
+++ b/src/sail-codecs/pnm/pnm.codec.info.in
@@ -11,7 +11,7 @@ extensions=pbm;pgm;ppm;pnm
mime-types=image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-portable-anymap
[load-features]
-features=STATIC;SOURCE-IMAGE
+features=STATIC;META-DATA;SOURCE-IMAGE
tuning=
[save-features]