diff --git a/.travis.yml b/.travis.yml
index 476455a..d3e8f3b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -13,6 +13,7 @@ python:
   - "3.5"
   - "3.6"
   - "3.7"
+  # - "3.8"  #   ERROR: Failed building wheel for h5py
 
 before_script:
   - wget http://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh
diff --git a/CHANGES.rst b/CHANGES.rst
index dc881a7..7c44698 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -15,6 +15,12 @@ Production
 
 :2021.1.7: expected *2020.01*
 
+    * `#213 <https://github.com/prjemian/spec2nexus/issues/213>`_
+       copy data file to gallery
+
+    * `#188 <https://github.com/prjemian/spec2nexus/issues/188>`_
+       catenate continued lines before parsing data
+
 :2021.1.6: released *2019.11.01*
 
     * `#210 <https://github.com/prjemian/spec2nexus/issues/210>`_
diff --git a/src/spec2nexus/spec.py b/src/spec2nexus/spec.py
index 1ef4c78..b482740 100644
--- a/src/spec2nexus/spec.py
+++ b/src/spec2nexus/spec.py
@@ -615,7 +615,7 @@ class SpecDataFileScan(object):
         if self.__interpreted__:    # do not do this twice
             return
         self.__lazy_interpret__ = False     # set now to avoid recursion
-        lines = self.raw.splitlines()
+        lines = self.raw.replace('\\\n', ' ').splitlines()
         for _i, line in enumerate(lines, start=1):
             if len(line) == 0:
                 continue            # ignore blank lines
@@ -681,8 +681,7 @@ class SpecDataFileScan(object):
     def _interpret_data_row(self, row_text):
         buf = {}
         for col, val in enumerate(row_text.split()):
-            label = self.L[col]
-            buf[label] = float(val)
+            buf[self.L[col]] = float(val)
         return buf
 
     def _unique_key(self, label, keylist):
diff --git a/src/spec2nexus/specplot_gallery.py b/src/spec2nexus/specplot_gallery.py
index 873e50a..ecf7379 100755
--- a/src/spec2nexus/specplot_gallery.py
+++ b/src/spec2nexus/specplot_gallery.py
@@ -230,10 +230,18 @@ class PlotSpecFileScans(object):
                 ]
 
             html = buildIndexHtml(specFile, plot_list, problem_scans)
-            f = open(htmlFile, "w")
-            f.write(html)
-            f.close()
+            with open(htmlFile, "w") as f:
+                f.write(html)
             
+        # copy specFile to the plot_path, if newer
+        target = os.path.join(plot_path, os.path.basename(specFile))
+        if (
+            not os.path.exists(target)
+            or
+            (os.path.getmtime(target) < os.path.getmtime(specFile))
+            ):
+            shutil.copyfile(specFile, target)
+
         # touch to update the mtime on the plot_path
         os.utime(plot_path, None)
     

in file startup_1.spec, check that all #L lines are correct
While building unit tests for #51, it was discovered that (at least for) scans 52 and 53 in file `startup_1.spec`, IndexError was raised:

```
Traceback (most recent call last):
  File "/home/mintadmin/Documents/eclipse/spec2nexus/tests/test_diffractometers.py", line 139, in test_src_spec2nexus_data
    geom = dgc.match(scan)
  File "/home/mintadmin/Documents/eclipse/spec2nexus/src/spec2nexus/diffractometers.py", line 121, in match
    scan_G0 = scan.G['G0'].split()
  File "/home/mintadmin/Documents/eclipse/spec2nexus/src/spec2nexus/spec.py", line 485, in __getattribute__
    self.interpret()
  File "/home/mintadmin/Documents/eclipse/spec2nexus/src/spec2nexus/spec.py", line 519, in interpret
    func(self)
  File "/home/mintadmin/Documents/eclipse/spec2nexus/src/spec2nexus/plugins/spec_common.py", line 880, in postprocess
    data_lines_postprocessing(scan)
  File "/home/mintadmin/Documents/eclipse/spec2nexus/src/spec2nexus/plugins/spec_common.py", line 1223, in data_lines_postprocessing
    buf = scan._interpret_data_row(values)
  File "/home/mintadmin/Documents/eclipse/spec2nexus/src/spec2nexus/spec.py", line 566, in _interpret_data_row
    label = self.L[col]
IndexError: list index out of range
```
diff --git a/tests/__init__.py b/tests/__init__.py
index 4ffedaf..706f901 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -46,6 +46,7 @@ def suite(*args, **kw):
     from tests import issue119
     from tests import issue123
     from tests import issue161
+    from tests import issue188
 
     test_list = [
         data_03_06_JanTest,
@@ -70,6 +71,7 @@ def suite(*args, **kw):
         issue119,
         issue123,
         issue161,
+        issue188,
         ]
 
     test_suite = unittest.TestSuite()
