-> io::Result<()>
{
write!(dst,
-r##"<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="generator" content="rustdoc">
- <meta name="description" content="{description}">
- <meta name="keywords" content="{keywords}">
-
- <title>{title}</title>
-
- <link rel="stylesheet" type="text/css" href="{root_path}normalize{suffix}.css">
- <link rel="stylesheet" type="text/css" href="{root_path}rustdoc{suffix}.css"
- id="mainThemeStyle">
- {themes}
- <link rel="stylesheet" type="text/css" href="{root_path}dark{suffix}.css">
- <link rel="stylesheet" type="text/css" href="{root_path}light{suffix}.css" id="themeStyle">
- <script src="{root_path}storage{suffix}.js"></script>
- {css_extension}
-
- {favicon}
- {in_header}
-</head>
-<body class="rustdoc {css_class}">
- <!--[if lte IE 8]>
- <div class="warning">
- This old browser is unsupported and will most likely display funky
- things.
- </div>
- <![endif]-->
-
- {before_content}
-
- <nav class="sidebar">
- <div class="sidebar-menu">☰</div>
- {logo}
- {sidebar}
- </nav>
-
- <div class="theme-picker">
- <button id="theme-picker" aria-label="Pick another theme!">
- <img src="{root_path}brush{suffix}.svg" width="18" alt="Pick another theme!">
- </button>
- <div id="theme-choices"></div>
- </div>
- <script src="{root_path}theme{suffix}.js"></script>
- <nav class="sub">
- <form class="search-form js-only">
- <div class="search-container">
- <input class="search-input" name="search"
- autocomplete="off"
- placeholder="Click or press ‘S’ to search, ‘?’ for more options…"
- type="search">
- </div>
- </form>
- </nav>
-
- <section id='main' class="content">{content}</section>
- <section id='search' class="content hidden"></section>
-
- <section class="footer"></section>
-
- <aside id="help" class="hidden">
- <div>
- <h1 class="hidden">Help</h1>
-
- <div class="shortcuts">
- <h2>Keyboard Shortcuts</h2>
-
- <dl>
- <dt><kbd>?</kbd></dt>
- <dd>Show this help dialog</dd>
- <dt><kbd>S</kbd></dt>
- <dd>Focus the search field</dd>
- <dt><kbd>↑</kbd></dt>
- <dd>Move up in search results</dd>
- <dt><kbd>↓</kbd></dt>
- <dd>Move down in search results</dd>
- <dt><kbd>↹</kbd></dt>
- <dd>Switch tab</dd>
- <dt><kbd>⏎</kbd></dt>
- <dd>Go to active search result</dd>
- <dt><kbd>+</kbd></dt>
- <dd>Expand all sections</dd>
- <dt><kbd>-</kbd></dt>
- <dd>Collapse all sections</dd>
- </dl>
- </div>
-
- <div class="infos">
- <h2>Search Tricks</h2>
-
- <p>
- Prefix searches with a type followed by a colon (e.g.
- <code>fn:</code>) to restrict the search to a given type.
- </p>
-
- <p>
- Accepted types are: <code>fn</code>, <code>mod</code>,
- <code>struct</code>, <code>enum</code>,
- <code>trait</code>, <code>type</code>, <code>macro</code>,
- and <code>const</code>.
- </p>
-
- <p>
- Search functions by type signature (e.g.
- <code>vec -> usize</code> or <code>* -> vec</code>)
- </p>
- </div>
- </div>
- </aside>
-
- {after_content}
-
- <script>
- window.rootPath = "{root_path}";
- window.currentCrate = "{krate}";
- </script>
- <script src="{root_path}main{suffix}.js"></script>
- <script defer src="{root_path}search-index.js"></script>
-</body>
-</html>"##,
+"<!DOCTYPE html>\
+<html lang=\"en\">\
+<head>\
+ <meta charset=\"utf-8\">\
+ <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\
+ <meta name=\"generator\" content=\"rustdoc\">\
+ <meta name=\"description\" content=\"{description}\">\
+ <meta name=\"keywords\" content=\"{keywords}\">\
+ <title>{title}</title>\
+ <link rel=\"stylesheet\" type=\"text/css\" href=\"{root_path}normalize{suffix}.css\">\
+ <link rel=\"stylesheet\" type=\"text/css\" href=\"{root_path}rustdoc{suffix}.css\" \
+ id=\"mainThemeStyle\">\
+ {themes}\
+ <link rel=\"stylesheet\" type=\"text/css\" href=\"{root_path}dark{suffix}.css\">\
+ <link rel=\"stylesheet\" type=\"text/css\" href=\"{root_path}light{suffix}.css\" \
+ id=\"themeStyle\">\
+ <script src=\"{root_path}storage{suffix}.js\"></script>\
+ {css_extension}\
+ {favicon}\
+ {in_header}\
+</head>\
+<body class=\"rustdoc {css_class}\">\
+ <!--[if lte IE 8]>\
+ <div class=\"warning\">\
+ This old browser is unsupported and will most likely display funky \
+ things.\
+ </div>\
+ <![endif]-->\
+ {before_content}\
+ <nav class=\"sidebar\">\
+ <div class=\"sidebar-menu\">☰</div>\
+ {logo}\
+ {sidebar}\
+ </nav>\
+ <div class=\"theme-picker\">\
+ <button id=\"theme-picker\" aria-label=\"Pick another theme!\">\
+ <img src=\"{root_path}brush{suffix}.svg\" width=\"18\" alt=\"Pick another theme!\">\
+ </button>\
+ <div id=\"theme-choices\"></div>\
+ </div>\
+ <script src=\"{root_path}theme{suffix}.js\"></script>\
+ <nav class=\"sub\">\
+ <form class=\"search-form js-only\">\
+ <div class=\"search-container\">\
+ <input class=\"search-input\" name=\"search\" \
+ autocomplete=\"off\" \
+ placeholder=\"Click or press ‘S’ to search, ‘?’ for more options…\" \
+ type=\"search\">\
+ </div>\
+ </form>\
+ </nav>\
+ <section id=\"main\" class=\"content\">{content}</section>\
+ <section id=\"search\" class=\"content hidden\"></section>\
+ <section class=\"footer\"></section>\
+ <aside id=\"help\" class=\"hidden\">\
+ <div>\
+ <h1 class=\"hidden\">Help</h1>\
+ <div class=\"shortcuts\">\
+ <h2>Keyboard Shortcuts</h2>\
+ <dl>\
+ <dt><kbd>?</kbd></dt>\
+ <dd>Show this help dialog</dd>\
+ <dt><kbd>S</kbd></dt>\
+ <dd>Focus the search field</dd>\
+ <dt><kbd>↑</kbd></dt>\
+ <dd>Move up in search results</dd>\
+ <dt><kbd>↓</kbd></dt>\
+ <dd>Move down in search results</dd>\
+ <dt><kbd>↹</kbd></dt>\
+ <dd>Switch tab</dd>\
+ <dt><kbd>⏎</kbd></dt>\
+ <dd>Go to active search result</dd>\
+ <dt><kbd>+</kbd></dt>\
+ <dd>Expand all sections</dd>\
+ <dt><kbd>-</kbd></dt>\
+ <dd>Collapse all sections</dd>\
+ </dl>\
+ </div>\
+ <div class=\"infos\">\
+ <h2>Search Tricks</h2>\
+ <p>\
+ Prefix searches with a type followed by a colon (e.g. \
+ <code>fn:</code>) to restrict the search to a given type.\
+ </p>\
+ <p>\
+ Accepted types are: <code>fn</code>, <code>mod</code>, \
+ <code>struct</code>, <code>enum</code>, \
+ <code>trait</code>, <code>type</code>, <code>macro</code>, \
+ and <code>const</code>.\
+ </p>\
+ <p>\
+ Search functions by type signature (e.g. \
+ <code>vec -> usize</code> or <code>* -> vec</code>)\
+ </p>\
+ <p>\
+ Search multiple things at once by splitting your query with comma (e.g. \
+ <code>str,u8</code> or <code>String,struct:Vec,test</code>)\
+ </p>\
+ </div>\
+ </div>\
+ </aside>\
+ {after_content}\
+ <script>\
+ window.rootPath = \"{root_path}\";\
+ window.currentCrate = \"{krate}\";\
+ </script>\
+ <script src=\"{root_path}main{suffix}.js\"></script>\
+ <script defer src=\"{root_path}search-index.js\"></script>\
+</body>\
+</html>",
css_extension = if css_file_extension {
format!("<link rel=\"stylesheet\" type=\"text/css\" href=\"{root_path}theme{suffix}.css\">",
root_path = page.root_path,
printTab(currentTab);
}
+ function execSearch(query, searchWords) {
+ var queries = query.raw.split(",");
+ var results = {
+ 'in_args': [],
+ 'returned': [],
+ 'others': [],
+ };
+
+ for (var i = 0; i < queries.length; ++i) {
+ var query = queries[i].trim();
+ if (query.length !== 0) {
+ var tmp = execQuery(getQuery(query), searchWords);
+
+ results['in_args'].push(tmp['in_args']);
+ results['returned'].push(tmp['returned']);
+ results['others'].push(tmp['others']);
+ }
+ }
+ if (queries.length > 1) {
+ function getSmallest(arrays, positions) {
+ var start = null;
+
+ for (var it = 0; it < positions.length; ++it) {
+ if (arrays[it].length > positions[it] &&
+ (start === null || start > arrays[it][positions[it]].lev)) {
+ start = arrays[it][positions[it]].lev;
+ }
+ }
+ return start;
+ }
+
+ function mergeArrays(arrays) {
+ var ret = [];
+ var positions = [];
+
+ for (var x = 0; x < arrays.length; ++x) {
+ positions.push(0);
+ }
+ while (ret.length < MAX_RESULTS) {
+ var smallest = getSmallest(arrays, positions);
+ if (smallest === null) {
+ break;
+ }
+ for (x = 0; x < arrays.length && ret.length < MAX_RESULTS; ++x) {
+ if (arrays[x].length > positions[x] &&
+ arrays[x][positions[x]].lev === smallest) {
+ ret.push(arrays[x][positions[x]]);
+ positions[x] += 1;
+ }
+ }
+ }
+ return ret;
+ }
+
+ return {
+ 'in_args': mergeArrays(results['in_args']),
+ 'returned': mergeArrays(results['returned']),
+ 'others': mergeArrays(results['others']),
+ };
+ } else {
+ return {
+ 'in_args': results['in_args'][0],
+ 'returned': results['returned'][0],
+ 'others': results['others'][0],
+ };
+ }
+ }
+
function search(e) {
- var query,
- obj, i, len,
- results = {"in_args": [], "returned": [], "others": []},
- resultIndex;
var params = getQueryStringParams();
+ var query = getQuery(document.getElementsByClassName('search-input')[0].value);
- query = getQuery(document.getElementsByClassName('search-input')[0].value);
if (e) {
e.preventDefault();
}
}
}
- results = execQuery(query, index);
- showResults(results);
+ showResults(execSearch(query, index));
}
function buildIndex(rawSearchIndex) {