@jscad/dxf-deserializer 2.3.27 → 3.0.1-alpha.0

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.
@@ -1,8 +1,8 @@
1
- const test = require('ava')
1
+ import test from 'ava'
2
2
 
3
- const countOf = require('../../test/helpers/countOf')
3
+ import { countOf } from '../../test/helpers/countOf.js'
4
4
 
5
- const { deserialize } = require('../index')
5
+ import { deserialize } from '../src/index.js'
6
6
 
7
7
  //
8
8
  // Test suite for DXF deserialization (import)
@@ -216,10 +216,10 @@ SEQEND
216
216
  0
217
217
  ENDSEC`
218
218
  const src3 = deserialize({ filename: 'dxf3-test', output: 'script' }, dxf3)
219
- t.is(countOf('main', src3), 2)
219
+ t.is(countOf('main', src3), 1)
220
220
  t.is(countOf('createPolygon', src3), 11)
221
221
  t.is(countOf('geom3.create', src3), 1)
222
- t.is(countOf('color', src3), 6)
222
+ t.is(countOf('colorize', src3), 1)
223
223
 
224
224
  // DXF 3D POLYLINE with faces, translates to script with 3D geometry
225
225
  })
@@ -293,7 +293,7 @@ ENTITIES
293
293
  ENDSEC`
294
294
  // expect a script which calls createPolygon for each 3DFACE, and creates a new 3D geometry
295
295
  const src1 = deserialize({ filename: 'dxf1-test', output: 'script' }, dxf1)
296
- t.is(countOf('main', src1), 2)
296
+ t.is(countOf('main', src1), 1)
297
297
  t.is(countOf('createPolygon', src1), 3)
298
298
  t.is(countOf('geom3.create', src1), 1)
299
299
  })
@@ -1,10 +1,11 @@
1
- const fs = require('fs')
2
- const path = require('path')
3
- const test = require('ava')
1
+ import fs from 'fs'
2
+ import path from 'path'
4
3
 
5
- const dxf = require('../DxfReader')
4
+ import test from 'ava'
6
5
 
7
- const samplesPath = path.dirname(require.resolve('@jscad/sample-files/package.json'))
6
+ import { reader } from '../src/DxfReader.js'
7
+
8
+ const samplesPath = '../../../node_modules/@jscad/sample-files'
8
9
 
9
10
  //
10
11
  // Test suite for DXF reader
@@ -14,7 +15,7 @@ test('DXF Reader', (t) => {
14
15
  t.deepEqual(true, fs.existsSync(dxfPath))
15
16
 
16
17
  const src = fs.readFileSync(dxfPath, 'UTF8')
17
- const reader = dxf.reader(src)
18
+ const dxfreader = reader(src)
18
19
 
19
- t.is(typeof reader, 'object')
20
+ t.is(typeof dxfreader, 'object')
20
21
  })
@@ -1,12 +1,13 @@
1
- const fs = require('fs')
2
- const path = require('path')
3
- const test = require('ava')
1
+ import fs from 'fs'
2
+ import path from 'path'
4
3
 
5
- const { geometries } = require('@jscad/modeling')
4
+ import test from 'ava'
6
5
 
7
- const { deserialize } = require('../index')
6
+ import { path2 } from '@jscad/modeling'
8
7
 
9
- const samplesPath = path.dirname(require.resolve('@jscad/sample-files/package.json'))
8
+ import { deserialize } from '../src/index.js'
9
+
10
+ const samplesPath = '../../../node_modules/@jscad/sample-files'
10
11
 
11
12
  //
12
13
  // Test suite for DXF deserialization (import)
@@ -21,8 +22,8 @@ test('ASCII DXF R13 to Object Conversion', (t) => {
21
22
  t.true(Array.isArray(objs))
22
23
  t.is(objs.length, 16)
23
24
 
24
- t.true(geometries.path2.isA(objs[0]))
25
- t.true(geometries.path2.isA(objs[15]))
25
+ t.true(path2.isA(objs[0]))
26
+ t.true(path2.isA(objs[15]))
26
27
  })
27
28
 