diff --git a/tests/issue188.py b/tests/issue188.py
new file mode 100644
index 0000000..4bc88e6
--- /dev/null
+++ b/tests/issue188.py
@@ -0,0 +1,90 @@
+
+'''
+test punx tests/common module (supports unit testing)
+'''
+
+#-----------------------------------------------------------------------------
+# :author:    Pete R. Jemian
+# :email:     prjemian@gmail.com
+# :copyright: (c) 2014-2019, Pete R. Jemian
+#
+# Distributed under the terms of the Creative Commons Attribution 4.0 International Public License.
+#
+# The full license is in the file LICENSE.txt, distributed with this software.
+#-----------------------------------------------------------------------------
+
+import os
+import sys
+import unittest
+
+_test_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
+_path = os.path.abspath(os.path.join(_test_path, 'src'))
+
+sys.path.insert(0, _path)
+sys.path.insert(0, _test_path)
+
+import spec2nexus.extractSpecScan
+import spec2nexus.spec
+
+import tests.common
+
+
+class Issue188(unittest.TestCase):
+   
+    def setUp(self):
+        self.testfile = os.path.join(_path, 'spec2nexus', 'data', 'startup_1.spec')
+        self.sys_argv0 = sys.argv[0]
+
+    def tearDown(self):
+        sys.argv = [self.sys_argv0,]
+
+    def test_scan_unrecognized(self):
+        self.assertTrue(os.path.exists(self.testfile))
+
+        specData = spec2nexus.spec.SpecDataFile(self.testfile)
+        self.assertTrue(isinstance(specData, spec2nexus.spec.SpecDataFile))
+
+        scanNum = 16
+        scan = specData.getScan(scanNum)
+        scan.interpret()
+
+        self.assertTrue(hasattr(scan, "data"))
+        self.assertTrue(hasattr(scan, "_unrecognized"))
+        self.assertEqual(len(scan._unrecognized), 112)
+
+    def test_data_file(self):
+        self.assertTrue(os.path.exists(self.testfile))
+
+        specData = spec2nexus.spec.SpecDataFile(self.testfile)
+        self.assertTrue(isinstance(specData, spec2nexus.spec.SpecDataFile))
+
+        for scanNum in specData.getScanNumbers():
+            scan = specData.getScan(scanNum)
+            self.assertTrue(isinstance(scan, spec2nexus.spec.SpecDataFileScan))
+            self.assertTrue(hasattr(scan, "L"))
+            self.assertIsInstance(scan.L, list)
+            self.assertTrue(hasattr(scan, "N"))
+            self.assertIsInstance(scan.N, list)
+            self.assertGreaterEqual(len(scan.N), 1)
+            self.assertEqual(len(scan.L), scan.N[0], "scan %s #L line" % scanNum)
+
+            self.assertTrue(hasattr(scan, "data"))
+            self.assertIsInstance(scan.data, dict)
+            n = len(scan.data.keys())
+            if n > 0:   # if ==0, then no data present
+                self.assertEqual(len(scan.L), n, "scan %s #L line" % scanNum)
+
+
+def suite(*args, **kw):
+    test_suite = unittest.TestSuite()
+    test_list = [
+        Issue188,
+        ]
+    for test_case in test_list:
+        test_suite.addTest(unittest.makeSuite(test_case))
+    return test_suite
+
+
+if __name__ == '__main__':
+    runner=unittest.TextTestRunner()
+    runner.run(suite())

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest
3.7
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
certifi @ file:///croot/certifi_1671487769961/work/certifi
coverage==7.2.7
cycler==0.11.0
docopt==0.6.2
exceptiongroup==1.2.2
fonttools==4.38.0
h5py==3.8.0
importlib-metadata==6.7.0
iniconfig==2.0.0
kiwisolver==1.4.5
lxml==5.3.1
matplotlib==3.5.3
numpy==1.21.6
packaging==24.0
Pillow==9.5.0
pluggy==1.2.0
pyparsing==3.1.4
pyRestTable==2020.0.8
pytest==7.4.4
python-dateutil==2.9.0.post0
six==1.17.0
-e git+https://github.com/prjemian/spec2nexus.git@ed1f686a83cd0dc4f4167d8a56307897984efde3#egg=spec2nexus
tomli==2.0.1
typing_extensions==4.7.1
zipp==3.15.0

name: spec2nexus
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=22.3.1=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - coverage==7.2.7
      - cycler==0.11.0
      - docopt==0.6.2
      - exceptiongroup==1.2.2
      - fonttools==4.38.0
      - h5py==3.8.0
      - importlib-metadata==6.7.0
      - iniconfig==2.0.0
      - kiwisolver==1.4.5
      - lxml==5.3.1
      - matplotlib==3.5.3
      - numpy==1.21.6
      - packaging==24.0
      - pillow==9.5.0
      - pluggy==1.2.0
      - pyparsing==3.1.4
      - pyresttable==2020.0.8
      - pytest==7.4.4
      - python-dateutil==2.9.0.post0
      - six==1.17.0
      - tomli==2.0.1
      - typing-extensions==4.7.1
      - zipp==3.15.0
prefix: /opt/conda/envs/spec2nexus

tests/issue188.py::Issue188::test_scan_unrecognized
tests/issue188.py::Issue188::test_data_file
src/spec2nexus/specplot_gallery.py .travis.yml CHANGES.rst src/spec2nexus/spec.py
src/spec2nexus/specplot_gallery.py .travis.yml CHANGES.rst src/spec2nexus/spec.py