diff --git a/packages/guides-cli/resources/schema/guides.xsd b/packages/guides-cli/resources/schema/guides.xsd
index 55cce92d2..a90901dad 100644
--- a/packages/guides-cli/resources/schema/guides.xsd
+++ b/packages/guides-cli/resources/schema/guides.xsd
@@ -23,6 +23,7 @@
+
diff --git a/packages/guides-restructured-text/resources/config/guides-restructured-text.php b/packages/guides-restructured-text/resources/config/guides-restructured-text.php
index b76bbae87..fb1bcdbc9 100644
--- a/packages/guides-restructured-text/resources/config/guides-restructured-text.php
+++ b/packages/guides-restructured-text/resources/config/guides-restructured-text.php
@@ -53,6 +53,7 @@
use phpDocumentor\Guides\RestructuredText\Directives\WarningDirective;
use phpDocumentor\Guides\RestructuredText\Directives\WrapDirective;
use phpDocumentor\Guides\RestructuredText\MarkupLanguageParser;
+use phpDocumentor\Guides\RestructuredText\Parser\DocumentParserContextFactory;
use phpDocumentor\Guides\RestructuredText\Parser\InlineParser;
use phpDocumentor\Guides\RestructuredText\Parser\Productions\AnnotationRule;
use phpDocumentor\Guides\RestructuredText\Parser\Productions\BlockQuoteRule;
@@ -319,6 +320,8 @@
->set(SectionRule::class)
->tag('phpdoc.guides.parser.rst.structural_element', ['priority' => SectionRule::PRIORITY])
+ ->set(DocumentParserContextFactory::class)
+
->set(MarkupLanguageParser::class)
->args([
'$startingRule' => service(DocumentRule::class),
diff --git a/packages/guides-restructured-text/src/RestructuredText/MarkupLanguageParser.php b/packages/guides-restructured-text/src/RestructuredText/MarkupLanguageParser.php
index 54f58cce9..cb215cc9b 100644
--- a/packages/guides-restructured-text/src/RestructuredText/MarkupLanguageParser.php
+++ b/packages/guides-restructured-text/src/RestructuredText/MarkupLanguageParser.php
@@ -10,8 +10,8 @@
use phpDocumentor\Guides\ParserContext;
use phpDocumentor\Guides\RestructuredText\Parser\BlockContext;
use phpDocumentor\Guides\RestructuredText\Parser\DocumentParserContext;
+use phpDocumentor\Guides\RestructuredText\Parser\DocumentParserContextFactory;
use phpDocumentor\Guides\RestructuredText\Parser\Productions\Rule;
-use phpDocumentor\Guides\RestructuredText\TextRoles\TextRoleFactory;
use RuntimeException;
use Webmozart\Assert\Assert;
@@ -28,7 +28,7 @@ class MarkupLanguageParser implements ParserInterface
/** @param Rule $startingRule */
public function __construct(
private readonly Rule $startingRule,
- private readonly TextRoleFactory $textRoleFactory,
+ private readonly DocumentParserContextFactory $documentParserContextFactory,
) {
}
@@ -42,7 +42,7 @@ public function getSubParser(): MarkupLanguageParser
{
return new MarkupLanguageParser(
$this->startingRule,
- $this->textRoleFactory,
+ $this->documentParserContextFactory,
);
}
@@ -75,11 +75,7 @@ public function parse(ParserContext $parserContext, string $contents): DocumentN
{
$this->parserContext = $parserContext;
- $this->documentParser = new DocumentParserContext(
- $parserContext,
- $this->textRoleFactory,
- $this,
- );
+ $this->documentParser = $this->documentParserContextFactory->create($this);
$blockContext = new BlockContext($this->documentParser, $contents);
if ($this->startingRule->applies($blockContext)) {
diff --git a/packages/guides-restructured-text/src/RestructuredText/Parser/DocumentParserContextFactory.php b/packages/guides-restructured-text/src/RestructuredText/Parser/DocumentParserContextFactory.php
new file mode 100644
index 000000000..1824945a7
--- /dev/null
+++ b/packages/guides-restructured-text/src/RestructuredText/Parser/DocumentParserContextFactory.php
@@ -0,0 +1,31 @@
+getParserContext(),
+ $this->textRoleFactory,
+ $markupLanguageParser,
+ );
+
+ $documentParser->setCodeBlockDefaultLanguage($this->settingsManager->getProjectSettings()->getDefaultCodeLanguage());
+
+ return $documentParser;
+ }
+}
diff --git a/packages/guides/src/DependencyInjection/GuidesExtension.php b/packages/guides/src/DependencyInjection/GuidesExtension.php
index 68dd8ef28..6b9ba24cd 100644
--- a/packages/guides/src/DependencyInjection/GuidesExtension.php
+++ b/packages/guides/src/DependencyInjection/GuidesExtension.php
@@ -74,6 +74,7 @@ public function getConfigTreeBuilder(): TreeBuilder
->defaultValue([])
->scalarPrototype()->end()
->end()
+ ->scalarNode('default_code_language')->defaultValue('')->end()
->arrayNode('themes')
->defaultValue([])
->arrayPrototype()
@@ -159,6 +160,10 @@ public function load(array $configs, ContainerBuilder $container): void
$projectSettings->setFailOnError((bool) $config['show_progress']);
}
+ if (isset($config['default_code_language'])) {
+ $projectSettings->setDefaultCodeLanguage((string) $config['default_code_language']);
+ }
+
$container->getDefinition(SettingsManager::class)
->addMethodCall('setProjectSettings', [$projectSettings]);
diff --git a/packages/guides/src/Settings/ProjectSettings.php b/packages/guides/src/Settings/ProjectSettings.php
index 36a92f2ee..68d81c3b6 100644
--- a/packages/guides/src/Settings/ProjectSettings.php
+++ b/packages/guides/src/Settings/ProjectSettings.php
@@ -20,6 +20,7 @@ class ProjectSettings
private string $logPath = 'php://stder';
private bool $failOnError = false;
private bool $showProgressBar = true;
+ private string $defaultCodeLanguage = '';
public function getTitle(): string
{
@@ -135,6 +136,16 @@ public function setOutputFormats(array $outputFormats): void
$this->outputFormats = $outputFormats;
}
+ public function setDefaultCodeLanguage(string $defaultCodeLanguage): void
+ {
+ $this->defaultCodeLanguage = $defaultCodeLanguage;
+ }
+
+ public function getDefaultCodeLanguage(): string
+ {
+ return $this->defaultCodeLanguage;
+ }
+
public function getInputFile(): string
{
return $this->inputFile;
diff --git a/packages/guides/src/Settings/SettingsManager.php b/packages/guides/src/Settings/SettingsManager.php
index 49ab48468..8bc9d66a6 100644
--- a/packages/guides/src/Settings/SettingsManager.php
+++ b/packages/guides/src/Settings/SettingsManager.php
@@ -6,11 +6,9 @@
class SettingsManager
{
- private ProjectSettings $projectSettings;
-
- public function __construct(ProjectSettings|null $projectSettings = null)
- {
- $this->projectSettings = $projectSettings ?? new ProjectSettings();
+ public function __construct(
+ private ProjectSettings $projectSettings = new ProjectSettings(),
+ ) {
}
public function getProjectSettings(): ProjectSettings
diff --git a/tests/Integration/tests/code/literal-block-default-language-php/expected/index.html b/tests/Integration/tests/code/literal-block-default-language-php/expected/index.html
new file mode 100644
index 000000000..e5efac4b6
--- /dev/null
+++ b/tests/Integration/tests/code/literal-block-default-language-php/expected/index.html
@@ -0,0 +1,17 @@
+
+
+
+ Code Block
+
+
+
+
+
Code Block
+
+
$some = 'PHP';
+
+
$someThing = 'else';
+
+
+
+
diff --git a/tests/Integration/tests/code/literal-block-default-language-php/input/guides.xml b/tests/Integration/tests/code/literal-block-default-language-php/input/guides.xml
new file mode 100644
index 000000000..9d2916f7e
--- /dev/null
+++ b/tests/Integration/tests/code/literal-block-default-language-php/input/guides.xml
@@ -0,0 +1,7 @@
+
+
+
diff --git a/tests/Integration/tests/code/literal-block-default-language-php/input/index.rst b/tests/Integration/tests/code/literal-block-default-language-php/input/index.rst
new file mode 100644
index 000000000..4fd3a0ea9
--- /dev/null
+++ b/tests/Integration/tests/code/literal-block-default-language-php/input/index.rst
@@ -0,0 +1,10 @@
+Code Block
+==========
+
+::
+
+ $some = 'PHP';
+
+.. code-block::
+
+ $someThing = 'else';