#!/usr/bin/env php getSettingPlugin(NULL, TRUE), function (SettingInterface $setting) { return !!$setting->getGroups(); }); // Populate the variables with settings. $variables = ['groups' => []]; $deprecatedSettings = []; $replacementPairs = [ '"' => '"', '\n' => "\n", ]; foreach ($settings as $id => $setting) { $defaultValue = $setting->getDefaultValue(); $deprecated = FALSE; if ($setting instanceof DeprecatedSettingInterface) { $newSetting = $setting->getDeprecatedReplacementSetting()->getPluginId(); $deprecated = [ 'reason' => new FormattableMarkup($setting->getDeprecatedReason(), []), 'replacement' => new FormattableMarkup('@setting', [ '@anchor' => Html::cleanCssIdentifier($newSetting), '@setting' => $newSetting, ]), 'version' => new FormattableMarkup($setting->getDeprecatedVersion(), []), ]; } $data = [ 'id' => $id, 'description' => new FormattableMarkup(strtr($setting->getDescription(), $replacementPairs), []), 'defaultValue' => $defaultValue !== NULL ? new FormattableMarkup(strtr(trim(Yaml::encode([$id => $defaultValue])), $replacementPairs), []) : NULL, 'deprecated' => $deprecated, ]; // Defer adding deprecated settings. if ($deprecated) { $deprecatedSettings[$id] = $data; } else { // Only get the first two groups (we don't need 3rd, or more, levels). $header = implode(' > ', array_slice(array_filter($setting->getGroups()), 0, 2, FALSE)); $variables['groups'][$header][$id] = $data; } } // Add Deprecated settings last (special table). if ($deprecatedSettings) { $variables['deprecated'] = $deprecatedSettings; } $docsPath = "{$bootstrap->getPath()}/docs"; // Render the settings. $output = Bootstrap::renderCustomTemplate("{$docsPath}/theme-settings.twig", $variables); // Save the generated output to the appropriate file. $result = Bootstrap::putContents("{$docsPath}/Theme-Settings.md", $output, '', ''); if ($result) { echo 'Successfully generated theme documentation!'; exit(0); } echo 'Unable to generate theme documentation!'; exit(1);