Skip to content

Commit 3f5aae9

Browse files
wouterjlinawolf
authored andcommitted
Allow setting a default highlighting language
1 parent 9cf400b commit 3f5aae9

File tree

6 files changed

+57
-13
lines changed

6 files changed

+57
-13
lines changed

packages/guides-restructured-text/resources/config/guides-restructured-text.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
use phpDocumentor\Guides\RestructuredText\Directives\WarningDirective;
5454
use phpDocumentor\Guides\RestructuredText\Directives\WrapDirective;
5555
use phpDocumentor\Guides\RestructuredText\MarkupLanguageParser;
56+
use phpDocumentor\Guides\RestructuredText\Parser\DocumentParserContextFactory;
5657
use phpDocumentor\Guides\RestructuredText\Parser\InlineParser;
5758
use phpDocumentor\Guides\RestructuredText\Parser\Productions\AnnotationRule;
5859
use phpDocumentor\Guides\RestructuredText\Parser\Productions\BlockQuoteRule;
@@ -319,6 +320,8 @@
319320
->set(SectionRule::class)
320321
->tag('phpdoc.guides.parser.rst.structural_element', ['priority' => SectionRule::PRIORITY])
321322

323+
->set(DocumentParserContextFactory::class)
324+
322325
->set(MarkupLanguageParser::class)
323326
->args([
324327
'$startingRule' => service(DocumentRule::class),

packages/guides-restructured-text/src/RestructuredText/MarkupLanguageParser.php

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
use phpDocumentor\Guides\ParserContext;
1111
use phpDocumentor\Guides\RestructuredText\Parser\BlockContext;
1212
use phpDocumentor\Guides\RestructuredText\Parser\DocumentParserContext;
13+
use phpDocumentor\Guides\RestructuredText\Parser\DocumentParserContextFactory;
1314
use phpDocumentor\Guides\RestructuredText\Parser\Productions\Rule;
14-
use phpDocumentor\Guides\RestructuredText\TextRoles\TextRoleFactory;
1515
use RuntimeException;
1616
use Webmozart\Assert\Assert;
1717

@@ -28,7 +28,7 @@ class MarkupLanguageParser implements ParserInterface
2828
/** @param Rule<DocumentNode> $startingRule */
2929
public function __construct(
3030
private readonly Rule $startingRule,
31-
private readonly TextRoleFactory $textRoleFactory,
31+
private readonly DocumentParserContextFactory $documentParserContextFactory,
3232
) {
3333
}
3434

@@ -42,7 +42,7 @@ public function getSubParser(): MarkupLanguageParser
4242
{
4343
return new MarkupLanguageParser(
4444
$this->startingRule,
45-
$this->textRoleFactory,
45+
$this->documentParserContextFactory,
4646
);
4747
}
4848

@@ -75,11 +75,7 @@ public function parse(ParserContext $parserContext, string $contents): DocumentN
7575
{
7676
$this->parserContext = $parserContext;
7777

78-
$this->documentParser = new DocumentParserContext(
79-
$parserContext,
80-
$this->textRoleFactory,
81-
$this,
82-
);
78+
$this->documentParser = $this->documentParserContextFactory->create($this);
8379

8480
$blockContext = new BlockContext($this->documentParser, $contents);
8581
if ($this->startingRule->applies($blockContext)) {
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace phpDocumentor\Guides\RestructuredText\Parser;
6+
7+
use phpDocumentor\Guides\RestructuredText\MarkupLanguageParser;
8+
use phpDocumentor\Guides\RestructuredText\TextRoles\TextRoleFactory;
9+
use phpDocumentor\Guides\Settings\SettingsManager;
10+
11+
class DocumentParserContextFactory
12+
{
13+
public function __construct(
14+
private readonly TextRoleFactory $textRoleFactory,
15+
private readonly SettingsManager $settingsManager,
16+
) {
17+
}
18+
19+
public function create(MarkupLanguageParser $markupLanguageParser): DocumentParserContext
20+
{
21+
$documentParser = new DocumentParserContext(
22+
$markupLanguageParser->getParserContext(),
23+
$this->textRoleFactory,
24+
$markupLanguageParser,
25+
);
26+
27+
$documentParser->setCodeBlockDefaultLanguage($this->settingsManager->getProjectSettings()->getDefaultCodeLanguage());
28+
29+
return $documentParser;
30+
}
31+
}

packages/guides/src/DependencyInjection/GuidesExtension.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ public function getConfigTreeBuilder(): TreeBuilder
7474
->defaultValue([])
7575
->scalarPrototype()->end()
7676
->end()
77+
->scalarNode('default_code_language')->defaultValue('')->end()
7778
->arrayNode('themes')
7879
->defaultValue([])
7980
->arrayPrototype()
@@ -159,6 +160,10 @@ public function load(array $configs, ContainerBuilder $container): void
159160
$projectSettings->setFailOnError((bool) $config['show_progress']);
160161
}
161162

163+
if (isset($config['default_code_language'])) {
164+
$projectSettings->setDefaultCodeLanguage((string) $config['default_code_language']);
165+
}
166+
162167
$container->getDefinition(SettingsManager::class)
163168
->addMethodCall('setProjectSettings', [$projectSettings]);
164169

packages/guides/src/Settings/ProjectSettings.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ class ProjectSettings
2020
private string $logPath = 'php://stder';
2121
private bool $failOnError = false;
2222
private bool $showProgressBar = true;
23+
private string $defaultCodeLanguage = '';
2324

2425
public function getTitle(): string
2526
{
@@ -135,6 +136,16 @@ public function setOutputFormats(array $outputFormats): void
135136
$this->outputFormats = $outputFormats;
136137
}
137138

139+
public function setDefaultCodeLanguage(string $defaultCodeLanguage): void
140+
{
141+
$this->defaultCodeLanguage = $defaultCodeLanguage;
142+
}
143+
144+
public function getDefaultCodeLanguage(): string
145+
{
146+
return $this->defaultCodeLanguage;
147+
}
148+
138149
public function getInputFile(): string
139150
{
140151
return $this->inputFile;

packages/guides/src/Settings/SettingsManager.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,9 @@
66

77
class SettingsManager
88
{
9-
private ProjectSettings $projectSettings;
10-
11-
public function __construct(ProjectSettings|null $projectSettings = null)
12-
{
13-
$this->projectSettings = $projectSettings ?? new ProjectSettings();
9+
public function __construct(
10+
private ProjectSettings $projectSettings = new ProjectSettings(),
11+
) {
1412
}
1513

1614
public function getProjectSettings(): ProjectSettings

0 commit comments

Comments
 (0)