From 8b8f08e0a1bd32c2ec06ee7502314c38bb552df0 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Mon, 2 Apr 2018 19:47:55 +0200 Subject: [PATCH 01/23] Use node-sass instead of gem sass --- DEVELOP.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/DEVELOP.md b/DEVELOP.md index 2aca21e..d90b6d3 100644 --- a/DEVELOP.md +++ b/DEVELOP.md @@ -13,7 +13,6 @@ do not have `make` available, then use: ``` npm install - gem install --user-install -b gems -n gems/.bin --no-ri --no-rdoc sass ``` ## Generating the frontend @@ -22,7 +21,7 @@ have been modified. To generate the frontend, use `make generate` to run `setup. the correct paths to the installed dependencies. Again, if you do not have `make` available, use: ``` - python setup.py generate --coffee=node_modules/.bin/coffee --inline=scripts/inline --sass=gems/.bin/sass + python setup.py generate --coffee=node_modules/.bin/coffee --inline=scripts/inline --sass=node_modules/.bin/node-sass ``` ## Developing without installing @@ -38,4 +37,4 @@ called `dev` is provided to run coffee and sass, without running `inline`. # Run local cldoc scripts/cldoc-dev [command] [OPTIONS] [FILES...] -``` \ No newline at end of file +``` From 8ec38e6af1935fb0cb5f3aad433b4be4aa472261 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Mon, 2 Apr 2018 19:48:12 +0200 Subject: [PATCH 02/23] Clarify releasing cldic-static --- RELEASE.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/RELEASE.md b/RELEASE.md index 736c896..6408e53 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -18,10 +18,11 @@ python setup.py sdist upload ## Release static site generator to npm ```bash +cd cldoc-static npm publish ``` ## Push to remote ```bash git push --tags master:master -``` \ No newline at end of file +``` From 090d8c45db78cba2e7dbc8a72eb8230088b3462f Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Mon, 2 Apr 2018 19:53:18 +0200 Subject: [PATCH 03/23] Add node-sass dependency --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 68f4806..bad11ad 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "repository": "https://github.com/jessevdk/cldoc", "dependencies": { "coffee-script": "^1.9.2", - "inline-source": "^4.0.1" + "inline-source": "^4.0.1", + "node-sass": "^4.8.3" } } From a3948d685bd1fe59f22a3edd2d3c3181a2fcc32b Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Mon, 2 Apr 2018 22:26:31 +0200 Subject: [PATCH 04/23] Switch to node-sass in Makefile and setup.py --- Makefile | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 7b7741b..7c558e4 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ PYTHON = python SETUP = $(PYTHON) setup.py COFFEE = node_modules/.bin/coffee INLINE_SOURCE = node_modules/inline-source -SASS = gems/.bin/sass +SASS = node_modules/.bin/node-sass UNAME = $(shell uname) ifeq ($(UNAME),Darwin) diff --git a/setup.py b/setup.py index 664fd39..05924c9 100644 --- a/setup.py +++ b/setup.py @@ -101,7 +101,7 @@ def run_sass(self): except: pass - args = [self.sass, '--scss', '--line-numbers', '--no-cache', '--style', 'compressed'] + args = [self.sass, '--output-style', 'compressed'] files = ['html/sass/cldoc.scss', 'html/styles/cldoc.css'] subprocess.call(args + files) From 1af73f6870097777203380b4a906802286c49ee0 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Mon, 2 Apr 2018 22:26:40 +0200 Subject: [PATCH 05/23] Updated node-sass output --- cldoc/data/styles/cldoc.css | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cldoc/data/styles/cldoc.css b/cldoc/data/styles/cldoc.css index 2bf7503..b2a11f1 100644 --- a/cldoc/data/styles/cldoc.css +++ b/cldoc/data/styles/cldoc.css @@ -1,2 +1 @@ -.hljs-keyword{color:#CB4B16}.hljs-comment{color:#93A1A1}.hljs-string{color:#DC322F}.hljs-number{color:#859900}.hljs-preprocessor{color:#6C71C4}.hljs-stl_container{color:#268BD2}#cldoc::-webkit-scrollbar,#cldoc #cldoc_sidebar_items::-webkit-scrollbar{width:6px;height:6px}#cldoc::-webkit-scrollbar-track,#cldoc #cldoc_sidebar_items::-webkit-scrollbar-track{background-color:#d4d4d4;margin:2px;border-radius:5px}#cldoc::-webkit-scrollbar-thumb,#cldoc #cldoc_sidebar_items::-webkit-scrollbar-thumb{background-color:#a2a2a2;margin:2px;border-radius:5px}#cldoc.hide_scrollbar,#cldoc #cldoc_sidebar_items.hide_scrollbar{overflow-y:hidden}#cldoc.hide_scrollbar::-webkit-scrollbar-track,#cldoc.hide_scrollbar::-webkit-scrollbar-thumb,#cldoc #cldoc_sidebar_items.hide_scrollbar::-webkit-scrollbar-track,#cldoc #cldoc_sidebar_items.hide_scrollbar::-webkit-scrollbar-thumb{background-color:#eee}#cldoc{font-family:"ubuntu","lucida grande"}#cldoc .selected{background-color:#ffffab}#cldoc .builtin{color:#B58900}#cldoc .keyword{color:#CB4B16;font-weight:bold}#cldoc .preprocessor{color:#6C71C4}#cldoc .comment{color:#93A1A1}#cldoc .identifier{color:#268BD2}#cldoc h1,#cldoc h2,#cldoc h3,#cldoc h4,#cldoc h5,#cldoc h6{color:#333;padding-bottom:3px}#cldoc h1,#cldoc h2{border-bottom:1px solid #b3b3b3}#cldoc h3,#cldoc h4,#cldoc h5,#cldoc h6{margin-bottom:0px}#cldoc h1{border:0;margin-top:0px;text-shadow:1px 1px #ccc}#cldoc h1 span.keyword{padding-right:20px}#cldoc h2{margin-top:60px}#cldoc a{cursor:hand;text-decoration:underline;color:#0876c8}#cldoc div.brief p:first-child,#cldoc div.doc p:first-child{padding-top:0px;margin-top:0px}#cldoc div.brief p:last-child,#cldoc div.doc p:last-child{padding-bottom:0px;margin-bottom:0px}#cldoc #cldoc_sidebar_bg{overflow:none;width:260px;background-color:#eee;position:fixed;top:0;bottom:0;left:0}#cldoc #cldoc_sidebar{width:260px;background-color:#eee;border-right:1px solid #d4d4d4;position:fixed;top:0;left:0;bottom:0}#cldoc #cldoc_sidebar.search #cldoc_sidebar_items{display:none}#cldoc #cldoc_sidebar_items{position:fixed;top:0;left:0;bottom:2.5em;width:250px;padding:5px;overflow:auto;overflow-y:scroll}#cldoc #cldoc_sidebar_items div.back .arrow{padding-right:5px}#cldoc #cldoc_sidebar_items div.back div.name{padding-bottom:5px}#cldoc #cldoc_sidebar_items div.back div.name span.keyword{padding-right:5px;font-weight:normal}#cldoc #cldoc_sidebar_items div.back a{display:block;margin-left:10px}#cldoc #cldoc_sidebar_items .subtitle{font-size:1.1em;text-align:center;margin-top:15px;text-shadow:1px 1px #eee;color:#333}#cldoc #cldoc_sidebar_items #cldoc_sidebar_pagenav{margin-top:15px}#cldoc #cldoc_sidebar_items #cldoc_sidebar_pagenav:empty{margin-top:0px}#cldoc #cldoc_sidebar_items ol,#cldoc #cldoc_sidebar_items ul{margin:0;padding:0;padding-left:10px;font-size:0.9em;margin-top:5px}#cldoc #cldoc_sidebar_items ul{list-style:none}#cldoc #cldoc_sidebar_items *{text-overflow:ellipsis}#cldoc #cldoc_sidebar_items li{padding-bottom:2px;padding-top:2px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}#cldoc #cldoc_sidebar_items span.counter{padding:2px 4px 2px 4px;margin-left:5px;font-size:0.6em;vertical-align:super;background-color:#4298d8;color:#fff;display:none;border-radius:10px;min-width:10px;text-align:center}#cldoc #cldoc_sidebar_items span.virtual,#cldoc #cldoc_sidebar_items span.protected,#cldoc #cldoc_sidebar_items span.static{font-size:0.6em;min-width:1.6em;display:inline-block;vertical-align:super;text-align:center;background-color:#CB4B16;color:#fff;margin-left:5px;padding-bottom:2px}#cldoc #cldoc_sidebar_items .brief{text-shadow:none;font-size:0.9em;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding:2px;margin:0px;margin-bottom:3px;color:#999}#cldoc #cldoc_sidebar_items span.bullet{font-weight:bold;padding-right:5px}#cldoc #cldoc_sidebar_items span.bullet.complete{color:#859900}#cldoc #cldoc_sidebar_items span.bullet.incomplete{color:#DC322F}#cldoc #cldoc_sidebar_items a{text-decoration:none}#cldoc #cldoc_search{position:fixed;bottom:0.5em;width:233px;left:8px;height:1.2em;padding:2px 5px 2px 5px;border:1px solid #aaa;background-color:#fafafa}#cldoc #cldoc_search.focus{border:1px solid #268BD2}#cldoc #cldoc_search input{padding:0;margin:0;top:3px;right:18px;left:20px;position:absolute;border:0;background-color:transparent}#cldoc #cldoc_search input:focus{outline-style:none}#cldoc #cldoc_search div.icon,#cldoc #cldoc_search div.close{width:16px;height:16px;position:absolute;top:3px;z-index:2;cursor:pointer}#cldoc #cldoc_search div.icon.focus,#cldoc #cldoc_search div.close.focus{background-position:100% 0%}#cldoc #cldoc_search div.icon{left:2px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAfdEVYdFRpdGxlAEdub21lIFN5bWJvbGljIEljb24gVGhlbWWOpCmrAAACQ0lEQVRIicWVsWrbUBSGvyPJEl4CGQrJAxSbpo7pkikdSjZnviH4MZoW2sEQ8NBAUzL2DTLkzvYWOiSZGiitS7HoAzRQQocOxrJ9bwdJjmLJdTKUns2//u/+554jZLHW8j/Ly/44Pj5e9n2/Za19ClSAUETOoihqN5vNX4sOWz/oLQ9dWghTHstZMKH95VWtkJd0AlrrTeAEWC3w/QB2lFLn88Ir7z5vYp35vJidcK+e4x2Ib54J7xpjNoIgWDLGbADdRD9JfIU3z4R3EWdDjL+EODe8dU7WD3o53gNIxr4KdJVS25nnH4FtrXUHaPi+3wKezx4ydGml4eGLWo6vHPY6QCPx3eIdgGTnGGP2i26Y6qkvV/HOQZxCfqqnvtkGiF8YyuVyv4jP6JXCgESXiVfIZ/QcnzYQAgwGg2rRARk9nNNACGDdcSGf0XO8AyAiZwCOUzzCVE99+QRi3RavcKqnvkx5AFEUtUul0i7Q0Fp3jDH75XK5PxgMqkl4I7ZF74vODya0hx67QKNy2Osgzr5MvL51x9UkvIElcpnk+Dt9B0RkaK0NgB6wpZT6OetZ8B0YAgGWnhmPt76/fjLl03cApdT5aDRaE5Ej4BL4DVyKyJG1tg70gRpwqrV+MJsQ7tXPgzFrWG7xWI7EJLxQczzv9OGbT1Ne7vpfoLVeAT4A1b9NYl49fvttZSSTmM9MwllIJqWUugKecTMJfVcW4OvLR1cl68a8UHNLnobMCu7ZxAVwfR/2dhP2wmKv4R4r+Ff1B4jqDQnTeInlAAAAAElFTkSuQmCC")}#cldoc #cldoc_search div.close{right:2px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAfdEVYdFRpdGxlAEdub21lIFN5bWJvbGljIEljb24gVGhlbWWOpCmrAAABmUlEQVRIie2UPWobQRSAvzczqwO4sQtXISZBSMTpXLjQ4gvEhgEdJIbkBAEnEHIKFYuVHMBiGxcqDCGJcBLcyJ3AB7DR7uxLMza2d2Oliho/GBjezDfvG+ZHVJVlhllq9UcBwN1PZFmmwDGw572/iLkV4BDoee/loQWfffihIMdVUeydvX15AdD5eLoyD+FQoPf7dfcOXxMAToBtYJRl2U5ZluqcOwJeAN/+YVMnoNvGudHGu687plUp2jqSv/A1AWvtbgghB7rAyDlH7E9DCK8WVa8q3TVGcoSucW5EBQhdhKkp6rw0PcPhcLgeJZ7G1HkIodfv96eLBAA2Dr6vGyO3eD03ZdX7+WazxjdeQhGZA1e3UpfW2qumuU2hhrne4eXS2lYjXxMYDAarZVnmQAf4FdtzIM+ybG1R8SefJqsWyeUeX0jIO+9Pa3xNwDn3BWhHMI3tWuLzIoFkrjd8ojZN1N7wBaHGNx3BFjAGUu/9zHs/ixLjOPZwCFso40RtOtlvzyb77VmiNkUZI3W+8RL+z1j6T/go8Adu/5qNAFTJVAAAAABJRU5ErkJggg==")}#cldoc #cldoc_content{margin-left:280px;padding:10px;padding-left:20px}#cldoc #cldoc_content div.fulldoc div.brief{margin:0px;margin-bottom:10px;padding:0px}#cldoc #cldoc_content div.fulldoc div.doc{margin:0px;padding:0px}#cldoc #cldoc_content div.doc table td,#cldoc #cldoc_content div.doc table th{padding:0px 5px 0px 5px}#cldoc #cldoc_content div.brief,#cldoc #cldoc_content div.doc,#cldoc #cldoc_content div.fulldoc{margin-left:10px;color:#666;padding:5px;margin-top:2px;margin-bottom:15px;font-size:0.9em;background-color:#eee}#cldoc #cldoc_content span.type .keyword{font-weight:normal}#cldoc #cldoc_content span.constant{color:#a0a}#cldoc #cldoc_content div.structures div.item,#cldoc #cldoc_content div.classes div.item{margin-bottom:30px}#cldoc #cldoc_content table.typedefs{border-collapse:collapse}#cldoc #cldoc_content table.typedefs td{padding-right:30px;padding-bottom:5px;padding-top:5px;vertical-align:top}#cldoc #cldoc_content table.typedefs td:last-child{padding-right:0px}#cldoc #cldoc_content table.typedefs td:empty{padding-right:0px}#cldoc #cldoc_content table.typedefs tr:last-child td{padding-bottom:0px}#cldoc #cldoc_content table.search_results{border-collapse:collapse}#cldoc #cldoc_content table.search_results td{padding-right:30px;padding-bottom:5px;padding-top:5px;vertical-align:top}#cldoc #cldoc_content table.search_results td:last-child{padding-right:0px}#cldoc #cldoc_content table.search_results td:empty{padding-right:0px}#cldoc #cldoc_content table.search_results tr:last-child td{padding-bottom:0px}#cldoc #cldoc_content table.search_results span.search_result{background-color:#ffffab}#cldoc #cldoc_content div.enumerations table{border-collapse:collapse;margin-left:30px;margin-bottom:40px}#cldoc #cldoc_content div.enumerations table td{padding-right:30px;padding-bottom:5px;padding-top:5px;vertical-align:top}#cldoc #cldoc_content div.enumerations table td:last-child{padding-right:0px}#cldoc #cldoc_content div.enumerations table td:empty{padding-right:0px}#cldoc #cldoc_content div.enumerations table tr:last-child td{padding-bottom:0px}#cldoc #cldoc_content div.enumerations table td.identifier{font-weight:normal}#cldoc #cldoc_content div.enumerations table tr:last-child td{padding-bottom:5px}#cldoc #cldoc_content div.enumerations table div.brief,#cldoc #cldoc_content div.enumerations table div.doc,#cldoc #cldoc_content div.enumerations table div.fulldoc{background:transparent;margin:0px;padding:0px}#cldoc #cldoc_content div.enumerations table tr:nth-child(even){background-color:#f9f9f9}#cldoc #cldoc_content div.enumerations table tr.selected{background-color:#ffffab}#cldoc #cldoc_content ul.gobject_property_mode{list-style-type:none;margin:0;padding:0}#cldoc #cldoc_content ul.gobject_property_mode li{float:left}#cldoc #cldoc_content ul.gobject_property_mode li:after{content:", "}#cldoc #cldoc_content ul.gobject_property_mode li:last-child:after{content:""}#cldoc #cldoc_content table.category,#cldoc #cldoc_content table.namespace,#cldoc #cldoc_content table.fields,#cldoc #cldoc_content table.variables,#cldoc #cldoc_content table.arguments,#cldoc #cldoc_content table.bases,#cldoc #cldoc_content table.implements,#cldoc #cldoc_content table.subclasses,#cldoc #cldoc_content table.implemented_by,#cldoc #cldoc_content table.template_parameters,#cldoc #cldoc_content table.function-template-parameters,#cldoc #cldoc_content table.structures,#cldoc #cldoc_content table.gobject_classes,#cldoc #cldoc_content table.classes,#cldoc #cldoc_content table.gobject_boxed_structures,#cldoc #cldoc_content table.gobject_properties,#cldoc #cldoc_content table.gobject_interfaces{border-collapse:collapse;margin-left:30px;margin-bottom:40px}#cldoc #cldoc_content table.category td,#cldoc #cldoc_content table.namespace td,#cldoc #cldoc_content table.fields td,#cldoc #cldoc_content table.variables td,#cldoc #cldoc_content table.arguments td,#cldoc #cldoc_content table.bases td,#cldoc #cldoc_content table.implements td,#cldoc #cldoc_content table.subclasses td,#cldoc #cldoc_content table.implemented_by td,#cldoc #cldoc_content table.template_parameters td,#cldoc #cldoc_content table.function-template-parameters td,#cldoc #cldoc_content table.structures td,#cldoc #cldoc_content table.gobject_classes td,#cldoc #cldoc_content table.classes td,#cldoc #cldoc_content table.gobject_boxed_structures td,#cldoc #cldoc_content table.gobject_properties td,#cldoc #cldoc_content table.gobject_interfaces td{padding-right:30px;padding-bottom:5px;padding-top:5px;vertical-align:top}#cldoc #cldoc_content table.category td:last-child,#cldoc #cldoc_content table.namespace td:last-child,#cldoc #cldoc_content table.fields td:last-child,#cldoc #cldoc_content table.variables td:last-child,#cldoc #cldoc_content table.arguments td:last-child,#cldoc #cldoc_content table.bases td:last-child,#cldoc #cldoc_content table.implements td:last-child,#cldoc #cldoc_content table.subclasses td:last-child,#cldoc #cldoc_content table.implemented_by td:last-child,#cldoc #cldoc_content table.template_parameters td:last-child,#cldoc #cldoc_content table.function-template-parameters td:last-child,#cldoc #cldoc_content table.structures td:last-child,#cldoc #cldoc_content table.gobject_classes td:last-child,#cldoc #cldoc_content table.classes td:last-child,#cldoc #cldoc_content table.gobject_boxed_structures td:last-child,#cldoc #cldoc_content table.gobject_properties td:last-child,#cldoc #cldoc_content table.gobject_interfaces td:last-child{padding-right:0px}#cldoc #cldoc_content table.category td:empty,#cldoc #cldoc_content table.namespace td:empty,#cldoc #cldoc_content table.fields td:empty,#cldoc #cldoc_content table.variables td:empty,#cldoc #cldoc_content table.arguments td:empty,#cldoc #cldoc_content table.bases td:empty,#cldoc #cldoc_content table.implements td:empty,#cldoc #cldoc_content table.subclasses td:empty,#cldoc #cldoc_content table.implemented_by td:empty,#cldoc #cldoc_content table.template_parameters td:empty,#cldoc #cldoc_content table.function-template-parameters td:empty,#cldoc #cldoc_content table.structures td:empty,#cldoc #cldoc_content table.gobject_classes td:empty,#cldoc #cldoc_content table.classes td:empty,#cldoc #cldoc_content table.gobject_boxed_structures td:empty,#cldoc #cldoc_content table.gobject_properties td:empty,#cldoc #cldoc_content table.gobject_interfaces td:empty{padding-right:0px}#cldoc #cldoc_content table.category tr:last-child td,#cldoc #cldoc_content table.namespace tr:last-child td,#cldoc #cldoc_content table.fields tr:last-child td,#cldoc #cldoc_content table.variables tr:last-child td,#cldoc #cldoc_content table.arguments tr:last-child td,#cldoc #cldoc_content table.bases tr:last-child td,#cldoc #cldoc_content table.implements tr:last-child td,#cldoc #cldoc_content table.subclasses tr:last-child td,#cldoc #cldoc_content table.implemented_by tr:last-child td,#cldoc #cldoc_content table.template_parameters tr:last-child td,#cldoc #cldoc_content table.function-template-parameters tr:last-child td,#cldoc #cldoc_content table.structures tr:last-child td,#cldoc #cldoc_content table.gobject_classes tr:last-child td,#cldoc #cldoc_content table.classes tr:last-child td,#cldoc #cldoc_content table.gobject_boxed_structures tr:last-child td,#cldoc #cldoc_content table.gobject_properties tr:last-child td,#cldoc #cldoc_content table.gobject_interfaces tr:last-child td{padding-bottom:0px}#cldoc #cldoc_content table.category td.identifier,#cldoc #cldoc_content table.namespace td.identifier,#cldoc #cldoc_content table.fields td.identifier,#cldoc #cldoc_content table.variables td.identifier,#cldoc #cldoc_content table.arguments td.identifier,#cldoc #cldoc_content table.bases td.identifier,#cldoc #cldoc_content table.implements td.identifier,#cldoc #cldoc_content table.subclasses td.identifier,#cldoc #cldoc_content table.implemented_by td.identifier,#cldoc #cldoc_content table.template_parameters td.identifier,#cldoc #cldoc_content table.function-template-parameters td.identifier,#cldoc #cldoc_content table.structures td.identifier,#cldoc #cldoc_content table.gobject_classes td.identifier,#cldoc #cldoc_content table.classes td.identifier,#cldoc #cldoc_content table.gobject_boxed_structures td.identifier,#cldoc #cldoc_content table.gobject_properties td.identifier,#cldoc #cldoc_content table.gobject_interfaces td.identifier{font-weight:normal}#cldoc #cldoc_content table.category tr:last-child td,#cldoc #cldoc_content table.namespace tr:last-child td,#cldoc #cldoc_content table.fields tr:last-child td,#cldoc #cldoc_content table.variables tr:last-child td,#cldoc #cldoc_content table.arguments tr:last-child td,#cldoc #cldoc_content table.bases tr:last-child td,#cldoc #cldoc_content table.implements tr:last-child td,#cldoc #cldoc_content table.subclasses tr:last-child td,#cldoc #cldoc_content table.implemented_by tr:last-child td,#cldoc #cldoc_content table.template_parameters tr:last-child td,#cldoc #cldoc_content table.function-template-parameters tr:last-child td,#cldoc #cldoc_content table.structures tr:last-child td,#cldoc #cldoc_content table.gobject_classes tr:last-child td,#cldoc #cldoc_content table.classes tr:last-child td,#cldoc #cldoc_content table.gobject_boxed_structures tr:last-child td,#cldoc #cldoc_content table.gobject_properties tr:last-child td,#cldoc #cldoc_content table.gobject_interfaces tr:last-child td{padding-bottom:5px}#cldoc #cldoc_content table.category div.brief,#cldoc #cldoc_content table.category div.doc,#cldoc #cldoc_content table.category div.fulldoc,#cldoc #cldoc_content table.namespace div.brief,#cldoc #cldoc_content table.namespace div.doc,#cldoc #cldoc_content table.namespace div.fulldoc,#cldoc #cldoc_content table.fields div.brief,#cldoc #cldoc_content table.fields div.doc,#cldoc #cldoc_content table.fields div.fulldoc,#cldoc #cldoc_content table.variables div.brief,#cldoc #cldoc_content table.variables div.doc,#cldoc #cldoc_content table.variables div.fulldoc,#cldoc #cldoc_content table.arguments div.brief,#cldoc #cldoc_content table.arguments div.doc,#cldoc #cldoc_content table.arguments div.fulldoc,#cldoc #cldoc_content table.bases div.brief,#cldoc #cldoc_content table.bases div.doc,#cldoc #cldoc_content table.bases div.fulldoc,#cldoc #cldoc_content table.implements div.brief,#cldoc #cldoc_content table.implements div.doc,#cldoc #cldoc_content table.implements div.fulldoc,#cldoc #cldoc_content table.subclasses div.brief,#cldoc #cldoc_content table.subclasses div.doc,#cldoc #cldoc_content table.subclasses div.fulldoc,#cldoc #cldoc_content table.implemented_by div.brief,#cldoc #cldoc_content table.implemented_by div.doc,#cldoc #cldoc_content table.implemented_by div.fulldoc,#cldoc #cldoc_content table.template_parameters div.brief,#cldoc #cldoc_content table.template_parameters div.doc,#cldoc #cldoc_content table.template_parameters div.fulldoc,#cldoc #cldoc_content table.function-template-parameters div.brief,#cldoc #cldoc_content table.function-template-parameters div.doc,#cldoc #cldoc_content table.function-template-parameters div.fulldoc,#cldoc #cldoc_content table.structures div.brief,#cldoc #cldoc_content table.structures div.doc,#cldoc #cldoc_content table.structures div.fulldoc,#cldoc #cldoc_content table.gobject_classes div.brief,#cldoc #cldoc_content table.gobject_classes div.doc,#cldoc #cldoc_content table.gobject_classes div.fulldoc,#cldoc #cldoc_content table.classes div.brief,#cldoc #cldoc_content table.classes div.doc,#cldoc #cldoc_content table.classes div.fulldoc,#cldoc #cldoc_content table.gobject_boxed_structures div.brief,#cldoc #cldoc_content table.gobject_boxed_structures div.doc,#cldoc #cldoc_content table.gobject_boxed_structures div.fulldoc,#cldoc #cldoc_content table.gobject_properties div.brief,#cldoc #cldoc_content table.gobject_properties div.doc,#cldoc #cldoc_content table.gobject_properties div.fulldoc,#cldoc #cldoc_content table.gobject_interfaces div.brief,#cldoc #cldoc_content table.gobject_interfaces div.doc,#cldoc #cldoc_content table.gobject_interfaces div.fulldoc{background:transparent;margin:0px;padding:0px}#cldoc #cldoc_content table.category tr:nth-child(even),#cldoc #cldoc_content table.namespace tr:nth-child(even),#cldoc #cldoc_content table.fields tr:nth-child(even),#cldoc #cldoc_content table.variables tr:nth-child(even),#cldoc #cldoc_content table.arguments tr:nth-child(even),#cldoc #cldoc_content table.bases tr:nth-child(even),#cldoc #cldoc_content table.implements tr:nth-child(even),#cldoc #cldoc_content table.subclasses tr:nth-child(even),#cldoc #cldoc_content table.implemented_by tr:nth-child(even),#cldoc #cldoc_content table.template_parameters tr:nth-child(even),#cldoc #cldoc_content table.function-template-parameters tr:nth-child(even),#cldoc #cldoc_content table.structures tr:nth-child(even),#cldoc #cldoc_content table.gobject_classes tr:nth-child(even),#cldoc #cldoc_content table.classes tr:nth-child(even),#cldoc #cldoc_content table.gobject_boxed_structures tr:nth-child(even),#cldoc #cldoc_content table.gobject_properties tr:nth-child(even),#cldoc #cldoc_content table.gobject_interfaces tr:nth-child(even){background-color:#f9f9f9}#cldoc #cldoc_content table.category tr.selected,#cldoc #cldoc_content table.namespace tr.selected,#cldoc #cldoc_content table.fields tr.selected,#cldoc #cldoc_content table.variables tr.selected,#cldoc #cldoc_content table.arguments tr.selected,#cldoc #cldoc_content table.bases tr.selected,#cldoc #cldoc_content table.implements tr.selected,#cldoc #cldoc_content table.subclasses tr.selected,#cldoc #cldoc_content table.implemented_by tr.selected,#cldoc #cldoc_content table.template_parameters tr.selected,#cldoc #cldoc_content table.function-template-parameters tr.selected,#cldoc #cldoc_content table.structures tr.selected,#cldoc #cldoc_content table.gobject_classes tr.selected,#cldoc #cldoc_content table.classes tr.selected,#cldoc #cldoc_content table.gobject_boxed_structures tr.selected,#cldoc #cldoc_content table.gobject_properties tr.selected,#cldoc #cldoc_content table.gobject_interfaces tr.selected{background-color:#ffffab}#cldoc #cldoc_content table.category .keyword,#cldoc #cldoc_content table.namespace .keyword,#cldoc #cldoc_content table.fields .keyword,#cldoc #cldoc_content table.variables .keyword,#cldoc #cldoc_content table.arguments .keyword,#cldoc #cldoc_content table.bases .keyword,#cldoc #cldoc_content table.implements .keyword,#cldoc #cldoc_content table.subclasses .keyword,#cldoc #cldoc_content table.implemented_by .keyword,#cldoc #cldoc_content table.template_parameters .keyword,#cldoc #cldoc_content table.function-template-parameters .keyword,#cldoc #cldoc_content table.structures .keyword,#cldoc #cldoc_content table.gobject_classes .keyword,#cldoc #cldoc_content table.classes .keyword,#cldoc #cldoc_content table.gobject_boxed_structures .keyword,#cldoc #cldoc_content table.gobject_properties .keyword,#cldoc #cldoc_content table.gobject_interfaces .keyword{font-weight:normal}#cldoc #cldoc_content table.category tr.union td,#cldoc #cldoc_content table.namespace tr.union td,#cldoc #cldoc_content table.fields tr.union td,#cldoc #cldoc_content table.variables tr.union td,#cldoc #cldoc_content table.arguments tr.union td,#cldoc #cldoc_content table.bases tr.union td,#cldoc #cldoc_content table.implements tr.union td,#cldoc #cldoc_content table.subclasses tr.union td,#cldoc #cldoc_content table.implemented_by tr.union td,#cldoc #cldoc_content table.template_parameters tr.union td,#cldoc #cldoc_content table.function-template-parameters tr.union td,#cldoc #cldoc_content table.structures tr.union td,#cldoc #cldoc_content table.gobject_classes tr.union td,#cldoc #cldoc_content table.classes tr.union td,#cldoc #cldoc_content table.gobject_boxed_structures tr.union td,#cldoc #cldoc_content table.gobject_properties tr.union td,#cldoc #cldoc_content table.gobject_interfaces tr.union td{padding-top:15px}#cldoc #cldoc_content table.category tr.full>td,#cldoc #cldoc_content table.namespace tr.full>td,#cldoc #cldoc_content table.fields tr.full>td,#cldoc #cldoc_content table.variables tr.full>td,#cldoc #cldoc_content table.arguments tr.full>td,#cldoc #cldoc_content table.bases tr.full>td,#cldoc #cldoc_content table.implements tr.full>td,#cldoc #cldoc_content table.subclasses tr.full>td,#cldoc #cldoc_content table.implemented_by tr.full>td,#cldoc #cldoc_content table.template_parameters tr.full>td,#cldoc #cldoc_content table.function-template-parameters tr.full>td,#cldoc #cldoc_content table.structures tr.full>td,#cldoc #cldoc_content table.gobject_classes tr.full>td,#cldoc #cldoc_content table.classes tr.full>td,#cldoc #cldoc_content table.gobject_boxed_structures tr.full>td,#cldoc #cldoc_content table.gobject_properties tr.full>td,#cldoc #cldoc_content table.gobject_interfaces tr.full>td{padding-top:15px}#cldoc #cldoc_content table.union td{padding-top:0px;padding-bottom:0px;font-size:0.9em}#cldoc #cldoc_content table.category,#cldoc #cldoc_content table.namespace{margin-bottom:10px}#cldoc #cldoc_content div.structures table,#cldoc #cldoc_content div.classes table{border-left:1px solid #999}#cldoc #cldoc_content div.structures table td,#cldoc #cldoc_content div.classes table td{padding-left:10px}#cldoc #cldoc_content div.enumerations table td.value{text-align:right}#cldoc #cldoc_content div.function{margin-bottom:50px}#cldoc #cldoc_content div.function div.declaration{background-color:#f7fafc;border:1px solid #bed3e9;padding:5px}#cldoc #cldoc_content div.function div.declaration.selected{background-color:#ffffab;border:1px solid #dede00}#cldoc #cldoc_content div.function table.declaration{border-collapse:collapse}#cldoc #cldoc_content div.function table.declaration td{padding-right:30px;padding-bottom:5px;padding-top:5px;vertical-align:top}#cldoc #cldoc_content div.function table.declaration td:last-child{padding-right:0px}#cldoc #cldoc_content div.function table.declaration td:empty{padding-right:0px}#cldoc #cldoc_content div.function table.declaration tr:last-child td{padding-bottom:0px}#cldoc #cldoc_content div.function table.declaration td{padding:0px;padding-right:5px}#cldoc #cldoc_content div.function table.declaration td.identifier{padding-right:30px}#cldoc #cldoc_content div.function table.declaration td.close_paren{padding:0px}#cldoc #cldoc_content div.function table.declaration td.open_paren{padding-right:1px}#cldoc #cldoc_content div.function table.declaration td.argument_name{text-align:left;padding-right:1px}#cldoc #cldoc_content div.function table.declaration td.argument_type{padding-right:2px}#cldoc #cldoc_content div.function table.declaration td.argument_type span.type{display:block}#cldoc #cldoc_content div.function table.declaration td.argument_type span.type span.name{float:left;margin-right:10px}#cldoc #cldoc_content div.function table.declaration td.argument_type span.type span.function-arguments>span.sub-type>span.name:last-child{margin-right:0}#cldoc #cldoc_content div.function table.declaration td.argument_type span.type span.plain,#cldoc #cldoc_content div.function table.declaration td.argument_type span.type span.function-qualified,#cldoc #cldoc_content div.function table.declaration td.argument_type span.type span.sub-type{float:left}#cldoc #cldoc_content div.function table.declaration td.argument_type span.type span.qualifier{float:right}#cldoc #cldoc_content div.function table.declaration td.argument_type span.type span.function-qualified span.qualifier,#cldoc #cldoc_content div.function table.declaration td.argument_type span.type span.function-qualified span.plain{float:none}#cldoc #cldoc_content div.function div.overrides{margin-top:10px;font-size:0.8em}#cldoc #cldoc_content div.function div.overrides span.title{color:#CB4B16;padding-right:10px}#cldoc #cldoc_content div.function div.overrides a{color:#4ca2df}#cldoc #cldoc_content div.function table.arguments,#cldoc #cldoc_content div.function table.function-template-parameters{margin-bottom:10px}#cldoc #cldoc_content div.function table.arguments td,#cldoc #cldoc_content div.function table.function-template-parameters td{font-size:0.9em}#cldoc #cldoc_content div.function table.arguments div.doc,#cldoc #cldoc_content div.function table.arguments div.brief,#cldoc #cldoc_content div.function table.arguments div.fulldoc,#cldoc #cldoc_content div.function table.function-template-parameters div.doc,#cldoc #cldoc_content div.function table.function-template-parameters div.brief,#cldoc #cldoc_content div.function table.function-template-parameters div.fulldoc{font-size:1em}#cldoc #cldoc_content div.function table.arguments div.doc,#cldoc #cldoc_content div.function table.function-template-parameters div.doc{display:inline-block}#cldoc #cldoc_content div.function table.arguments tr.return,#cldoc #cldoc_content div.function table.function-template-parameters tr.return{background:transparent}#cldoc #cldoc_content div.function table.arguments tr.return td,#cldoc #cldoc_content div.function table.function-template-parameters tr.return td{padding-top:15px}#cldoc #cldoc_content div.function table.arguments span.annotation,#cldoc #cldoc_content div.function table.function-template-parameters span.annotation{padding-left:10px;font-size:0.9em;color:#93A1A1}#cldoc #cldoc_content div.function div.doc,#cldoc #cldoc_content div.function div.fulldoc,#cldoc #cldoc_content div.function div.brief{background:transparent;margin-bottom:0px}#cldoc #cldoc_content div.function div.return_type{padding-bottom:5px}#cldoc #cldoc_content div.function ul.specifiers{list-style-type:none;margin:0;padding:0;float:left;padding-top:0.05em}#cldoc #cldoc_content div.function ul.specifiers li{display:inline;padding-right:5px;color:#CB4B16;font-size:0.9em}#cldoc #cldoc_content div.function ul.specifiers li:last-child{padding-right:10px}#cldoc #cldoc_content table.undocumented{border-collapse:collapse;font-size:0.8em}#cldoc #cldoc_content table.undocumented td{padding-right:30px;padding-bottom:5px;padding-top:5px;vertical-align:top}#cldoc #cldoc_content table.undocumented td:last-child{padding-right:0px}#cldoc #cldoc_content table.undocumented td:empty{padding-right:0px}#cldoc #cldoc_content table.undocumented tr:last-child td{padding-bottom:0px}#cldoc #cldoc_content div.arguments table.function{border-collapse:collapse;font-size:0.8em}#cldoc #cldoc_content div.arguments table.function td{padding-right:30px;padding-bottom:5px;padding-top:5px;vertical-align:top}#cldoc #cldoc_content div.arguments table.function td:last-child{padding-right:0px}#cldoc #cldoc_content div.arguments table.function td:empty{padding-right:0px}#cldoc #cldoc_content div.arguments table.function tr:last-child td{padding-bottom:0px}#cldoc #cldoc_content div.arguments table.function tr.last td{padding-bottom:40px}#cldoc #cldoc_content div.arguments table.function tr.undocumented td,#cldoc #cldoc_content div.arguments table.function tr.misspelled td{font-size:0.9em;color:#4d4d4d}#cldoc #cldoc_content div.arguments table.function span.undocumented,#cldoc #cldoc_content div.arguments table.function span.misspelled{padding-left:5px}#cldoc #cldoc_content div.arguments table.function span.undocumented:first-of-type,#cldoc #cldoc_content div.arguments table.function span.misspelled:first-of-type{padding-left:0px}#cldoc #cldoc_content table.references{border-collapse:collapse;font-size:0.8em}#cldoc #cldoc_content table.references td{padding-right:30px;padding-bottom:5px;padding-top:5px;vertical-align:top}#cldoc #cldoc_content table.references td:last-child{padding-right:0px}#cldoc #cldoc_content table.references td:empty{padding-right:0px}#cldoc #cldoc_content table.references tr:last-child td{padding-bottom:0px}#cldoc #cldoc_content table.references tr.last td{padding-bottom:40px}#cldoc #cldoc_content table.references tr.missing td{font-size:0.9em;color:#4d4d4d}#cldoc #cldoc_content a.know_more{padding-left:15px;font-size:0.9em}#cldoc #cldoc_content div.description div.brief,#cldoc #cldoc_content div.description div.doc,#cldoc #cldoc_content div.description div.fulldoc{background:transparent;margin:0px;padding:0px}#cldoc #cldoc_content img[alt*=centered]{display:block;margin:0 auto} -/*# sourceMappingURL=cldoc.css.map */ +.hljs-keyword{color:#CB4B16}.hljs-comment{color:#93A1A1}.hljs-string{color:#DC322F}.hljs-number{color:#859900}.hljs-preprocessor{color:#6C71C4}.hljs-stl_container{color:#268BD2}#cldoc::-webkit-scrollbar,#cldoc #cldoc_sidebar_items::-webkit-scrollbar{width:6px;height:6px}#cldoc::-webkit-scrollbar-track,#cldoc #cldoc_sidebar_items::-webkit-scrollbar-track{background-color:#d5d5d5;margin:2px;border-radius:5px}#cldoc::-webkit-scrollbar-thumb,#cldoc #cldoc_sidebar_items::-webkit-scrollbar-thumb{background-color:#a2a2a2;margin:2px;border-radius:5px}#cldoc.hide_scrollbar,#cldoc #cldoc_sidebar_items.hide_scrollbar{overflow-y:hidden}#cldoc.hide_scrollbar::-webkit-scrollbar-track,#cldoc.hide_scrollbar::-webkit-scrollbar-thumb,#cldoc #cldoc_sidebar_items.hide_scrollbar::-webkit-scrollbar-track,#cldoc #cldoc_sidebar_items.hide_scrollbar::-webkit-scrollbar-thumb{background-color:#eee}#cldoc{font-family:"ubuntu","lucida grande"}#cldoc .selected{background-color:#ffffab}#cldoc .builtin{color:#B58900}#cldoc .keyword{color:#CB4B16;font-weight:bold}#cldoc .preprocessor{color:#6C71C4}#cldoc .comment{color:#93A1A1}#cldoc .identifier{color:#268BD2}#cldoc h1,#cldoc h2,#cldoc h3,#cldoc h4,#cldoc h5,#cldoc h6{color:#333;padding-bottom:3px}#cldoc h1,#cldoc h2{border-bottom:1px solid #b3b3b3}#cldoc h3,#cldoc h4,#cldoc h5,#cldoc h6{margin-bottom:0px}#cldoc h1{border:0;margin-top:0px;text-shadow:1px 1px #ccc}#cldoc h1 span.keyword{padding-right:20px}#cldoc h2{margin-top:60px}#cldoc a{cursor:hand;text-decoration:underline;color:#0876c8}#cldoc div.brief p:first-child,#cldoc div.doc p:first-child{padding-top:0px;margin-top:0px}#cldoc div.brief p:last-child,#cldoc div.doc p:last-child{padding-bottom:0px;margin-bottom:0px}#cldoc #cldoc_sidebar_bg{overflow:none;width:260px;background-color:#eee;position:fixed;top:0;bottom:0;left:0}#cldoc #cldoc_sidebar{width:260px;background-color:#eee;border-right:1px solid #d5d5d5;position:fixed;top:0;left:0;bottom:0}#cldoc #cldoc_sidebar.search #cldoc_sidebar_items{display:none}#cldoc #cldoc_sidebar_items{position:fixed;top:0;left:0;bottom:2.5em;width:250px;padding:5px;overflow:auto;overflow-y:scroll}#cldoc #cldoc_sidebar_items div.back .arrow{padding-right:5px}#cldoc #cldoc_sidebar_items div.back div.name{padding-bottom:5px}#cldoc #cldoc_sidebar_items div.back div.name span.keyword{padding-right:5px;font-weight:normal}#cldoc #cldoc_sidebar_items div.back a{display:block;margin-left:10px}#cldoc #cldoc_sidebar_items .subtitle{font-size:1.1em;text-align:center;margin-top:15px;text-shadow:1px 1px #eee;color:#333}#cldoc #cldoc_sidebar_items #cldoc_sidebar_pagenav{margin-top:15px}#cldoc #cldoc_sidebar_items #cldoc_sidebar_pagenav:empty{margin-top:0px}#cldoc #cldoc_sidebar_items ol,#cldoc #cldoc_sidebar_items ul{margin:0;padding:0;padding-left:10px;font-size:0.9em;margin-top:5px}#cldoc #cldoc_sidebar_items ul{list-style:none}#cldoc #cldoc_sidebar_items *{text-overflow:ellipsis}#cldoc #cldoc_sidebar_items li{padding-bottom:2px;padding-top:2px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}#cldoc #cldoc_sidebar_items span.counter{padding:2px 4px 2px 4px;margin-left:5px;font-size:0.6em;vertical-align:super;background-color:#4298d8;color:#fff;display:none;border-radius:10px;min-width:10px;text-align:center}#cldoc #cldoc_sidebar_items span.virtual,#cldoc #cldoc_sidebar_items span.protected,#cldoc #cldoc_sidebar_items span.static{font-size:0.6em;min-width:1.6em;display:inline-block;vertical-align:super;text-align:center;background-color:#CB4B16;color:#fff;margin-left:5px;padding-bottom:2px}#cldoc #cldoc_sidebar_items .brief{text-shadow:none;font-size:0.9em;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding:2px;margin:0px;margin-bottom:3px;color:#999}#cldoc #cldoc_sidebar_items span.bullet{font-weight:bold;padding-right:5px}#cldoc #cldoc_sidebar_items span.bullet.complete{color:#859900}#cldoc #cldoc_sidebar_items span.bullet.incomplete{color:#DC322F}#cldoc #cldoc_sidebar_items a{text-decoration:none}#cldoc #cldoc_search{position:fixed;bottom:0.5em;width:233px;left:8px;height:1.2em;padding:2px 5px 2px 5px;border:1px solid #aaa;background-color:#fafafa}#cldoc #cldoc_search.focus{border:1px solid #268BD2}#cldoc #cldoc_search input{padding:0;margin:0;top:3px;right:18px;left:20px;position:absolute;border:0;background-color:transparent}#cldoc #cldoc_search input:focus{outline-style:none}#cldoc #cldoc_search div.icon,#cldoc #cldoc_search div.close{width:16px;height:16px;position:absolute;top:3px;z-index:2;cursor:pointer}#cldoc #cldoc_search div.icon.focus,#cldoc #cldoc_search div.close.focus{background-position:100% 0%}#cldoc #cldoc_search div.icon{left:2px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAfdEVYdFRpdGxlAEdub21lIFN5bWJvbGljIEljb24gVGhlbWWOpCmrAAACQ0lEQVRIicWVsWrbUBSGvyPJEl4CGQrJAxSbpo7pkikdSjZnviH4MZoW2sEQ8NBAUzL2DTLkzvYWOiSZGiitS7HoAzRQQocOxrJ9bwdJjmLJdTKUns2//u/+554jZLHW8j/Ly/44Pj5e9n2/Za19ClSAUETOoihqN5vNX4sOWz/oLQ9dWghTHstZMKH95VWtkJd0AlrrTeAEWC3w/QB2lFLn88Ir7z5vYp35vJidcK+e4x2Ib54J7xpjNoIgWDLGbADdRD9JfIU3z4R3EWdDjL+EODe8dU7WD3o53gNIxr4KdJVS25nnH4FtrXUHaPi+3wKezx4ydGml4eGLWo6vHPY6QCPx3eIdgGTnGGP2i26Y6qkvV/HOQZxCfqqnvtkGiF8YyuVyv4jP6JXCgESXiVfIZ/QcnzYQAgwGg2rRARk9nNNACGDdcSGf0XO8AyAiZwCOUzzCVE99+QRi3RavcKqnvkx5AFEUtUul0i7Q0Fp3jDH75XK5PxgMqkl4I7ZF74vODya0hx67QKNy2Osgzr5MvL51x9UkvIElcpnk+Dt9B0RkaK0NgB6wpZT6OetZ8B0YAgGWnhmPt76/fjLl03cApdT5aDRaE5Ej4BL4DVyKyJG1tg70gRpwqrV+MJsQ7tXPgzFrWG7xWI7EJLxQczzv9OGbT1Ne7vpfoLVeAT4A1b9NYl49fvttZSSTmM9MwllIJqWUugKecTMJfVcW4OvLR1cl68a8UHNLnobMCu7ZxAVwfR/2dhP2wmKv4R4r+Ff1B4jqDQnTeInlAAAAAElFTkSuQmCC")}#cldoc #cldoc_search div.close{right:2px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAfdEVYdFRpdGxlAEdub21lIFN5bWJvbGljIEljb24gVGhlbWWOpCmrAAABmUlEQVRIie2UPWobQRSAvzczqwO4sQtXISZBSMTpXLjQ4gvEhgEdJIbkBAEnEHIKFYuVHMBiGxcqDCGJcBLcyJ3AB7DR7uxLMza2d2Oliho/GBjezDfvG+ZHVJVlhllq9UcBwN1PZFmmwDGw572/iLkV4BDoee/loQWfffihIMdVUeydvX15AdD5eLoyD+FQoPf7dfcOXxMAToBtYJRl2U5ZluqcOwJeAN/+YVMnoNvGudHGu687plUp2jqSv/A1AWvtbgghB7rAyDlH7E9DCK8WVa8q3TVGcoSucW5EBQhdhKkp6rw0PcPhcLgeJZ7G1HkIodfv96eLBAA2Dr6vGyO3eD03ZdX7+WazxjdeQhGZA1e3UpfW2qumuU2hhrne4eXS2lYjXxMYDAarZVnmQAf4FdtzIM+ybG1R8SefJqsWyeUeX0jIO+9Pa3xNwDn3BWhHMI3tWuLzIoFkrjd8ojZN1N7wBaHGNx3BFjAGUu/9zHs/ixLjOPZwCFso40RtOtlvzyb77VmiNkUZI3W+8RL+z1j6T/go8Adu/5qNAFTJVAAAAABJRU5ErkJggg==")}#cldoc #cldoc_content{margin-left:280px;padding:10px;padding-left:20px}#cldoc #cldoc_content div.fulldoc div.brief{margin:0px;margin-bottom:10px;padding:0px}#cldoc #cldoc_content div.fulldoc div.doc{margin:0px;padding:0px}#cldoc #cldoc_content div.doc table td,#cldoc #cldoc_content div.doc table th{padding:0px 5px 0px 5px}#cldoc #cldoc_content div.brief,#cldoc #cldoc_content div.doc,#cldoc #cldoc_content div.fulldoc{margin-left:10px;color:#666;padding:5px;margin-top:2px;margin-bottom:15px;font-size:0.9em;background-color:#eee}#cldoc #cldoc_content span.type .keyword{font-weight:normal}#cldoc #cldoc_content span.constant{color:#a0a}#cldoc #cldoc_content div.structures div.item,#cldoc #cldoc_content div.classes div.item{margin-bottom:30px}#cldoc #cldoc_content table.typedefs{border-collapse:collapse}#cldoc #cldoc_content table.typedefs td{padding-right:30px;padding-bottom:5px;padding-top:5px;vertical-align:top}#cldoc #cldoc_content table.typedefs td:last-child{padding-right:0px}#cldoc #cldoc_content table.typedefs td:empty{padding-right:0px}#cldoc #cldoc_content table.typedefs tr:last-child td{padding-bottom:0px}#cldoc #cldoc_content table.search_results{border-collapse:collapse}#cldoc #cldoc_content table.search_results td{padding-right:30px;padding-bottom:5px;padding-top:5px;vertical-align:top}#cldoc #cldoc_content table.search_results td:last-child{padding-right:0px}#cldoc #cldoc_content table.search_results td:empty{padding-right:0px}#cldoc #cldoc_content table.search_results tr:last-child td{padding-bottom:0px}#cldoc #cldoc_content table.search_results span.search_result{background-color:#ffffab}#cldoc #cldoc_content div.enumerations table{border-collapse:collapse;margin-left:30px;margin-bottom:40px}#cldoc #cldoc_content div.enumerations table td{padding-right:30px;padding-bottom:5px;padding-top:5px;vertical-align:top}#cldoc #cldoc_content div.enumerations table td:last-child{padding-right:0px}#cldoc #cldoc_content div.enumerations table td:empty{padding-right:0px}#cldoc #cldoc_content div.enumerations table tr:last-child td{padding-bottom:0px}#cldoc #cldoc_content div.enumerations table td.identifier{font-weight:normal}#cldoc #cldoc_content div.enumerations table tr:last-child td{padding-bottom:5px}#cldoc #cldoc_content div.enumerations table div.brief,#cldoc #cldoc_content div.enumerations table div.doc,#cldoc #cldoc_content div.enumerations table div.fulldoc{background:transparent;margin:0px;padding:0px}#cldoc #cldoc_content div.enumerations table tr:nth-child(even){background-color:#f9f9f9}#cldoc #cldoc_content div.enumerations table tr.selected{background-color:#ffffab}#cldoc #cldoc_content ul.gobject_property_mode{list-style-type:none;margin:0;padding:0}#cldoc #cldoc_content ul.gobject_property_mode li{float:left}#cldoc #cldoc_content ul.gobject_property_mode li:after{content:", "}#cldoc #cldoc_content ul.gobject_property_mode li:last-child:after{content:""}#cldoc #cldoc_content table.category,#cldoc #cldoc_content table.namespace,#cldoc #cldoc_content table.fields,#cldoc #cldoc_content table.variables,#cldoc #cldoc_content table.arguments,#cldoc #cldoc_content table.bases,#cldoc #cldoc_content table.implements,#cldoc #cldoc_content table.subclasses,#cldoc #cldoc_content table.implemented_by,#cldoc #cldoc_content table.template_parameters,#cldoc #cldoc_content table.function-template-parameters,#cldoc #cldoc_content table.structures,#cldoc #cldoc_content table.gobject_classes,#cldoc #cldoc_content table.classes,#cldoc #cldoc_content table.gobject_boxed_structures,#cldoc #cldoc_content table.gobject_properties,#cldoc #cldoc_content table.gobject_interfaces{border-collapse:collapse;margin-left:30px;margin-bottom:40px}#cldoc #cldoc_content table.category td,#cldoc #cldoc_content table.namespace td,#cldoc #cldoc_content table.fields td,#cldoc #cldoc_content table.variables td,#cldoc #cldoc_content table.arguments td,#cldoc #cldoc_content table.bases td,#cldoc #cldoc_content table.implements td,#cldoc #cldoc_content table.subclasses td,#cldoc #cldoc_content table.implemented_by td,#cldoc #cldoc_content table.template_parameters td,#cldoc #cldoc_content table.function-template-parameters td,#cldoc #cldoc_content table.structures td,#cldoc #cldoc_content table.gobject_classes td,#cldoc #cldoc_content table.classes td,#cldoc #cldoc_content table.gobject_boxed_structures td,#cldoc #cldoc_content table.gobject_properties td,#cldoc #cldoc_content table.gobject_interfaces td{padding-right:30px;padding-bottom:5px;padding-top:5px;vertical-align:top}#cldoc #cldoc_content table.category td:last-child,#cldoc #cldoc_content table.namespace td:last-child,#cldoc #cldoc_content table.fields td:last-child,#cldoc #cldoc_content table.variables td:last-child,#cldoc #cldoc_content table.arguments td:last-child,#cldoc #cldoc_content table.bases td:last-child,#cldoc #cldoc_content table.implements td:last-child,#cldoc #cldoc_content table.subclasses td:last-child,#cldoc #cldoc_content table.implemented_by td:last-child,#cldoc #cldoc_content table.template_parameters td:last-child,#cldoc #cldoc_content table.function-template-parameters td:last-child,#cldoc #cldoc_content table.structures td:last-child,#cldoc #cldoc_content table.gobject_classes td:last-child,#cldoc #cldoc_content table.classes td:last-child,#cldoc #cldoc_content table.gobject_boxed_structures td:last-child,#cldoc #cldoc_content table.gobject_properties td:last-child,#cldoc #cldoc_content table.gobject_interfaces td:last-child{padding-right:0px}#cldoc #cldoc_content table.category td:empty,#cldoc #cldoc_content table.namespace td:empty,#cldoc #cldoc_content table.fields td:empty,#cldoc #cldoc_content table.variables td:empty,#cldoc #cldoc_content table.arguments td:empty,#cldoc #cldoc_content table.bases td:empty,#cldoc #cldoc_content table.implements td:empty,#cldoc #cldoc_content table.subclasses td:empty,#cldoc #cldoc_content table.implemented_by td:empty,#cldoc #cldoc_content table.template_parameters td:empty,#cldoc #cldoc_content table.function-template-parameters td:empty,#cldoc #cldoc_content table.structures td:empty,#cldoc #cldoc_content table.gobject_classes td:empty,#cldoc #cldoc_content table.classes td:empty,#cldoc #cldoc_content table.gobject_boxed_structures td:empty,#cldoc #cldoc_content table.gobject_properties td:empty,#cldoc #cldoc_content table.gobject_interfaces td:empty{padding-right:0px}#cldoc #cldoc_content table.category tr:last-child td,#cldoc #cldoc_content table.namespace tr:last-child td,#cldoc #cldoc_content table.fields tr:last-child td,#cldoc #cldoc_content table.variables tr:last-child td,#cldoc #cldoc_content table.arguments tr:last-child td,#cldoc #cldoc_content table.bases tr:last-child td,#cldoc #cldoc_content table.implements tr:last-child td,#cldoc #cldoc_content table.subclasses tr:last-child td,#cldoc #cldoc_content table.implemented_by tr:last-child td,#cldoc #cldoc_content table.template_parameters tr:last-child td,#cldoc #cldoc_content table.function-template-parameters tr:last-child td,#cldoc #cldoc_content table.structures tr:last-child td,#cldoc #cldoc_content table.gobject_classes tr:last-child td,#cldoc #cldoc_content table.classes tr:last-child td,#cldoc #cldoc_content table.gobject_boxed_structures tr:last-child td,#cldoc #cldoc_content table.gobject_properties tr:last-child td,#cldoc #cldoc_content table.gobject_interfaces tr:last-child td{padding-bottom:0px}#cldoc #cldoc_content table.category td.identifier,#cldoc #cldoc_content table.namespace td.identifier,#cldoc #cldoc_content table.fields td.identifier,#cldoc #cldoc_content table.variables td.identifier,#cldoc #cldoc_content table.arguments td.identifier,#cldoc #cldoc_content table.bases td.identifier,#cldoc #cldoc_content table.implements td.identifier,#cldoc #cldoc_content table.subclasses td.identifier,#cldoc #cldoc_content table.implemented_by td.identifier,#cldoc #cldoc_content table.template_parameters td.identifier,#cldoc #cldoc_content table.function-template-parameters td.identifier,#cldoc #cldoc_content table.structures td.identifier,#cldoc #cldoc_content table.gobject_classes td.identifier,#cldoc #cldoc_content table.classes td.identifier,#cldoc #cldoc_content table.gobject_boxed_structures td.identifier,#cldoc #cldoc_content table.gobject_properties td.identifier,#cldoc #cldoc_content table.gobject_interfaces td.identifier{font-weight:normal}#cldoc #cldoc_content table.category tr:last-child td,#cldoc #cldoc_content table.namespace tr:last-child td,#cldoc #cldoc_content table.fields tr:last-child td,#cldoc #cldoc_content table.variables tr:last-child td,#cldoc #cldoc_content table.arguments tr:last-child td,#cldoc #cldoc_content table.bases tr:last-child td,#cldoc #cldoc_content table.implements tr:last-child td,#cldoc #cldoc_content table.subclasses tr:last-child td,#cldoc #cldoc_content table.implemented_by tr:last-child td,#cldoc #cldoc_content table.template_parameters tr:last-child td,#cldoc #cldoc_content table.function-template-parameters tr:last-child td,#cldoc #cldoc_content table.structures tr:last-child td,#cldoc #cldoc_content table.gobject_classes tr:last-child td,#cldoc #cldoc_content table.classes tr:last-child td,#cldoc #cldoc_content table.gobject_boxed_structures tr:last-child td,#cldoc #cldoc_content table.gobject_properties tr:last-child td,#cldoc #cldoc_content table.gobject_interfaces tr:last-child td{padding-bottom:5px}#cldoc #cldoc_content table.category div.brief,#cldoc #cldoc_content table.category div.doc,#cldoc #cldoc_content table.category div.fulldoc,#cldoc #cldoc_content table.namespace div.brief,#cldoc #cldoc_content table.namespace div.doc,#cldoc #cldoc_content table.namespace div.fulldoc,#cldoc #cldoc_content table.fields div.brief,#cldoc #cldoc_content table.fields div.doc,#cldoc #cldoc_content table.fields div.fulldoc,#cldoc #cldoc_content table.variables div.brief,#cldoc #cldoc_content table.variables div.doc,#cldoc #cldoc_content table.variables div.fulldoc,#cldoc #cldoc_content table.arguments div.brief,#cldoc #cldoc_content table.arguments div.doc,#cldoc #cldoc_content table.arguments div.fulldoc,#cldoc #cldoc_content table.bases div.brief,#cldoc #cldoc_content table.bases div.doc,#cldoc #cldoc_content table.bases div.fulldoc,#cldoc #cldoc_content table.implements div.brief,#cldoc #cldoc_content table.implements div.doc,#cldoc #cldoc_content table.implements div.fulldoc,#cldoc #cldoc_content table.subclasses div.brief,#cldoc #cldoc_content table.subclasses div.doc,#cldoc #cldoc_content table.subclasses div.fulldoc,#cldoc #cldoc_content table.implemented_by div.brief,#cldoc #cldoc_content table.implemented_by div.doc,#cldoc #cldoc_content table.implemented_by div.fulldoc,#cldoc #cldoc_content table.template_parameters div.brief,#cldoc #cldoc_content table.template_parameters div.doc,#cldoc #cldoc_content table.template_parameters div.fulldoc,#cldoc #cldoc_content table.function-template-parameters div.brief,#cldoc #cldoc_content table.function-template-parameters div.doc,#cldoc #cldoc_content table.function-template-parameters div.fulldoc,#cldoc #cldoc_content table.structures div.brief,#cldoc #cldoc_content table.structures div.doc,#cldoc #cldoc_content table.structures div.fulldoc,#cldoc #cldoc_content table.gobject_classes div.brief,#cldoc #cldoc_content table.gobject_classes div.doc,#cldoc #cldoc_content table.gobject_classes div.fulldoc,#cldoc #cldoc_content table.classes div.brief,#cldoc #cldoc_content table.classes div.doc,#cldoc #cldoc_content table.classes div.fulldoc,#cldoc #cldoc_content table.gobject_boxed_structures div.brief,#cldoc #cldoc_content table.gobject_boxed_structures div.doc,#cldoc #cldoc_content table.gobject_boxed_structures div.fulldoc,#cldoc #cldoc_content table.gobject_properties div.brief,#cldoc #cldoc_content table.gobject_properties div.doc,#cldoc #cldoc_content table.gobject_properties div.fulldoc,#cldoc #cldoc_content table.gobject_interfaces div.brief,#cldoc #cldoc_content table.gobject_interfaces div.doc,#cldoc #cldoc_content table.gobject_interfaces div.fulldoc{background:transparent;margin:0px;padding:0px}#cldoc #cldoc_content table.category tr:nth-child(even),#cldoc #cldoc_content table.namespace tr:nth-child(even),#cldoc #cldoc_content table.fields tr:nth-child(even),#cldoc #cldoc_content table.variables tr:nth-child(even),#cldoc #cldoc_content table.arguments tr:nth-child(even),#cldoc #cldoc_content table.bases tr:nth-child(even),#cldoc #cldoc_content table.implements tr:nth-child(even),#cldoc #cldoc_content table.subclasses tr:nth-child(even),#cldoc #cldoc_content table.implemented_by tr:nth-child(even),#cldoc #cldoc_content table.template_parameters tr:nth-child(even),#cldoc #cldoc_content table.function-template-parameters tr:nth-child(even),#cldoc #cldoc_content table.structures tr:nth-child(even),#cldoc #cldoc_content table.gobject_classes tr:nth-child(even),#cldoc #cldoc_content table.classes tr:nth-child(even),#cldoc #cldoc_content table.gobject_boxed_structures tr:nth-child(even),#cldoc #cldoc_content table.gobject_properties tr:nth-child(even),#cldoc #cldoc_content table.gobject_interfaces tr:nth-child(even){background-color:#f9f9f9}#cldoc #cldoc_content table.category tr.selected,#cldoc #cldoc_content table.namespace tr.selected,#cldoc #cldoc_content table.fields tr.selected,#cldoc #cldoc_content table.variables tr.selected,#cldoc #cldoc_content table.arguments tr.selected,#cldoc #cldoc_content table.bases tr.selected,#cldoc #cldoc_content table.implements tr.selected,#cldoc #cldoc_content table.subclasses tr.selected,#cldoc #cldoc_content table.implemented_by tr.selected,#cldoc #cldoc_content table.template_parameters tr.selected,#cldoc #cldoc_content table.function-template-parameters tr.selected,#cldoc #cldoc_content table.structures tr.selected,#cldoc #cldoc_content table.gobject_classes tr.selected,#cldoc #cldoc_content table.classes tr.selected,#cldoc #cldoc_content table.gobject_boxed_structures tr.selected,#cldoc #cldoc_content table.gobject_properties tr.selected,#cldoc #cldoc_content table.gobject_interfaces tr.selected{background-color:#ffffab}#cldoc #cldoc_content table.category .keyword,#cldoc #cldoc_content table.namespace .keyword,#cldoc #cldoc_content table.fields .keyword,#cldoc #cldoc_content table.variables .keyword,#cldoc #cldoc_content table.arguments .keyword,#cldoc #cldoc_content table.bases .keyword,#cldoc #cldoc_content table.implements .keyword,#cldoc #cldoc_content table.subclasses .keyword,#cldoc #cldoc_content table.implemented_by .keyword,#cldoc #cldoc_content table.template_parameters .keyword,#cldoc #cldoc_content table.function-template-parameters .keyword,#cldoc #cldoc_content table.structures .keyword,#cldoc #cldoc_content table.gobject_classes .keyword,#cldoc #cldoc_content table.classes .keyword,#cldoc #cldoc_content table.gobject_boxed_structures .keyword,#cldoc #cldoc_content table.gobject_properties .keyword,#cldoc #cldoc_content table.gobject_interfaces .keyword{font-weight:normal}#cldoc #cldoc_content table.category tr.union td,#cldoc #cldoc_content table.namespace tr.union td,#cldoc #cldoc_content table.fields tr.union td,#cldoc #cldoc_content table.variables tr.union td,#cldoc #cldoc_content table.arguments tr.union td,#cldoc #cldoc_content table.bases tr.union td,#cldoc #cldoc_content table.implements tr.union td,#cldoc #cldoc_content table.subclasses tr.union td,#cldoc #cldoc_content table.implemented_by tr.union td,#cldoc #cldoc_content table.template_parameters tr.union td,#cldoc #cldoc_content table.function-template-parameters tr.union td,#cldoc #cldoc_content table.structures tr.union td,#cldoc #cldoc_content table.gobject_classes tr.union td,#cldoc #cldoc_content table.classes tr.union td,#cldoc #cldoc_content table.gobject_boxed_structures tr.union td,#cldoc #cldoc_content table.gobject_properties tr.union td,#cldoc #cldoc_content table.gobject_interfaces tr.union td{padding-top:15px}#cldoc #cldoc_content table.category tr.full>td,#cldoc #cldoc_content table.namespace tr.full>td,#cldoc #cldoc_content table.fields tr.full>td,#cldoc #cldoc_content table.variables tr.full>td,#cldoc #cldoc_content table.arguments tr.full>td,#cldoc #cldoc_content table.bases tr.full>td,#cldoc #cldoc_content table.implements tr.full>td,#cldoc #cldoc_content table.subclasses tr.full>td,#cldoc #cldoc_content table.implemented_by tr.full>td,#cldoc #cldoc_content table.template_parameters tr.full>td,#cldoc #cldoc_content table.function-template-parameters tr.full>td,#cldoc #cldoc_content table.structures tr.full>td,#cldoc #cldoc_content table.gobject_classes tr.full>td,#cldoc #cldoc_content table.classes tr.full>td,#cldoc #cldoc_content table.gobject_boxed_structures tr.full>td,#cldoc #cldoc_content table.gobject_properties tr.full>td,#cldoc #cldoc_content table.gobject_interfaces tr.full>td{padding-top:15px}#cldoc #cldoc_content table.union td{padding-top:0px;padding-bottom:0px;font-size:0.9em}#cldoc #cldoc_content table.category,#cldoc #cldoc_content table.namespace{margin-bottom:10px}#cldoc #cldoc_content div.structures table,#cldoc #cldoc_content div.classes table{border-left:1px solid #999}#cldoc #cldoc_content div.structures table td,#cldoc #cldoc_content div.classes table td{padding-left:10px}#cldoc #cldoc_content div.enumerations table td.value{text-align:right}#cldoc #cldoc_content div.function{margin-bottom:50px}#cldoc #cldoc_content div.function div.declaration{background-color:#f7fafc;border:1px solid #bed3e9;padding:5px}#cldoc #cldoc_content div.function div.declaration.selected{background-color:#ffffab;border:1px solid #dede00}#cldoc #cldoc_content div.function table.declaration{border-collapse:collapse}#cldoc #cldoc_content div.function table.declaration td{padding-right:30px;padding-bottom:5px;padding-top:5px;vertical-align:top}#cldoc #cldoc_content div.function table.declaration td:last-child{padding-right:0px}#cldoc #cldoc_content div.function table.declaration td:empty{padding-right:0px}#cldoc #cldoc_content div.function table.declaration tr:last-child td{padding-bottom:0px}#cldoc #cldoc_content div.function table.declaration td{padding:0px;padding-right:5px}#cldoc #cldoc_content div.function table.declaration td.identifier{padding-right:30px}#cldoc #cldoc_content div.function table.declaration td.close_paren{padding:0px}#cldoc #cldoc_content div.function table.declaration td.open_paren{padding-right:1px}#cldoc #cldoc_content div.function table.declaration td.argument_name{text-align:left;padding-right:1px}#cldoc #cldoc_content div.function table.declaration td.argument_type{padding-right:2px}#cldoc #cldoc_content div.function table.declaration td.argument_type span.type{display:block}#cldoc #cldoc_content div.function table.declaration td.argument_type span.type span.name{float:left;margin-right:10px}#cldoc #cldoc_content div.function table.declaration td.argument_type span.type span.function-arguments>span.sub-type>span.name:last-child{margin-right:0}#cldoc #cldoc_content div.function table.declaration td.argument_type span.type span.plain,#cldoc #cldoc_content div.function table.declaration td.argument_type span.type span.function-qualified,#cldoc #cldoc_content div.function table.declaration td.argument_type span.type span.sub-type{float:left}#cldoc #cldoc_content div.function table.declaration td.argument_type span.type span.qualifier{float:right}#cldoc #cldoc_content div.function table.declaration td.argument_type span.type span.function-qualified span.qualifier,#cldoc #cldoc_content div.function table.declaration td.argument_type span.type span.function-qualified span.plain{float:none}#cldoc #cldoc_content div.function div.overrides{margin-top:10px;font-size:0.8em}#cldoc #cldoc_content div.function div.overrides span.title{color:#CB4B16;padding-right:10px}#cldoc #cldoc_content div.function div.overrides a{color:#4ca2df}#cldoc #cldoc_content div.function table.arguments,#cldoc #cldoc_content div.function table.function-template-parameters{margin-bottom:10px}#cldoc #cldoc_content div.function table.arguments td,#cldoc #cldoc_content div.function table.function-template-parameters td{font-size:0.9em}#cldoc #cldoc_content div.function table.arguments div.doc,#cldoc #cldoc_content div.function table.arguments div.brief,#cldoc #cldoc_content div.function table.arguments div.fulldoc,#cldoc #cldoc_content div.function table.function-template-parameters div.doc,#cldoc #cldoc_content div.function table.function-template-parameters div.brief,#cldoc #cldoc_content div.function table.function-template-parameters div.fulldoc{font-size:1em}#cldoc #cldoc_content div.function table.arguments div.doc,#cldoc #cldoc_content div.function table.function-template-parameters div.doc{display:inline-block}#cldoc #cldoc_content div.function table.arguments tr.return,#cldoc #cldoc_content div.function table.function-template-parameters tr.return{background:transparent}#cldoc #cldoc_content div.function table.arguments tr.return td,#cldoc #cldoc_content div.function table.function-template-parameters tr.return td{padding-top:15px}#cldoc #cldoc_content div.function table.arguments span.annotation,#cldoc #cldoc_content div.function table.function-template-parameters span.annotation{padding-left:10px;font-size:0.9em;color:#93A1A1}#cldoc #cldoc_content div.function div.doc,#cldoc #cldoc_content div.function div.fulldoc,#cldoc #cldoc_content div.function div.brief{background:transparent;margin-bottom:0px}#cldoc #cldoc_content div.function div.return_type{padding-bottom:5px}#cldoc #cldoc_content div.function ul.specifiers{list-style-type:none;margin:0;padding:0;float:left;padding-top:0.05em}#cldoc #cldoc_content div.function ul.specifiers li{display:inline;padding-right:5px;color:#CB4B16;font-size:0.9em}#cldoc #cldoc_content div.function ul.specifiers li:last-child{padding-right:10px}#cldoc #cldoc_content table.undocumented{border-collapse:collapse;font-size:0.8em}#cldoc #cldoc_content table.undocumented td{padding-right:30px;padding-bottom:5px;padding-top:5px;vertical-align:top}#cldoc #cldoc_content table.undocumented td:last-child{padding-right:0px}#cldoc #cldoc_content table.undocumented td:empty{padding-right:0px}#cldoc #cldoc_content table.undocumented tr:last-child td{padding-bottom:0px}#cldoc #cldoc_content div.arguments table.function{border-collapse:collapse;font-size:0.8em}#cldoc #cldoc_content div.arguments table.function td{padding-right:30px;padding-bottom:5px;padding-top:5px;vertical-align:top}#cldoc #cldoc_content div.arguments table.function td:last-child{padding-right:0px}#cldoc #cldoc_content div.arguments table.function td:empty{padding-right:0px}#cldoc #cldoc_content div.arguments table.function tr:last-child td{padding-bottom:0px}#cldoc #cldoc_content div.arguments table.function tr.last td{padding-bottom:40px}#cldoc #cldoc_content div.arguments table.function tr.undocumented td,#cldoc #cldoc_content div.arguments table.function tr.misspelled td{font-size:0.9em;color:#4d4d4d}#cldoc #cldoc_content div.arguments table.function span.undocumented,#cldoc #cldoc_content div.arguments table.function span.misspelled{padding-left:5px}#cldoc #cldoc_content div.arguments table.function span.undocumented:first-of-type,#cldoc #cldoc_content div.arguments table.function span.misspelled:first-of-type{padding-left:0px}#cldoc #cldoc_content table.references{border-collapse:collapse;font-size:0.8em}#cldoc #cldoc_content table.references td{padding-right:30px;padding-bottom:5px;padding-top:5px;vertical-align:top}#cldoc #cldoc_content table.references td:last-child{padding-right:0px}#cldoc #cldoc_content table.references td:empty{padding-right:0px}#cldoc #cldoc_content table.references tr:last-child td{padding-bottom:0px}#cldoc #cldoc_content table.references tr.last td{padding-bottom:40px}#cldoc #cldoc_content table.references tr.missing td{font-size:0.9em;color:#4d4d4d}#cldoc #cldoc_content a.know_more{padding-left:15px;font-size:0.9em}#cldoc #cldoc_content div.description div.brief,#cldoc #cldoc_content div.description div.doc,#cldoc #cldoc_content div.description div.fulldoc{background:transparent;margin:0px;padding:0px}#cldoc #cldoc_content img[alt*=centered]{display:block;margin:0 auto} From fdbdb8c1b16114ba34b4feaad2413e52a8d4ba48 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Mon, 2 Apr 2018 22:28:39 +0200 Subject: [PATCH 06/23] Add better support for template parameters in types --- cldoc/generators/xml.py | 23 +++++----- cldoc/nodes/ctype.py | 94 ++++++++++++++++++++++++++++++++++++++--- cldoc/nodes/enum.py | 4 +- cldoc/nodes/typedef.py | 9 +--- cldoc/tree.py | 34 +++++++++++++++ html/coffee/type.coffee | 32 ++++++++++++++ 6 files changed, 171 insertions(+), 25 deletions(-) diff --git a/cldoc/generators/xml.py b/cldoc/generators/xml.py index 56f3e5b..14febca 100644 --- a/cldoc/generators/xml.py +++ b/cldoc/generators/xml.py @@ -184,17 +184,10 @@ def add_ref_node_id(self, node, elem): elem.set('ref', r) def add_ref_id(self, cursor, elem): - if not cursor: - return - - if cursor in self.tree.cursor_to_node: - node = self.tree.cursor_to_node[cursor] - elif cursor.get_usr() in self.tree.usr_to_node: - node = self.tree.usr_to_node[cursor.get_usr()] - else: - return + node = self.tree.lookup_node_from_cursor(cursor) - self.add_ref_node_id(node, elem) + if not node is None: + self.add_ref_node_id(node, elem) def type_to_xml(self, tp, parent=None): elem = ElementTree.Element('type') @@ -215,6 +208,16 @@ def type_to_xml(self, tp, parent=None): for arg in tp.function_arguments: args.append(self.type_to_xml(arg, parent)) + elif tp.is_template: + elem.set('name', tp.typename_for(parent)) + elem.set('class', 'template') + + args = ElementTree.Element('template-arguments') + + for template_argument in tp.template_arguments: + args.append(self.type_to_xml(template_argument, parent)) + + elem.append(args) else: elem.set('name', tp.typename_for(parent)) diff --git a/cldoc/nodes/ctype.py b/cldoc/nodes/ctype.py index 4d99344..e3582ec 100644 --- a/cldoc/nodes/ctype.py +++ b/cldoc/nodes/ctype.py @@ -56,6 +56,7 @@ def __init__(self, tp, cursor=None): self._builtin = False self._cursor = cursor self._kind = tp.kind + self._is_template = False self.extract(tp) @@ -71,6 +72,14 @@ def function_arguments(self): def function_result(self): return self._result + @property + def is_template(self): + return self._is_template + + @property + def template_arguments(self): + return self._template_arguments + @property def is_constant_array(self): return self._kind == cindex.TypeKind.CONSTANTARRAY @@ -104,9 +113,24 @@ def element_type(self): def constant_array_size(self): return self._array_size + def _declaration_full_name(self, decl): + cursor_template = decl.specialized_cursor_template + + if cursor_template is None or not self._is_template: + return decl.displayname + else: + return cursor_template.spelling + + def _full_typename(self, decl): parent = decl.semantic_parent - meid = decl.displayname + + if decl.kind == cindex.CursorKind.NAMESPACE and decl.displayname == '__1' and parent and parent.displayname == 'std': + # Skip over special inline namespace. Ideally we can skip over inline namespaces + # in general, but I can't find a way to determine whether a namespace is inline + return self._full_typename(parent) + + meid = self._declaration_full_name(decl) if not parent or parent.kind == cindex.CursorKind.TRANSLATION_UNIT: return meid @@ -121,7 +145,61 @@ def _full_typename(self, decl): else: return meid + def _extract_constant_array_type(self, tp): + if tp.kind != cindex.TypeKind.CONSTANTARRAY: + return + + self._element_type = Type(tp.get_array_element_type()) + self._array_size = tp.get_array_size() + + def _extract_default_template_types(self, tp): + decl = tp.get_declaration() + + while decl and decl.kind != cindex.CursorKind.CLASS_TEMPLATE: + decl = decl.specialized_cursor_template + + if decl is None: + return None + + default_template_types = [] + + for child in decl.get_children(): + if child.kind != cindex.CursorKind.TEMPLATE_TYPE_PARAMETER: + continue + + default_type = None + + for cursor in child.get_children(): + if cursor.kind == cindex.CursorKind.TYPE_REF: + default_type = cursor.type + break + + default_template_types.append(default_type) + + return default_template_types + + def _extract_template_argument_types(self, tp): + num_template_arguments = tp.get_num_template_arguments() + + if num_template_arguments <= 0: + return + + self._is_template = True + self._template_arguments = [] + + for i in range(0, num_template_arguments): + template_argument_type = tp.get_template_argument_type(i) + + is_default = False + + self._template_arguments.append(TemplateArgumentType(template_argument_type, is_default)) + + def _extract_subtypes(self, tp): + self._extract_constant_array_type(tp) + self._extract_template_argument_types(tp) + def extract(self, tp): + if tp.is_const_qualified(): self._qualifier.append('const') @@ -131,13 +209,10 @@ def extract(self, tp): if tp.kind in Type.kindmap: self.extract(tp.get_pointee()) self._qualifier.append(Type.kindmap[tp.kind]) - return - elif tp.kind == cindex.TypeKind.CONSTANTARRAY: - self._element_type = Type(tp.get_array_element_type()) - self._array_size = tp.get_array_size() self._decl = tp.get_declaration() + self._extract_subtypes(tp) if self._decl and self._decl.displayname: self._typename = self._full_typename(self._decl) @@ -198,4 +273,13 @@ def qualifier_string(self): return ret +class TemplateArgumentType(Type): + def __init__(self, type, is_default=False): + Type.__init__(self, type) + self._is_default = is_default + + @property + def is_default(self): + return self._is_default + # vi:ts=4:et diff --git a/cldoc/nodes/enum.py b/cldoc/nodes/enum.py index 6f60502..153dbd7 100644 --- a/cldoc/nodes/enum.py +++ b/cldoc/nodes/enum.py @@ -27,9 +27,9 @@ def __init__(self, cursor, comment): if hasattr(self.cursor, 'get_tokens'): try: tokens = self.cursor.get_tokens() - tokens.next() + next(tokens) - tt = tokens.next() + tt = next(tokens) if tt.kind == cindex.TokenKind.KEYWORD and tt.spelling == 'class': self.isclass = True diff --git a/cldoc/nodes/typedef.py b/cldoc/nodes/typedef.py index 54120f5..8862ce2 100644 --- a/cldoc/nodes/typedef.py +++ b/cldoc/nodes/typedef.py @@ -21,13 +21,6 @@ class Typedef(Node): def __init__(self, cursor, comment): Node.__init__(self, cursor, comment) - children = [child for child in cursor.get_children()] - - if len(children) == 1 and children[0].kind == cindex.CursorKind.TYPE_REF: - tcursor = children[0] - self.type = Type(tcursor.type, tcursor) - else: - self.process_children = True - self.type = Type(self.cursor.type.get_canonical(), cursor=self.cursor) + self.type = Type(cursor.underlying_typedef_type, cursor) # vi:ts=4:et diff --git a/cldoc/tree.py b/cldoc/tree.py index 6b1acd6..bb1b56d 100644 --- a/cldoc/tree.py +++ b/cldoc/tree.py @@ -116,6 +116,40 @@ def __init__(self, files, flags): self.qid_to_node[None] = self.root self.usr_to_node[None] = self.root + def _lookup_node_from_cursor_despecialized(self, cursor): + template = cursor.specialized_cursor_template + + if template is None: + parent = self.lookup_node_from_cursor(cursor.semantic_parent) + else: + return self.lookup_node_from_cursor(template) + + if parent is None: + return None + + for child in parent.children: + if child.name == cursor.spelling: + return child + + return None + + def lookup_node_from_cursor(self, cursor): + if cursor is None: + return None + + # Try lookup by direct cursor reference + node = self.cursor_to_node[cursor] + + if not node is None: + return node + + node = self.usr_to_node[cursor.get_usr()] + + if not node is None: + return node + + return self._lookup_node_from_cursor_despecialized(cursor) + def filter_source(self, path): return path.endswith('.c') or path.endswith('.cpp') or path.endswith('.h') or path.endswith('.cc') or path.endswith('.hh') or path.endswith('.hpp') diff --git a/html/coffee/type.coffee b/html/coffee/type.coffee index 25072f9..499807b 100644 --- a/html/coffee/type.coffee +++ b/html/coffee/type.coffee @@ -46,6 +46,38 @@ class cldoc.Type extends cldoc.Node @append_plain_part(')') + @typeparts.push('') + @typeparts_text.push('') + else if @node.attr('class') == 'template' + @typeparts.push('') + @typeparts_text.push('') + + if @ref + a = cldoc.Page.make_link(@ref, @name) + + name = '' + a + '' + else + name = '' + e(@name) + '' + + @typeparts.push(name) + @typeparts_text.push(@name) + + @typeparts.push('') + @typeparts_text.push('') + + @append_plain_part('<') + + args = @node.children('template-arguments').first().children('type') + @args = [] + + for arg, i in args + if i != 0 + @append_plain_part(', ') + + @args.push(@append_type($(arg))) + + @append_plain_part('>') + @typeparts.push('') @typeparts_text.push('') else From c3a77e9ff76de975dd4149c770b4ae9e05b2cb38 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Mon, 2 Apr 2018 22:32:30 +0200 Subject: [PATCH 07/23] Add type template functions to cindex --- cldoc/clang/cindex-updates.patch | 166 ++++++++++++++++++++++++++++++- cldoc/clang/cindex.py | 16 +++ 2 files changed, 178 insertions(+), 4 deletions(-) diff --git a/cldoc/clang/cindex-updates.patch b/cldoc/clang/cindex-updates.patch index 0fccabb..92e800a 100644 --- a/cldoc/clang/cindex-updates.patch +++ b/cldoc/clang/cindex-updates.patch @@ -1,5 +1,133 @@ +diff --git a/cldoc/clang/cindex-updates.patch b/cldoc/clang/cindex-updates.patch +index 0fccabb..e69de29 100644 +--- a/cldoc/clang/cindex-updates.patch ++++ b/cldoc/clang/cindex-updates.patch +@@ -1,123 +0,0 @@ +-diff --git a/cldoc/clang/cindex.py b/cldoc/clang/cindex.py +-index b53661a..114d483 100644 +---- a/cldoc/clang/cindex.py +-+++ b/cldoc/clang/cindex.py +-@@ -1,3 +1,15 @@ +-+# This file is part of cldoc. cldoc is free software: you can +-+# redistribute it and/or modify it under the terms of the GNU General Public +-+# License as published by the Free Software Foundation, version 2. +-+# +-+# This program is distributed in the hope that it will be useful, but WITHOUT +-+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +-+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +-+# details. +-+# +-+# You should have received a copy of the GNU General Public License along with +-+# this program; if not, write to the Free Software Foundation, Inc., 51 +-+# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +- #===- cindex.py - Python Indexing Library Bindings -----------*- python -*--===# +- # +- # The LLVM Compiler Infrastructure +-@@ -65,7 +77,7 @@ call is efficient. +- from ctypes import * +- import collections +- +--import clang.enumerations +-+from . import enumerations +- +- import sys +- if sys.version_info[0] == 3: +-@@ -457,6 +469,13 @@ class Diagnostic(object): +- """The command-line option that enables this diagnostic.""" +- return conf.lib.clang_getDiagnosticOption(self, None) +- +-+ @property +-+ def format(self, options=-1): +-+ if options == -1: +-+ options = conf.lib.clang_defaultDiagnosticDisplayOptions() +-+ +-+ return conf.lib.clang_formatDiagnostic(self, options) +-+ +- @property +- def disable_option(self): +- """The command-line option that disables this diagnostic.""" +-@@ -1479,12 +1498,6 @@ class Cursor(Structure): +- """ +- return conf.lib.clang_CXXMethod_isVirtual(self) +- +-- def is_abstract_record(self): +-- """Returns True if the cursor refers to a C++ record declaration +-- that has pure virtual member functions. +-- """ +-- return conf.lib.clang_CXXRecord_isAbstract(self) +-- +- def is_scoped_enum(self): +- """Returns True if the cursor refers to a scoped enum declaration. +- """ +-@@ -1729,6 +1742,9 @@ class Cursor(Structure): +- +- return self._hash +- +-+ def __hash__(self): +-+ return self.hash +-+ +- @property +- def semantic_parent(self): +- """Return the semantic parent for this cursor.""" +-@@ -1860,6 +1876,20 @@ class Cursor(Structure): +- """ +- return conf.lib.clang_getFieldDeclBitWidth(self) +- +-+ @property +-+ def specialized_cursor_template(self): +-+ """ +-+ Retrieve the specialized cursor template. +-+ """ +-+ return conf.lib.clang_getSpecializedCursorTemplate(self) +-+ +-+ @property +-+ def template_cursor_kind(self): +-+ """ +-+ Retrieve the template cursor kind. +-+ """ +-+ return conf.lib.clang_getTemplateCursorKind(self) +-+ +- @staticmethod +- def from_result(res, fn, args): +- assert isinstance(res, Cursor) +-@@ -3407,10 +3437,6 @@ functionList = [ +- [Cursor], +- bool), +- +-- ("clang_CXXRecord_isAbstract", +-- [Cursor], +-- bool), +-- +- ("clang_EnumDecl_isScoped", +- [Cursor], +- bool), +-@@ -3432,6 +3458,15 @@ functionList = [ +- ("clang_disposeDiagnostic", +- [Diagnostic]), +- +-+ ("clang_defaultDiagnosticDisplayOptions", +-+ [], +-+ c_uint), +-+ +-+ ("clang_formatDiagnostic", +-+ [Diagnostic, c_uint], +-+ _CXString, +-+ _CXString.from_result), +-+ +- ("clang_disposeIndex", +- [Index]), +- +-@@ -4144,7 +4179,7 @@ class Config: +- return True +- +- def register_enumerations(): +-- for name, value in clang.enumerations.TokenKinds: +-+ for name, value in enumerations.TokenKinds: +- TokenKind.register(value, name) +- +- conf = Config() diff --git a/cldoc/clang/cindex.py b/cldoc/clang/cindex.py -index b53661a..114d483 100644 +index b53661a..39367ac 100644 --- a/cldoc/clang/cindex.py +++ b/cldoc/clang/cindex.py @@ -1,3 +1,15 @@ @@ -85,7 +213,21 @@ index b53661a..114d483 100644 @staticmethod def from_result(res, fn, args): assert isinstance(res, Cursor) -@@ -3407,10 +3437,6 @@ functionList = [ +@@ -2161,6 +2191,13 @@ class Type(Structure): + """Return the kind of this type.""" + return TypeKind.from_id(self._kind_id) + ++ def get_num_template_arguments(self): ++ return conf.lib.clang_Type_getNumTemplateArguments(self) ++ ++ def get_template_argument_type(self, num): ++ """Returns the CXType for the indicated template argument.""" ++ return conf.lib.clang_Type_getTemplateArgumentAsType(self, num) ++ + def argument_types(self): + """Retrieve a container for the non-variadic arguments for this type. + +@@ -3407,10 +3444,6 @@ functionList = [ [Cursor], bool), @@ -96,7 +238,7 @@ index b53661a..114d483 100644 ("clang_EnumDecl_isScoped", [Cursor], bool), -@@ -3432,6 +3458,15 @@ functionList = [ +@@ -3432,6 +3465,15 @@ functionList = [ ("clang_disposeDiagnostic", [Diagnostic]), @@ -112,7 +254,23 @@ index b53661a..114d483 100644 ("clang_disposeIndex", [Index]), -@@ -4144,7 +4179,7 @@ class Config: +@@ -3978,6 +4020,15 @@ functionList = [ + [Cursor], + c_longlong), + ++ ("clang_Type_getNumTemplateArguments", ++ [Type], ++ c_int), ++ ++ ("clang_Type_getTemplateArgumentAsType", ++ [Type, c_uint], ++ Type, ++ Type.from_result), ++ + ("clang_Type_getAlignOf", + [Type], + c_longlong), +@@ -4144,7 +4195,7 @@ class Config: return True def register_enumerations(): diff --git a/cldoc/clang/cindex.py b/cldoc/clang/cindex.py index 114d483..39367ac 100644 --- a/cldoc/clang/cindex.py +++ b/cldoc/clang/cindex.py @@ -2191,6 +2191,13 @@ def kind(self): """Return the kind of this type.""" return TypeKind.from_id(self._kind_id) + def get_num_template_arguments(self): + return conf.lib.clang_Type_getNumTemplateArguments(self) + + def get_template_argument_type(self, num): + """Returns the CXType for the indicated template argument.""" + return conf.lib.clang_Type_getTemplateArgumentAsType(self, num) + def argument_types(self): """Retrieve a container for the non-variadic arguments for this type. @@ -4013,6 +4020,15 @@ def cursor(self): [Cursor], c_longlong), + ("clang_Type_getNumTemplateArguments", + [Type], + c_int), + + ("clang_Type_getTemplateArgumentAsType", + [Type, c_uint], + Type, + Type.from_result), + ("clang_Type_getAlignOf", [Type], c_longlong), From 7795af34316c368cc84fa8378ddf13b2e9b75417 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Mon, 2 Apr 2018 22:33:06 +0200 Subject: [PATCH 08/23] Update build files --- cldoc/data/index.html | 18 +++++++++--------- cldoc/data/javascript/cldoc.js | 30 ++++++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/cldoc/data/index.html b/cldoc/data/index.html index 932e04c..a6d78de 100644 --- a/cldoc/data/index.html +++ b/cldoc/data/index.html @@ -4,17 +4,17 @@ Documentation - + - - - - - + + + + + diff --git a/cldoc/data/javascript/cldoc.js b/cldoc/data/javascript/cldoc.js index 6c4b321..186cfcb 100644 --- a/cldoc/data/javascript/cldoc.js +++ b/cldoc/data/javascript/cldoc.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.9.3 +// Generated by CoffeeScript 1.12.7 var escapeDiv, escapeElement, href, ref1, slice = [].slice, extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, @@ -1068,7 +1068,7 @@ cldoc.Type = (function(superClass) { extend(Type, superClass); function Type(node1) { - var a, arg, args, builtincls, e, i, j, len, name, result, subtype; + var a, arg, args, builtincls, e, i, j, len, len1, name, o, result, subtype; this.node = node1; Type.__super__.constructor.call(this, this.node); this.qualifier = this.node.attr('qualifier'); @@ -1107,6 +1107,32 @@ cldoc.Type = (function(superClass) { this.append_plain_part(')'); this.typeparts.push(''); this.typeparts_text.push(''); + } else if (this.node.attr('class') === 'template') { + this.typeparts.push(''); + this.typeparts_text.push(''); + if (this.ref) { + a = cldoc.Page.make_link(this.ref, this.name); + name = '' + a + ''; + } else { + name = '' + e(this.name) + ''; + } + this.typeparts.push(name); + this.typeparts_text.push(this.name); + this.typeparts.push(''); + this.typeparts_text.push(''); + this.append_plain_part('<'); + args = this.node.children('template-arguments').first().children('type'); + this.args = []; + for (i = o = 0, len1 = args.length; o < len1; i = ++o) { + arg = args[i]; + if (i !== 0) { + this.append_plain_part(', '); + } + this.args.push(this.append_type($(arg))); + } + this.append_plain_part('>'); + this.typeparts.push(''); + this.typeparts_text.push(''); } else { if (this.name) { if (this.node.attr('builtin')) { From bc005b192ea2f8559b45e4fa2e20716347ef20b7 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Mon, 2 Apr 2018 22:33:14 +0200 Subject: [PATCH 09/23] Fix diagnostics writing --- cldoc/tree.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cldoc/tree.py b/cldoc/tree.py index bb1b56d..437861d 100644 --- a/cldoc/tree.py +++ b/cldoc/tree.py @@ -212,7 +212,7 @@ def process(self): fatal = False for d in tu.diagnostics: - sys.stderr.write(d.format) + sys.stderr.write(d.format()) sys.stderr.write("\n") if d.severity == cindex.Diagnostic.Fatal or \ From d5eef67a46dfccb917ef4b991b7668cb002ef689 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Mon, 2 Apr 2018 23:12:33 +0200 Subject: [PATCH 10/23] Make compatible with llvm 3.9 --- cldoc/clang/cindex-updates.patch | 224 +++++++++++-------------------- cldoc/clang/cindex.py | 40 ------ 2 files changed, 82 insertions(+), 182 deletions(-) diff --git a/cldoc/clang/cindex-updates.patch b/cldoc/clang/cindex-updates.patch index 92e800a..b68147b 100644 --- a/cldoc/clang/cindex-updates.patch +++ b/cldoc/clang/cindex-updates.patch @@ -1,133 +1,5 @@ -diff --git a/cldoc/clang/cindex-updates.patch b/cldoc/clang/cindex-updates.patch -index 0fccabb..e69de29 100644 ---- a/cldoc/clang/cindex-updates.patch -+++ b/cldoc/clang/cindex-updates.patch -@@ -1,123 +0,0 @@ --diff --git a/cldoc/clang/cindex.py b/cldoc/clang/cindex.py --index b53661a..114d483 100644 ----- a/cldoc/clang/cindex.py --+++ b/cldoc/clang/cindex.py --@@ -1,3 +1,15 @@ --+# This file is part of cldoc. cldoc is free software: you can --+# redistribute it and/or modify it under the terms of the GNU General Public --+# License as published by the Free Software Foundation, version 2. --+# --+# This program is distributed in the hope that it will be useful, but WITHOUT --+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS --+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more --+# details. --+# --+# You should have received a copy of the GNU General Public License along with --+# this program; if not, write to the Free Software Foundation, Inc., 51 --+# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -- #===- cindex.py - Python Indexing Library Bindings -----------*- python -*--===# -- # -- # The LLVM Compiler Infrastructure --@@ -65,7 +77,7 @@ call is efficient. -- from ctypes import * -- import collections -- ---import clang.enumerations --+from . import enumerations -- -- import sys -- if sys.version_info[0] == 3: --@@ -457,6 +469,13 @@ class Diagnostic(object): -- """The command-line option that enables this diagnostic.""" -- return conf.lib.clang_getDiagnosticOption(self, None) -- --+ @property --+ def format(self, options=-1): --+ if options == -1: --+ options = conf.lib.clang_defaultDiagnosticDisplayOptions() --+ --+ return conf.lib.clang_formatDiagnostic(self, options) --+ -- @property -- def disable_option(self): -- """The command-line option that disables this diagnostic.""" --@@ -1479,12 +1498,6 @@ class Cursor(Structure): -- """ -- return conf.lib.clang_CXXMethod_isVirtual(self) -- --- def is_abstract_record(self): --- """Returns True if the cursor refers to a C++ record declaration --- that has pure virtual member functions. --- """ --- return conf.lib.clang_CXXRecord_isAbstract(self) --- -- def is_scoped_enum(self): -- """Returns True if the cursor refers to a scoped enum declaration. -- """ --@@ -1729,6 +1742,9 @@ class Cursor(Structure): -- -- return self._hash -- --+ def __hash__(self): --+ return self.hash --+ -- @property -- def semantic_parent(self): -- """Return the semantic parent for this cursor.""" --@@ -1860,6 +1876,20 @@ class Cursor(Structure): -- """ -- return conf.lib.clang_getFieldDeclBitWidth(self) -- --+ @property --+ def specialized_cursor_template(self): --+ """ --+ Retrieve the specialized cursor template. --+ """ --+ return conf.lib.clang_getSpecializedCursorTemplate(self) --+ --+ @property --+ def template_cursor_kind(self): --+ """ --+ Retrieve the template cursor kind. --+ """ --+ return conf.lib.clang_getTemplateCursorKind(self) --+ -- @staticmethod -- def from_result(res, fn, args): -- assert isinstance(res, Cursor) --@@ -3407,10 +3437,6 @@ functionList = [ -- [Cursor], -- bool), -- --- ("clang_CXXRecord_isAbstract", --- [Cursor], --- bool), --- -- ("clang_EnumDecl_isScoped", -- [Cursor], -- bool), --@@ -3432,6 +3458,15 @@ functionList = [ -- ("clang_disposeDiagnostic", -- [Diagnostic]), -- --+ ("clang_defaultDiagnosticDisplayOptions", --+ [], --+ c_uint), --+ --+ ("clang_formatDiagnostic", --+ [Diagnostic, c_uint], --+ _CXString, --+ _CXString.from_result), --+ -- ("clang_disposeIndex", -- [Index]), -- --@@ -4144,7 +4179,7 @@ class Config: -- return True -- -- def register_enumerations(): --- for name, value in clang.enumerations.TokenKinds: --+ for name, value in enumerations.TokenKinds: -- TokenKind.register(value, name) -- -- conf = Config() diff --git a/cldoc/clang/cindex.py b/cldoc/clang/cindex.py -index b53661a..39367ac 100644 +index b53661a..e58a2dd 100644 --- a/cldoc/clang/cindex.py +++ b/cldoc/clang/cindex.py @@ -1,3 +1,15 @@ @@ -169,7 +41,7 @@ index b53661a..39367ac 100644 @property def disable_option(self): """The command-line option that disables this diagnostic.""" -@@ -1479,12 +1498,6 @@ class Cursor(Structure): +@@ -1479,17 +1498,6 @@ class Cursor(Structure): """ return conf.lib.clang_CXXMethod_isVirtual(self) @@ -179,10 +51,49 @@ index b53661a..39367ac 100644 - """ - return conf.lib.clang_CXXRecord_isAbstract(self) - - def is_scoped_enum(self): - """Returns True if the cursor refers to a scoped enum declaration. +- def is_scoped_enum(self): +- """Returns True if the cursor refers to a scoped enum declaration. +- """ +- return conf.lib.clang_EnumDecl_isScoped(self) +- + def get_definition(self): + """ + If the cursor is a reference to a declaration or a declaration of +@@ -1565,14 +1573,6 @@ class Cursor(Structure): + + return LinkageKind.from_id(self._linkage) + +- @property +- def tls_kind(self): +- """Return the thread-local storage (TLS) kind of this cursor.""" +- if not hasattr(self, '_tls_kind'): +- self._tls_kind = conf.lib.clang_getCursorTLSKind(self) +- +- return TLSKind.from_id(self._tls_kind) +- + @property + def extent(self): """ -@@ -1729,6 +1742,9 @@ class Cursor(Structure): +@@ -1648,18 +1648,6 @@ class Cursor(Structure): + + return self._result_type + +- @property +- def exception_specification_kind(self): +- ''' +- Retrieve the exception specification kind, which is one of the values +- from the ExceptionSpecificationKind enumeration. +- ''' +- if not hasattr(self, '_exception_specification_kind'): +- exc_kind = conf.lib.clang_getCursorExceptionSpecificationType(self) +- self._exception_specification_kind = ExceptionSpecificationKind.from_id(exc_kind) +- +- return self._exception_specification_kind +- + @property + def underlying_typedef_type(self): + """Return the underlying type of a typedef declaration. +@@ -1729,6 +1717,9 @@ class Cursor(Structure): return self._hash @@ -192,7 +103,7 @@ index b53661a..39367ac 100644 @property def semantic_parent(self): """Return the semantic parent for this cursor.""" -@@ -1860,6 +1876,20 @@ class Cursor(Structure): +@@ -1860,6 +1851,20 @@ class Cursor(Structure): """ return conf.lib.clang_getFieldDeclBitWidth(self) @@ -213,7 +124,7 @@ index b53661a..39367ac 100644 @staticmethod def from_result(res, fn, args): assert isinstance(res, Cursor) -@@ -2161,6 +2191,13 @@ class Type(Structure): +@@ -2161,6 +2166,13 @@ class Type(Structure): """Return the kind of this type.""" return TypeKind.from_id(self._kind_id) @@ -227,7 +138,20 @@ index b53661a..39367ac 100644 def argument_types(self): """Retrieve a container for the non-variadic arguments for this type. -@@ -3407,10 +3444,6 @@ functionList = [ +@@ -2290,12 +2302,6 @@ class Type(Structure): + + return conf.lib.clang_isFunctionTypeVariadic(self) + +- def get_address_space(self): +- return conf.lib.clang_getAddressSpace(self) +- +- def get_typedef_name(self): +- return conf.lib.clang_getTypedefName(self) +- + def is_pod(self): + """Determine whether this Type represents plain old data (POD).""" + return conf.lib.clang_isPODType(self) +@@ -3407,14 +3413,6 @@ functionList = [ [Cursor], bool), @@ -235,10 +159,14 @@ index b53661a..39367ac 100644 - [Cursor], - bool), - - ("clang_EnumDecl_isScoped", - [Cursor], - bool), -@@ -3432,6 +3465,15 @@ functionList = [ +- ("clang_EnumDecl_isScoped", +- [Cursor], +- bool), +- + ("clang_defaultDiagnosticDisplayOptions", + [], + c_uint), +@@ -3432,6 +3430,15 @@ functionList = [ ("clang_disposeDiagnostic", [Diagnostic]), @@ -254,7 +182,19 @@ index b53661a..39367ac 100644 ("clang_disposeIndex", [Index]), -@@ -3978,6 +4020,15 @@ functionList = [ +@@ -3820,11 +3827,6 @@ functionList = [ + Type, + Type.from_result), + +- ("clang_getTypedefName", +- [Type], +- _CXString, +- _CXString.from_result), +- + ("clang_getTypeKindSpelling", + [c_uint], + _CXString, +@@ -3978,6 +3980,15 @@ functionList = [ [Cursor], c_longlong), @@ -270,7 +210,7 @@ index b53661a..39367ac 100644 ("clang_Type_getAlignOf", [Type], c_longlong), -@@ -4144,7 +4195,7 @@ class Config: +@@ -4144,7 +4155,7 @@ class Config: return True def register_enumerations(): diff --git a/cldoc/clang/cindex.py b/cldoc/clang/cindex.py index 39367ac..e58a2dd 100644 --- a/cldoc/clang/cindex.py +++ b/cldoc/clang/cindex.py @@ -1498,11 +1498,6 @@ def is_virtual_method(self): """ return conf.lib.clang_CXXMethod_isVirtual(self) - def is_scoped_enum(self): - """Returns True if the cursor refers to a scoped enum declaration. - """ - return conf.lib.clang_EnumDecl_isScoped(self) - def get_definition(self): """ If the cursor is a reference to a declaration or a declaration of @@ -1578,14 +1573,6 @@ def linkage(self): return LinkageKind.from_id(self._linkage) - @property - def tls_kind(self): - """Return the thread-local storage (TLS) kind of this cursor.""" - if not hasattr(self, '_tls_kind'): - self._tls_kind = conf.lib.clang_getCursorTLSKind(self) - - return TLSKind.from_id(self._tls_kind) - @property def extent(self): """ @@ -1661,18 +1648,6 @@ def result_type(self): return self._result_type - @property - def exception_specification_kind(self): - ''' - Retrieve the exception specification kind, which is one of the values - from the ExceptionSpecificationKind enumeration. - ''' - if not hasattr(self, '_exception_specification_kind'): - exc_kind = conf.lib.clang_getCursorExceptionSpecificationType(self) - self._exception_specification_kind = ExceptionSpecificationKind.from_id(exc_kind) - - return self._exception_specification_kind - @property def underlying_typedef_type(self): """Return the underlying type of a typedef declaration. @@ -2327,12 +2302,6 @@ def is_function_variadic(self): return conf.lib.clang_isFunctionTypeVariadic(self) - def get_address_space(self): - return conf.lib.clang_getAddressSpace(self) - - def get_typedef_name(self): - return conf.lib.clang_getTypedefName(self) - def is_pod(self): """Determine whether this Type represents plain old data (POD).""" return conf.lib.clang_isPODType(self) @@ -3444,10 +3413,6 @@ def cursor(self): [Cursor], bool), - ("clang_EnumDecl_isScoped", - [Cursor], - bool), - ("clang_defaultDiagnosticDisplayOptions", [], c_uint), @@ -3862,11 +3827,6 @@ def cursor(self): Type, Type.from_result), - ("clang_getTypedefName", - [Type], - _CXString, - _CXString.from_result), - ("clang_getTypeKindSpelling", [c_uint], _CXString, From d7c80f4c87e43d81a8aaf822eeacf6b1e1f4cdfe Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Mon, 2 Apr 2018 23:37:17 +0200 Subject: [PATCH 11/23] Added .npmrc --- .npmrc | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .npmrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..40f0dd1 --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +package-lock = false +save = false From ee66a09076c1f790831ca37fa6137faa26a0f225 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Tue, 3 Apr 2018 00:22:02 +0200 Subject: [PATCH 12/23] Add clang version requirement to README --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index f098bef..6ab0dc9 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,10 @@ non-intrusive and robust approach. For more information, please visit http://jessevdk.github.com/cldoc. +# Requirements + +cldoc requires clang 3.9 or later to be installed on the system. + # Get started now! To get started using cldoc, please have a look at [Getting started](http://jessevdk.github.com/cldoc/gettingstarted.html) to install cldoc. Then explore how From 0d4dfce4ad7ea97819f2c83fc1a99cbd4699cf0a Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Tue, 3 Apr 2018 00:22:31 +0200 Subject: [PATCH 13/23] Update cldoc-static dependencies --- cldoc-static/lib/cldoc-static.js | 25 +++++++++++++++---------- cldoc-static/package.json | 6 +++--- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/cldoc-static/lib/cldoc-static.js b/cldoc-static/lib/cldoc-static.js index 80abff4..8952fe1 100644 --- a/cldoc-static/lib/cldoc-static.js +++ b/cldoc-static/lib/cldoc-static.js @@ -31,13 +31,15 @@ function run(htmldir, outdir) { var xmldoc = (new xmldom.DOMParser()).parseFromString(x); - var doc = jsdom.jsdom(indexhtml, { - features: { - FetchExternalResources: ['script'], - ProcessExternalResources: ["script"], - }, + var virtualConsole = new jsdom.VirtualConsole(); + + var dom = new jsdom.JSDOM(indexhtml, { + runScripts: "dangerously", + virtualConsole: virtualConsole }); + var doc = dom.window.document; + if (doc.errors) { for (var e = 0; e < doc.errors.length; e++) { console.error(doc.errors[e].message); @@ -47,7 +49,7 @@ function run(htmldir, outdir) { process.exit(1); } - var window = doc.defaultView; + var window = dom.window; var $ = window.jQuery; var cldoc = window.cldoc; @@ -117,9 +119,12 @@ function run(htmldir, outdir) { $('head').append(link); // Write resulting html to .html - fs.writeFileSync(path.join(outdir, name + '.html'), html(jsdom.serializeDocument(doc), { - max_preserve_newlines: 1 - })); + var serialized = html(dom.serialize(), { + max_preserve_newlines: 1, + end_with_newline: true + }); + + fs.writeFileSync(path.join(outdir, name + '.html'), serialized); } // Write css to styles/cldoc.css @@ -134,4 +139,4 @@ function run(htmldir, outdir) { module.exports = { run: run -}; \ No newline at end of file +}; diff --git a/cldoc-static/package.json b/cldoc-static/package.json index abe5f5f..cc486ab 100644 --- a/cldoc-static/package.json +++ b/cldoc-static/package.json @@ -24,8 +24,8 @@ }, "homepage": "https://github.com/jessevdk/cldoc#readme", "dependencies": { - "js-beautify": "^1.5.10", - "jsdom": "^3.1.2", - "xmldom": "^0.1.19" + "js-beautify": "^1.7.5", + "jsdom": "^11.7.0", + "xmldom": "^0.1.27" } } From 2337f4dc68ed32a32c75d595823b1f5bfa03179b Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Tue, 3 Apr 2018 00:23:14 +0200 Subject: [PATCH 14/23] Fix anonymous typedefs --- cldoc/nodes/typedef.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cldoc/nodes/typedef.py b/cldoc/nodes/typedef.py index 8862ce2..a5f9775 100644 --- a/cldoc/nodes/typedef.py +++ b/cldoc/nodes/typedef.py @@ -21,6 +21,13 @@ class Typedef(Node): def __init__(self, cursor, comment): Node.__init__(self, cursor, comment) + children = [child for child in cursor.get_children()] + + if len(children) == 1 and children[0].kind == cindex.CursorKind.TYPE_REF: + cursor = children[0] + else: + self.process_children = True + self.type = Type(cursor.underlying_typedef_type, cursor) # vi:ts=4:et From 03ec202588e4d416735e7dbac5a14a93f3150f47 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Tue, 3 Apr 2018 00:23:34 +0200 Subject: [PATCH 15/23] Fix static tests --- cldoc/data/index.html | 5 +---- html/index.html | 5 +---- tests/output/abstract-A.html.static | 4 ++-- tests/output/abstract-index.html.static | 1 - tests/output/base-A.html.static | 4 ++-- tests/output/base-Base.html.static | 4 ++-- tests/output/base-index.html.static | 1 - tests/output/class-A.html.static | 4 ++-- tests/output/class-index.html.static | 1 - tests/output/constructor-A.html.static | 4 ++-- tests/output/constructor-index.html.static | 1 - tests/output/cstruct-A.html.static | 4 ++-- tests/output/cstruct-index.html.static | 1 - tests/output/destructor-A.html.static | 4 ++-- tests/output/destructor-index.html.static | 1 - tests/output/enum-index.html.static | 1 - tests/output/functionpointer-index.html.static | 3 +-- tests/output/interface-A.html.static | 4 ++-- tests/output/interface-Impl.html.static | 4 ++-- tests/output/interface-index.html.static | 1 - tests/output/method-A.html.static | 4 ++-- tests/output/method-index.html.static | 1 - tests/output/multins-foo.A.html.static | 5 +++-- tests/output/multins-foo.B.html.static | 5 +++-- tests/output/multins-foo.html.static | 4 ++-- tests/output/multins-index.html.static | 1 - tests/output/namespace-A.B.html.static | 4 ++-- tests/output/namespace-A.html.static | 4 ++-- tests/output/namespace-index.html.static | 1 - tests/output/operator-N.A.html.static | 4 ++-- tests/output/operator-N.html.static | 4 ++-- tests/output/operator-index.html.static | 1 - tests/output/struct-A.html.static | 4 ++-- tests/output/struct-index.html.static | 1 - tests/output/template-A.html.static | 4 ++-- tests/output/template-index.html.static | 1 - tests/output/union-index.html.static | 1 - tests/output/unionanonstruct-index.html.static | 1 - tests/output/utf8-A.html.static | 4 ++-- tests/output/utf8-index.html.static | 1 - tests/output/virtual-A.html.static | 4 ++-- tests/output/virtual-index.html.static | 1 - 42 files changed, 47 insertions(+), 70 deletions(-) diff --git a/cldoc/data/index.html b/cldoc/data/index.html index a6d78de..208dc68 100644 --- a/cldoc/data/index.html +++ b/cldoc/data/index.html @@ -1,4 +1,4 @@ - + Documentation @@ -26,6 +26,3 @@ - - - diff --git a/html/index.html b/html/index.html index 26037de..24d1025 100644 --- a/html/index.html +++ b/html/index.html @@ -1,4 +1,4 @@ - + Documentation @@ -23,6 +23,3 @@ - - - diff --git a/tests/output/abstract-A.html.static b/tests/output/abstract-A.html.static index 5454073..edd31a3 100644 --- a/tests/output/abstract-A.html.static +++ b/tests/output/abstract-A.html.static @@ -26,7 +26,8 @@
-

