# 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/*",
  "Makefile$",
  "CLA",
  "COMMITTERS",
]
pygmentsCodeFences = true
pygmentsStyle = "tango"
disableKinds = ["taxonomy", "taxonomyTerm", "RSS", "sitemap"]
googleAnalytics = "UA-151030466-2"

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

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