From b7827ed2868555acaff743ea969c5fe829cf0504 Mon Sep 17 00:00:00 2001 From: Wouter de Jong Date: Tue, 10 Oct 2023 13:53:43 +0200 Subject: [PATCH 1/3] Allow setting a default highlighting language --- .../config/guides-restructured-text.php | 3 ++ .../RestructuredText/MarkupLanguageParser.php | 12 +++---- .../Parser/DocumentParserContextFactory.php | 31 +++++++++++++++++++ .../DependencyInjection/GuidesExtension.php | 5 +++ .../guides/src/Settings/ProjectSettings.php | 11 +++++++ .../guides/src/Settings/SettingsManager.php | 8 ++--- 6 files changed, 57 insertions(+), 13 deletions(-) create mode 100644 packages/guides-restructured-text/src/RestructuredText/Parser/DocumentParserContextFactory.php 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 From bc852a5dcab73703fb570eb502e2db548d13ebf4 Mon Sep 17 00:00:00 2001 From: "lina.wolf" Date: Sat, 21 Oct 2023 10:52:23 +0200 Subject: [PATCH 2/3] [TASK] Add integration tests --- .../expected/index.html | 17 +++++++++++++++++ .../input/guides.xml | 7 +++++++ .../input/index.rst | 10 ++++++++++ 3 files changed, 34 insertions(+) create mode 100644 tests/Integration/tests/code/literal-block-default-language-php/expected/index.html create mode 100644 tests/Integration/tests/code/literal-block-default-language-php/input/guides.xml create mode 100644 tests/Integration/tests/code/literal-block-default-language-php/input/index.rst 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'; From c7dad02b8c716d0898b7d4043c6e26610ceeb4ff Mon Sep 17 00:00:00 2001 From: "lina.wolf" Date: Sat, 21 Oct 2023 11:07:30 +0200 Subject: [PATCH 3/3] [BUGFIX] Add default-code-language to guides.xsd --- packages/guides-cli/resources/schema/guides.xsd | 1 + 1 file changed, 1 insertion(+) 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 @@ +