diff --git a/libtest.scad b/libtest.scad
index 2a65f0e..53e7a41 100644
--- a/libtest.scad
+++ b/libtest.scad
@@ -17,6 +17,23 @@
// If not, see .
//
+//!# NopSCADlib
+//! An ever expanding library of parts modelled in OpenSCAD useful for 3D printers and enclosures for electronics, etc.
+//!
+//! It contains lots of vitamins (the RepRap term for non-printed parts), some general purpose printed parts and some utilities.
+//! There are also Python scripts to generate Bills of Materials (BOMs),
+//! STL files for all the printed parts, DXF files for CNC routed parts in a project and a manual containing assembly
+//! instructions and exploded views by scraping markdown embedded in OpenSCAD comments, [see scripts](scripts/readme.md).
+//!
+//! A simple example project can be found [here](examples/MainsBreakOutBox/readme.md).
+//!
+//! For more examples of what it can make see the [gallery](gallery/readme.md).
+//!
+//! The license is GNU General Public License v3.0, see [COPYING](COPYING).
+//!
+//! See [usage](docs/usage.md) for requirements, installation instructions and a usage guide.
+//!
+//!
//
// This file shows all the parts in the library.
//
diff --git a/readme.md b/readme.md
index c4d41c3..5fb7925 100644
--- a/readme.md
+++ b/readme.md
@@ -1,10 +1,12 @@
# NopSCADlib
An ever expanding library of parts modelled in OpenSCAD useful for 3D printers and enclosures for electronics, etc.
-It contains lots of vitamins (the RepRap term for non-printed parts), some general purpose printed parts and
-some utilities. There are also Python scripts to generate Bills of Materials (BOMs),
- STL files for all the printed parts, DXF files for CNC routed parts in a project and a manual containing assembly
-instructions and exploded views by scraping markdown embedded in OpenSCAD comments, [see scripts](scripts/readme.md). A simple example project can be found [here](examples/MainsBreakOutBox/readme.md).
+It contains lots of vitamins (the RepRap term for non-printed parts), some general purpose printed parts and some utilities.
+There are also Python scripts to generate Bills of Materials (BOMs),
+STL files for all the printed parts, DXF files for CNC routed parts in a project and a manual containing assembly
+instructions and exploded views by scraping markdown embedded in OpenSCAD comments, [see scripts](scripts/readme.md).
+
+A simple example project can be found [here](examples/MainsBreakOutBox/readme.md).
For more examples of what it can make see the [gallery](gallery/readme.md).
diff --git a/scripts/tests.py b/scripts/tests.py
index 56468f7..1813794 100755
--- a/scripts/tests.py
+++ b/scripts/tests.py
@@ -97,7 +97,6 @@ def tests(tests):
for dir in [deps_dir, png_dir, bom_dir]:
if not os.path.isdir(dir):
os.makedirs(dir)
- doc_name = "readme.md"
index = {}
bodies = {}
done = []
@@ -108,19 +107,33 @@ def tests(tests):
#
png_name = "libtest.png"
scad_name = "libtest.scad"
- if not os.path.isfile(png_name):
- openscad.run(colour_scheme, "--projection=p", "--imgsize=%d,%d" % (w, h), "--camera=0,0,0,50,0,340,500", "--autocenter", "--viewall", "-o", png_name, scad_name);
- do_cmd(["magick", png_name, "-trim", "-resize", "1280", "-bordercolor", background, "-border", "10", png_name])
+ if os.path.isfile(scad_name):
+ libtest = True
+ lib_blurb = scrape_blurb(scad_name)
+ if not os.path.isfile(png_name):
+ openscad.run(colour_scheme, "--projection=p", "--imgsize=%d,%d" % (w, h), "--camera=0,0,0,50,0,340,500", "--autocenter", "--viewall", "-o", png_name, scad_name);
+ do_cmd(["magick", png_name, "-trim", "-resize", "1280", "-bordercolor", background, "-border", "10", png_name])
+ else:
+ #
+ # Project tests so just a title
+ #
+ libtest = False
+ project = ' '.join(word[0].upper() + word[1:] for word in os.path.basename(os.getcwd()).split('_'))
+ lib_blurb = '#' + project + ' Tests\n'
+
+ doc_base_name = "readme" if libtest else "tests"
+ doc_name = doc_base_name + ".md"
#
# List of individual part files
#
- scads = [i for i in sorted(os.listdir(scad_dir), key = lambda s: s.lower()) if i[-5:] == ".scad"]
+ scads = [i for i in sorted(os.listdir(scad_dir), key = lambda s: s.lower()) if i[-5:] == ".scad"]
+ types = []
for scad in scads:
base_name = scad[:-5]
if not tests or base_name in tests:
done.append(base_name)
- print(base_name)
+ print('\n'+base_name)
cap_name = base_name[0].capitalize() + base_name[1:]
base_name = base_name.lower()
scad_name = scad_dir + '/' + scad
@@ -132,12 +145,15 @@ def tests(tests):
if is_plural(base_name) and os.path.isfile(vits_name):
objects_name = vits_name
- locations = [
- ('vitamins/' + depluralise(base_name) + '.scad', 'Vitamins'),
- ('printed/' + base_name + '.scad', 'Printed'),
- ('utils/' + base_name + '.scad', 'Utilities'),
- ('utils/core/' + base_name + '.scad', 'Core Utilities'),
- ]
+ locations = []
+ if os.path.isdir('vitamins'):
+ locations.append(('vitamins/' + depluralise(base_name) + '.scad', 'Vitamins'))
+ if os.path.isdir('printed'):
+ locations.append(('printed/' + base_name + '.scad', 'Printed'))
+ if os.path.isdir('utils'):
+ locations.append(('utils/' + base_name + '.scad', 'Utilities'))
+ if libtest and os.path.isdir('utils/core'):
+ locations.append(('utils/core/' + base_name + '.scad', 'Core Utilities'))
for name, type in locations:
if os.path.isfile(name):
@@ -147,14 +163,17 @@ def tests(tests):
print("Can't find implementation!")
continue
- vsplit = "AJR" + chr(ord('Z') + 1)
- vtype = locations[0][1]
- types = [vtype + ' ' + vsplit[i] + '-' + chr(ord(vsplit[i + 1]) - 1) for i in range(len(vsplit) - 1)] + [loc[1] for loc in locations[1 :]]
- if type == vtype:
- for i in range(1, len(vsplit)):
- if cap_name[0] < vsplit[i]:
- type = types[i - 1]
- break
+ if libtest:
+ vsplit = "AJR" + chr(ord('Z') + 1)
+ vtype = locations[0][1]
+ types = [vtype + ' ' + vsplit[i] + '-' + chr(ord(vsplit[i + 1]) - 1) for i in range(len(vsplit) - 1)] + [loc[1] for loc in locations[1 :]]
+ if type == vtype:
+ for i in range(1, len(vsplit)):
+ if cap_name[0] < vsplit[i]:
+ type = types[i - 1]
+ break
+ else:
+ types = [loc[1] for loc in locations]
for t in types:
if not t in bodies:
@@ -250,24 +269,7 @@ def tests(tests):
usage()
with open(doc_name, "wt") as doc_file:
- print('# NopSCADlib', file = doc_file)
- print('''\
-An ever expanding library of parts modelled in OpenSCAD useful for 3D printers and enclosures for electronics, etc.
-
-It contains lots of vitamins (the RepRap term for non-printed parts), some general purpose printed parts and
-some utilities. There are also Python scripts to generate Bills of Materials (BOMs),
- STL files for all the printed parts, DXF files for CNC routed parts in a project and a manual containing assembly
-instructions and exploded views by scraping markdown embedded in OpenSCAD comments, [see scripts](scripts/readme.md). A simple example project can be found [here](examples/MainsBreakOutBox/readme.md).
-
-For more examples of what it can make see the [gallery](gallery/readme.md).
-
-The license is GNU General Public License v3.0, see [COPYING](COPYING).
-
-See [usage](docs/usage.md) for requirements, installation instructions and a usage guide.
-
-\n
-''', file = doc_file)
-
+ print(lib_blurb, file = doc_file)
print('## Table of Contents', file = doc_file)
print('
', file = doc_file)
n = 0
@@ -288,10 +290,10 @@ See [usage](docs/usage.md) for requirements, installation instructions and a usa
for type in types:
for line in bodies[type]:
print(line, file = doc_file)
- with open("readme.html", "wt") as html_file:
- do_cmd("python -m markdown -x tables readme.md".split(), html_file)
+ with open(doc_base_name + ".html", "wt") as html_file:
+ do_cmd(("python -m markdown -x tables " + doc_name).split(), html_file)
times.print_times()
- do_cmd('codespell -L od readme.md'.split())
+ do_cmd(('codespell -L od ' + doc_name).split())
if __name__ == '__main__':
for arg in sys.argv[1:]: