diff options
Diffstat (limited to 'json4cpp/docs/docset/Makefile')
| -rw-r--r-- | json4cpp/docs/docset/Makefile | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/json4cpp/docs/docset/Makefile b/json4cpp/docs/docset/Makefile new file mode 100644 index 0000000000..9f43634629 --- /dev/null +++ b/json4cpp/docs/docset/Makefile @@ -0,0 +1,88 @@ +SHELL=/usr/bin/env bash +SED ?= $(shell which gsed 2>/dev/null || which sed) + +MKDOCS_PAGES=$(shell cd ../mkdocs/docs/ && find * -type f -name '*.md' | sort) + +.PHONY: all +all: JSON_for_Modern_C++.tgz + +docSet.dsidx: docSet.sql + # generate index + sqlite3 docSet.dsidx <docSet.sql + +JSON_for_Modern_C++.docset: Info.plist docSet.dsidx + rm -fr JSON_for_Modern_C++.docset JSON_for_Modern_C++.tgz + mkdir -p JSON_for_Modern_C++.docset/Contents/Resources/Documents/ + cp icon*.png JSON_for_Modern_C++.docset + cp Info.plist JSON_for_Modern_C++.docset/Contents + # build and copy documentation + $(MAKE) install_venv -C ../mkdocs + $(MAKE) build -C ../mkdocs + cp -r ../mkdocs/site/* JSON_for_Modern_C++.docset/Contents/Resources/Documents + # patch CSS to hide navigation items + echo -e "\n\nheader, footer, nav.md-tabs, nav.md-tabs--active, div.md-sidebar--primary, a.md-content__button { display: none; }" >> "$$(ls JSON_for_Modern_C++.docset/Contents/Resources/Documents/assets/stylesheets/main.*.min.css)" + # fix spacing + echo -e "\n\ndiv.md-sidebar div.md-sidebar--secondary, div.md-main__inner { top: 0; margin-top: 0 }" >> "$$(ls JSON_for_Modern_C++.docset/Contents/Resources/Documents/assets/stylesheets/main.*.min.css)" + # remove "JSON for Modern C++" from page titles (fallback) + find JSON_for_Modern_C++.docset/Contents/Resources/Documents -type f -exec $(SED) -i 's| - JSON for Modern C++</title>|</title>|' {} + + # replace page titles with name from index, if available + for page in $(MKDOCS_PAGES); do \ + case "$$page" in \ + */index.md) path=$${page/\/index.md/} ;; \ + *) path=$${page/.md/} ;; \ + esac; \ + title=$$(sqlite3 docSet.dsidx "SELECT name FROM searchIndex WHERE path='$$path/index.html'" | tr '\n' ',' | $(SED) -e 's/,/, /g' -e 's/, $$/\n/'); \ + if [ "x$$title" != "x" ]; then \ + $(SED) -i "s%<title>.*</title>%<title>$$title</title>%" "JSON_for_Modern_C++.docset/Contents/Resources/Documents/$$path/index.html"; \ + fi \ + done + # clean up + rm JSON_for_Modern_C++.docset/Contents/Resources/Documents/sitemap.* + # copy index + cp docSet.dsidx JSON_for_Modern_C++.docset/Contents/Resources/ + +JSON_for_Modern_C++.tgz: JSON_for_Modern_C++.docset + tar --exclude='.DS_Store' -cvzf JSON_for_Modern_C++.tgz JSON_for_Modern_C++.docset + +# install docset for Zeal documentation browser (https://zealdocs.org/) +.PHONY: install_docset_zeal +install_docset_zeal: JSON_for_Modern_C++.docset + docset_root=$${XDG_DATA_HOME:-$$HOME/.local/share}/Zeal/Zeal/docsets; \ + rm -rf $$docset_root/JSON_for_Modern_C++.docset; \ + mkdir -p $$docset_root; \ + cp -r JSON_for_Modern_C++.docset $$docset_root/ + +# list mkdocs pages missing from the docset index +.PHONY: list_missing_pages +list_missing_pages: docSet.dsidx + @for page in $(MKDOCS_PAGES); do \ + case "$$page" in \ + */index.md) path=$${page/\/index.md/} ;; \ + *) path=$${page/.md/} ;; \ + esac; \ + if [ "x$$page" != "xindex.md" -a "x$$(sqlite3 docSet.dsidx "SELECT COUNT(*) FROM searchIndex WHERE path='$$path/index.html'")" = "x0" ]; then \ + echo $$page; \ + fi \ + done + +# list paths in the docset index without a corresponding mkdocs page +.PHONY: list_removed_paths +list_removed_paths: docSet.dsidx + @for path in $$(sqlite3 docSet.dsidx "SELECT path FROM searchIndex"); do \ + page=$${path/\/index.html/.md}; \ + page_index=$${path/index.html/index.md}; \ + page_found=0; \ + for p in $(MKDOCS_PAGES); do \ + if [ "x$$p" = "x$$page" -o "x$$p" = "x$$page_index" ]; then \ + page_found=1; \ + fi \ + done; \ + if [ "x$$page_found" = "x0" ]; then \ + echo $$path; \ + fi \ + done + +.PHONY: clean +clean: + rm -f docSet.dsidx + rm -fr JSON_for_Modern_C++.docset JSON_for_Modern_C++.tgz |
