Compare commits

..

61 Commits

Author SHA1 Message Date
KV
e4fe099f8c Use ubuntu-latest for the supported Python versions (#442)
Use ubuntu-22.04 only for Python 3.7-3.8
by including them separately into the matrix.
2025-02-15 00:11:55 +01:00
Martin Rieder
e8c482e94e
Update deprecated GitHub Actions and add Python versions (#408)
Running 6 different Python versions (3.7 to 3.12) in parallel now.
NOTE: This is in conflict with #309, but can be resolved easily in a later PR.

GitHub Actions require an update:
- actions/upload-artifact@v3 is scheduled for deprecation on November
30, 2024.
- Similarly, v1/v2 are scheduled for deprecation on June 30, 2024. 
- Updating this comes with a breaking change in upload-artifact@v4:

Uploading to the same named Artifact multiple times.

Due to how Artifacts are created in this new version, it is no longer
possible to upload to the same named Artifact multiple times. You must
either split the uploads into multiple Artifacts with different names,
or only upload once. Otherwise you will encounter an error.

The artifact .zip files therefore have the python version added to
their name.
2024-10-14 19:19:49 +02:00
Daniel Rojas
1c4fd68a2e
Release v0.4.1 2024-07-13 13:23:11 +02:00
Daniel Rojas
542864658f Add v0.4.1 release date 2024-07-13 13:16:08 +02:00
Daniel Rojas
a57c68ae22 Rebuild examples 2024-07-13 13:15:00 +02:00
Daniel Rojas
c73738e041 Bump version to 0.4.1 2024-07-13 13:10:31 +02:00
KV
73f56b2efc Apply black *.py ../../setup.py
black==23.3.0
2024-07-12 19:05:12 +02:00
KV
828de3f118 Apply isort *.py ../../setup.py
isort==5.11.5
2024-07-12 19:04:29 +02:00
KV
38ac23747d Update changelog a bit more 2024-07-12 18:36:35 +02:00
KV
bde949b7d4 Update changelog 2024-07-08 23:19:52 +02:00
KV
ae03bd60e5 Add TODOs about utf-8 encoding/charset (#395) 2024-07-07 16:16:56 +02:00
KV
19cdff1774 Avoid ResourceWarning: unclosed file (#395)
A number of such warnings showed up when running e.g.
PYTHONWARNINGS=always python build_examples.py
PYTHONWARNINGS=always wireviz ../../examples/demo0?.yml
See https://github.com/wireviz/WireViz/pull/309#issuecomment-2170988381

Fix: All open() calls should be in a "with open() as x" statement
to ensure closing the file when exiting the block in any way.
Otherwise, use the new file_read_text() or file_write_text() functions
to read or write the whole utf-8 text file and closing it.
2024-07-07 16:16:56 +02:00
KV
ee1bd7801e Provide more information when raising exception 2024-07-05 18:16:34 +02:00
Martin Rieder
f2a1aa8856 Update comment in src/wireviz/wireviz.py (#392)
Clarify all exceptions catched, including changes in #392

Co-authored-by: kvid <kvid@users.noreply.github.com>
2024-07-05 18:16:34 +02:00
Martin Rieder
0e8ab7a668 Catch also ValueError (#392)
In Windows might ValueError be raised instead of the already
catched exceptions in some cases (depending on the Python version)

Fixes point 2 of https://github.com/wireviz/WireViz/pull/318#pullrequestreview-1457016602
2024-07-05 18:16:34 +02:00
Martin Rieder
42d10dfab4 Catch OSError also with errno=None (#392)
In Windows might OSError(errno = None) be raised instead of the already
catched exceptions in some cases (depending on the Python version)

Fixes #391
2024-07-05 18:16:34 +02:00
kvid
858b2664db Update src/wireviz/wireviz.py (#383)
Raising TypeError is better than assert. (Black reformatted)

Co-authored-by: Andreas Motl <andreas.motl@panodata.org>
2024-07-05 18:23:32 +02:00
KV
5cedba9def Explain unexpeced top-level type (#383)
Might help in reported issues like #342
2024-07-05 18:16:34 +02:00
KV
6d772cf697 Add non-empty label to avoid over-sized loops (#381)
Work-around to improve the #286 use case.
- https://github.com/wireviz/WireViz/issues/286#issuecomment-2094309143
- https://stackoverflow.com/questions/70996779/graphviz-edges-between-cells-in-the-same-html-table-are-too-long
2024-07-05 18:16:34 +02:00
KV
c997bfe19b Rename "sheetsize_default" to <!-- %template_sheetsize% --> (#380)
Fixes #377 (makes HTML output template placeholders more consistent)
2024-07-05 18:16:34 +02:00
KV
795f3321a3 Update changelog (WIP) 2024-07-05 18:16:34 +02:00
Daniel Rojas
eed00e1322 Add changelog for v0.4.1 (WIP) 2024-07-05 18:16:34 +02:00
Daniel Rojas
088c6038c7 Add documentation on template separator character 2024-07-05 18:16:34 +02:00
KV
6488eb582b Avoid Graphviz error when hiding all pins (#375)
Fixes #257
2024-07-05 18:16:34 +02:00
KV
668ba72975 Avoid decimal point and trailing zero for integer BOM quantities (#374)
Fixes #340
2024-07-05 18:16:34 +02:00
KV
177eb9e387 Add link from syntax.md to HTML output templates (#371) 2024-07-05 18:23:11 +02:00
KV
6ba33fb5dc Rename diagram_png_base64 to diagram_png_b64 (#371) 2024-07-05 18:22:24 +02:00
KV
fc7ea088b4 Add HTML output templates README.md (#371)
Describe the HTML Output Templates, how they are specified,
and placeholder usage within these templates.
2024-07-05 18:21:58 +02:00
KV
70a33edca5 Avoid reading diagram file to embed unless used (#371)
Add local replacement_if_used() that call function to read the file
only when needed and append the return value as replacement.
2024-07-05 18:20:57 +02:00
KV
ea26116c81 Add HTML template placeholder for diagram_png_base64 (#371)
This will enable users to replace the SVG diagram with an embedded PNG,
that is an improved work-around when the SVG output from Graphviz
is not looking good. Suggested as work-around for Graphviz bug in
https://github.com/wireviz/WireViz/issues/175#issuecomment-2132206026
2024-07-05 18:16:34 +02:00
KV
f474cddedb Add HTML template placeholders for filename (#371)
This will e.g. enable users to replace the SVG diagram with PNG,
that is needed as a work-around when the SVG output from Graphviz
is not looking good. Suggested as work-around for Graphviz bug in
https://github.com/wireviz/WireViz/issues/175#issuecomment-2132206026
2024-07-05 18:16:34 +02:00
KV
2336231d3e Update APP_URL (#364)
The project was moved into the new organization 2023-05-30, but old
URLs are still working due to automatic redirects by GitHub.

https://github.com/wireviz/WireViz/issues/316#issuecomment-1568748914
2024-07-05 18:16:34 +02:00
Frank Adämmer
a5f91e91b7 Add missing import of embed_svg_images (#363)
Resort module import:

Co-authored-by: kvid <kvid@users.noreply.github.com>
2024-07-05 18:16:34 +02:00
KV
7ae3fb33fd Use output_name as default title (#361)
The CLI handling code was redesigned for v0.4 and it seems the code
to assign a default title from v0.3.1 has been messed up. This bug
has not been triggered by build_examples.py due to it seems to call
the parse() function differently.

The output_name should be used as default title when present.

This will fix the #360 bug report.
2024-07-05 18:16:34 +02:00
KV
82751e439e Move mates processing above tweak processing (#358)
Bug: Not all generated dot output could be changed by tweak entries.
Seen in https://github.com/wireviz/WireViz/issues/325#issuecomment-2116395221

Tweak processing must be the very last dot producing code to enable
tweaking any dot output.

Fix: Move all other dot producing code above Tweak processing.
2024-07-05 18:16:34 +02:00
KV
557122c4a3 Look-up mated connectors before mate processing (#358)
Symptom reported in #355: Unable to connect an arrow (mate) to
pins higher than 1 without failing: ValueError: X is not in list

Bug: The code processing mates used a mix of repeated connector
look-ups and local connector variables, and one variable was used
before it was assigned the correct value.

Fix: The local connector variables are now both assigned initially
before processing each mate, and used when processing instead of
repeated connector look-ups.
2024-07-05 18:16:34 +02:00
KV
a89d04d8ca Add package_data to to setup() call in setup.py (#347)
Specify all HTML files under templates folder
to be included as package data files.
2024-07-05 18:16:34 +02:00
KV
77061a0656 Handle OSError(errno=EINVAL) that might be raised in Windows (#346)
In Windows might OSError(errno=EINVAL) be raised instead of the already
catched exceptions in some cases (depending on the Python version).

Suggested fix posted by JarrettR in
https://github.com/wireviz/WireViz/issues/344#issuecomment-2113476151

Co-authored-by: JarrettR <jrainier@gmail.com>
2024-07-05 18:16:34 +02:00
KV
9435fc2c2f Create PR to collect changes for v0.4.1-rc 2024-06-08 00:43:57 +02:00
Daniel Rojas
954c4f5f92 Merge branch 'release/v0.4-rc2' 2024-05-12 13:37:17 +02:00
Daniel Rojas
33e5ef6831 Add v0.4 release date 2024-05-12 13:36:10 +02:00
KV
9b2b22d6ae Add check for outdated connector attributes 2024-05-09 16:06:22 +02:00
Daniel Rojas
50d29172ee Remove references for unsupported output formats
Remove the references in the CLI help, but keep the placeholders elsewhere in the code as a TODO
2024-05-09 14:10:19 +02:00
Daniel Rojas
591ae7f84a
Apply suggestions from code review
Co-authored-by: kvid <kvid@users.noreply.github.com>
2024-05-09 10:53:32 +02:00
Daniel Rojas
55c6ab51f1 Apply black 2024-05-05 15:50:59 +02:00
Daniel Rojas
b9357f3928 Rebuild examples 2024-05-05 15:34:51 +02:00
Daniel Rojas
487498e128 Merge branch 'release/v0.4-rc' into release/v0.4-rc2
`rc2` branch is based directly on `master`. By merging into `rc2`, any merge conflicts can be resolved while leaving `master` intact until final merge is approved.

# Conflicts:
#	docs/CHANGELOG.md
#	src/wireviz/Harness.py
#	src/wireviz/__init__.py
#	src/wireviz/wireviz.py
2024-05-05 15:30:40 +02:00
Andreas Motl
a16f2e4757 Update .gitignore
Add two more folders to be ignored.

- .idea: Used by PyCharm
- .venv: My convention for creating virtualenvs
2023-09-08 11:49:01 -07:00
Daniel Rojas
b0d0070f08 Bump version to 0.3.2 2021-11-27 13:32:40 +01:00
Julien Lecoeur
9af0cb8ab0 Fix graphviz file header
The two header comments were missing an endline.

Closes #258
2021-11-27 13:27:22 +01:00
Daniel Rojas
7f33517a79 Bump version to 0.3.1 2021-10-25 20:13:24 +02:00
Andreas Motl
80b7a5407b Improve gracefulness when invoking wireviz.parse() without file_out
This happened to be a regression for WireViz-Web [1], which aims to do
as much in memory as possible.

[1] https://github.com/daq-tools/wireviz-web.
2021-10-25 20:05:05 +02:00
Daniel Rojas
be1ecd4f63 Merge branch 'dev' 2021-10-11 21:20:12 +02:00
Daniel Rojas
bdc405a443 Remove duplicate contribution guidelines 2021-03-20 11:16:04 +01:00
Daniel Rojas
55dfc283b3 Release v0.2 2020-10-17 11:50:35 +02:00
Jason
8f6b8a7e84 Add initial contribution guidelines 2020-07-15 20:25:15 +02:00
Daniel Rojas
fffb354d7c Merge branch 'dev' 2020-06-30 17:59:00 +02:00
Daniel Rojas
8b09facfce Merge branch 'dev' 2020-06-29 18:44:59 +02:00
Daniel Rojas
7458118f4d Merge branch 'dev' 2020-06-29 12:37:24 +02:00
Daniel Rojas
8326ddd462 Merge branch 'dev' 2020-06-28 23:01:45 +02:00
Daniel Rojas
4aac32b6bf Merge branch 'dev' 2020-06-28 15:00:40 +02:00
66 changed files with 362 additions and 288 deletions

View File

@ -1,6 +1,31 @@
# Change Log # Change Log
## [0.4](https://github.com/formatc1702/WireViz/tree/v0.4) (2024-05-12) ## [0.4.1] (2024-07-13)
### Improvements to help reported issues
- Print Python & OS versions when raising unexpected OSError related to #346 & #392 (bugfixes below)
- Explain unexpeced top-level type ([#342](https://github.com/wireviz/WireViz/issues/342), [#383](https://github.com/wireviz/WireViz/pull/383))
- Add non-empty label to reduce over-sized loops ([#286](https://github.com/wireviz/WireViz/issues/286), [#381](https://github.com/wireviz/WireViz/pull/381))
- Improve placeholder name consistency ([#377](https://github.com/wireviz/WireViz/issues/377), [#380](https://github.com/wireviz/WireViz/pull/380))
- Add work-around for Graphviz SVG bug ([#175](https://github.com/wireviz/WireViz/issues/175), [#371](https://github.com/wireviz/WireViz/pull/371))
### Bugfixes
- Avoid ResourceWarning: unclosed file ([#309 (comment)](https://github.com/wireviz/WireViz/pull/309#issuecomment-2170988381), [#395](https://github.com/wireviz/WireViz/pull/395))
- Catch ValueError and OSError(errno=None) ([#318 (review)](https://github.com/wireviz/WireViz/pull/318#pullrequestreview-1457016602), [#391](https://github.com/wireviz/WireViz/issues/391), [#392](https://github.com/wireviz/WireViz/pull/392))
- Add minor missing doc entry ([#186 (comment)](https://github.com/wireviz/WireViz/pull/186#issuecomment-2139037434), [#186 (comment)](https://github.com/wireviz/WireViz/pull/186#issuecomment-2155032522))
- Avoid Graphviz error when hiding all pins ([#257](https://github.com/wireviz/WireViz/issues/257), [#375](https://github.com/wireviz/WireViz/pull/375))
- Avoid decimal point and trailing zero for integer BOM quantities ([#340](https://github.com/wireviz/WireViz/issues/340), [#374](https://github.com/wireviz/WireViz/pull/374))
- Update project URL references ([#316 (comment)](https://github.com/wireviz/WireViz/issues/316#issuecomment-1568748914), [#364](https://github.com/wireviz/WireViz/pull/364))
- Add missing import of embed_svg_images ([#363](https://github.com/wireviz/WireViz/pull/363))
- Use correct default title ([#360](https://github.com/wireviz/WireViz/issues/360), [#361](https://github.com/wireviz/WireViz/pull/361))
- Fix bugs in mate processing ([#355](https://github.com/wireviz/WireViz/issues/355), [#358](https://github.com/wireviz/WireViz/pull/358))
- Include missing files in published package ([#345](https://github.com/wireviz/WireViz/issues/345), [#347](https://github.com/wireviz/WireViz/pull/347))
- Catch OSError(errno=EINVAL) ([#344](https://github.com/wireviz/WireViz/issues/344), [#346](https://github.com/wireviz/WireViz/pull/346))
## [0.4](https://github.com/wireviz/WireViz/tree/v0.4) (2024-05-12)
### Backward-incompatible changes ### Backward-incompatible changes
- New syntax for autogenerated components ([#184](https://github.com/wireviz/WireViz/issues/184), [#186](https://github.com/wireviz/WireViz/pull/186)) - New syntax for autogenerated components ([#184](https://github.com/wireviz/WireViz/issues/184), [#186](https://github.com/wireviz/WireViz/pull/186))
@ -9,7 +34,6 @@
- The path specified with the `-o`/`--output-dir` option no longer includes the filename (without extension) of the generated files. Use the `-O`/`--output-name` option to specify a different filename for the generated files. - The path specified with the `-o`/`--output-dir` option no longer includes the filename (without extension) of the generated files. Use the `-O`/`--output-name` option to specify a different filename for the generated files.
- The `.gv` file is no longer included as a default output format (only as an intermediate file during processing) unless specified with the new `-f` option described below. - The `.gv` file is no longer included as a default output format (only as an intermediate file during processing) unless specified with the new `-f` option described below.
### New features ### New features
- Allow mates between connectors ([#134](https://github.com/wireviz/WireViz/issues/134), [#186](https://github.com/wireviz/WireViz/pull/186)) - Allow mates between connectors ([#134](https://github.com/wireviz/WireViz/issues/134), [#186](https://github.com/wireviz/WireViz/pull/186))
@ -25,91 +49,89 @@
- Minor adjustments ([#256](https://github.com/wireviz/WireViz/pull/256)) - Minor adjustments ([#256](https://github.com/wireviz/WireViz/pull/256))
## [0.3.2](https://github.com/formatc1702/WireViz/tree/v0.3.2) (2021-11-27) ## [0.3.2](https://github.com/wireviz/WireViz/tree/v0.3.2) (2021-11-27)
### Hotfix ### Hotfix
- Adjust GraphViz generation code for compatibility with v0.18 of the `graphviz` Python package ([#258](https://github.com/formatc1702/WireViz/issues/258), [#261](https://github.com/formatc1702/WireViz/pull/261)) - Adjust GraphViz generation code for compatibility with v0.18 of the `graphviz` Python package ([#258](https://github.com/wireviz/WireViz/issues/258), [#261](https://github.com/wireviz/WireViz/pull/261))
## [0.3.1](https://github.com/formatc1702/WireViz/tree/v0.3.1) (2021-10-25) ## [0.3.1](https://github.com/wireviz/WireViz/tree/v0.3.1) (2021-10-25)
### Hotfix ### Hotfix
- Assign generic harness title when using WireViz as a module and not specifying an output file name ([#253](https://github.com/formatc1702/WireViz/issues/253), [#254](https://github.com/formatc1702/WireViz/pull/254)) - Assign generic harness title when using WireViz as a module and not specifying an output file name ([#253](https://github.com/wireviz/WireViz/issues/253), [#254](https://github.com/wireviz/WireViz/pull/254))
## [0.3](https://github.com/formatc1702/WireViz/tree/v0.3) (2021-10-11) ## [0.3](https://github.com/wireviz/WireViz/tree/v0.3) (2021-10-11)
### New features ### New features
- Allow referencing a cable's/bundle's wires by color or by label ([#70](https://github.com/formatc1702/WireViz/issues/70), [#169](https://github.com/formatc1702/WireViz/issues/169), [#193](https://github.com/formatc1702/WireViz/issues/193), [#194](https://github.com/formatc1702/WireViz/pull/194)) - Allow referencing a cable's/bundle's wires by color or by label ([#70](https://github.com/wireviz/WireViz/issues/70), [#169](https://github.com/wireviz/WireViz/issues/169), [#193](https://github.com/wireviz/WireViz/issues/193), [#194](https://github.com/wireviz/WireViz/pull/194))
- Allow additional BOM items within components ([#50](https://github.com/formatc1702/WireViz/issues/50), [#115](https://github.com/formatc1702/WireViz/pull/115)) - Allow additional BOM items within components ([#50](https://github.com/wireviz/WireViz/issues/50), [#115](https://github.com/wireviz/WireViz/pull/115))
- Add support for length units in cables and wires ([#7](https://github.com/formatc1702/WireViz/issues/7), [#196](https://github.com/formatc1702/WireViz/pull/196) (with work from [#161](https://github.com/formatc1702/WireViz/pull/161), [#162](https://github.com/formatc1702/WireViz/pull/162), [#171](https://github.com/formatc1702/WireViz/pull/171)), [#198](https://github.com/formatc1702/WireViz/pull/198), [#205](https://github.com/formatc1702/WireViz/issues/205). [#206](https://github.com/formatc1702/WireViz/pull/206)) - Add support for length units in cables and wires ([#7](https://github.com/wireviz/WireViz/issues/7), [#196](https://github.com/wireviz/WireViz/pull/196) (with work from [#161](https://github.com/wireviz/WireViz/pull/161), [#162](https://github.com/wireviz/WireViz/pull/162), [#171](https://github.com/wireviz/WireViz/pull/171)), [#198](https://github.com/wireviz/WireViz/pull/198), [#205](https://github.com/wireviz/WireViz/issues/205). [#206](https://github.com/wireviz/WireViz/pull/206))
- Add option to define connector pin colors ([#53](https://github.com/formatc1702/WireViz/issues/53), [#141](https://github.com/formatc1702/WireViz/pull/141)) - Add option to define connector pin colors ([#53](https://github.com/wireviz/WireViz/issues/53), [#141](https://github.com/wireviz/WireViz/pull/141))
- Remove HTML links from the input attributes ([#164](https://github.com/formatc1702/WireViz/pull/164)) - Remove HTML links from the input attributes ([#164](https://github.com/wireviz/WireViz/pull/164))
- Add harness metadata section ([#158](https://github.com/formatc1702/WireViz/issues/158), [#214](https://github.com/formatc1702/WireViz/pull/214)) - Add harness metadata section ([#158](https://github.com/wireviz/WireViz/issues/158), [#214](https://github.com/wireviz/WireViz/pull/214))
- Add support for supplier and supplier part number information ([#240](https://github.com/formatc1702/WireViz/issues/240), [#241](https://github.com/formatc1702/WireViz/pull/241/)) - Add support for supplier and supplier part number information ([#240](https://github.com/wireviz/WireViz/issues/240), [#241](https://github.com/wireviz/WireViz/pull/241/))
- Add graph rendering options (background colors, fontname, color name display style, ...) ([#158](https://github.com/formatc1702/WireViz/issues/158), [#214](https://github.com/formatc1702/WireViz/pull/214)) - Add graph rendering options (background colors, fontname, color name display style, ...) ([#158](https://github.com/wireviz/WireViz/issues/158), [#214](https://github.com/wireviz/WireViz/pull/214))
- Add support for background colors for cables and connectors, as well as for some individual cells ([#210](https://github.com/formatc1702/WireViz/issues/210), [#219](https://github.com/formatc1702/WireViz/pull/219)) - Add support for background colors for cables and connectors, as well as for some individual cells ([#210](https://github.com/wireviz/WireViz/issues/210), [#219](https://github.com/wireviz/WireViz/pull/219))
- Add optional tweaking of the .gv output ([#215](https://github.com/formatc1702/WireViz/pull/215)) (experimental) - Add optional tweaking of the .gv output ([#215](https://github.com/wireviz/WireViz/pull/215)) (experimental)
### Misc. fixes ### Misc. fixes
- Remove case-sensitivity issues with pin names and labels ([#160](https://github.com/formatc1702/WireViz/issues/160), [#229](https://github.com/formatc1702/WireViz/pull/229)) - Remove case-sensitivity issues with pin names and labels ([#160](https://github.com/wireviz/WireViz/issues/160), [#229](https://github.com/wireviz/WireViz/pull/229))
- Improve type hinting ([#156](https://github.com/formatc1702/WireViz/issues/156), [#163](https://github.com/formatc1702/WireViz/pull/163)) - Improve type hinting ([#156](https://github.com/wireviz/WireViz/issues/156), [#163](https://github.com/wireviz/WireViz/pull/163))
- Move BOM management and HTML functions to separate modules ([#151](https://github.com/formatc1702/WireViz/issues/151), [#192](https://github.com/formatc1702/WireViz/pull/192)) - Move BOM management and HTML functions to separate modules ([#151](https://github.com/wireviz/WireViz/issues/151), [#192](https://github.com/wireviz/WireViz/pull/192))
- Simplify BOM code ([#197](https://github.com/formatc1702/WireViz/pull/197)) - Simplify BOM code ([#197](https://github.com/wireviz/WireViz/pull/197))
- Bug fixes ([#218](https://github.com/formatc1702/WireViz/pull/218), [#221](https://github.com/formatc1702/WireViz/pull/221)) - Bug fixes ([#218](https://github.com/wireviz/WireViz/pull/218), [#221](https://github.com/wireviz/WireViz/pull/221))
### Known issues ### Known issues
- Including images in the harness may lead to issues in the following cases: ([#189](https://github.com/formatc1702/WireViz/pull/189), [#220](https://github.com/formatc1702/WireViz/issues/220)) - Including images in the harness may lead to issues in the following cases: ([#189](https://github.com/wireviz/WireViz/pull/189), [#220](https://github.com/wireviz/WireViz/issues/220))
- When using the `-o`/`--output_file` CLI option, specifying an output path in a different directory from the input file - When using the `-o`/`--output_file` CLI option, specifying an output path in a different directory from the input file
- When using the `--prepend-file` CLI option, specifying a prepend file in a different directory from the mail input file - When using the `--prepend-file` CLI option, specifying a prepend file in a different directory from the mail input file
## [0.2](https://github.com/formatc1702/WireViz/tree/v0.2) (2020-10-17)
## [0.2](https://github.com/wireviz/WireViz/tree/v0.2) (2020-10-17)
### Backward incompatible changes ### Backward incompatible changes
- Change names of connector attributes ([#77](https://github.com/formatc1702/WireViz/issues/77), [#105](https://github.com/formatc1702/WireViz/pull/105)) - Change names of connector attributes ([#77](https://github.com/wireviz/WireViz/issues/77), [#105](https://github.com/wireviz/WireViz/pull/105))
- `pinnumbers` is now `pins` - `pinnumbers` is now `pins`
- `pinout` is now `pinlabels` - `pinout` is now `pinlabels`
- Remove ferrules as a separate connector type ([#78](https://github.com/formatc1702/WireViz/issues/78), [#102](https://github.com/formatc1702/WireViz/pull/102)) - Remove ferrules as a separate connector type ([#78](https://github.com/wireviz/WireViz/issues/78), [#102](https://github.com/wireviz/WireViz/pull/102))
- Simple connectors like ferrules are now defined using the `style: simple` attribute - Simple connectors like ferrules are now defined using the `style: simple` attribute
- Change the way loops are defined ([#79](https://github.com/formatc1702/WireViz/issues/79), [#75](https://github.com/formatc1702/WireViz/pull/75)) - Change the way loops are defined ([#79](https://github.com/wireviz/WireViz/issues/79), [#75](https://github.com/wireviz/WireViz/pull/75))
- Wires looping between two pins of the same connector are now handled via the connector's `loops` attribute. - Wires looping between two pins of the same connector are now handled via the connector's `loops` attribute.
See the [syntax description](syntax.md) for details. See the [syntax description](syntax.md) for details.
### New features ### New features
- Add bidirectional AWG/mm2 conversion ([#40](https://github.com/formatc1702/WireViz/issues/40), [#41](https://github.com/formatc1702/WireViz/pull/41)) - Add bidirectional AWG/mm2 conversion ([#40](https://github.com/wireviz/WireViz/issues/40), [#41](https://github.com/wireviz/WireViz/pull/41))
- Add support for part numbers ([#11](https://github.com/formatc1702/WireViz/pull/11), [#114](https://github.com/formatc1702/WireViz/issues/114), [#121](https://github.com/formatc1702/WireViz/pull/121)) - Add support for part numbers ([#11](https://github.com/wireviz/WireViz/pull/11), [#114](https://github.com/wireviz/WireViz/issues/114), [#121](https://github.com/wireviz/WireViz/pull/121))
- Add support for multicolored wires ([#12](https://github.com/formatc1702/WireViz/issues/12), [#17](https://github.com/formatc1702/WireViz/pull/17), [#96](https://github.com/formatc1702/WireViz/pull/96), [#131](https://github.com/formatc1702/WireViz/issues/131), [#132](https://github.com/formatc1702/WireViz/pull/132)) - Add support for multicolored wires ([#12](https://github.com/wireviz/WireViz/issues/12), [#17](https://github.com/wireviz/WireViz/pull/17), [#96](https://github.com/wireviz/WireViz/pull/96), [#131](https://github.com/wireviz/WireViz/issues/131), [#132](https://github.com/wireviz/WireViz/pull/132))
- Add support for images ([#27](https://github.com/formatc1702/WireViz/issues/27), [#153](https://github.com/formatc1702/WireViz/pull/153)) - Add support for images ([#27](https://github.com/wireviz/WireViz/issues/27), [#153](https://github.com/wireviz/WireViz/pull/153))
- Add ability to export data directly to other programs ([#55](https://github.com/formatc1702/WireViz/pull/55)) - Add ability to export data directly to other programs ([#55](https://github.com/wireviz/WireViz/pull/55))
- Add support for line breaks in various fields ([#49](https://github.com/formatc1702/WireViz/issues/49), [#64](https://github.com/formatc1702/WireViz/pull/64)) - Add support for line breaks in various fields ([#49](https://github.com/wireviz/WireViz/issues/49), [#64](https://github.com/wireviz/WireViz/pull/64))
- Allow using connector pin names to define connections ([#72](https://github.com/formatc1702/WireViz/issues/72), [#139](https://github.com/formatc1702/WireViz/issues/139), [#140](https://github.com/formatc1702/WireViz/pull/140)) - Allow using connector pin names to define connections ([#72](https://github.com/wireviz/WireViz/issues/72), [#139](https://github.com/wireviz/WireViz/issues/139), [#140](https://github.com/wireviz/WireViz/pull/140))
- Make defining connection sets easier and more flexible ([#67](https://github.com/formatc1702/WireViz/issues/67), [#75](https://github.com/formatc1702/WireViz/pull/75)) - Make defining connection sets easier and more flexible ([#67](https://github.com/wireviz/WireViz/issues/67), [#75](https://github.com/wireviz/WireViz/pull/75))
- Add new command line options ([#167](https://github.com/formatc1702/WireViz/issues/167), [#173](https://github.com/formatc1702/WireViz/pull/173)) - Add new command line options ([#167](https://github.com/wireviz/WireViz/issues/167), [#173](https://github.com/wireviz/WireViz/pull/173))
- Add new features to `build_examples.py` ([#118](https://github.com/formatc1702/WireViz/pull/118)) - Add new features to `build_examples.py` ([#118](https://github.com/wireviz/WireViz/pull/118))
- Add new colors ([#103](https://github.com/formatc1702/WireViz/pull/103), [#113](https://github.com/formatc1702/WireViz/pull/113), [#144](https://github.com/formatc1702/WireViz/issues/144), [#145](https://github.com/formatc1702/WireViz/pull/145)) - Add new colors ([#103](https://github.com/wireviz/WireViz/pull/103), [#113](https://github.com/wireviz/WireViz/pull/113), [#144](https://github.com/wireviz/WireViz/issues/144), [#145](https://github.com/wireviz/WireViz/pull/145))
- Improve documentation ([#107](https://github.com/formatc1702/WireViz/issues/107), [#111](https://github.com/formatc1702/WireViz/pull/111)) - Improve documentation ([#107](https://github.com/wireviz/WireViz/issues/107), [#111](https://github.com/wireviz/WireViz/pull/111))
### Misc. fixes ### Misc. fixes
- Improve BOM generation - Improve BOM generation
- Add various input sanity checks - Add various input sanity checks
- Improve HTML output ([#66](https://github.com/formatc1702/WireViz/issues/66), [#136](https://github.com/formatc1702/WireViz/pull/136), [#95](https://github.com/formatc1702/WireViz/pull/95), [#177](https://github.com/formatc1702/WireViz/pull/177)) - Improve HTML output ([#66](https://github.com/wireviz/WireViz/issues/66), [#136](https://github.com/wireviz/WireViz/pull/136), [#95](https://github.com/wireviz/WireViz/pull/95), [#177](https://github.com/wireviz/WireViz/pull/177))
- Fix node rendering bug ([#69](https://github.com/formatc1702/WireViz/issues/69), [#104](https://github.com/formatc1702/WireViz/pull/104)) - Fix node rendering bug ([#69](https://github.com/wireviz/WireViz/issues/69), [#104](https://github.com/wireviz/WireViz/pull/104))
- Improve shield rendering ([#125](https://github.com/formatc1702/WireViz/issues/125), [#126](https://github.com/formatc1702/WireViz/pull/126)) - Improve shield rendering ([#125](https://github.com/wireviz/WireViz/issues/125), [#126](https://github.com/wireviz/WireViz/pull/126))
- Add GitHub Linguist overrides ([#146](https://github.com/formatc1702/WireViz/issues/146), [#154](https://github.com/formatc1702/WireViz/pull/154)) - Add GitHub Linguist overrides ([#146](https://github.com/wireviz/WireViz/issues/146), [#154](https://github.com/wireviz/WireViz/pull/154))
## [0.1](https://github.com/formatc1702/WireViz/tree/v0.1) (2020-06-29) ## [0.1](https://github.com/wireviz/WireViz/tree/v0.1) (2020-06-29)
- Initial release - Initial release

View File

@ -1,6 +1,6 @@
# Contribution Guidelines # Contribution Guidelines
When contributing to this repository, please [submit a new issue](https://github.com/formatc1702/WireViz/issues) first to discuss the proposed change, before submitting a pull request. When contributing to this repository, please [submit a new issue](https://github.com/wireviz/WireViz/issues) first to discuss the proposed change, before submitting a pull request.
## Submitting a new Issue ## Submitting a new Issue
@ -27,7 +27,7 @@ When contributing to this repository, please [submit a new issue](https://github
1. Push the changes to your fork. 1. Push the changes to your fork.
1. Please format your code using [`isort`](https://pycqa.github.io/isort/) and [`black`](https://black.readthedocs.io) before submitting. 1. Please format your code using [`isort`](https://pycqa.github.io/isort/) and [`black`](https://black.readthedocs.io) before submitting.
1. Submit a new pull request, using `dev` as the base branch. 1. Submit a new pull request, using `dev` as the base branch.
- If your code changes or extends the WireViz YAML syntax, be sure to update the [syntax description document](https://github.com/formatc1702/WireViz/blob/dev/docs/syntax.md) in your PR. - If your code changes or extends the WireViz YAML syntax, be sure to update the [syntax description document](https://github.com/wireviz/WireViz/blob/dev/docs/syntax.md) in your PR.
1. Please include in the PR description (and optionally also in the commit message body) a reference (# followed by issue number) to the issue where the suggested changes are discussed. 1. Please include in the PR description (and optionally also in the commit message body) a reference (# followed by issue number) to the issue where the suggested changes are discussed.
### Hints ### Hints

View File

@ -2,7 +2,7 @@
<!-- <!--
The following text is taken from #118 The following text is taken from #118
https://github.com/formatc1702/WireViz/pull/118 https://github.com/wireviz/WireViz/pull/118
TODO: write a better explaination --> TODO: write a better explaination -->

View File

@ -355,6 +355,7 @@ If any component is defined in the `connectors` or `cables` sections but not ref
# If no value is specified for 'title', then the # If no value is specified for 'title', then the
# output filename without extension is used. # output filename without extension is used.
``` ```
See [HTML Output Templates](../src/wireviz/templates/) for how metadata entries can be inserted into the HTML output.
## Options ## Options
@ -392,24 +393,6 @@ If any component is defined in the `connectors` or `cables` sections but not ref
# Character to split template and designator for autogenerated components # Character to split template and designator for autogenerated components
template_separator: <str> # Default = '.' template_separator: <str> # Default = '.'
# Terms to be replaced by user defined terms
terminology: <terminology> # see below
```
## Terminology
A selection of terms can optionally be replaced by user defined terms.
This is a simple literal replacement of such terms in the diagram and BOM output. The original term is assumed in grammatical variations, like "{pin}s" and "{shield}ed", and that might create weird results in some use cases.
These are the supported terms (all entries are optional):
```yaml
terminology:
pin: <str>
wire: <str>
shield: <str>
``` ```

4
examples/demo01.gv generated
View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

2
examples/demo01.html generated
View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>demo01</title> <title>demo01</title>
<style> <style>

4
examples/demo02.gv generated
View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

2
examples/demo02.html generated
View File

@ -3,7 +3,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>WireViz Demo 2</title> <title>WireViz Demo 2</title>
<style> <style>
body { body {

4
examples/ex01.gv generated
View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

2
examples/ex01.html generated
View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>ex01</title> <title>ex01</title>
<style> <style>

4
examples/ex02.gv generated
View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

2
examples/ex02.html generated
View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>ex02</title> <title>ex02</title>
<style> <style>

4
examples/ex03.gv generated
View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

2
examples/ex03.html generated
View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>ex03</title> <title>ex03</title>
<style> <style>

4
examples/ex04.gv generated
View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

2
examples/ex04.html generated
View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>ex04</title> <title>ex04</title>
<style> <style>

4
examples/ex05.gv generated
View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

2
examples/ex05.html generated
View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>ex05</title> <title>ex05</title>
<style> <style>

8
examples/ex06.bom.tsv generated
View File

@ -1,6 +1,6 @@
Id Description Qty Unit Designators Id Description Qty Unit Designators
1 Connector, Molex KK 254, female, 4 pins 6 X1, X2, X3, X4, X5, X6 1 Connector, Molex KK 254, female, 4 pins 6 X1, X2, X3, X4, X5, X6
2 Wire, 0.25 mm², PK 1.0 m W1, W2, W3, W4, W5 2 Wire, 0.25 mm², PK 1 m W1, W2, W3, W4, W5
3 Wire, 0.25 mm², TQ 1.0 m W1, W2, W3, W4, W5 3 Wire, 0.25 mm², TQ 1 m W1, W2, W3, W4, W5
4 Wire, 0.25 mm², VT 1.0 m W1, W2, W3, W4, W5 4 Wire, 0.25 mm², VT 1 m W1, W2, W3, W4, W5
5 Wire, 0.25 mm², YE 1.0 m W1, W2, W3, W4, W5 5 Wire, 0.25 mm², YE 1 m W1, W2, W3, W4, W5

1 Id Description Qty Unit Designators
2 1 Connector, Molex KK 254, female, 4 pins 6 X1, X2, X3, X4, X5, X6
3 2 Wire, 0.25 mm², PK 1.0 1 m W1, W2, W3, W4, W5
4 3 Wire, 0.25 mm², TQ 1.0 1 m W1, W2, W3, W4, W5
5 4 Wire, 0.25 mm², VT 1.0 1 m W1, W2, W3, W4, W5
6 5 Wire, 0.25 mm², YE 1.0 1 m W1, W2, W3, W4, W5

4
examples/ex06.gv generated
View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

10
examples/ex06.html generated
View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>ex06</title> <title>ex06</title>
<style> <style>
@ -716,28 +716,28 @@
<tr> <tr>
<td class="bom_col_id">2</td> <td class="bom_col_id">2</td>
<td class="bom_col_description">Wire, 0.25 mm², PK</td> <td class="bom_col_description">Wire, 0.25 mm², PK</td>
<td class="bom_col_qty">1.0</td> <td class="bom_col_qty">1</td>
<td class="bom_col_unit">m</td> <td class="bom_col_unit">m</td>
<td class="bom_col_designators">W1, W2, W3, W4, W5</td> <td class="bom_col_designators">W1, W2, W3, W4, W5</td>
</tr> </tr>
<tr> <tr>
<td class="bom_col_id">3</td> <td class="bom_col_id">3</td>
<td class="bom_col_description">Wire, 0.25 mm², TQ</td> <td class="bom_col_description">Wire, 0.25 mm², TQ</td>
<td class="bom_col_qty">1.0</td> <td class="bom_col_qty">1</td>
<td class="bom_col_unit">m</td> <td class="bom_col_unit">m</td>
<td class="bom_col_designators">W1, W2, W3, W4, W5</td> <td class="bom_col_designators">W1, W2, W3, W4, W5</td>
</tr> </tr>
<tr> <tr>
<td class="bom_col_id">4</td> <td class="bom_col_id">4</td>
<td class="bom_col_description">Wire, 0.25 mm², VT</td> <td class="bom_col_description">Wire, 0.25 mm², VT</td>
<td class="bom_col_qty">1.0</td> <td class="bom_col_qty">1</td>
<td class="bom_col_unit">m</td> <td class="bom_col_unit">m</td>
<td class="bom_col_designators">W1, W2, W3, W4, W5</td> <td class="bom_col_designators">W1, W2, W3, W4, W5</td>
</tr> </tr>
<tr> <tr>
<td class="bom_col_id">5</td> <td class="bom_col_id">5</td>
<td class="bom_col_description">Wire, 0.25 mm², YE</td> <td class="bom_col_description">Wire, 0.25 mm², YE</td>
<td class="bom_col_qty">1.0</td> <td class="bom_col_qty">1</td>
<td class="bom_col_unit">m</td> <td class="bom_col_unit">m</td>
<td class="bom_col_designators">W1, W2, W3, W4, W5</td> <td class="bom_col_designators">W1, W2, W3, W4, W5</td>
</tr> </tr>

4
examples/ex07.gv generated
View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

2
examples/ex07.html generated
View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>ex07</title> <title>ex07</title>
<style> <style>

4
examples/ex08.gv generated
View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

2
examples/ex08.html generated
View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>ex08</title> <title>ex08</title>
<style> <style>

4
examples/ex09.gv generated
View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

2
examples/ex09.html generated
View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>ex09</title> <title>ex09</title>
<style> <style>

4
examples/ex10.gv generated
View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

2
examples/ex10.html generated
View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>ex10</title> <title>ex10</title>
<style> <style>

4
examples/ex11.gv generated
View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

2
examples/ex11.html generated
View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>ex11</title> <title>ex11</title>
<style> <style>

4
examples/ex12.gv generated
View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

2
examples/ex12.html generated
View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>ex12</title> <title>ex12</title>
<style> <style>

4
examples/ex13.gv generated
View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

2
examples/ex13.html generated
View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>ex13</title> <title>ex13</title>
<style> <style>

4
examples/ex14.gv generated
View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

2
examples/ex14.html generated
View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>ex14</title> <title>ex14</title>
<style> <style>

View File

@ -27,6 +27,7 @@ setup(
keywords="cable connector hardware harness wiring wiring-diagram wiring-harness", keywords="cable connector hardware harness wiring wiring-diagram wiring-harness",
url=APP_URL, url=APP_URL,
package_dir={"": "src"}, package_dir={"": "src"},
package_data={CMD_NAME: ["templates/*.html"]},
packages=find_packages("src"), packages=find_packages("src"),
entry_points={ entry_points={
"console_scripts": [ "console_scripts": [
@ -39,10 +40,6 @@ setup(
"Programming Language :: Python :: 3", "Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Utilities", "Topic :: Utilities",
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
], ],

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from dataclasses import InitVar, asdict, dataclass, field, replace from dataclasses import InitVar, dataclass, field
from enum import Enum, auto from enum import Enum, auto
from pathlib import Path from pathlib import Path
from typing import Dict, List, Optional, Tuple, Union from typing import Dict, List, Optional, Tuple, Union
@ -47,19 +47,6 @@ class Metadata(dict):
pass pass
@dataclass
class Terminology:
"""Terms that the user might want to override"""
pin: Optional[PlainText] = None
wire: Optional[PlainText] = None
shield: Optional[PlainText] = None
def fully_populated(self):
"""Return a copy where empty field values are replaced with their names"""
return replace(self, **{k: v or k for k, v in asdict(self).items()})
@dataclass @dataclass
class Options: class Options:
fontname: PlainText = "arial" fontname: PlainText = "arial"
@ -71,7 +58,6 @@ class Options:
color_mode: ColorMode = "SHORT" color_mode: ColorMode = "SHORT"
mini_bom_mode: bool = True mini_bom_mode: bool = True
template_separator: str = "." template_separator: str = "."
terminology: Optional[Terminology] = None
def __post_init__(self): def __post_init__(self):
if not self.bgcolor_node: if not self.bgcolor_node:
@ -82,7 +68,6 @@ class Options:
self.bgcolor_cable = self.bgcolor_node self.bgcolor_cable = self.bgcolor_node
if not self.bgcolor_bundle: if not self.bgcolor_bundle:
self.bgcolor_bundle = self.bgcolor_cable self.bgcolor_bundle = self.bgcolor_cable
self.terminology = Terminology(**(self.terminology or {}))
@dataclass @dataclass
@ -106,7 +91,6 @@ class Image:
# See also HTML doc at https://graphviz.org/doc/info/shapes.html#html # See also HTML doc at https://graphviz.org/doc/info/shapes.html#html
def __post_init__(self): def __post_init__(self):
if self.fixedsize is None: if self.fixedsize is None:
# Default True if any dimension specified unless self.scale also is specified. # Default True if any dimension specified unless self.scale also is specified.
self.fixedsize = (self.width or self.height) and self.scale is None self.fixedsize = (self.width or self.height) and self.scale is None
@ -181,7 +165,6 @@ class Connector:
additional_components: List[AdditionalComponent] = field(default_factory=list) additional_components: List[AdditionalComponent] = field(default_factory=list)
def __post_init__(self) -> None: def __post_init__(self) -> None:
if isinstance(self.image, dict): if isinstance(self.image, dict):
self.image = Image(**self.image) self.image = Image(**self.image)
@ -291,7 +274,6 @@ class Cable:
additional_components: List[AdditionalComponent] = field(default_factory=list) additional_components: List[AdditionalComponent] = field(default_factory=list)
def __post_init__(self) -> None: def __post_init__(self) -> None:
if isinstance(self.image, dict): if isinstance(self.image, dict):
self.image = Image(**self.image) self.image = Image(**self.image)
@ -401,7 +383,6 @@ class Cable:
to_name: Optional[Designator], to_name: Optional[Designator],
to_pin: NoneOrMorePinIndices, to_pin: NoneOrMorePinIndices,
) -> None: ) -> None:
from_pin = int2tuple(from_pin) from_pin = int2tuple(from_pin)
via_wire = int2tuple(via_wire) via_wire = int2tuple(via_wire)
to_pin = int2tuple(to_pin) to_pin = int2tuple(to_pin)

View File

@ -8,7 +8,6 @@ from pathlib import Path
from typing import Any, List, Union from typing import Any, List, Union
from graphviz import Graph from graphviz import Graph
from wireviz import APP_NAME, APP_URL, __version__, wv_colors from wireviz import APP_NAME, APP_URL, __version__, wv_colors
from wireviz.DataClasses import ( from wireviz.DataClasses import (
Cable, Cable,
@ -17,10 +16,10 @@ from wireviz.DataClasses import (
MatePin, MatePin,
Metadata, Metadata,
Options, Options,
Tweak,
Side, Side,
Tweak,
) )
from wireviz.svgembed import embed_svg_images_file from wireviz.svgembed import embed_svg_images, embed_svg_images_file
from wireviz.wv_bom import ( from wireviz.wv_bom import (
HEADER_MPN, HEADER_MPN,
HEADER_PN, HEADER_PN,
@ -44,11 +43,10 @@ from wireviz.wv_gv_html import (
) )
from wireviz.wv_helper import ( from wireviz.wv_helper import (
awg_equiv, awg_equiv,
file_write_text,
flatten2d, flatten2d,
is_arrow, is_arrow,
mm2_equiv, mm2_equiv,
open_file_read,
open_file_write,
tuplelist2tsv, tuplelist2tsv,
) )
from wireviz.wv_html import generate_html_output from wireviz.wv_html import generate_html_output
@ -59,12 +57,14 @@ OLD_CONNECTOR_ATTR = {
"autogenerate": "is replaced with new syntax in v0.4", "autogenerate": "is replaced with new syntax in v0.4",
} }
def check_old(node: str, old_attr: dict, args: dict) -> None: def check_old(node: str, old_attr: dict, args: dict) -> None:
"""Raise exception for any outdated attributes in args.""" """Raise exception for any outdated attributes in args."""
for attr, descr in old_attr.items(): for attr, descr in old_attr.items():
if attr in args: if attr in args:
raise ValueError(f"'{attr}' in {node}: '{attr}' {descr}") raise ValueError(f"'{attr}' in {node}: '{attr}' {descr}")
@dataclass @dataclass
class Harness: class Harness:
metadata: Metadata metadata: Metadata
@ -77,7 +77,6 @@ class Harness:
self.mates = [] self.mates = []
self._bom = [] # Internal Cache for generated bom self._bom = [] # Internal Cache for generated bom
self.additional_bom_items = [] self.additional_bom_items = []
self.terminology = self.options.terminology.fully_populated()
def add_connector(self, name: str, *args, **kwargs) -> None: def add_connector(self, name: str, *args, **kwargs) -> None:
check_old(f"Connector '{name}'", OLD_CONNECTOR_ATTR, kwargs) check_old(f"Connector '{name}'", OLD_CONNECTOR_ATTR, kwargs)
@ -173,7 +172,7 @@ class Harness:
bgcolor=wv_colors.translate_color(self.options.bgcolor, "HEX"), bgcolor=wv_colors.translate_color(self.options.bgcolor, "HEX"),
nodesep="0.33", nodesep="0.33",
fontname=self.options.fontname, fontname=self.options.fontname,
) ) # TODO: Add graph attribute: charset="utf-8",
dot.attr( dot.attr(
"node", "node",
shape="none", shape="none",
@ -187,7 +186,6 @@ class Harness:
dot.attr("edge", style="bold", fontname=self.options.fontname) dot.attr("edge", style="bold", fontname=self.options.fontname)
for connector in self.connectors.values(): for connector in self.connectors.values():
# If no wires connected (except maybe loop wires)? # If no wires connected (except maybe loop wires)?
if not (connector.ports_left or connector.ports_right): if not (connector.ports_left or connector.ports_right):
connector.ports_left = True # Use left side pins. connector.ports_left = True # Use left side pins.
@ -201,7 +199,7 @@ class Harness:
html_line_breaks(pn_info_string(HEADER_SPN, connector.supplier, connector.spn))], html_line_breaks(pn_info_string(HEADER_SPN, connector.supplier, connector.spn))],
[html_line_breaks(connector.type), [html_line_breaks(connector.type),
html_line_breaks(connector.subtype), html_line_breaks(connector.subtype),
f'{connector.pincount}-{self.terminology.pin}' if connector.show_pincount else None, f'{connector.pincount}-pin' if connector.show_pincount else None,
translate_color(connector.color, self.options.color_mode) if connector.color else None, translate_color(connector.color, self.options.color_mode) if connector.color else None,
html_colorbar(connector.color)], html_colorbar(connector.color)],
'<!-- connector table -->' if connector.style != 'simple' else None, '<!-- connector table -->' if connector.style != 'simple' else None,
@ -254,6 +252,9 @@ class Harness:
pinhtml.append(" </table>") pinhtml.append(" </table>")
if len(pinhtml) == 2: # Table start and end with no rows between?
pinhtml = ["<!-- all pins hidden -->"] # Avoid Graphviz error
html = [ html = [
row.replace("<!-- connector table -->", "\n".join(pinhtml)) row.replace("<!-- connector table -->", "\n".join(pinhtml))
for row in html for row in html
@ -282,6 +283,7 @@ class Harness:
dot.edge( dot.edge(
f"{connector.name}:p{loop[0]}{loop_side}:{loop_dir}", f"{connector.name}:p{loop[0]}{loop_side}:{loop_dir}",
f"{connector.name}:p{loop[1]}{loop_side}:{loop_dir}", f"{connector.name}:p{loop[1]}{loop_side}:{loop_dir}",
label=" ", # Work-around to avoid over-sized loops.
) )
# determine if there are double- or triple-colored wires in the harness; # determine if there are double- or triple-colored wires in the harness;
@ -293,7 +295,6 @@ class Harness:
) )
for cable in self.cables.values(): for cable in self.cables.values():
html = [] html = []
awg_fmt = "" awg_fmt = ""
@ -420,7 +421,7 @@ class Harness:
wirehtml.append(" <tr><td>&nbsp;</td></tr>") # spacer wirehtml.append(" <tr><td>&nbsp;</td></tr>") # spacer
wirehtml.append(" <tr>") wirehtml.append(" <tr>")
wirehtml.append(" <td><!-- s_in --></td>") wirehtml.append(" <td><!-- s_in --></td>")
wirehtml.append(f" <td>{self.terminology.shield.title()}</td>") wirehtml.append(" <td>Shield</td>")
wirehtml.append(" <td><!-- s_out --></td>") wirehtml.append(" <td><!-- s_out --></td>")
wirehtml.append(" </tr>") wirehtml.append(" </tr>")
if isinstance(cable.shield, str): if isinstance(cable.shield, str):
@ -531,6 +532,38 @@ class Harness:
fillcolor=translate_color(bgcolor, "HEX"), fillcolor=translate_color(bgcolor, "HEX"),
) )
# mates
for mate in self.mates:
if mate.shape[-1] == ">":
dir = "both" if mate.shape[0] == "<" else "forward"
else:
dir = "back" if mate.shape[0] == "<" else "none"
if isinstance(mate, MatePin):
color = "#000000"
elif isinstance(mate, MateComponent):
color = "#000000:#000000"
else:
raise Exception(f"{mate} is an unknown mate")
from_connector = self.connectors[mate.from_name]
to_connector = self.connectors[mate.to_name]
if isinstance(mate, MatePin) and from_connector.style != "simple":
from_pin_index = from_connector.pins.index(mate.from_pin)
from_port_str = f":p{from_pin_index+1}r"
else: # MateComponent or style == 'simple'
from_port_str = ""
if isinstance(mate, MatePin) and to_connector.style != "simple":
to_pin_index = to_connector.pins.index(mate.to_pin)
to_port_str = f":p{to_pin_index+1}l"
else: # MateComponent or style == 'simple'
to_port_str = ""
code_from = f"{mate.from_name}{from_port_str}:e"
code_to = f"{mate.to_name}{to_port_str}:w"
dot.attr("edge", color=color, style="dashed", dir=dir)
dot.edge(code_from, code_to)
def typecheck(name: str, value: Any, expect: type) -> None: def typecheck(name: str, value: Any, expect: type) -> None:
if not isinstance(value, expect): if not isinstance(value, expect):
raise Exception( raise Exception(
@ -596,51 +629,9 @@ class Harness:
typecheck("tweak.append", self.tweak.append, str) typecheck("tweak.append", self.tweak.append, str)
dot.body.append(self.tweak.append) dot.body.append(self.tweak.append)
for mate in self.mates: # Tweak processing above must be the last before returning dot.
if mate.shape[0] == "<" and mate.shape[-1] == ">": # Please don't insert any code that might change the dot contents
dir = "both" # after tweak processing.
elif mate.shape[0] == "<":
dir = "back"
elif mate.shape[-1] == ">":
dir = "forward"
else:
dir = "none"
if isinstance(mate, MatePin):
color = "#000000"
elif isinstance(mate, MateComponent):
color = "#000000:#000000"
else:
raise Exception(f"{mate} is an unknown mate")
from_connector = self.connectors[mate.from_name]
if (
isinstance(mate, MatePin)
and self.connectors[mate.from_name].style != "simple"
):
from_pin_index = from_connector.pins.index(mate.from_pin)
from_port_str = f":p{from_pin_index+1}r"
else: # MateComponent or style == 'simple'
from_port_str = ""
if (
isinstance(mate, MatePin)
and self.connectors[mate.to_name].style != "simple"
):
to_pin_index = to_connector.pins.index(mate.to_pin)
to_port_str = (
f":p{to_pin_index+1}l"
if isinstance(mate, MatePin)
and self.connectors[mate.to_name].style != "simple"
else ""
)
else: # MateComponent or style == 'simple'
to_port_str = ""
code_from = f"{mate.from_name}{from_port_str}:e"
to_connector = self.connectors[mate.to_name]
code_to = f"{mate.to_name}{to_port_str}:w"
dot.attr("edge", color=color, style="dashed", dir=dir)
dot.edge(code_from, code_to)
return dot return dot
@ -665,7 +656,7 @@ class Harness:
return data.read() return data.read()
@property @property
def svg(self): def svg(self): # TODO?: Verify xml encoding="utf-8" in SVG?
graph = self.graph graph = self.graph
return embed_svg_images(graph.pipe(format="svg").decode("utf-8"), Path.cwd()) return embed_svg_images(graph.pipe(format="svg").decode("utf-8"), Path.cwd())
@ -700,7 +691,7 @@ class Harness:
# BOM output # BOM output
bomlist = bom_list(self.bom()) bomlist = bom_list(self.bom())
if "tsv" in fmt: if "tsv" in fmt:
open_file_write(f"{filename}.bom.tsv").write(tuplelist2tsv(bomlist)) file_write_text(f"{filename}.bom.tsv", tuplelist2tsv(bomlist))
if "csv" in fmt: if "csv" in fmt:
# TODO: implement CSV output (preferrably using CSV library) # TODO: implement CSV output (preferrably using CSV library)
print("CSV output is not yet supported") print("CSV output is not yet supported")

View File

@ -1,8 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Please don't import anything in this file to avoid issues when it is imported in setup.py # Please don't import anything in this file to avoid issues when it is imported in setup.py
__version__ = "0.5-dev" __version__ = "0.4.1"
CMD_NAME = "wireviz" # Lower case command and module name CMD_NAME = "wireviz" # Lower case command and module name
APP_NAME = "WireViz" # Application name in texts meant to be human readable APP_NAME = "WireViz" # Application name in texts meant to be human readable
APP_URL = "https://github.com/formatc1702/WireViz" APP_URL = "https://github.com/wireviz/WireViz"

View File

@ -8,6 +8,20 @@ from typing import Union
mime_subtype_replacements = {"jpg": "jpeg", "tif": "tiff"} mime_subtype_replacements = {"jpg": "jpeg", "tif": "tiff"}
# TODO: Share cache and code between data_URI_base64() and embed_svg_images()
def data_URI_base64(file: Union[str, Path], media: str = "image") -> str:
"""Return Base64-encoded data URI of input file."""
file = Path(file)
b64 = base64.b64encode(file.read_bytes()).decode("utf-8")
uri = f"data:{media}/{get_mime_subtype(file)};base64, {b64}"
# print(f"data_URI_base64('{file}', '{media}') -> {len(uri)}-character URI")
if len(uri) > 65535:
print(
"data_URI_base64(): Warning: Browsers might have different URI length limitations"
)
return uri
def embed_svg_images(svg_in: str, base_path: Union[str, Path] = Path.cwd()) -> str: def embed_svg_images(svg_in: str, base_path: Union[str, Path] = Path.cwd()) -> str:
images_b64 = {} # cache of base64-encoded images images_b64 = {} # cache of base64-encoded images
@ -45,8 +59,8 @@ def embed_svg_images_file(
) -> None: ) -> None:
filename_in = Path(filename_in).resolve() filename_in = Path(filename_in).resolve()
filename_out = filename_in.with_suffix(".b64.svg") filename_out = filename_in.with_suffix(".b64.svg")
filename_out.write_text( filename_out.write_text( # TODO?: Verify xml encoding="utf-8" in SVG?
embed_svg_images(filename_in.read_text(), filename_in.parent) embed_svg_images(filename_in.read_text(), filename_in.parent)
) ) # TODO: Use encoding="utf-8" in both read_text() and write_text()
if overwrite: if overwrite:
filename_out.replace(filename_in) filename_out.replace(filename_in)

View File

@ -0,0 +1,52 @@
# HTML Output Templates
This is the standard folder where WireViz looks for an HTML output template file.
## Which HTML Output Template File is Used?
A named HTML output template can optionally be specified as
`metadata.template.name` in the YAML input:
```yaml
metadata:
template:
name: din-6771
```
In the case above, WireViz will search for a template file named
`din-6771.html` in these folders:
1. In the same folder as the YAML input file.
2. In this standard template folder.
If no HTML output template is specified, the `simple` template is assumed
(i.e. filename `simple.html`, and in this case,
only the standard template folder is searched).
## Placeholders in HTML Output Templates
HTML output template files might contain placeholders that will be replaced by
generated text by WireViz when producing HTML output based on such a template.
A placeholder starts with `<!-- %`, followed by a keyword, and finally `% -->`.
Note that there must be one single space between `--` and `%` at both ends.
| Placeholder | Replaced by |
| --- | --- |
| `<!-- %generator% -->` | The application name, version, and URL |
| `<!-- %fontname% -->` | The value of `options.fontname` |
| `<!-- %bgcolor% -->` | The HEX color translation of `options.bgcolor` |
| `<!-- %filename% -->` | The output path and filename without extension |
| `<!-- %filename_stem% -->` | The output filename without path nor extension |
| `<!-- %bom% -->` | BOM as HTML table with headers at top |
| `<!-- %bom_reversed% -->` | Reversed BOM as HTML table with headers at bottom |
| `<!-- %sheet_current% -->` | `1` (multi-page documents not yet supported) |
| `<!-- %sheet_total% -->` | `1` (multi-page documents not yet supported) |
| `<!-- %diagram% -->` | Embedded SVG diagram as valid HTML |
| `<!-- %diagram_png_b64% -->` | Embedded base64 encoded PNG diagram as URI |
| `<!-- %{item}% -->` | String or numeric value of `metadata.{item}` |
| `<!-- %{item}_{i}% -->` | Category number `{i}` within dict value of `metadata.{item}` |
| `<!-- %{item}_{i}_{key}% -->` | Value of `metadata.{item}.{category}.{key}` |
| `<!-- %template_sheetsize% -->` | Value of `metadata.template.sheetsize` |
Note that `{item}`, `{category}` and `{key}` in the description above can be
any valid YAML key, and `{i}` is an integer representing the 1-based index of
category entries in a dict `metadata.{item}` entry.
The `{` and `}` characters are not literally part of the syntax, just used in
this documentation to enclose the variable parts of the keywords.

View File

@ -179,7 +179,7 @@
</head> </head>
<body> <body>
<div id="page"> <div id="page">
<div id="frame" class="sheetsize_default"> <div id="frame" class="<!-- %template_sheetsize% -->">
<div id="diagram"> <div id="diagram">

View File

@ -1,6 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import platform
import sys import sys
from pathlib import Path from pathlib import Path
from typing import Any, Dict, List, Tuple, Union from typing import Any, Dict, List, Tuple, Union
@ -14,12 +15,14 @@ from wireviz.DataClasses import Metadata, Options, Tweak
from wireviz.Harness import Harness from wireviz.Harness import Harness
from wireviz.wv_helper import ( from wireviz.wv_helper import (
expand, expand,
file_read_text,
get_single_key_and_value, get_single_key_and_value,
is_arrow, is_arrow,
open_file_read,
smart_file_resolve, smart_file_resolve,
) )
from . import APP_NAME
def parse( def parse(
inp: Union[Path, str, Dict], inp: Union[Path, str, Dict],
@ -86,6 +89,10 @@ def parse(
raise Exception("No output formats or return types specified") raise Exception("No output formats or return types specified")
yaml_data, yaml_file = _get_yaml_data_and_path(inp) yaml_data, yaml_file = _get_yaml_data_and_path(inp)
if not isinstance(yaml_data, dict):
raise TypeError(
f"Expected a dict as top-level YAML input, but got: {type(yaml_data)}"
)
if output_formats: if output_formats:
# need to write data to file, determine output directory and filename # need to write data to file, determine output directory and filename
output_dir = _get_output_dir(yaml_file, output_dir) output_dir = _get_output_dir(yaml_file, output_dir)
@ -117,9 +124,7 @@ def parse(
# When title is not given, either deduce it from filename, or use default text. # When title is not given, either deduce it from filename, or use default text.
if "title" not in harness.metadata: if "title" not in harness.metadata:
harness.metadata["title"] = ( harness.metadata["title"] = output_name or f"{APP_NAME} diagram and BOM"
Path(yaml_file).stem if yaml_file else "WireViz diagram and BOM"
)
# add items # add items
# parse YAML input file ==================================================== # parse YAML input file ====================================================
@ -403,14 +408,21 @@ def _get_yaml_data_and_path(inp: Union[str, Path, Dict]) -> (Dict, Path):
try: try:
yaml_path = Path(inp).expanduser().resolve(strict=True) yaml_path = Path(inp).expanduser().resolve(strict=True)
# if no FileNotFoundError exception happens, get file contents # if no FileNotFoundError exception happens, get file contents
yaml_str = open_file_read(yaml_path).read() yaml_str = file_read_text(yaml_path)
except (FileNotFoundError, OSError) as e: except (FileNotFoundError, OSError, ValueError) as e:
# if inp is a long YAML string, Pathlib will raise OSError: [errno.ENAMETOOLONG] # if inp is a long YAML string, Pathlib will normally raise
# when trying to expand and resolve it as a path. # FileNotFoundError or OSError(errno = ENAMETOOLONG) when
# Catch this error, but raise any others # trying to expand and resolve it as a path, but in Windows
from errno import ENAMETOOLONG # might ValueError or OSError(errno = EINVAL or None) be raised
# instead in some cases (depending on the Python version).
# Catch these specific errors, but raise any others.
if type(e) is OSError and e.errno != ENAMETOOLONG: from errno import EINVAL, ENAMETOOLONG
if type(e) is OSError and e.errno not in (EINVAL, ENAMETOOLONG, None):
print(
f"OSError(errno={e.errno}) in Python {sys.version} at {platform.platform()}"
)
raise e raise e
# file does not exist; assume inp is a YAML string # file does not exist; assume inp is a YAML string
yaml_str = inp yaml_str = inp

View File

@ -107,11 +107,7 @@ def generate_bom(harness: "Harness") -> List[BOMEntry]:
"Connector" "Connector"
+ (f", {connector.type}" if connector.type else "") + (f", {connector.type}" if connector.type else "")
+ (f", {connector.subtype}" if connector.subtype else "") + (f", {connector.subtype}" if connector.subtype else "")
+ ( + (f", {connector.pincount} pins" if connector.show_pincount else "")
f", {connector.pincount} {harness.terminology.pin}s"
if connector.show_pincount
else ""
)
+ ( + (
f", {translate_color(connector.color, harness.options.color_mode)}" f", {translate_color(connector.color, harness.options.color_mode)}"
if connector.color if connector.color
@ -144,7 +140,7 @@ def generate_bom(harness: "Harness") -> List[BOMEntry]:
if cable.gauge if cable.gauge
else " wires" else " wires"
) )
+ (f" {harness.terminology.shield}ed" if cable.shield else "") + (" shielded" if cable.shield else "")
+ ( + (
f", {translate_color(cable.color, harness.options.color_mode)}" f", {translate_color(cable.color, harness.options.color_mode)}"
if cable.color if cable.color
@ -164,7 +160,7 @@ def generate_bom(harness: "Harness") -> List[BOMEntry]:
# add each wire from the bundle to the bom # add each wire from the bundle to the bom
for index, color in enumerate(cable.colors): for index, color in enumerate(cable.colors):
description = ( description = (
harness.terminology.wire.title() "Wire"
+ (f", {cable.type}" if cable.type else "") + (f", {cable.type}" if cable.type else "")
+ (f", {cable.gauge} {cable.gauge_unit}" if cable.gauge else "") + (f", {cable.gauge} {cable.gauge_unit}" if cable.gauge else "")
+ ( + (
@ -208,7 +204,9 @@ def generate_bom(harness: "Harness") -> List[BOMEntry]:
bom.append( bom.append(
{ {
**group_entries[0], **group_entries[0],
"qty": round(total_qty, 3), "qty": int(total_qty)
if float(total_qty).is_integer()
else round(total_qty, 3),
"designators": sorted(set(designators)), "designators": sorted(set(designators)),
} }
) )

View File

@ -11,7 +11,7 @@ if __name__ == "__main__":
import wireviz.wireviz as wv import wireviz.wireviz as wv
from wireviz import APP_NAME, __version__ from wireviz import APP_NAME, __version__
from wireviz.wv_helper import open_file_read from wireviz.wv_helper import file_read_text
format_codes = { format_codes = {
# "c": "csv", # "c": "csv",
@ -111,7 +111,7 @@ def wireviz(file, format, prepend, output_dir, output_name, version):
raise Exception(f"File does not exist:\n{prepend_file}") raise Exception(f"File does not exist:\n{prepend_file}")
print("Prepend file:", prepend_file) print("Prepend file:", prepend_file)
prepend_input += open_file_read(prepend_file).read() + "\n" prepend_input += file_read_text(prepend_file) + "\n"
else: else:
prepend_input = "" prepend_input = ""
@ -130,7 +130,7 @@ def wireviz(file, format, prepend, output_dir, output_name, version):
"Output file: ", f"{Path(_output_dir / _output_name)}.{output_formats_str}" "Output file: ", f"{Path(_output_dir / _output_name)}.{output_formats_str}"
) )
yaml_input = open_file_read(file).read() yaml_input = file_read_text(file)
file_dir = file.parent file_dir = file.parent
yaml_input = prepend_input + yaml_input yaml_input = prepend_input + yaml_input

View File

@ -113,18 +113,31 @@ def clean_whitespace(inp):
def open_file_read(filename): def open_file_read(filename):
"""Open utf-8 encoded text file for reading - remember closing it when finished"""
# TODO: Intelligently determine encoding # TODO: Intelligently determine encoding
return open(filename, "r", encoding="UTF-8") return open(filename, "r", encoding="UTF-8")
def open_file_write(filename): def open_file_write(filename):
"""Open utf-8 encoded text file for writing - remember closing it when finished"""
return open(filename, "w", encoding="UTF-8") return open(filename, "w", encoding="UTF-8")
def open_file_append(filename): def open_file_append(filename):
"""Open utf-8 encoded text file for appending - remember closing it when finished"""
return open(filename, "a", encoding="UTF-8") return open(filename, "a", encoding="UTF-8")
def file_read_text(filename: str) -> str:
"""Read utf-8 encoded text file, close it, and return the text"""
return Path(filename).read_text(encoding="utf-8")
def file_write_text(filename: str, text: str) -> int:
"""Write utf-8 encoded text file, close it, and return the number of characters written"""
return Path(filename).write_text(text, encoding="utf-8")
def is_arrow(inp): def is_arrow(inp):
""" """
Matches strings of one or multiple `-` or `=` (but not mixed) Matches strings of one or multiple `-` or `=` (but not mixed)
@ -144,7 +157,7 @@ def aspect_ratio(image_src):
try: try:
from PIL import Image from PIL import Image
image = Image.open(image_src) with Image.open(image_src) as image:
if image.width > 0 and image.height > 0: if image.width > 0 and image.height > 0:
return image.width / image.height return image.width / image.height
print(f"aspect_ratio(): Invalid image size {image.width} x {image.height}") print(f"aspect_ratio(): Invalid image size {image.width} x {image.height}")

View File

@ -2,15 +2,16 @@
import re import re
from pathlib import Path from pathlib import Path
from typing import Dict, List, Union from typing import Callable, Dict, List, Union
from wireviz import APP_NAME, APP_URL, __version__, wv_colors from wireviz import APP_NAME, APP_URL, __version__, wv_colors
from wireviz.DataClasses import Metadata, Options from wireviz.DataClasses import Metadata, Options
from wireviz.svgembed import data_URI_base64
from wireviz.wv_gv_html import html_line_breaks from wireviz.wv_gv_html import html_line_breaks
from wireviz.wv_helper import ( from wireviz.wv_helper import (
file_read_text,
file_write_text,
flatten2d, flatten2d,
open_file_read,
open_file_write,
smart_file_resolve, smart_file_resolve,
) )
@ -21,7 +22,6 @@ def generate_html_output(
metadata: Metadata, metadata: Metadata,
options: Options, options: Options,
): ):
# load HTML template # load HTML template
templatename = metadata.get("template", {}).get("name") templatename = metadata.get("template", {}).get("name")
if templatename: if templatename:
@ -34,14 +34,14 @@ def generate_html_output(
# fall back to built-in simple template if no template was provided # fall back to built-in simple template if no template was provided
templatefile = Path(__file__).parent / "templates/simple.html" templatefile = Path(__file__).parent / "templates/simple.html"
html = open_file_read(templatefile).read() html = file_read_text(templatefile) # TODO?: Warn if unexpected meta charset?
# embed SVG diagram # embed SVG diagram (only if used)
with open_file_read(f"{filename}.tmp.svg") as file: def svgdata() -> str:
svgdata = re.sub( return re.sub( # TODO?: Verify xml encoding="utf-8" in SVG?
"^<[?]xml [^?>]*[?]>[^<]*<!DOCTYPE [^>]*>", "^<[?]xml [^?>]*[?]>[^<]*<!DOCTYPE [^>]*>",
"<!-- XML and DOCTYPE declarations from SVG file removed -->", "<!-- XML and DOCTYPE declarations from SVG file removed -->",
file.read(), file_read_text(f"{filename}.tmp.svg"),
1, 1,
) )
@ -80,13 +80,27 @@ def generate_html_output(
"<!-- %generator% -->": f"{APP_NAME} {__version__} - {APP_URL}", "<!-- %generator% -->": f"{APP_NAME} {__version__} - {APP_URL}",
"<!-- %fontname% -->": options.fontname, "<!-- %fontname% -->": options.fontname,
"<!-- %bgcolor% -->": wv_colors.translate_color(options.bgcolor, "hex"), "<!-- %bgcolor% -->": wv_colors.translate_color(options.bgcolor, "hex"),
"<!-- %diagram% -->": svgdata, "<!-- %filename% -->": str(filename),
"<!-- %filename_stem% -->": Path(filename).stem,
"<!-- %bom% -->": bom_html, "<!-- %bom% -->": bom_html,
"<!-- %bom_reversed% -->": bom_html_reversed, "<!-- %bom_reversed% -->": bom_html_reversed,
"<!-- %sheet_current% -->": "1", # TODO: handle multi-page documents "<!-- %sheet_current% -->": "1", # TODO: handle multi-page documents
"<!-- %sheet_total% -->": "1", # TODO: handle multi-page documents "<!-- %sheet_total% -->": "1", # TODO: handle multi-page documents
"<!-- %template_sheetsize% -->": metadata.get("template", {}).get(
"sheetsize", ""
),
} }
def replacement_if_used(key: str, func: Callable[[], str]) -> None:
"""Append replacement only if used in html."""
if key in html:
replacements[key] = func()
replacement_if_used("<!-- %diagram% -->", svgdata)
replacement_if_used(
"<!-- %diagram_png_b64% -->", lambda: data_URI_base64(f"{filename}.png")
)
# prepare metadata replacements # prepare metadata replacements
if metadata: if metadata:
for item, contents in metadata.items(): for item, contents in metadata.items():
@ -97,14 +111,11 @@ def generate_html_output(
if isinstance(entry, Dict): if isinstance(entry, Dict):
replacements[f"<!-- %{item}_{index+1}% -->"] = str(category) replacements[f"<!-- %{item}_{index+1}% -->"] = str(category)
for entry_key, entry_value in entry.items(): for entry_key, entry_value in entry.items():
replacements[f"<!-- %{item}_{index+1}_{entry_key}% -->"] = ( replacements[
html_line_breaks(str(entry_value)) f"<!-- %{item}_{index+1}_{entry_key}% -->"
) ] = html_line_breaks(str(entry_value))
elif isinstance(entry, (str, int, float)):
replacements['"sheetsize_default"'] = '"{}"'.format( pass # TODO?: replacements[f"<!-- %{item}_{category}% -->"] = html_line_breaks(str(entry))
metadata.get("template", {}).get("sheetsize", "")
)
# include quotes so no replacement happens within <style> definition
# perform replacements # perform replacements
# regex replacement adapted from: # regex replacement adapted from:
@ -116,4 +127,4 @@ def generate_html_output(
pattern = re.compile("|".join(replacements_escaped)) pattern = re.compile("|".join(replacements_escaped))
html = pattern.sub(lambda match: replacements[match.group(0)], html) html = pattern.sub(lambda match: replacements[match.group(0)], html)
open_file_write(f"{filename}.html").write(html) file_write_text(f"{filename}.html", html)

View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>tutorial01</title> <title>tutorial01</title>
<style> <style>

View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>tutorial02</title> <title>tutorial02</title>
<style> <style>

View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>tutorial03</title> <title>tutorial03</title>
<style> <style>

View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>tutorial04</title> <title>tutorial04</title>
<style> <style>

View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>tutorial05</title> <title>tutorial05</title>
<style> <style>

View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>tutorial06</title> <title>tutorial06</title>
<style> <style>

View File

@ -1,6 +1,6 @@
Id Description Qty Unit Designators Id Description Qty Unit Designators
1 Connector, Molex KK 254, female, 4 pins 6 X1, X2, X3, X4, X5, X6 1 Connector, Molex KK 254, female, 4 pins 6 X1, X2, X3, X4, X5, X6
2 Wire, 0.25 mm², PK 1.0 m W1, W2, W3, W4, W5 2 Wire, 0.25 mm², PK 1 m W1, W2, W3, W4, W5
3 Wire, 0.25 mm², TQ 1.0 m W1, W2, W3, W4, W5 3 Wire, 0.25 mm², TQ 1 m W1, W2, W3, W4, W5
4 Wire, 0.25 mm², VT 1.0 m W1, W2, W3, W4, W5 4 Wire, 0.25 mm², VT 1 m W1, W2, W3, W4, W5
5 Wire, 0.25 mm², YE 1.0 m W1, W2, W3, W4, W5 5 Wire, 0.25 mm², YE 1 m W1, W2, W3, W4, W5

1 Id Description Qty Unit Designators
2 1 Connector, Molex KK 254, female, 4 pins 6 X1, X2, X3, X4, X5, X6
3 2 Wire, 0.25 mm², PK 1.0 1 m W1, W2, W3, W4, W5
4 3 Wire, 0.25 mm², TQ 1.0 1 m W1, W2, W3, W4, W5
5 4 Wire, 0.25 mm², VT 1.0 1 m W1, W2, W3, W4, W5
6 5 Wire, 0.25 mm², YE 1.0 1 m W1, W2, W3, W4, W5

View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>tutorial07</title> <title>tutorial07</title>
<style> <style>
@ -716,28 +716,28 @@
<tr> <tr>
<td class="bom_col_id">2</td> <td class="bom_col_id">2</td>
<td class="bom_col_description">Wire, 0.25 mm², PK</td> <td class="bom_col_description">Wire, 0.25 mm², PK</td>
<td class="bom_col_qty">1.0</td> <td class="bom_col_qty">1</td>
<td class="bom_col_unit">m</td> <td class="bom_col_unit">m</td>
<td class="bom_col_designators">W1, W2, W3, W4, W5</td> <td class="bom_col_designators">W1, W2, W3, W4, W5</td>
</tr> </tr>
<tr> <tr>
<td class="bom_col_id">3</td> <td class="bom_col_id">3</td>
<td class="bom_col_description">Wire, 0.25 mm², TQ</td> <td class="bom_col_description">Wire, 0.25 mm², TQ</td>
<td class="bom_col_qty">1.0</td> <td class="bom_col_qty">1</td>
<td class="bom_col_unit">m</td> <td class="bom_col_unit">m</td>
<td class="bom_col_designators">W1, W2, W3, W4, W5</td> <td class="bom_col_designators">W1, W2, W3, W4, W5</td>
</tr> </tr>
<tr> <tr>
<td class="bom_col_id">4</td> <td class="bom_col_id">4</td>
<td class="bom_col_description">Wire, 0.25 mm², VT</td> <td class="bom_col_description">Wire, 0.25 mm², VT</td>
<td class="bom_col_qty">1.0</td> <td class="bom_col_qty">1</td>
<td class="bom_col_unit">m</td> <td class="bom_col_unit">m</td>
<td class="bom_col_designators">W1, W2, W3, W4, W5</td> <td class="bom_col_designators">W1, W2, W3, W4, W5</td>
</tr> </tr>
<tr> <tr>
<td class="bom_col_id">5</td> <td class="bom_col_id">5</td>
<td class="bom_col_description">Wire, 0.25 mm², YE</td> <td class="bom_col_description">Wire, 0.25 mm², YE</td>
<td class="bom_col_qty">1.0</td> <td class="bom_col_qty">1</td>
<td class="bom_col_unit">m</td> <td class="bom_col_unit">m</td>
<td class="bom_col_designators">W1, W2, W3, W4, W5</td> <td class="bom_col_designators">W1, W2, W3, W4, W5</td>
</tr> </tr>

View File

@ -1,6 +1,6 @@
graph { graph {
// Graph generated by WireViz 0.4 // Graph generated by WireViz 0.4.1
// https://github.com/formatc1702/WireViz // https://github.com/wireviz/WireViz
graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2] graph [bgcolor="#FFFFFF" fontname=arial nodesep=0.33 rankdir=LR ranksep=2]
node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0] node [fillcolor="#FFFFFF" fontname=arial height=0 margin=0 shape=none style=filled width=0]
edge [fontname=arial style=bold] edge [fontname=arial style=bold]

View File

@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"><head> <html lang="en"><head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="generator" content="WireViz 0.4 - https://github.com/formatc1702/WireViz"> <meta name="generator" content="WireViz 0.4.1 - https://github.com/wireviz/WireViz">
<title>tutorial08</title> <title>tutorial08</title>
<style> <style>