diff --git a/README.md b/README.md index 3b4c7ab00..b5d67fbbc 100644 --- a/README.md +++ b/README.md @@ -48,3 +48,16 @@ git merge v.. ### Adding Publications To add a new publication, add a new entry to `src/components/Publications/copypasta.tsx` file and to the `src/components/Publications/citations.bib` file. + +## Building Static Pages +To build pages that are ordinary HTML pages that can be read directly by a browser rather than served by a server, you can use any of the following commands: + +``` +npm run build:static:c +npm run build:static:p +npm run build:static:rs +npm run build:static:cpp +npm run build:static:ts +``` +The static pages end up in a `build` directory with subdirectories `docs/next` for the nightly build version and `docs/0.*.*` for archived version docs. + diff --git a/docs/developer/on-target-development.mdx b/docs/developer/on-target-development.mdx index 1f6679360..3f042c537 100644 --- a/docs/developer/on-target-development.mdx +++ b/docs/developer/on-target-development.mdx @@ -12,9 +12,7 @@ Microsoft Visual Studio Code can be used to connect to a remote target or a virt ## Configure your Target -You may [manually install Lingua Franca](./../installation), or, if you want to use a provisioning tool, see [xronos-inc/xronos_lfc_ansible](https://github.com/xronos-inc/xronos_lfc_ansible) for an Ansible script to install Lingua Franca tools on a remote target. - -If you would like to configure a virtual machine, see [xronos-inc/lfc-multipass](https://github.com/xronos-inc/lfc-multipass) for a cloud-init script to install Lingua Franca tools using multipass. +You may [manually install Lingua Franca](/docs/installation), or, if you want to use a provisioning tool, see [xronos-inc/xronos_lfc_ansible](https://github.com/xronos-inc/xronos_lfc_ansible) for an Ansible script to install Lingua Franca tools on a remote target. Once you have your remote target, be it a virtual machine or a machine accessible over a network, you can connect to it using Visual Studio Code and the Remote SSH extension. @@ -70,6 +68,6 @@ Build by pressing Ctrl + Shift + P followed by `Lingua Franca: Build and Run`. T ## References -- [How to set up Lingua Franca](./../installation) +- [How to set up Lingua Franca](/docs/installation) - [How to create a VSCode Linux remote environment](https://ubuntu.com/blog/how-to-create-a-vscode-linux-remote-environment) - [Remote development over SSH](https://code.visualstudio.com/docs/remote/ssh-tutorial) \ No newline at end of file diff --git a/docs/reference/target-declaration.mdx b/docs/reference/target-declaration.mdx index f7304910f..cd4982c3f 100644 --- a/docs/reference/target-declaration.mdx +++ b/docs/reference/target-declaration.mdx @@ -45,7 +45,7 @@ A target specification may have optional parameters, the names and values of whi - [**runtime-version**](#runtime-version): Specify which version of the runtime system to use. - [**rust-include**](#rust-include): (Rust only) A set of Rust modules in the generated project. - [**scheduler**](#scheduler): (C only) Specification of the scheduler to use. -- [**single-file-project**](#single-file-project): (Rust only) If true, enables [single-file project layout](target-language-details/?target-languages=rs#file-layout). +- [**single-file-project**](#single-file-project): (Rust only) If true, enables [single-file project layout](../target-language-details/?target-languages=rs#file-layout). - [**single-threaded**](#single-threaded): Specify to not use multithreading. - [**timeout**](#timeout): A time value (with units) specifying the logical stop time of execution. See [Termination](../writing-reactors/termination.mdx). - [**workers**](#workers): If using multiple threads, how many worker threads to create. diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 2f6e72d25..0cb933f5f 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -24,6 +24,9 @@ const config: Config = { onBrokenLinks: 'throw', onBrokenMarkdownLinks: 'throw', + // Generate URLs with trailing slashes (directories) for better file:// protocol support + trailingSlash: true, + // Even if you don't use internationalization, you can use this field to set // useful metadata like html lang. For example, if your site is Chinese, you // may want to replace "en" with "zh-Hans". diff --git a/package.json b/package.json index 388160f42..6dfb19e9b 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,11 @@ "docusaurus": "docusaurus", "start": "docusaurus start", "build": "docusaurus build", + "build:static:c": "docusaurus build && node util/fix-links-for-static.js && node util/set-default-language.js c", + "build:static:cpp": "docusaurus build && node util/fix-links-for-static.js && node util/set-default-language.js cpp", + "build:static:py": "docusaurus build && node util/fix-links-for-static.js && node util/set-default-language.js py", + "build:static:rs": "docusaurus build && node util/fix-links-for-static.js && node util/set-default-language.js rs", + "build:static:ts": "docusaurus build && node util/fix-links-for-static.js && node util/set-default-language.js ts", "swizzle": "docusaurus swizzle", "deploy": "docusaurus deploy", "clear": "docusaurus clear", diff --git a/src/components/ShikiLFHighlighter/index.tsx b/src/components/ShikiLFHighlighter/index.tsx index 8c29f33ab..978b3f8a3 100644 --- a/src/components/ShikiLFHighlighter/index.tsx +++ b/src/components/ShikiLFHighlighter/index.tsx @@ -44,6 +44,11 @@ export const ShikiLFHighlighter = ({ if (isBrowser) { return
; } else { - return
{children}
; + // For static builds, render as a proper code block even without syntax highlighting + return ( +
+        {children}
+      
+ ); } }; diff --git a/util/fix-links-for-static.js b/util/fix-links-for-static.js new file mode 100755 index 000000000..2846faa64 --- /dev/null +++ b/util/fix-links-for-static.js @@ -0,0 +1,190 @@ +#!/usr/bin/env node + +/** + * Post-build script to fix links in Docusaurus-generated HTML files + * to work without a web server (file:// protocol). + * + * This script converts directory links (ending with /) to explicit + * index.html links so they work when opening HTML files directly. + */ + +const fs = require('fs'); +const path = require('path'); + +const buildDir = path.join(__dirname, '..', 'build'); + +function getRelativePath(fromFile, toPath) { + // Convert absolute path to relative path + // fromFile: absolute path to the current HTML file + // toPath: absolute path or URL starting with / + + if (!toPath.startsWith('/')) { + // Already relative, return as is + return toPath; + } + + // Remove leading slash and build directory path + const toPathRelative = toPath.substring(1); + const fromDir = path.dirname(path.relative(buildDir, fromFile)); + + // Calculate relative path + if (fromDir === '.') { + return toPathRelative; + } + + const fromParts = fromDir.split(path.sep).filter(p => p !== '.'); + const toParts = toPathRelative.split('/').filter(p => p !== ''); + + // Find common prefix + let commonLength = 0; + while (commonLength < fromParts.length && + commonLength < toParts.length && + fromParts[commonLength] === toParts[commonLength]) { + commonLength++; + } + + // Build relative path + const upLevels = fromParts.length - commonLength; + const downPath = toParts.slice(commonLength).join('/'); + const relativePath = '../'.repeat(upLevels) + (downPath || 'index.html'); + + return relativePath || 'index.html'; +} + +function fixLinksInFile(filePath) { + let content = fs.readFileSync(filePath, 'utf8'); + let modified = false; + + // Pattern 1: href="/path/to/dir/" -> href="relative/path/to/dir/index.html" + // Pattern 2: href="/path/to/dir" (no trailing slash) -> href="relative/path/to/dir/index.html" (if it's a directory) + // Pattern 3: href="relative/path/to/dir/" -> href="relative/path/to/dir/index.html" + // Pattern 4: href="relative/path/to/dir" -> href="relative/path/to/dir/index.html" + + // We need to be careful not to break: + // - External links (http://, https://, mailto:, etc.) + // - Anchor links (#) + // - Links to files with extensions (.css, .js, .png, etc.) + // - Data URLs and other special protocols + + // Replace href attributes that point to directories + // Match: href="/path/" or href="path/" or href="/path" or href="path" + // But exclude: external URLs, anchors, files with extensions, data URLs + + const hrefPattern = /href=(["'])((?:(?!\1)[^#?])+?)(\/?)(\1)/g; + + content = content.replace(hrefPattern, (match, quote, url, trailingSlash, endQuote) => { + // Skip external URLs + if (url.match(/^(https?:|mailto:|tel:|data:|#)/)) { + return match; + } + + // Convert absolute asset paths to relative (but keep .html handling separate) + if (url.match(/\.[a-zA-Z0-9]+$/) && !url.endsWith('.html')) { + // Asset file (CSS, JS, images, etc.) - convert absolute to relative + if (url.startsWith('/')) { + const relativeUrl = getRelativePath(filePath, url); + modified = true; + return `href=${quote}${relativeUrl}${endQuote}`; + } + return match; + } + + // Skip URLs that have query parameters or fragments (we'll handle those separately) + if (url.includes('?') || url.includes('#')) { + return match; + } + + // If URL ends with /, replace with /index.html + // If URL doesn't end with / and doesn't have an extension, add /index.html + let newUrl = url; + if (url.endsWith('/')) { + newUrl = url + 'index.html'; + } else if (!url.match(/\.[a-zA-Z0-9]+$/)) { + // No extension, so it's likely a directory + newUrl = url + '/index.html'; + } else { + return match; // Has extension, leave as is + } + + // Convert absolute paths to relative paths for file:// protocol support + if (newUrl.startsWith('/')) { + newUrl = getRelativePath(filePath, newUrl); + } + + modified = true; + return `href=${quote}${newUrl}${endQuote}`; + }); + + // Also fix src attributes for similar cases (though less common) + const srcPattern = /src=(["'])((?:(?!\1)[^#?])+?)(\/?)(\1)/g; + + content = content.replace(srcPattern, (match, quote, url, trailingSlash, endQuote) => { + // Skip external URLs + if (url.match(/^(https?:|data:)/)) { + return match; + } + + // Skip URLs that already have file extensions + if (url.match(/\.[a-zA-Z0-9]+$/)) { + // Convert absolute paths to relative paths + if (url.startsWith('/')) { + const relativeUrl = getRelativePath(filePath, url); + modified = true; + return `src=${quote}${relativeUrl}${endQuote}`; + } + return match; + } + + // Skip URLs that have query parameters + if (url.includes('?')) { + return match; + } + + let newUrl = url; + if (url.endsWith('/')) { + newUrl = url + 'index.html'; + } else if (!url.match(/\.[a-zA-Z0-9]+$/)) { + newUrl = url + '/index.html'; + } else { + return match; + } + + // Convert absolute paths to relative paths for file:// protocol support + if (newUrl.startsWith('/')) { + newUrl = getRelativePath(filePath, newUrl); + } + + modified = true; + return `src=${quote}${newUrl}${endQuote}`; + }); + + if (modified) { + fs.writeFileSync(filePath, content, 'utf8'); + return true; + } + return false; +} + +function processDirectory(dir) { + const entries = fs.readdirSync(dir, { withFileTypes: true }); + let fixedCount = 0; + + for (const entry of entries) { + const fullPath = path.join(dir, entry.name); + + if (entry.isDirectory()) { + fixedCount += processDirectory(fullPath); + } else if (entry.isFile() && entry.name.endsWith('.html')) { + if (fixLinksInFile(fullPath)) { + fixedCount++; + } + } + } + + return fixedCount; +} + +console.log('Fixing links in HTML files for static file serving...'); +const fixedCount = processDirectory(buildDir); +console.log(`Fixed links in ${fixedCount} HTML file(s).`); + diff --git a/util/set-default-language.js b/util/set-default-language.js new file mode 100755 index 000000000..a3c0691fc --- /dev/null +++ b/util/set-default-language.js @@ -0,0 +1,215 @@ +#!/usr/bin/env node + +/** + * Post-build script to set a specific language as the default active tab + * in static HTML files. + * + * Usage: node set-default-language.js + * Example: node set-default-language.js py + * + * Valid languages: c, cpp, py, rs, ts + */ + +const fs = require('fs'); +const path = require('path'); + +const buildDir = path.join(__dirname, '..', 'build'); + +// Get target language from command line argument +const targetLanguage = process.argv[2]?.toLowerCase(); + +// Validate language +const validLanguages = ['c', 'cpp', 'py', 'rs', 'ts']; +if (!targetLanguage || !validLanguages.includes(targetLanguage)) { + console.error('Error: Please specify a valid target language.'); + console.error('Usage: node set-default-language.js '); + console.error('Valid languages:', validLanguages.join(', ')); + process.exit(1); +} + +function setDefaultLanguage(filePath) { + let content = fs.readFileSync(filePath, 'utf8'); + let modified = false; + + // Find tab containers that have language tabs (c, cpp, py, rs, ts) + // We'll look for the pattern: tabs-container with tabs containing these values + + // Step 1: Find and reorder tabs to put target language first and make it active + const tabListPattern = /(]*role="tablist"[^>]*class="tabs">)([\s\S]*?)(<\/ul>)/g; + + content = content.replace(tabListPattern, (match, openTag, tabContent, closeTag) => { + // Check if this is a language selector tab list + if (!tabContent.match(/>\s*(c|cpp|py|rs|ts)\s*]*role="tab"[^>]*>([^<]+)<\/li>/g; + const tabs = []; + let tabMatch; + + while ((tabMatch = tabItemPattern.exec(tabContent)) !== null) { + tabs.push({ + full: tabMatch[0], + value: tabMatch[1].trim().toLowerCase() + }); + } + + if (tabs.length === 0) return match; + + // Check if target language exists + const targetTab = tabs.find(t => t.value === targetLanguage); + if (!targetTab) return match; + + // Reorder: target language first, then others + const otherTabs = tabs.filter(t => t.value !== targetLanguage); + const reorderedTabs = [targetTab, ...otherTabs]; + + // Rebuild tab list + let newTabContent = ''; + reorderedTabs.forEach((tab, index) => { + const isActive = tab.value === targetLanguage; + // Update the tab HTML + let tabHtml = tab.full; + + // Set active class + if (isActive) { + tabHtml = tabHtml.replace(/class="([^"]*)"/, (m, classes) => { + const newClasses = classes.replace(/\s*tabs__item--active\s*/g, ' ').trim() + ' tabs__item--active'; + return `class="${newClasses}"`; + }); + tabHtml = tabHtml.replace(/aria-selected="[^"]*"/, 'aria-selected="true"'); + tabHtml = tabHtml.replace(/tabindex="[^"]*"/, 'tabindex="0"'); + } else { + tabHtml = tabHtml.replace(/\s*tabs__item--active\s*/g, ' '); + tabHtml = tabHtml.replace(/aria-selected="[^"]*"/, 'aria-selected="false"'); + tabHtml = tabHtml.replace(/tabindex="[^"]*"/, 'tabindex="-1"'); + } + + newTabContent += tabHtml; + }); + + modified = true; + return openTag + newTabContent + closeTag; + }); + + // Step 2: Find and reorder tabpanels to match the new tab order + // Look for the tabpanel container that follows the tab list + const tabpanelContainerPattern = /
([\s\S]*?)<\/div>\s*<\/div>/g; + + content = content.replace(tabpanelContainerPattern, (match, panelsContent) => { + // Check if this follows a language tab list (look backwards in content) + const beforeMatch = content.substring(0, content.indexOf(match)); + if (!beforeMatch.match(/tabs__item[^>]*>\s*(c|cpp|py|rs|ts)\s*]*role="tabpanel"[^>]*)>([\s\S]*?)<\/div>/g; + const panels = []; + let panelMatch; + + while ((panelMatch = tabpanelPattern.exec(panelsContent)) !== null) { + const attrs = panelMatch[1]; + const content = panelMatch[2]; + panels.push({ + full: panelMatch[0], + attrs: attrs, + content: content, + detectedLang: null + }); + } + + if (panels.length === 0) return match; + + // Language detection patterns + const languagePatterns = { + 'c': /target\s+C\b/i, + 'cpp': /target\s+(Cpp|C\+\+)/i, + 'py': /target\s+(Python|py)\b/i, + 'rs': /target\s+(Rust|rs)\b/i, + 'ts': /target\s+(TypeScript|ts)\b/i + }; + + // Detect language for each panel + panels.forEach(panel => { + panel.detectedLang = null; + for (const [lang, pattern] of Object.entries(languagePatterns)) { + if (pattern.test(panel.content)) { + panel.detectedLang = lang; + break; + } + } + }); + + // Find target language panel + const targetPanel = panels.find(p => p.detectedLang === targetLanguage); + if (!targetPanel) return match; + + // Reorder: target language first, then others + const otherPanels = panels.filter(p => p.detectedLang !== targetLanguage); + const reorderedPanels = [targetPanel, ...otherPanels]; + + // Rebuild tabpanels + let newPanelsContent = ''; + reorderedPanels.forEach((panel, index) => { + const isActive = panel.detectedLang === targetLanguage; + let panelHtml = panel.full; + + if (isActive) { + // Remove hidden attribute and clean up any malformed attributes + panelHtml = panelHtml.replace(/\s*hidden\s*/g, ' ') + .replace(/\s*=\s*""\s*/g, ' ') + .replace(/\s+/g, ' ') + .trim(); + } else { + // Add hidden attribute if not present + if (!panelHtml.includes('hidden')) { + panelHtml = panelHtml.replace(/]*role="tabpanel")/i, '${newPanelsContent}
`; + }); + + if (modified) { + fs.writeFileSync(filePath, content, 'utf8'); + return true; + } + return false; +} + +function processDirectory(dir) { + const entries = fs.readdirSync(dir, { withFileTypes: true }); + let fixedCount = 0; + + for (const entry of entries) { + const fullPath = path.join(dir, entry.name); + + if (entry.isDirectory()) { + fixedCount += processDirectory(fullPath); + } else if (entry.isFile() && entry.name.endsWith('.html')) { + if (setDefaultLanguage(fullPath)) { + fixedCount++; + } + } + } + + return fixedCount; +} + +const languageName = { + 'c': 'C', + 'cpp': 'C++', + 'py': 'Python', + 'rs': 'Rust', + 'ts': 'TypeScript' +}[targetLanguage]; + +console.log(`Setting default language to ${languageName} (${targetLanguage}) in HTML files...`); +const fixedCount = processDirectory(buildDir); +console.log(`Updated ${fixedCount} HTML file(s).`); diff --git a/versioned_docs/version-0.10.0/developer/on-target-development.mdx b/versioned_docs/version-0.10.0/developer/on-target-development.mdx index 1f6679360..999ba554b 100644 --- a/versioned_docs/version-0.10.0/developer/on-target-development.mdx +++ b/versioned_docs/version-0.10.0/developer/on-target-development.mdx @@ -12,7 +12,7 @@ Microsoft Visual Studio Code can be used to connect to a remote target or a virt ## Configure your Target -You may [manually install Lingua Franca](./../installation), or, if you want to use a provisioning tool, see [xronos-inc/xronos_lfc_ansible](https://github.com/xronos-inc/xronos_lfc_ansible) for an Ansible script to install Lingua Franca tools on a remote target. +You may [manually install Lingua Franca](/docs/installation), or, if you want to use a provisioning tool, see [xronos-inc/xronos_lfc_ansible](https://github.com/xronos-inc/xronos_lfc_ansible) for an Ansible script to install Lingua Franca tools on a remote target. If you would like to configure a virtual machine, see [xronos-inc/lfc-multipass](https://github.com/xronos-inc/lfc-multipass) for a cloud-init script to install Lingua Franca tools using multipass. @@ -70,6 +70,6 @@ Build by pressing Ctrl + Shift + P followed by `Lingua Franca: Build and Run`. T ## References -- [How to set up Lingua Franca](./../installation) +- [How to set up Lingua Franca](/docs/installation) - [How to create a VSCode Linux remote environment](https://ubuntu.com/blog/how-to-create-a-vscode-linux-remote-environment) - [Remote development over SSH](https://code.visualstudio.com/docs/remote/ssh-tutorial) \ No newline at end of file diff --git a/versioned_docs/version-0.10.0/reference/target-declaration.mdx b/versioned_docs/version-0.10.0/reference/target-declaration.mdx index f7304910f..cd4982c3f 100644 --- a/versioned_docs/version-0.10.0/reference/target-declaration.mdx +++ b/versioned_docs/version-0.10.0/reference/target-declaration.mdx @@ -45,7 +45,7 @@ A target specification may have optional parameters, the names and values of whi - [**runtime-version**](#runtime-version): Specify which version of the runtime system to use. - [**rust-include**](#rust-include): (Rust only) A set of Rust modules in the generated project. - [**scheduler**](#scheduler): (C only) Specification of the scheduler to use. -- [**single-file-project**](#single-file-project): (Rust only) If true, enables [single-file project layout](target-language-details/?target-languages=rs#file-layout). +- [**single-file-project**](#single-file-project): (Rust only) If true, enables [single-file project layout](../target-language-details/?target-languages=rs#file-layout). - [**single-threaded**](#single-threaded): Specify to not use multithreading. - [**timeout**](#timeout): A time value (with units) specifying the logical stop time of execution. See [Termination](../writing-reactors/termination.mdx). - [**workers**](#workers): If using multiple threads, how many worker threads to create. diff --git a/versioned_docs/version-0.11.0/developer/on-target-development.mdx b/versioned_docs/version-0.11.0/developer/on-target-development.mdx index 1f6679360..999ba554b 100644 --- a/versioned_docs/version-0.11.0/developer/on-target-development.mdx +++ b/versioned_docs/version-0.11.0/developer/on-target-development.mdx @@ -12,7 +12,7 @@ Microsoft Visual Studio Code can be used to connect to a remote target or a virt ## Configure your Target -You may [manually install Lingua Franca](./../installation), or, if you want to use a provisioning tool, see [xronos-inc/xronos_lfc_ansible](https://github.com/xronos-inc/xronos_lfc_ansible) for an Ansible script to install Lingua Franca tools on a remote target. +You may [manually install Lingua Franca](/docs/installation), or, if you want to use a provisioning tool, see [xronos-inc/xronos_lfc_ansible](https://github.com/xronos-inc/xronos_lfc_ansible) for an Ansible script to install Lingua Franca tools on a remote target. If you would like to configure a virtual machine, see [xronos-inc/lfc-multipass](https://github.com/xronos-inc/lfc-multipass) for a cloud-init script to install Lingua Franca tools using multipass. @@ -70,6 +70,6 @@ Build by pressing Ctrl + Shift + P followed by `Lingua Franca: Build and Run`. T ## References -- [How to set up Lingua Franca](./../installation) +- [How to set up Lingua Franca](/docs/installation) - [How to create a VSCode Linux remote environment](https://ubuntu.com/blog/how-to-create-a-vscode-linux-remote-environment) - [Remote development over SSH](https://code.visualstudio.com/docs/remote/ssh-tutorial) \ No newline at end of file diff --git a/versioned_docs/version-0.11.0/reference/target-declaration.mdx b/versioned_docs/version-0.11.0/reference/target-declaration.mdx index f7304910f..cd4982c3f 100644 --- a/versioned_docs/version-0.11.0/reference/target-declaration.mdx +++ b/versioned_docs/version-0.11.0/reference/target-declaration.mdx @@ -45,7 +45,7 @@ A target specification may have optional parameters, the names and values of whi - [**runtime-version**](#runtime-version): Specify which version of the runtime system to use. - [**rust-include**](#rust-include): (Rust only) A set of Rust modules in the generated project. - [**scheduler**](#scheduler): (C only) Specification of the scheduler to use. -- [**single-file-project**](#single-file-project): (Rust only) If true, enables [single-file project layout](target-language-details/?target-languages=rs#file-layout). +- [**single-file-project**](#single-file-project): (Rust only) If true, enables [single-file project layout](../target-language-details/?target-languages=rs#file-layout). - [**single-threaded**](#single-threaded): Specify to not use multithreading. - [**timeout**](#timeout): A time value (with units) specifying the logical stop time of execution. See [Termination](../writing-reactors/termination.mdx). - [**workers**](#workers): If using multiple threads, how many worker threads to create. diff --git a/versioned_docs/version-0.5.0/reference/target-declaration.mdx b/versioned_docs/version-0.5.0/reference/target-declaration.mdx index 57afe1003..34356c4bc 100644 --- a/versioned_docs/version-0.5.0/reference/target-declaration.mdx +++ b/versioned_docs/version-0.5.0/reference/target-declaration.mdx @@ -44,7 +44,7 @@ A target specification may have optional parameters, the names and values of whi - [**runtime-version**](#runtime-version): Specify which version of the runtime system to use. - [**rust-include**](#rust-include): (Rust only) A set of Rust modules in the generated project. - [**scheduler**](#scheduler): (C only) Specification of the scheduler to use. -- [**single-file-project**](#single-file-project): (Rust only) If true, enables [single-file project layout](target-language-details/?target-languages=rs#file-layout). +- [**single-file-project**](#single-file-project): (Rust only) If true, enables [single-file project layout](../target-language-details/?target-languages=rs#file-layout). - [**single-threaded**](#single-threaded): Whether to use multiple threads. - [**timeout**](#timeout): A time value (with units) specifying the logical stop time of execution. See [Termination](../writing-reactors/termination.mdx). - [**workers**](#workers): If using multiple threads, how many worker threads to create. diff --git a/versioned_docs/version-0.6.0/developer/on-target-development.mdx b/versioned_docs/version-0.6.0/developer/on-target-development.mdx index db7a53bee..45c58ec80 100644 --- a/versioned_docs/version-0.6.0/developer/on-target-development.mdx +++ b/versioned_docs/version-0.6.0/developer/on-target-development.mdx @@ -14,7 +14,7 @@ A video that demonstrates on-target development is available here: ## Configure your Target -You may [manually install Lingua Franca](./../installation), or, if you want to use a provisioning tool, see [xronos-inc/xronos_lfc_ansible](https://github.com/xronos-inc/xronos_lfc_ansible) for an Ansible script to install Lingua Franca tools on a remote target. +You may [manually install Lingua Franca](/docs/installation), or, if you want to use a provisioning tool, see [xronos-inc/xronos_lfc_ansible](https://github.com/xronos-inc/xronos_lfc_ansible) for an Ansible script to install Lingua Franca tools on a remote target. If you would like to configure a virtual machine, see [xronos-inc/lfc-multipass](https://github.com/xronos-inc/lfc-multipass) for a cloud-init script to install Lingua Franca tools using multipass. @@ -72,6 +72,6 @@ Build by pressing Ctrl + Shift + P followed by `Lingua Franca: Build and Run`. T ## References -- [How to set up Lingua Franca](./../installation) +- [How to set up Lingua Franca](/docs/installation) - [How to create a VSCode Linux remote environment](https://ubuntu.com/blog/how-to-create-a-vscode-linux-remote-environment) - [Remote development over SSH](https://code.visualstudio.com/docs/remote/ssh-tutorial) \ No newline at end of file diff --git a/versioned_docs/version-0.6.0/reference/target-declaration.mdx b/versioned_docs/version-0.6.0/reference/target-declaration.mdx index 0aa0ec908..646ef3fe8 100644 --- a/versioned_docs/version-0.6.0/reference/target-declaration.mdx +++ b/versioned_docs/version-0.6.0/reference/target-declaration.mdx @@ -43,7 +43,7 @@ A target specification may have optional parameters, the names and values of whi - [**runtime-version**](#runtime-version): Specify which version of the runtime system to use. - [**rust-include**](#rust-include): (Rust only) A set of Rust modules in the generated project. - [**scheduler**](#scheduler): (C only) Specification of the scheduler to use. -- [**single-file-project**](#single-file-project): (Rust only) If true, enables [single-file project layout](target-language-details/?target-languages=rs#file-layout). +- [**single-file-project**](#single-file-project): (Rust only) If true, enables [single-file project layout](../target-language-details/?target-languages=rs#file-layout). - [**single-threaded**](#single-threaded): Specify to not use multithreading. - [**timeout**](#timeout): A time value (with units) specifying the logical stop time of execution. See [Termination](../writing-reactors/termination.mdx). - [**workers**](#workers): If using multiple threads, how many worker threads to create. diff --git a/versioned_docs/version-0.7.0/developer/on-target-development.mdx b/versioned_docs/version-0.7.0/developer/on-target-development.mdx index 1f6679360..999ba554b 100644 --- a/versioned_docs/version-0.7.0/developer/on-target-development.mdx +++ b/versioned_docs/version-0.7.0/developer/on-target-development.mdx @@ -12,7 +12,7 @@ Microsoft Visual Studio Code can be used to connect to a remote target or a virt ## Configure your Target -You may [manually install Lingua Franca](./../installation), or, if you want to use a provisioning tool, see [xronos-inc/xronos_lfc_ansible](https://github.com/xronos-inc/xronos_lfc_ansible) for an Ansible script to install Lingua Franca tools on a remote target. +You may [manually install Lingua Franca](/docs/installation), or, if you want to use a provisioning tool, see [xronos-inc/xronos_lfc_ansible](https://github.com/xronos-inc/xronos_lfc_ansible) for an Ansible script to install Lingua Franca tools on a remote target. If you would like to configure a virtual machine, see [xronos-inc/lfc-multipass](https://github.com/xronos-inc/lfc-multipass) for a cloud-init script to install Lingua Franca tools using multipass. @@ -70,6 +70,6 @@ Build by pressing Ctrl + Shift + P followed by `Lingua Franca: Build and Run`. T ## References -- [How to set up Lingua Franca](./../installation) +- [How to set up Lingua Franca](/docs/installation) - [How to create a VSCode Linux remote environment](https://ubuntu.com/blog/how-to-create-a-vscode-linux-remote-environment) - [Remote development over SSH](https://code.visualstudio.com/docs/remote/ssh-tutorial) \ No newline at end of file diff --git a/versioned_docs/version-0.7.0/reference/target-declaration.mdx b/versioned_docs/version-0.7.0/reference/target-declaration.mdx index 5c875b6f5..8a8834319 100644 --- a/versioned_docs/version-0.7.0/reference/target-declaration.mdx +++ b/versioned_docs/version-0.7.0/reference/target-declaration.mdx @@ -42,7 +42,7 @@ A target specification may have optional parameters, the names and values of whi - [**runtime-version**](#runtime-version): Specify which version of the runtime system to use. - [**rust-include**](#rust-include): (Rust only) A set of Rust modules in the generated project. - [**scheduler**](#scheduler): (C only) Specification of the scheduler to use. -- [**single-file-project**](#single-file-project): (Rust only) If true, enables [single-file project layout](target-language-details/?target-languages=rs#file-layout). +- [**single-file-project**](#single-file-project): (Rust only) If true, enables [single-file project layout](../target-language-details/?target-languages=rs#file-layout). - [**single-threaded**](#single-threaded): Specify to not use multithreading. - [**timeout**](#timeout): A time value (with units) specifying the logical stop time of execution. See [Termination](../writing-reactors/termination.mdx). - [**workers**](#workers): If using multiple threads, how many worker threads to create. diff --git a/versioned_docs/version-0.8.0/developer/on-target-development.mdx b/versioned_docs/version-0.8.0/developer/on-target-development.mdx index 1f6679360..999ba554b 100644 --- a/versioned_docs/version-0.8.0/developer/on-target-development.mdx +++ b/versioned_docs/version-0.8.0/developer/on-target-development.mdx @@ -12,7 +12,7 @@ Microsoft Visual Studio Code can be used to connect to a remote target or a virt ## Configure your Target -You may [manually install Lingua Franca](./../installation), or, if you want to use a provisioning tool, see [xronos-inc/xronos_lfc_ansible](https://github.com/xronos-inc/xronos_lfc_ansible) for an Ansible script to install Lingua Franca tools on a remote target. +You may [manually install Lingua Franca](/docs/installation), or, if you want to use a provisioning tool, see [xronos-inc/xronos_lfc_ansible](https://github.com/xronos-inc/xronos_lfc_ansible) for an Ansible script to install Lingua Franca tools on a remote target. If you would like to configure a virtual machine, see [xronos-inc/lfc-multipass](https://github.com/xronos-inc/lfc-multipass) for a cloud-init script to install Lingua Franca tools using multipass. @@ -70,6 +70,6 @@ Build by pressing Ctrl + Shift + P followed by `Lingua Franca: Build and Run`. T ## References -- [How to set up Lingua Franca](./../installation) +- [How to set up Lingua Franca](/docs/installation) - [How to create a VSCode Linux remote environment](https://ubuntu.com/blog/how-to-create-a-vscode-linux-remote-environment) - [Remote development over SSH](https://code.visualstudio.com/docs/remote/ssh-tutorial) \ No newline at end of file diff --git a/versioned_docs/version-0.8.0/reference/target-declaration.mdx b/versioned_docs/version-0.8.0/reference/target-declaration.mdx index 5c875b6f5..8a8834319 100644 --- a/versioned_docs/version-0.8.0/reference/target-declaration.mdx +++ b/versioned_docs/version-0.8.0/reference/target-declaration.mdx @@ -42,7 +42,7 @@ A target specification may have optional parameters, the names and values of whi - [**runtime-version**](#runtime-version): Specify which version of the runtime system to use. - [**rust-include**](#rust-include): (Rust only) A set of Rust modules in the generated project. - [**scheduler**](#scheduler): (C only) Specification of the scheduler to use. -- [**single-file-project**](#single-file-project): (Rust only) If true, enables [single-file project layout](target-language-details/?target-languages=rs#file-layout). +- [**single-file-project**](#single-file-project): (Rust only) If true, enables [single-file project layout](../target-language-details/?target-languages=rs#file-layout). - [**single-threaded**](#single-threaded): Specify to not use multithreading. - [**timeout**](#timeout): A time value (with units) specifying the logical stop time of execution. See [Termination](../writing-reactors/termination.mdx). - [**workers**](#workers): If using multiple threads, how many worker threads to create. diff --git a/versioned_docs/version-0.9.0/developer/on-target-development.mdx b/versioned_docs/version-0.9.0/developer/on-target-development.mdx index 1f6679360..999ba554b 100644 --- a/versioned_docs/version-0.9.0/developer/on-target-development.mdx +++ b/versioned_docs/version-0.9.0/developer/on-target-development.mdx @@ -12,7 +12,7 @@ Microsoft Visual Studio Code can be used to connect to a remote target or a virt ## Configure your Target -You may [manually install Lingua Franca](./../installation), or, if you want to use a provisioning tool, see [xronos-inc/xronos_lfc_ansible](https://github.com/xronos-inc/xronos_lfc_ansible) for an Ansible script to install Lingua Franca tools on a remote target. +You may [manually install Lingua Franca](/docs/installation), or, if you want to use a provisioning tool, see [xronos-inc/xronos_lfc_ansible](https://github.com/xronos-inc/xronos_lfc_ansible) for an Ansible script to install Lingua Franca tools on a remote target. If you would like to configure a virtual machine, see [xronos-inc/lfc-multipass](https://github.com/xronos-inc/lfc-multipass) for a cloud-init script to install Lingua Franca tools using multipass. @@ -70,6 +70,6 @@ Build by pressing Ctrl + Shift + P followed by `Lingua Franca: Build and Run`. T ## References -- [How to set up Lingua Franca](./../installation) +- [How to set up Lingua Franca](/docs/installation) - [How to create a VSCode Linux remote environment](https://ubuntu.com/blog/how-to-create-a-vscode-linux-remote-environment) - [Remote development over SSH](https://code.visualstudio.com/docs/remote/ssh-tutorial) \ No newline at end of file diff --git a/versioned_docs/version-0.9.0/reference/target-declaration.mdx b/versioned_docs/version-0.9.0/reference/target-declaration.mdx index 91d92f782..e0873a07c 100644 --- a/versioned_docs/version-0.9.0/reference/target-declaration.mdx +++ b/versioned_docs/version-0.9.0/reference/target-declaration.mdx @@ -42,7 +42,7 @@ A target specification may have optional parameters, the names and values of whi - [**runtime-version**](#runtime-version): Specify which version of the runtime system to use. - [**rust-include**](#rust-include): (Rust only) A set of Rust modules in the generated project. - [**scheduler**](#scheduler): (C only) Specification of the scheduler to use. -- [**single-file-project**](#single-file-project): (Rust only) If true, enables [single-file project layout](target-language-details/?target-languages=rs#file-layout). +- [**single-file-project**](#single-file-project): (Rust only) If true, enables [single-file project layout](../target-language-details/?target-languages=rs#file-layout). - [**single-threaded**](#single-threaded): Specify to not use multithreading. - [**timeout**](#timeout): A time value (with units) specifying the logical stop time of execution. See [Termination](../writing-reactors/termination.mdx). - [**workers**](#workers): If using multiple threads, how many worker threads to create.