build based on cc32af8
This commit is contained in:
parent
9b890d99b7
commit
d9efb7f459
12 changed files with 16232 additions and 0 deletions
264
dev/assets/documenter.js
Normal file
264
dev/assets/documenter.js
Normal file
|
@ -0,0 +1,264 @@
|
|||
// Generated by Documenter.jl
|
||||
requirejs.config({
|
||||
paths: {
|
||||
'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.0.1/languages/julia.min',
|
||||
'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min',
|
||||
'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min',
|
||||
'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.11/contrib/auto-render.min',
|
||||
'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min',
|
||||
'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min',
|
||||
'katex': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.11/katex.min',
|
||||
'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.0.1/highlight.min',
|
||||
'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.0.1/languages/julia-repl.min',
|
||||
},
|
||||
shim: {
|
||||
"highlight-julia": {
|
||||
"deps": [
|
||||
"highlight"
|
||||
]
|
||||
},
|
||||
"katex-auto-render": {
|
||||
"deps": [
|
||||
"katex"
|
||||
]
|
||||
},
|
||||
"headroom-jquery": {
|
||||
"deps": [
|
||||
"jquery",
|
||||
"headroom"
|
||||
]
|
||||
},
|
||||
"highlight-julia-repl": {
|
||||
"deps": [
|
||||
"highlight"
|
||||
]
|
||||
}
|
||||
}
|
||||
});
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
require(['jquery', 'katex', 'katex-auto-render'], function($, katex, renderMathInElement) {
|
||||
$(document).ready(function() {
|
||||
renderMathInElement(
|
||||
document.body,
|
||||
{
|
||||
"delimiters": [
|
||||
{
|
||||
"left": "$",
|
||||
"right": "$",
|
||||
"display": false
|
||||
},
|
||||
{
|
||||
"left": "$$",
|
||||
"right": "$$",
|
||||
"display": true
|
||||
},
|
||||
{
|
||||
"left": "\\[",
|
||||
"right": "\\]",
|
||||
"display": true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
);
|
||||
})
|
||||
|
||||
})
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) {
|
||||
$(document).ready(function() {
|
||||
hljs.highlightAll();
|
||||
})
|
||||
|
||||
})
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) {
|
||||
|
||||
// Manages the top navigation bar (hides it when the user starts scrolling down on the
|
||||
// mobile).
|
||||
window.Headroom = Headroom; // work around buggy module loading?
|
||||
$(document).ready(function() {
|
||||
$('#documenter .docs-navbar').headroom({
|
||||
"tolerance": {"up": 10, "down": 10},
|
||||
});
|
||||
})
|
||||
|
||||
})
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
require(['jquery'], function($) {
|
||||
|
||||
// Modal settings dialog
|
||||
$(document).ready(function() {
|
||||
var settings = $('#documenter-settings');
|
||||
$('#documenter-settings-button').click(function(){
|
||||
settings.toggleClass('is-active');
|
||||
});
|
||||
// Close the dialog if X is clicked
|
||||
$('#documenter-settings button.delete').click(function(){
|
||||
settings.removeClass('is-active');
|
||||
});
|
||||
// Close dialog if ESC is pressed
|
||||
$(document).keyup(function(e) {
|
||||
if (e.keyCode == 27) settings.removeClass('is-active');
|
||||
});
|
||||
});
|
||||
|
||||
})
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
require(['jquery'], function($) {
|
||||
|
||||
// Manages the showing and hiding of the sidebar.
|
||||
$(document).ready(function() {
|
||||
var sidebar = $("#documenter > .docs-sidebar");
|
||||
var sidebar_button = $("#documenter-sidebar-button")
|
||||
sidebar_button.click(function(ev) {
|
||||
ev.preventDefault();
|
||||
sidebar.toggleClass('visible');
|
||||
if (sidebar.hasClass('visible')) {
|
||||
// Makes sure that the current menu item is visible in the sidebar.
|
||||
$("#documenter .docs-menu a.is-active").focus();
|
||||
}
|
||||
});
|
||||
$("#documenter > .docs-main").bind('click', function(ev) {
|
||||
if ($(ev.target).is(sidebar_button)) {
|
||||
return;
|
||||
}
|
||||
if (sidebar.hasClass('visible')) {
|
||||
sidebar.removeClass('visible');
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
// Resizes the package name / sitename in the sidebar if it is too wide.
|
||||
// Inspired by: https://github.com/davatron5000/FitText.js
|
||||
$(document).ready(function() {
|
||||
e = $("#documenter .docs-autofit");
|
||||
function resize() {
|
||||
var L = parseInt(e.css('max-width'), 10);
|
||||
var L0 = e.width();
|
||||
if(L0 > L) {
|
||||
var h0 = parseInt(e.css('font-size'), 10);
|
||||
e.css('font-size', L * h0 / L0);
|
||||
// TODO: make sure it survives resizes?
|
||||
}
|
||||
}
|
||||
// call once and then register events
|
||||
resize();
|
||||
$(window).resize(resize);
|
||||
$(window).on('orientationchange', resize);
|
||||
});
|
||||
|
||||
// Scroll the navigation bar to the currently selected menu item
|
||||
$(document).ready(function() {
|
||||
var sidebar = $("#documenter .docs-menu").get(0);
|
||||
var active = $("#documenter .docs-menu .is-active").get(0);
|
||||
if(typeof active !== 'undefined') {
|
||||
sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15;
|
||||
}
|
||||
})
|
||||
|
||||
})
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
require(['jquery'], function($) {
|
||||
|
||||
function set_theme(theme) {
|
||||
var active = null;
|
||||
var disabled = [];
|
||||
for (var i = 0; i < document.styleSheets.length; i++) {
|
||||
var ss = document.styleSheets[i];
|
||||
var themename = ss.ownerNode.getAttribute("data-theme-name");
|
||||
if(themename === null) continue; // ignore non-theme stylesheets
|
||||
// Find the active theme
|
||||
if(themename === theme) active = ss;
|
||||
else disabled.push(ss);
|
||||
}
|
||||
if(active !== null) {
|
||||
active.disabled = false;
|
||||
if(active.ownerNode.getAttribute("data-theme-primary") === null) {
|
||||
document.getElementsByTagName('html')[0].className = "theme--" + theme;
|
||||
} else {
|
||||
document.getElementsByTagName('html')[0].className = "";
|
||||
}
|
||||
disabled.forEach(function(ss){
|
||||
ss.disabled = true;
|
||||
});
|
||||
}
|
||||
|
||||
// Store the theme in localStorage
|
||||
if(typeof(window.localStorage) !== "undefined") {
|
||||
window.localStorage.setItem("documenter-theme", theme);
|
||||
} else {
|
||||
console.error("Browser does not support window.localStorage");
|
||||
}
|
||||
}
|
||||
|
||||
// Theme picker setup
|
||||
$(document).ready(function() {
|
||||
// onchange callback
|
||||
$('#documenter-themepicker').change(function themepick_callback(ev){
|
||||
var themename = $('#documenter-themepicker option:selected').attr('value');
|
||||
set_theme(themename);
|
||||
});
|
||||
|
||||
// Make sure that the themepicker displays the correct theme when the theme is retrieved
|
||||
// from localStorage
|
||||
if(typeof(window.localStorage) !== "undefined") {
|
||||
var theme = window.localStorage.getItem("documenter-theme");
|
||||
if(theme !== null) {
|
||||
$('#documenter-themepicker option').each(function(i,e) {
|
||||
e.selected = (e.value === theme);
|
||||
})
|
||||
} else {
|
||||
$('#documenter-themepicker option').each(function(i,e) {
|
||||
e.selected = $("html").hasClass(`theme--${e.value}`);
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
})
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
require(['jquery'], function($) {
|
||||
|
||||
// update the version selector with info from the siteinfo.js and ../versions.js files
|
||||
$(document).ready(function() {
|
||||
var version_selector = $("#documenter .docs-version-selector");
|
||||
var version_selector_select = $("#documenter .docs-version-selector select");
|
||||
|
||||
version_selector_select.change(function(x) {
|
||||
target_href = version_selector_select.children("option:selected").get(0).value;
|
||||
window.location.href = target_href;
|
||||
});
|
||||
|
||||
// add the current version to the selector based on siteinfo.js, but only if the selector is empty
|
||||
if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) {
|
||||
var option = $("<option value='#' selected='selected'>" + DOCUMENTER_CURRENT_VERSION + "</option>");
|
||||
version_selector_select.append(option);
|
||||
}
|
||||
|
||||
if (typeof DOC_VERSIONS !== 'undefined') {
|
||||
var existing_versions = version_selector_select.children("option");
|
||||
var existing_versions_texts = existing_versions.map(function(i,x){return x.text});
|
||||
DOC_VERSIONS.forEach(function(each) {
|
||||
var version_url = documenterBaseURL + "/../" + each;
|
||||
var existing_id = $.inArray(each, existing_versions_texts);
|
||||
// if not already in the version selector, add it as a new option,
|
||||
// otherwise update the old option with the URL and enable it
|
||||
if (existing_id == -1) {
|
||||
var option = $("<option value='" + version_url + "'>" + each + "</option>");
|
||||
version_selector_select.append(option);
|
||||
} else {
|
||||
var option = existing_versions[existing_id];
|
||||
option.value = version_url;
|
||||
option.disabled = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// only show the version selector if the selector has been populated
|
||||
if (version_selector_select.children("option").length > 0) {
|
||||
version_selector.toggleClass("visible");
|
||||
}
|
||||
})
|
||||
|
||||
})
|
251
dev/assets/search.js
Normal file
251
dev/assets/search.js
Normal file
|
@ -0,0 +1,251 @@
|
|||
// Generated by Documenter.jl
|
||||
requirejs.config({
|
||||
paths: {
|
||||
'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.9/lunr.min',
|
||||
'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min',
|
||||
'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min',
|
||||
}
|
||||
});
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
require(['jquery', 'lunr', 'lodash'], function($, lunr, _) {
|
||||
|
||||
$(document).ready(function() {
|
||||
// parseUri 1.2.2
|
||||
// (c) Steven Levithan <stevenlevithan.com>
|
||||
// MIT License
|
||||
function parseUri (str) {
|
||||
var o = parseUri.options,
|
||||
m = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
|
||||
uri = {},
|
||||
i = 14;
|
||||
|
||||
while (i--) uri[o.key[i]] = m[i] || "";
|
||||
|
||||
uri[o.q.name] = {};
|
||||
uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
|
||||
if ($1) uri[o.q.name][$1] = $2;
|
||||
});
|
||||
|
||||
return uri;
|
||||
};
|
||||
parseUri.options = {
|
||||
strictMode: false,
|
||||
key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
|
||||
q: {
|
||||
name: "queryKey",
|
||||
parser: /(?:^|&)([^&=]*)=?([^&]*)/g
|
||||
},
|
||||
parser: {
|
||||
strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
|
||||
loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
|
||||
}
|
||||
};
|
||||
|
||||
$("#search-form").submit(function(e) {
|
||||
e.preventDefault()
|
||||
})
|
||||
|
||||
// list below is the lunr 2.1.3 list minus the intersect with names(Base)
|
||||
// (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with)
|
||||
// ideally we'd just filter the original list but it's not available as a variable
|
||||
lunr.stopWordFilter = lunr.generateStopWordFilter([
|
||||
'a',
|
||||
'able',
|
||||
'about',
|
||||
'across',
|
||||
'after',
|
||||
'almost',
|
||||
'also',
|
||||
'am',
|
||||
'among',
|
||||
'an',
|
||||
'and',
|
||||
'are',
|
||||
'as',
|
||||
'at',
|
||||
'be',
|
||||
'because',
|
||||
'been',
|
||||
'but',
|
||||
'by',
|
||||
'can',
|
||||
'cannot',
|
||||
'could',
|
||||
'dear',
|
||||
'did',
|
||||
'does',
|
||||
'either',
|
||||
'ever',
|
||||
'every',
|
||||
'from',
|
||||
'got',
|
||||
'had',
|
||||
'has',
|
||||
'have',
|
||||
'he',
|
||||
'her',
|
||||
'hers',
|
||||
'him',
|
||||
'his',
|
||||
'how',
|
||||
'however',
|
||||
'i',
|
||||
'if',
|
||||
'into',
|
||||
'it',
|
||||
'its',
|
||||
'just',
|
||||
'least',
|
||||
'like',
|
||||
'likely',
|
||||
'may',
|
||||
'me',
|
||||
'might',
|
||||
'most',
|
||||
'must',
|
||||
'my',
|
||||
'neither',
|
||||
'no',
|
||||
'nor',
|
||||
'not',
|
||||
'of',
|
||||
'off',
|
||||
'often',
|
||||
'on',
|
||||
'or',
|
||||
'other',
|
||||
'our',
|
||||
'own',
|
||||
'rather',
|
||||
'said',
|
||||
'say',
|
||||
'says',
|
||||
'she',
|
||||
'should',
|
||||
'since',
|
||||
'so',
|
||||
'some',
|
||||
'than',
|
||||
'that',
|
||||
'the',
|
||||
'their',
|
||||
'them',
|
||||
'then',
|
||||
'there',
|
||||
'these',
|
||||
'they',
|
||||
'this',
|
||||
'tis',
|
||||
'to',
|
||||
'too',
|
||||
'twas',
|
||||
'us',
|
||||
'wants',
|
||||
'was',
|
||||
'we',
|
||||
'were',
|
||||
'what',
|
||||
'when',
|
||||
'who',
|
||||
'whom',
|
||||
'why',
|
||||
'will',
|
||||
'would',
|
||||
'yet',
|
||||
'you',
|
||||
'your'
|
||||
])
|
||||
|
||||
// add . as a separator, because otherwise "title": "Documenter.Anchors.add!"
|
||||
// would not find anything if searching for "add!", only for the entire qualification
|
||||
lunr.tokenizer.separator = /[\s\-\.]+/
|
||||
|
||||
// custom trimmer that doesn't strip @ and !, which are used in julia macro and function names
|
||||
lunr.trimmer = function (token) {
|
||||
return token.update(function (s) {
|
||||
return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '')
|
||||
})
|
||||
}
|
||||
|
||||
lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter')
|
||||
lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer')
|
||||
|
||||
var index = lunr(function () {
|
||||
this.ref('location')
|
||||
this.field('title',{boost: 100})
|
||||
this.field('text')
|
||||
documenterSearchIndex['docs'].forEach(function(e) {
|
||||
this.add(e)
|
||||
}, this)
|
||||
})
|
||||
var store = {}
|
||||
|
||||
documenterSearchIndex['docs'].forEach(function(e) {
|
||||
store[e.location] = {title: e.title, category: e.category, page: e.page}
|
||||
})
|
||||
|
||||
$(function(){
|
||||
searchresults = $('#documenter-search-results');
|
||||
searchinfo = $('#documenter-search-info');
|
||||
searchbox = $('#documenter-search-query');
|
||||
function update_search(querystring) {
|
||||
tokens = lunr.tokenizer(querystring)
|
||||
results = index.query(function (q) {
|
||||
tokens.forEach(function (t) {
|
||||
q.term(t.toString(), {
|
||||
fields: ["title"],
|
||||
boost: 100,
|
||||
usePipeline: true,
|
||||
editDistance: 0,
|
||||
wildcard: lunr.Query.wildcard.NONE
|
||||
})
|
||||
q.term(t.toString(), {
|
||||
fields: ["title"],
|
||||
boost: 10,
|
||||
usePipeline: true,
|
||||
editDistance: 2,
|
||||
wildcard: lunr.Query.wildcard.NONE
|
||||
})
|
||||
q.term(t.toString(), {
|
||||
fields: ["text"],
|
||||
boost: 1,
|
||||
usePipeline: true,
|
||||
editDistance: 0,
|
||||
wildcard: lunr.Query.wildcard.NONE
|
||||
})
|
||||
})
|
||||
})
|
||||
searchinfo.text("Number of results: " + results.length)
|
||||
searchresults.empty()
|
||||
results.forEach(function(result) {
|
||||
data = store[result.ref]
|
||||
link = $('<a class="docs-label">'+data.title+'</a>')
|
||||
link.attr('href', documenterBaseURL+'/'+result.ref)
|
||||
if (data.category != "page"){
|
||||
cat = $('<span class="docs-category">('+data.category+', '+data.page+')</span>')
|
||||
} else {
|
||||
cat = $('<span class="docs-category">('+data.category+')</span>')
|
||||
}
|
||||
li = $('<li>').append(link).append(" ").append(cat)
|
||||
searchresults.append(li)
|
||||
})
|
||||
}
|
||||
|
||||
function update_search_box() {
|
||||
querystring = searchbox.val()
|
||||
update_search(querystring)
|
||||
}
|
||||
|
||||
searchbox.keyup(_.debounce(update_search_box, 250))
|
||||
searchbox.change(update_search_box)
|
||||
|
||||
search_query_uri = parseUri(window.location).queryKey["q"]
|
||||
if(search_query_uri !== undefined) {
|
||||
search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20'))
|
||||
searchbox.val(search_query)
|
||||
}
|
||||
update_search_box();
|
||||
})
|
||||
})
|
||||
|
||||
})
|
7752
dev/assets/themes/documenter-dark.css
Normal file
7752
dev/assets/themes/documenter-dark.css
Normal file
File diff suppressed because it is too large
Load diff
7810
dev/assets/themes/documenter-light.css
Normal file
7810
dev/assets/themes/documenter-light.css
Normal file
File diff suppressed because it is too large
Load diff
66
dev/assets/themeswap.js
Normal file
66
dev/assets/themeswap.js
Normal file
|
@ -0,0 +1,66 @@
|
|||
// Small function to quickly swap out themes. Gets put into the <head> tag..
|
||||
function set_theme_from_local_storage() {
|
||||
// Intialize the theme to null, which means default
|
||||
var theme = null;
|
||||
// If the browser supports the localstorage and is not disabled then try to get the
|
||||
// documenter theme
|
||||
if(window.localStorage != null) {
|
||||
// Get the user-picked theme from localStorage. May be `null`, which means the default
|
||||
// theme.
|
||||
theme = window.localStorage.getItem("documenter-theme");
|
||||
}
|
||||
// Check if the browser supports user color preference
|
||||
var darkPreference = false;
|
||||
// Check if the users preference is for dark color scheme
|
||||
if(window.matchMedia('(prefers-color-scheme: dark)').matches === true) {
|
||||
darkPreference = true;
|
||||
}
|
||||
// Initialize a few variables for the loop:
|
||||
//
|
||||
// - active: will contain the index of the theme that should be active. Note that there
|
||||
// is no guarantee that localStorage contains sane values. If `active` stays `null`
|
||||
// we either could not find the theme or it is the default (primary) theme anyway.
|
||||
// Either way, we then need to stick to the primary theme.
|
||||
//
|
||||
// - disabled: style sheets that should be disabled (i.e. all the theme style sheets
|
||||
// that are not the currently active theme)
|
||||
var active = null; var disabled = []; var darkTheme = null;
|
||||
for (var i = 0; i < document.styleSheets.length; i++) {
|
||||
var ss = document.styleSheets[i];
|
||||
// The <link> tag of each style sheet is expected to have a data-theme-name attribute
|
||||
// which must contain the name of the theme. The names in localStorage much match this.
|
||||
var themename = ss.ownerNode.getAttribute("data-theme-name");
|
||||
// attribute not set => non-theme stylesheet => ignore
|
||||
if(themename === null) continue;
|
||||
// To distinguish the default (primary) theme, it needs to have the data-theme-primary
|
||||
// attribute set.
|
||||
var isprimary = (ss.ownerNode.getAttribute("data-theme-primary") !== null);
|
||||
// Check if the theme is primary dark theme
|
||||
var isDarkTheme = (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null);
|
||||
// If ss is for dark theme then set the value of darkTheme to the name of the theme
|
||||
if(isDarkTheme) darkTheme = themename;
|
||||
// If we find a matching theme (and it's not the default), we'll set active to non-null
|
||||
if(themename === theme) active = i;
|
||||
// Store the style sheets of inactive themes so that we could disable them
|
||||
if(themename !== theme) disabled.push(ss);
|
||||
}
|
||||
if(active !== null) {
|
||||
// If we did find an active theme, we'll (1) add the theme--$(theme) class to <html>
|
||||
document.getElementsByTagName('html')[0].className = "theme--" + theme;
|
||||
// and (2) disable all the other theme stylesheets
|
||||
disabled.forEach(function(ss){
|
||||
ss.disabled = true;
|
||||
});
|
||||
}
|
||||
else if(darkTheme !== null && darkPreference === true) {
|
||||
// If we did find an active theme, we'll (1) add the theme--$(theme) class to <html>
|
||||
document.getElementsByTagName('html')[0].className = "theme--" + darkTheme;
|
||||
// and (2) disable all the other theme stylesheets
|
||||
disabled.forEach(function(ss){
|
||||
if (ss.ownerNode.getAttribute("data-theme-name") !== darkTheme) {
|
||||
ss.disabled = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
set_theme_from_local_storage();
|
49
dev/assets/warner.js
Normal file
49
dev/assets/warner.js
Normal file
|
@ -0,0 +1,49 @@
|
|||
function maybeAddWarning () {
|
||||
// DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE
|
||||
// in siteinfo.js.
|
||||
// If either of these are undefined something went horribly wrong, so we abort.
|
||||
if (
|
||||
window.DOCUMENTER_NEWEST === undefined ||
|
||||
window.DOCUMENTER_CURRENT_VERSION === undefined ||
|
||||
window.DOCUMENTER_STABLE === undefined
|
||||
) {
|
||||
return
|
||||
};
|
||||
|
||||
// Current version is not a version number, so we can't tell if it's the newest version. Abort.
|
||||
if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) {
|
||||
return
|
||||
};
|
||||
|
||||
// Current version is newest version, so no need to add a warning.
|
||||
if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) {
|
||||
return
|
||||
};
|
||||
|
||||
// Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs.
|
||||
if (document.body.querySelector('meta[name="robots"]') === null) {
|
||||
const meta = document.createElement('meta');
|
||||
meta.name = 'robots';
|
||||
meta.content = 'noindex';
|
||||
|
||||
document.getElementsByTagName('head')[0].appendChild(meta);
|
||||
};
|
||||
|
||||
const div = document.createElement('div');
|
||||
div.classList.add('outdated-warning-overlay');
|
||||
const closer = document.createElement('button');
|
||||
closer.classList.add('outdated-warning-closer', 'delete');
|
||||
closer.addEventListener('click', function () {
|
||||
document.body.removeChild(div);
|
||||
});
|
||||
const href = window.documenterBaseURL + '/../' + window.DOCUMENTER_STABLE;
|
||||
div.innerHTML = 'This documentation is not for the latest version. <br> <a href="' + href + '">Go to the latest documentation</a>.';
|
||||
div.appendChild(closer);
|
||||
document.body.appendChild(div);
|
||||
};
|
||||
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', maybeAddWarning);
|
||||
} else {
|
||||
maybeAddWarning();
|
||||
};
|
27
dev/index.html
Normal file
27
dev/index.html
Normal file
|
@ -0,0 +1,27 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Public interface · PortAudio.jl</title><script data-outdated-warner src="assets/warner.js"></script><link href="https://cdnjs.cloudflare.com/ajax/libs/lato-font/3.0.0/css/lato-font.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/juliamono/0.039/juliamono-regular.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.11/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL="."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="assets/documenter.js"></script><script src="siteinfo.js"></script><script src="../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="assets/themeswap.js"></script></head><body><div id="documenter"><nav class="docs-sidebar"><div class="docs-package-name"><span class="docs-autofit"><a href>PortAudio.jl</a></span></div><form class="docs-search" action="search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li class="is-active"><a class="tocitem" href>Public interface</a></li><li><a class="tocitem" href="internals/">Internals</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Public interface</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Public interface</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/JuliaAudio/PortAudio.jl/blob/master/docs/src/index.md" title="Edit on GitHub"><span class="docs-icon fab"></span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="Public-interface"><a class="docs-heading-anchor" href="#Public-interface">Public interface</a><a id="Public-interface-1"></a><a class="docs-heading-anchor-permalink" href="#Public-interface" title="Permalink"></a></h1><ul><li><a href="#PortAudio.PortAudioStream"><code>PortAudio.PortAudioStream</code></a></li><li><a href="#PortAudio.devices-Tuple{}"><code>PortAudio.devices</code></a></li></ul><article class="docstring"><header><a class="docstring-binding" id="PortAudio.PortAudioStream" href="#PortAudio.PortAudioStream"><code>PortAudio.PortAudioStream</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia hljs">PortAudioStream(input_channels = 2, output_channels = 2; options...)
|
||||
PortAudioStream(duplex_device, input_channels = 2, output_channels = 2; options...)
|
||||
PortAudioStream(input_device, output_device, input_channels = 2, output_channels = 2; options...)</code></pre><p>Audio devices can either be <code>PortAudioDevice</code> instances as returned by <a href="#PortAudio.devices-Tuple{}"><code>devices</code></a>, or strings with the device name as reported by the operating system. Set <code>input_channels</code> to <code>0</code> for an output only stream; set <code>output_channels</code> to <code>0</code> for an input only steam. If you pass the function <code>maximum</code> instead of a number of channels, use the maximum channels allowed by the corresponding device. If a single <code>duplex_device</code> is given, it will be used for both input and output. If no devices are given, the system default devices will be used.</p><p>The <code>PortAudioStream</code> type supports all the stream and buffer features defined <a href="https://github.com/JuliaAudio/SampledSignals.jl">SampledSignals.jl</a> by default. For example, if you load SampledSignals with <code>using SampledSignals</code> you can read 5 seconds to a buffer with <code>buf = read(stream, 5s)</code>, regardless of the sample rate of the device. <code>write(stream, stream)</code> will set up a loopback that will read from the input and play it back on the output.</p><p>Options:</p><ul><li><code>adjust_channels = false</code>: If set to <code>true</code>, if either <code>input_channels</code> or <code>output_channels</code> exceeds the corresponding device maximum, adjust down to the maximum.</li><li><code>call_back = C_NULL</code>: The PortAudio call-back function. Currently, passing anything except <code>C_NULL</code> is unsupported.</li><li><code>eltype = Float32</code>: Sample type of the audio stream</li><li><code>flags = PortAudio.paNoFlag</code>: PortAudio flags</li><li><code>frames_per_buffer = 128</code>: the number of frames per buffer</li><li><code>input_info = C_NULL</code>: host API specific stream info for the input device. Currently, passing anything except <code>C_NULL</code> is unsupported.</li><li><code>latency = nothing</code>: Requested latency. Stream could underrun when too low, consider using the defaults. If left as <code>nothing</code>, use the defaults below:<ul><li>For input/output only streams, use the corresponding device's default high latency.</li><li>For duplex streams, use the max of the default high latency of the input and output devices.</li></ul></li><li><code>output_info = C_NULL</code>: host API specific stream info for the output device. Currently, passing anything except <code>C_NULL</code> is unsupported.</li><li><code>reader = PortAudio.SampledSignalsReader()</code>: the scribe that will read input. Defaults to a <a href="internals/#PortAudio.SampledSignalsReader"><code>PortAudio.SampledSignalsReader</code></a>. Users can pass custom scribes; see <a href="internals/#PortAudio.Scribe"><code>PortAudio.Scribe</code></a>.</li><li><code>samplerate = nothing</code>: Sample rate. If left as <code>nothing</code>, use the defaults below:<ul><li>For input/output only streams, use the corresponding device's default sample rate.</li><li>For duplex streams, use the default sample rate if the default sample rates for the input and output devices match, otherwise throw an error.</li></ul></li><li><code>warn_xruns = true</code>: Display a warning if there is a stream overrun or underrun, which often happens when Julia is compiling, or with a particularly large GC run. Only affects duplex streams.</li><li><code>writer = PortAudio.SampledSignalsWriter()</code>: the scribe that will write output. Defaults to a <a href="internals/#PortAudio.SampledSignalsReader"><code>PortAudio.SampledSignalsReader</code></a>. Users can pass custom scribes; see <a href="internals/#PortAudio.Scribe"><code>PortAudio.Scribe</code></a>.</li></ul><p><strong>Examples:</strong></p><p>Set up an audio pass-through from microphone to speaker</p><pre><code class="language-julia hljs">julia> using PortAudio, SampledSignals
|
||||
|
||||
julia> stream = PortAudioStream(2, 2; warn_xruns = false);
|
||||
|
||||
julia> try
|
||||
# cancel with Ctrl-C
|
||||
write(stream, stream, 2s)
|
||||
finally
|
||||
close(stream)
|
||||
end</code></pre><p>Use <code>do</code> syntax to auto-close the stream</p><pre><code class="language-julia hljs">julia> using PortAudio, SampledSignals
|
||||
|
||||
julia> PortAudioStream(2, 2; warn_xruns = false) do stream
|
||||
write(stream, stream, 2s)
|
||||
end</code></pre><p>Open devices by name</p><pre><code class="language-julia hljs">using PortAudio, SampledSignals
|
||||
PortAudioStream("Built-in Microph", "Built-in Output"; warn_xruns = false) do stream
|
||||
write(stream, stream, 2s)
|
||||
end
|
||||
2 s</code></pre><p>Record 10 seconds of audio and save to an ogg file</p><pre><code class="language-julia hljs">julia> using PortAudio, SampledSignals, LibSndFile
|
||||
|
||||
julia> PortAudioStream(2, 0; warn_xruns = false) do stream
|
||||
buf = read(stream, 10s)
|
||||
save(joinpath(tempname(), ".ogg"), buf)
|
||||
end
|
||||
2 s</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/JuliaAudio/PortAudio.jl/blob/cc32af820faec0fe9ecd760dc36fd1b34b9d9dab/src/PortAudio.jl#L614-L704">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="PortAudio.devices-Tuple{}" href="#PortAudio.devices-Tuple{}"><code>PortAudio.devices</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia hljs">devices()</code></pre><p>List the devices available on your system. Devices will be shown with their internal name, and maximum input and output channels.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/JuliaAudio/PortAudio.jl/blob/cc32af820faec0fe9ecd760dc36fd1b34b9d9dab/src/PortAudio.jl#L221-L226">source</a></section></article></article><nav class="docs-footer"><a class="docs-footer-nextpage" href="internals/">Internals »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.4 on <span class="colophon-date" title="Sunday 25 July 2021 05:31">Sunday 25 July 2021</span>. Using Julia version 1.6.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
|
2
dev/internals/index.html
Normal file
2
dev/internals/index.html
Normal file
File diff suppressed because one or more lines are too long
2
dev/search/index.html
Normal file
2
dev/search/index.html
Normal file
|
@ -0,0 +1,2 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Search · PortAudio.jl</title><script data-outdated-warner src="../assets/warner.js"></script><link href="https://cdnjs.cloudflare.com/ajax/libs/lato-font/3.0.0/css/lato-font.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/juliamono/0.039/juliamono-regular.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.11/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script></head><body><div id="documenter"><nav class="docs-sidebar"><div class="docs-package-name"><span class="docs-autofit"><a href="../">PortAudio.jl</a></span></div><form class="docs-search" action><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Public interface</a></li><li><a class="tocitem" href="../internals/">Internals</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Search</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Search</a></li></ul></nav><div class="docs-right"><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article><p id="documenter-search-info">Loading search...</p><ul id="documenter-search-results"></ul></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.4 on <span class="colophon-date" title="Sunday 25 July 2021 05:31">Sunday 25 July 2021</span>. Using Julia version 1.6.2.</p></section><footer class="modal-card-foot"></footer></div></div></div></body><script src="../search_index.js"></script><script src="../assets/search.js"></script></html>
|
3
dev/search_index.js
Normal file
3
dev/search_index.js
Normal file
File diff suppressed because one or more lines are too long
1
dev/siteinfo.js
Normal file
1
dev/siteinfo.js
Normal file
|
@ -0,0 +1 @@
|
|||
var DOCUMENTER_CURRENT_VERSION = "dev";
|
5
versions.js
Normal file
5
versions.js
Normal file
|
@ -0,0 +1,5 @@
|
|||
var DOC_VERSIONS = [
|
||||
"dev",
|
||||
];
|
||||
var DOCUMENTER_NEWEST = "dev";
|
||||
var DOCUMENTER_STABLE = "dev";
|
Loading…
Reference in a new issue