ClassA

+

ClassA +

Member Functions

@@ -76,4 +77,3 @@ - \ No newline at end of file diff --git a/tests/output/abstract-index.html.static b/tests/output/abstract-index.html.static index 32f5328..06b8545 100644 --- a/tests/output/abstract-index.html.static +++ b/tests/output/abstract-index.html.static @@ -33,4 +33,3 @@ - \ No newline at end of file diff --git a/tests/output/base-A.html.static b/tests/output/base-A.html.static index 5d9c74f..d691b1d 100644 --- a/tests/output/base-A.html.static +++ b/tests/output/base-A.html.static @@ -30,7 +30,8 @@
-

ClassA

+

ClassA +

The class A.

@@ -80,4 +81,3 @@ - \ No newline at end of file diff --git a/tests/output/base-Base.html.static b/tests/output/base-Base.html.static index a449a5f..68ebc68 100644 --- a/tests/output/base-Base.html.static +++ b/tests/output/base-Base.html.static @@ -30,7 +30,8 @@
-

ClassBase

+

ClassBase +

Subclasses

@@ -73,4 +74,3 @@ - \ No newline at end of file diff --git a/tests/output/base-index.html.static b/tests/output/base-index.html.static index 2258e69..6cf453b 100644 --- a/tests/output/base-index.html.static +++ b/tests/output/base-index.html.static @@ -38,4 +38,3 @@ - \ No newline at end of file diff --git a/tests/output/class-A.html.static b/tests/output/class-A.html.static index ee8b1e6..bab6dae 100644 --- a/tests/output/class-A.html.static +++ b/tests/output/class-A.html.static @@ -18,7 +18,8 @@
-

