rename: qr → barcode v_0
authorFrantišek Kučera <franta-hg@frantovo.cz>
Sat, 01 May 2021 17:59:40 +0200
branchv_0
changeset 5 8f434dc38444
parent 4 500ce0b934e7
child 6 70e7288481fd
rename: qr → barcode
CMakeLists.txt
bash-completion.sh
nbproject/configurations.xml
nbproject/project.xml
src/BarcodeCommand.h
src/CLIParser.h
src/CMakeLists.txt
src/Configuration.h
src/QRCommand.h
src/relpipe-in-barcode.cpp
src/relpipe-in-qr.cpp
--- a/CMakeLists.txt	Fri Apr 16 23:18:03 2021 +0200
+++ b/CMakeLists.txt	Sat May 01 17:59:40 2021 +0200
@@ -13,6 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see <http://www.gnu.org/licenses/>.
 
-project (relpipe-in-qr.cpp)
+project (relpipe-in-barcode.cpp)
 cmake_minimum_required(VERSION 3.7.2)
 add_subdirectory (src)
--- a/bash-completion.sh	Fri Apr 16 23:18:03 2021 +0200
+++ b/bash-completion.sh	Sat May 01 17:59:40 2021 +0200
@@ -13,7 +13,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see <http://www.gnu.org/licenses/>.
 
