| File | Mode | Size |
|---|---|---|
| .zs/ | 040000 | |
| data/ | 040000 | |
| docs/ | 040000 | |
| man/ | 040000 | |
| src/ | 040000 | |
| tests/ | 040000 | |
| third-party/ | 040000 | |
| tools/ | 040000 | |
| .gitignore | 100644 | 313B |
| .gitmodules | 100644 | 233B |
| COPYING | 100644 | 34KiB |
| Makefile | 100644 | 8,817B |
| README.md | 100644 | 5,882B |
zograscope, 2017 - 2024

Clone recursively, there are submodules:
git clone --recursive https://github.com/xaizek/zograscope.git
"A zograscope is an optical device for enhancing the sense of depth perception from a flat picture." (wiki)
zograscope is built around syntax-aware diff and includes a number of
additional tools.
The nature of syntax-aware diff requires knowledge of structure of the code, which can be used to build other simple tools that can benefit from this information. Competing with real language front-ends in the level of accuracy is not possible, but making some things that are one step further than regular text-processing utilities seems feasible and the result might be even more practical than some of the more elaborate tools which end up requiring complicated setup process.
The project is work in progress, but is useful in its current state.
Code isn't perfect and isn't extensively documented as initial version was more of an experiment, but this situation gets better.
See the manual page.
A terminal-based syntax-aware diff.
Grep-like tool that finds elements of source code structure.
A Qt5 GUI version of syntax-aware diff.
Simple syntax highlighter for xterm-256color palette.
Counter of lines of code.
TUI interface with underdefined scope of functionality.
# if Qt5 is available (use `qmake` if it corresponds to Qt5 on your machine)
echo 'QT5_PROG := qmake-qt5' >> config.mk
# if libgit2 is present
echo 'HAVE_LIBGIT2 := yes' >> config.mk
# if libsrcml is present
echo 'HAVE_LIBSRCML := yes' >> config.mk
# if cursesw is present
echo 'HAVE_CURSESW := yes' >> config.mk
make release check
This will build release version and run tests. The executables will be named
release/zs-*.
There is no data, so just making them available in the $PATH will work.
However, it's possible to install conventionally (/usr prefix by default):
make install
DESTDIR and PREFIX can be set to modify destination location. On invoking
make uninstall same values of these values should be specified.
gdiff tool) qt5gdiff tool) libgit2tui tool) curses with support of wide charactersIf you are using Debian or one of its derivatives, you can install the dependencies as follows:
# install make and build tools
sudo apt install -y build-essential
# installing dependencies
sudo apt install -y libboost-filesystem-dev libboost-iostreams-dev
sudo apt install -y libboost-program-options-dev libboost-system-dev
sudo apt install -y libarchive13
sudo apt install -y bison flex
# installing srcml
wget http://131.123.42.38/lmcrs/beta/srcML-Ubuntu18.04.deb
sudo apt install ./srcML-Ubuntu18.04.deb
You can also check out the CI build script in case dependencies change in the future.

Version 3 of the GNU Affero General Public License.
dtl library is used for finding edit distance.
pmr implementation from C++17 with a small addition is employed for custom allocators.
TinyXML2 is used for parsing XML.
tree-sitter is used for parsing of some languages.
Catch2 is used for tests.
Change Distilling: Tree Differencing for Fine-Grained Source Code Change Extraction. Beat Fluri, Michael Würsch, Martin Pinzger, and Harald C. Gall. 2007.
Change Detection in Hierarchically Structured Information. Sudarshan Chawathe, Hector Garcia-molina and Jennifer Widom. 1996.
Simple fast algorithms for the editing distance between trees and related problems. Kaizhong Zhang and Dennis Shasha. 1989.