ClassA

+

ClassA +

The class A.

@@ -30,4 +31,3 @@ - \ No newline at end of file diff --git a/tests/output/class-index.html.static b/tests/output/class-index.html.static index 32f5328..06b8545 100644 --- a/tests/output/class-index.html.static +++ b/tests/output/class-index.html.static @@ -33,4 +33,3 @@ - \ No newline at end of file diff --git a/tests/output/constructor-A.html.static b/tests/output/constructor-A.html.static index e2597eb..4f0d42f 100644 --- a/tests/output/constructor-A.html.static +++ b/tests/output/constructor-A.html.static @@ -26,7 +26,8 @@
-

ClassA

+

ClassA +

Constructors

@@ -53,4 +54,3 @@ - \ No newline at end of file diff --git a/tests/output/constructor-index.html.static b/tests/output/constructor-index.html.static index 32f5328..06b8545 100644 --- a/tests/output/constructor-index.html.static +++ b/tests/output/constructor-index.html.static @@ -33,4 +33,3 @@ - \ No newline at end of file diff --git a/tests/output/cstruct-A.html.static b/tests/output/cstruct-A.html.static index 6351fa2..8b159bb 100644 --- a/tests/output/cstruct-A.html.static +++ b/tests/output/cstruct-A.html.static @@ -30,7 +30,8 @@
-