-_relpipe_in_qr_completion() {
+_relpipe_in_barcode_completion() {
 	local w0 w1 w2 w3
 
 	COMPREPLY=()
@@ -36,4 +36,4 @@
 	fi
 }
 
-complete -F _relpipe_in_qr_completion relpipe-in-qr
+complete -F _relpipe_in_barcode_completion relpipe-in-barcode
--- a/nbproject/configurations.xml	Fri Apr 16 23:18:03 2021 +0200
+++ b/nbproject/configurations.xml	Sat May 01 17:59:40 2021 +0200
@@ -42,8 +42,8 @@
   <logicalFolder name="root" displayName="root" projectFiles="true" kind="ROOT">
     <df root="." name="0">
       <df name="src">
-        <in>QRCommand.h</in>
-        <in>relpipe-in-qr.cpp</in>
+        <in>BarcodeCommand.h</in>
+        <in>relpipe-in-barcode.cpp</in>
       </df>
     </df>
     <logicalFolder name="ExternalFiles"
@@ -99,7 +99,7 @@
           <preBuildFirst>true</preBuildFirst>
         </preBuild>
       </makefileType>
-      <item path="src/relpipe-in-qr.cpp" ex="false" tool="1" flavor2="0">
+      <item path="src/relpipe-in-barcode.cpp" ex="false" tool="1" flavor2="0">
         <ccTool flags="0">
         </ccTool>
       </item>
@@ -133,7 +133,7 @@
           <preBuildFirst>true</preBuildFirst>
         </preBuild>
       </makefileType>
-      <item path="src/QRCommand.h" ex="false" tool="3" flavor2="0">
+      <item path="src/BarcodeCommand.h" ex="false" tool="3" flavor2="0">
       </item>
     </conf>
   </confs>
--- a/nbproject/project.xml	Fri Apr 16 23:18:03 2021 +0200
+++ b/nbproject/project.xml	Sat May 01 17:59:40 2021 +0200
@@ -3,7 +3,7 @@
     <type>org.netbeans.modules.cnd.makeproject</type>
     <configuration>
         <data xmlns="http://www.netbeans.org/ns/make-project/1">
-            <name>relpipe-in-qr.cpp</name>
+            <name>relpipe-in-barcode.cpp</name>
             <c-extensions/>
             <cpp-extensions>cpp</cpp-extensions>
             <header-extensions>h</header-extensions>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/BarcodeCommand.h	Sat May 01 17:59:40 2021 +0200
@@ -0,0 +1,129 @@
+/**
+ * Relational pipes
+ * Copyright © 2021 František Kučera (Frantovo.cz, GlobalCode.info)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include <codecvt>
+#include <memory>
+#include <algorithm>
+#include <iostream>
+#include <stdexcept>
+
+#include <Magick++.h>
+#include <zbar.h>
+
+#include "Configuration.h"
+
+namespace relpipe {
+namespace in {
+namespace barcode {
+
+class BarcodeCommand {
+private:
+	std::wstring_convert<codecvt_utf8<wchar_t>> convertor; // TODO: use platform encoding as default / check zbar encoding
+
+
+public:
+
+	void process(Configuration& configuration, std::shared_ptr<writer::RelationalWriter> writer, std::function<void() > relationalWriterFlush) {
+
+		// TODO: require PNM input and get rid off the ImageMagick dependency?
+		Magick::Image magick("/dev/stdin");
+		int width = magick.columns();
+		int height = magick.rows();
+		Magick::Blob blob;
+		magick.modifyImage();
+		magick.write(&blob, "GRAY", 8);
+		const void *raw = blob.data();
+
+		zbar::Image image(width, height, "Y800", raw, width * height);
+		zbar::ImageScanner scanner;
+
+		writer->startRelation(L"symbol",{
+			{L"id", relpipe::writer::TypeId::INTEGER},
+			{L"type", relpipe::writer::TypeId::STRING},
+			// {L"addon_name", relpipe::writer::TypeId::STRING},
+			{L"value", relpipe::writer::TypeId::STRING},
+			// {L"xml", relpipe::writer::TypeId::STRING},
+			{L"x", relpipe::writer::TypeId::INTEGER},
+			{L"y", relpipe::writer::TypeId::INTEGER},
+			{L"width", relpipe::writer::TypeId::INTEGER},
+			{L"height", relpipe::writer::TypeId::INTEGER},
+		}, true);
+
+		int n = scanner.scan(image);
+
+		relpipe::common::type::Integer id = 0;
+		for (zbar::Image::SymbolIterator symbol = image.symbol_begin(); symbol != image.symbol_end(); ++symbol, id++) {
+			writer->writeAttribute(&id, typeid (id));
+			writer->writeAttribute(convertor.from_bytes(symbol->get_type_name()));
+			// writer->writeAttribute(convertor.from_bytes(symbol->get_addon_name()));
+			writer->writeAttribute(convertor.from_bytes(symbol->get_data()));
+			// writer->writeAttribute(convertor.from_bytes(symbol->xml()));
+
+			relpipe::common::type::Integer minX = 0;
+			relpipe::common::type::Integer minY = 0;
+			relpipe::common::type::Integer maxX = 0;
+			relpipe::common::type::Integer maxY = 0;
+
+			// TODO: return original polygon in XML
+			for (int i = 0, locationSize = symbol->get_location_size(); i < locationSize; i++) {
+				relpipe::common::type::Integer x = symbol->get_location_x(i);
+				relpipe::common::type::Integer y = symbol->get_location_y(i);
+				minX = minX ? std::min(minX, x) : x;
+				minY = minY ? std::min(minY, y) : y;
+				maxX = std::max(maxX, x);
+				maxY = std::max(maxY, y);
+			}
+
+			relpipe::common::type::Integer width = maxX - minX;
+			relpipe::common::type::Integer height = maxY - minY;
+
+			writer->writeAttribute(&minX, typeid (minX));
+			writer->writeAttribute(&minY, typeid (minY));
+			writer->writeAttribute(&width, typeid (width));
+			writer->writeAttribute(&height, typeid (height));
+		}
+
+		if (configuration.listPolygonPoints) {
+			relpipe::common::type::Integer id = 0;
+
+			writer->startRelation(L"polygon_point",{
+				{L"symbol", relpipe::writer::TypeId::INTEGER},
+				{L"point", relpipe::writer::TypeId::INTEGER},
+				{L"x", relpipe::writer::TypeId::INTEGER},
+				{L"y", relpipe::writer::TypeId::INTEGER},
+			}, true);
+
+			for (zbar::Image::SymbolIterator symbol = image.symbol_begin(); symbol != image.symbol_end(); ++symbol, id++) {
+				for (relpipe::common::type::Integer i = 0, locationSize = symbol->get_location_size(); i < locationSize; i++) {
+					relpipe::common::type::Integer x = symbol->get_location_x(i);
+					relpipe::common::type::Integer y = symbol->get_location_y(i);
+					writer->writeAttribute(&id, typeid (id));
+					writer->writeAttribute(&i, typeid (i));
+					writer->writeAttribute(&x, typeid (x));
+					writer->writeAttribute(&y, typeid (y));
+				}
+			}
+		}
+
+		image.set_data(nullptr, 0);
+	}
+};
+
+}
+}
+}
--- a/src/CLIParser.h	Fri Apr 16 23:18:03 2021 +0200
+++ b/src/CLIParser.h	Sat May 01 17:59:40 2021 +0200
@@ -27,7 +27,7 @@
 
 namespace relpipe {
 namespace in {
-namespace qr {
+namespace barcode {
 
 class CLIParser {
 private:
--- a/src/CMakeLists.txt	Fri Apr 16 23:18:03 2021 +0200
+++ b/src/CMakeLists.txt	Sat May 01 17:59:40 2021 +0200
@@ -13,7 +13,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see <http://www.gnu.org/licenses/>.
 
-set(EXECUTABLE_FILE "relpipe-in-qr")
+set(EXECUTABLE_FILE "relpipe-in-barcode")
 
 # Relpipe libraries:
 INCLUDE(FindPkgConfig)
@@ -29,7 +29,7 @@
 # Executable output:
 add_executable(
 	${EXECUTABLE_FILE}
-	relpipe-in-qr.cpp
+	relpipe-in-barcode.cpp
 )
 
 add_definitions (${RELPIPE_LIBS_CFLAGS_OTHER})
--- a/src/Configuration.h	Fri Apr 16 23:18:03 2021 +0200
+++ b/src/Configuration.h	Sat May 01 17:59:40 2021 +0200
@@ -24,7 +24,7 @@
 
 namespace relpipe {
 namespace in {
-namespace qr {
+namespace barcode {
 
 class Configuration {
 public:
--- a/src/QRCommand.h	Fri Apr 16 23:18:03 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,129 +0,0 @@
-/**
- * Relational pipes
- * Copyright © 2021 František Kučera (Frantovo.cz, GlobalCode.info)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#pragma once
-
-#include <codecvt>
-#include <memory>
-#include <algorithm>
-#include <iostream>
-#include <stdexcept>
-
-#include <Magick++.h>
-#include <zbar.h>
-
-#include "Configuration.h"
-
-namespace relpipe {
-namespace in {
-namespace qr {
-
-class QRCommand {
-private:
-	std::wstring_convert<codecvt_utf8<wchar_t>> convertor; // TODO: use platform encoding as default / check zbar encoding
-
-
-public:
-
-	void process(Configuration& configuration, std::shared_ptr<writer::RelationalWriter> writer, std::function<void() > relationalWriterFlush) {
-
-		// TODO: require PNM input and get rid off the ImageMagick dependency?
-		Magick::Image magick("/dev/stdin");
-		int width = magick.columns();
-		int height = magick.rows();
-		Magick::Blob blob;
-		magick.modifyImage();
-		magick.write(&blob, "GRAY", 8);
-		const void *raw = blob.data();
-
-		zbar::Image image(width, height, "Y800", raw, width * height);
-		zbar::ImageScanner scanner;
-
-		writer->startRelation(L"symbol",{
-			{L"id", relpipe::writer::TypeId::INTEGER},
-			{L"type", relpipe::writer::TypeId::STRING},
-			// {L"addon_name", relpipe::writer::TypeId::STRING},
-			{L"value", relpipe::writer::TypeId::STRING},
-			// {L"xml", relpipe::writer::TypeId::STRING},
-			{L"x", relpipe::writer::TypeId::INTEGER},
-			{L"y", relpipe::writer::TypeId::INTEGER},
-			{L"width", relpipe::writer::TypeId::INTEGER},
-			{L"height", relpipe::writer::TypeId::INTEGER},
-		}, true);
-
-		int n = scanner.scan(image);
-
-		relpipe::common::type::Integer id = 0;
-		for (zbar::Image::SymbolIterator symbol = image.symbol_begin(); symbol != image.symbol_end(); ++symbol, id++) {
-			writer->writeAttribute(&id, typeid (id));
-			writer->writeAttribute(convertor.from_bytes(symbol->get_type_name()));
-			// writer->writeAttribute(convertor.from_bytes(symbol->get_addon_name()));
-			writer->writeAttribute(convertor.from_bytes(symbol->get_data()));
-			// writer->writeAttribute(convertor.from_bytes(symbol->xml()));
-
-			relpipe::common::type::Integer minX = 0;
-			relpipe::common::type::Integer minY = 0;
-			relpipe::common::type::Integer maxX = 0;
-			relpipe::common::type::Integer maxY = 0;
-
-			// TODO: return original polygon in XML
-			for (int i = 0, locationSize = symbol->get_location_size(); i < locationSize; i++) {
-				relpipe::common::type::Integer x = symbol->get_location_x(i);
-				relpipe::common::type::Integer y = symbol->get_location_y(i);
-				minX = minX ? std::min(minX, x) : x;
-				minY = minY ? std::min(minY, y) : y;
-				maxX = std::max(maxX, x);
-				maxY = std::max(maxY, y);
-			}
-
-			relpipe::common::type::Integer width = maxX - minX;
-			relpipe::common::type::Integer height = maxY - minY;
-
-			writer->writeAttribute(&minX, typeid (minX));
-			writer->writeAttribute(&minY, typeid (minY));
-			writer->writeAttribute(&width, typeid (width));
-			writer->writeAttribute(&height, typeid (height));
-		}
-
-		if (configuration.listPolygonPoints) {
-			relpipe::common::type::Integer id = 0;
-
-			writer->startRelation(L"polygon_point",{
-				{L"symbol", relpipe::writer::TypeId::INTEGER},
-				{L"point", relpipe::writer::TypeId::INTEGER},
-				{L"x", relpipe::writer::TypeId::INTEGER},
-				{L"y", relpipe::writer::TypeId::INTEGER},
-			}, true);
-
-			for (zbar::Image::SymbolIterator symbol = image.symbol_begin(); symbol != image.symbol_end(); ++symbol, id++) {
-				for (relpipe::common::type::Integer i = 0, locationSize = symbol->get_location_size(); i < locationSize; i++) {
-					relpipe::common::type::Integer x = symbol->get_location_x(i);
-					relpipe::common::type::Integer y = symbol->get_location_y(i);
-					writer->writeAttribute(&id, typeid (id));
-					writer->writeAttribute(&i, typeid (i));
-					writer->writeAttribute(&x, typeid (x));
-					writer->writeAttribute(&y, typeid (y));
-				}
-			}
-		}
-
-		image.set_data(nullptr, 0);
-	}
-};
-
-}
-}
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/relpipe-in-barcode.cpp	Sat May 01 17:59:40 2021 +0200
@@ -0,0 +1,63 @@
+/**
+ * Relational pipes
+ * Copyright © 2021 František Kučera (Frantovo.cz, GlobalCode.info)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include <cstdlib>
+#include <memory>
+#include <functional>
+
+#include <relpipe/writer/RelationalWriter.h>
+#include <relpipe/writer/RelpipeWriterException.h>
+#include <relpipe/writer/Factory.h>
+#include <relpipe/writer/TypeId.h>
+
+#include <relpipe/cli/CLI.h>
+#include <relpipe/cli/RelpipeCLIException.h>
+
+#include "CLIParser.h"
+#include "Configuration.h"
+
+#include "BarcodeCommand.h"
+
+using namespace relpipe::cli;
+using namespace relpipe::in::barcode;
+using namespace relpipe::writer;
+
+int main(int argc, char** argv) {
+	setlocale(LC_ALL, "");
+	CLI::untieStdIO();
+	CLI cli(argc, argv);
+
+	int resultCode = CLI::EXIT_CODE_UNEXPECTED_ERROR;
+
+	try {
+		CLIParser cliParser;
+		Configuration configuration = cliParser.parse(cli.arguments());
+		BarcodeCommand command;
+		std::shared_ptr<RelationalWriter> writer(Factory::create(std::cout));
+		command.process(configuration, writer, std::bind(fflush, stdout)); // std::bind(fflush, XXX) Factory::create(XXX) must be the same stream XXX
+		resultCode = CLI::EXIT_CODE_SUCCESS;
+	} catch (RelpipeWriterException& e) {
+		fwprintf(stderr, L"Caught Writer exception: %ls\n", e.getMessge().c_str());
+		fwprintf(stderr, L"Debug: Input stream: eof=%ls, lastRead=%d\n", (cin.eof() ? L"true" : L"false"), cin.gcount());
+		resultCode = CLI::EXIT_CODE_DATA_ERROR;
+	} catch (RelpipeCLIException& e) {
+		fwprintf(stderr, L"Caught CLI exception: %ls\n", e.getMessge().c_str());
+		fwprintf(stderr, L"Debug: Input stream: eof=%ls, lastRead=%d\n", (cin.eof() ? L"true" : L"false"), cin.gcount());
+		resultCode = e.getExitCode();
+	}
+
+	return resultCode;
+}
--- a/src/relpipe-in-qr.cpp	Fri Apr 16 23:18:03 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/**
- * Relational pipes
- * Copyright © 2021 František Kučera (Frantovo.cz, GlobalCode.info)
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#include <cstdlib>
-#include <memory>
-#include <functional>
-
-#include <relpipe/writer/RelationalWriter.h>
-#include <relpipe/writer/RelpipeWriterException.h>
-#include <relpipe/writer/Factory.h>
-#include <relpipe/writer/TypeId.h>
-
-#include <relpipe/cli/CLI.h>
-#include <relpipe/cli/RelpipeCLIException.h>
-
-#include "CLIParser.h"
-#include "Configuration.h"
-
-#include "QRCommand.h"
-
-using namespace relpipe::cli;
-using namespace relpipe::in::qr;
-using namespace relpipe::writer;
-
-int main(int argc, char** argv) {
-	setlocale(LC_ALL, "");
-	CLI::untieStdIO();
-	CLI cli(argc, argv);
-
-	int resultCode = CLI::EXIT_CODE_UNEXPECTED_ERROR;
-
-	try {
-		CLIParser cliParser;
-		Configuration configuration = cliParser.parse(cli.arguments());
-		QRCommand command;
-		std::shared_ptr<RelationalWriter> writer(Factory::create(std::cout));
-		command.process(configuration, writer, std::bind(fflush, stdout)); // std::bind(fflush, XXX) Factory::create(XXX) must be the same stream XXX
-		resultCode = CLI::EXIT_CODE_SUCCESS;
-	} catch (RelpipeWriterException& e) {
-		fwprintf(stderr, L"Caught Writer exception: %ls\n", e.getMessge().c_str());
-		fwprintf(stderr, L"Debug: Input stream: eof=%ls, lastRead=%d\n", (cin.eof() ? L"true" : L"false"), cin.gcount());
-		resultCode = CLI::EXIT_CODE_DATA_ERROR;
-	} catch (RelpipeCLIException& e) {
-		fwprintf(stderr, L"Caught CLI exception: %ls\n", e.getMessge().c_str());
-		fwprintf(stderr, L"Debug: Input stream: eof=%ls, lastRead=%d\n", (cin.eof() ? L"true" : L"false"), cin.gcount());
-		resultCode = e.getExitCode();
-	}
-
-	return resultCode;
-}