data_matrix 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,36 @@
1
+ // IEC16022 bar code generation library
2
+ // Adrian Kennard, Andrews & Arnold Ltd
3
+ // with help from Cliff Hones on the RS coding
4
+ //
5
+ // Revision 1.3 2004/09/09 07:45:09 cvs
6
+ // Added change history to source files
7
+ // Added "info" type to IEC16022
8
+ // Added exact size checking shortcodes on encoding generation for iec16022
9
+ //
10
+
11
+ // Main encoding function
12
+ // Returns the grid (malloced) containing the matrix. L corner at 0,0.
13
+ // Takes suggested size in *Wptr, *Hptr, or 0,0. Fills in actual size.
14
+ // Takes barcodelen and barcode to be encoded
15
+ // Note, if *encodingptr is null, then fills with auto picked (malloced) encoding
16
+ // If lenp not null, then the length of encoded data before any final unlatch or pad is stored
17
+ // If maxp not null, then the max storage of this size code is stored
18
+ // If eccp not null, then the number of ecc bytes used in this size is stored
19
+ // Returns 0 on error (writes to stderr with details).
20
+
21
+ #ifndef IEC16022ECC200_H
22
+ #define IEC16022ECC200_H 1
23
+
24
+ #define IEC16022ECC200_MAXBARCODE 3116
25
+ #define IEC16022ECC200_ERROR_STRING_TOO_SHORT -1
26
+ #define IEC16022ECC200_ERROR_CANNOT_ENCODE_CHARACTER_X12 -2
27
+ #define IEC16022ECC200_ERROR_UNEXPECTED_FAILURE -3
28
+ #define IEC16022ECC200_ERROR_UNKNOWN_ENCODING -4
29
+ #define IEC16022ECC200_ERROR_DID_NOT_FIT -5
30
+ #define IEC16022ECC200_BARCODE_TOO_LONG -6
31
+
32
+ unsigned char* iec16022ecc200(int *Wptr, int *Hptr, char **encodingptr, const int barcodelen, const unsigned char *barcode,
33
+ int *lenp,int *maxp,int *eccp);
34
+ void iec16022init(int *Wptr, int *Hptr, const char *barcode);
35
+
36
+ #endif
@@ -0,0 +1,122 @@
1
+ // reedsol.c
2
+ //
3
+ // This is a simple Reed-Solomon encoder
4
+ // (C) Cliff Hones 2004
5
+ //
6
+ // It is not written with high efficiency in mind, so is probably
7
+ // not suitable for real-time encoding. The aim was to keep it
8
+ // simple, general and clear.
9
+ //
10
+ // <Some notes on the theory and implementation need to be added here>
11
+
12
+ // Usage:
13
+ // First call rs_init_gf(poly) to set up the Galois Field parameters.
14
+ // Then call rs_init_code(size, index) to set the encoding size
15
+ // Then call rs_encode(datasize, data, out) to encode the data.
16
+ //
17
+ // These can be called repeatedly as required - but note that
18
+ // rs_init_code must be called following any rs_init_gf call.
19
+ //
20
+ // If the parameters are fixed, some of the statics below can be
21
+ // replaced with constants in the obvious way, and additionally
22
+ // malloc/free can be avoided by using static arrays of a suitable
23
+ // size.
24
+
25
+ #include <stdlib.h> // only needed for malloc/free
26
+
27
+ static int gfpoly;
28
+ static int symsize; // in bits
29
+ static int logmod; // 2**symsize - 1
30
+ static int rlen;
31
+
32
+ static int *log = NULL, *alog = NULL, *rspoly = NULL;
33
+
34
+ // rs_init_gf(poly) initialises the parameters for the Galois Field.
35
+ // The symbol size is determined from the highest bit set in poly
36
+ // This implementation will support sizes up to 30 bits (though that
37
+ // will result in very large log/antilog tables) - bit sizes of
38
+ // 8 or 4 are typical
39
+ //
40
+ // The poly is the bit pattern representing the GF characteristic
41
+ // polynomial. e.g. for ECC200 (8-bit symbols) the polynomial is
42
+ // a**8 + a**5 + a**3 + a**2 + 1, which translates to 0x12d.
43
+
44
+ void rs_init_gf (int poly) {
45
+ int m, b, p, v;
46
+ // Return storage from previous setup
47
+ if (log) {
48
+ free(log);
49
+ free(alog);
50
+ free(rspoly);
51
+ rspoly = NULL;
52
+ }
53
+ // Find the top bit, and hence the symbol size
54
+ for (b = 1, m = 0; b <= poly; b <<= 1)
55
+ m++;
56
+ b >>= 1;
57
+ m--;
58
+ gfpoly = poly;
59
+ symsize = m;
60
+ // Calculate the log/alog tables
61
+ logmod = (1 << m) - 1;
62
+ log = (int *) malloc (sizeof (int) * (logmod + 1));
63
+ alog = (int *) malloc (sizeof (int) * logmod);
64
+
65
+ for (p = 1, v = 0; v < logmod; v++) {
66
+ alog[v] = p;
67
+ log[p] = v;
68
+ p <<= 1;
69
+ if (p & b)
70
+ p ^= poly;
71
+ }
72
+ }
73
+
74
+ // rs_init_code(nsym, index) initialises the Reed-Solomon encoder
75
+ // nsym is the number of symbols to be generated (to be appended
76
+ // to the input data). index is usually 1 - it is the index of
77
+ // the constant in the first term (i) of the RS generator polynomial:
78
+ // (x + 2**i)*(x + 2**(i+1))*... [nsym terms]
79
+ // For ECC200, index is 1.
80
+
81
+ void rs_init_code (int nsym, int index) {
82
+ int i, k;
83
+ if (rspoly)
84
+ free(rspoly);
85
+ rspoly = (int *) malloc(sizeof(int) * (nsym + 1));
86
+ rlen = nsym;
87
+
88
+ rspoly[0] = 1;
89
+ for (i = 1; i <= nsym; i++) {
90
+ rspoly[i] = 1;
91
+ for (k = i - 1; k > 0; k--) {
92
+ if (rspoly[k])
93
+ rspoly[k] = alog[(log[rspoly[k]] + index) % logmod];
94
+ rspoly[k] ^= rspoly[k - 1];
95
+ }
96
+ rspoly[0] = alog[(log[rspoly[0]] + index) % logmod];
97
+ index++;
98
+ }
99
+ }
100
+
101
+ // Note that the following uses byte arrays, so is only suitable for
102
+ // symbol sizes up to 8 bits. Just change the data type of data and res
103
+ // to unsigned int * for larger symbols.
104
+
105
+ void rs_encode (int len, unsigned char *data, unsigned char *res) {
106
+ int i, k, m;
107
+ for (i = 0; i < rlen; i++)
108
+ res[i] = 0;
109
+ for (i = 0; i < len; i++) {
110
+ m = res[rlen - 1] ^ data[i];
111
+ for (k = rlen - 1; k > 0; k--) {
112
+ if (m && rspoly[k])
113
+ res[k] = res[k - 1] ^ alog[(log[m] + log[rspoly[k]]) % logmod];
114
+ else
115
+ res[k] = res[k - 1];
116
+ }
117
+ if (m && rspoly[0])
118
+ res[0] = alog[(log[m] + log[rspoly[0]]) % logmod];
119
+ else
120
+ res[0] = 0;
121
+ }
122
+ }
@@ -0,0 +1,10 @@
1
+ #ifndef REEDSOL_H
2
+ #define REEDSOL_H 1
3
+ /* don't compile in the main function from reedsol.c */
4
+ #define LIB
5
+
6
+ void rs_init_gf(int poly);
7
+ void rs_init_code(int nsym, int index);
8
+ void rs_encode(int len, unsigned char *data, unsigned char *res);
9
+
10
+ #endif
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+ require 'data_matrix/version'
3
+ require 'data_matrix/data_matrix'
4
+ require 'data_matrix/encoder'
5
+
6
+ # DataMatrix main module
7
+ module DataMatrix
8
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+ # Encoder ext ruby method aliases
3
+ module DataMatrix
4
+ # encoder class ruby extensions
5
+ class Encoder
6
+ alias to_str to_s
7
+ alias to_a data
8
+
9
+ def initialize(value)
10
+ raise ArgumentError, 'Value must be convertible to string' unless value.respond_to?(:to_s)
11
+ encode_string(value.to_s)
12
+ end
13
+
14
+ def length
15
+ height * width
16
+ end
17
+ alias size length
18
+ end
19
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+ module DataMatrix
3
+ VERSION = '0.1.1'
4
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+ # This file is needed to replace original semacode gem
3
+ require 'data_matrix'
metadata ADDED
@@ -0,0 +1,144 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: data_matrix
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Mikhail Bortnyk
8
+ - Guido Sohne
9
+ autorequire:
10
+ bindir: exe
11
+ cert_chain: []
12
+ date: 2017-03-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.14'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.14'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '10.0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '10.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rake-compiler
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rspec
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '3.0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '3.0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rubocop
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ description: |2
85
+ This Ruby extension implements a DataMatrix encoder for Ruby. It is typically
86
+ used to create semacodes, which are barcodes, that contain URLs. This encoder
87
+ does not create image files or visual representations of the semacode. This is
88
+ because it can be used for more than creating images, such as rendering
89
+ semacodes to HTML, SVG, PDF or even stored in a database or file for later
90
+ use.
91
+ email:
92
+ - vessimir@gmail.com
93
+ - guido@sohne.net
94
+ executables: []
95
+ extensions:
96
+ - ext/data_matrix/extconf.rb
97
+ extra_rdoc_files: []
98
+ files:
99
+ - ".gitignore"
100
+ - ".rspec"
101
+ - ".rubocop.yml"
102
+ - ".travis.yml"
103
+ - Gemfile
104
+ - README.md
105
+ - Rakefile
106
+ - bin/console
107
+ - bin/setup
108
+ - data_matrix.gemspec
109
+ - ext/data_matrix/data_matrix.c
110
+ - ext/data_matrix/data_matrix.h
111
+ - ext/data_matrix/extconf.rb
112
+ - ext/data_matrix/iec16022ecc200.c
113
+ - ext/data_matrix/iec16022ecc200.h
114
+ - ext/data_matrix/reedsol.c
115
+ - ext/data_matrix/reedsol.h
116
+ - lib/data_matrix.rb
117
+ - lib/data_matrix/encoder.rb
118
+ - lib/data_matrix/version.rb
119
+ - lib/semacode.rb
120
+ homepage: https://github.com/vessi/data_matrix
121
+ licenses: []
122
+ metadata:
123
+ allowed_push_host: https://rubygems.org
124
+ post_install_message:
125
+ rdoc_options: []
126
+ require_paths:
127
+ - lib
128
+ required_ruby_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ required_rubygems_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ requirements: []
139
+ rubyforge_project:
140
+ rubygems_version: 2.6.10
141
+ signing_key:
142
+ specification_version: 4
143
+ summary: Create semacodes (2D barcodes) using Ruby.
144
+ test_files: []