StructA

+

StructA +

Fields

@@ -166,4 +167,3 @@ - \ No newline at end of file diff --git a/tests/output/cstruct-index.html.static b/tests/output/cstruct-index.html.static index 1caebe3..71901ff 100644 --- a/tests/output/cstruct-index.html.static +++ b/tests/output/cstruct-index.html.static @@ -33,4 +33,3 @@ - \ No newline at end of file diff --git a/tests/output/destructor-A.html.static b/tests/output/destructor-A.html.static index 4131e23..11b9602 100644 --- a/tests/output/destructor-A.html.static +++ b/tests/output/destructor-A.html.static @@ -26,7 +26,8 @@
-

ClassA

+

ClassA +

Destructors

@@ -53,4 +54,3 @@ - \ No newline at end of file diff --git a/tests/output/destructor-index.html.static b/tests/output/destructor-index.html.static index 32f5328..06b8545 100644 --- a/tests/output/destructor-index.html.static +++ b/tests/output/destructor-index.html.static @@ -33,4 +33,3 @@ - \ No newline at end of file diff --git a/tests/output/enum-index.html.static b/tests/output/enum-index.html.static index be10ef4..dea81b9 100644 --- a/tests/output/enum-index.html.static +++ b/tests/output/enum-index.html.static @@ -57,4 +57,3 @@ - \ No newline at end of file diff --git a/tests/output/functionpointer-index.html.static b/tests/output/functionpointer-index.html.static index fcb3aa0..3f14aaf 100644 --- a/tests/output/functionpointer-index.html.static +++ b/tests/output/functionpointer-index.html.static @@ -33,7 +33,7 @@
@@ -58,4 +58,3 @@ - \ No newline at end of file diff --git a/tests/output/interface-A.html.static b/tests/output/interface-A.html.static index d89cf87..1493193 100644 --- a/tests/output/interface-A.html.static +++ b/tests/output/interface-A.html.static @@ -30,7 +30,8 @@
-

