From 4d6fa44bc363a18e7184b90c59da6b9a73614c5c Mon Sep 17 00:00:00 2001 From: Jonathan Bernard Date: Thu, 8 Dec 2022 18:35:06 -0600 Subject: [PATCH] Add --split option to split over several lines. --- data_uri.nimble | 5 +++-- src/data_uri.nim | 24 ++++++++++++++++++------ src/data_uripkg/version.nim | 2 +- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/data_uri.nimble b/data_uri.nimble index 9bf8f74..8e49189 100644 --- a/data_uri.nimble +++ b/data_uri.nimble @@ -1,6 +1,6 @@ # Package -version = "1.0.0" +version = "1.0.1" author = "Jonathan Bernard" description = "Utility for managing data-uris: transforming data to and from, etc." license = "GPL-3.0-only" @@ -15,9 +15,10 @@ requires @[ "nim >= 1.4.4", "docopt 0.6.8", "filetype", + "zero_functional", "https://git.jdb-software.com/jdb/update-nim-package-version" ] task updateVersion, "Update the version of this package.": - exec "update_nim_package_version data_uri 'src/data_uripkg/version.nim'" \ No newline at end of file + exec "update_nim_package_version data_uri 'src/data_uripkg/version.nim'" diff --git a/src/data_uri.nim b/src/data_uri.nim index 82a9d2a..6f2e9f5 100644 --- a/src/data_uri.nim +++ b/src/data_uri.nim @@ -1,13 +1,13 @@ ## Data URI Utilities -import base64, docopt, filetype, logging, nre, os -from strutils import isEmptyOrWhitespace +import std/[base64, logging, os, sequtils, strutils, wordwrap] +import std/nre except toSeq +import docopt, filetype, zero_functional -include "data_uripkg/version.nim" +import data_uripkg/version let dataUriPattern = re"^data:([^;,]+)?(;base64)?,(.+)$" - proc encodeAsDataUri*(value: string, mimeType: string = ""): string = let actualMimeType = if mimeType.isEmptyOrWhitespace: filetype.match(cast[seq[byte]](value)).mime.value @@ -48,6 +48,10 @@ Options: -t, --type Manually set the MIME type rather than trying to infer it from the file extension. This only applies when encoding files to data-uris. + + -s, --split Split the output across multiple lines with a maximum + of characters on each line. By default the + output is contiguous, all on one line. """ logging.addHandler(newConsoleLogger()) @@ -73,12 +77,20 @@ Options: try: if args["encode"]: let binaryData = readAll(fileIn) - write(fileOut, encodeAsDataUri(binaryData)) + let encodedData = encodeAsDataUri(binaryData) + if args["--split"]: + write(fileOut, encodedData.wrapWords(parseInt($args["--split"]))) + else: write(fileOut, encodedData) if args["decode"]: let dataUri = readAll(fileIn) - write(fileOut, decodeDataUri(dataUri)) + let dataToDecode = (dataUri.splitLines.toSeq --> + map(it.replace(re"\s+", ""))). + join("") + let decodedData = decodeDataUri(dataToDecode) + write(fileOut, decodedData) + except: raise getCurrentException() finally: close(fileIn) close(fileOut) diff --git a/src/data_uripkg/version.nim b/src/data_uripkg/version.nim index 1c01284..5b3a27a 100755 --- a/src/data_uripkg/version.nim +++ b/src/data_uripkg/version.nim @@ -1 +1 @@ -const DATA_URI_VERSION* = "1.0.0" \ No newline at end of file +const DATA_URI_VERSION* = "1.0.1" \ No newline at end of file