1c5f01b2fSopenharmony_ciSHELL=/usr/bin/env bash 2c5f01b2fSopenharmony_ciSED ?= $(shell which gsed 2>/dev/null || which sed) 3c5f01b2fSopenharmony_ci 4c5f01b2fSopenharmony_ciMKDOCS_PAGES=$(shell cd ../mkdocs/docs/ && find * -type f -name '*.md' | sort) 5c5f01b2fSopenharmony_ci 6c5f01b2fSopenharmony_ci.PHONY: all 7c5f01b2fSopenharmony_ciall: JSON_for_Modern_C++.tgz 8c5f01b2fSopenharmony_ci 9c5f01b2fSopenharmony_cidocSet.dsidx: docSet.sql 10c5f01b2fSopenharmony_ci # generate index 11c5f01b2fSopenharmony_ci sqlite3 docSet.dsidx <docSet.sql 12c5f01b2fSopenharmony_ci 13c5f01b2fSopenharmony_ciJSON_for_Modern_C++.docset: Info.plist docSet.dsidx 14c5f01b2fSopenharmony_ci rm -fr JSON_for_Modern_C++.docset JSON_for_Modern_C++.tgz 15c5f01b2fSopenharmony_ci mkdir -p JSON_for_Modern_C++.docset/Contents/Resources/Documents/ 16c5f01b2fSopenharmony_ci cp icon*.png JSON_for_Modern_C++.docset 17c5f01b2fSopenharmony_ci cp Info.plist JSON_for_Modern_C++.docset/Contents 18c5f01b2fSopenharmony_ci # build and copy documentation 19c5f01b2fSopenharmony_ci $(MAKE) build -C ../mkdocs 20c5f01b2fSopenharmony_ci cp -r ../mkdocs/site/* JSON_for_Modern_C++.docset/Contents/Resources/Documents 21c5f01b2fSopenharmony_ci # patch CSS to hide navigation items 22c5f01b2fSopenharmony_ci 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)" 23c5f01b2fSopenharmony_ci # fix spacing 24c5f01b2fSopenharmony_ci 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)" 25c5f01b2fSopenharmony_ci # remove "JSON for Modern C++" from page titles (fallback) 26c5f01b2fSopenharmony_ci find JSON_for_Modern_C++.docset/Contents/Resources/Documents -type f -exec $(SED) -i 's| - JSON for Modern C++</title>|</title>|' {} + 27c5f01b2fSopenharmony_ci # replace page titles with name from index, if available 28c5f01b2fSopenharmony_ci for page in $(MKDOCS_PAGES); do \ 29c5f01b2fSopenharmony_ci case "$$page" in \ 30c5f01b2fSopenharmony_ci */index.md) path=$${page/\/index.md/} ;; \ 31c5f01b2fSopenharmony_ci *) path=$${page/.md/} ;; \ 32c5f01b2fSopenharmony_ci esac; \ 33c5f01b2fSopenharmony_ci title=$$(sqlite3 docSet.dsidx "SELECT name FROM searchIndex WHERE path='$$path/index.html'" | tr '\n' ',' | $(SED) -e 's/,/, /g' -e 's/, $$/\n/'); \ 34c5f01b2fSopenharmony_ci if [ "x$$title" != "x" ]; then \ 35c5f01b2fSopenharmony_ci $(SED) -i "s%<title>.*</title>%<title>$$title</title>%" "JSON_for_Modern_C++.docset/Contents/Resources/Documents/$$path/index.html"; \ 36c5f01b2fSopenharmony_ci fi \ 37c5f01b2fSopenharmony_ci done 38c5f01b2fSopenharmony_ci # clean up 39c5f01b2fSopenharmony_ci rm JSON_for_Modern_C++.docset/Contents/Resources/Documents/sitemap.* 40c5f01b2fSopenharmony_ci # copy index 41c5f01b2fSopenharmony_ci cp docSet.dsidx JSON_for_Modern_C++.docset/Contents/Resources/ 42c5f01b2fSopenharmony_ci 43c5f01b2fSopenharmony_ciJSON_for_Modern_C++.tgz: JSON_for_Modern_C++.docset 44c5f01b2fSopenharmony_ci tar --exclude='.DS_Store' -cvzf JSON_for_Modern_C++.tgz JSON_for_Modern_C++.docset 45c5f01b2fSopenharmony_ci 46c5f01b2fSopenharmony_ci# install docset for Zeal documentation browser (https://zealdocs.org/) 47c5f01b2fSopenharmony_ci.PHONY: install_docset_zeal 48c5f01b2fSopenharmony_ciinstall_docset_zeal: JSON_for_Modern_C++.docset 49c5f01b2fSopenharmony_ci docset_root=$${XDG_DATA_HOME:-$$HOME/.local/share}/Zeal/Zeal/docsets; \ 50c5f01b2fSopenharmony_ci rm -rf $$docset_root/JSON_for_Modern_C++.docset; \ 51c5f01b2fSopenharmony_ci mkdir -p $$docset_root; \ 52c5f01b2fSopenharmony_ci cp -r JSON_for_Modern_C++.docset $$docset_root/ 53c5f01b2fSopenharmony_ci 54c5f01b2fSopenharmony_ci# list mkdocs pages missing from the docset index 55c5f01b2fSopenharmony_ci.PHONY: list_missing_pages 56c5f01b2fSopenharmony_cilist_missing_pages: docSet.dsidx 57c5f01b2fSopenharmony_ci @for page in $(MKDOCS_PAGES); do \ 58c5f01b2fSopenharmony_ci case "$$page" in \ 59c5f01b2fSopenharmony_ci */index.md) path=$${page/\/index.md/} ;; \ 60c5f01b2fSopenharmony_ci *) path=$${page/.md/} ;; \ 61c5f01b2fSopenharmony_ci esac; \ 62c5f01b2fSopenharmony_ci if [ "x$$page" != "xindex.md" -a "x$$(sqlite3 docSet.dsidx "SELECT COUNT(*) FROM searchIndex WHERE path='$$path/index.html'")" = "x0" ]; then \ 63c5f01b2fSopenharmony_ci echo $$page; \ 64c5f01b2fSopenharmony_ci fi \ 65c5f01b2fSopenharmony_ci done 66c5f01b2fSopenharmony_ci 67c5f01b2fSopenharmony_ci# list paths in the docset index without a corresponding mkdocs page 68c5f01b2fSopenharmony_ci.PHONY: list_removed_paths 69c5f01b2fSopenharmony_cilist_removed_paths: docSet.dsidx 70c5f01b2fSopenharmony_ci @for path in $$(sqlite3 docSet.dsidx "SELECT path FROM searchIndex"); do \ 71c5f01b2fSopenharmony_ci page=$${path/\/index.html/.md}; \ 72c5f01b2fSopenharmony_ci page_index=$${path/index.html/index.md}; \ 73c5f01b2fSopenharmony_ci page_found=0; \ 74c5f01b2fSopenharmony_ci for p in $(MKDOCS_PAGES); do \ 75c5f01b2fSopenharmony_ci if [ "x$$p" = "x$$page" -o "x$$p" = "x$$page_index" ]; then \ 76c5f01b2fSopenharmony_ci page_found=1; \ 77c5f01b2fSopenharmony_ci fi \ 78c5f01b2fSopenharmony_ci done; \ 79c5f01b2fSopenharmony_ci if [ "x$$page_found" = "x0" ]; then \ 80c5f01b2fSopenharmony_ci echo $$path; \ 81c5f01b2fSopenharmony_ci fi \ 82c5f01b2fSopenharmony_ci done 83c5f01b2fSopenharmony_ci 84c5f01b2fSopenharmony_ci.PHONY: clean 85c5f01b2fSopenharmony_ciclean: 86c5f01b2fSopenharmony_ci rm -f docSet.dsidx 87c5f01b2fSopenharmony_ci rm -fr JSON_for_Modern_C++.docset JSON_for_Modern_C++.tgz 88