ClassA

+

ClassA +

The class A.

@@ -79,4 +80,3 @@ - \ No newline at end of file diff --git a/tests/output/interface-Impl.html.static b/tests/output/interface-Impl.html.static index ed51f21..ebf5482 100644 --- a/tests/output/interface-Impl.html.static +++ b/tests/output/interface-Impl.html.static @@ -30,7 +30,8 @@
-

ClassImpl

+

ClassImpl +

The Impl class.

@@ -80,4 +81,3 @@ - \ No newline at end of file diff --git a/tests/output/interface-index.html.static b/tests/output/interface-index.html.static index 184b663..00b62c8 100644 --- a/tests/output/interface-index.html.static +++ b/tests/output/interface-index.html.static @@ -38,4 +38,3 @@ - \ No newline at end of file diff --git a/tests/output/method-A.html.static b/tests/output/method-A.html.static index 98f9dda..e811323 100644 --- a/tests/output/method-A.html.static +++ b/tests/output/method-A.html.static @@ -26,7 +26,8 @@
-

ClassA

+

ClassA +

Member Functions

@@ -72,4 +73,3 @@ - \ No newline at end of file diff --git a/tests/output/method-index.html.static b/tests/output/method-index.html.static index 32f5328..06b8545 100644 --- a/tests/output/method-index.html.static +++ b/tests/output/method-index.html.static @@ -33,4 +33,3 @@ - \ No newline at end of file diff --git a/tests/output/multins-foo.A.html.static b/tests/output/multins-foo.A.html.static index bcd2003..e1c6023 100644 --- a/tests/output/multins-foo.A.html.static +++ b/tests/output/multins-foo.A.html.static @@ -18,9 +18,10 @@
-

