├── .gitbook └── assets │ ├── 0.jpeg │ ├── cc.png │ ├── illu.png │ ├── im2col.png │ ├── image.png │ ├── images.jpeg │ ├── img_1787.jpg │ ├── screenshot-2019-09-11-at-11.55.23-am.png │ ├── screenshot-2019-09-13-at-12.28.53-pm.png │ ├── screenshot-2019-09-13-at-9.14.59-pm.png │ ├── screenshot-2019-09-14-at-10.31.17-am.png │ ├── screenshot-2019-09-14-at-10.31.27-am (1).png │ ├── screenshot-2019-09-14-at-10.31.27-am.png │ ├── screenshot-2019-09-14-at-10.58.53-am (1).png │ ├── screenshot-2019-09-14-at-10.58.53-am.png │ └── screenshot-2019-09-14-at-10.59.46-am.png ├── GPU-de-diao-du.md ├── README.md ├── SUMMARY.md ├── _book ├── chapter-1 │ ├── dai-ma-shi-zen-me-dao-gpu-de.html │ └── she-bei-zhu-ce-gpu-register.html ├── gitbook │ ├── fonts │ │ └── fontawesome │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ ├── gitbook-plugin-anchor-navigation-ex │ │ ├── lib │ │ │ ├── config.js │ │ │ ├── log.js │ │ │ └── plugin.js │ │ └── style │ │ │ └── plugin.css │ ├── gitbook-plugin-anchors │ │ └── plugin.css │ ├── gitbook-plugin-comment │ │ ├── plugin.css │ │ └── plugin.js │ ├── gitbook-plugin-expandable-chapters-small │ │ ├── expandable-chapters-small.css │ │ └── expandable-chapters-small.js │ ├── gitbook-plugin-fontsettings │ │ ├── fontsettings.js │ │ └── website.css │ ├── gitbook-plugin-github-buttons │ │ ├── plugin.js │ │ └── plugin.js.map │ ├── gitbook-plugin-github │ │ └── plugin.js │ ├── gitbook-plugin-highlight │ │ ├── ebook.css │ │ └── website.css │ ├── gitbook-plugin-livereload │ │ └── plugin.js │ ├── gitbook-plugin-lunr │ │ ├── lunr.min.js │ │ └── search-lunr.js │ ├── gitbook-plugin-search │ │ ├── lunr.min.js │ │ ├── search-engine.js │ │ ├── search.css │ │ └── search.js │ ├── gitbook-plugin-sharing-plus │ │ └── buttons.js │ ├── gitbook-plugin-splitter │ │ ├── splitter.css │ │ └── splitter.js │ ├── gitbook.js │ ├── images │ │ ├── apple-touch-icon-precomposed-152.png │ │ └── favicon.ico │ ├── style.css │ └── theme.js ├── index.html └── search_index.json ├── book.json ├── cong-GPU-de-jiao-du-kan-job-wan-cheng.md ├── cong-JM-dao-JS-dao-JD.md ├── draft ├── fan-wai-de-fan-wai ├── dan-yi-tu-xiang-juan-ji-yi-ge-mobile-gpu-de-suan-fa.md ├── shuo-le-ban-tian-jie-guo-zen-yang.md ├── wo-men-gan-le-ge-sha-ying-she-thread-dao-shu-chu-tu-xiang-de-channel-shang.md └── xian-you-de-fang-fa-na-li-bu-dai-jin-le-yong-de-zhe-ni-nong-ge-xin-de.md ├── fan-wai ├── dai-ma-da-quan-di-er-ban-steve-mcconnel.md ├── effective-c++-di-san-ban.md └── wei-shen-me-hui-you-fan-wai.md ├── mali-gpu-driver ├── cong-gpu-de-jiao-du-kan-job-wan-cheng.md ├── cong-jm-dao-js-dao-jd.md ├── dai-ma-shi-zen-me-dao-gpu-de.md ├── dao-sheng-yi-yi-sheng-er-er-sheng-san-san-sheng-wan-wu.md ├── e-tong-mu-gpu-ren-wu-de-chou-xiang.md ├── gpu-de-diao-du.md ├── ji-cun-qi-de-xiang.md ├── ni-nan-guo-de-tai-jia-zhuang-ni-ping-shen-me-nian-nian-bu-wang.md ├── she-bei-zhu-ce-gpu-register.md ├── wo-fa-shi-wo-yao-ti-bao-ni-de-jm.md ├── wo-yao-ni-san-geng-si-shui-gan-liu-ni-dao-wu-geng.md ├── yi-bei-jing-ming-tian-yi-bei-jing-guo-wang.md ├── zhang-xu.md └── zhou-liu-bu-he-jiu-ren-sheng-lu-bai-zou.md ├── node_modules ├── boolbase │ ├── README.md │ ├── index.js │ └── package.json ├── cheerio │ ├── History.md │ ├── Readme.md │ ├── index.js │ ├── lib │ │ ├── api │ │ │ ├── attributes.js │ │ │ ├── css.js │ │ │ ├── forms.js │ │ │ ├── manipulation.js │ │ │ └── traversing.js │ │ ├── cheerio.js │ │ ├── parse.js │ │ ├── static.js │ │ └── utils.js │ └── package.json ├── colors │ ├── LICENSE │ ├── README.md │ ├── examples │ │ ├── normal-usage.js │ │ └── safe-string.js │ ├── index.d.ts │ ├── lib │ │ ├── colors.js │ │ ├── custom │ │ │ ├── trap.js │ │ │ └── zalgo.js │ │ ├── extendStringPrototype.js │ │ ├── index.js │ │ ├── maps │ │ │ ├── america.js │ │ │ ├── rainbow.js │ │ │ ├── random.js │ │ │ └── zebra.js │ │ ├── styles.js │ │ └── system │ │ │ ├── has-flag.js │ │ │ └── supports-colors.js │ ├── package.json │ ├── safe.d.ts │ ├── safe.js │ └── themes │ │ └── generic-logging.js ├── css-select │ ├── LICENSE │ ├── README.md │ ├── index.js │ ├── lib │ │ ├── attributes.js │ │ ├── compile.js │ │ ├── general.js │ │ ├── procedure.json │ │ ├── pseudos.js │ │ └── sort.js │ └── package.json ├── css-what │ ├── LICENSE │ ├── index.js │ ├── package.json │ └── readme.md ├── dom-serializer │ ├── LICENSE │ ├── index.js │ ├── node_modules │ │ └── domelementtype │ │ │ ├── LICENSE │ │ │ ├── index.js │ │ │ ├── package.json │ │ │ └── readme.md │ └── package.json ├── domelementtype │ ├── LICENSE │ ├── index.js │ ├── package.json │ └── readme.md ├── domhandler │ ├── .travis.yml │ ├── LICENSE │ ├── index.js │ ├── lib │ │ ├── element.js │ │ └── node.js │ ├── package.json │ ├── readme.md │ └── test │ │ ├── cases │ │ ├── 01-basic.json │ │ ├── 02-single_tag_1.json │ │ ├── 03-single_tag_2.json │ │ ├── 04-unescaped_in_script.json │ │ ├── 05-tags_in_comment.json │ │ ├── 06-comment_in_script.json │ │ ├── 07-unescaped_in_style.json │ │ ├── 08-extra_spaces_in_tag.json │ │ ├── 09-unquoted_attrib.json │ │ ├── 10-singular_attribute.json │ │ ├── 11-text_outside_tags.json │ │ ├── 12-text_only.json │ │ ├── 13-comment_in_text.json │ │ ├── 14-comment_in_text_in_script.json │ │ ├── 15-non-verbose.json │ │ ├── 16-normalize_whitespace.json │ │ ├── 17-xml_namespace.json │ │ ├── 18-enforce_empty_tags.json │ │ ├── 19-ignore_empty_tags.json │ │ ├── 20-template_script_tags.json │ │ ├── 21-conditional_comments.json │ │ ├── 22-lowercase_tags.json │ │ ├── 23-dom-lvl1.json │ │ ├── 24-with-start-indices.json │ │ └── 25-with-end-indices.json │ │ └── tests.js ├── domutils │ ├── .npmignore │ ├── LICENSE │ ├── index.js │ ├── lib │ │ ├── helpers.js │ │ ├── legacy.js │ │ ├── manipulation.js │ │ ├── querying.js │ │ ├── stringify.js │ │ └── traversal.js │ ├── package.json │ ├── readme.md │ └── test │ │ ├── fixture.js │ │ ├── tests │ │ ├── helpers.js │ │ ├── legacy.js │ │ └── traversal.js │ │ └── utils.js ├── entities │ ├── .travis.yml │ ├── LICENSE │ ├── index.js │ ├── lib │ │ ├── decode.js │ │ ├── decode_codepoint.js │ │ └── encode.js │ ├── maps │ │ ├── decode.json │ │ ├── entities.json │ │ ├── legacy.json │ │ └── xml.json │ ├── package.json │ ├── readme.md │ └── test │ │ ├── mocha.opts │ │ └── test.js ├── gitbook-plugin-anchor-navigation-ex │ ├── .idea │ │ ├── gitbook-plugin-anchor-navigation-ex.iml │ │ ├── jsLibraryMappings.xml │ │ ├── markdown-navigator.xml │ │ ├── markdown-navigator │ │ │ └── profiles_settings.xml │ │ ├── misc.xml │ │ ├── modules.xml │ │ ├── vcs.xml │ │ ├── watcherTasks.xml │ │ └── workspace.xml │ ├── LICENSE │ ├── README.md │ ├── assets │ │ ├── lib │ │ │ ├── config.js │ │ │ ├── log.js │ │ │ └── plugin.js │ │ └── style │ │ │ └── plugin.css │ ├── doc │ │ ├── README_EN.md │ │ ├── config-en.md │ │ ├── config.md │ │ ├── effectScreenshot.md │ │ ├── images │ │ │ ├── night默认参数效果.png │ │ │ ├── pageTop展示.png │ │ │ ├── printlog.png │ │ │ ├── sepia默认参数效果.png │ │ │ ├── toc标题icon展示.jpg │ │ │ ├── toc标题icon展示2.jpg │ │ │ ├── white默认参数效果.png │ │ │ ├── 层级关联显示.png │ │ │ ├── 标题重新与默认主题层级相关联.jpg │ │ │ └── 锚点效果和top展示.jpg │ │ ├── updateRecord-en.md │ │ └── updateRecord.md │ ├── index.js │ └── package.json ├── gitbook-plugin-anchors │ ├── .npmignore │ ├── LICENSE │ ├── README.md │ ├── assets │ │ └── plugin.css │ ├── index.js │ └── package.json ├── gitbook-plugin-comment │ ├── .eslintrc │ ├── .npmignore │ ├── LICENSE │ ├── README.md │ ├── assets │ │ ├── plugin.css │ │ └── plugin.js │ ├── index.js │ └── package.json ├── gitbook-plugin-disqus │ ├── .npmignore │ ├── LICENSE │ ├── README.md │ ├── book │ │ ├── plugin.css │ │ └── plugin.js │ ├── index.js │ └── package.json ├── gitbook-plugin-donate │ ├── .npmignore │ ├── README.md │ ├── assets │ │ ├── plugin.css │ │ └── plugin.js │ ├── index.js │ └── package.json ├── gitbook-plugin-expandable-chapters-small │ ├── .npmignore │ ├── .project │ ├── LICENSE │ ├── README.md │ ├── book │ │ ├── expandable-chapters-small.css │ │ └── expandable-chapters-small.js │ ├── index.js │ └── package.json ├── gitbook-plugin-favicon │ ├── .npmignore │ ├── CHANGELOG.md │ ├── README.md │ ├── _layouts │ │ ├── favicon.js │ │ └── website │ │ │ └── page.html │ ├── index.js │ └── package.json ├── gitbook-plugin-github-buttons │ ├── LICENSE │ ├── README.md │ ├── _layouts │ │ └── website │ │ │ └── page.html │ ├── index.js │ ├── lib │ │ ├── plugin.js │ │ └── plugin.js.map │ ├── package.json │ └── src │ │ └── plugin.js ├── gitbook-plugin-github │ ├── LICENSE │ ├── README.md │ ├── assets │ │ └── plugin.js │ ├── index.js │ └── package.json ├── gitbook-plugin-sharing-plus │ ├── .eslintrc │ ├── .npmignore │ ├── LICENSE │ ├── README.md │ ├── assets │ │ └── buttons.js │ ├── index.js │ └── package.json ├── gitbook-plugin-splitter │ ├── .npmignore │ ├── LICENSE.txt │ ├── README.md │ ├── book │ │ ├── splitter.css │ │ └── splitter.js │ ├── gitbook-splitter-demo.gif │ ├── index.js │ └── package.json ├── github-slugid │ ├── .npmignore │ ├── .travis.yml │ ├── LICENSE │ ├── README.md │ ├── index.js │ ├── package.json │ └── test │ │ └── test.js ├── htmlparser2 │ ├── LICENSE │ ├── README.md │ ├── lib │ │ ├── CollectingHandler.js │ │ ├── FeedHandler.js │ │ ├── Parser.js │ │ ├── ProxyHandler.js │ │ ├── Stream.js │ │ ├── Tokenizer.js │ │ ├── WritableStream.js │ │ └── index.js │ └── package.json ├── inherits │ ├── LICENSE │ ├── README.md │ ├── inherits.js │ ├── inherits_browser.js │ └── package.json ├── lodash.assignin │ ├── LICENSE │ ├── README.md │ ├── index.js │ └── package.json ├── lodash.bind │ ├── LICENSE │ ├── README.md │ ├── index.js │ └── package.json ├── lodash.defaults │ ├── LICENSE │ ├── README.md │ ├── index.js │ └── package.json ├── lodash.filter │ ├── LICENSE │ ├── README.md │ ├── index.js │ └── package.json ├── lodash.flatten │ ├── LICENSE │ ├── README.md │ ├── index.js │ └── package.json ├── lodash.foreach │ ├── LICENSE │ ├── README.md │ ├── index.js │ └── package.json ├── lodash.map │ ├── LICENSE │ ├── README.md │ ├── index.js │ └── package.json ├── lodash.merge │ ├── LICENSE │ ├── README.md │ ├── index.js │ └── package.json ├── lodash.pick │ ├── LICENSE │ ├── README.md │ ├── index.js │ └── package.json ├── lodash.reduce │ ├── LICENSE │ ├── README.md │ ├── index.js │ └── package.json ├── lodash.reject │ ├── LICENSE │ ├── README.md │ ├── index.js │ └── package.json ├── lodash.some │ ├── LICENSE │ ├── README.md │ ├── index.js │ └── package.json ├── lodash │ ├── LICENSE │ ├── README.md │ ├── array.js │ ├── array │ │ ├── chunk.js │ │ ├── compact.js │ │ ├── difference.js │ │ ├── drop.js │ │ ├── dropRight.js │ │ ├── dropRightWhile.js │ │ ├── dropWhile.js │ │ ├── fill.js │ │ ├── findIndex.js │ │ ├── findLastIndex.js │ │ ├── first.js │ │ ├── flatten.js │ │ ├── flattenDeep.js │ │ ├── head.js │ │ ├── indexOf.js │ │ ├── initial.js │ │ ├── intersection.js │ │ ├── last.js │ │ ├── lastIndexOf.js │ │ ├── object.js │ │ ├── pull.js │ │ ├── pullAt.js │ │ ├── remove.js │ │ ├── rest.js │ │ ├── slice.js │ │ ├── sortedIndex.js │ │ ├── sortedLastIndex.js │ │ ├── tail.js │ │ ├── take.js │ │ ├── takeRight.js │ │ ├── takeRightWhile.js │ │ ├── takeWhile.js │ │ ├── union.js │ │ ├── uniq.js │ │ ├── unique.js │ │ ├── unzip.js │ │ ├── unzipWith.js │ │ ├── without.js │ │ ├── xor.js │ │ ├── zip.js │ │ ├── zipObject.js │ │ └── zipWith.js │ ├── chain.js │ ├── chain │ │ ├── chain.js │ │ ├── commit.js │ │ ├── concat.js │ │ ├── lodash.js │ │ ├── plant.js │ │ ├── reverse.js │ │ ├── run.js │ │ ├── tap.js │ │ ├── thru.js │ │ ├── toJSON.js │ │ ├── toString.js │ │ ├── value.js │ │ ├── valueOf.js │ │ ├── wrapperChain.js │ │ ├── wrapperCommit.js │ │ ├── wrapperConcat.js │ │ ├── wrapperPlant.js │ │ ├── wrapperReverse.js │ │ ├── wrapperToString.js │ │ └── wrapperValue.js │ ├── collection.js │ ├── collection │ │ ├── all.js │ │ ├── any.js │ │ ├── at.js │ │ ├── collect.js │ │ ├── contains.js │ │ ├── countBy.js │ │ ├── detect.js │ │ ├── each.js │ │ ├── eachRight.js │ │ ├── every.js │ │ ├── filter.js │ │ ├── find.js │ │ ├── findLast.js │ │ ├── findWhere.js │ │ ├── foldl.js │ │ ├── foldr.js │ │ ├── forEach.js │ │ ├── forEachRight.js │ │ ├── groupBy.js │ │ ├── include.js │ │ ├── includes.js │ │ ├── indexBy.js │ │ ├── inject.js │ │ ├── invoke.js │ │ ├── map.js │ │ ├── max.js │ │ ├── min.js │ │ ├── partition.js │ │ ├── pluck.js │ │ ├── reduce.js │ │ ├── reduceRight.js │ │ ├── reject.js │ │ ├── sample.js │ │ ├── select.js │ │ ├── shuffle.js │ │ ├── size.js │ │ ├── some.js │ │ ├── sortBy.js │ │ ├── sortByAll.js │ │ ├── sortByOrder.js │ │ ├── sum.js │ │ └── where.js │ ├── date.js │ ├── date │ │ └── now.js │ ├── function.js │ ├── function │ │ ├── after.js │ │ ├── ary.js │ │ ├── backflow.js │ │ ├── before.js │ │ ├── bind.js │ │ ├── bindAll.js │ │ ├── bindKey.js │ │ ├── compose.js │ │ ├── curry.js │ │ ├── curryRight.js │ │ ├── debounce.js │ │ ├── defer.js │ │ ├── delay.js │ │ ├── flow.js │ │ ├── flowRight.js │ │ ├── memoize.js │ │ ├── modArgs.js │ │ ├── negate.js │ │ ├── once.js │ │ ├── partial.js │ │ ├── partialRight.js │ │ ├── rearg.js │ │ ├── restParam.js │ │ ├── spread.js │ │ ├── throttle.js │ │ └── wrap.js │ ├── index.js │ ├── internal │ │ ├── LazyWrapper.js │ │ ├── LodashWrapper.js │ │ ├── MapCache.js │ │ ├── SetCache.js │ │ ├── arrayConcat.js │ │ ├── arrayCopy.js │ │ ├── arrayEach.js │ │ ├── arrayEachRight.js │ │ ├── arrayEvery.js │ │ ├── arrayExtremum.js │ │ ├── arrayFilter.js │ │ ├── arrayMap.js │ │ ├── arrayPush.js │ │ ├── arrayReduce.js │ │ ├── arrayReduceRight.js │ │ ├── arraySome.js │ │ ├── arraySum.js │ │ ├── assignDefaults.js │ │ ├── assignOwnDefaults.js │ │ ├── assignWith.js │ │ ├── baseAssign.js │ │ ├── baseAt.js │ │ ├── baseCallback.js │ │ ├── baseClone.js │ │ ├── baseCompareAscending.js │ │ ├── baseCopy.js │ │ ├── baseCreate.js │ │ ├── baseDelay.js │ │ ├── baseDifference.js │ │ ├── baseEach.js │ │ ├── baseEachRight.js │ │ ├── baseEvery.js │ │ ├── baseExtremum.js │ │ ├── baseFill.js │ │ ├── baseFilter.js │ │ ├── baseFind.js │ │ ├── baseFindIndex.js │ │ ├── baseFlatten.js │ │ ├── baseFor.js │ │ ├── baseForIn.js │ │ ├── baseForOwn.js │ │ ├── baseForOwnRight.js │ │ ├── baseForRight.js │ │ ├── baseFunctions.js │ │ ├── baseGet.js │ │ ├── baseIndexOf.js │ │ ├── baseIsEqual.js │ │ ├── baseIsEqualDeep.js │ │ ├── baseIsFunction.js │ │ ├── baseIsMatch.js │ │ ├── baseLodash.js │ │ ├── baseMap.js │ │ ├── baseMatches.js │ │ ├── baseMatchesProperty.js │ │ ├── baseMerge.js │ │ ├── baseMergeDeep.js │ │ ├── baseProperty.js │ │ ├── basePropertyDeep.js │ │ ├── basePullAt.js │ │ ├── baseRandom.js │ │ ├── baseReduce.js │ │ ├── baseSetData.js │ │ ├── baseSlice.js │ │ ├── baseSome.js │ │ ├── baseSortBy.js │ │ ├── baseSortByOrder.js │ │ ├── baseSum.js │ │ ├── baseToString.js │ │ ├── baseUniq.js │ │ ├── baseValues.js │ │ ├── baseWhile.js │ │ ├── baseWrapperValue.js │ │ ├── binaryIndex.js │ │ ├── binaryIndexBy.js │ │ ├── bindCallback.js │ │ ├── bufferClone.js │ │ ├── cacheIndexOf.js │ │ ├── cachePush.js │ │ ├── charsLeftIndex.js │ │ ├── charsRightIndex.js │ │ ├── compareAscending.js │ │ ├── compareMultiple.js │ │ ├── composeArgs.js │ │ ├── composeArgsRight.js │ │ ├── createAggregator.js │ │ ├── createAssigner.js │ │ ├── createBaseEach.js │ │ ├── createBaseFor.js │ │ ├── createBindWrapper.js │ │ ├── createCache.js │ │ ├── createCompounder.js │ │ ├── createCtorWrapper.js │ │ ├── createCurry.js │ │ ├── createDefaults.js │ │ ├── createExtremum.js │ │ ├── createFind.js │ │ ├── createFindIndex.js │ │ ├── createFindKey.js │ │ ├── createFlow.js │ │ ├── createForEach.js │ │ ├── createForIn.js │ │ ├── createForOwn.js │ │ ├── createHybridWrapper.js │ │ ├── createObjectMapper.js │ │ ├── createPadDir.js │ │ ├── createPadding.js │ │ ├── createPartial.js │ │ ├── createPartialWrapper.js │ │ ├── createReduce.js │ │ ├── createRound.js │ │ ├── createSortedIndex.js │ │ ├── createWrapper.js │ │ ├── deburrLetter.js │ │ ├── equalArrays.js │ │ ├── equalByTag.js │ │ ├── equalObjects.js │ │ ├── escapeHtmlChar.js │ │ ├── escapeRegExpChar.js │ │ ├── escapeStringChar.js │ │ ├── getData.js │ │ ├── getFuncName.js │ │ ├── getLength.js │ │ ├── getMatchData.js │ │ ├── getNative.js │ │ ├── getView.js │ │ ├── indexOfNaN.js │ │ ├── initCloneArray.js │ │ ├── initCloneByTag.js │ │ ├── initCloneObject.js │ │ ├── invokePath.js │ │ ├── isArrayLike.js │ │ ├── isIndex.js │ │ ├── isIterateeCall.js │ │ ├── isKey.js │ │ ├── isLaziable.js │ │ ├── isLength.js │ │ ├── isObjectLike.js │ │ ├── isSpace.js │ │ ├── isStrictComparable.js │ │ ├── lazyClone.js │ │ ├── lazyReverse.js │ │ ├── lazyValue.js │ │ ├── mapDelete.js │ │ ├── mapGet.js │ │ ├── mapHas.js │ │ ├── mapSet.js │ │ ├── mergeData.js │ │ ├── mergeDefaults.js │ │ ├── metaMap.js │ │ ├── pickByArray.js │ │ ├── pickByCallback.js │ │ ├── reEscape.js │ │ ├── reEvaluate.js │ │ ├── reInterpolate.js │ │ ├── realNames.js │ │ ├── reorder.js │ │ ├── replaceHolders.js │ │ ├── setData.js │ │ ├── shimKeys.js │ │ ├── sortedUniq.js │ │ ├── toIterable.js │ │ ├── toObject.js │ │ ├── toPath.js │ │ ├── trimmedLeftIndex.js │ │ ├── trimmedRightIndex.js │ │ ├── unescapeHtmlChar.js │ │ └── wrapperClone.js │ ├── lang.js │ ├── lang │ │ ├── clone.js │ │ ├── cloneDeep.js │ │ ├── eq.js │ │ ├── gt.js │ │ ├── gte.js │ │ ├── isArguments.js │ │ ├── isArray.js │ │ ├── isBoolean.js │ │ ├── isDate.js │ │ ├── isElement.js │ │ ├── isEmpty.js │ │ ├── isEqual.js │ │ ├── isError.js │ │ ├── isFinite.js │ │ ├── isFunction.js │ │ ├── isMatch.js │ │ ├── isNaN.js │ │ ├── isNative.js │ │ ├── isNull.js │ │ ├── isNumber.js │ │ ├── isObject.js │ │ ├── isPlainObject.js │ │ ├── isRegExp.js │ │ ├── isString.js │ │ ├── isTypedArray.js │ │ ├── isUndefined.js │ │ ├── lt.js │ │ ├── lte.js │ │ ├── toArray.js │ │ └── toPlainObject.js │ ├── math.js │ ├── math │ │ ├── add.js │ │ ├── ceil.js │ │ ├── floor.js │ │ ├── max.js │ │ ├── min.js │ │ ├── round.js │ │ └── sum.js │ ├── number.js │ ├── number │ │ ├── inRange.js │ │ └── random.js │ ├── object.js │ ├── object │ │ ├── assign.js │ │ ├── create.js │ │ ├── defaults.js │ │ ├── defaultsDeep.js │ │ ├── extend.js │ │ ├── findKey.js │ │ ├── findLastKey.js │ │ ├── forIn.js │ │ ├── forInRight.js │ │ ├── forOwn.js │ │ ├── forOwnRight.js │ │ ├── functions.js │ │ ├── get.js │ │ ├── has.js │ │ ├── invert.js │ │ ├── keys.js │ │ ├── keysIn.js │ │ ├── mapKeys.js │ │ ├── mapValues.js │ │ ├── merge.js │ │ ├── methods.js │ │ ├── omit.js │ │ ├── pairs.js │ │ ├── pick.js │ │ ├── result.js │ │ ├── set.js │ │ ├── transform.js │ │ ├── values.js │ │ └── valuesIn.js │ ├── package.json │ ├── string.js │ ├── string │ │ ├── camelCase.js │ │ ├── capitalize.js │ │ ├── deburr.js │ │ ├── endsWith.js │ │ ├── escape.js │ │ ├── escapeRegExp.js │ │ ├── kebabCase.js │ │ ├── pad.js │ │ ├── padLeft.js │ │ ├── padRight.js │ │ ├── parseInt.js │ │ ├── repeat.js │ │ ├── snakeCase.js │ │ ├── startCase.js │ │ ├── startsWith.js │ │ ├── template.js │ │ ├── templateSettings.js │ │ ├── trim.js │ │ ├── trimLeft.js │ │ ├── trimRight.js │ │ ├── trunc.js │ │ ├── unescape.js │ │ └── words.js │ ├── support.js │ ├── utility.js │ └── utility │ │ ├── attempt.js │ │ ├── callback.js │ │ ├── constant.js │ │ ├── identity.js │ │ ├── iteratee.js │ │ ├── matches.js │ │ ├── matchesProperty.js │ │ ├── method.js │ │ ├── methodOf.js │ │ ├── mixin.js │ │ ├── noop.js │ │ ├── property.js │ │ ├── propertyOf.js │ │ ├── range.js │ │ ├── times.js │ │ └── uniqueId.js ├── nth-check │ ├── LICENSE │ ├── README.md │ ├── compile.js │ ├── index.js │ ├── package.json │ └── parse.js ├── readable-stream │ ├── CONTRIBUTING.md │ ├── GOVERNANCE.md │ ├── LICENSE │ ├── README.md │ ├── errors-browser.js │ ├── errors.js │ ├── experimentalWarning.js │ ├── lib │ │ ├── _stream_duplex.js │ │ ├── _stream_passthrough.js │ │ ├── _stream_readable.js │ │ ├── _stream_transform.js │ │ ├── _stream_writable.js │ │ └── internal │ │ │ └── streams │ │ │ ├── async_iterator.js │ │ │ ├── buffer_list.js │ │ │ ├── destroy.js │ │ │ ├── end-of-stream.js │ │ │ ├── pipeline.js │ │ │ ├── state.js │ │ │ ├── stream-browser.js │ │ │ └── stream.js │ ├── package.json │ ├── readable-browser.js │ ├── readable.js │ └── yarn.lock ├── safe-buffer │ ├── LICENSE │ ├── README.md │ ├── index.d.ts │ ├── index.js │ └── package.json ├── string_decoder │ ├── LICENSE │ ├── README.md │ ├── lib │ │ └── string_decoder.js │ └── package.json └── util-deprecate │ ├── History.md │ ├── LICENSE │ ├── README.md │ ├── browser.js │ ├── node.js │ └── package.json └── refman.pdf /.gitbook/assets/0.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/0.jpeg -------------------------------------------------------------------------------- /.gitbook/assets/cc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/cc.png -------------------------------------------------------------------------------- /.gitbook/assets/illu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/illu.png -------------------------------------------------------------------------------- /.gitbook/assets/im2col.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/im2col.png -------------------------------------------------------------------------------- /.gitbook/assets/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/image.png -------------------------------------------------------------------------------- /.gitbook/assets/images.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/images.jpeg -------------------------------------------------------------------------------- /.gitbook/assets/img_1787.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/img_1787.jpg -------------------------------------------------------------------------------- /.gitbook/assets/screenshot-2019-09-11-at-11.55.23-am.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/screenshot-2019-09-11-at-11.55.23-am.png -------------------------------------------------------------------------------- /.gitbook/assets/screenshot-2019-09-13-at-12.28.53-pm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/screenshot-2019-09-13-at-12.28.53-pm.png -------------------------------------------------------------------------------- /.gitbook/assets/screenshot-2019-09-13-at-9.14.59-pm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/screenshot-2019-09-13-at-9.14.59-pm.png -------------------------------------------------------------------------------- /.gitbook/assets/screenshot-2019-09-14-at-10.31.17-am.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/screenshot-2019-09-14-at-10.31.17-am.png -------------------------------------------------------------------------------- /.gitbook/assets/screenshot-2019-09-14-at-10.31.27-am (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/screenshot-2019-09-14-at-10.31.27-am (1).png -------------------------------------------------------------------------------- /.gitbook/assets/screenshot-2019-09-14-at-10.31.27-am.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/screenshot-2019-09-14-at-10.31.27-am.png -------------------------------------------------------------------------------- /.gitbook/assets/screenshot-2019-09-14-at-10.58.53-am (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/screenshot-2019-09-14-at-10.58.53-am (1).png -------------------------------------------------------------------------------- /.gitbook/assets/screenshot-2019-09-14-at-10.58.53-am.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/screenshot-2019-09-14-at-10.58.53-am.png -------------------------------------------------------------------------------- /.gitbook/assets/screenshot-2019-09-14-at-10.59.46-am.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/screenshot-2019-09-14-at-10.59.46-am.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 前言 2 | 3 | 如果你是我的老读者,当然我觉得没有几个这样的人,你就会发现这本书甚至改了名字。我承认原来他是专门介绍GPU driver的,但是由于我的研究范围日益扩大(好吧,我承认我只是好奇心重,每个都玩不精),这本书已经完全变成一个~~日记~~技术博客了。 4 | 5 | 这本书原来的前言是_“为了克服自己的皮,以及想当作一个笔记,我决定写一本书叫《年子》(《日子》和《月子》的续集)来记录我对GPU kernel的理解和认识“,_但是现在看并没有什么用处。不过我还是希望能以不那么频繁的更新频率把它坚持下去。 6 | 7 | 鉴于现在只有我一个读者,并且我懂得一些中文,所有我决定使用这种半土不洋的语言。如果有一天这本书火了,三体人还没有打到地球,那么我会考虑把他翻译成英文。 8 | 9 | 差点忘了一点,鉴于我是个半吊子爱好者,这本书可能会有错误的地方,但我会尽量保证它的正确性并且附加适当的reference。如果你发现任何错误,十分感谢能写个email给我,让我别继续丢人。 10 | 11 | 另外我女朋友问我能不能把这本书献给她,那么,应该是能得。 12 | 13 | -------------------------------------------------------------------------------- /_book/gitbook/fonts/fontawesome/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/_book/gitbook/fonts/fontawesome/FontAwesome.otf -------------------------------------------------------------------------------- /_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot -------------------------------------------------------------------------------- /_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff -------------------------------------------------------------------------------- /_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /_book/gitbook/gitbook-plugin-anchor-navigation-ex/lib/log.js: -------------------------------------------------------------------------------- 1 | var colors = require('colors'); 2 | colors.setTheme({ 3 | silly: 'rainbow', 4 | input: 'grey', 5 | verbose: 'cyan', 6 | prompt: 'grey', 7 | info: 'green', 8 | data: 'grey', 9 | help: 'cyan', 10 | warn: 'yellow', 11 | debug: 'blue', 12 | error: 'red' 13 | }); 14 | 15 | module.exports = colors; 16 | 17 | -------------------------------------------------------------------------------- /_book/gitbook/gitbook-plugin-anchors/plugin.css: -------------------------------------------------------------------------------- 1 | 2 | a.plugin-anchor { 3 | color: inherit !important; 4 | display: none; 5 | margin-left: -30px; 6 | padding-left: 40px; 7 | cursor: pointer; 8 | position: absolute; 9 | top: 0; 10 | left: 0; 11 | bottom: 0; 12 | } 13 | 14 | a.plugin-anchor i { 15 | margin-left: -30px; 16 | font-size: 15px !important; 17 | } 18 | 19 | h1, h2, h3, h4, h5, h6 { 20 | position: relative; 21 | } 22 | 23 | h1:hover a.plugin-anchor, h2:hover a.plugin-anchor, h3:hover a.plugin-anchor, 24 | h4:hover a.plugin-anchor, h5:hover a.plugin-anchor, h6:hover a.plugin-anchor { 25 | display: inline-block; 26 | } 27 | 28 | .book .book-body .page-wrapper .page-inner section.normal { 29 | overflow: visible; 30 | } 31 | -------------------------------------------------------------------------------- /_book/gitbook/gitbook-plugin-expandable-chapters-small/expandable-chapters-small.css: -------------------------------------------------------------------------------- 1 | .book .book-summary .chapter > .articles { 2 | overflow: hidden; 3 | max-height: 0px; 4 | } 5 | 6 | .book .book-summary .chapter.expanded > .articles { 7 | max-height: 9999px; 8 | } 9 | 10 | .book .book-summary .exc-trigger { 11 | position: absolute; 12 | left: 12px; 13 | top: 12px; 14 | } 15 | 16 | .book .book-summary ul.summary li a, 17 | .book .book-summary ul.summary li span { 18 | padding-left: 30px; 19 | } 20 | 21 | .book .book-summary .exc-trigger:before { 22 | content: "\f105"; 23 | } 24 | 25 | .book .book-summary .expanded > a .exc-trigger:before, 26 | .book .book-summary .expanded > span .exc-trigger:before { 27 | content: "\f107"; 28 | } 29 | 30 | -------------------------------------------------------------------------------- /_book/gitbook/gitbook-plugin-github/plugin.js: -------------------------------------------------------------------------------- 1 | require([ 'gitbook' ], function (gitbook) { 2 | gitbook.events.bind('start', function (e, config) { 3 | var githubURL = config.github.url; 4 | 5 | gitbook.toolbar.createButton({ 6 | icon: 'fa fa-github', 7 | label: 'GitHub', 8 | position: 'right', 9 | onClick: function() { 10 | window.open(githubURL) 11 | } 12 | }); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /_book/gitbook/gitbook-plugin-livereload/plugin.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var newEl = document.createElement('script'), 3 | firstScriptTag = document.getElementsByTagName('script')[0]; 4 | 5 | if (firstScriptTag) { 6 | newEl.async = 1; 7 | newEl.src = '//' + window.location.hostname + ':35729/livereload.js'; 8 | firstScriptTag.parentNode.insertBefore(newEl, firstScriptTag); 9 | } 10 | 11 | })(); 12 | -------------------------------------------------------------------------------- /_book/gitbook/gitbook-plugin-splitter/splitter.css: -------------------------------------------------------------------------------- 1 | .divider-content-summary { 2 | position: absolute; 3 | top: 0; 4 | right: 0; 5 | height: 100%; 6 | width: 5px; 7 | display: table; 8 | cursor: col-resize; 9 | color: #ccc; 10 | -webkit-transition: color 350ms ease; 11 | -moz-transition: color 350ms ease; 12 | -o-transition: color 350ms ease; 13 | transition: color 350ms ease 14 | } 15 | .divider-content-summary:hover { 16 | color: #444; 17 | } 18 | .divider-content-summary__icon { 19 | display: table-cell; 20 | vertical-align: middle; 21 | text-align: center; 22 | } 23 | -------------------------------------------------------------------------------- /_book/gitbook/images/apple-touch-icon-precomposed-152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/_book/gitbook/images/apple-touch-icon-precomposed-152.png -------------------------------------------------------------------------------- /_book/gitbook/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/_book/gitbook/images/favicon.ico -------------------------------------------------------------------------------- /draft: -------------------------------------------------------------------------------- 1 | # 名岂文章著,官应老病休 2 | 3 | 4 | 前面几章粗略的介绍了katom的提交和完成,那么katom都会有一个对应的context。一个context一般都是由一个进程打开,这个context就负责作为一个类似中间人的角色在进程和kdev之间提供一个抽象。对于Mali GPU的context,官方的解释是这个对象代表一个实体,在这个实体里,GPU被调度,并获得自己的内存空间。 5 | 6 | 除了有指向/dev/malixx的文件指针,和一个kdev,context拥有一个structure专门记录MMU table的详细信息。除此之外,context还有一系列和event相关的members。因为是和内存空间相关联,所以有很多和内存相关的lock,list head和红黑树,并且由于这个context一般是进程相关的,所以也会存储pid和tgid。这里需要着重强调mem_pool,在context有两个mem_pool,一个管着4k的内存们,另一个管着2MB的内存们,以及和内存相关的方方面面。另一方面,由于context又跟调度相关,所以会有一个叫jctx的东西,专门用来记录和JD相关的信息。同时,在context里,有很多member是跟just in time分配相关的东西。 7 | 8 | context的init没啥好说的,就是带着lock进行一堆atomic的init操作,然后每一步都需要进行checker,失败了就进入error handler。 9 | 10 | 这一大堆由每个进程创建的一个或多个context是一个叫做context scheduler来schedule的 11 | 12 | 13 | -------------------------------------------------------------------------------- /fan-wai/wei-shen-me-hui-you-fan-wai.md: -------------------------------------------------------------------------------- 1 | # 为什么会有番外 2 | 3 | 已经一个月没有更新这本书了,但不得不说这其中是有原因的,因为我懒呀!好吧,其实最近长期被干眼症困扰,已经到了一天吃四五粒蓝莓胶囊都没啥用的程度了,所以就不想一直看着屏幕了。如果各位大佬有什么治疗干眼症的秘方,恳请share一下。。。 4 | 5 | 不过也算是因祸得福吧,最近每次晚上回家就把原来写paper写代码的时间用来看书了。突然发现如果每天能拿出两三个小时看书,那么无论多厚的书都很快就读完了。当然,相比大家也都知道我看书就是囫囵吞枣,就图一乐,所以看的快了一点。 6 | 7 | 看了一些书,便想写一点点书评,当然我知道自己肯定坚持不下去,所以肯定会烂尾。。。当然书评也没必要写在自己的书里。其实我本来也是想写个博客的,看了我大学的一个大神同学的博客,那个难啊,像我这么懒的人,肯定是不会专门搭个博客的。另外也考虑过去豆瓣和知乎写书评,但我怕大家骂我啊。了解我的人都知道,我以前可是专门干流氓的,现在进入法制社会不让干了。但是大家一骂我,我再重操旧业,不是很好。 8 | 9 | 思来想去(其实这抬高自己了,我根本就没有想,因为皮),我就决定开个番外。我向大家保证,绝对没有收任何一本书的出版商的钱,因为他们不给我。。。 10 | 11 | -------------------------------------------------------------------------------- /mali-gpu-driver/zhang-xu.md: -------------------------------------------------------------------------------- 1 | # 章序 2 | 3 | 我之前是做deep learning framework的,同样的代码,在Mali GPU上比在Adreno GPU 上慢几十倍。鉴于两者的硬件差距应该没有这么大,我觉得可能是驱动的问题。作为和kernel直接打交道的东西,驱动我实在是搞不明白。但是现在弄不明白,不见得将来就能弄明白啊,lol。为了克服自己的皮,以及想当作一个笔记,我决定把它加入《年子》来记录我对GPU kernel的理解和认识。由于我在看driver代码的时候才发现自己不是很懂Linux那一套,此章可能会repeat Linux的一部分内容,希望大神们见谅。 4 | 5 | GPU driver需要处理很多东西,首先需要把GPU注册到系统里,其次还要能接受你提交的任务,内部应该还有一个scheduler去schedule所有的tasks。由于每一项都涉及很多步骤,我会用流程图给表示出来,并且还会加上必要的讲解,以防止我忘了是咋回事儿。 6 | 7 | 就是这样。。。 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /mali-gpu-driver/zhou-liu-bu-he-jiu-ren-sheng-lu-bai-zou.md: -------------------------------------------------------------------------------- 1 | # 周六不喝酒,人生路白走 2 | 3 | 周五没鸡煲,朋友算白交。周六不喝酒,人生路白走。这算是我从十几岁就遵从的人生哲学。在那个叛逆的年纪,唯有喝酒是我最符合的中国传统文化。能约三五好友一起畅饮尿啤,回忆往事固然开心;竹影灯下自斟自酌也不失为一种乐趣。唐代诗人李白曾言:举杯邀明月,对影成三人。但我搜了很多关于这首诗的绘画作品,大约都是下图这个样子。画这幅画的画家真的令人窒息啊,都举杯邀明月了,不给月亮准备杯子呗。 4 | 5 | ![图片cite自唐诗三百首](../.gitbook/assets/image.png) 6 | 7 | 而作为一个实在的青岛人,若举杯邀月,必备两个杯啊。这张照片是我刚才自己拍的,如果你要吐槽我的照相技术。。。我都用照相而不是摄影了,这要这是张照片而不是一个鼠标那就已经很成功了。哦,对了,今天的文章不会有干货了,今天是闲白专场。两个杯除了能增添情趣之外,还有一个附加的好处,就是可以喝的更快,当然这其中设计了pipeline的原理。 8 | 9 | ![](../.gitbook/assets/img_1787.jpg) 10 | 11 | 回想大学四年,因为好喝酒认识了不少朋友,也闹出了不少笑话。我们曾在我一个朋友的[出pool饭](https://medium.com/accent-magazine/%E5%87%BApool%E9%A5%AD-6d19c1c927cc)上喝到酒吧给送shot,醉到没人知道shot是棕色还是无色透明,当然最重要的是,那个出pool的伙计不喝酒。。。我还有个朋友,咱也别说是谁,善于喝碎香槟杯和红酒杯。 12 | 13 | 幸也。 14 | 15 | -------------------------------------------------------------------------------- /node_modules/boolbase/README.md: -------------------------------------------------------------------------------- 1 | #boolbase 2 | This very simple module provides two basic functions, one that always returns true (`trueFunc`) and one that always returns false (`falseFunc`). 3 | 4 | ###WTF? 5 | 6 | By having only a single instance of these functions around, it's possible to do some nice optimizations. Eg. [`CSSselect`](https://github.com/fb55/CSSselect) uses these functions to determine whether a selector won't match any elements. If that's the case, the DOM doesn't even have to be touched. 7 | 8 | ###And why is this a separate module? 9 | 10 | I'm trying to modularize `CSSselect` and most modules depend on these functions. IMHO, having a separate module is the easiest solution to this problem. -------------------------------------------------------------------------------- /node_modules/boolbase/index.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | trueFunc: function trueFunc(){ 3 | return true; 4 | }, 5 | falseFunc: function falseFunc(){ 6 | return false; 7 | } 8 | }; -------------------------------------------------------------------------------- /node_modules/cheerio/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Export cheerio (with ) 3 | */ 4 | 5 | exports = module.exports = require('./lib/cheerio'); 6 | 7 | /* 8 | Export the version 9 | */ 10 | 11 | exports.version = require('./package.json').version; 12 | -------------------------------------------------------------------------------- /node_modules/colors/lib/index.js: -------------------------------------------------------------------------------- 1 | var colors = require('./colors'); 2 | module['exports'] = colors; 3 | 4 | // Remark: By default, colors will add style properties to String.prototype. 5 | // 6 | // If you don't wish to extend String.prototype, you can do this instead and 7 | // native String will not be touched: 8 | // 9 | // var colors = require('colors/safe); 10 | // colors.red("foo") 11 | // 12 | // 13 | require('./extendStringPrototype')(); 14 | -------------------------------------------------------------------------------- /node_modules/colors/lib/maps/america.js: -------------------------------------------------------------------------------- 1 | module['exports'] = function(colors) { 2 | return function(letter, i, exploded) { 3 | if (letter === ' ') return letter; 4 | switch (i%3) { 5 | case 0: return colors.red(letter); 6 | case 1: return colors.white(letter); 7 | case 2: return colors.blue(letter); 8 | } 9 | }; 10 | }; 11 | -------------------------------------------------------------------------------- /node_modules/colors/lib/maps/rainbow.js: -------------------------------------------------------------------------------- 1 | module['exports'] = function(colors) { 2 | // RoY G BiV 3 | var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta']; 4 | return function(letter, i, exploded) { 5 | if (letter === ' ') { 6 | return letter; 7 | } else { 8 | return colors[rainbowColors[i++ % rainbowColors.length]](letter); 9 | } 10 | }; 11 | }; 12 | 13 | -------------------------------------------------------------------------------- /node_modules/colors/lib/maps/random.js: -------------------------------------------------------------------------------- 1 | module['exports'] = function(colors) { 2 | var available = ['underline', 'inverse', 'grey', 'yellow', 'red', 'green', 3 | 'blue', 'white', 'cyan', 'magenta']; 4 | return function(letter, i, exploded) { 5 | return letter === ' ' ? letter : 6 | colors[ 7 | available[Math.round(Math.random() * (available.length - 2))] 8 | ](letter); 9 | }; 10 | }; 11 | -------------------------------------------------------------------------------- /node_modules/colors/lib/maps/zebra.js: -------------------------------------------------------------------------------- 1 | module['exports'] = function(colors) { 2 | return function(letter, i, exploded) { 3 | return i % 2 === 0 ? letter : colors.inverse(letter); 4 | }; 5 | }; 6 | -------------------------------------------------------------------------------- /node_modules/colors/safe.js: -------------------------------------------------------------------------------- 1 | // 2 | // Remark: Requiring this file will use the "safe" colors API, 3 | // which will not touch String.prototype. 4 | // 5 | // var colors = require('colors/safe'); 6 | // colors.red("foo") 7 | // 8 | // 9 | var colors = require('./lib/colors'); 10 | module['exports'] = colors; 11 | -------------------------------------------------------------------------------- /node_modules/colors/themes/generic-logging.js: -------------------------------------------------------------------------------- 1 | module['exports'] = { 2 | silly: 'rainbow', 3 | input: 'grey', 4 | verbose: 'cyan', 5 | prompt: 'grey', 6 | info: 'green', 7 | data: 'grey', 8 | help: 'cyan', 9 | warn: 'yellow', 10 | debug: 'blue', 11 | error: 'red', 12 | }; 13 | -------------------------------------------------------------------------------- /node_modules/css-select/lib/procedure.json: -------------------------------------------------------------------------------- 1 | { 2 | "universal": 50, 3 | "tag": 30, 4 | "attribute": 1, 5 | "pseudo": 0, 6 | "descendant": -1, 7 | "child": -1, 8 | "parent": -1, 9 | "sibling": -1, 10 | "adjacent": -1 11 | } 12 | -------------------------------------------------------------------------------- /node_modules/dom-serializer/node_modules/domelementtype/index.js: -------------------------------------------------------------------------------- 1 | //Types of elements found in the DOM 2 | module.exports = { 3 | Text: "text", //Text 4 | Directive: "directive", // 5 | Comment: "comment", // 6 | Script: "script", //", 5 | "expected": [ 6 | { 7 | "type": "tag", 8 | "name": "head", 9 | "attribs": {}, 10 | "children": [ 11 | { 12 | "type": "script", 13 | "name": "script", 14 | "attribs": { 15 | "language": "Javascript" 16 | }, 17 | "children": [ 18 | { 19 | "data": "var foo = \"\"; alert(2 > foo); var baz = 10 << 2; var zip = 10 >> 1; var yap = \"<<>>>><<\";", 20 | "type": "text" 21 | } 22 | ] 23 | } 24 | ] 25 | } 26 | ] 27 | } -------------------------------------------------------------------------------- /node_modules/domhandler/test/cases/05-tags_in_comment.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Special char in comment", 3 | "options": {}, 4 | "html": "", 5 | "expected": [ 6 | { 7 | "type": "tag", 8 | "name": "head", 9 | "attribs": {}, 10 | "children": [ 11 | { 12 | "data": " commented out tags Test", 13 | "type": "comment" 14 | } 15 | ] 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /node_modules/domhandler/test/cases/06-comment_in_script.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Script source in comment", 3 | "options": {}, 4 | "html": "", 5 | "expected": [ 6 | { 7 | "type": "script", 8 | "name": "script", 9 | "attribs": {}, 10 | "children": [ 11 | { 12 | "data": "", 13 | "type": "text" 14 | } 15 | ] 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /node_modules/domhandler/test/cases/07-unescaped_in_style.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Unescaped chars in style", 3 | "options": {}, 4 | "html": "", 5 | "expected": [ 6 | { 7 | "type": "style", 8 | "name": "style", 9 | "attribs": { 10 | "type": "text/css" 11 | }, 12 | "children": [ 13 | { 14 | "data": "\n body > p\n\t{ font-weight: bold; }", 15 | "type": "text" 16 | } 17 | ] 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /node_modules/domhandler/test/cases/08-extra_spaces_in_tag.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Extra spaces in tag", 3 | "options": {}, 4 | "html": "the text", 5 | "expected": [ 6 | { 7 | "type": "tag", 8 | "name": "font", 9 | "attribs": { 10 | "size": "14" 11 | }, 12 | "children": [ 13 | { 14 | "data": "the text", 15 | "type": "text" 16 | } 17 | ] 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /node_modules/domhandler/test/cases/09-unquoted_attrib.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Unquoted attributes", 3 | "options": {}, 4 | "html": "the text", 5 | "expected": [ 6 | { 7 | "type": "tag", 8 | "name": "font", 9 | "attribs": { 10 | "size": "14" 11 | }, 12 | "children": [ 13 | { 14 | "data": "the text", 15 | "type": "text" 16 | } 17 | ] 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /node_modules/domhandler/test/cases/10-singular_attribute.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Singular attribute", 3 | "options": {}, 4 | "html": "