GithubHelp home page GithubHelp logo

lepton-eda / lepton-eda Goto Github PK

View Code? Open in Web Editor NEW
198.0 27.0 38.0 49.7 MB

GPL Electronic Design Automation

Home Page: https://lepton-eda.github.io

License: GNU General Public License v2.0

Shell 1.05% C 59.02% C++ 0.01% VHDL 0.20% Scheme 33.40% Makefile 1.53% Batchfile 0.02% AMPL 0.01% HTML 0.68% M4 1.54% Lex 0.33% Perl 1.02% Verilog 0.03% Roff 1.12% SourcePawn 0.02% Pascal 0.03% GLSL 0.01%
electronics cad gpl circuit design-tools guile c geda

lepton-eda's Introduction

Lepton Electronic Design Automation

Join the chat at https://app.gitter.im/#/room/#Lepton-EDA_Lobby:gitter.im

Introduction

Lepton EDA is a suite of free software tools for designing electronics. It provides schematic capture, netlisting into over 30 netlist formats, and many other features. It was forked from the gEDA/gaf suite in late 2016 by most of its active developers at that time.

The GPL Electronic Design Automation (gEDA) project has produced and continues working on a full GPL'd suite and toolkit of Electronic Design Automation tools. These tools are used for electrical circuit design, schematic capture, simulation, prototyping, and production. Currently, the gEDA project offers a mature suite of free software applications for electronics design, including schematic capture, attribute management, bill of materials (BOM) generation, netlisting, analog and digital simulation, and printed circuit board (PCB) layout.

The gEDA project was started because of the lack of free EDA tools for POSIX systems with the primary purpose of advancing the state of free hardware or open source hardware. The suite is mainly being developed on the GNU/Linux platform with some development effort going into making sure the tools run on other platforms as well.

Compatibility with geda-gaf

Lepton EDA is backward compatible with its predecessor geda-gaf and supports the same file format for symbols and schematics. We are planning to support it in future since there are lots of symbols and schematics created using it. We cannot promise you to support any change in geda-gaf in future, though. It's up to you, our users, to point out what feature you would like to have in Lepton.

Tools in the Lepton EDA suite

The major components of the Lepton suite are:

  • liblepton

    • A library of functions for manipulating Lepton schematics and symbols and rendering primitives.
  • libleptongui

    • A library of GUI functions.
  • lepton-schematic

    • A schematic editor.
  • lepton-attrib

    • A spreadsheet-like program for bulk editing of component attributes.
  • lepton-netlist

    • A highly-flexible, hierarchy-aware utility which parses schematics to generate a number of outputs, including netlists for a wide variety of PCB layout tools. It can also generate bills of materials and DRC reports for your schematics.
  • lepton-sch2pcb

  • lepton-symcheck

    • A utility for checking for common errors in schematic symbol files.
  • lepton-cli

    • A utility for interactive and batch mode working with Lepton EDA Scheme API, exporting schematics into various formats, and configuring all the programs of the suite.

Installation

Dependencies

In order to compile Lepton EDA from the distributed source archives, you must have the following tools and libraries installed:

The following tools and libraries are highly recommended:

The following tools and libraries are optional:

  • libstroke, a stroke and gesture recognition library. If this is available, lepton-schematic will support mouse gesture recognition. http://www.etla.net/libstroke/

  • The doxygen API documentation tool. This is required for building the Lepton developer API documentation, not for the regular user documentation. http://www.doxygen.nl

  • 'Inkscape' or 'ImageMagick' for svg to png or pdf conversion This is required for building the Lepton developer API documentation, not for the regular user documentation. http://inkscape.org/ http://www.imagemagick.org/script/index.php

  • 'Graphviz' for drawing directed graphs. This is required for building the Lepton developer API documentation, not for the regular user documentation. http://www.graphviz.org/

Troubleshooting dependencies

"I've installed the libfoo library, but ./configure isn't picking it up!"

Many modern operating system distributions split a library into two packages:

  1. a libfoo package, which contains the files necessary to run programs which use libfoo.

  2. a libfoo-dev or libfoo-devel package, which contains the files necessary to compile programs which use libfoo.

If you're having problems, make sure that you have all of the necessary dev or devel packages installed.

"I have installed two versions of guile, but ./configure uses a wrong one!"

Specify right guile binary on the configure stage, e.g.:

./configure GUILE=/usr/bin/guile-2.2

Installation from a source archive

First extract the archive to a sensible place:

tar -xzvf lepton-eda-<version>.tar.gz && cd lepton-eda-<version>

Run the configuration script. You'll probably want to specify a custom directory to install Lepton to, for example:

./configure --prefix=$HOME/lepton

You can then compile Lepton:

make

And install it (if you used a --prefix outside your $HOME directory, you may need to run this as root):

make install

Installation from the git repository

Lepton uses the git version control system. If you wish to try out the very latest version of Lepton, you will need to install some extra tools in addition to the ones listed above:

Once you have these installed, you need to clone the Lepton git repository:

git clone https://github.com/lepton-eda/lepton-eda.git

To generate the configure script, run:

./autogen.sh

You can then proceed to configure and build Lepton as described above.

Noticeable configure options

--enable-guild

The time of Scheme code compilation when you launch a Lepton program first time can be significantly reduced if you compile the code beforehand:

./configure --enable-guild

This option enables in-advance Scheme code compilation, which may be of help for end users though not always desirable for Lepton developers.

--with-gtk3

You can build Lepton with GTK3 GUI support if you enable it on the configure stage:

./configure --with-gtk3

Please note that GTK2 and GTK3 version of lepton-attrib require different additional libraries. libgtkextra is required for the GTK2 version, and gtksheet for GTK3. The latter can be found here.

--disable-attrib

Installation of lepton-attrib can be disabled on the configure stage:

./configure --disable-attrib

--enable-contrib

This option enables build of several contributed tools that may come in handy for some tasks. Please see Lepton reference manual for more information on what utilities are available.

Building Lepton developer API documentation