Classfoo::A

+

Classfoo::A +

+
- \ No newline at end of file diff --git a/tests/output/multins-foo.B.html.static b/tests/output/multins-foo.B.html.static index 1a5c19b..7d9fe5b 100644 --- a/tests/output/multins-foo.B.html.static +++ b/tests/output/multins-foo.B.html.static @@ -18,9 +18,10 @@
-

Classfoo::B

+

Classfoo::B +

+ - \ No newline at end of file diff --git a/tests/output/multins-foo.html.static b/tests/output/multins-foo.html.static index 65d8c72..38c678f 100644 --- a/tests/output/multins-foo.html.static +++ b/tests/output/multins-foo.html.static @@ -23,7 +23,8 @@
-

Namespacefoo

+

Namespacefoo +

Classes

int ( *)(int , int) + class="plain">, int)
@@ -42,4 +43,3 @@ - \ No newline at end of file diff --git a/tests/output/multins-index.html.static b/tests/output/multins-index.html.static index 30aab55..41b848d 100644 --- a/tests/output/multins-index.html.static +++ b/tests/output/multins-index.html.static @@ -41,4 +41,3 @@ - \ No newline at end of file diff --git a/tests/output/namespace-A.B.html.static b/tests/output/namespace-A.B.html.static index 49a281b..0c52822 100644 --- a/tests/output/namespace-A.B.html.static +++ b/tests/output/namespace-A.B.html.static @@ -18,7 +18,8 @@
-

