diff --git a/.gitignore b/.gitignore index ae7946a348..353bdd61c2 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,8 @@ __pycache__/ # Build artifacts build/ makelog.txt +nyaml/ # Unknown /python/ -__github_creds__.txt +__github_creds__.txt \ No newline at end of file diff --git a/Makefile b/Makefile index ae556d7339..eefdcb3a9b 100644 --- a/Makefile +++ b/Makefile @@ -5,9 +5,18 @@ PYTHON = python3 SPHINX = sphinx-build -BUILD_DIR = "build" +BUILD_DIR = build +BASE_CLASS_DIR = base_classes +CONTRIB_DIR = contributed_definitions +APPDEF_DIR = applications +NYAML_SUBDIR = nyaml -.PHONY: help install style autoformat test clean prepare html pdf impatient-guide all local +YBC_NXDL_TARGETS = $(patsubst %.yaml,%.nxdl.xml,$(subst /nyaml/,/, $(wildcard $(BASE_CLASS_DIR)/nyaml/*.yaml))) +YCONTRIB_NXDL_TARGETS = $(patsubst %.yaml,%.nxdl.xml,$(subst /nyaml/,/, $(wildcard $(CONTRIB_DIR)/nyaml/*.yaml))) +YAPPDEF_NXDL_TARGETS = $(patsubst %.yaml,%.nxdl.xml,$(subst /nyaml/,/, $(wildcard $(APPDEF_DIR)/nyaml/*.yaml))) + + +.PHONY: help install style autoformat test clean prepare html pdf impatient-guide all local nxdl nyaml help :: @echo "" @@ -25,6 +34,8 @@ help :: @echo "make impatient-guide Build html & PDF versions of the Guide for the Impatient. Requires prepare first." @echo "make all Builds complete web site for the manual (in build directory)." @echo "make local (Developer use) Test, prepare and build the HTML manual." + @echo "make nxdl Build NXDL files from NYAML files in nyaml subdirectories." + @echo "make nyaml Build NYAML files to nyaml subdirectories from NXDL files." @echo "" @echo "Note: All builds of the manual will occur in the 'build/' directory." @echo " For a complete build, run 'make all' in the root directory." @@ -49,6 +60,9 @@ test :: clean :: $(RM) -rf $(BUILD_DIR) + $(RM) -rf $(BASE_CLASS_DIR)/$(NYAML_SUBDIR) + $(RM) -rf $(APPDEF_DIR)/$(NYAML_SUBDIR) + $(RM) -rf $(CONTRIB_DIR)/$(NYAML_SUBDIR) prepare :: $(PYTHON) -m dev_tools manual --prepare --build-root $(BUILD_DIR) @@ -83,6 +97,20 @@ all :: @echo "HTML built: `ls -lAFgh $(BUILD_DIR)/manual/build/html/index.html`" @echo "PDF built: `ls -lAFgh $(BUILD_DIR)/manual/build/latex/nexus.pdf`" +$(BASE_CLASS_DIR)/%.nxdl.xml : $(BASE_CLASS_DIR)/$(NYAML_SUBDIR)/%.yaml + nyaml2nxdl $< --output-file $@ + +$(CONTRIB_DIR)/%.nxdl.xml : $(CONTRIB_DIR)/$(NYAML_SUBDIR)/%.yaml + nyaml2nxdl $< --output-file $@ + +$(APPDEF_DIR)/%.nxdl.xml : $(APPDEF_DIR)/$(NYAML_SUBDIR)/%.yaml + nyaml2nxdl $< --output-file $@ + +nxdl: $(YBC_NXDL_TARGETS) $(YCONTRIB_NXDL_TARGETS) $(YAPPDEF_NXDL_TARGETS) + +nyaml: + $(MAKE) -f nyaml.mk + # NeXus - Neutron and X-ray Common Data Format # diff --git a/README.md b/README.md index 76112c7704..5a0a9e734d 100755 --- a/README.md +++ b/README.md @@ -33,6 +33,24 @@ Note: If set this will increase the build time of the documentation by approxima setenv GH_TOKEN +### Working with nyaml files + +There exists a simplified format of nxdl, which is called nyaml. +There is a [tool](https://github.com/FAIRmat-NFDI/nyaml) (`nyaml2nxdl`) available to convert between nxdl and nyaml. +This tool is already installed when you installed the requirements for this repository and it is conveniently available from the make command. + +You can build nyaml files for all nxdl files with invoking + + make nyaml + +which will created `.yaml` files in a subfolder called `nyaml` in the respective directory. + +From this you can do your changes and create nxdl files with + + make nxdl + +from the yaml files. + ## Repository content These are the components that define the structure of NeXus data files diff --git a/nyaml.mk b/nyaml.mk new file mode 100644 index 0000000000..898ebd6cc5 --- /dev/null +++ b/nyaml.mk @@ -0,0 +1,25 @@ +BASE_CLASS_DIR := base_classes +CONTRIB_DIR := contributed_definitions +APPDEF_DIR := applications +NYAML_SUBDIR := nyaml +NXDL_BC_TARGETS = $(addprefix $(BASE_CLASS_DIR)/nyaml/,$(notdir $(patsubst %.nxdl.xml,%.yaml,$(wildcard $(BASE_CLASS_DIR)/*.nxdl.xml)))) +NXDL_APPDEF_TARGETS = $(addprefix $(APPDEF_DIR)/nyaml/,$(notdir $(patsubst %.nxdl.xml,%.yaml,$(wildcard $(APPDEF_DIR)/*.nxdl.xml)))) +NXDL_CONTRIB_TARGETS = $(addprefix $(CONTRIB_DIR)/nyaml/,$(notdir $(patsubst %.nxdl.xml,%.yaml,$(wildcard $(CONTRIB_DIR)/*.nxdl.xml)))) + +.PHONY: all nyaml + +$(BASE_CLASS_DIR)/$(NYAML_SUBDIR)/%.yaml : $(BASE_CLASS_DIR)/%.nxdl.xml + @mkdir -p $(@D) + nyaml2nxdl $< --output-file $@ + +$(CONTRIB_DIR)/$(NYAML_SUBDIR)/%.yaml : $(CONTRIB_DIR)/%.nxdl.xml + @mkdir -p $(@D) + nyaml2nxdl $< --output-file $@ + +$(APPDEF_DIR)/$(NYAML_SUBDIR)/%.yaml : $(APPDEF_DIR)/%.nxdl.xml + @mkdir -p $(@D) + nyaml2nxdl $< --output-file $@ + +nyaml: $(NXDL_BC_TARGETS) $(NXDL_APPDEF_TARGETS) $(NXDL_CONTRIB_TARGETS) + +all: nyaml diff --git a/requirements.txt b/requirements.txt index 6d024bda3a..0460907461 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,7 @@ # Prepare for Documentation lxml pyyaml +nyaml # Documentation building sphinx>=5