Several of the Lepton libraries and applications have doxygen API documentation available. To generate the API documentation from the source code, install doxygen (see Dependencies above. Next, add --enable-doxygen to your configure command line, i.e.:

./configure --enable-doxygen

To compile the documentation (quite a slow process), run:

make doxygen

The documentation can then be found in:

*/docs/html/index.html

Getting help

There are several ways to get help with installing and using Lepton and the rest of the gEDA tools:

  • Chat with Lepton developers and users at gitter.im. You can sign in there using your Twitter, GitHub or GitLab account (no registration is required to read the messages posted there). This is probably the fastest way to get in touch with us.

  • If you prefer using IRC, there is now a Lepton channel on OFTC: irc.oftc.net#lepton-eda. Sometimes you can catch Lepton users or developers there.

  • Lepton documentation page is the first place to search for Lepton specific information.

  • Lepton EDA wiki is a resource containing additional information that did not get into the main documentation.

  • The gEDA website http://www.geda-project.org has more extensive information on the gEDA tools, and links to some successful projects which use gEDA.

  • The gEDA documentation wiki contains a large amount of helpful information. A static copy is included with this distribution; see the docs/wiki/index.html file. The wiki is accessible online at http://wiki.geda-project.org/.

  • If the resources above didn't help you resolve your problem, or you are having a design problem that you want to get help with, consider subscribing to and posting your question to the geda-user mailing list (http://wiki.geda-project.org/geda:mailinglists). You can also browse and search the mailing list archives.

  • If you have discovered a bug, have a feature request, or have written a patch to Lepton, please create an item on the lepton-eda bug tracker page: https://github.com/lepton-eda/lepton-eda/issues

License

Lepton EDA (this package) is freely distributable under the GNU Public License (GPL) version 2.0 or (at your option) any later version. See the COPYING file for the full text of the license.

The programs and associated files are:

Copyright (C) 1998-2017 by Ales Hvezda and the respective original authors.

Copyright (C) 2017-2023 Lepton Developers.

See the AUTHORS file for a more extensive list of contributors to Lepton EDA and gEDA.

lepton-eda's People

Contributors

aelmahmoudy avatar alexdaniel avatar alyoshin avatar asomers avatar bdale avatar bert avatar cestrauss avatar clifcox avatar cnieves1 avatar dkogan avatar dmcmahill avatar drforbin avatar ehennes775 avatar eivindkv avatar etihwnad avatar gareth8118 avatar graahnul-grom avatar kkosciusz avatar lance1308 avatar nmschulte avatar noqsi avatar nosuchprocess avatar pcjc2 avatar peter-b avatar ptrckb avatar rccrdo avatar rlutz avatar vzh avatar werner2101 avatar xcthulhu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lepton-eda's Issues

Remove newlines from log messages

When pull request #48 is merged, lots of extraneous whitespace will appear in the logs as the messages have newlines themselves, and the logging code will add one.

Remove newlines from all log messages then merge #48

'Text Entry...' dialog should respect 'text-size' option's value

Now it uses a hard-coded value - 12 (in system-gschemrc text-size
is set to 10). Also, it was found that the font size
checking code in g_rc_text_size() also uses hard-coded values
instead of MINIMUM_TEXT_SIZE and DEFAULT_TEXT_SIZE macros.
That was reported almost a year ago, but there's still no feedback.
It seems that the fix is still relevant. What do you think?
If need be, I can submit updated patches or make a pull request.

Sometimes inherited net= inside symbol overrides net= attached to it.

Sometimes inherited net= inside symbol overrides net= attached to
it. See, e.g., the net connected to U500:10 from
gnd-custom.sym inside gnetlist/tests/common/netattrib.sch,
having inherited net=DIGITAL_GND:1 and attached net=DGND:1.

How to reproduce

$ gnetlist -g geda -o - common/netattrib.sch |grep "U500 10"
DIGITAL_GND : U500 10

ci: Coverity Scan builds are broken

The latest coverity_scan branch builds are broken with error messages about the snarf macros.

Relevant extract from build log
  CC       liblepton_la-scheme_init.lo
In file included from /usr/include/guile/2.0/libguile.h:95:0,
                 from ./../include/libgeda_priv.h:4,
                 from scheme_init.c:26:
/usr/include/guile/2.0/libguile/snarf.h:343:3: error: initializer element is not constant
   {       \
   ^
/usr/include/guile/2.0/libguile/snarf.h:82:29: note: in definition of macro ‘SCM_SNARF_HERE’
 #  define SCM_SNARF_HERE(X) X
                             ^
/usr/include/guile/2.0/libguile/snarf.h:356:3: note: in expansion of macro ‘SCM_IMMUTABLE_STRINGBUF’
   SCM_IMMUTABLE_STRINGBUF (scm_i_paste (c_name, _stringbuf), contents); \
   ^
/usr/include/guile/2.0/libguile/snarf.h:202:3: note: in expansion of macro ‘SCM_IMMUTABLE_STRING’
   SCM_IMMUTABLE_STRING (scm_i_paste (c_name, _string), scheme_name); \
   ^
scheme_init.c:32:1: note: in expansion of macro ‘SCM_GLOBAL_SYMBOL’
 SCM_GLOBAL_SYMBOL (edascm_object_state_sym, "object-state");
 ^
/usr/include/guile/2.0/libguile/snarf.h:343:3: error: (near initialization for ‘edascm_object_state_sym_string_raw_cell[0].word_0’)
   {       \
   ^
/usr/include/guile/2.0/libguile/snarf.h:82:29: note: in definition of macro ‘SCM_SNARF_HERE’
 #  define SCM_SNARF_HERE(X) X
                             ^
/usr/include/guile/2.0/libguile/snarf.h:356:3: note: in expansion of macro ‘SCM_IMMUTABLE_STRINGBUF’
   SCM_IMMUTABLE_STRINGBUF (scm_i_paste (c_name, _stringbuf), contents); \
   ^
/usr/include/guile/2.0/libguile/snarf.h:202:3: note: in expansion of macro ‘SCM_IMMUTABLE_STRING’
   SCM_IMMUTABLE_STRING (scm_i_paste (c_name, _string), scheme_name); \
   ^
scheme_init.c:32:1: note: in expansion of macro ‘SCM_GLOBAL_SYMBOL’
 SCM_GLOBAL_SYMBOL (edascm_object_state_sym, "object-state");
 ^
/usr/include/guile/2.0/libguile/snarf.h:343:3: error: initializer element is not constant
   {       \
   ^
/usr/include/guile/2.0/libguile/snarf.h:82:29: note: in definition of macro ‘SCM_SNARF_HERE’
 #  define SCM_SNARF_HERE(X) X
                             ^
/usr/include/guile/2.0/libguile/snarf.h:356:3: note: in expansion of macro ‘SCM_IMMUTABLE_STRINGBUF’
   SCM_IMMUTABLE_STRINGBUF (scm_i_paste (c_name, _stringbuf), contents); \
   ^
/usr/include/guile/2.0/libguile/snarf.h:202:3: note: in expansion of macro ‘SCM_IMMUTABLE_STRING’
   SCM_IMMUTABLE_STRING (scm_i_paste (c_name, _string), scheme_name); \
   ^
scheme_init.c:32:1: note: in expansion of macro ‘SCM_GLOBAL_SYMBOL’
 SCM_GLOBAL_SYMBOL (edascm_object_state_sym, "object-state");
 ^

It's possible that this could be because we're defining SCM_DEBUG_TYPING_STRICTNESS=0 in the $CFLAGS rather than in the $CPPFLAGS.

Last attached net= is used for net naming if several ones attached to a symbol

If several net= attributes are attached to a symbol with mapping
for the same pin, the last one is used for net renaming. I think
the first one should be used and all others should be
ignored. lepton-netlist should warn the user in such cases. The
same should be done for inherited net= attributes if there are no
attached ones for the pin.

How to reproduce

See, e.g. net=signal12:12 (first) and net=signal12x:12 (second) attached to
U400 in gnetlist/tests/common/netattrib.sch.

gnetlist -g geda -o - common/netattrib.sch |grep "signal12"
Found a cpinlist head with a netname! [signal12]
signal12x : U400 12

Outputs of many backends are affected.

Attribute multiplicity

For attributes like source, it would be better to have a single attribute with a multiline value than the current multiple attributes.

Pin connected to two nets

If there are two instances of a refedes/pin combination, the effect in gnetlist can be a pin connected to two nets. This is nonsense. Either:

  1. Merge the nets.
  2. Make this a fatal error.

I prefer (1), but not strongly.

Reorganize the main menu

A. File menu:

  1. delete duplicated Revert (already in Page menu)

B. Edit menu:

  1. combine to one item: Object Properties...:
    - Color...
    - Line Width & Type...
    - Fill Type...
    - Pin Type...

C. View menu:

  1. rename: Sidebar => Right Dock
  2. rename: Status => Bottom Dock

D. Page menu:

  1. separate Revert from the other items
  2. rename: Revert => Revert...

E. Hierarchy menu:

  1. delete duplicated Documentation... (already in Help menu)

F. Options menu:

  1. delete obsolete Text Size... item
  2. rename/rearrange, for example:
    - Snap Grid Spacing... => Options...
    - [separator]
    - Scale up Grid Spacing => Grid +
    - Scale down Grid Spacing => Grid -
    - [separator]
    - Cycle grid styles => Grid style: cycle Dots/Mesh/Off
    - Toggle Snap On/Off => Grid snap: cycle Grid/Resnap/Off
    - [separator]
    - Toggle Outline/Box => Feedback mode: Outline/Box
    - Toggle Net Rubberband => Net: Rubberband On/Off
    - Toggle Magnetic Net => Net: Magnetic On/Off
    - [separator]
    - Show Coords Window... => Coords Window
    - Show Log Window... => Log Window

Comments:

  • B.1: all that commands do exactly the same: show Object dialog
    box (x_widgets_show_object_properties()).
  • C.3: currently, there is no way to show find text state window
    unless docking windows GUI is enabled. We need to add a new action,
    e.g. view-find-text-state. [done]
  • F.2: Options menu:

2018_07_03 06 21 34

2018_07_03 06 20 37

Any suggestions are welcome.

Single-Pin-Net in netlist for unconnected pins

I have an unconnected pin generating DRC error.
Connecting this pins to NC symbol (sym/misc/nc-right-1.sym) solves but generate a Single-Pin-Net in netlist that I must manually remove.
Is there a way to avoid this?
Thanks

Duplicate output for net= mapped implicit pins on several package symbols

If different net= attributes with mapping for the same pin are
attached to several symbols with the same refdes=, all they
appear in the resulting netlist.

How to reproduce

See, e.g. output of the geda backend for U500:14 in gnetlist/tests/common/netattrib.sch.

$ gnetlist -g geda -o - common/netattrib.sch |grep "U500 14"
5V : U500 14
3.3V : U500 14

'make check' on FreeBSD

It's not possible to do a successful make check
on FreeBSD. Although I've managed to find where it fails
and make a fix, I'm not sure, should it be committed as is.
The way 'make check' fails looks very strange.

  1. Unportable sed command in gnetlist tests is fixed; not a problem.

  2. liblepton unit test t0401-os-expand-env-variables.scm:
    It turned out that (setenv "var" "val") does not change
    environment variable, unless (putenv "var") is called first to remove it.

  3. liblepton unit test t0402-config.scm:
    Here the real magic begins. In test 'config-real a call to
    config-load! results in SIGBUS crash. And it crashes only
    when config-load! is called odd number of times (once, 3, 5, etc.).
    Add a second call (third and fourth, etc.) - and crash disappear.

Any ideas on what's going on?
FreeBSD 11.0-STABLE, guile 2.0.14

Split user configuration

Currently, user configuration file (geda-user.conf) is used to store an important
data that controls behaviour of the tools in the suite. At the same time,
lepton-schematic use that file for program-specific settings, like dialog
geometry. The latter is not important to the user and should be stored separately.
In the draft implementation (wip_cfg_priv_split branch) dialog geometry is stored in geda-priv.conf file in the user configuration directory. However, there is $XDG_CACHE_HOME directory defined in XDG specification that is designed to be used exactly for that.

./autogen.sh fails

./autogen.sh fails with:

user@debian:~/lepton-eda$ ./autogen.sh 
checking for ./configure.ac ... yes
checking for ./build-tools/desktop-i18n ... yes
checking for autoconf ... /usr/bin/autoconf
checking for autoheader ... /usr/bin/autoheader
checking for automake ... /usr/bin/automake
checking for aclocal ... /usr/bin/aclocal
checking for libtoolize ... /usr/bin/libtoolize
checking for autopoint ... no

autogen.sh: You must have GNU gettext installed.

If your operating system distribution doesn't provide a package, you
can get download it from <http://www.gnu.org/software/gettext>.

checking for automake >= 1.11.0 ... 1.15.1
***Error*** autogen.sh: Some required tools could not be found.

automake is installed:

user@debian:~/lepton-eda$ automake --version
automake (GNU automake) 1.15.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl-2.0.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Tom Tromey <[email protected]>
       and Alexandre Duret-Lutz <[email protected]>.

And gettext also installed:

user@debian:~/lepton-eda$ gettext --version
gettext (GNU gettext-runtime) 0.19.8.1

gnetlist: "net-naming-priority" config setting does not work.

gnetlist/tests/common/netattrib.sch has nets named both by net= and netname= attributes. For example, U400:8 is connected to net named out8 that should be overridden if net-naming-priority is set to net-attribute by net=signal8:8 or net=signal8x:8, though output netlists have the same net out8 independently of the value of that setting. Moreover, the result depends on which attribute comes first in the schematic. If you cut&paste the attribute netname=out8, so it will be the last in the schematic after saving, you'll get a different netlist.

How to reproduce

$ cd gnetlist/tests/
$ touch geda.conf
$ gaf config --project gnetlist net-naming-priority net-attribute
$ gnetlist -g geda -o net.out common/netattrib.sch
$ gaf config --project gnetlist net-naming-priority netname-attribute
$ gnetlist -g geda -o netname.out common/netattrib.sch
$ diff net.out netname.out
$ echo $?
0

After changing schematic as suggested above and running the same set of commands:

$ diff net.out netname.out
20a21
signal8x -> out8
35c36
< signal8x : U400 8


out8 : U400 8

User-defined text size values

It's convenient to use a consistent text sizes of attributes and text
throughout the project. And that sizes are not necessary those
hard-coded in schematic/src/gschem_toplevel.c.
I propose to add a new configuration key, so that the users can add this to
their configuration file(s), e.g.:

[schematic.gui]
text-sizes=2;3;4;5;6;8

Then these values will appear in the 'size' combo box of 'add text'
and 'edit text' dialogs.

Netlist error in windows cygwin porting with most recent lepton-eda

I have successfully compiled lepton-eda-1.9.3 under cigwin targeting windows 64bit.

Starting from $HOME my fold scheme was:
lepton-eda-1.9.3
lepton-eda-1.9.3/build
lepton-eda-1.9.3/source

My procedure was:

  1. untar lepton-eda-1.9.3 in source dir
  2. run autogen.sh in source/lepton-eda-1.9.3 dir
  3. run build.sh in lepton-eda-1.9.3 dir

build.sh script was basically:

cd build
mkdir lepton-eda-1.9.3
(
   cd lepton-eda-1.9.3
   #--------------
   export LD_LIBRARY_PATH=$HOME/geda/lib:$LD_LIBRARY_PATH
   export PATH=$HOME/geda/bin:$PATH
   export PKG_CONFIG_PATH=/usr/lib/pkgconfig:$HOME/geda/lib/pkgconfig:$PKG_CONFIG_PATH
   #--------------
   echo "Configuring lepton-eda-1.9.3 (for details see build/lepton-eda-1.9.3-configure.log)"
   ../../source/lepton-eda-1.9.3/configure \
   --prefix=${dstdir} \
   --build=x86_64-pc-cygwin \
   --host=x86_64-pc-cygwin \
   --target=x86_64-pc-cygwin \
   --enable-relocatable \
   --disable-nls \
   --disable-shared \
   > ../lepton-eda-1.9.3-configure.log 2>&1
   #--------------
   echo "Building lepton-eda-1.9.3 (for details see build/lepton-eda-1.9.3-make.log)"
   make LDFLAGS="-no-undefined -lgio-2.0 -lgobject-2.0" > ../lepton-eda-master-make.log 2>&1
   #--------------
   echo "Installing lepton-eda-1.9.3 (for details see build/lepton-eda-1.9.3-install.log)"
   make install > ../lepton-eda-1.9.3-install.log 2>&1
   #--------------
   echo "done"
)

Just few adjustments was necessary:

  1. add /usr/lib/pkgconfig to PKG_CONFIG_PATH (otherwise it cannot find guile)
  2. add GIO lib to link command LDFLAGS="-no-undefined -lgio-2.0 -lgobject-2.0"
    (-no-undefined is just to remove a warning)

I can create NETLIST, BOM, Schematic PDF and DRC report directly from windows using a makefile,
and I can run gschem from cygwin bash and an X-server like Xming (to be fix later).

I would like to do the same with the most recent version (lepton-eda-master).
Using the same procedure I can configue-make-install without error.
As result gschem runs fine but NETLIST show this errors
Just asking for the netlist version (guile 2.0.14) :

$ lepton-netlist --version
Backtrace:
In ice-9/boot-9.scm:
 160: 7 [catch #t #<catch-closure 6002be260> ...]
In unknown file:
   ?: 6 [apply-smob/1 #<catch-closure 6002be260>]
In ice-9/boot-9.scm:
  66: 5 [call-with-prompt prompt0 ...]
In ice-9/eval.scm:
 432: 4 [eval # #]
In ice-9/boot-9.scm:
2412: 3 [save-module-excursion #<procedure 6002e0980 at ice-9/boot-9.scm:4084:3 ()>]
4089: 2 [#<procedure 6002e0980 at ice-9/boot-9.scm:4084:3 ()>]
In /cygdrive/c/ZBU/TOOLS/GEDA/bin/lepton-netlist:
  22: 1 [#<procedure 6002e1e80 ()>]
In unknown file:
   ?: 0 [load-extension "/home/mario/geda/lib/liblepton" "libgeda_init"]

ERROR: In procedure load-extension:
ERROR: In procedure dynamic-link: file: "/home/mario/geda/lib/liblepton", message: "The specified module could not be found."

$ dir /home/mario/geda/lib/
liblepton.a  liblepton.la  libleptonrenderer.a  libleptonrenderer.la  pkgconfig

lepton-netlist.exe doesn't exist, is it correct?
I need help to continue
Thanks

P.S.
I will try minipack in the next time

net= mapped explicit pins connected with an unnamed net yield duplicate lines in output netlists

If two pins mapped by attached net= attributes are connected
with an unnamed net, they produce duplicate connections/signals
with different names in output netlists.

See, e.g., net=signal6:6 attached to U400.2 and
net=signal9:9 attached to U400:3 in
gnetlist/tests/common/netattrib.sch. The real pins are connected
with an unnamed net.

How to reproduce

$ gnetlist -g mathematica -o - common/netattrib.sch|grep '"U400","[69]"'
v["U400","6"]=v["signal9"];
v["U400","9"]=v["signal9"];
v["U400","9"]=v["signal6"];
v["U400","6"]=v["signal6"];
i["U400","6"]+i["U400","9"]==0,
i["U400","9"]+i["U400","6"]==0,
i["U400","6"],
i["U400","9"],
i["U400","9"],
i["U400","6"],

$ gnetlist -g verilog -o - common/netattrib.sch|grep "signal[69]"
wire signal9 ;
wire signal6 ;
\6 ( signal6 ),
\9 ( signal9 ),

See that mathematica outputs duplicate lines for voltages and currents.
verilog output contains different signals for U400:6 and U400:9
while they are connected

Other backends also have separate nets for those pins.

Custom font for the log window

IMHO, it's natural to use some kind of monospaced font
for the log window. Better yet, let the user decide:
introduce a configuration key for that.
It's easy, though I'm unsure about group/key naming:

[schematic.log]
log-window-font=Droid Sans Mono 11

Distinguishing between lepton and geda-gaf

lepton currently installs and uses a lot of documentation, programs and other files that clash with those installed and used by geda-gaf.

We want to be backward compatible with geda-gaf <= 1.9.2, but also want users to be able to install a newer geda-gaf alongside lepton. Also, spending a lot of time on renaming things is busy-work that does not really bring much benefit to users.

We should consider gradually migrating towards naming things based on lepton in stages. The current plan:

  • Change the tarball name in configure.ac, so we can start making releases (#47)
  • Load config data from gEDA config files and save back to Lepton config files (The issue is no longer valid since the last release 1.9.10 don't even use geda.conf files and transition utility lepton-upcfg is available.)
  • Add a --enable-compat-symlinks flag to configure. This will enable installing a symlink named gaf for lepton-cli, etc. It will default to yes
  • Start renaming tools (etc.) with lepton
  • Eventually change the default to --enable-compat-symlinks=no
  • Update documentation (especially README)

Unresolved issues:

  • How will we deal with installed resources, e.g. symbol libraries? (We won't do anything special until some new very different strategy is elaborated, just keep things as is, backwards compatible. It doesn't break anything.)
  • How will we deal with user & system Scheme init files, e.g. $XDG_CONFIG_HOME/gEDA/gafrc?

Other related tasks:

  • Rename the Coverity Scan project (#43)

Hardcoded perl, python, bash paths

> git grep -n '/usr/bin/perl' | grep '1:'
contrib/scripts/mk_char_tab.pl:1:#!/usr/bin/perl
contrib/scripts/pads_backannotate:1:#!/usr/bin/perl -w
contrib/scripts/sarlacc_sym:1:#!/usr/bin/perl
utils/gxyrs/lepton-xyrs.pl:1:#!/usr/bin/perl -w
utils/scripts/gschupdate:1:#!/usr/bin/perl
utils/scripts/gsymupdate:1:#!/usr/bin/perl
utils/scripts/lepton-pcb_backannotate:1:#!/usr/bin/perl -w
utils/scripts/lepton-refdes_renum:1:#!/usr/bin/perl -w
utils/scripts/lepton-symfix:1:#!/usr/bin/perl -w
> git grep -n '/usr/bin/python' | grep '1:'
examples/lightning_detector/bom:1:#!/usr/bin/python
utils/scripts/lepton-tragesym:1:#!/usr/bin/python
> git grep -n '/bin/bash' | grep '1:'
contrib/scripts/gnet_hier_verilog.sh:1:#!/bin/bash

Pull requests effectively stopped due to CI failures

We cannot ever check now if code builds correctly after a pull
request. For three last PRs I see:

cc1: error: -Werror=maybe-uninitialized: no option -Wmaybe-uninitialized

After googling I found some gcc versions are buggy in this
relation, people wrote so about 4.6 and 4.7. I wonder if this is
the case for CI builds. I could not find the info about compiler
version in the last report.

FWIW, here
I found how we could check the gcc version and set or drop some flags.

Rename libgedacairo to libleptonrenderer

Our libgedacairo actually uses the same code as upstream geda-gaf at the moment, but when compiled it has a dependency on liblepton rather than libgeda. We should rename it to libleptonrenderer or libleptoncairo or something.

The current split between libgedacairo and liblepton seems a little arbitrary. Maybe it would make sense to merge libgedacairo into liblepton rather than rename the library. I can't see any immediate downside to this.

This blocks v1.9.3 because of the soname conflict with geda-gaf.

Height of One Pixel TextView

Inside the multiattrib dialog box, the value textview has a height of one pixel. This issue was fixed in a commit and reintroduced in a later commit.

Original Fix:
42182f0

Reintroduction:
79d6da9

Improve the status bar

Now it looks like this:
current

with some "mode" activated:
current_active

  1. First three entries designates a mouse button assignment (left, middle, right).
    They are static strings that never changes. IMHO, they only takes up space and should
    not be shown by default. We may add e.g. [schematic.status-bar]::show-mouse-buttons configuration key for that.
  2. What I really miss is indication of the rubberband and magnetic net modes.
  3. Status string should be more distinguishable.

new_rbon_mnon_select

new_rboff_mnoff_select

new_rbon_mnon_box

An attempt in a Vagrant Ubuntu 14.04 VM

When I issue the following at the command line:

# ./configure --prefix=$HOME/lepton --disable-update-xdg-database
# make
# make install
# ~/lepton/bin/gschem &

I get in the log window of gschem:

gEDA/gschem version 1.9.3.20170226

gEDA/gschem comes with ABSOLUTELY NO WARRANTY; see COPYING for more details.

This is free software, and you are welcome to redistribute it under certain

conditions; please see the COPYING file for more details.

Read init scm file [/home/vagrant/lepton/share/gEDA/scheme/gschem.scm]

Backtrace:
In ice-9/boot-9.scm:
 157: 6 [catch #t #<catch-closure 2244400> ...]
In unknown file:
   ?: 5 [apply-smob/1 #<catch-closure 2244400>]
In ice-9/boot-9.scm:
 157: 4 [catch #t #<catch-closure 273d660> ...]
In unknown file:
   ?: 3 [apply-smob/1 #<catch-closure 273d660>]
   ?: 2 [primitive-load "/usr/share/gEDA/print-colormap-lightbg"]
In ice-9/boot-9.scm:
 102: 1 [#<procedure 273a5c0 at ice-9/boot-9.scm:97:6 (thrown-k . args)> system-error ...]
In unknown file:
   ?: 0 [apply-smob/1 #<catch-closure 273d620> system-error ...]

ERROR: In procedure apply-smob/1:
ERROR: In procedure open-file: No such file or directory: "/usr/share/gEDA/print-colormap-lightbg"

ERROR: Failed to load RC file [/home/vagrant/lepton/share/gEDA/system-gafrc]: ERROR: No such file or directory: "/usr/share/gEDA/print-colormap-lightbg"


Backtrace:
In ice-9/boot-9.scm:
 157: 6 [catch #t #<catch-closure 2244400> ...]
In unknown file:
   ?: 5 [apply-smob/1 #<catch-closure 2244400>]
In ice-9/boot-9.scm:
 157: 4 [catch #t #<catch-closure 2a9b560> ...]
In unknown file:
   ?: 3 [apply-smob/1 #<catch-closure 2a9b560>]
   ?: 2 [primitive-load "/usr/share/gEDA/gschem-colormap-darkbg"]
In ice-9/boot-9.scm:
 102: 1 [#<procedure 2a433c0 at ice-9/boot-9.scm:97:6 (thrown-k . args)> system-error ...]
In unknown file:
   ?: 0 [apply-smob/1 #<catch-closure 2a9b520> system-error ...]

ERROR: In procedure apply-smob/1:
ERROR: In procedure open-file: No such file or directory: "/usr/share/gEDA/gschem-colormap-darkbg"

ERROR: Failed to load RC file [/home/vagrant/lepton/share/gEDA/system-gschemrc]: ERROR: No such file or directory: "/usr/share/gEDA/gschem-colormap-darkbg"


New file [/home/vagrant/lepton-eda-1.9.3/untitled_1.sch]
Tried to set the sensitivity on non-existent menu item '_Edit/Cu_t'
Tried to set the sensitivity on non-existent menu item '_Edit/_Copy'
Tried to set the sensitivity on non-existent menu item '_Edit/_Delete'
Tried to set the sensitivity on non-existent menu item '_Edit/Copy Mode'
Tried to set the sensitivity on non-existent menu item '_Edit/Multiple Copy Mode'
Tried to set the sensitivity on non-existent menu item '_Edit/Move Mode'
Tried to set the sensitivity on non-existent menu item '_Edit/Rotate 90 Mode'
Tried to set the sensitivity on non-existent menu item '_Edit/Mirror Mode'
Tried to set the sensitivity on non-existent menu item '_Edit/Edit...'
Tried to set the sensitivity on non-existent menu item '_Edit/Slot...'
Tried to set the sensitivity on non-existent menu item '_Edit/Lock'
Tried to set the sensitivity on non-existent menu item '_Edit/Unlock'
Tried to set the sensitivity on non-existent menu item '_Edit/Embed Component/Picture'
Tried to set the sensitivity on non-existent menu item '_Edit/Unembed Component/Picture'
Tried to set the sensitivity on non-existent menu item '_Edit/Update Component'
Tried to set the sensitivity on non-existent menu item 'Hie_rarchy/_Down Schematic'
Tried to set the sensitivity on non-existent menu item 'Hie_rarchy/Down _Symbol'
Tried to set the sensitivity on non-existent menu item 'Hie_rarchy/D_ocumentation...'
Tried to set the sensitivity on non-existent menu item 'A_ttributes/_Attach'
Tried to set the sensitivity on non-existent menu item 'A_ttributes/_Detach'
Tried to set the sensitivity on non-existent menu item 'A_ttributes/Show _Value'
Tried to set the sensitivity on non-existent menu item 'A_ttributes/Show _Name'
Tried to set the sensitivity on non-existent menu item 'A_ttributes/Show _Both'
Tried to set the sensitivity on non-existent menu item 'A_ttributes/_Toggle Visibility'
Tried to set the sensitivity on non-existent menu item '_Edit/_Paste'

Make sure localised strings have re-orderable substitutions where possible

Where strings are localised and have substitutions, those substitutions should have the param-no in the format string to allow translators to reorder the substitutions if it makes sense for that translation.

https://www.gnu.org/software/libc/manual/html_node/Output-Conversion-Syntax.html#Output-Conversion-Syntax

It is probably worthwhile adding this param-no specifier even if there is only one substitution for the sake of consistency and to defend against forgetting to add it if a second substitution is added.

There is some justification in Dwayne Bailey's FOSDEM 2016 talk.

copied in from the wiki TODO list

Build with --enable-relocatable on FreeBSD

On FreeBSD (11.0-STABLE, amd64, r313735) build failed with --enable-relocatable:

make
[skip]
../liblepton/src/.libs/liblepton.so: undefined reference to `canonicalize_file_name'
make[4]: stopped in /home/dmn/lepton/lepton.git/gaf

Then I found guess_install_data_dir() function in
liblepton/src/edapaths.c and there:

  1. canonicalize_file_name() in a non-portable GNU extension
  2. there is no /proc/self/exe on FreeBSD (there is /proc/curproc/file
    symlink, however). In fact, the system and all programs are functionig
    perfectly well even when /proc is unmounted.
    The following discussion on stackoverflow.com may be of help:
    http://stackoverflow.com/questions/1023306/finding-current-executables-path-without-proc-self-exe

Thank you for your work.
Regards,
Dmitry.

Freestyle colors should not be disabled by default

Disabling that colors effectively prohibit their usage:
if users want to share schematic files, they also have to
share their color schemes, because otherwise some text
will be invisible to those with default setup.

No way to show the popup menu if the right mouse button is used for panning

It would be nice if we can assign free (middle) mouse button to display the popup
menu in that case, e.g. by using the following expression in gschemrc file:

( middle-button "popup" )

But it's impossible: the popup menu can be shown using the right mouse
button only. However, it's easy to implement (#226). Testing and suggestions are welcome.

Empty attribute value should be valid

Right now, attributes with empty values are not allowed. But an empty string is a perfectly valid string, and can be useful for back ends driving downstream flows for which blank input is valid.

gnetlist ignores 'graphical' attribute

It does not depend on the type of backend being used,
nor on the value the 'graphical' attribute is set to.
All components end up in the generated netlist.

Tested revision: latest git (2d8cc86).
Tested on: FreeBSD 11.0-STABLE, Debian 8.7 Stable.

Commands used:

gnetlist test_gnetlist_ignores_graphical.sch -g spice-sdb -v -o spice-sdb.net > sdpice-sdb.out
gnetlist test_gnetlist_ignores_graphical.sch -g pcbpins -v -o pcbpins.net > pcbpins.out

In the attachment there are simple test sch file and
gnetlist's output for the above commands:

https://drive.google.com/open?id=0B8Dmx_DW9FydLTZoQ2ZzWXBNVGc

Incorrect behavior when undo-panzoom option is set to "disabled"

Steps to reproduce:

  1. add ( undo-panzoom "disabled" ) to gschemrc config file
  2. start gschem
  3. open some schematic
  4. change the zoom level
  5. make changes to schematic (e.g. move or delete something)
  6. Edit -> Undo
  • What happen:
    When all changes are undone, the initial zoom level is restored.

  • What should happen:
    Undo/redo operations should not change the zoom level at all.

This is really annoying.
The bug was reported in the past.
Please review a possible fix.

Segfault on OS X

While lepton compiles on OS X (version 10.9.5), it does not function properly

When I first start gschem, it does not display any of the widgets (see the screen capture below). If I mouse over them, the widgets slowly reveal one by one. This is also true of the menu widgets. The scroll for the drawing area is also out of place.

After a short amount of use, I get a segmentation fault with the following logged errors:

2017-02-27 20:11:02.111 gschem[96694:507] *** WARNING: Method userSpaceScaleFactor in class NSView is deprecated on 10.7 and later. It should not be used in new applications. Use convertRectToBacking: instead. 
Invalid path [/usr/local/share/gEDA/sym/local] passed to component-library
Feb 27 20:12:11 Kakuzen.local gschem[96694] <Error>: CGContextRestoreGState: invalid context 0x7f8c33c99110. This is a serious error. This application, or a library it uses, is using an invalid context  and is thereby contributing to an overall degradation of system stability and reliability. This notice is a courtesy: please fix this problem. It will become a fatal error in an upcoming update.
Feb 27 20:12:11 Kakuzen.local gschem[96694] <Error>: CGContextSetAllowsAntialiasing: invalid context 0x7f8c33c99110. This is a serious error. This application, or a library it uses, is using an invalid context  and is thereby contributing to an overall degradation of system stability and reliability. This notice is a courtesy: please fix this problem. It will become a fatal error in an upcoming update.

image

Missing components aren't 'found' when added to project library, and sheet is 'Revert'ed

Briefly discussed a temp fix for this, whilst underlying work on the library system takes place.
To replicate:

  • load a schematic file with components missing from local/project library
  • note bunch of red messages about missing components
  • copy symbols from 'other' library into project library
  • File->Revert
  • red messages do not disappear.

Cause of the problem is the symbol cache, which is persistent across anything/everything (it seems!). It should be easy enough to call a 'flush' cache on Revert, so that everything is loaded up from file (as you probably might expect).

Net renaming problems

There are a number of issues surrounding net renaming. Consider the following tiny project:

netnames.tar.gz

"make" yields the following (with my commentary):

Found duplicate net name, renaming [left] to [up]

Should we allow renaming on the same hierarchical level? If so, we should at least have some way to check that it's intentional, and not a short circuit.

WARNING: Trying to rename something twice:
+5V and +5V
are both a src and dest name
This warning is okay if you have multiple levels of hierarchy!

This actually the result of shorting +5V to GND. The message doesn't properly identify the problem. Furthermore, this message is so common (my big board designs generate these by the hundreds), that here the user is likely to ignore it.

Found a pin [Short] on component [(null)] which does not have a label!

This one is just strange. What's the error?

Also, note that [right] is shorted to ground without any notice to the user.

netlister error

I'm getting this error.

Backtrace:
In ice-9/boot-9.scm:
160: 7 [catch #t #<catch-closure 2071660> ...]
In unknown file:
?: 6 [apply-smob/1 #<catch-closure 2071660>]
In ice-9/boot-9.scm:
66: 5 [call-with-prompt prompt0 ...]
In ice-9/eval.scm:
432: 4 [eval # #]
In ice-9/boot-9.scm:
2404: 3 [save-module-excursion #<procedure 2091980 at ice-9/boot-9.scm:4051:3 ()>]
4058: 2 [#<procedure 2091980 at ice-9/boot-9.scm:4051:3 ()>]
In unknown file:
?: 1 [%with-toplevel #<geda-toplevel 0x258c270> #<procedure main ()>]
?: 0 [scm-error misc-error #f ...]

Can't compile C++ programs that use libgeda/liblepton

Compiling a trivial test program with libgeda and some basic STL headers:

#include "libgeda.h"
#include <memory>
#include <utility>

int main()
{
    return 0;
}

There are several constructions in the libgeda headers that are either invalid in C++ code or conflict with the STL headers. These boil down to two main problems:

  • C++ does not permit forward declaration of enumerations
  • libgeda provides min and max macros that conflict with std::min() and std::max()
In file included from /usr/include/c++/6.3.1/memory:62:0,
                 from test_cpp.cc:3:
/usr/include/c++/6.3.1/bits/stl_algobase.h:243:56: error: macro "min" passed 3 arguments, but takes just 2
     min(const _Tp& __a, const _Tp& __b, _Compare __comp)
                                                        ^
/usr/include/c++/6.3.1/bits/stl_algobase.h:265:56: error: macro "max" passed 3 arguments, but takes just 2
     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
                                                        ^
In file included from ./../include/libgeda/libgeda.h:34:0,
                 from test_cpp.cc:1:
./../include/libgeda/geda_fill_type.h:23:14: error: use of enum ‘_GedaFillType’ without previous declaration
 typedef enum _GedaFillType GedaFillType;
              ^~~~~~~~~~~~~
./../include/libgeda/geda_fill_type.h:24:14: error: use of enum ‘_GedaFillType’ without previous declaration
 typedef enum _GedaFillType OBJECT_FILLING;
              ^~~~~~~~~~~~~
In file included from ./../include/libgeda/libgeda.h:35:0,
                 from test_cpp.cc:1:
./../include/libgeda/geda_line_type.h:23:14: error: use of enum ‘_GedaLineType’ without previous declaration
 typedef enum _GedaLineType GedaLineType;
              ^~~~~~~~~~~~~
./../include/libgeda/geda_line_type.h:24:14: error: use of enum ‘_GedaLineType’ without previous declaration
 typedef enum _GedaLineType OBJECT_TYPE;
              ^~~~~~~~~~~~~
In file included from ./../include/libgeda/libgeda.h:36:0,
                 from test_cpp.cc:1:
./../include/libgeda/geda_line_cap_type.h:25:14: error: use of enum ‘_GedaLineCapType’ without previous declaration
 typedef enum _GedaLineCapType GedaLineCapType;
              ^~~~~~~~~~~~~~~~
./../include/libgeda/geda_line_cap_type.h:26:14: error: use of enum ‘_GedaLineCapType’ without previous declaration
 typedef enum _GedaLineCapType OBJECT_END;
              ^~~~~~~~~~~~~~~~
In file included from ./../include/libgeda/libgeda.h:30:0,
                 from test_cpp.cc:1:
/usr/include/c++/6.3.1/bits/stl_algobase.h:195:5: error: expected unqualified-id before ‘const’
     min(const _Tp& __a, const _Tp& __b)
     ^
/usr/include/c++/6.3.1/bits/stl_algobase.h:195:5: error: expected ‘)’ before ‘const’
/usr/include/c++/6.3.1/bits/stl_algobase.h:195:5: error: expected ‘)’ before ‘const’
/usr/include/c++/6.3.1/bits/stl_algobase.h:195:5: error: expected initializer before ‘const’
/usr/include/c++/6.3.1/bits/stl_algobase.h:219:5: error: expected unqualified-id before ‘const’
     max(const _Tp& __a, const _Tp& __b)
     ^
/usr/include/c++/6.3.1/bits/stl_algobase.h:219:5: error: expected ‘)’ before ‘const’
/usr/include/c++/6.3.1/bits/stl_algobase.h:219:5: error: expected ‘)’ before ‘const’
/usr/include/c++/6.3.1/bits/stl_algobase.h:219:5: error: expected initializer before ‘const’
In file included from /usr/include/c++/6.3.1/memory:62:0,
                 from test_cpp.cc:3:
/usr/include/c++/6.3.1/bits/stl_algobase.h:243:5: error: ‘std::min’ declared as an ‘inline’ variable
     min(const _Tp& __a, const _Tp& __b, _Compare __comp)
     ^~~
/usr/include/c++/6.3.1/bits/stl_algobase.h:246:7: error: expected primary-expression before ‘if’
       if (__comp(__b, __a))
       ^~
/usr/include/c++/6.3.1/bits/stl_algobase.h:246:7: error: expected ‘}’ before ‘if’
/usr/include/c++/6.3.1/bits/stl_algobase.h:246:7: error: expected ‘;’ before ‘if’
/usr/include/c++/6.3.1/bits/stl_algobase.h:248:7: error: expected unqualified-id before ‘return’
       return __a;
       ^~~~~~
/usr/include/c++/6.3.1/bits/stl_algobase.h:265:5: error: ‘max’ declared as an ‘inline’ variable
     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
     ^~~
/usr/include/c++/6.3.1/bits/stl_algobase.h:268:7: error: expected primary-expression before ‘if’
       if (__comp(__a, __b))
       ^~
/usr/include/c++/6.3.1/bits/stl_algobase.h:268:7: error: expected ‘}’ before ‘if’
/usr/include/c++/6.3.1/bits/stl_algobase.h:268:7: error: expected ‘;’ before ‘if’
/usr/include/c++/6.3.1/bits/stl_algobase.h:270:7: error: expected unqualified-id before ‘return’
       return __a;
       ^~~~~~
/usr/include/c++/6.3.1/bits/stl_algobase.h:271:5: error: expected declaration before ‘}’ token
     }
     ^

utils/xyrs: 'make check' fails with perl >= 5.26

After perl upgrade (to 5.26) make check starts to fail in utils/tests/gxyrs
(first two tests: do_nothing_tabulated, do_nothing).
This is due to removal of the current directory (".") from @INC in perl 5.26
(see perl 5.26 release notes).
As a temporary fix we could export PERL_USE_UNSAFE_INC=1 while running xyrs tests.

v1.9.3 configuration howto is wanted for efficiency.

By efficiency, I mean, "Not ready for results-required user making a OSHW board on a low budget." Also with a low time budget, not just low money.

I saw a comment about using command line to set config files.
Then I put a question to the email list geda-user, then to irc #geda,
"Where do I find a howto on config files for letpon-eda?"
then I did other things, checked elists
and no answer, so I try to refind the comment about using command line to set config files and cannot find it in 30 minutes.

So now I am working around this by using /symbols dir in each project, and no access to my other libraries without copying from my filesystem.

I did find and start reading the info formatted doc on geda-scheme, but have not come across how to use config files -- more about inheritance and contexts with more reading required to understand...

I just remembered that the word migration was in that comment I was trying to refind... Going to look for that.

Enumerated attributes

It would be better for enumerated attributes to have the form name:number=value than name=number:value. Cleaner to display and easier to promote and override.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.