ClassA::B

+

ClassA::B +

Class B in namespace A.

@@ -29,4 +30,3 @@ - \ No newline at end of file diff --git a/tests/output/namespace-A.html.static b/tests/output/namespace-A.html.static index 24f4101..a8bbf3f 100644 --- a/tests/output/namespace-A.html.static +++ b/tests/output/namespace-A.html.static @@ -42,7 +42,8 @@
-

NamespaceA

+

NamespaceA +

Longer description of namespace A.

@@ -118,4 +119,3 @@ - \ No newline at end of file diff --git a/tests/output/namespace-index.html.static b/tests/output/namespace-index.html.static index 5f84c06..597f848 100644 --- a/tests/output/namespace-index.html.static +++ b/tests/output/namespace-index.html.static @@ -48,4 +48,3 @@ - \ No newline at end of file diff --git a/tests/output/operator-N.A.html.static b/tests/output/operator-N.A.html.static index 2e24465..3d3f543 100644 --- a/tests/output/operator-N.A.html.static +++ b/tests/output/operator-N.A.html.static @@ -26,7 +26,8 @@
-

StructN::A

+

StructN::A +

Member Functions

@@ -111,4 +112,3 @@ - \ No newline at end of file diff --git a/tests/output/operator-N.html.static b/tests/output/operator-N.html.static index c5f38a3..0b71e4e 100644 --- a/tests/output/operator-N.html.static +++ b/tests/output/operator-N.html.static @@ -22,7 +22,8 @@
-