28
29
  test('ASCII DXF R14 to Object Conversion', (t) => {
@@ -46,7 +47,7 @@ test('ASCII DXF ANSI to Object Conversion', (t) => {
46
47
  t.true(Array.isArray(objs))
47
48
  t.is(objs.length, 1)
48
49
 
49
- t.true(geometries.path2.isA(objs[0]))
50
+ t.true(path2.isA(objs[0]))
50
51
  })
51
52
 
52
53
  test('ASCII DXF ISO to Object Conversion', (t) => {
@@ -59,6 +60,6 @@ test('ASCII DXF ISO to Object Conversion', (t) => {
59
60
  t.true(Array.isArray(objs))
60
61
  t.is(objs.length, 14)
61
62
 
62
- t.true(geometries.path2.isA(objs[0]))
63
- t.true(geometries.path2.isA(objs[13]))
63
+ t.true(path2.isA(objs[0]))
64
+ t.true(path2.isA(objs[13]))
64
65
  })
package/tests/test-dxf.js CHANGED
@@ -1,10 +1,11 @@
1
- const fs = require('fs')
2
- const path = require('path')
3
- const test = require('ava')
1
+ import fs from 'fs'
2
+ import path from 'path'
4
3
 
5
- const { deserialize } = require('../index')
4
+ import test from 'ava'
6
5
 
7
- const samplesPath = path.dirname(require.resolve('@jscad/sample-files/package.json'))
6
+ import { deserialize } from '../src/index.js'
7
+
8
+ const samplesPath = '../../../node_modules/@jscad/sample-files'
8
9
 
9
10
  //
10
11
  // Test suite for DXF deserialization (import)
package/DxfReader.js DELETED
@@ -1,250 +0,0 @@
1
- /*
2
- ## License
3
-
4
- Copyright (c) 2017 Z3 Development https://github.com/z3dev
5
-
6
- All code released under MIT license
7
-
8
- Thanks to @issacs for the sax js library, and inspiration for this reader
9
-
10
- */
11
-
12
- // DXF reader to emit groups of interest to handlers
13
-
14
- ;(function (dxf) { // wrapper for non-node envs
15
- dxf.reader = function (options) { return new DxfReader(options) }
16
-
17
- dxf.STATES = [
18
- 'start',
19
- 'end',
20
- 'error'
21
- ]
22
-
23
- /**
24
- * Class DxfReader
25
- * A class to hold state while reading DXF formatted data.
26
- * @param {Object} [options] - options for parsing
27
- * @param {Boolean} [options.track=true] - track position for error reporting
28
- * @param {Boolean} [options.strict=false] - obey strict DXF specifications
29
- * @constructor
30
- *
31
- * @example
32
- * const dxfPath = path.resolve(__dirname, 'circle10.dxf')
33
- * let src = fs.readFileSync(dxfPath, 'UTF8')
34
- * let reader = dxf.reader({track: true})
35
- * // setup state handling
36
- * reader.on('error',handleError)
37
- * reader.on('start',handleStart)
38
- * reader.on('end' ,handleEnd)
39
- * // setup handling for groups of interest, skip the rest
40
- * reader.absorb(0,handleEntity)
41
- * // start the reader
42
- * reader.write(src).close()
43
- */
44
- function DxfReader (options) {
45
- const reader = this
46
- reader.options = options || {}
47
-
48
- reader.trackPosition = (reader.options.track !== false)
49
- if (reader.trackPosition) {
50
- reader.line = reader.column = reader.c = 0
51
- }
52
- }
53
-
54
- DxfReader.prototype = {
55
- // set a handler for the given state
56
- // see dxf.STATES above
57
- on: function (state, callback) {
58
- // verify the state
59
- // set the callback
60
- const reader = this
61
- reader['on' + state] = callback
62
- },
63
-
64
- // set a handler for the given group and value
65
- absorb: function (group, callback) {
66
- if (this.absorbers === undefined) {
67
- this.absorbers = new Map()
68
- }
69
- this.absorbers.set(group, callback)
70
- },
71
-
72
- // write the given data into the reader, initiating parsing
73
- write: function (data) {
74
- const reader = this
75
- parse(reader, data)
76
- return reader
77
- },
78
-
79
- // close and clear all state
80
- close: function () {
81
- const reader = this
82
- reader.isclosed = true
83
- return reader
84
- }
85
- }
86
-
87
- //
88
- // emit the start of processing to the onstart handler if any
89
- //
90
- const emitstart = (reader) => emitstate(reader, 'onstart', reader.data)
91
-
92
- //
93
- // emit the group (code and value) to asorbers
94
- //
95
- const emitgroup = (reader, group, value) => {
96
- // console.log(group+": "+value)
97
- // emit this group to all listeners
98
- if (reader.absorbers !== undefined) {
99
- const absorber = reader.absorbers.get(group)
100
- if (absorber !== undefined) {
101
- absorber(reader, group, value)
102
- }
103
- }
104
- }
105
-
106
- //
107
- // wrap and emit the given error to the onerror handler if any
108
- //
109
- const emiterror = (reader, er) => {
110
- // closeText(reader)
111
- if (reader.trackPosition) {
112
- er += `
113
- Line: ${reader.line}
114
- Column: ${reader.column}
115
- Char: ${reader.c}`
116
- }
117
- er = new Error(er)
118
- reader.error = er
119
- return emitstate(reader, 'onerror', er)
120
- }
121
-
122
- //
123
- // emit the end of processing to the onend handler if any
124
- //
125
- const emitend = (reader) => emitstate(reader, 'onend', reader.data)
126
-
127
- const emitstate = (reader, state, data) => {
128
- const onhandler = state.toString()
129
- reader[onhandler] && reader[onhandler](reader, data)
130
- return reader
131
- }
132
-
133
- //
134
- // parse the given data in the context of the given reader
135
- //
136
- const parse = (reader, data) => {
137
- // check reader state
138
- if (reader.error) {
139
- throw reader.error // throw the last error
140
- }
141
- if (reader.isclosed) {
142
- return emiterror(reader, 'Cannot write after close')
143
- }
144
-
145
- emitstart(reader)
146
-
147
- if (data === null) {
148
- return emitend(reader)
149
- }
150
-
151
- // initial state to initiate parsing
152
- reader.group = null
153
- reader.value = null
154
- reader.error = null
155
-
156
- reader.position = 0
157
- reader.line = 0
158
- reader.column = 0
159
-
160
- // use or convert the data to String
161
- let i = 0
162
- let c = ''
163
- let l = ''
164
- while (reader.error === null) {
165
- c = charAt(data, i++)
166
- if (!c) {
167
- break
168
- }
169
- if (reader.trackPosition) {
170
- reader.position++
171
- if (c === '\n') {
172
- reader.line++
173
- reader.column = 0
174
- } else {
175
- reader.column++
176
- }
177
- }
178
- // dxf files are parsed line by line
179
- if (c === '\n') {
180
- parseLine(reader, l)
181
- l = ''
182
- } else {
183
- l += c
184
- }
185
- }
186
- // emit state change
187
- emitend(reader)
188
- return reader
189
- }
190
-
191
- /** Parse the given line in the context of the given reader, emitting group value pairs
192
- * @param reader {DxfReader} - context DxfReader to use
193
- * @param line {String} - line to parse
194
- */
195
- const parseLine = (reader, line) => {
196
- line = line.trim()
197
- if (reader.group === null) {
198
- setDxfGroup(reader, line)
199
- reader.value = null
200
- } else {
201
- setDxfValue(reader, line)
202
- }
203
- // handle group and value pairs
204
- if (reader.group !== null && reader.value !== null) {
205
- // emit events for group and value pairs
206
- emitgroup(reader, reader.group, reader.value)
207
-
208
- reader.group = null
209
- reader.value = null
210
- }
211
- }
212
-
213
- /** Parse the given line in the context of the given reader, and update the group
214
- * @param reader {DxfReader} - context DxfReader to use
215
- * @param line {String} - line to parse
216
- */
217
- const setDxfGroup = (reader, line) => {
218
- // groups are numeric
219
- const code = parseInt(line)
220
- if (isNaN(code)) {
221
- emiterror(reader, 'Invalid group (int)')
222
- reader.group = null
223
- } else {
224
- reader.group = code
225
- }
226
- }
227
-
228
- /** Parse the given line in the context of the given reader, and update the (group) value
229
- * @param reader {DxfReader} - context DxfReader to use
230
- * @param line {String} - line to parse
231
- */
232
- const setDxfValue = (reader, line) => {
233
- if (reader.options.strict) {
234
- // TODO evaluate the value based on DXF specifications
235
- reader.value = line
236
- } else {
237
- reader.value = line
238
- }
239
- }
240
-
241
- //
242
- // helper function to return expected values
243
- //
244
- const charAt = (data, i) => {
245
- if (data && data.length > i) {
246
- return data.charAt(i)
247
- }
248
- return ''
249
- }
250
- })(typeof exports === 'undefined' ? this.dxf = {} : exports)