1+ Param (
2+ [Parameter (HelpMessage = " Where to output docs" )]
3+ [string ]$OutputDir ,
4+
5+ [Parameter (HelpMessage = " What to name folder for components" )]
6+ [string ]$folderName
7+ )
8+
9+ $preWorkingDir = $pwd ;
10+ Set-Location $PSScriptRoot ;
11+
12+ $OutputDir = Join-Path $preWorkingDir $OutputDir
13+
14+ # Find all Markdown documents
15+ foreach ($markdownFile in Get-ChildItem - Recurse - Path ' ../../components/*/samples/**/*.md' |
16+ Where-Object {$_.FullName -notlike " *\bin\*" -and $_FullName -notlike " *\obj\*" }) {
17+ $contents = Get-Content $markdownFile - Raw
18+
19+ $filePath = $markdownFile.FullName.Substring ($preWorkingDir.Path.Length ).Replace(' \' , ' /' ).Trim(' /' )
20+
21+ # Find title
22+ $contents -match ' title:\s*(?<title>.*)' | Out-Null
23+
24+ $header = $Matches.title
25+
26+ # Find end of YAML
27+ $endIndex = $contents | Select-String - Pattern " ---" - AllMatches | ForEach-Object { $_.Matches [1 ].Index }
28+
29+ # Insert Header
30+ $contents = $contents.Substring (0 , $endIndex + 5 ) + " `n # $header `n " + $contents.Substring ($endIndex + 5 )
31+
32+ # Find Sample Placeholders
33+ foreach ($sample in ($contents | Select-String - Pattern ' >\s*\[!SAMPLE\s*(?<sampleid>.*)\s*\]\s*' - AllMatches).Matches)
34+ {
35+ $sampleid = $sample.Groups [1 ].Value
36+ $sampleString = $sample.Groups [0 ].Value
37+
38+ # Find matching filename for CS
39+ foreach ($csFile in Get-ChildItem - Recurse - Path ($markdownFile.DirectoryName + ' \**\*.xaml.cs' ).Replace(' \' , ' /' ) |
40+ Where-Object {$_.FullName -notlike " *\bin\*" -and $_FullName -notlike " *\obj\*" })
41+ {
42+ $csSample = Get-Content $csFile - Raw
43+
44+ if ($csSample -match ' \[ToolkitSample\s?\(\s*id:\s*(?:"|nameof\()\s?' + $sampleid + ' \s?(?:"|\))' )
45+ {
46+ # Get Relative Path
47+ $docPath = $csfile.FullName.Substring ($preWorkingDir.Path.Length ).Replace(' \' , ' /' ).Trim(' /' )
48+
49+ # See https://learn.microsoft.com/en-us/contribute/content/code-in-docs#out-of-repo-snippet-references
50+ $snippet = ' :::code language="xaml" source="~/../code-windows/' + $docPath.Substring (0 , $docPath.Length - 3 ) + ' ":::' + " `n`n "
51+
52+ $snippet = $snippet + ' :::code language="csharp" source="~/../code-windows/' + $docPath + ' ":::'
53+
54+ # Replace our Sample Placeholder with references for docs
55+ $contents = $contents.Replace ($sampleString , $snippet )
56+ }
57+ }
58+ }
59+
60+ # Make any learn links relative
61+ $contents = $contents.Replace (' https://learn.microsoft.com' , ' ' )
62+
63+ # create output directory if it doesn't exist
64+ $outputFile = (Join-Path $OutputDir $filePath.Replace (' components' , ' ' ).Replace(' samples' , ' ' ).Replace(' \\' , ' \' ))
65+ [System.IO.Directory ]::CreateDirectory((Split-Path $outputFile )) | Out-Null
66+
67+ # Write file contents
68+ Write-Host ' Writing File:' , $outputFile
69+ $contents | Set-Content $outputFile
70+ }
71+
72+ Set-Location $preWorkingDir ;
0 commit comments