NamespaceN

+

NamespaceN +

Structures

@@ -37,4 +38,3 @@ - \ No newline at end of file diff --git a/tests/output/operator-index.html.static b/tests/output/operator-index.html.static index c7db11f..0a0e82f 100644 --- a/tests/output/operator-index.html.static +++ b/tests/output/operator-index.html.static @@ -37,4 +37,3 @@ - \ No newline at end of file diff --git a/tests/output/struct-A.html.static b/tests/output/struct-A.html.static index f92d15f..d3a7e4f 100644 --- a/tests/output/struct-A.html.static +++ b/tests/output/struct-A.html.static @@ -18,7 +18,8 @@
-

StructA

+

StructA +

A longer description of A.

@@ -29,4 +30,3 @@ - \ No newline at end of file diff --git a/tests/output/struct-index.html.static b/tests/output/struct-index.html.static index 717a17a..4f8db77 100644 --- a/tests/output/struct-index.html.static +++ b/tests/output/struct-index.html.static @@ -41,4 +41,3 @@ - \ No newline at end of file diff --git a/tests/output/template-A.html.static b/tests/output/template-A.html.static index 0ae8b8a..2e968dd 100644 --- a/tests/output/template-A.html.static +++ b/tests/output/template-A.html.static @@ -34,7 +34,8 @@
-

ClassA<T>

+

ClassA<T> +

A longer description of A.

@@ -110,4 +111,3 @@ - \ No newline at end of file diff --git a/tests/output/template-index.html.static b/tests/output/template-index.html.static index 6a6d59d..88c390c 100644 --- a/tests/output/template-index.html.static +++ b/tests/output/template-index.html.static @@ -41,4 +41,3 @@ - \ No newline at end of file diff --git a/tests/output/union-index.html.static b/tests/output/union-index.html.static index 55c5349..ed58c74 100644 --- a/tests/output/union-index.html.static +++ b/tests/output/union-index.html.static @@ -48,4 +48,3 @@ - \ No newline at end of file diff --git a/tests/output/unionanonstruct-index.html.static b/tests/output/unionanonstruct-index.html.static index 4d9ecad..b095eb5 100644 --- a/tests/output/unionanonstruct-index.html.static +++ b/tests/output/unionanonstruct-index.html.static @@ -113,4 +113,3 @@ - \ No newline at end of file diff --git a/tests/output/utf8-A.html.static b/tests/output/utf8-A.html.static index 4d20e41..680443d 100644 --- a/tests/output/utf8-A.html.static +++ b/tests/output/utf8-A.html.static @@ -18,7 +18,8 @@
-

ClassA

+

ClassA +

Copyright ©

@@ -29,4 +30,3 @@ - \ No newline at end of file diff --git a/tests/output/utf8-index.html.static b/tests/output/utf8-index.html.static index a68c658..09f2630 100644 --- a/tests/output/utf8-index.html.static +++ b/tests/output/utf8-index.html.static @@ -41,4 +41,3 @@ - \ No newline at end of file diff --git a/tests/output/virtual-A.html.static b/tests/output/virtual-A.html.static index 6cd7860..dd3e2f8 100644 --- a/tests/output/virtual-A.html.static +++ b/tests/output/virtual-A.html.static @@ -26,7 +26,8 @@
-

ClassA

+

ClassA +

Member Functions

@@ -75,4 +76,3 @@ - \ No newline at end of file diff --git a/tests/output/virtual-index.html.static b/tests/output/virtual-index.html.static index 32f5328..06b8545 100644 --- a/tests/output/virtual-index.html.static +++ b/tests/output/virtual-index.html.static @@ -33,4 +33,3 @@ - \ No newline at end of file From 4afb0e7bf86e6f1b139be4882cbcf9b09a9663f1 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Tue, 3 Apr 2018 21:50:44 +0200 Subject: [PATCH 16/23] Ignore typedefs for template arguments --- cldoc/nodes/ctype.py | 41 +++++------------------------------------ 1 file changed, 5 insertions(+), 36 deletions(-) diff --git a/cldoc/nodes/ctype.py b/cldoc/nodes/ctype.py index e3582ec..0f23f1f 100644 --- a/cldoc/nodes/ctype.py +++ b/cldoc/nodes/ctype.py @@ -152,33 +152,11 @@ def _extract_constant_array_type(self, tp): self._element_type = Type(tp.get_array_element_type()) self._array_size = tp.get_array_size() - def _extract_default_template_types(self, tp): - decl = tp.get_declaration() - - while decl and decl.kind != cindex.CursorKind.CLASS_TEMPLATE: - decl = decl.specialized_cursor_template - - if decl is None: - return None - - default_template_types = [] - - for child in decl.get_children(): - if child.kind != cindex.CursorKind.TEMPLATE_TYPE_PARAMETER: - continue - - default_type = None - - for cursor in child.get_children(): - if cursor.kind == cindex.CursorKind.TYPE_REF: - default_type = cursor.type - break - - default_template_types.append(default_type) - - return default_template_types - def _extract_template_argument_types(self, tp): + # Ignore typedefs, we don't want to get any template arguments + if tp.get_declaration().kind == cindex.CursorKind.TYPEDEF_DECL: + return + num_template_arguments = tp.get_num_template_arguments() if num_template_arguments <= 0: @@ -192,7 +170,7 @@ def _extract_template_argument_types(self, tp): is_default = False - self._template_arguments.append(TemplateArgumentType(template_argument_type, is_default)) + self._template_arguments.append(Type(template_argument_type)) def _extract_subtypes(self, tp): self._extract_constant_array_type(tp) @@ -273,13 +251,4 @@ def qualifier_string(self): return ret -class TemplateArgumentType(Type): - def __init__(self, type, is_default=False): - Type.__init__(self, type) - self._is_default = is_default - - @property - def is_default(self): - return self._is_default - # vi:ts=4:et From ef25baf3ef6900ae910f8bc07c2594e5a90d4405 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Tue, 3 Apr 2018 21:55:09 +0200 Subject: [PATCH 17/23] Remove unneeded is_default --- cldoc/nodes/ctype.py | 3 --- tests/regression.py | 6 +++--- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/cldoc/nodes/ctype.py b/cldoc/nodes/ctype.py index 0f23f1f..1f04175 100644 --- a/cldoc/nodes/ctype.py +++ b/cldoc/nodes/ctype.py @@ -167,9 +167,6 @@ def _extract_template_argument_types(self, tp): for i in range(0, num_template_arguments): template_argument_type = tp.get_template_argument_type(i) - - is_default = False - self._template_arguments.append(Type(template_argument_type)) def _extract_subtypes(self, tp): diff --git a/tests/regression.py b/tests/regression.py index e185189..5e1fe19 100644 --- a/tests/regression.py +++ b/tests/regression.py @@ -92,10 +92,10 @@ def generate_tests(): t = create_test(hname, files, ofiles) setattr(Regression, t.__name__, t) - ofiles = glob.glob(os.path.join(dname, 'output', hname + '-*.html.static')) + # ofiles = glob.glob(os.path.join(dname, 'output', hname + '-*.html.static')) - t = create_test_static(hname, files, ofiles) - setattr(Regression, t.__name__, t) + # t = create_test_static(hname, files, ofiles) + # setattr(Regression, t.__name__, t) os.environ['CLDOC_DEV'] = '1' From 443c3c1c1a4c8414b178b51a6c3eae9b6d8eb666 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Tue, 3 Apr 2018 21:55:15 +0200 Subject: [PATCH 18/23] Fix typedef cursor --- cldoc/nodes/typedef.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cldoc/nodes/typedef.py b/cldoc/nodes/typedef.py index a5f9775..866ec65 100644 --- a/cldoc/nodes/typedef.py +++ b/cldoc/nodes/typedef.py @@ -24,10 +24,11 @@ def __init__(self, cursor, comment): children = [child for child in cursor.get_children()] if len(children) == 1 and children[0].kind == cindex.CursorKind.TYPE_REF: - cursor = children[0] + typecursor = children[0] else: self.process_children = True + typecursor = cursor - self.type = Type(cursor.underlying_typedef_type, cursor) + self.type = Type(cursor.underlying_typedef_type, typecursor) # vi:ts=4:et From 44e6e4009eabd379f6d89c4c42940fbee89b2faa Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Tue, 3 Apr 2018 21:55:24 +0200 Subject: [PATCH 19/23] Restore static tests --- tests/regression.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/regression.py b/tests/regression.py index 5e1fe19..e185189 100644 --- a/tests/regression.py +++ b/tests/regression.py @@ -92,10 +92,10 @@ def generate_tests(): t = create_test(hname, files, ofiles) setattr(Regression, t.__name__, t) - # ofiles = glob.glob(os.path.join(dname, 'output', hname + '-*.html.static')) + ofiles = glob.glob(os.path.join(dname, 'output', hname + '-*.html.static')) - # t = create_test_static(hname, files, ofiles) - # setattr(Regression, t.__name__, t) + t = create_test_static(hname, files, ofiles) + setattr(Regression, t.__name__, t) os.environ['CLDOC_DEV'] = '1' From 324fc370b8d75e6b4b47af13886c4ecf1ca6dcf2 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Tue, 3 Apr 2018 21:55:36 +0200 Subject: [PATCH 20/23] Add template reference test --- tests/input/templatereference.hh | 14 +++ .../templatereference-index.html.static | 98 +++++++++++++++++++ tests/output/templatereference-index.xml | 25 +++++ 3 files changed, 137 insertions(+) create mode 100644 tests/input/templatereference.hh create mode 100644 tests/output/templatereference-index.html.static create mode 100644 tests/output/templatereference-index.xml diff --git a/tests/input/templatereference.hh b/tests/input/templatereference.hh new file mode 100644 index 0000000..654e17d --- /dev/null +++ b/tests/input/templatereference.hh @@ -0,0 +1,14 @@ +#include +#include + +/** + * Foo method. + */ +std::list foo(); + +template +struct WithInner { + typedef T Type; +}; + +typedef std::list::Type> WithInnerIntType; diff --git a/tests/output/templatereference-index.html.static b/tests/output/templatereference-index.html.static new file mode 100644 index 0000000..600810e --- /dev/null +++ b/tests/output/templatereference-index.html.static @@ -0,0 +1,98 @@ + + + + + Documentation + + + + + + +
+
+
+
Typedefs
+ +
Structures
+ +
Functions
+
    +
  • foo +
    +

    *

    +
    +
  • +
+
+
+
+

Typedefs

+
+ + + + + + + + + + +
WithInnerIntTypetypestd::list<WithInner<int>::Type + > + + + +
+

Structures

+ + + + + + + +
WithInner<T>
+

Functions

+
+
+
+
std::list<std::string> + + +
+ + + + + + + + + +
foo()
+
+
+

Foo method.

+
+ + + + + + + +
return
+
+
+
+ + + + diff --git a/tests/output/templatereference-index.xml b/tests/output/templatereference-index.xml new file mode 100644 index 0000000..150ee9c --- /dev/null +++ b/tests/output/templatereference-index.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + * + Foo method. + + + + + + + + + + From 86ca9537b3f404e905e9515ecdd44ee08bb19121 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Tue, 3 Apr 2018 21:57:29 +0200 Subject: [PATCH 21/23] Bump libclang1 in travis to 3.9 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index db4305c..d218082 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ python: before_install: - sudo apt-get update -qq - - sudo apt-get install -y libclang1-3.4 + - sudo apt-get install -y libclang1-3.9 install: - (cd cldoc-static && npm install) From fc7f59405c4a891b8367c80a700f5aa3c5c9230c Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Wed, 4 Apr 2018 07:52:00 +0200 Subject: [PATCH 22/23] Use libclang 4 for travis --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d218082..1ac8ca3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,8 +4,10 @@ python: - "2.7" before_install: + - curl https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - + - echo "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-4.0 main" | sudo tee -a /etc/apt/sources.list - sudo apt-get update -qq - - sudo apt-get install -y libclang1-3.9 + - sudo apt-get install -y libclang1-4.0 install: - (cd cldoc-static && npm install) From f8b4eab5aae3776910b49e8d069c2cbb5ea63fb9 Mon Sep 17 00:00:00 2001 From: Alexandre Tuleu Date: Mon, 28 Oct 2019 13:07:04 +0100 Subject: [PATCH 23/23] Allows to use a different clang version than the default system one For some project using new c++ features it maybe useful to for the use of a specific verison of clang. This very small patch allow this use by setting up an environment variable. The use of an environment variable is forced by tree.py that locates the libclang statically and not using an argument. Otherwise an argument to generate command would have been preffered. --- cldoc/includepaths.py | 6 +++++- cldoc/tree.py | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/cldoc/includepaths.py b/cldoc/includepaths.py index 4f3c2ae..1c9a278 100644 --- a/cldoc/includepaths.py +++ b/cldoc/includepaths.py @@ -14,11 +14,15 @@ from . import utf8 +versionned_clang = 'clang++' +if "CLDOC_CLANG_VERSION" in os.environ: + versionned_clang = 'clang++-' + os.environ["CLDOC_CLANG_VERSION"] + def flags(f): devnull = open(os.devnull) try: - p = subprocess.Popen(['clang++', '-E', '-xc++'] + f + ['-v', '-'], + p = subprocess.Popen([versionned_clang, '-E', '-xc++'] + f + ['-v', '-'], stdin=devnull, stdout=subprocess.PIPE, stderr=subprocess.PIPE) diff --git a/cldoc/tree.py b/cldoc/tree.py index 437861d..a22b447 100644 --- a/cldoc/tree.py +++ b/cldoc/tree.py @@ -15,6 +15,7 @@ from .clang import cindex import tempfile import functools +import os from .defdict import Defdict @@ -55,6 +56,9 @@ else: versions = [None, '7.0', '6.0', '5.0', '4.0', '3.9', '3.8', '3.7', '3.6', '3.5', '3.4', '3.3', '3.2'] + if "CLDOC_CLANG_VERSION" in os.environ: + versions = [None , os.environ["CLDOC_CLANG_VERSION"] ] + for v in versions: name = 'clang'