# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

# CAUTION: Use util/build_docs.py to generate the documentation site.  There
# are pre-processing steps that are not yet integrated into the hugo-based
# build.

assetDir = "site/docs/assets"
baseURL = "https://docs.opentitan.org"
disablePathToLower = true
disableLiveReload = true
contentDir = "../.."
resourceDir = "build/docs-resources"
ignoreFiles = [
  ".*\\.S$",
  ".*\\.bin$",
  ".*\\.c$",
  ".*\\.cc$",
  ".*\\.cfg$",
  ".*\\.core$",
  ".*\\.dat$",
  ".*\\.do$",
  ".*\\.el$",
  ".*\\.f$",
  ".*\\.h$",
  ".*\\.hjson$",
  ".*\\.ld$",
  ".*\\.mak$",
  ".*\\.md5$",
  ".*\\.mk$",
  ".*\\.mmi$",
  ".*\\.o$",
  ".*\\.patch$",
  ".*\\.py$",
  ".*\\.pyc$",
  ".*\\.rsp$",
  ".*\\.sh$",
  ".*\\.sv$",
  ".*\\.svh$",
  ".*\\.tcl$",
  ".*\\.tpl$",
  ".*\\.txt$",
  ".*\\.xdc$",
  ".*\\.yml$",
  ".*\\.clang-format$",
  "/__pycache__/*",
  "/build/*",
  "/hw/vendor/*",
  "/sw/vendor/*",
  "/meson.build$",
  "/opentitan-docs/",
  "/scratch/",
  "/site/*",
  "/util/doxygen/",
  "Makefile$",
  "CLA",
  "COMMITTERS",
]
pygmentsCodeFences = true
pygmentsStyle = "colorful"
disableKinds = ["taxonomy", "taxonomyTerm", "RSS", "sitemap"]
googleAnalytics = "UA-151030466-2"
staticDir = [
  # This is the generated software APIs
  "build/docs-generated/sw/public-api",
]

[params]
generatedRoot = "build/docs-generated"

[markup]
  [markup.goldmark.renderer]
    unsafe = true
  [markup.tableOfContents]
    startLevel = 1
    endLevel = 2
    ordered = false
