diff --git a/docs/make.jl b/docs/make.jl index e30f558..6769363 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -3,6 +3,59 @@ using Documenter, JuliaFEM +""" + copy_docs(pkg_name) + +Copy documentation of some package `pkg_name` to `docs/src/pkg_name`, +where `pkg_name` is the name of package. Return true if success, false +otherwise. +""" +function copy_docs(pkg_name) + src = joinpath(Pkg.dir(pkg_name), "docs", "src") + if !isdir(src) + warn("Cannot copy documentation of package $pkg_name from $src: ", + "No such directory exists. (Is the package in REQUIRE of JuliaFEM?)") + return false + end + dst = joinpath(Pkg.dir("JuliaFEM"), "docs", "src", pkg_name) + cp(src, dst; remove_destination=true) + info("Copied documentation of package $pkg_name from $src succesfully.") + return true +end + +""" + add_page!(part, page) + +Add new page to documentation. Part can be USER_GUIDE, DEVELOPER_GUIDE or +PACKAGES. `page` is a string containing path to the page, or `Pair` +where key is the name of the page and value is the path to the page. + +# Examples + +If page starts with `#`, i.e. having title, page is automatically included +to documentation with that name: + +```julia +add_page!(PACKAGES, "MyPackage/index.md") +``` + +Title can be changed using `Pair`, i.e. + +```julia +add_page!(PACKAGES, "Theory" => "MyPackage/theory.md") +``` + +""" +function add_page!(dst, src) + file = isa(src, Pair) ? src.second : src + if !isfile(joinpath(Pkg.dir("JuliaFEM"), "docs", "src", file)) + warn("Cannot add page $file: no such file") + return false + end + push!(dst, src) + return true +end + #= if haskey(ENV, "TRAVIS") println("inside TRAVIS, installing PyPlot + matplotlib") @@ -11,11 +64,52 @@ if haskey(ENV, "TRAVIS") end =# +USER_GUIDE = [] + +# Developer's guide is published in FEMBase.jl +DEVELOPER_GUIDE = [] +if copy_docs("FEMBase") + add_page!(DEVELOPER_GUIDE, "FEMBase/mesh.md") + add_page!(DEVELOPER_GUIDE, "FEMBase/fields.md") + add_page!(DEVELOPER_GUIDE, "FEMBase/basis.md") + add_page!(DEVELOPER_GUIDE, "FEMBase/integration.md") + add_page!(DEVELOPER_GUIDE, "FEMBase/elements.md") + add_page!(DEVELOPER_GUIDE, "FEMBase/problems.md") + add_page!(DEVELOPER_GUIDE, "FEMBase/solvers.md") + add_page!(DEVELOPER_GUIDE, "FEMBase/postprocessing.md") + add_page!(DEVELOPER_GUIDE, "FEMBase/results.md") + add_page!(DEVELOPER_GUIDE, "FEMBase/materials.md") +end + +# Let's construct here some description for packages +PACKAGES = [] + +if copy_docs("FEMQuad") + add_page!(PACKAGES, "FEMQuad/index.md") +end + +if copy_docs("FEMBasis") + add_page!(PACKAGES, "FEMBasis/index.md") +end + +if copy_docs("HeatTransfer") + add_page!(PACKAGES, "HeatTransfer/index.md") +end + +# API documentation +LIBRARY = ["api.md"] + +# Collect all together +PAGES = [] +push!(PAGES, "Home" => "index.md") +#push!(PAGES, "User's guide" => USER_GUIDE) +push!(PAGES, "Developer's guide" => DEVELOPER_GUIDE) +push!(PAGES, "Description of packages" => PACKAGES) +#push!("API documentation" => LIBRARY) + makedocs(modules=[JuliaFEM], format = :html, + checkdocs = :all, sitename = "JuliaFEM", - pages = [ - "Introduction" => "index.md", - "Examples" => "examples.md", - "API" => "api.md" - ]) + analytics = "UA-83590644-1", + pages = PAGES)