Submitted By: William Harrington (kb0iic at cross-lfs dot org) Date: 2014-09-26 Initial Package Version: 7.4 Origin: Upstream Upstream Status: Applied Description: Contains all upstream patches up to 7.4.460. diff -Naur vim74.orig/.hg_archival.txt vim74/.hg_archival.txt --- vim74.orig/.hg_archival.txt 1970-01-01 00:00:00.000000000 +0000 +++ vim74/.hg_archival.txt 2014-09-27 01:00:28.907180028 +0000 @@ -0,0 +1,5 @@ +repo: 770908d1cb47c04be0aef5c173b17ab8be6b6476 +node: 3d9d6241de2b31eb1dd0a822b09d17081e32189d +branch: default +latesttag: v7-4-460 +latesttagdistance: 1 diff -Naur vim74.orig/.hgignore vim74/.hgignore --- vim74.orig/.hgignore 1970-01-01 00:00:00.000000000 +0000 +++ vim74/.hgignore 2014-09-27 01:00:28.947179928 +0000 @@ -0,0 +1,75 @@ +syntax: glob + +# Unixen: object and executable files. +*.o +src/vim +src/xxd/xxd +src/auto/if_perl.c +src/tags + +# We do need src/auto/configure. +src/auto/config.aap +src/auto/config.cache +src/auto/config.h +src/auto/config.log +src/auto/config.mk +src/auto/config.status +src/auto/configure.aap +src/auto/osdef.h +src/auto/link.log +src/auto/link.sed +src/auto/pathdef.c + +# Windows +*.exe +*.idb +*.manifest +*.exp +*.obj +*.pdb +*.ilk +*.sln +*.suo +*.res +*.RES +src/if_perl.c +src/pathdef.c +src/Obj*/pathdef.c +gvimext.dll +gvimext.lib + +# Borland C++ +bcc.cfg +*.ilc +*.ild +*.ilf +*.ils +*.map +*.tds + +# NetBeans +nbproject/* + +# Mac OSX +src/xxd/xxd.dSYM + +# All platforms +*.rej +*.orig +*.mo +*.swp +*~ +*.pyc +*.log +src/po/vim.pot + +# Generated by "make test" +src/po/*.ck +src/testdir/mbyte.vim +src/testdir/mzscheme.vim +src/testdir/lua.vim +src/testdir/small.vim +src/testdir/tiny.vim +src/testdir/test*.out +src/testdir/test.log +src/memfile_test diff -Naur vim74.orig/.hgtags vim74/.hgtags --- vim74.orig/.hgtags 1970-01-01 00:00:00.000000000 +0000 +++ vim74/.hgtags 2014-09-27 01:00:28.963846553 +0000 @@ -0,0 +1,3185 @@ +004eb98eb3c30714cb6a24ec3e810275080a8413 v7-1-117 +006e9c8a6a8ad354a5cb6adcce6ebfceddeb20ee v7-0079 +010397e1770eec8ff399cfc3bbd79f853849ffc1 v7-0160 +0137e7c3d31b09f1c1e494405f3f99f6423b74cd v7-0196 +0139403c8eb088d58773f7e76dc2a025719a8e8c v7-3-135 +01583c79d5f4d3f29d4c33dd10dd29efd349cad0 v7-0d03 +01762f635babb0fecb3a9f04549a54e86f67cf8b v7-1-047 +01a0da54773eb2af0215762629db5c6eed01ba06 v7-1-138 +021f9d0f60a1700989e2deeab78da32837c1041b v7-2-079 +028158b1362b55a23cc6d8d086976c4dfd6e094a v7-0090 +033e7b49356c11b2d9cc45dec6dc3d695d7ef95a v7-3-083 +0358abf2b5d4ab5981a5a1dd651ecf63d40ffbfb v7-1-315 +03714c67a82b8557cb8ee0789cbced75d804d949 v7-2-134 +039ce9407934bd97142aab06c5d1869d8e2ba3c7 v7-0-032 +03b3684919e3299ff560609c0c5f577822f64614 v7-0084 +03c191181749e422b375fbb8cd0763dede7d9beb v7-2-313 +03c4ceec6bec956646c07390aa09052cf5f0468f v7-0-054 +03d49a7c83196a406cbd12f4898fc988731af927 v7-3-010 +03ec0f2b9a403b1cbc494eac6c038076ece0b37c v7-1-242 +04265ffbda1f9b14729bc5d85069ff0711ce3744 v7-1-210 +044d5e9b1292f694e73ae929eeceaa9685fa0580 v7-2-194 +04613e770ec0bd536f04c0fb6d80b76e1af1d6e4 v7-2-189 +048f26eb43a348e49fc4f9deaca03779c2de595e v7-1-082 +04943f31135747da59cbed2b39fb109dd2796426 v7-0-165 +04fc2a0e98ed7af6ee11a2025d6a0c877114c039 v7-2-057 +057029bf347002408541ec73da1373ae64002a3f v7-2-338 +05952d133506353938f50f0b22b0097b6cdf0afd v7-2-095 +05b48b16b627b63ee0f6dda7d7f07704c3d2fe64 v7-1-198 +05c8ff7f128406d2d6052abbf5b92635d3cb0284 v7-2-162 +05dc93b9c61f63c1691849fe7407c9472a7f6288 v7-0208 +0606065af0a02f79b43b4a89383b04c21e2f0be3 v7-3-111 +062104a823df0f5a225b327b00a3766e41e4610f v7-2-201 +06234af3a8b7df68bfaf0efa87edfed2d743f6c7 v7-0106 +06317850ad3acd03765fc0f8002f17417773d906 v7-2-045 +066778e39c2ae6bbf23708d98e1a7a7e53a9a6d0 v7-1-232 +0670d0df210a891f82d38c38f1b3b256dd1a5f8d v7-2-017 +0691866e6cc92996f4fbc881e134248571ae7c82 v7-1-180 +06959e7212e521904f3b7d75bac5005b9f44bde3 v7-0-077 +06aa43dde5610dff598940ccde1dd25a617a1a52 v7-3-006 +06bc859d1a32de8763e310669d0c008b3945af1c v7-0049 +06e0f7482cef3412ecb4b0b62b65b1e7c4ed92b2 v7-1-052 +071166147fc55311bb86bc9367aca005c4a1447c v7-2-299 +0713c530729ba6d2bdc9fdb4fd400f46b16c37be v7-1-169 +073f98f45a447a137c2e2d74f936a9e26179ce1b v7-0-035 +077c15286de8e37250ed1337a448c740c86ee740 v7-2-293 +07d199fe02ed46fff935b2daa4efc979eacaab4c v7-0209 +07de57cbcb25d63bf515b67de654dd89004888fa v7-2-327 +08012a1ff8d4b4f5736a47440a907ec6e5e1610d v7-0137 +0836531167ab2f1cd48382b093c3080c3bc47786 v7-2-059 +0868e4e53fb2e9f9bd469fae0323a1df43be476b v7-1-029 +0887e8a13e5f33db2f832a52654a0d1fa82f322f v7-3-109 +09cc86b6665358a20d9faf54ce8eec45ca4fc5de v7-2-387 +09d0e83c29b805f127c6756231bb4adfb1b2974c v7-0-130 +09f00d57222b6d8de104660ea3f9c6bb42b9d31a v7-2-172 +09fcdfde9afca8990c086e60fe5e122cb258cadc v7-0-046 +0a1d45e2d8e30fc0aef25d5fd7505840d1e0e836 v7-2-258 +0a60be12e47e322c4dbae7b083321c60f599c0b8 v7-0125 +0a80dc6d78048478d4e7f0f99f573c947d5d95c0 v7-1-131 +0a908b65de1dbebbde1aacfd50aa41ef09e6865e v7-2b-012 +0a9371c70540d0d42c79a1d76e590fa2ccb978b3 v7-0220 +0b056c1350dd2ff28249130194d9a2be7b606a86 v7-0-193 +0b1b7560c456a32ad921e3985b90008ef1f82a91 v7-0174 +0b211ebefd4e6ee52ae81a75938b4ee61ca15770 v7-0-071 +0b42546f036bb3ff8023b6015a5acf032a2ae1f1 v7-2-076 +0b4a515b125474db496caa0be22a28e8bd99c88e v7-3-132 +0b796e045c429253e9ce8825ad05aad2474553bd v7-2b-000 +0c0a2b25d10aaaf556344d7404d12aba81632cf4 v7-0-015 +0c381fb7846cda92fbdb327bbfe4ab1f73a86d8d v7-0214 +0c39ff7a90a81c62f2718f71bf0a4d636a8ac69c v7-3-127 +0c4a465bd7419d51017354b70ead01c18b589e9d v7-2b-029 +0c61c201ba76d7235913010395e065991ac059b9 v7-1-196 +0c6c64edcbe0481659fdd91f6312296e7c1bb303 v7-2-052 +0c7d6d01e0582b54f34ab66852116d559c39550c v7-3-101 +0d0bf7598dcb63fdb5be9300f407e043102ab895 v7-1-256 +0d31f8a78ab35b256359b6ae53c80cecce59d44c v7-0-143 +0d6554dfc71e5e58866ef0118ed05007a4c59672 v7-0061 +0dbc46d14443418020e3868a08877a365ced11e1 v7-2b-028 +0de47f0d731e32af52784171986734b735ac626f v7-3-051 +0e3bd80a3f74a99241a4857685912dc8efeb9bdf v7-1-286 +0e3e208b4b901f22beecc85c5781170f3c4e5351 v7-0-104 +0e3e601e66cf233986924652f7801dc8d2568a84 v7-1-288 +0e45a0c50acaa31dd4052c57053bb86afd4e711e v7-2-154 +0e4631bf94411717193870a5ad7d62945d06cadc v7-2-377 +0e4c64dfc61141a68b83b5204a160b5c01986279 v7-2-125 +0e4fa55d20e025a70e3e6b82abc58333902c45db v7-2-040 +0e57be57fa49a0d2c0b7f17b7cb137b4260b79d6 v7-0-207 +0e5eb96dc18ce7986eadf32bb700e503da52ae47 v7-1-142 +0e6b369b9760459289b84a9c2e07478c063cd386 v7-1-126 +0e902b8f511f0442ee2b28314d6e085e3e00798e v7-0051 +0eef0f62181190700a01129a88f693503ae94947 v7-2a-006 +0ef5b70c3eaf694c9e9b85aed3f80af53e6fd9cf v7-0045 +0ef9cebc4f5d1c00554543918fea2a0b7539b922 v7-0031 +0f109c56b521834af0d9492b21d0ef1ead5b01ef v7-2-014 +0f3f3090491faea043fa144780d1287e011390ac v7-1-205 +0f552ca271c27681ed126261ce49e52ef144175e v7-2-393 +0f9f4761ad9cafbf1e72de338aa3fc59f1dd693d v7-0216 +1002128c68dbe2f69466b1b2cb354b00eec2980b v7-1-109 +103dea6545430092db1851d1b712a742af1a74f2 v7-3-017 +10a1b67c0885aabdac7c76a96169cd9e36414428 v7-1-068 +10ce04af8c5b26e55cd2157408883d9ed79b9a3d v7-3-021 +10d7ebdbe8a3a9787360b21a9836c6bae6a6a7a2 v7-0-169 +11155435487064d64efb296f7c2966baae8d27e3 v7-2-402 +111e109dad1301c7699d18e5689f1842f4b67e6c v7-0b01 +11472bbcdb6e2effe1c248d09b4d7089fa7a26d2 v7-2-183 +11a74d2cab9dbe41af2ed5d08b18fbdac14f6e43 v7-2-147 +11c004cc1a4df89b9246a96106db6c6f0260b7d8 v7-0-241 +11c6bda3b53abb2c98ed9221ba89880eeef7514f v7-2-268 +125e80798a85dbead9a91815cabd1d0aed63f455 v7-0021 +1287e2bbeb405c10201d4caa6b2dab284f84efbf v7-2-207 +12aba62fa7c6812ec46eb3be6759d82a4a651a93 v7-2-422 +12f9cd68b9c3aaf3659d9219551a5822cf798857 v7-1-257 +131dbd3d2a4bba5d1514c2842952ca7b77b6902e v7-2a-019 +1324b7b755f3b5570ce9aa7fb27c075c89a1d2df v7-1-322 +134c7695af324bd4118f52b9235aeff7e374a425 v7-2-121 +1378bc45ebe5754c0d3ec64d37810eaad3a544f3 v7-2-348 +144ad7f25f6741815c8297fe77965f93ee359c2a v7-0-118 +15130d4dfea14898029686b72536f54197a73062 v7-2-117 +15146eaa0e9c6dd6802cf70a2da3b220992eda1e v7-0-001 +15154710ed57eab29f7e4b848eafe63ea2dfdf85 v7-1-140 +151a805b2ddc219d4a968154a43daefbb2e41fe1 v7-1-081 +152883db0edf63f35e8459dcc5862ef3f4b48c9e v7-1-321 +152e526245217fedd07f0480e08ea59b0075a8b0 v7-1-001 +15674e198164c10b08e138f4c18b58e76306d9be v7-2-389 +158a68529622f90d0b0f1f5596f55cc5ce06c9ee v7-2-060 +159d87361e4b0d99c3863b3c82b7121a474cdf1f v7-1-168 +15e847397be75c6b0590505a9e201c793d070eee v7-2-205 +165c628aa9fc3cca34ccf63dc8ab953745d4e228 v7-0108 +169533a9699fa7d3fd67b57ad99d04076d060831 v7-0g02 +17526daaf79dbf2004c78311abdad05e6e3070dc v7-2b-021 +1780e6046802498a3c4d0ddc7b99f1bd9ac75f31 v7-0-157 +17a83c0532e83e9f4cd89f03dcbf206662d25b1f v7-1-062 +17b9587ff6d5beef34d98043ca5f3111e5d29e4d v7-0-202 +17b96d8dcc5c8356e10135f5735d6de2fa5da3e8 v7-2-038 +17c88d44ace9bc9e76485811ffa459b5c15a6bb7 v7-1-234 +18061514324fefb37ea7a7e7783985004ea0874d v7-3-084 +183c3187b20dbc6ecc74958e9ba141f0d4f72d23 v7-0-205 +184a6091124e80e1c9f66ed0908deab552ca369c v7-1-220 +184d2020d8f12823a2f2cb96335a68ac1bda3270 v7-1a-001 +18ee39301b822de39caf5fa023107ddf508b42e0 v7-2a +18f024844150562a9e56522edcad3fc1d5c257e4 v7-0086 +19106f131c872dc79bb409ffe8b5e35ebe885c1b v7-0188 +196d564759eb256f62e7fb7ec4561c1e2d533726 v7-2-072 +198a695ca8e7273641991bcf346085bbce70d740 v7-1b-001 +198ea7a9c633089ef2638513d05611a9d1b6e39c v7-1-182 +19ed3bfbe488a730858d0d26b433029b85e231cd v7-0-159 +19ef2bbf569cba64ae5125d5b1f3f205efc25e89 v7-1-263 +1a00e831244b1e509286ea35a586c6c43dcdaaaa v7-2-202 +1a040c25c44485c85e838a7530051f6d4f9793a2 v7-2-123 +1a0d346695fa3525a08a27174fbdf016afdbb9a9 v7-3-085 +1a44839049aefb0722d43a87d7ed1708c9c94b18 v7-0229 +1a511b7b69ebdf866088b9e765dc42543cd76d0a v7-0-212 +1a85f952cdfe4716be162e308fbccb0117489915 v7-0195 +1a8b518bb993e00f546c4cef8bae9b51f91fe0d7 v7-2-198 +1aba098d6abc680214b3b31c954abd53ddc772ef v7-0-039 +1b55bbf5c58077e54b83307bbe715e131c57b750 v7-1-219 +1b7cac059babfb3365c0a44c0537c7aa9b286a71 v7-0172 +1baac9d06c83400c474e6484dc20229187d27a64 v7-3-024 +1bb06e6512a2fc961eaf9a8e7a749247c408e7f6 v7-2-358 +1bc46149d9195d9134d526ef524242ede65c2457 v7-1-167 +1bdb13b8e947b85e612afec3a1b5e09c29c30551 v7-2-039 +1c00ea3641a8a1e58e70cd51ab831003bdb41d50 v7-3-005 +1c1cbdc42f75d8fa0ca5a799b5e843e9aa2c098c v7-0077 +1c4ec9ed71caf24dbec13f6d3d4adbb48bce9436 v7-3-056 +1c586ee8dd452d305bebf633d5b8c78ba1ab170d v7-0183 +1c597397f0061fd2c750c65c961a31f70dd6747f v7-1-269 +1c64bf25bbcd49a83cc08dd60a6c3e5785266790 v7-2-247 +1c7a66d820e4dc9b0a9f696ed6e7a59cd9a20e19 v7-2-360 +1c85355293f92cd8bb41eaf6ce8a8be1d77302f1 v7-2-062 +1ccc1ace9e5b6c1223ba191ce20729a49f13970e v7-3-050 +1cdd2661f34c2aa93ae2f0317194d29d3a43f5be v7-0d01 +1d0ef79659afec337c26655216a1debbd1c74497 v7-0-002 +1d12208efb3732d6f520b05a47283208f12e3856 v7-0-209 +1d4c67f8470981d280aaf1d2a25877a00ec5d240 v7-1-084 +1d6d99daf4dcba733e5517045f70e53c185aa895 v7-1-165 +1d7f46148bf4ec36a42e959cece1f9f6199a87a7 v7-2b-006 +1da25369227bead09cf603ebfa93ebe1d206c871 v7-2-345 +1dd4e0ccd822156b87516f9cd5a6a004d0d85a11 v7-1-278 +1ddec6983d9ebdb4f7a748cc171199cc8ad3d1e0 v7-2-036 +1de53700b1d9f26a420a319d9c44ba0c43950035 v7-0-127 +1df41c98fc2e9a230ab9d05be84f4c91e4078619 v7-0-239 +1dfe9032bd92ef7ab7bf0baf0f0c1f61da68bce6 v7-0-131 +1e25b58fbf7babbbe054e118617a49790f532fd4 v7-2-024 +1e52efdc900cab1dd64f6a987bbe5117fa1f9748 v7-2-270 +1ee00a062acbd04360de8b754e834f7ef6025328 v7-2-246 +1f099ff4f6fb2b0731bb38e279d0c692ee05df8d v7-1-129 +1f3902f3eb5c20e7872c42cdee9c91e2b25d3f47 v7-0038 +1f3b1021f002ac9703c1de0e80703b8067546a41 v7-0e05 +1f53050b38688e127c4ea67251ab2730002541bd v7-2-294 +1f90fab89ce32126849aa28d2918bae96603f3bd v7-2-069 +1f929f3ca8066b3170c7a58c414837d47bef707e v7-0c03 +1f93fbcb4e0cf1dcd8682242f40aa5f2906c42ac v7-1-201 +1f9e2c8e642a29d93b9c32062c785f4c38883e0c v7-1-034 +1fbbe04a950f9ed82b53ddf67d8e034224fc98ad v7-2-286 +1fc8d918d9fc076304ef0dbaad897e8e5b6ba4ab v7-2-093 +200b706675a56daad05f8b0d60991825c45b6e2d v7-1-183 +20308f30826db09e99d531214eaaf03ea8b13d15 v7-0-162 +205a26fab11655d086ce185525193d16f37d60b5 v7-1-203 +20b2e52ca96255a8d99ed9504e90a960266c4d21 v7-2-009 +20b4b6a2a212584f182a2d69a37512bf9094d85e v7-1-279 +20b52d44daafbd65b01db735c4d5597ccb9e386d v7-1-130 +20c18291deb21dcc69b6ceb3c11c309a92396fb4 v7-2-302 +20d9fc2f13a4132d6344fb6457040b02720774cf v7-2-403 +215d6b2a1816a5eaf5f5d2cb7cb1b22d24adbdab v7-1-159 +217c9aa4c3ba6ea559ec5675871d6d89313363e8 v7-2-114 +21b11491a33fee3cd77dcfcc2448382f060543f2 v7-1-156 +21c3634c211345ea79e90c4927513e7dc1381617 v7-0134 +21ce954cbdcac9dea2aa826ff40adc2fb2184600 v7-0-201 +220a9309067dfc6e7e8301b392c3499054666396 v7-1-266 +2244be18d9e9ce602a12e7529614c25ca8cef1ee v7-0162 +22886f3d882d231a528dcc012c23e54180c8248c v7-1-040 +232a4740aa0ed615c52b289a111b51171e74a78f v7-0-005 +2392a6da4aa430f896451d97da8c49ed3fcdb9cb v7-0186 +23aeaff961412f06544babde36a80a6c22be0fd9 v7-1-307 +23d23246742e7d301d09f0cb03533226b64043b4 v7-0-219 +23d366df193868572eacd04e1a32bc2283a30e56 v7-2-335 +23f82b5d2814be7ca4dee000226bd67dc6cd02cf v7-0c10 +24100651daa9d7140d33f298c987c9d42bd919bf v7-2-411 +2430fc9a18d1270a5ad7b5f7acac3e19aa8908fb v7-1-306 +2448f4c8afc65a91130fa0237c253e6698481c64 v7-0-055 +24b7b3cc4eec4387713a615519489fa5a34b253d v7-1-251 +24eb7921b8f004c8c462297cf53afad8f5578243 v7-2-367 +251307ebe1dbacd972e35e923f7360d12733f2b7 v7-1-049 +25154b22dc967b158645be9cb87017f548ee5446 v7-0-198 +2548cf0a5f625110a5cd42ee5566c2709c2c34f0 v7-0-011 +25bc02d83cf438d5794ce106edad2959e2f89454 v7-1-292 +25dd5036f2b0b5e68492c49f15eaa228aa957f69 v7-0092 +2651e7d07cd631af64818f5d3cf5dbb199fa6f64 v7-0-140 +266f9d9f5109421afcbc8169896b484ff7a19a8d v7-3-061 +26876d0f15e9294aa4fcbfc43260a5f2a703e313 v7-2-256 +26b0b2f606d2953068951dca673d963b7c5cccb7 v7-1-122 +26cbd39f22513d82cc43d2b1badefcea8db1c546 v7-1-103 +26d879bcab3aa016ccaf77cfd3a9aa5085d4776e v7-1-284 +26fb122355d4d6b04850f7608f1d82da8dbc51c7 v7-3-107 +26ff011aec2dbc96736396430403d572d4f111d5 v7-0-172 +27060fe297d0ce872dfa3bc20416f7189b9fbc59 v7-2-273 +2750661e93d556868d97f49fae32a1f470bca107 v7-1-253 +27621abffed24f1e2849ea616f91f0a99747608f v7-3-099 +276244befa5b2a34893ba581818df14cd7e4504e v7-1-189 +2775dcd056031e0a7314da9a9e0b2cebbb089525 v7-2-426 +27782797c331b8800c12ad17c5d05adab5e92edb v7-1-107 +2787b8483e6498f536e66ac134a073246ab6f5e4 v7-0-125 +279380a812add1307a2a20c444f2334b7a45106d v7-2-412 +27d8fe1c096407ddca428c52f62d002dfed7879f v7-2-090 +2832243e801ec537589809059f65efb3b8a57f93 v7-2-399 +28398206597f975583c9f8f212d336fc9f67953f v7-3-089 +28558ab31051fc1870ac690c0b576ca9365021f5 v7-1-202 +28641f0ed9deb579934416e6161260d4d218f394 v7-2-211 +288fb648badba86a0bdce6dbcecb55eb386263ab v7-2-128 +289b19a6f2edb5b46df57195d5fae41dfe963290 v7-0103 +28d0c20ad8a09dd63fa34768eac4be3cf96ed239 v7-2-051 +28e9eb0f2d849e7e32d70b4e1f06dad812288578 v7-2-077 +2928a6b338c3f434723520a12fa378895d4b24cf v7-2-187 +2930fd8e7d9f1514448261365b787501dbd9a0b7 v7-0171 +293621502c4daa122ae601398d854857bb732a83 v7-0010 +2951f28a9bd3b08c5be9bc9b3745f062b95635b8 v7-1-192 +2981ad79c362bff0c21d3ff0d68be57213bca837 v7-0-025 +29bf49bad20d3b1ad35af5cf21d91c4aa486d4a5 v7-0-068 +29c09fa57168acd665a85ed5a210b48b60d0b5e2 v7-1-211 +2a11407a5a8f4efccc04dfde8a61e40ec5eb9fc5 v7-2-066 +2a256978a64649b75d424eec6e703f99f7f28636 v7-1-003 +2a8bf2ba504f422d53dac30da8b58d76e54b4428 v7-3-003 +2a9d26c95a2a9b2f1a279e04de22ee4c7298552c v7-3-077 +2ab007070fc86d20596dfbded70d0f986c084304 v7-1-113 +2ae2dd2591fae798e4212e9b2c47281eca0c8483 v7-1-055 +2b273c71a14b7d0e64b6ae9bdcf60ef7e4d45aa8 v7-2-415 +2b475ed86e6491b20046d5c34fec8ea86988dade v7-3-074 +2b4debdc8d2c73d1fc37b750010e3a4098b035af v7-0035 +2b913f7eb9d2b411f9ef2c0fa44f313b7382bd89 v7-0039 +2bd29808d1f640f027ab7a4a4f2b5b6a0e6c8e38 v7-2-429 +2bd96108392ec08b6c384893939968d94bab4dbb v7-2-351 +2bebfa810a66caed9562541776d92f73a71de7f1 v7-0-091 +2bfc2b7033147de9689cf2d651bd8ef36fdac68b v7-0078 +2c1ffe8953ee85cf04d4db5c03ab711c1c6c015a v7-0080 +2c4ca49319a689ad9caa4429cd90bceda4e210a3 v7-1-271 +2c5e70e2858fa46c7b80b022f217103b8c90e9e9 v7-3-016 +2c885fab04e31a34d91e4375d2d0397cadb818ce v7-0e06 +2cdbc91795ca0d15343fe954ae2af71f830f9656 v7-3-007 +2cdccc96d730501ce4e509e7efe4f8fd3f2b2e29 v7-1-150 +2ced59eaf1e5c67060fe124902407a8bf77a1a78 v7-0-233 +2d0f22897a4d1f71600540e64a5cbf80a178e46a v7-0-173 +2d9eebf2c48f0bd3b51e8ba085b97da871cd4184 v7-3-126 +2df7e2d753061b54b9120ae4b34d4bf050cf17f5 v7-1-246 +2e1e9b708941e1cfc2c0540196719f78e1ab18f5 v7-0-023 +2e42153b37f171ed28293fa12e4f538070bf8619 v7-2-021 +2e915ea7110f0dc0507a733e4330ec6cc91e53ff v7-2-266 +2f016b638c0ca912d89f352f6b9b83231cf9e83b v7-1-312 +2f57d93bdbf64461c4eaeaacdba26548a2abb9cf v7-3-030 +2f6e519726f19c2f6cb58e9cd75e827eaafa0ab3 v7-2-346 +2f70b8f1f1e32dca34db07fedf9cbb56ff97007f v7-1-076 +2f9308b31181f36bf605ee060fa763a28deacb03 v7-2b-030 +2fa8cb05b861d49dec0501a2531eec39e1d0a688 v7-0218 +2fb204616c9b4e4df95f1560899d02e5bb739678 v7-0-079 +2fcd444c4bd37f916da718bf5bbe9535d2667331 v7-0057 +300fac7c5a2bafb002ee97d52da19bae8a344d51 v7-0059 +302a6aa7aca2ee9cf24958c2277a90fcfc01c939 v7-1-061 +30534c76776ab088a4142f9e15faa23d86efe020 v7-2-078 +306fc545fe2cd5d77953811fccec0d5c4bf7744e v7-0-066 +3112fcc8923830fd9060c76d1ec9c75c59487d59 v7-2-371 +31208ed42de95ba5738675cb78bd0f66c34ed785 v7-0-065 +313ec58cdc49a69c4386a4aa18fb9bcd01155feb v7-0-206 +316dad0565b8943c978c8c58b212f3c4469b1cf7 v7-0-103 +31757405c0c5408f9c83dba9d83ea74b2bd680d5 v7-3-134 +31bff9be0a7730f36e7de4792fec0688f2fc7076 v7-0g04 +31df87b80e562b6a83b97e2610f539afc94bc440 v7-2-278 +32c1b275ba6419fc014ffba3d2e55eca1ef06d4c v7-0-196 +32e19278c1ad1be6f92fc6cbcefb7e23ddf928cb v7-0-105 +32f48534fa0fa9b8e6833850fcbd77cd002ce8e0 v7-1-187 +3328b87305efcc6a8db6923c31cbf78a05983eff v7-1-077 +3372616fe1f1def653875bedaa8c059c399197ac v7-1-144 +3376d79d40f2d2c8e09cf8a3c07e15fc2424ecb3 v7-0-148 +33792c36e3aadc7f313785705f39d7ea6e214319 v7-1-018 +339999b511a0d529f09219a5d61b810fc75261ef v7-0148 +33a2652c13268ca53bb9ce0cfb7232655864c373 v7-0-231 +33d28f1c4d1dad3d4ce7f768c57820a8203c3e51 v7-2-006 +342cf2a9f5cce4f70e6a974253b20c8e309de7ef v7-1-145 +342d2b3a072a6cbc3cff898a663c4889317b32a9 v7-0-208 +3479f9aacaf57d583abb468cfe393eead386f15a v7-2b-008 +34f62bcce014d9c0b275002a1001cd1582ffa121 v7-3-123 +351bf13db8071317d7add1e55a50ae284ff53a4f v7-2-334 +354ea37841d13e0d9bb5ae995a09fb28beaa0d13 v7-0-022 +35abb70264158760c724bd0290c6c441afec4fa0 v7-2-033 +35cef95a6b7646d045b97bd4a54bb90000b5a753 v7-0168 +35edf814f2230c2bfdf403073fdcf89094c8216a v7-3-100 +35effbd07a25d1df122e795165d26ceb65510c3a v7-2-421 +35f3b20de2dd2c821675c61a11f4b227d31e9cdd v7-1-102 +36071a92cb764412276e067fed099164b0170436 v7-0167 +36275e20d997b91a357433debf8fbac0885768a0 v7-1-051 +3686831cf3da094c66ca4d2ab2c671d3d2e2d497 v7-0166 +3709cf52b9b56befb1c7a98e5f58cf39d16cf953 v7-0119 +371201c6b4c1538b593b5dc72f36c79a1f2644de v7-1-327 +378e33d47ab09cbb564a2aa6e975659a7f742a67 v7-2-250 +3796d11fde3c141d30cc3446038c20bf280c4b5f v7-1-267 +37d62d968182826522e378b31b76cf0a8c7a3cb7 v7-3-058 +389c8abd59258ba5ebc164dc7158a025bfa893a2 v7-0048 +38d7bf77e55068a5157faac7d871f2f3a66cbfad v7-0226 +38de872507e1c6440c9252a7bad077ae8c1bd488 v7-1-280 +396a9b65abe6a8fd08a6c232b443d541717cad0e v7-1-121 +39aaf0cc59e83148991c7482fa82d2bc29129d3a v7-0-150 +39d115408c71e1bf72439d5a92d98c8e551a5750 v7-0-186 +39ebe9e88854b766c569529a96dac3b67aba0e65 v7-0165 +3a6ba07b3b9fa89e94e002d44f57f5378eb59f08 v7-1-302 +3a779b47f235a62d799147b25445b01866f7c0dd v7-0223 +3acbcd0d3fd3d81ce94a40af4510fcc2e7870a82 v7-1-317 +3adc6dd2d122c76a211d88769227e447e4f8f821 v7-3-136 +3ae106044109e65b5bce1ea8938e0658729349ed v7-1-008 +3af28ecf9e56315a8617b2c58da078b6df989f2c v7-2-122 +3af484dca921e30a0bb1e4975a4fb214c3911f94 v7-2-150 +3b1d692e5a2c3053fa066d202ffc0b51779d2c71 v7-0040 +3b226f4693dc8dd1fb8886221335c39a64bb1fa9 v7-1-207 +3b241fd8d7c09d7a93694a0abcdc283dcd6b4675 v7-2-441 +3b48421dbde112f3a6dae67a651a9f114d85c874 v7-1-301 +3b705e71c7b07ba1309d08a8b370ae8ad3fc17cd v7-0124 +3ba373b54370d830e3fda93eee83e3f0b1ea2a0b v7-0008 +3bfd2e1e2609c8470c5b4f75184b66e5a4d8faef v7-1-053 +3c17132458a1538d3f1d6ab00544df8069bd983d v7-1-208 +3c17f4d2196f2f280de13a417652529c417548ff v7-0-028 +3c251a30c8cc44946e5871a7073d88ce195874cd v7-1-325 +3c6417b7e6efed4cb13673383489efb47399a902 v7-2b-027 +3c838658fc357dc48e457bdbc1f5a63ae5a73d19 v7-2-257 +3cd88bdcd97d7d0a3e2f5a00a6627f00970ce5b9 v7-0-045 +3cdf2a653e005387c4deeceb7281d62fffd34687 v7-2-391 +3d698caa5dfc7b11c8a6ada5f57e75c7a6a117dc v7-1-064 +3d842a9e2baefc023d9e4f163ea138b9e29931e8 v7-0-051 +3dc6072e0a25f24ad5d888af77d858036a9185f1 v7-0-083 +3dd986bfef63bd08894294a0828a1bca737320e1 v7-2-181 +3dfff6a80088c921b391d493c6c1231e4e64a656 v7-2-217 +3e0f9984e98e8f020260ff015cc994ccc34059a9 v7-1-111 +3e7d17e425b0f58513002797b3310e722757893f v7-0044 +3ea3dcbf2cd6e5ddb9d827c60ce999b2e4a5e755 v7-3-108 +3eb34a777f49f7f656b32c8db829fd0b153abe23 v7-2-220 +3ee6db0a746e990164e288fed6344e519a5bd1d2 v7-0083 +3ee896333e3eebba8a5e10e04649f1bd20e98770 v7-1-290 +3f1b2e6496debe5ee3068d1916ea15926d5a0f99 v7-2-252 +3f44e9abe4ec65f797cbd12f1d46bd08eb48c2ef v7-0015 +3f661e42f262e7839e2f04c50a447c53f6c4214c v7-2-228 +3f8cf4c668c30ec99289b5683f4fd36a1df602fa v7-0-115 +3fc0f57ecb91686b33630dcac973ab9d7db31c6e v7-0001 +3ffdc64af1e53617586ad0cf14e039cb6f1cad34 v7-0120 +404aac550f357223e7bab3656343827f641d9f74 v7-0017 +40a0699b6c62f93e58ae233fcdfd395bbc1bc80f v7-0046 +40a8e388692b53d36104e9c9b6ed351c01707308 v7-2-241 +40aa7ae37901ce256da18bcc84dc5ee21f83829a v7-1-149 +40f2a904bffbbe8fb600089d1b04f1115a2a4a71 v7-1-115 +4102fb4ea78127b1a95b2df3274a55d9bfba68c2 v7-0002 +410fa1a31baff929c7876be744142723c1573c75 v7-0023 +417c04135ca2ec03b6357404b62761ca9453cdba v7-3-137 +417c4d78a09c07162879dfb79e25e672e6e9218d v7-1-043 +41ab6b381572fcef699480ffb759d3c4543f0dd0 v7-0-128 +41d8447a84570ca22fe07277a2f8e9db694f66f0 v7-2-236 +41f9fd58cf132788bde73ab1954cb987521e3bd2 v7-0019 +421a77b136c2bec5d2056a799e2fa8021178beda v7-2-002 +4238b697bfff46433c49d60cc20b43761ab3c128 v7-1-097 +4256f76f72668271d9d986cc3736eb188b4400a4 v7-0-080 +4269a0673478b966f8d0e08b5681ea0cf2acd68d v7-2-432 +42ac369bd824634488b569ec5516fc435b700be8 v7-2-070 +42cafbf4b6e81160c26fc99148eb333aab5d2f96 v7-3-110 +430793c2a2315e1d0ed2de460071eb83a4f9c97f v7-2-319 +430f555d7d152cfa5b7dc43b8b8b0dfa0d520520 v7-2-195 +431ebc9412a816440aaed887a3d318deb08c6407 v7-2-418 +43243f7ce351aecf1f41932a9d02d6723fe49e34 v7-3-128 +4353593fc2c07753d40f71998688985cf96689d3 v7-1-244 +437fb19625c9e24e2157563cf0a55aeb432b2990 v7-1-275 +439f44b874a731461a187dc720edc0c663ab47b2 v7-2-291 +43a60ac87145f10d827e08b02c8241b359697740 v7-2-263 +43bf0bcf2110ffd8d42f0ea9b1469b1024def86c v7-0115 +43d337097e4ceffd268685809aa1e8e0f2a2dbec v7-2-223 +441f938ea9e90e07a05e55fef17ab22d2607f5f3 v7-0192 +4483ee552619492639c69f4345d6554b7bcbef2b v7-2-355 +44c01fae1181944162c94bfba919ac9867ceec40 v7-2-160 +44fe912b5a1b3961c7bdfbd2a8277d38eeed1e77 v7-2-145 +451bed7e9572b45d2bc98bb5c6680e7bdf4a3fc3 v7-2-321 +4541e06d4fb9dd8b69a7ab43653c72022f95151f v7-1-323 +4549e0e7fbb661089184c7b0ba1888cb6564ef2c v7-3-076 +454d71a434176e2d1ce0c2a7d47bfe2583a5069c v7-1-037 +456ae41254c975189c55a6ad28b1255936c847fb v7-2-159 +4577899b8ff1548f3f03e6516715087c9aa15e6e v7-2c-003 +45898756e0598f357776ae5aa05d717a7017e0cc v7-1-105 +4589d1792c036e15d1f9e72c0252fb243aa6d5e4 v7-2-094 +45ba31f9ba0cad526601d1d15d4e05180967133f v7-1-127 +45bae37de0373ed58d6f4ed8721d594ae322782d v7-1-031 +45d9e2f80fe18c663346a2e88409bf2476e874cd v7-2-061 +45fe7cf4a89e3963ed9c0d6a34600dcff8de3f9f v7-0-176 +463e25d28b334622df784faea456a98ddbc0b5ce v7-1 +464da5b48d277d1052e3c211000717947fa13da6 v7-3-130 +469c42f90fda78344dd4b33e7c0dd0860b777939 v7-1-030 +46d39f2eff86c940486c2da466283d7526b98c9e v7-0027 +476336a5ae9588c4a13721b5ec1cd792fa44ea2c v7-2-404 +4772a5e3f9fa652baa1cb6d5295d60daeef6ef0b v7-0138 +47a0dcad7216bfe602a2ee241df60bfc41c04979 v7-3-120 +4842e7421b5207294cc90f7e2d2d18c24e65753c v7-2b-024 +4845822f6a6c21860e0a1b4627996d745d455da2 v7-1-213 +484987f8e04c44e19e1ef2f3f6864b4c6fe61f1c v7-2-118 +4869457735a9133c39202f797a6694301c41abc5 v7-2-290 +48775ea99f249b75872e9f0268c5bda8cb8af8da v7-0-007 +48b22e2eb1ed7782c4dfb90051b64d6614fc6d3b v7-1-185 +48c9c2bf59afb140dfae3f4b7182ca410e72cb25 v7-0060 +49b5a7f186aae9fdd9b633037e8da484c61c55bf v7-1-002 +4a317df1696281eaee0e54b5c1636186290863a3 v7-1-298 +4a4287c09953fff6a65f7324c5f223f7359c46f2 v7-2-390 +4a4b16c67c62174b3b66848a32f4e5554b9cf6c0 v7-0-183 +4a6554fb0483f5cab10876ff0d9a0e92a9787119 v7-0-161 +4a7320e53f32e1f6d60c498d870e6c4b8c7acc35 v7-0126 +4a79d6d376f0897e3a899ccb104a324a94bb846c v7-0c02 +4aa4510d548c9fff9d8317977e3801a68fe2aaba v7-2-341 +4ac0c84d1c5038d0f6171c68d9c58ef0fefd4226 v7-3-079 +4ac1dce8dd5e8d8e97e3e7b921f3ada9db2fe2de v7-0012 +4b8583e82cb8875d14ff928db281aea8145d0b0d v7-0201 +4b9fef49d7ff02cf781d26d5b85a0a03c8784fd8 v7-0095 +4bac29d27e2f4c2779ecb72a5e78cd4a65cb455e v7-0 +4bac7ed34007ad41b7870888c739c1b4a129cfc3 v7-2-368 +4bc81d4dc6be1c45e41f1b083ad7fc07c58d840c v7-0-142 +4be6da0fa3d9978434273d3abc021d7e68455864 v7-2-400 +4c02214d1465ac2b014a9a1096927ad04eb710e8 v7-2-200 +4c41f0da2a2e35b42334d091130440d1b1479e7b v7-2-324 +4c70a10ce2bb6d83a4cbf3e3baab19d1752f2230 v7-1-042 +4c7cf05f60b5885e1a5caadb787cc6e290d7ee34 v7-2-110 +4c8008ab94d8da38529991004a56e65547faed15 v7-2-431 +4c8b90b7a94a123db784dea518f3c9a3bdfe85c4 v7-0-221 +4ca6669af2cdc06f39d77bfef82663e5bbdedd56 v7-2-046 +4ce0a7e4c6b3a305419590c746d2a11040fb2b92 v7-1-036 +4d53c2a2af94cf7a657d85e27f891b2d53b698c3 v7-0054 +4dccbe792a5e00c40a6e5b4f9e74d20b5aed2c50 v7-1-057 +4dd75cfd946f31e81eaa4b03ec81ef141c562137 v7-1-071 +4e22214f84640bdfbad591ec2da5eef9bc328dc5 v7-2-409 +4e581f1b08dac0b7f9345bd51b03a5fdbdd49ddc v7-1-281 +4ec11bb387a559fb6168fdae70e7d0ad78e15c3a v7-2-372 +4ec4c53046b5be6700810b9b92996a0cfb4ed52a v7-0-021 +4ee809acd1ab9c2fadee72e0fae32de57040447b v7-1-124 +4f1130893a1c135b1200f6857bd0ebfb143350e1 v7-1-320 +4f1b94b51e99370161ceb5a923573772ca068582 v7-0b02 +4f3857aa17853ab6c36005520ae723af92f50b9e v7-2-264 +4fb859cd9ba955957ad712ea390e87cffec6a540 v7-0-072 +4fe8e1a7758ea8170eaa4b1abf11cc9682437cbe v7-0102 +501b107b335af7ffcffea060c38f4b34dafe4101 v7-2-012 +5027d3220e2adb2f2f54e85f469a7b4302a010da v7-1-308 +5044d9d784ed2958022fd3446910567a4b84dacc v7-0-154 +509230ed2036945be2d9db7e1ecded3c59518c2d v7-0g05 +5098908178cdede4656e3f96f2df2847573e6ed9 v7-2-050 +50a93218720458be104f03ce1be00bcc8b898eb9 v7-0-228 +50e0337c25cae29dd3e63b333d4bfb68cc9b3740 v7-1-239 +50f5ac5b90dedfc7f88a67d7a435014e07c298ca v7-1-094 +5117153003bdb002aa3e68d3b90a98a973d38078 v7-0e +513866ffe6af0bcc09e7275c0e9130170de66acb v7-0200 +513d037fad505a5169add3116ae459bd1adac381 v7-0154 +5232b9862f238a2a109f15527825e5cac1668a04 v7-2-000 +5232b9862f238a2a109f15527825e5cac1668a04 v7-2-080 +529c6a431ff5d5612bfba4424c023dcf073c2cc1 v7-0-056 +52c87a746f4ab8397933a53388389aba6a16bdd3 v7-0181 +52d17d53b555c45b0b9f4ddaf3551bc8ad5623ce v7-0d05 +52e76e2b5b65eae81c4ea93d290194763d7edcd7 v7-0140 +53175322ef40dd7f50dc4153e6e6fb530a4b2b29 v7-0070 +5332dd13733cd57e814b7e21cb577f6ad0c15408 v7-0094 +537cb92935b690665a72f2b31dead8d9b322dcb1 v7-0-223 +538cd3220874d9a98abc7219e7be6666e49f853b v7-3-011 +539d9b8f418aeeeac3d0da1932e1cdbe709456a1 v7-1-265 +53b2bedccfdf5ab8cbff6c3fb1f6f83ac7112b85 v7-1-091 +53b47a10825a20cd7684046146393a641d89972f v7-2-163 +53d475dff0e363bfeb31d6d171337cb19c309098 v7-2-374 +53fd0a213cff86b7185c5391cef34c1265f8b8f5 v7-0-237 +54a6b47d473e64d7ae5212f00b8b125c721d2c41 v7-1-160 +54d5eb36689f1a409d13cd6ff9b06d68a30b0d48 v7-2-092 +553c97222cc0d0adb7beecd6f73be1c512f2f37c v7-2b-005 +55e117ed68724567167ed25bfb5a320585f1bb5c v7-1-075 +563bd9a63fdcb08d55b6f6087cc8ededd31b891d v7-2-010 +56609cdae088c4d5b38ac94a95a07f1520b56fcc v7-0-059 +56695f1182f01d75843d0433484c94c1eade71de v7-0-238 +56b638f2029e728f1fb20382a7184a8e4ebdce9f v7-3-018 +56ecdb792c3353d9fc587a515fa4991e69363dd5 v7-3-036 +56fb4ab9f62f19b9812d483aa76f8b53104db26e v7-1-225 +575dacb554d8b134356fae0135383d5e2231113f v7-0096 +58059676e24a6fbbc686faf84c612cfa8c25485d v7-0-134 +5858c00d0f2c47b395e3c63cc809ee667f8c02a4 v7-0-122 +5898cc36322e7f1dc371e89dfb5e2ffc3c6c6e3e v7-1-309 +58a14bafc1f08b9712732a26a44c2a93e34e6ae2 v7-1-209 +58cad056e60844274b103ff3fdb56d7a6749b121 v7-2a-00 +58f47e17ba1565ec9c538c7f216cb9ea66e58a63 v7-3-122 +594f25e4a8065bcb865784556adf556004bddb24 v7-0144 +5950b03fc906f434d5a1b899bcee8ff839b05a34 v7-2-020 +59edc8429da0ca92da8913823f56b219e3a99051 v7-2-065 +59fd8376545beba122700d5a481793f29ff0a69e v7-0058 +5a1d8468d1fad7189c8c781149f034dbb4208b39 v7-0-224 +5a1d8468d1fad7189c8c781149f034dbb4208b39 v7-0-225 +5a1fe35a6eafb1c994955a34d8152996d53838e3 v7-3-092 +5a7384b9ca6691ee880dd4e01dddcba5dcac4f6d v7-2-031 +5a7843c57316c63d1118b6a5c2f42d330e57183b v7-0e02 +5a84b6388a5589d6f3b53a1aa6f8fcc369989a0e v7-2-369 +5a97d0c03b593699d6e0bb2ea49073dca03153f8 v7-2-397 +5abd3e3c0085de46b37ac9bcee90be8160dccafe v7-2-363 +5b101ff9d4c43c566e7adfb0a7c0978d2150d741 v7-0203 +5b154df6fcd89b4d24d34da63626cc01d9b5c0c2 v7-3-033 +5b43a3a9454ad69432d5cc82b70d59ec6c92a45a v7-2-003 +5ba8e25f7fc159a684a965ea9e6626f62b76997c v7-1-188 +5bbc2d6658adb0dd3c67dd80c59f3a7ade3ba3d6 v7-2a-013 +5bedef935ce38062e866c72aec633d38d95dfbf2 v7-2-357 +5c3844ad7d5677953eac88ec4ee317b298812bce v7-2a-017 +5c4b2fc4f067cd04bed4fd0a13bdec7d26036d26 v7-3-049 +5c6a3e894d43ed024662462cf5c6f77feb743132 v7-2-288 +5c6fa259c9236cfacc66dfeade89414479b5aa58 v7-2-328 +5d1ca05fa8ffd87bf59d26121e6cff5f91e9afd4 v7-2-199 +5d25cdc3c3f31d4893f646d5e7b94435ef59aa5e v7-2b-003 +5d2f6d04c82f900b01c18a7bcf2287a42cf09ffb v7-2-253 +5d5a41a95347bf4a1382babc697a1f940a83e43c v7-0-227 +5d5cad78a8380735abb8ca0e7d3ffb11e9eb98e6 v7-2-300 +5d84650b569c7800de8012d91660441bda95e5c0 v7-2-108 +5df74a812b7b20bd7e33634453c645be0eb8a2c4 v7-3-012 +5e0c164fc1c25fdfcef07fc03c6634216e6ac066 v7-2-277 +5e168526af25c0a59c55dd009e10a63d2f156114 v7-0-033 +5e225f973b5d22208869bfbf151c5fd03b5a3451 v7-2-089 +5e75d07bfe75fc81e0dac043b6bc0ba417736b17 v7-1-293 +5ea1f7516c2cb92422abed07129357a0d5a6a787 v7-2-165 +5eb1ac6f92ad40da9bbb585f5ff8fe003e85122c v7-1b +5ed9395c1864269b18ffad462291eb37c92792f0 v7-2-235 +5ef53a1677ee9c831d7a18ee44d1041f182a82b2 v7-1-099 +5f0c7aae4da272c73cfc625f35dc050897b6afe7 v7-1-330 +5f33b64a6694dbc2c167b86c56488ddeeb7f46c5 v7-0107 +5fafc42c22d246e4dcef5c09d70b757e0d374b2c v7-2-053 +5fbc411a611de301397bf4f8edf494fe07bcf6f8 v7-3-042 +5fd44cf99b6ddccdadcf70ff8351999e4bf5dc38 v7-2-398 +605f5c2f77bace46037afea6841f7876af85a4b4 v7-2-182 +607cff4bc0cbd7ddf84007a20bf3e6bb01e70694 v7-0088 +60d21d224d251c448ef76b1b9df087497c06adf4 v7-1-038 +613517f0b72a1600d58abeb8c44df9b3de1ac997 v7-2-284 +61709607f5e26dc1d4cf420a25292ccc857d3575 v7-1-228 +619b90abfdc95e3b1d0981a8995b942c6a7c3c29 v7-2-032 +61b50044616bc626b27630b3c9f03322db0ec609 v7-1-090 +61d080cb268e21cc2275da3a0ff2b2081d97ff51 v7-2-086 +61e5d40135d0d90f5d1689c469958bb7a37e074f v7-0-139 +62716fd61fe94fb9e7f39294dfa9dba4aa06fbf8 v7-1-204 +630eca9496e07d9a778fe87d087832816a01a850 v7-2a-010 +631143ac4a01c32e465380ba2ab7f82949f20d75 v7-0007 +63157185aea525b39b1238df3ffbf4ec0fea10b1 v7-2-442 +63369d73b551cb0b72202c29dfdf59aa6049a333 v7-2-161 +63613d8d7e4dff96ba2f34be50fa4b002f56cff6 v7-2-354 +63bf37c1e7a2c323b368df6e926b026139ec3144 v7-2-401 +6412b0befebc17db58a1e8acbef86d3a3e4f742c v7-2a-007 +649d340f34d3ccb1c96efa9522a65803575d901c v7-2-067 +64be6e0b070a5f5f58eddedc8b57dc0356642cd5 v7-0-004 +64dd70f176c92013bc7efd0f3c50083fe4ca0972 v7-1-021 +64e2b75e16158d89c4a600bb97a62a4616632884 v7-0-141 +64ed4359d9570e345dc109b51138c36ac8769614 v7-1-221 +6510d834609f78327cf78465d6849601bfe39108 v7-2-380 +652d074e0264f453cbf76df0ce041b5032504085 v7-0-048 +656853d9c014add434086291b7af40ad828f126a v7-0-111 +656b4c052203990d56ca731d2e3ca39ebd9bd775 v7-2-029 +656ca7102064d711eed5cc678b4a5cf03b5d9c05 v7-2-026 +656e652c6579a812d9f48a0e5e4d8ee47ebc1a35 v7-3-068 +65c332f15dbf3376ed5aeea423e8f1584a65ff29 v7-2-083 +65e0c2e3a3521c9782728f307ced58a5740d87ac v7-0-166 +65fa3b16f040f5320bad34c324f230099bfd8f0c v7-0222 +6605dca2960f5c597f981c60cd3009e98b173883 v7-2-178 +66080ac5dab745208cfd8f385faea24ed68be68c v7-0130 +66263e241ce35e11faf9b33ef6e2d509e1ada4eb v7-0176 +6632670ff6fc2bd4dbe01001086874b9f75b0929 v7-0-053 +66475621f0bfacb601f38c15625c15c2a478e672 v7-0147 +6675076019ae7e7444c526b342c91ae2ef6cfaac v7-0d +66b1822ba176a2f7d7e2878b2907af6d86e5b5c8 v7-2-326 +66ddf49935fb8979def275bcf7c56acdfac7ef6d v7-1-015 +66e40876590bca973973b6aae208a14cb428c266 v7-1-007 +680834cb19eb2dfdc88aded4bfb36518ca4caa60 v7-2-022 +684ea86baabb6ead7b673d20de6f4b5b27a3335d v7-2-101 +68f00510705229a9b8653612b806dbbcccd5aebf v7-2a-001 +694e8715dce6af134be79c99e97f90786088078f v7-1-316 +6974b167d75eabdf70005f666e3dd0e82e47be4e v7-1-056 +697dec8ec5e723ae32e12229d3ca111fe7f4ba92 v7-0-037 +69bcc0c891d706d3383f013e9e5f8876b6c76d4f v7-1-158 +69e8006af73433fa27ecf32b695919bd665be1c6 v7-0212 +6a2e4860134bf0e4b5edf382627809dc6cec309c v7-3-091 +6a80537ac7aa6d4c9011edf4db84a6aea85d2911 v7-3-041 +6a85219723b98ddd686d1a80c481a545bcb535d8 v7-3-027 +6aea606c9e911f768a5e6c9626581721f460f756 v7-2-068 +6b5d641bcdd45e53c24e0b4e0b6085a696e336a8 v7-2-395 +6b89fd4ffcc698278ecc582280c79916a425498b v7-0-008 +6ba0265d1f1b70b8a4a2b3337b18ded763f58f09 v7-2-295 +6bb1fa855dc91259d295a1beeb4144aa51b3cab6 v7-0e03 +6c05b5e5c1be4ee9b8f96334b7fba7afa832524e v7-3-032 +6c3c2e464a9628bcbfe21317b8fd90ae27076735 v7-2-392 +6c4da3e24371945408401d6330a930d44cb5d716 v7-0-232 +6c62b9b939bd8f3df4ec59b2c2d72bbbecc723d8 v7-0093 +6c7719f94811d10db3f86578e5286e5da2fd8514 v7-2-170 +6cc8a093e4a9b14df444effaef7274d2318d00d1 v7-3-115 +6d421b3c485b2da5a04529c6b71041031d41b80c v7-1-046 +6d80dbca8501a4152908713778ce03e0f45b93f3 v7-3-118 +6d95d8976b00540c053d11fff36e20556d125152 v7-1-200 +6ddd55ac6ce50b94713303278888da04d21f489f v7-2-249 +6df4e719ce4eb637d6db90febd0d1eb48bf8e96a v7-1-112 +6e03ee418b50de776b583358fe2ba20bbaf043ad v7-0-137 +6e9c10c63e25ce9212c5d629c9fdb60b67e6658a v7-2-216 +6ed4a82fcfc6f1c354906dfaa5e13a192b3246a9 v7-2-175 +6edf4a4f6cac62dd123f7d1017a7624c9f48e71c v7-0110 +6ee9d7fa5df6d00c892f7e93a63435de5c50e083 v7-3-057 +6f12c4eae4f69d1379427e8b0cee82769f75c35d v7-2-153 +6f4740f72d3d2018bfb19d4c8d8064e3682fd883 v7-3-090 +6f8b578776ab0204bf16f669383aefb0661610f0 v7-0131 +6fdbaf2bba0459270702479d6c4cd04f4f6bc034 v7-1-098 +7002404b17b15ea37887cb1dd5b5b95883cdd27f v7-3-054 +7015ddf8105575fcf48eac35b14c61a24fc38d7f v7-2b-018 +7033303ea0c065c16d5fc31d485c949f7949c10b v7-0089 +70661384379a0dd305576f64554608a396b0821f v7-2-056 +70a5e723eea2c648aa82f7c8f28a2a5dd5429132 v7-2-213 +70c67b1bb1f1aeddc1dea55438e11ae6f9ca3d14 v7-2-329 +710b52d02c4a0649d5b20c38e3394a2e248be9f5 v7-1-237 +710da9abc3c1191eec6633477eea663fada04939 v7-2-317 +71219f47ccd9551fc7d090e73afb83cc395232d8 v7-3-025 +717e759932cb94af9ee8dc9e93f33b67f292e8c1 v7-1-217 +71bd485d8fa572ac15207c5c1059b2ad0ae685fc v7-1-166 +71db8539b8c487eef0df17f2069d96fea1911cf1 v7-1-268 +71eaeb69efe49baf0f63c6e9cebde1aade638ccf v7-2-007 +7209e03df1005fc037c029799b068f545b60433d v7-2-075 +720a59d79bcd3d606bb9837492295d0c52835500 v7-2-168 +721ebb602db0fd2a5a9cded8e0830800d734469a v7-0-135 +727ab557c58a3257743a8b7589d91e21975b54ea v7-0-102 +7281a86ae640e65e5eff6d6b565be20032f736b3 v7-1-016 +72ef7987368de4715599707a85f74a8e6d029c9c v7-2-139 +730697e82c43a8bc8b5975bea39fd180fb62a4be v7-2-091 +7317e0e2775877fa0b817e20d29de9eba1a4f95d v7-2-254 +732c7ae5743ec2d22423a8bb631e2d3c5fb8e549 v7-0180 +73354c21f1e40dc792e5829152992e76f7a607ee v7-0066 +734d5bdae499eb2fa3f818e843efd9727e7f69f3 v7-2-041 +7387540b6e52e3faad6c78182de9d1354ac9e6b4 v7-1-297 +73995e7c06e668b3eafc366b3c959d32f6bc00e7 v7-1-174 +73c0eeeee0b789738812c1cf821de3f86e1fee53 v7-0-174 +73c5752b957d49da8312ef87383a7368c78df74c v7-1-295 +73d947c20291fd857fba24ddf4725b9b831188eb v7-3-038 +73dd10c18ec4eb2cc0857417fb8cc20f63dd42e1 v7-3-060 +73f10d8124f48510e0ad1468ee9e29c010009621 v7-0136 +7472c565592a373abca2ea571e229b4bcbfd7b15 v7-0117 +74e9d19831c2357d7b998f484ebc609dbc08c5e4 v7-0081 +7557b6ea0fb14ba4e97f5a8a04438db30cf902bb v7-0030 +758822790b43d2fc184878c3a50a12d71dda794e v7-3-031 +75a69023117c516ca184ed479727f105af12cc39 v7-2-221 +75a89c7c204e0f478f480598cc3f2a8c45dee8b3 v7-3-059 +75ab683fdb50e83cb9037454f5dd8d602e08e4c1 v7-1-233 +75b3f9cc19da44ef65c962deb7a6049c305f49d4 v7-2-283 +75c88515e0db5fd6f88a05634d9abd22795aacbd v7-1-214 +75dbeedddaa9b0e0784c4d23d71de713a533c5b4 v7-2b-016 +75f5889a5d8e8272fd17a104ef148776f9133aa8 v7-1-260 +763272b18e4ffe717ebb58827315badc09824e86 v7-3-098 +76406c9cbbaa1ab6a8f6ca7f079c3ba8cf06e2ca v7-1-176 +7644c80ca87b75a7dd85a7b4089e74bf5c503f3c v7-0-089 +766918de9e3a76816ebdee3b90cdb1f9f76bca6a v7-3-004 +76985a406456362dbdb4e7e4bef67656b84de965 v7-1-240 +76a42a81f68505f7b99af53a919e3cc7895096b6 v7-1-087 +76c2b2dd25c9c6945489a1c636f7e375ef1f40d0 v7-1-033 +77310929a1f94745e3d49f0cf1a6908785d3cfb0 v7-1-151 +777d5460622d4a9aac084695524d0c85b39f4174 v7-0-164 +7781fcd2b74f26a37da0d1186a1c44d904a8f11f v7-2-011 +77f3dd990b12aa963aa0a63f0db50f6443f3f41d v7-3-119 +77f8a648d2e6c765329ee6544bd8716835bda3bb v7-0-062 +78b9d5dce950b348235ee667f8573c6592920088 v7-2-420 +78e032bb32605c1437e30f7ec3215ad4c0772dd5 v7-2-303 +799c1db62b42a7c9d504c45ed313910c2e3d169b v7-1-164 +79a23c19108a8b1eb9d1b97d5844fabee6525e23 v7-1-079 +79b395ba0ea5e2bc7d27ace528d84d47aa1f5a66 v7-2-311 +79b8d69a4588b93516410e519bb9459242f46d81 v7-2-340 +79bba9e6af2b6588349ac2b3e9fb722d6ecbdc85 v7-1-224 +79d111ea8ef64e7bab0a5e27b7d5903f10e45a43 v7-2-425 +7a4ad3fb109d42f37f82664390f128dc9b7e44bd v7-2-188 +7aee5e68548a7cd13c74e67439f8c3b8ae6327be v7-2-417 +7b0e89b77216baf928145ce14741650806004c31 v7-2-365 +7b258a166daa98eb01237988ec954895a2e6ff0e v7-2-018 +7b44c70ee8ab87d5265ebec758a6f5ea9d5cfa75 v7-3-104 +7b875bfb39b871d5d40525d579e30358bab6be1a v7-2-434 +7bc38b35f1e87c1749f157ef91b6cab86bfd9561 v7-0-026 +7bcd81b96e2abb28ffb000145c917bd05e88e5c5 v7-2-267 +7c28790fa8b4054bdde6d358a9132581de76df62 v7-0-009 +7c2e6ba1d702579761d7ddc4020797bbc97805e3 v7-3-008 +7c3302e07dd7cf0d746776234ed4e9cb376d3611 v7-2-023 +7c46737918cb0adc9a51849b75b1c03da7bd77f3 v7-3-117 +7caa503b63a9b193f3b9e016a0a466ff8065f2f0 v7-2-225 +7d121c69f540272878af6fafdf658443360a698b v7-2-383 +7d127d580b6d2d86853fc0a322323cdee2eca343 v7-1-318 +7d2641e6af75b3cfb4dc29e7c88812dee6c003ae v7-2-261 +7d29124f77f5e794008c746c69a0f79da0cd966a v7-0-133 +7df2d171ef1c1284e10a4c53fb079d02e6d7b028 v7-0-163 +7e0c8a18c915a4c7dccf01be813488e27d03fdc5 v7-2-275 +7e5284f58094dd557b1502e1536c78846a59049c v7-1-134 +7e6d264ec0a270beb9692df71fedb210c1896640 v7-0141 +7e7da11555d27f62984297f3e1debc8242baf995 v7-1-080 +7f01e52cc97aca6eff92948b67876e800eb67fc3 v7-0-171 +7f2d3b3c15a2ffbd259c2ee99966124c2c2087ee v7-0122 +7f788cd2741586586a34b41627a1c978fa465666 v7-0020 +7fd70926e2e1c299ecd9dff6ddfb51ef71f7f08b v7-0055 +7fe13e0f5dce15cd16dd61c898e63899a9aff561 v7-0175 +7ff9f75f9c59f7b600ada6ac4b3234398df5f38f v7-2-245 +801d5544828215bf644cbc6ababfc66beec6cb2d v7-1-195 +802898d3afd12da41c305c495b121e41ed880659 v7-2-214 +80b9076e9e177bbcb455eef9928283077ed1c861 v7-1-310 +80e5b1da667656a146cad7a749ac9fd2afb659bb v7-2-231 +81059e8b657d911c9876f557975f34624988624f v7-2b-015 +811f29447aea27adaf1f54879ddf0fbd05a1e094 v7-1-270 +813a407a63af8773c585b0baae4d22296503ac03 v7-2-271 +8173ec1e9f1f746657dd598b6e876b11c99e1049 v7-0034 +819d952a0a5cc810c52b34e8df400f83eb3353ce v7-2-142 +81cf1b6e0a2d59192534f884135108f788a20b91 v7-0-147 +81fe2ccc1207699c377b42f1d8ca426a70177afd v7-0179 +823e9ddf23f77858f1b866fadf3e4ec5ae5d55b8 v7-2-141 +826f00fef9e338c7afebef68658716bb0aab62f4 v7-1-096 +8272535dee77ded630f57073b428e89673f1ee45 v7-2-035 +82885ffcad10aaf6d11170dc45d2721ee222c37c v7-2-310 +82add1e7c154fbbd5926df49fd4afe768e6007db v7-1-013 +82b2594be40863fef91c163200db2f56b2e4e52b v7-0-155 +82ca8ff21fd7181e16dcc58863d0d251b9228374 v7-0-175 +82f866f19e91a19ae44e7dbe5eb8747e98acfd85 v7-2-269 +8389197c91f3ecaaf28b776e69b9336eb08828d3 v7-2-133 +83a006f81bac04bf9b975347bf8d6bddc7996eb6 v7-0199 +83a126db2895ba22f2fff13b488f028ff83bec28 v7-2-027 +83eda510dbc07b4fe4db5b5f324680f60c307fff v7-0-222 +843bfffb04c739ec456e5c5f612c6d025f2a6188 v7-1-058 +8464d084fa7475830cdc53529cd20f7334c81232 v7-3-095 +8531f7ee366297c58506f9a3130f45c350ce1fe5 v7-0-218 +8562c6804861cd26020e1a004edb1c1b218af9f2 v7-2-388 +85a99ba3eb5ab45127c996c4e7b4dea2e7a76c54 v7-2-233 +85ad197907065fd92f29bf3dcc190779a20aba46 v7-2-396 +85da0376313011aa957a9132df2686c9aba079d0 v7-2-333 +86079b930b3e8735933c9349e44184761bbf56b0 v7-1-010 +862863033fddf5f0bb2f18988b79bbe0d289ba45 v7-0158 +86289e90a4bbb818e9cf8bae6e57f7b91b9671cc v7-0-123 +862d920800b1a8a5ebca3e7db5dbe431982f7d0d v7-3-103 +8647018a15f3e4e89c706b6290ab0151565f394a v7-0-178 +869c92bcfb697875d5580fdf3a13eacd5648c5f3 v7-0085 +86ce35c9750f60054f48c1bfb80507345b862d8f v7-0231 +86d71ae0c85a546d4a00b53481b540a4ade2c9bd v7-0042 +871231399cf547112a50a9f93497d40d01b66d51 v7-1-118 +87401adbf5fcbc6fb8edf329290c445528266bc5 v7-1-067 +87a777aea8993a49e61394e7a84847e91b014090 v7-1-005 +87ac4be389523f44914899c37180d22b60757ffa v7-0128 +87b6a6a065ab60f6ca4ed094c2afafe16e0b590e v7-2-171 +87b9f21264a79be4ecfd14f69da0577f9d41f260 v7-1-247 +88095f75d63b5a486f603cf28801df0118ed1218 v7-3-015 +880ece6b24762edd52b414aa1f005478707a3179 v7-1-101 +882b2fa49a2a888a8231f3cf2428b91439decb93 v7-0-014 +888c0645d64f3a844b22525387981f17317d8502 v7-1-069 +88c0c6c9eadab09b029312433f246f65e216a1f0 v7-1-184 +88c68e59d39cee12c580f1df72a5759e58574978 v7-1-088 +89189f7aaad9c28435aa5cbd4db359ae54d0769e v7-2-312 +89300f5e013c7d217d5f891113a57705cdeb017c v7-2-414 +8978513bb5e31d3f20c941e5141d228ca95a6f58 v7-2-100 +89d1e8ed6c1d6d9a672880fc73df97486b2d5966 v7-2-227 +89dc68c0ab6fd676ade26cca39e16b81896a5069 v7-2-386 +8a0a8f10b43e02d44ff26d608cd80fb61ce4773d v7-2-356 +8a2092b558c2fc11605dded24c4c5a817ca92ac9 v7-2-443 +8a22a90c964a168cf3d93f5ff8d5c531a4327ea6 v7-1-229 +8a5a95f7ef2a7dfeb585d0392489fb57ea4c5af9 v7-0185 +8a6982d59d8ef4afa5c178d772bd2943665f0146 v7-0224 +8a6c67218fccfc536fdf829075e99549fb8247dd v7-1-173 +8aa3cd045aefc5d324d820f2239ca1f533e9632f v7-2-379 +8aa94f8080bdeb8908de30bbcf62945dabba1aa3 v7-3-022 +8abc0abf8cbd09abaab555fbbaedbbc231d42b41 v7-1-248 +8ac6392acb0a87a779340f949e280bafcc49f55b v7-1-136 +8ae24f338cab86cb35fd495ddc3cbe2101ae1558 v7-0217 +8ae4de2d02af315b1c0abc2230c3ccd5a31f1013 v7-2-384 +8b2e9257cc116bf30b755aeb37a742ac83f5da42 v7-1-152 +8b84fe17e147219e6ff181f6bd7e809e5116588c v7-0159 +8bebcabccc2c430f05c5d85f8532adccb18a6136 v7-0e01 +8c229eb52e347be77c76c1c2c96f717cbfdba4c5 v7-0099 +8c25f10d49e7186c9785a0f01612166f20a29298 v7-0028 +8c60f65311fa6358488f671adc226950c18a993d v7-0052 +8c8d07318d8d0b1bcfbd395ae7aeec6813725b33 v7-0-086 +8c9396275bfaf3ba6c759c26fef07c0b687a8abb v7-1-277 +8ca3c9ad0bee0c265345decd180d971197e36194 v7-2-366 +8cd72985156286e77ac5d271a13cfb569b29ed76 v7-0g +8d09c1eed8a57bb2df53fb1f1747137e5a3489f5 v7-1-074 +8d1db3e3ac5f3f33dcf5f68ea132502082e787db v7-2-262 +8d2b705a5a51d2a6756f16dee861dae4ea97101a v7-0113 +8d34af900baedf0db9a3e57bbf48eeee75068e06 v7-0072 +8d74df00f7daa4e79bf7fc56164369781408e1be v7-1-262 +8d8dc7e07999acbfd89d0b646d72fab69e06bef0 v7-1-230 +8dc36a64ae8b36d124bc0767ccadba3daea943ec v7-1-294 +8dd456c1e283bf8c85e9ff38994fdfc6dd009ff5 v7-0c13 +8e2d14a3e7d2860527d39f0b662beade84db9d23 v7-2-352 +8e42199f51218e2a14a946ee50c1e8d8ef38205c v7-1-054 +8e5830943bff21c0a2aa18399d18c8269ed9d3f7 v7-0e04 +8eec9649b7a2ea1a441723ce7a4e8637c294ffbb v7-0064 +8ef9da918a98e7f8fecb4d88914e4691a8da88b8 v7-2-413 +8f72e3512b437d2390860bf9fb6605b778cb0346 v7-2-381 +8fa8d7964cf116fa98895d029808a0d5e1cf201b v7-0073 +8fafff87aedbcc1a7c71e29a9369056e5c08e84e v7-0-075 +8fd2e00c44ae10bd9e8a8f5c12db47378314457a v7-0-112 +8fdc1210333357780019fa8dbabc34f07d545775 v7-3-035 +8ff7fd162d3cf15129e377401e49f8210d62aee6 v7-0016 +903088c7a7c61b7f30d35c8a184d90b7af4a44e6 v7-0193 +9032e466829601e6c56046813d0a9a00946a1d10 v7-0189 +903fcd726d9058a0b0c14a85cadf31aae3ad27a2 v7-2-359 +906b37d2f9c3a85fc9c67a29005ad1538e60efcc v7-0056 +907cf09fbb32d7b189d3372f3c4f1220f198a9d1 v7-2-385 +9090f866cd57a7febdb2e0679bf0a5e86951e314 v7-0197 +90ee46d7f4927c095141dd4afa92400f2fe4c697 v7-0164 +912b18745defca4b03d5738fc7ae6c76d701f2f7 v7-1-143 +91e7d4a7b3b0e20b6f5bf9468ad17625e745d640 v7-0178 +91fff9db214e21eeaacd20da86b22629ba6d92cf v7-2-297 +920a993902e8332e3fd539a54997278364fdbcf3 v7-0062 +92168cfd558c53f1fb0d8014559f16be0a795171 v7-2-167fix +9230c45fdde65ac15a42c39d851c68b248fd6836 v7-2-226 +92809ecb9a476994296e51001486b3934561fc87 v7-2-292 +92f3089a7b10dc9e8f5f3c69ab1e490d52ad2f0a v7-0-082 +932fe018ad166a9f8e4b6b0ae91d562cab7c37db v7-0-168 +932ff0c0f57bb90d48470b70cc728058e0c56e3e v7-2-173 +932ff0c0f57bb90d48470b70cc728058e0c56e3e v7-2-176 +9364d114ed8d089f3a42c910442957d33e5480cc v7-0204 +9368159253f847f95c6c1f39a894e26fa3c954e8 v7-2b-007 +93ffa40b532038ad22824047b15c6edec3b6af5a v7-1-155 +94164a5b0626984b565ae6421c64bfd6d993e162 v7-0-043 +94694351f592a56f8a379510eb6992ed0dbee821 v7-3-029 +946f0cbdd535d6fb8915ccc87b837edb15287663 v7-0074 +94f44da44d2e0874a562918005789418793bb507 v7-2-339 +951641b8784de5175cadf9fdbc361db2b6b45060 v7-3-102 +954947a70580c6c5d94bd110f974bdf103dd6fd0 v7-2-166 +95723058b8ff365843508cfa47a3bc2ecb1b0cf8 v7-0-229 +9577a28005e10fab0a0cada6c41b96c9a3e1bfe9 v7-2-446 +95b507e6c9e75d5b4c114a63a98b4bc36c643eea v7-0-145 +95b659982b7c17ff93304a37f43be8dc508e20dd v7-2-375 +95dac6af3b3a8f50af24432b7e355ea44ec69f95 v7-0232 +95dd473d2d28a088822c73309c3dee597c96facd v7-2-044 +96276cc11d8e68ee320e0f61e20406dcb7a0b995 v7-2-240 +96445585f1d9d1abbc74d9c24efbf0408b2cbb12 v7-2-151 +9656552c468d29773423dcd62a323aceee0b6c55 v7-1-072 +96580558098272cca6f93085d79aa7164c7abf41 v7-0-215 +966289a3dd7ea565980bb03abc9b52d88378f96c v7-2-316 +97a73b6f28925dea4310c00225cc6210af00468a v7-2-113 +98a2a6e6b966668c810986b6ddd4820bc09db426 v7-2-353 +98a88a884610aa911950623d7cce8d067feda66c v7-0230 +98cc757f7e3dbff20ade108b82582d7a7d88ed33 v7-2-376 +98cdf5c477ec3c3ce8851a517ca3021aeda6573a v7-2-298 +98d1c149be76b44332bdb72e986bfc8b0f9f21d3 v7-0-160 +98ef5b0fe07610170bd68aac5ba6e739410c913c v7-0-029 +9913ff5706164031d5f847bc0980cc61eeed3974 v7-2-119 +992d5c69d5e917b03abcee24d2fbed8348e21c23 v7-0-132 +9947133ce85b86df83b86f476c09c0454c47a310 v7-1-078 +994ea4e6f0238f12a5516eb75f7a6d7ce86362e6 v7-0-094 +995536cad50e5c08be60c2d82c7b32a63db1e434 v7-1-218 +99a9e42e5688aeecaeaa4642d17be0ca54ab5945 v7-1-095 +99b225e0dbc1989ecae75200aaf0e5329e6bedac v7-2-430 +99ccc8932b6c450cbcdcf86de05dbd5129a370fe v7-0-180 +9a10e4d195b342292cb8ce0d368afafac146abf9 v7-0076 +9a3b65713280ebf8750989758b4b2d42f757ca9b v7-0-216 +9ab23f1e137fd5b0e35c1604ffb95979713f83e4 v7-0c12 +9adbd26f7fee884be78276fb400ee77d333cf335 v7-0-116 +9aec644c45dcc33b3f3571ba0035e7f85430eef6 v7-0-121 +9b78bb3794ba4dba44ab3eab9ab2984797e839d6 v7-2-350 +9b7d8fd5dc68074119d5a609210fc1ba924e9d7a v7-1-148 +9bc164a2c8143f6019d0b13a2aee4be89da3a9fe v7-2-204 +9be44c669f4c67406132ede84d1d2951eac7d63c v7-1-172 +9be87deaeb527ef18daf09d6c75b21d1d7a65d78 v7-0009 +9c510840e896fc3776ec7694fe90e18808036fad v7-2-439 +9c5a9e4356f8ef42ea2c177568b63bfbb1779bb0 v7-2a-003 +9c970d8681f46de0b13ff16d67c2327a19f33626 v7-1-226 +9cbe94fd5c8f1ca388ccd2be94f17caa33ef093d v7-2-314 +9d6a886aceb23fcaf8f64f9cf1ebf3f83d14b2da v7-2-242 +9d74e2f433c0370cb458c83d12b05f72226df489 v7-2c-001 +9dbb57025f2542dad344102c571c06da6b840b34 v7-1-139 +9dc77520c6d3ee0c3e689bc3e6d635cde80909ff v7-0-013 +9dd62cb57ed5845c9c2294b6002a29702ef043fb v7-1-319 +9e0174515abb6667a9e74e6fefc74ad50d7821d2 v7-1-291 +9e084588b706867fae28f93f67d163635a79ae51 v7-0-188 +9e1cefec84dde22d62c1bd2dd0ceb4e072470981 v7-2c-002 +9e265d9089fd4afcc03a4ac7c1ccbd754c8ef6f5 v7-2-436 +9e359e5759f628fd0ff90172d533636440b464e6 v7-0177 +9e554211caf55e33249908747d9259ac77f10b72 v7-2-301 +9edb5759494281d90ae0f312b2ac32c30f51ca50 v7-2-260 +9edc96495747bd354e68dfd76b6ca525d39e715c v7-2-206 +9f184758f277b816c95fd946cd2d63578d296578 v7-0-010 +9f279ebda75194c26ba5c917f68a7102348215b6 v7-0f01 +9f345c48220b7a503fde0367df20e576fd46b04a v7-0c +9f8fd6a14cfc84953deae7d00287a1949c0f0eff v7-2-004 +9fb5bb1ea79b5ba402e51051d79a3476ffce3c35 v7-1-044 +9fbb40a1228a4d8a5f26d1dff8e2ab4e3bd870fe v7-1-282 +a03f7551baccc60bedef5ef6a9f92ccdfe69a9a3 v7-3-081 +a041f68d05909431f0a525eace55307214c33d43 v7-3-114 +a0451524244d6387ea49cfda296f6550a2a9aebd v7-0082 +a07007166d518f51749cc9e145afeb023638a415 v7-0-044 +a0a98a0f12816722b1792141edb3625dd72eb5bb v7-1-326 +a0b03b7e9168b7f7fd61b1563ffdd6d09ca54260 v7-3-028 +a0c01df852e1d183c879ee114b35b2b5b0d06746 v7-1-300 +a0c70314350fde9e0948e598fe57dddc6192468e v7-2a-012 +a1059cda45f226497278c53752d5c07d21cda09d v7-0142 +a112fdce9ebd6d538c70602550e94f29a2fc60fc v7-0-200 +a11e2070c964de1cfb9fdf3ce339ec75b7a983cd v7-0-203 +a135270b75498b76b5bacbd1e381059283c5e383 v7-1-206 +a13e4b242735dd0b3285b7f36fccda195ba1d5f5 v7-0-243 +a14db0b78c590d4bb8e1a190b80fbf3dfff89560 v7-3-121 +a157c4786b79ae94758574d5ecb4a8f4959de5e6 v7-0-073 +a16af0072ea82b2dcd265d050b349850cf8f28b6 v7-2-410 +a1c1f001b99dd591d9082db95de70e2bf8f9e8de v7-0-129 +a1c5a6cb26756450d2b7065999de140c2fb6ca74 v7-0112 +a209672376fd537735f6ab55ce926cb80fa56ca0 v7-0f +a2271decbce54d46f62e7cc9a0c4e3ea3ae9080d v7-3-065 +a27c581d2618b9bab1c7105fba966af40e23d57a v7-2-016 +a285f0cd8a462ff5cb17053fd457646f9d33573d v7-2b-022 +a2b128f7d705ef08ae91a8616cbaf40883827cdc v7-0c11 +a33e606ceea66c946219da3899de9566fb0cad35 v7-1-024 +a3552c04f4e193d981013fa4c077e49d729abb6f v7-2-251 +a36d21d4a87596abd8775c322fced6a539385ab3 v7-0-204 +a3a4be6bdcdd0f43aea2aa09288e8f515a2c2f05 v7-2-308 +a420bba0d851093bb949070895a9dcf4c25e6c4f v7-0184 +a4365075d05c40606c2ace3340e9484a6b045f32 v7-1-093 +a509e3ba61f6e541dc8772a0f9de0c38999fd610 v7-0100 +a53e7d3fd741c68a30085fd9b22d260aec93396b v7-3-086 +a565175274f6efd9d4f725dcdee1b6e049258d3c v7-0-184 +a58806285f2086c1591272962d0b5709a63a74fd v7-2-152 +a5b3a7fb6a5a0f1857b8d0eec380aa7a0f780729 v7-1-154 +a5beb9fb4da85dfc21dbb68af0fd6aec616dd1dc v7-0-024 +a5e1d6526ac7c92fcad2ae100b1d43ae238067b0 v7-2-103 +a5fcf36ef5129596fc281d76369077ad01323b3f v7-0127 +a5fd859f69f1b5c70de7d0439150f2c681d0d915 v7-1-020 +a66a49322b6bc2a82c6cc3e8092db7d502f64c4b v7-1-073 +a66c405786754105eaa63f3264c94ce134bd275f v7-2-105 +a6776e2c9f014491c7476c3a12b2b7f108e1b6f2 v7-1-222 +a686fd6c8beb2c41110e0a65f6a403f0ccaef83d v7-0065 +a711f7a6852db37b1687044ce8a96b6f48e9855b v7-0067 +a73a117542b8b5ec22eb3c61e45ad888d3d76b51 v7-1-171 +a75120dc3e2691218f3144bbc24369283d74eb53 v7-2-190 +a7c4842a0be340d06de659940f9396f969bdae77 v7-2-212 +a81bc802c17ce7002b08d2e327136e3ac4d11d5a v7-0011 +a83f48a17efb871266ffbcb3b6c9cd5a62408410 v7-1-274 +a8752f2805d69f51f1f6370eee8c7e2c89c57db4 v7-2-037 +a881e15f44d8b5888733fc98c39984c2fe6316ef v7-2b-011 +a8aae2e1d2ae6c22551400d451e4ecaccceffcd9 v7-2-049 +a8bcc7553263bb7a12eec8813270ed34242dcdfd v7-0-190 +a8caf7dd853dd5f5ea2bbc671467ab2f78989f44 v7-0205 +a954a30e407394f51218ead2a7d832e022fd2378 v7-2-115 +a9e353f7fcc48a2b603ead42451ea8e89ee7b9d0 v7-1-285 +a9e90b3356b62da552b62eb62b8dff78438f2dc8 v7-0036 +a9f561ffbc53a7097873cce7e8a8e1615ac0c38a v7-2-243 +a9f814054152b658c1b90aadf0f75428e1130cd3 v7-2-074 +a9ffa7c7db7757ae7c1ba0e7d3b990bafaefb558 v7-0-097 +aa6caa23a4b834360b82d3d078d1d17f33d673b7 v7-0152 +aa7c51f81f46cc5379386ac622a5ba44aae1c4dc v7-1-227 +aab202d244b6bb286a62508a432222d26d5d215e v7-2-394 +abff2f6a3ad7790f86e055519dcb851a06fe78c0 v7-0-036 +ac0458d9b9dde727d1bf11e9e9221edc20b623a3 v7-3-026 +ac04f392ba48436bc1b90d3d8b8d384fef4f8135 v7-3-073 +ac33b7c03fac7bf435346233114939fec2e187e6 v7-0018 +ac6d15d91466b34e4ff31765d1d1e1733f02ffc9 v7-2a-014 +acc572c5660c90020f42c9f31c1d2c776c5dce47 v7-2-097 +acfe86afd651f1abcfb6eb38ad0101e61a27c65f v7-0135 +ad8f5bdc727441118cf45678b031d04d1a77aae0 v7-2-001 +ada3271481ceab448c69588c5cf837c2dbc91987 v7-2-289 +adf6a9dcadeda32a2a339069336ebed7fe6d53da v7-0-038 +ae2251be41f935706f7e634a832ff5ff8a91d023 v7-2-185 +ae22c450546cfc001c90ca17999318e053838c30 v7-2-433 +ae7e29b64923da886325215a1a5b20bd60e4cbc0 v7-1-194 +aeac63ad9430d81a0dfdc21080f1f05cdc633baf v7-2-048 +af7afd2bb4c235544fc9da6b34898ea93d477d77 v7-0-078 +af98ef7f5a39aadfe18dd44df9afeedbb0665778 v7-0-003 +afad99b3612ca54f3668c232e8d3ef235d74c9a2 v7-1-028 +afb64d9f5b8ee1eb6e787e1d34ef8b80f15d4749 v7-2-013 +afb740b5dfabffdc759d3428254c944bd4badeab v7-2-191 +afbe4a4c884ceacc349264075afe26e93bc75f07 v7-2-208 +afc60a6339a68f659addfbbb849e249964c9107c v7-0104 +afcf9db31561c7fe2b62b346aca751bf7bb31bc3 v7-2-336 +b00bc2bf23eb62a1883318c6565d3fe0d1b4e30e v7-1-119 +b00d5f429a4b2f0a23710200cdf2a672ed9d5501 v7-0-108 +b04bb35fcd4b7edeeb8e175955a2909a86dad118 v7-0-240 +b0605f2f9786c14e943a0ab440c16b444f2a9cac v7-3-113 +b090b216a832197c70f60ead52026a53ecb0cdd8 v7-1-009 +b0dabd584b8f89ac32af9758c221e948016e2b0e v7-1-175 +b0f8f28a67c23c9e9b6b8087b373d6fb2add726a v7-1-197 +b1706a94f9f9638cc0ecb624dd7519cc9beb6ca1 v7-2-405 +b1b09b68d7069755425a2c1849f517f3f9e760d9 v7-2-279 +b1e87b7f5db64eb40fafb0e9bcbb0c39fa2bac63 v7-0133 +b209c3f94ab7ca3ff559d255c395fa013fee31a3 v7-2-073 +b254cfdd740542f5778d787845134db3c7584335 v7-3-071 +b2789846ed3978ec3dd9a91b6e1ef2f4d054431b v7-3-069 +b2a7d143abe2f572e713acda4a67ebce76511bc8 v7-3-072 +b2cfe84c96ccbf87a7c765442f0e32c62fa112a9 v7-3-044 +b2dcb84570675cbdb4fea2d017bcd093b3f34be3 v7-0-070 +b2e037ed7e33b48a1feb69174850acc393254864 v7-2b-020 +b2f4319efde1edbabcd900a63db8998bfc117152 v7-2-084 +b31702c473ae10db32dcedae94af25228d6c920c v7-0-049 +b34d985598f68b97fe1bdf1d34bf689ea1b8355d v7-2-130 +b4791bb4fbff451efa3ffdabd4e26a668eda2283 v7-1-108 +b4b1b5324380cad36827cc211a2f92fb165d9777 v7-1-026 +b4d11ddb7303ebc28f6a40fea28f003287e77352 v7-0-187 +b4d92472f168c90d60359f6a592d6461686c2db9 v7-1-085 +b515624f6d7dc7597b0b01c5cb03076e4daf3347 v7-0-234 +b54d2f702d41f4fbb8bb3d33e52faf94568b2170 v7-2-127 +b57babddb32b2df9f04b636154a26c51f78d73a2 v7-2-281 +b57f2617965fd682c6284a706a999b58f00bdc3c v7-3-014 +b5ad00887b816469ab8f7733643380a690c1322f v7-2-111 +b5c1cb6f8d565b4fa5b714660e8a0d7f8d8f7a5e v7-2-174 +b60a569eb708bc6563cc1104335cf56bb38ea901 v7-2b-010 +b61422c4dc7a81d340e33e0ddb8ce8cf0f94aec4 v7-2-025 +b62965091b8d258aaa26871ccf80ff9b4037168e v7-1-254 +b63792dadc23ed5ff4e0e9e8c7acc24d9c61e779 v7-1-120 +b63fe7400eb30f9c7b98199a21ed0bdc583aef62 v7-1-135 +b6627f01c67dd0bcdc2f24d56d0a9342cb5dacda v7-0-151 +b6632d553df3c8d25e419d62cbbbd1d8aa5d2489 v7-0182 +b686fb4898d1fd8579e5bf61f36c2a08fee85a20 v7-1-025 +b6ffc2045211c67d42d806af38dae64626aba605 v7-2b-026 +b76637e5ace1cd75c1894c44e132ea1e4fdc1a9f v7-1-289 +b77f790d53f6b57604b1ad5113da4ab08b4ca918 v7-0-236 +b7c22e34316251f32fa1034d11a3eba1829c2b92 v7-2-043 +b7c89e3e19f703c0ebccecc10ee044367a65ea20 v7-2a-011 +b803b277688037509ad1b6d30466721396d8967f v7-3-062 +b8744d1982d1fe26fc41d62b6e84fd315dd6c941 v7-2-407 +b88f0420148e5e65c2f71f47ed2324fd83b3bd2b v7-2-155 +b8ab4ba6b11018e468362bbadf077654f9cb4be3 v7-2-304 +b8c880d61acb8d5e08ae0cb558ece76d96d12341 v7-0-185 +b8ebbfa519b990d6b892dcf943576761e714c2c3 v7-1-050 +b8ed23ef6ff15604ead321f758ecc624a9d35c2c v7-0-042 +b9202c4cf847ac1898b4af225494197671111785 v7-2-124 +b93a3fc3897b3e16e96b80e35dbd72aabf9cf37d v7-3-078 +b9897545378516c8afe3140b7172d838f33e5b29 v7-2b-009 +b99303b1483f26763f0c4b6c9d244763ad32d476 v7-2-309 +b9975513fe244047a60acc818edd8de94935cc28 v7-0169 +ba2ac6b5bfb9679edffd08edef9cd0db1237ea12 v7-2-259 +ba32a005373a78e0b07972880704e2183f578f86 v7-0-136 +ba51f75bd4b514d5c4d48e57c6018c955434b936 v7-0221 +ba9375e24d4937d863ab87d28e6b7c1ed42b3960 v7-0-050 +baa5f81197c865fd8847f6af95fb1d48cea6aa65 v7-3-043 +babbc735b80efd1ef23f35dcc77c5f5cc9e68fea start +bac7c3fce15019af25562f5c19b099c55487a6e7 v7-1-133 +bacdeee78827acbae22a7626a93318ee1919c883 v7-1-014 +bae8347a9ae1131d95a7af1d751fa47df5d3baec v7-2a-015 +bb3661a2eccc165bd5d2a87a8d4696f89431a459 v7-3-116 +bb4797166e4c610516eaa16865682ab14411ecb5 v7-2-064 +bb7a0b90100aae1f77748f6f38aec95520825c3e v7-1-023 +bbf0ba46e51d5a4e58b872b840c5dc3e1ca44234 v7-2-116 +bc3f88ca060d25cad633a20548ca38cc529fa0ca v7-3-045 +bc68103ea3f6a13d26598bfc1958a57eae377a92 v7-0-040 +bc7ec0f1f7f35c3b58b3e32bd2ba1b87501b17d9 v7-0170 +bc95c6c4bac13d4a0f8a4bd6ec10f495d3fa5eea v7-0191 +bca50c9e1374c176a63f9baf0ed7fcb34ea16967 v7-1-147 +bce687811199a7866c7728b09f00406ac1294745 v7-2-287 +bce7c73fd56da29730fff999a1fa4b0edea3285c v7-1-157 +bd7e26d05a3fc8e010566ad8f8aea9c31ddf55c8 v7-0-034 +bd94e22dd3db36f07fd31b2e282f25ccc7335f58 v7-1-163 +bdbaeab157e6f88d82056df6b927acb5b342ae01 v7-1-272 +bdbdec22a225553f5d78db019e13cdfe92b9cb5b v7-0161 +bdcfe793d49fa832470953794583b4bb74ab9fb6 v7-1-104 +bddda5d8caa1c6bf174c5e202d3b08a51dbd54a7 v7-2-210 +bde3b38593f9d07da76cdf37ea574fc9d80aa43e v7-0-052 +bdfbf8ef447a4fabef09ee9d28eedcf0e6b99e57 v7-1-249 +be0f21f63d2c9651429a6ec9e97b8e6e9d0d102a v7-0091 +be1d64f82db26bf7892605332aea6126d6343e47 v7-2-325 +be8e2719caa6c7194ce4713206da6f1f8db694ca v7-0-138 +be9fbf8b0cdb6a42c07a8be94e9fba866cff00c8 v7-0-146 +bec979a53f47ff6866d390eff6c4ddd4d5ce8a8b v7-2-307 +bf5ba8a0cdee590c0841391f9a8b65c456ed06bb v7-0129 +bf63a31b77017d78197bc0155c0ec59e31559df3 v7-0-210 +bf7803d0f5b9d0a9cb16636b9490d723623c57e8 v7-0-019 +bf9579ab26e59cda4bdebcd934c43b6fbded60ce v7-3-019 +bfade53bcafb7b6d297f23ce3ba9e6a72dcb7949 v7-3-087 +bfd69bfb41491b83ac7a4b948c649eaec251c54d v7-3-046 +bfd8935d62009b625c37dc373404b67d0019d7f1 v7-0087 +bffbbb566d6b1004cfe26df89e102c465bed4312 v7-0-192 +c00efaa0af249c086557487d172edd6a1cfc0706 v7-3-053 +c050d5bbe79b6a0bd83fb5dc0c13c350492c7c4a v7-2-063 +c06c658691e20f22ae95d4cf117057c7d0736308 v7-0-087 +c0bb3c1dd44695b4eda074afd1a7394d2b7e4552 v7-1-132 +c11845a465ae63ea7f9942484988dd4e441c891f v7-2-370 +c12f39141bbc7c031b51352896a78324ad27398c v7-0053 +c1709e3f8536100dc87defb9f788f895b4e73578 v7-2-140 +c17a42da3920c34a75c17fe8696d2f04bf683f24 v7-2-428 +c17ba3fb433e7cddfdbf2244b777550970493b0a v7-1-106 +c19f6b8d0393dd28a2673da19e8acef59d371f65 v7-1-304 +c1b61096e3d0e4383db1ef01a5dc2f3ebd5eb0fc v7-0-074 +c1f67ce5740adaa7e1e164d706f204252711d5df v7-2-382 +c21975c58b4497d08a2fa30601723537ab1f03ec v7-0123 +c22ded254d0591df640c3ee0ea3dd0a490fa2396 v7-2-071 +c2cae213194d26214a9132c1ec7cddbdafd18175 v7-0e07 +c3242ae88ef1d4cb6eea51fdf96670cae48fc64a v7-2-081 +c3242ae88ef1d4cb6eea51fdf96670cae48fc64a v7-2-082 +c37ed44f014fdcb211ba3decf81d1f3ec94a210b v7-0-153 +c38cdd201cec8e9a774b7256a5eadf2d7194aa0e v7-1-059 +c3b5d3fe94046702944964c32eea7522ecf92c4c v7-3-020 +c3ba2dcc4cf4b96ddd1e3df9beacd1e11abe7868 v7-0-214 +c3bd0a84e11ad1caf53402dbebc39ea8b01fc832 v7-0-167 +c3e225bc213a1a91a278fdcb3c5fc003ae886f02 v7-2a-009 +c3f63ed316b621743f44a5ab6b9a5438b88feded v7-0227 +c44058ba78bc108e98fc15a14756716c3d3241fb v7-1-141 +c474f5691c0c6461414e65601a97e817e976099a v7-2-164 +c4d200412ae9b66732f2c9be98273802a0acdb95 v7-0121 +c4d5f3d8ad71c4d30397ca0101a89925f1666df8 v7-2-099 +c50c82c5e230a9ef1cb570be0a57d3dc9e295993 v7-0069 +c50ed526966abc52d825a36d5114bebc21f850b2 v7-0-220 +c51a4f9936751df0e9bbdc454727bced532da3c5 v7-2-255 +c524f99c79251a7b614776a5d064ba40c8d4d5cc v7-0022 +c544a3507e839f3ad4db6e1d7dd7474ed0167b96 v7-1-066 +c5871806d7e6c121c80030dde025a96c0ddec820 v7-0-057 +c58b9479e304ff055b0404d9d73a51da4e9bf7e5 v7-2-315 +c5a806b29372c033c3b616083c86159a8719635c v7-2-306 +c5b05f6de1adf8bf800da0bcdfa04a262e0e8329 v7-0047 +c5cafb21c45b5e1e16c006056dd5b8f5ad91145d v7-0-096 +c5d5e0f3403f65e77307d1bcb5d71acc73cbc90a v7-0-120 +c5e1b4b9016ff900a005057fd1a055c70b812414 v7-2-047 +c60d231453cfd59c8b313a894027cecc0a4315ec v7-2-424 +c6296b0ad9eae4122e31dd3b4f363e073f388a38 v7-0151 +c649cc22da98e2eee72352917030fc6068883317 v7-1-060 +c669f3280f595ba6133a94d8ceb3ed3ef6c2a4ad v7-1-324 +c6b06a4a8f928b1868a3d48d95293730262a041e v7-2b-023 +c6fe65c000d27b9ddb0cbdffe43cf188b7a51f2e v7-3-037 +c7537662746d8bae8bcdf8502a23a573a54d3855 v7-2-186 +c7654c4db8fd57c397bdfd3b3142632a4e761f32 v7-1-153 +c773cb978acfd216004c871e883d2b31cd4cc0bf v7-0116 +c78d973dce9e0456b96725f55b853ecbe4ebda96 v7-0211 +c7905d03c72e74540d91b1ebf3fc9cfffc2ba699 v7-1-273 +c7c53db66b5521d2deed3b889fbfb13030868942 v7-2b-019 +c82bb7ade452d18a121a6b0b8ff654dfad30532a v7-1-137 +c845dcf7fafa91d8cb370f690c16748758b20332 v7-1-110 +c8568bc2db390972c94374a031bbd195c4403ffd v7-1-311 +c87ce0b2ee2a14d3daf3902bdd4163a002ec7a22 v7-1-190 +c87f38b71d27d9e420e5947d4e99eba9e3eb2e19 v7-1-070 +c89903e16772bebee28ec935f7459c8c83bdf05e v7-1-223 +c8b6b7e1005daebc2d72c578d70b455f42b5bd16 v7-0150 +c8b87fa14d277702b7ca6b9ba18470c3d64ad83f v7-2-179 +c8c47cc9dab1eb6976b9c214c58e65beb3a45e97 v7-2b-025 +c8cae82dee305d003f809d91025ed21582785597 v7-0-061 +c8f343a465a271cec752fce3efdf5fa8476d3c96 v7-2-180 +c94bbf85eb160aa9eabe33b13b267c1446019eaa v7-0-213 +c9b7b1e711d194070184c9c198fbe8126701d1ee v7-0-235 +c9ddc2338f41c43a30044dbdca1775b919f80707 v7-0-058 +ca4883686f934bb338dfe3a2fd7d6d3995c3e0e2 v7-0-088 +ca501ab2fdb3a4477a6b8e469c1a4d8f1859d92a v7-1-170 +ca5b52e99385825f0083c4b122ebfb50c2653039 v7-1-255 +ca82de29ac1903bb1295c04da5624cf295b6447c v7-0g01 +caa550fe445725dea9531b9fe9f0d0f88961baf7 v7-0-191 +cab25717c6a69a7d9ebd010153fd9be9529fb49a v7-1b-002 +cb49fa8c71963b7b69529dfc2abd00b791119fd6 v7-0-126 +cb6487d683f2260fc0b47b5e95f78a297360b1fa v7-1-216 +cb7043482eca744ad9ba1eb11f08cc2906b6bd3c v7-0-149 +cb94c42c0e1a1e00f643be8a96939e42c3afff81 v7-2-445 +cba9c4003cb554f909fdb6426b8870bef24b3edf v7-2-085 +cbc9c335ddb17f9b0e9d281e1c5d97a20ed4fd94 v7-0-119 +cbe70f2e756d80015f6f0057e13a882ee7567276 v7-1-259 +cc03a79fdbb9315956fc22887483a15b414278ea v7-0-197 +cc4fe241baa3596ae9cd27ce65ad25077bfb2e71 v7-1-236 +ccbd8177e1f439fc23ef56be942ab0253d5dcc26 v7-2-132 +ccc9eda1cfcf918fbd1933bca9db01e246d5ef12 v7-2-138 +cd3689efd90a5934dcf2e4e232d97939737414c3 v7-0173 +cd3f52531f6c8f16e89e97f335f974fa25f4b498 v7-3-124 +cd6175cc27d9c8b4d4f4dadc7c38f6c490f3fa62 v7-1-235 +cd7eb2a18060734504ff974065d6a7adfc903b34 v7-1-041 +cd9471bd8e9eb1d2c59d00a7d18dc07dd97fcea6 v7-0-047 +cda8f3aceb85c72c94498120fa171939b83cc8a3 v7-2-120 +cdd82acd75b449784a574058387449096667e56f v7-1-125 +cdf37c8f46163497e0d7fabf9655be37b692fd1a v7-2-008 +cdfc3897c8950aa84c84c1a05158afd32ba71d06 v7-2-222 +ce2181d14aa08a59250267dbec36bba362eeb908 v7-0139 +ce6bc4bf2b87f2303bf47fe64ebdd470711973d0 v7-2-244 +ceaf71b15d813665b3b02036a619bc967db90d8f v7-1-177 +cec8b867838bc2a5b5f5bb0146010060639fea90 v7-0-114 +cf080795d202ac2ef02d282f4aec111b2ec126b7 v7-2-135 +cf0979c30cafc4fbe239ebb9de3c427a265207a3 v7-2-144 +cf4d73a8924e715fb5fc7db94af9a7e67d7643dc v7-0-095 +cf83dacfa25fb1fd8d4929ff2abe871c72ad94a8 v7-0105 +cf8f86128f4c428af72c116cc53d92ad7c1e40e9 v7-2-435 +cfcc1421f5e431d3984c3e9ef3f360ceafaef76f v7-2-146 +cfccbe492612c69ee77d6cca4adb690794e5feac v7-2-126 +d065616e083680035f38a54409e857ebc2202db3 v7-1-146 +d06a461924a3f92575d81c2d1c0c3a74cd0a2929 v7-2-322 +d0cf8c843186301d546870c2661cfa3e8526b3e4 v7-1-100 +d166fe2bfe7438b1539cdedf1810dc91a1cae01e v7-2a-005 +d20d37ef86c8844da2c9c45b2d9fc8b6a2dc3f78 v7-3-129 +d225695aa7945c27e1eed207e3e683b16824ea87 v7-2-282 +d23a400b718419e039eaf4f8ce23517144d41faa v7-2-019 +d2612392202f9b87c122b7233b0bbc67c9edc004 v7-1-004 +d2796c60ca6f11e05cbe080114a3cfc6006488c7 v7-0032 +d2a4f08396fe8c01ebca988db5eb95b7c3f9db8b v7-0f05 +d3571ca62cd6a9138b0aaa4673b09dec78e540e1 v7-2-323 +d38420e2fafe99d58b915213b73f8d1b8c7848d5 v7-1a +d3bbb5dd3913b6425ffebd18b232fcc2d1907046 v7-0f02 +d3cff90680f3f985c21e34e03607a5808ed4dcbe v7-0-144 +d433f43849ba1dd0006dbc4d794cda3502fc24af v7-2-332 +d4b1aca2e3a97415460ba21ec81eba2218cc0be1 v7-1-128 +d4bc24e6a28144ebb16f143efb72ffdd98bbe0fc v7-0-156 +d4ea645c77489da3d5f0f0f48a14bb63793e1505 v7-0041 +d4f3db33d782da9d33b2715fbd14f5acac280ce0 v7-0037 +d51bf80e8fc9b1048c93bd26e308af7c250ef629 v7-1-045 +d5681bd2661b3e75b506a7d6ffe8bd053e04608b v7-3-013 +d5867fd6b2b72d8095795f4db9aea88035e49e5c v7-2-330 +d5892839ed90bb1a8f9f1b3ce88bcc205e7617cc v7-0156 +d5ec1b42ceb06062f03d828acca852a4ccfbc7a4 v7-0111 +d607b48414b79e7cacccb66391683b23cf1b2cbb v7-0-099 +d608343d25e6ce4b1e6435720c48762501b0fc7e v7-2-197 +d66394147eea6cd5b304fd2b78e5dde46fbb1b02 v7-2-136 +d6a69271cb9a787af6b3a05b01275c9694a144c0 v7-0194 +d6d6ca94371317962df5d92c9b879f7602d3e234 v7-0098 +d6f0d3db1c641e451f9cb0d0697f1b18939d6cf7 v7-2-087 +d75027183cf4b44b2a92333e57b9bc3fe2b2f5dd v7-0-230 +d763e7d7e938d8dd3887b7279b44e3a857285d38 v7-0-189 +d766b2ba2fc6d5b6211cd10d90236dfa8479d617 v7-2b-002 +d7860ee7eb7ef5c27d45c4569107376d3cbdbdef v7-0207 +d7ce3adb8dda9d7acf8aef39cda0b936ce3f3d15 v7-2-362 +d7e33248b9c80fb5c1af5880d6c6a4eb507de990 v7-0206 +d87865573d809129e6d25071cffe8ab451ea2db2 v7-0-041 +d88bdbabfbc6539ce6cb149a3e8b025740a7f351 v7-2-109 +d8983769c9ddbffc13ab427a5e44693070d7788a v7-2-361 +d8af28dbfb80aa6c6248000b011bc9df6f8f337a v7-0-152 +d8b9701a3b7bb58e3f7f2c72145a0dfa33501f31 v7-2-193 +d8dbf7d55c5e9ac3e345eb1b2b86986be3582fdd v7-0-018 +d8e7b6762aaaa48f6bb72b1c51d535119e79c379 v7-2-096 +d8f905020502b0f35d810f27b4d5d28689bb7764 v7-0b +d9030055c432b20797f883c956f094416e00c622 v7-0033 +d92358c7d6216ff56093067384eb7d96ae47696d v7-2-238 +d92ac5a199fe88f1630678f81e0b47d5f3f1a921 v7-2-196 +d92bab35a16720d2b4e3a2b836fd68df0ee00aca v7-2-234 +d94c322508140c4cc0d36364d994f475aa84f8d0 v7-3-075 +d95676480093879730aed5ba678e3e8305977a4e v7-0-067 +d97518d6b3257b4ab48aace82f9197bd099ff758 v7-0063 +d976f4da2a4d56ed9b59c61f6971ec0cb18c84db v7-1-264 +d982226b7aaaff40647eaa5ad05e01538e90065b v7-3-023 +d9cc61139d12c315d790d79890402ef957be00ff v7-0146 +da0991871b02a5ba7bce7d3c1180d01d50d7646e v7-1-017 +da1d62fe5379f77a2a165e40bf4bcad0466c60cb v7-1-063 +da9142bd190a5ee0e45536ae4c2913be5bdb02b6 v7-0149 +daa1e34570ff649af9d7b64a447cc6d2c0b60e38 v7-0-093 +dabcabce3f9d67ee2cd22246ea16769513982910 v7-2-419 +dac5006b4443f99681d2068d0af065bec10d7a99 v7-1-162 +dae4cd29a0b7d899201c2e6a10f0441e7173bcfd v7-2-347 +db3ca1048f7f800fec81696d29ff8a7a3027a64d v7-2-320 +db44f7b81373a02990aa6030b85024478b7d82bf v7-0f03 +db83098657947521e0e797662c135516a4a300ea v7-1-123 +dbd226be80b18c494f4438045d34b65530dcc198 v7-1-027 +dbef8434a2ea19482b3ba72b428c57dafaad29a4 v7-1-329 +dbf53ece2e23fd6e8652c531ce7976f54ae85635 v7-0029 +dc8197342755fda6ca4d6619dac228406867a7ce v7-0d04 +dc81a4fc63185c72c940e8ade45b5e1534523351 v7-2-143 +dc8a5699253b833ec796460f9ac877d02ab7b165 v7-2-406 +dc8ee74574f80c7eabc90ff7a3973f882993cab5 v7-2-444 +dc948c8dfd1550972011e38d59b9a8ade5a000c4 v7-1-019 +dd9db57ee7ce46bdc86cd787fb58907f20c0a973 v7-0118 +ddafd2ba3a863054041f2f71248f0ea91fc3b1d2 v7-0-117 +dde812fb22478c1fbd34d935ec466b2cd9869da4 v7-2-437 +ddfb6f3f3b2be6e5397db2601f392c45f4a05b84 v7-0-012 +de0e7ca61893d31a4a5ad8e129691650e31477c9 v7-2-427 +de8224965034eaf748c4205cc2a61e097b4aef90 v7-0-063 +decce137e7beaa2edbfb4783d1cac714c7d84d14 v7-0-098 +df6967461cef05aa96ff708863d380e9d15f3bb7 v7-1-065 +df6b12c84b2359415cd987c016f5de135c680100 v7-3-047 +df7ceb64b0c65cc5ea525f7df25ecdbba80b0208 v7-2-137 +dfcff6590aba6d93a69b414759b164c255fda08f v7-1-238 +dfd5dcc73daa3934ff1f47d6d53207de2f9034ed v7-3-067 +dfdaac31aa5df021b444bc2ba64307709d863c63 v7-2-230 +dfdaac31aa5df021b444bc2ba64307709d863c63 v7-2-232 +e038754d419a3ab5ec25d014513bf8773cb9459c v7-2-408 +e03cb9499b83f972c2bdef503b1faa15481da81e v7-2-015 +e06e177de52ae555685a6126213dff168048fcc6 v7-1-305 +e0e0d1ae601197ad22eaad3b721407a2d0cd6294 v7-2-318 +e1070b3b03e9b1490157dce8db81b026460aea35 v7-0-081 +e10d3c07344929c21377722bd3c66d3c54ef582e v7-2-423 +e12f574898a9b21e39af38cd57e50ca87ccdea81 v7-2-272 +e1336150cfcf7e64f66563629accb1cc84fea036 v7-1-089 +e14d0a530351fe26450893977197e81e9e9ae5f2 v7-0-177 +e180933b876a74ded043348c0cff4fb209d4d92c v7-0219 +e19ecdb13f34ca1ccb3dd3c382a08423c385e847 v7-3-080 +e1c7d0ea5dacf4184cf49c3d05d6ce77d944a367 v7-2a-002 +e1d77e652cb7f9e84072f16b3ac6dcbb73a1fd81 v7-2a-018 +e1efa991c2b6992bf361cb432895749fc6b1109e v7-0-106 +e212d1a40ca9638a4b306013d54417dfcbe9d8ab v7-1-243 +e2680bc6a18024d68ce8100e21d4d307dd647aec v7-1-011 +e2d7622d70894e506f9c722bc8ce145521d098b7 v7-2-106 +e2f5c1597829256cfd784681163c232bf907f1c9 v7-1-092 +e319a4fe6e32e0297f1be2c1a8c763f7f7b26cd7 v7-2-378 +e351146e7974acd49f2e9aab749f31670b2c6044 v7-1-116 +e44523d45bf5e276817b7f1f8987f2a8ed3132b7 v7-3-125 +e44efb3af0d58fc58a392e58c604bee91bc52e2e v7-0-060 +e4fa26ce87694c7d810796d41d0f03981e500d1d v7-0187 +e5145ff9c9b0dd7b29154c2ffd220988737c99f7 v7-2-285 +e5602d92da8ccb4822917b2df3e6099344bb4ed4 v7-2-177 +e625dad74346d76132cbcf6ddf98b95d2c8fbfe5 v7-0-113 +e6372ac3ebe536aee65848e52e58fc817697b98e v7-3-063 +e641c7a27c470de82019d313a158a9894e0befc1 v7-1-181 +e649c78407e600ab28819574efd7d2d67f066171 v7-0202 +e65e50609469f1c5d98ab7396803fb697a78bc17 v7-2-219 +e68d8541494dc36b5778d9eda2814014201b0335 v7-0228 +e697bd3c3876c27addb414ae170d741aa1eb1917 v7-0075 +e6a8d55a1626baa2e38837b0e7a4a6bc65783623 v7-1-178 +e6aed39f12648124b0b4e23c669cab6ceda2ea1e v7-0-158 +e6bd96f2d7b81a8963c9c8dcfd9e2b3f08a9f0e4 v7-0-017 +e6d25347de2cc7f7632cb0cbe5adef45d9712aca v7-0-182 +e70aad5761b59933a1f69a8756457fdb3a9aad40 v7-0-069 +e70c0d863e0cb2b26f16acd17ead7ed267faef53 v7-1-022 +e72e30c69d582a55cf3c4836aa274a006a457fe3 v7-1-261 +e73f2978bd4061868337a25ff09c3c84b54dd2da v7-0f04 +e753954c86e2ce32648d9b12c3c135c22748f75f v7-2-237 +e7633eb32cfd9cd631a73f4d412272506261b427 v7-2-098 +e76a088056dd38e02a99daec0741aad6f32a24f8 v7-0-242 +e77e3c11f5076d6eae8a67bd2f531f72d33eed7e v7-2-331 +e7904492cb75b7a69964c331945b261cd4232a7f v7-0071 +e7f6ca5594cf9c6a3902458e0635bec7a7c40d87 v7-2-149 +e8450dbf6f031f2727798a7d955e83dda7ba0288 v7-1-086 +e856f9cc2aee46628ecb83351489d4f41d66c6c6 v7-3-064 +e88950f0d4f699846875e45dd3887cbdf92bc3b9 v7-0-084 +e905716f6a3aaba3c0ba1d18093d4f4f09550524 v7-0-090 +e943e5502fc9cc439294de385dc564226b7311a1 v7-0050 +e9624acb93a750d835c361c08bf3e78f587f6510 v7-2-028 +e965cf54d887eb9bc20b6668d83541992cc4e8a7 v7-2-157 +e97a97d6a0eb98b21bd068283f192e0a2f2b1a89 v7-2a-004 +e980e93d2ac2c7838acfd45fbf2de06939c929bf v7-1-186 +e9c9f37be3066d64d7d87d1b314b2913d0d751f6 v7-2-416 +e9d018b58830d50906a81e1b1ddbb3e2bdd9126a v7-2-107 +e9ddb2181f063b67b3075844b4aa7359db5750be v7-0155 +e9e3355861ba8785dba619e2358a239a9443a580 v7-2-342 +ea15087a42cd21520e628faa3c53385246c04743 v7-0-085 +ea1a2950ed16f441f66ba319615d47f1ac67402c v7-1-191 +ea399ac2c1b963b068beed88bfaff7620d345333 v7-3-138 +ea9f418ed072f45fc1cb04e455379e3db1c0f182 v7-1-215 +eac2556d46208785a173d44b4efff339a7e2fab8 v7-2-215 +eaecfa88c2469471804768932f823f5b264dd0b9 v7-2-148 +eb0504d00480ca6a7758bfa35d64a09b3d389fca v7-1-250 +eb1ce51c1cb0dc7825570f7cf30b0e2c3e9749c1 v7-2-129 +eb27e3e2df706466ccf9bd00e407d2d3419a81e7 v7-2-265 +eb4ee2010aae8f4361054eb367a7b13dcfd738c2 v7-0-107 +eb531146be0ec6cce1187568cc841718df44a296 v7-0114 +eb57516376d4b43889fe43594048f183af15c31e v7-1-032 +eb6fc577c96c2b5e322ca3760fa4e9c043ba5a8c v7-2a-008 +eb800128bd894e9b2c661627d2a302344162987c v7-0-092 +eb9cbad50fa34fad2b422758d6d814059aa89f94 v7-1-313 +ebe059f69b9e46ada2c6e02b3979e31d1b11c906 v7-1-296 +ec5ed41eea2f1d83df5a2507ab2f469fadbbfbfa v7-2b-001 +ec7a570696ac0e50147e2419d8b269ccfb75f25e v7-0-199 +ecc637a844592d48cec38bd795a17ecf6e0253ec v7-1-114 +ecee28dd16d25024fe584cfb8cd0923f1184398f v7-0213 +ed44c1c436d3d61a94062c7a781b77dabeb8ebbe v7-0-100 +ed7fefbef738386c39248b501556bdea80d0f8b4 v7-1-276 +edb3bc186e97a3392b3aac634526a4f4f84f4011 v7-0-020 +ee41e031dfe14ebe50c289158213f05eca869bb1 v7-1-179 +ee50cd1a303271c6be6cf6121f50c0abb8772dbb v7-3-088 +ee9d2d24ea9bd0a7d500f1c37cbea802d8d1d88c v7-1-231 +eef96cfdbbbebe5aa61b420d3eea31c3c5b6d719 v7-1-314 +ef0fe6201b843f699b3ed7483e52eb3348ae5b11 v7-0-006 +ef2890033e88391e92eba7d1ade8a43e9e200abc v7-2-337 +ef3a3ec8940cb0c55d35d2e5fe924a09d6815f2c v7-3-070 +ef6b11bee7d06a843474888d0bbd67d14dd2065d v7-0-181 +ef7fdb3c6927725abb07731a46ab78404ad4c7e8 v7-3-105 +ef886129f0c0be912c7b6c21e695bd9980d31210 v7-2-088 +efd0ce477ae789445312ebb08a0f78b835dd6f5b v7-0-194 +f012c4ed8c38499ed2901d139f4409e2edfe51da v7-0132 +f016c3708ae32436ab545762a1bfb8ebd31af975 v7-3-106 +f018c759e4ed5e1a851c1353c118883efab6a155 v7-2-274 +f04e890524be4a82ade7526f62a967390d3f1cf1 v7-0153 +f08390485cd365abce88ade8987e56bd267cf3e4 v7-0210 +f099adbff8871627d897979b432d74ad1623369e v7-0-031 +f0b3b9ac2147350b1d1fd762cfda0b3073b0bca3 v7-1-161 +f0c598082dff6f0332c9af602b5b4996bce01ff7 v7-2-104 +f0cfff4dcc2f7cad78ce86aae0f4cbd3371ce46d v7-1-283 +f0d6b2bb1093eb12925cea635cd58de0594c422a v7-1-245 +f10fe14748e260eb0d8bfe375cadbbaa0e5ceeca v7-2-055 +f12d38ee49de595d11efb50674bccfe0417c7063 v7-1-006 +f138491673309c018ffede08cd4858c3bf318dba v7-2-169 +f13a0227fb8844e591b6526e4393c8f93dadda29 v7-2-305 +f14cbd913415ac4d6a9968dce20a20291f8c0d05 v7-0097 +f14f7aab518707c29a8ffb75a4e8217de58dda91 v7-1-212 +f1d1214744679d401e17e9ba97ecbb6255696ed0 v7-1-287 +f1d2a58883b96144abcd5b44dbdd190a67b3eb79 v7-0024 +f1d46f94824128251d1212cfaef0b1bfea4dc71b v7-0163 +f234c87ac7e9807004cdc559cf68aa5e04850f5e v7-2-248 +f26d0c74a329cceeed80a7985f5efb5662064283 v7-1-039 +f2927225367a3ac3fbe86d6d03ebb7a526072ed9 v7-3-039 +f299f0bf32d76986d5596d279bc0733cebe1942b v7-0-211 +f2d46e4a859d0f12f12fbf332c40a717dd07df14 v7-0068 +f30c8ac7741c82503bf897fcebc68f199e5b0998 v7-0225 +f339305875fa7cd21cb4d42619f5b9789a027eb2 v7-2-229 +f3669fbc9a31512a0b81fe7f647b935243a76520 v7-0-109 +f38283ce871c19cb82b1c4d364fbc3a242c057bd v7-3-131 +f38b7359dafd1f168a15698412d266c17a16520e v7-2-102 +f398e0cc5b7a032f327aa2f33b71c3bb6a22d46b v7-2-349 +f3abb6aec8c83ada21d56b8be4ffc6be55ce39ba v7-1-048 +f3d3545d6bf6405662476b40e019044b880d8f81 v7-2-058 +f3d7fa7dcf634b669a7d7859bcc39796300346e0 v7-1-035 +f40f1a8520ffaa57ae73a720c179780025aacd64 v7-0c01 +f41b6108e46b7cb3794b2a3680f2ce91b402fb21 v7-2a-016 +f41fa84cd738b945ab34271a92f44e0d1445dda2 v7-0g03 +f455396f3c3fb524ff1082cfe2cd7731f67877b0 v7-0043 +f49d72bf9c5c425dfb8bb94c6bac975716e3023c v7-0-124 +f4a775df722b13250c2b9e6f1154c31ffd9b211f v7-0145 +f4c7b5da017adf78554a240587384823e58ba80c v7-1-012 +f4f8014d516e9b9620311aa2bb7a5a2d5749f451 v7-2c-000 +f529edb9bab3de35ca7451e4d45cc90e9f7aaf81 v7-0025 +f54dab7cebabe6aa275dd6a379b42a15c365af0a v7-2-280 +f55897d6921d622ac2649e4c94ddb38d121c2832 v7-0026 +f5bd6753cdc40733c903090cef1cff033942dcf7 v7-2-440 +f607f15ab091b6a51b0546db6a6d42adfa599c3d v7-0143 +f628d19361d9812a1266baec9f76d60c798f92d5 v7-0-195 +f637471a3607a43bab09a2b61913201a5100e636 v7-2-192 +f66abfa335bb76d20f2a375f148fb7705bfde287 v7-0-170 +f6c72dd1962a46aec26c7caac6f1c3789321e91f v7-0-030 +f713fc55bf7b9a5cbb9ae3628547a78f4e44bcc9 v7-0109 +f765f9c139de3555cd181bd4fa8de50d4aaf41c8 v7-2-158 +f798c90439866d3d29eb0fa460d51e4de26f27d8 v7-2-224 +f79bb032002565143e3392cca0540216e7f93e28 v7-1-241 +f815aad6c05549bfa36f193dc57b1f03d646bb79 v7-2-343 +f84061aa57e4498f15155a4a30da40ea07be84e0 v7-2-030 +f85fe1a05c2ae4c03994c9ea2eb87da590bb3214 v7-3-133 +f88008797313e07112b8c4e549dc2217747fed98 v7-0-101 +f892bda292a89e7592ccee5fc0e296659066d7c5 v7-0198 +f896a7dfd47d15f11ac663f132fa2c5aba91c829 v7-3-052 +f8f35d8208e6c242026dcedd8300b82f415fc59b v7-0-179 +f921368d43c3f0b9b32f52f881e7e58242489bb4 v7-3-093 +f927ca2cedb40441abcd9cf5e18cbde2863761b4 v7-0-226 +f92bb184582321910573561c941167ca46b9850f v7-0101 +f9366d458bd09b73aa46cb202c7c6329e608bf0e v7-0-217 +f959cda54600f8d014cf3a3c69285c598985d828 v7-0-027 +f987220caa57c4d13b64fcfd24cb4bc6a156bb00 v7-3-094 +f9bd6784f393aa771d497611b75a8623c20a8269 v7-3-009 +f9c55e12835e88f072c46b20ac9dac25a46ca839 v7-2-218 +f9eaf0a9872df3ef8610d3fae404231447954d5e v7-0157 +f9f6e35c9f00ee6ee518069ff2bf0f93b635b8af v7-2-005 +fa07532e69c6eec9a6860ef1362f1d8187b8244a v7-1-193 +fa5dee44df3fd23f96090d225dc11dbc4de7bf20 v7-3-034 +fa7e62dd58d779149c96570bc8943f1a1b035e3b v7-2-364 +fa9ee618000f51e5da6c951f24c9bab78f2bb428 v7-0-110 +fae6fb779a6be78f2609dac4fddb8da508735dc9 v7-3-048 +faf4b09c396e8572e84eab84eeb60ea0f3785529 v7-3-097 +fb1222c880fc037f9b76580423c5a57c74acba28 v7-2-344 +fb60c9f35517660092b161abc1e4aa17a7d0ac05 v7-3-040 +fbecb12e37f5b1523aa8e6ecc07ea6c07ed65270 v7-2-131 +fc0c566b91075643f259863d171bb253703698bf v7-0-064 +fc2ee817dc9861774c31bbe768cddcaca4690e4e v7-1-328 +fc42d9cc7ad054a21ac8bab2584732ebb191e5a6 v7-1-258 +fc89a4f98a8b2e51dcdd380a7eede9dbc5cd1282 v7-2-184 +fc8bf5d4051a1c13085db00c902092215ac9852b v7-2b-017 +fcb916bed51a5ae096a9f5f5f697a909b2062040 v7-3-055 +fcea35e2a41fdc928cb92784a4405b4fd220f560 v7-3-112 +fcf44bf1218f63d94e1807c05f470a4eb87e61a3 v7-2-209 +fd1b3406fd1cbe1e7250c95f7b30604d7e46b2d1 v7-0d02 +fd24e02210c9c05b4035ebc717f25ad64d20470a v7-2-276 +fd3346e3ccc02a11f0c2fa9c2c7351b3cead3941 v7-3-082 +fd68db1a72b5f05cc5e586ffe89a10ec6930005d v7-1-199 +fd8864aeb52aa72333573d62f0a9913b0d3e8c8d v7-2-373 +fddea6c03deefda18c971466e0688d196a62fd6c v7-2b-004 +fde086181841aa124af8a38b5c0bba132de3ea94 v7-3-002 +fe26299d6f7015c324bef3829e9ecdf7d08526df v7-2-239 +fe3ec5ea62f76a623c95a2a4bcc0d396c83488bf v7-1-303 +fe4ebbec775a55ba5d9bec6070d8d87dc28138f9 v7-2b-014 +fe52f9888eaaafda72e6f37610327206383ff6a6 v7-2-034 +fe7db192c7cc7ef3d8cdc6bbd8680833338fd7fe v7-1-299 +fea3207b800d97b802892d8edabd1d688817249a v7-3-096 +feb9b421585385b226b4adb98e10f33972068846 v7-2-042 +febddd8d11b0f8f48e3d3297628fcbfd9f427b19 v7-2-112 +fef4bd7afb263aa411f12ff13dd1d12c88ad992e v7-2-438 +ff3a304b4ac2f672e8cc3c60795f0c79c5b191b1 v7-3-066 +ff5a4a71a761f859af81821d340ac609d9309083 v7-2-156 +ff77f541d69df4e538f7db4879eb194378c04458 v7-1-252 +ff9ecf14efe3e2373f2b28fc3e32db4fe19e5ee1 v7-2-203 +ffa17de19445569ea573550eef332323d83e70bd v7-0-016 +fff7028d50c8a44a6285ab23b451d975764b8bd5 v7-2-296 +62e8d93241cd15962f895da4788f21b514238b14 v7-3-142 +632f43801ddb568f872599499fdcfd9522f8c13f v7-3-143 +322a5c8d392bd47ceebd24cd21dacf70409fcc91 v7-3-144 +329a9676040c3182f78e2014322125f8839b5cb6 v7-3-145 +2bd574a2ef1c0ad487a0673a5867b09cd332d176 v7-3-146 +55fe8407514f5387ad872a338d77f64a2ad4b5f5 v7-3-147 +d67916de812ad684718c02e3ff93455ce577be81 v7-3-148 +7f937a04cdbafd7d179b200f75e988408f8caf3c v7-3-149 +6146c9859f6558d618e950fe702c11e41ca21105 v7-3-150 +f169a51f7eadf9a07ed95161143e6209387a4f34 v7-3-151 +0f7f66682a5563c76ab47e9976fd590d9423a013 v7-3-152 +d0cae598360945a425859bf8acf22923c29501f4 v7-3-153 +d72d709f0e18c309069e42d3d7865d68db9e89d7 v7-3-154 +5747cd65d62b613d5060254849ed4bc1e1e5d714 v7-3-155 +7fb8cdb9cb25e1409abe45bba959f5f27608d713 v7-3-156 +9a98d8562637d4c90439125a14224a3403d8bee3 v7-3-157 +b5f774f159274af375455f32d628881c027417d1 v7-3-158 +415c55534d901aa4617bf584462faf0c7198e07e v7-3-159 +c5e47b752f07a95534bbfa83f031a58af67054cb v7-3-160 +25672ad7f377341ff1de9a0773d8cfcad1d37883 v7-3-161 +18ad854f5dcd0ba1700c73b03677dbc88b9844c3 v7-3-162 +e8f012b00187c5a957def85bb3c6f0430f20fed5 v7-3-163 +cdefcbb70e8cdc1f7185f1023d3a4660d30a074b v7-3-164 +e92a4b9b4484d1c07d930719ab1370fcaf94d3c5 v7-3-165 +5ddb68c2a845ad7941d1ae7533a81c12b106dffc v7-3-166 +0a0d7961b4fe83151b03d98ee904ea7038f64123 v7-3-167 +930b171ce3fc9dbca3f9da6bf883faa725593c67 v7-3-168 +5f45bacf31efef21f9b60543504d1832ded3e098 v7-3-169 +64c3402df964791a7b8c925905423f83af83e930 v7-3-170 +1bd8af13fb434e4c99bb756052556f4d56cde200 v7-3-171 +ee48b3da9d53a487f3636df34cace6400d13f32c v7-3-172 +133d089f247eb7156a6e8c49e0526f41cc082c3c v7-3-173 +820f12659c50890dbda80e7280086ae1176d1378 v7-3-174 +537e0102c0f9cc2c0656c298ed1534ef30176eb8 v7-3-175 +94f42ae4e4e66483fb6cc7305c61820b004c6182 v7-3-176 +66f2d62271fe77d4acdda5808bd0d3a45be3149c v7-3-177 +ac639ca9f58f7c71551c19090473395d81a021b6 v7-3-178 +11e62fb6f8154537f92be5f278c31e737247f781 v7-3-179 +ed47d18b39c6a672ad4f0caa2f2c3ee897e784a7 v7-3-180 +5381eb5b1eb9c39797c435ad904bfcb71f1efb01 v7-3-181 +21346361ce6c7e9afca2e475ceb62f6244197919 v7-3-182 +e4403440e192d082af7dc8fe3e1a12d24f0e259c v7-3-183 +b941cc96926a26b62d59f759a021ddb5b51823ed v7-3-184 +9c8dffc62a41a143230f76376f9a3abf46ff3536 v7-3-185 +3d1a3aa0240c7a9acdf3feb77b664798e3703463 v7-3-186 +8bd38abda3149cce7043da86e6093dbebecf63df v7-3-187 +f2e1c3a90a3bda6ce8977187b365745efd4e5c35 v7-3-188 +71e1da07e1414740d1d0eed47a346cb3292a9e2e v7-3-189 +30b7cde2194064040cb7d7e6485a5712b2fc9b40 v7-3-190 +107b03fdf1ad831e2697c22a04bd3eeaca08c291 v7-3-191 +8470ac4679c17b69aefb06989c6e8a267761988a v7-3-192 +e1c5f69de95b99112fae28c23ce6427ca251e50f v7-3-193 +664c1adcb909aca654c4fe9200364cc741068803 v7-3-194 +8dbea5adc937ecddf8ca336856cd487e1b118b1a v7-3-195 +d641f141f9376b3ecf2146e5d68c38bf0227c970 v7-3-196 +45c536fe48db330c4ee8f1056befe702d9d19cfe v7-3-197 +b0190e93e601f9061a797689a1eb95a86805f769 v7-3-198 +c76efe33a3c1db5767cfa4f4bb433466cba6e351 v7-3-199 +41b17dd070295783af37698b1229a7052ab0549c v7-3-200 +78859ef2982bbc75dcfbc551e3d8a0ec5c9126eb v7-3-201 +f80e67bd627114cf7f16098ec4ed7d878816a46b v7-3-202 +ce1dce2af2a34aec196b7fbe29cf8c653b6ec6de v7-3-203 +e6ce47f06836721108394f0b921af076606cf715 v7-3-204 +8d8bd6307b1aa51fe2f592ce45d32abf0f6666d8 v7-3-205 +46544d3ae7ecb245a2646ae5005a3d67ca380f88 v7-3-206 +d1445b72ddb7d8b4a44393756b00d21c81212db1 v7-3-207 +205adc87d579512482c27f309c73d5fe8f612ff3 v7-3-208 +82cd9f1e8d6b21ef4d59f27b39f041d5cddec19d v7-3-209 +eeb1ac4f66d1d69c0c75f1028655a81890cf65c2 v7-3-210 +c7d942260772003e21039f9891775b479311b40e v7-3-211 +6bbdb9c7a425b0bd90d5823eba9475b850a409fd v7-3-212 +493897f8bf9057aa0fee4c18d269558d32053cc7 v7-3-213 +d84a564f28c9e64c3c2a1689af0e0851bc7e5027 v7-3-214 +b7523ef31e23f1a40cc3950b6ec75b39ad7f762d v7-3-215 +eb6c704607025d89a0a5d3fd2769a694ac47e0af v7-3-216 +15705b520c298738588a9a3b8d724c6d86d4cb8c v7-3-217 +cf89a1d3a0ddd21fe6b734fd72346468b808836f v7-3-218 +acda456c788ae1b0b45b8c67a93edcccde594819 v7-3-219 +fe9c7da98b5e2f92e4212e948e98f2d44bf06320 v7-3-220 +fd4224d9ee09801ed1ad9341a72c4683e291bb76 v7-3-221 +c3b4b1c89d8ed62a2624bf9404fc79f60223bd81 v7-3-222 +4e21fd3cfc3084db66f65aef132cb6c5e076cb96 v7-3-223 +69e0783ed0ef40f72ebeba41f8c98c9992f368c7 v7-3-224 +c249d9aa60f759286f54781829c1e3da8680c4a7 v7-3-225 +8477b2cc2b81603408b3fb1a84cd65afb2aadc65 v7-3-226 +b65a26a2aa095c739e90edb7b980154476529d35 v7-3-227 +c6df8554b39d009ed146baa48c0cfb351aa8379a v7-3-228 +07647a0545c9f0fad4e1e84062e0572a07d94659 v7-3-229 +70c8f54e7efbd7b59bbe6764d0fbfa1f1602273f v7-3-230 +455a4c85d04d04c732367f915d82c5b3c9a65b50 v7-3-231 +b67d3a44262a97e7b3ae212fcffb36926b5f53f4 v7-3-232 +69b90e43b728ec28939b0a536de32f818b7ee756 v7-3-233 +7653420fdc454be197d59e420a1672909fac7b82 v7-3-234 +441d364773dc53264b5f26042f8fc6f8b77c8044 v7-3-235 +c1733ef5b6e87dde521d0d85a1e5e62259854ac1 v7-3-236 +e3bb93df6c34da672244bce5695c1426da139614 v7-3-237 +f2c108f44f415c7cfe92862e791a01cc542ac378 v7-3-238 +0bef86c5c985218a9448fa16d935b913e67af8d5 v7-3-239 +bf283e37792b4b557a2b9081e4fdb0e10acb9655 v7-3-240 +0a650db0265381b540df8ca6bd716c4b2d47dfc9 v7-3-241 +3d96ddbeb3b0003de29b736f63b76675909f133c v7-3-242 +512ddd87f1a817749c8362bd043682a7bbd87014 v7-3-243 +be6b6509636242cd7e6fab9a4b8772e97fc9a0db v7-3-244 +52512eddb876f64399e98d12643233a87c9f2823 v7-3-245 +3f1a4ed36d1b520a1ad5aa6cbf50d68bc8b9c7a5 v7-3-246 +7fe2c092913e84e6717782da1f1a220069eebbe7 v7-3-247 +57a7998e0fa8854a7a8c3946df1d4c9b1ee220e5 v7-3-248 +9f71f5a526aff4f1e0eefe1068d9534aee427afa v7-3-249 +f909f4f0f38c71594266b3595d31ce04d4ebe3ec v7-3-250 +fe6ad3fd85322b394824a5c495a78061a747b074 v7-3-251 +0b4289bcf8364854dd5f94c42d0252504103e5b9 v7-3-252 +c21429d7768cd4b834a086dd47881d01bca74e8c v7-3-253 +1eb805225de7750c03af7b0f7ac2f5dd18d032be v7-3-254 +aa998de9f9592426c17396b60c5db9170a234024 v7-3-255 +c296c225736e4489706c62c95752a0c4788be1d3 v7-3-256 +1fad9c73d77a0030586704cccab1b1a7aba8b58b v7-3-257 +bdc3335bd72eea207b28fcf8af90a73c855c8847 v7-3-258 +59130cd78dfc73bd04f22d201b8f7c0772d98e79 v7-3-259 +cb4682b959098e486977eb4b5969c9eb07d2798e v7-3-260 +410d42e3d4da09284394456186143d595e9b2efc v7-3-261 +847733973bfdd716bfafc364a4102e76f88e7fe8 v7-3-262 +a56259157c935b4e78e9f5f4dfb1436e3461eefb v7-3-263 +aa40bddeea9a44c6c6b4ffa32c1ef373df437a16 v7-3-264 +eff686fb8de66a26367f5e6430d34729f1a0e336 v7-3-265 +25be7c9dda549e4cfa1eb57937dc2b38b3d1e997 v7-3-266 +ad404f2a4bfa5374e97f29335f41b7ef34cd6bfa v7-3-267 +ee17ee712512451a54046d6bcd3ddb9f70cb5cdf v7-3-268 +7f4f5ca70dbde4e31c2de494b982bfb9bd71ed75 v7-3-269 +b9182da84c7eeda221e5219ef4361cca201b3b41 v7-3-270 +32a52f06f33b9e2d4817330099b410c1fcf64db2 v7-3-271 +02f5abca10aee570d5a9cf00928ffaa663daba66 v7-3-272 +7d4e5e31d8c10c767cdf774a2b13aedd2f95f096 v7-3-273 +1bb6776fa8c445e0b3f9dd2ed14fdf2a56f5873e v7-3-274 +125c7bf52271461dfbf46cc33317eadc67aaf742 v7-3-275 +37a54a85413eae68932233e64a0ab88c99c9d811 v7-3-276 +e5b17a5f651696ad4c523a21822692115d371250 v7-3-277 +6622f28b7e87a93de6f1520945d1c5d2a1fc0dab v7-3-278 +342b176089678e86cde3e1afac4aaaa1e5153f99 v7-3-279 +58bba69b3371d9ff02b27fe24f044e229c8aa99a v7-3-280 +45ead8a0bedeade57c320d72e9f710a703e61cf0 v7-3-281 +92167bb91c95410a0550ff8c94370307bb7d9d80 v7-3-282 +47b6d37b60122f45eb147106b8da1322c1cdbc60 v7-3-283 +27d43855b72312500e6fc2122e167a579a1f35f2 v7-3-284 +6018c815e1205e7db9328fe6ed91b26b514465f3 v7-3-285 +3f822e54765c54a1112a953e3c37bb60185fd51c v7-3-286 +07bc2ccfe5559035e785f22851365b3a31dec67e v7-3-287 +e4f3fa1a474e677dce486ea07ee31270f92b2b4a v7-3-288 +44ffd0a8abcdba441216514cb711649eb1169876 v7-3-289 +df33dba4e553f8fa27ba467042f16315c613a00d v7-3-290 +e8ee4b4ebf41abb199ea9a9e9cc38f9b0c2f7192 v7-3-291 +b6af1c5dd22f08db2b9e52ae763f193ba82965ad v7-3-292 +6cd0d6413a2e03687aca8138b2843f1f2aac5b84 v7-3-293 +dbd73fe939cf772a8b07c19230e5ee60aa0cfcc7 v7-3-294 +0d8494c051131b6470fe8af67646e235bc63fcf7 v7-3-295 +c19c15a9e9bf2914b25748c0544936e84a5c77c0 v7-3-296 +22550986c713ce5f37f069f0c8f99a54dc4a421b v7-3-297 +43b1d031e3028248abcbd5099841d3aafda7f68d v7-3-298 +eb4972982bfea006ead5b461f319744d5ecd58f5 v7-3-299 +2665b456ee59652c7b590dff0fa522ce337e0f16 v7-3-300 +4a70971530899e32058207cae683a69e7b8f85dc v7-3-301 +61b2f26623104f75850b1568bf61663597fe7fb0 v7-3-302 +d832d642f520d426f111b35102450617922547d3 v7-3-303 +b3a523ced6bd1173e4c17611559c173094830d43 v7-3-304 +0e06c025f66ffdfea20c8b73a995d23448b8dbfb v7-3-305 +0787bb5f387b79842d5c9353ae3541a992d1b9f1 v7-3-306 +880b7dd69331d1fefaf2d8735b118b39d546280c v7-3-307 +61c5e1527bd857e724f8396c89d0687126390675 v7-3-308 +6eae1b42c6684f3fcdb4d6cdbfb7dc1942d9b364 v7-3-309 +51ce22ba89d11505e18aa585fbd7dcbb22097f9a v7-3-310 +2cbde6bcc6238f41506f87bf31ff7d90f632345a v7-3-311 +0ed06069aaf32dbb2aa3827b23280b0028954ce7 v7-3-312 +dc60200a16b21c3e4157708bb825ea61b9e5bdc1 v7-3-313 +6ab1b45cc95ed56105b2130dc9938bb8344ff903 v7-3-314 +3ecf9e91d88acdb5eaaf93cc15a18914b60e0eb3 v7-3-315 +33c140e4664d102c34ec3ec5a17318f75cf475d7 v7-3-316 +92a181a1cec3fec52cde1b3d71f628a3a2dc53c6 v7-3-317 +d68f20a86a3ec75d927955be5d31983b6c37eb1d v7-3-318 +dc7f2f9759208aa07bf136deca661fd080a1ee68 v7-3-319 +738ea87c196431c452bd499c5a9849597ac938de v7-3-320 +fc0804089b2945bfe683f9bc9ee0238b8c64a46e v7-3-321 +38a7fd9043474dfb464c338ffd7f393361f5a6c1 v7-3-322 +3bdb646fc8a46ee5a5fe474dccdce098680d24d6 v7-3-323 +f04619f1fc1663f4ab05798c410e4fa35a9dd863 v7-3-324 +8aca621c00910556d4f52bd650d6841d6059d6ec v7-3-325 +d3758064ff9946d23aeccc9d2340686766647b84 v7-3-326 +9028c70adafd109ab294102f74dfb5005a20bbfb v7-3-327 +5b53cea62e5d1be2a1a36ce685c15f99bb8a41ba v7-3-328 +ec901ddc84d5c66c5d0c1dcca093584598487f9f v7-3-329 +abb03be99d661455fd3790cd25355459448fa432 v7-3-330 +4b8c614c1c914ce5d712368a75dbfea9b7e44e17 v7-3-331 +0ecfe54a273f6bc440684aca4ebe5926a2dfc6e2 v7-3-332 +992b24149a9ee0d6f417e40a7462891a9f62ec6a v7-3-333 +fdc72363229865cc6fd2da9db66f1d6e683b87c0 v7-3-334 +dc3f90a73fb375092ea9d870ae48ff31b31a56ab v7-3-335 +52526aec4afb220a1271e9a645194c42d3b2a538 v7-3-336 +176bfa951339a0a36366cbc8def41ae75f5034e0 v7-3-337 +7919a3d7333b99cece7d1a2657c89c18de78bf82 v7-3-338 +b5a2b4c0c1cac1758990ea449bc1c552522f39a9 v7-3-339 +49b08c9b9f5b72d930a1c02f00aa4128dc58532d v7-3-340 +6963603ec6dc2b47da9a7e951b2d0b3e024535eb v7-3-341 +314d9368069ec0458631ca150c202e7f724ad6d3 v7-3-342 +98a05814f1b466c87611b810eeafe8e7d9c581b6 v7-3-343 +7ba2f171cdaca18571b5e73dece426411c4f124a v7-3-344 +35f098371af699aa7e614a6397a068119b54cabf v7-3-345 +af76a61a7f79ccd3bcf64e15c73f2a3ea0eb77da v7-3-346 +72528c5eb87ea315a7c1a48f7734d1717c28820f v7-3-347 +4d4a328f199e4020457b4bf8f077622966bb3563 v7-3-348 +075acc2dccaa621998ccb1d671a987090367d485 v7-3-349 +07956eab189c0c776b79bc42235833d234480559 v7-3-350 +ff69efc4bc55d83b5f2bb68aeede1d921e8f1036 v7-3-351 +ca65249eb34bc62e82d54f74e14271be7f7f8a44 v7-3-352 +12bb368fef2c8c5478f0f8905aac381a56a75fe0 v7-3-353 +6672b1645306ceab4348caaffec40990dc319b98 v7-3-354 +d2f70593afeb432611cdb0ea2a0600c2869a20e0 v7-3-355 +c349a670716ab5e5f01b8121f3b7f07560ce0b8a v7-3-356 +e618700297e83c0d51efbb77a849ce5f0b19b507 v7-3-357 +97a52300ef2b496b6c8e2487973f134d9e0afba8 v7-3-358 +b7f0f23bf90603f83854fd1aece09fcc64876a29 v7-3-359 +28480c9006e6e6936aae05de1f3ca3eaf4d2f267 v7-3-360 +e42252611e74c1df2063955d6086f59fb3e3247d v7-3-361 +074ddc768feadcb3164973c7f7be8bf78dbdd56e v7-3-362 +c025592d7b1dd658955b9a6d2d159c04e83c31e0 v7-3-363 +b0bbaf1020f08fa6dbeb059e251127e27fab9ecc v7-3-364 +54ef99c39139cad53db24bcdc18470394d76b40f v7-3-365 +436b42f3cba1896b65ad32e791d131a7c3978738 v7-3-366 +972bd3fca5562b8752ae18313e8cb3e6fac207c5 v7-3-367 +4e9c5338f44c24d511a989b5ea50850a2b9110b6 v7-3-368 +0df9718c45b68c0aaa40934bb54b3217b0c24495 v7-3-369 +3801e4811b0ecd56667fe89172ed37a84047307d v7-3-370 +e757e1127d210632cc920d9a0d2d2a3b89be7ffe v7-3-371 +6ff80dd02b51e9bd6d3c1b0167b81e295b0b4881 v7-3-372 +a1d2f741d45c8731450db862e89eb4a650796fe9 v7-3-373 +0a9d7cf90f94945578b83883e2ade369ecfbfc6d v7-3-374 +767bb493e7d31273edc45f4cb6602784f639f516 v7-3-375 +1d7434010de186b02fd6a5c8eef3e28108a4a251 v7-3-376 +cd145cc2f2c918b9fd77dc177f69805c77e31e41 v7-3-377 +a7517e84d9b8191092ff849e520558d61be01f71 v7-3-378 +0f193ef0f4298ed632b5e9dc88c7efefe093728b v7-3-379 +534b3ef1cf1440a9e22c2efc7f2673017024f124 v7-3-380 +6cc788692b2e8e043a3d7fff4e1efa2601ad39c7 v7-3-381 +2260435283f2ba0ac8d0b35e216b297605ef81db v7-3-382 +f8d2ef4512f8d78c00a7aff24fb8f99aced6f2d6 v7-3-383 +e958eeffa0a7d0ed2021f2f4b61ed9e5daf3d9a5 v7-3-384 +910eb66c97684b3c0511789e7655dce2c7ba254a v7-3-385 +1cedbee50ca65fc96eca2d360ddf886b3e7ad74f v7-3-386 +ac16c62282ac0e961afa44b556fe850dd6c8e1aa v7-3-387 +683fab13904c115b4e1f8b9ecb902d192501245d v7-3-388 +c97c3272d7a67a2980ddc291f12f09c36568c54c v7-3-389 +48252b5fd17042ae95c6736073ba3c5b12820f2c v7-3-390 +819322e0e93e50c04fa79163f9b88085cbe7db8d v7-3-391 +c4898d6d73a2ffa55fc91f79f8e110260eda29cb v7-3-392 +e0248b732a5cf0c4e6d61253564f3f855d11a755 v7-3-393 +927c7377cf49bbbf87d12863c2a2d462c9cf97a7 v7-3-394 +80c529a5650f1d70342f18c681b69d7897495006 v7-3-395 +2f075595590f498f1a9cfc42dfce24cd0d980e96 v7-3-396 +75217982ea460e7bdfdd2517d8d4e4f0d0ebaef4 v7-3-397 +9eb7fdfb5e63ad98f6feb81b03566fbdc5ebd895 v7-3-398 +ce6afdc00290520fb2d9677b44a0cbb70bc401e6 v7-3-399 +320cc46d0eb022bfb24d1b636050becc83ac0014 v7-3-400 +1251e1ce94610b265d3c1f636d379a0504cf2ae5 v7-3-401 +4eda43e1fce06ef32d0a79721fa0a6850a72b4dc v7-3-402 +5850b58276918de8edf19ece0bd258e179967af8 v7-3-403 +8b928bc814a8d502f25a06ddfa66b0474b89a73f v7-3-404 +c75a8d2404bd4f1297aafbb10ab1ae68ba678249 v7-3-405 +fbb23bd517f8614f512cd81b253519cbf4548863 v7-3-406 +55cebc7e5de078ef323a94ad79319c0ab33b09ef v7-3-407 +1fec3c62f6e8065c2f7ea7422213e78b50032de6 v7-3-408 +7b59c2c032ca8a15425afb1b519c809abfd572f0 v7-3-409 +5cf2a671d8ebdf46590b8fe349ad2b6f84eed868 v7-3-410 +8066fb7e356481b52019a52696072594d2590d4f v7-3-411 +aaee6093302281b70798ae4dc599145b95891908 v7-3-412 +821c8be2e9d604282481f50f7c5a1a210b9b1696 v7-3-413 +c7861dd3b593a2011ae46dbe43d78f44cdf2d99f v7-3-414 +e7e4dbac7ded5e048e289c7fd92c40e29f775758 v7-3-415 +5c5ca538693fbfd3a574998693094b48f19ec12e v7-3-416 +5c5ca538693fbfd3a574998693094b48f19ec12e v7-3-416 +22a626604672b37914ae929b0d5e11e3efb0d79f v7-3-416 +63d3541d07339c65d602bac2bbc72d755b416ad8 v7-3-417 +4500a0ad2e0a24f54e5c4b4a3266456cd5ccb2eb v7-3-418 +f4574729f6df749668df181a9dc09030f37de2ad v7-3-419 +ded8f5add04c9477c47098a66991f971324787f2 v7-3-420 +076003f52582c2ec0b4851df539edf512945778c v7-3-421 +60f6df978a413952e37d03b85a50ca858456b53b v7-3-422 +b7811ab264bf31e0049e7a9b689a399ead6cbda6 v7-3-423 +2e4539dc2de7da0aed83286304d1afeb0a4cdb3d v7-3-424 +7b17a38eb223b4b56327f019267c1156121f5c0f v7-3-425 +c70c005f61fb08ca032b4eab533908cfc6e6f40a v7-3-426 +45467d77047df9134a7694367bf97344441b1b3c v7-3-427 +d473f39aeadf6d022e520968db17257b42b52b61 v7-3-428 +c9366ca36f6feb95bd8e01dbed9973a404f5391e v7-3-429 +a9f8dd20a49f9b8296a6ef6d9e17e3446c0974eb v7-3-430 +a27fac494e709a3cb78399f5dbc5d807a1dc7a46 v7-3-431 +81201fb337a58a58cbac43c2b89025c681361df7 v7-3-432 +8a731d7f0664b13176afb640ed0325949836962d v7-3-433 +636c2b1cdc8b6cc5279ac7d5986da1085484b98a v7-3-434 +afbf45d854965f9e557497ab9d4d9aca87e220fd v7-3-435 +2a6eb75275d94b864eba6d6135de650a903a4a7e v7-3-436 +539613ce999d3a938c602a6b6eb230fd0d77a1d1 v7-3-437 +bb67cd961fc3011d367357c215a0603dcc46ea40 v7-3-438 +dec4338a7da22b02e7c7cc65668d35db264d3400 v7-3-439 +e3cbb11f3555d5dbb1cbd3daac4a958a9e1f01ea v7-3-440 +af4ed13ca541f034e3241f2eda1abdb3b45d1770 v7-3-441 +198ec1fff71a44a35aa7a59b4952583a82a296fa v7-3-442 +de050fcc24cfb56a7dc07dd283cc1132d774e7b7 v7-3-443 +72146e7f47fa647f19fe419f4c8602897880eed5 v7-3-444 +397e7e49bb0b831f7260d3ad70f6b07175c44a0c v7-3-445 +20ca2e05ae20ece942490182691ed45746f64cb6 v7-3-446 +6a03b0ea2e12d748c1e4199e3f428ee080760939 v7-3-447 +756d712b3118b896b57ddb4f4c071135bc031607 v7-3-448 +9ccdc4a69d8ff7aab8abf89f9a3cc9dad12249dd v7-3-449 +3479ac596f6c4b38849d2e5235ad590378605eb8 v7-3-450 +045fdc5b6056a18579f28b40a4914f4a7cb8d4a3 v7-3-451 +f1cde9cf023e15cd1bc26ae720d6380fa5ceac7d v7-3-452 +791baa7b35e1b6244cdecd4a2feed933f78fd84f v7-3-453 +1632640a24b42a9193eeb8f6e8150afaeee5ee35 v7-3-454 +e6392f2aed4c13170664b4ec13dd2d8b3ce968aa v7-3-455 +07fd030f89be62aa11c4ea1a188ee2d8f4348677 v7-3-456 +4a2744311b3f3c8207189dee4ef405959a2e2446 v7-3-457 +da670fb71d30a1eefb07b19256f8c0d677807550 v7-3-458 +cb2ae92ce106de532c53f8a16a82bc2bf6edacd2 v7-3-459 +981c7ad9dd48cac1b4030b97c2f0dc0b8fe82337 v7-3-460 +de60f6fa3d8d77442a39ec13efef89f6ca76af03 v7-3-461 +70eff6af1158f9dc99118ba73e81f456015c3ebd v7-3-462 +8e0fe5a723adfb45c44978083db7aeac11e6d72b v7-3-463 +43259e4542c76e950fecc86114c43065064d1b34 v7-3-464 +d1096a4e96bdd5bfc0ce2f1aaddcbff1475c69ad v7-3-465 +df9c7798b5e2c022310cd12e199c9de8d866aa39 v7-3-466 +276d58e9265cfee76c04bc5450681090900a16f4 v7-3-467 +38a1357304234dcea96f96019abf0f3e5ae290ab v7-3-468 +e61c3b09ae86a8a448ad2d028df6fa6b9778666b v7-3-469 +636e4db6e2075bd22640cfc8229af62059f8ffe0 v7-3-470 +3465a9e7758850684d18a9bb11ac033efdcd1755 v7-3-471 +8332129d9ae8f11f8ecb9f016e5292c6582bbb4e v7-3-472 +7f1bce9c9b79d4ebbf798d6122612934d55d70d9 v7-3-473 +7613c9ab083f3e9262be5a21fe086921b757da4c v7-3-474 +36160830a5e8d0e3b4174aa7d98363623468b77c v7-3-475 +fb2c5a51dac7f1dbce6a0f35808927ac206c7f47 v7-3-476 +62dc0d69ab11d5b5a67c6139a0dd3e2618d2c2a1 v7-3-477 +754db405921292fc57dbdaa85e62af333dce5912 v7-3-478 +3db4282d5e6bb74a5c1094f35a81472d5a98f313 v7-3-479 +b35844f3eb49bb84101fdb276e3e69b0b8f7813f v7-3-480 +8e21ac7f2d6e9f269b057939dda58d3a31beb894 v7-3-481 +3229335d0c4e6cd7e91e6e61d791d7dff7d3082d v7-3-482 +19040069b8bf1818db44396a150acb54f47c3a96 v7-3-483 +00fa605e7d7ba7d522c627a93de6e2f5017d2884 v7-3-484 +94374e0b6267d8983a73a22166888c2282ee793d v7-3-485 +08a37c57af479b54fa327bedc0ef31c42dd96f63 v7-3-486 +21219ffc97903684349f1fcc843eb61838877874 v7-3-487 +8691bdcdbf66733c7ec1ef8161da1d4ef49dce66 v7-3-488 +c1a6e1745cb521f863e63670e6c22c1c682ab4b1 v7-3-489 +b067b8b81be9c2839df75824da2e88da24b07b54 v7-3-490 +e070b34fe35e6e8c40ec31a08196dd81353db4e5 v7-3-491 +214c7ec1c8f995664d5684da8cbeaaa86850468f v7-3-492 +bf5960ec253293b7240f59a7682f2e862dacd205 v7-3-493 +5240610f277823478983e3f04abfbed4e85141cf v7-3-494 +27f6a22ff88eea07f24163fe470b7335f3c1b32b v7-3-495 +3daba355b0c15ef66a9d2810ae7c7cc534dccf62 v7-3-496 +e34c620007be9fd805556c43fe848de521f3b64c v7-3-497 +b1a42d2522fb4ff627a0c381e994e2a598f7bbbb v7-3-498 +4a2cb025b6417b00f2ced076eb79739e03acd7d4 v7-3-499 +b36640b2f671c006fe26b573fd42347227efbfa8 v7-3-500 +d7b335626ddc7a61667cb3e23ecadfe399b676fb v7-3-501 +1d1cce57421c78884cff2d3234d3759bc858d6fb v7-3-502 +65d036fd449e488303e78d2c6679a736551c39a6 v7-3-503 +17bfcb054cb770ac685acaa349165f210bdd36ca v7-3-504 +fe7bf24804e195209bef4cd008f0bac7eec7fc60 v7-3-505 +982f84487daf102f1203977a09f2c6c76d1ed3d5 v7-3-506 +f9a865d97614940f817b76642282d966781296e5 v7-3-507 +2722f11ddc998ac7c578c68c0248b58468179418 v7-3-508 +8101253704f6504bed3f0209e9a6fcae3966c6e7 v7-3-509 +53786601213cd9f86db8714f7b0e077b05e2704f v7-3-510 +b782e2f9e6892116ae5d068249b5198bbe0042c6 v7-3-511 +454646820185cbe13e1f2e4f7533b984d3b07b18 v7-3-512 +75037f9bc97ad76bca58dbbc0ddac69cc7f5d9ac v7-3-513 +7e4428115d2cea86fcfa980097c98c11380ae196 v7-3-514 +6c318419e3310fb9658ee6ead6b4ea33def8cb6d v7-3-515 +02440d1fcc9aa953ebb7c0719405ccf2525f2777 v7-3-516 +9a1dba1f969ac4cb2477626cd79a7a6b0bea1894 v7-3-517 +ec4ab9d832b0f5308c861423d99253fa496b3a3b v7-3-518 +ebec52bc2800b8e51e522425fdca5c252e6d4f8e v7-3-519 +7bafe52b6245761a242321352daca224e6b9df78 v7-3-520 +b14842cf382bd3f99ca090c985609c6dead5f9e0 v7-3-521 +e4899d2ff5d8e552ace52b7eafe02b2c5dcdb409 v7-3-522 +d8ce4a2eb44e3e3d56db5e26d9982aeb48d7814b v7-3-523 +ae1641c4fbcc8c25d27802d6048cb0767c4021d1 v7-3-524 +ac2e00f917df566b81b9e33891b102cba5b390e0 v7-3-525 +257c2878e0fcabd5504dcfed910287374405440a v7-3-526 +a17918b76ca1296f63db0e81dea0e37b8b880150 v7-3-527 +fa17c8646feb4719639150f1c301ce6c1557afb7 v7-3-528 +d83218a156dd8258a5f2f3ae019c56f3e8851d48 v7-3-529 +81d5f3a3e27fff9188ae34c41b939fc88c9837de v7-3-530 +c44f0f7424b98d321d90994198374628911623ce v7-3-531 +9755d151c7492a5f1d0e77a2d3c9e414f20f3b4e v7-3-532 +74d51b51f3e69df7d3295255ee10391b3409055b v7-3-533 +65f905eb14cd373e205ff4c8a53027514e96d819 v7-3-534 +f52d2ea0f81c20e6f026d74cec66b135d5470d2d v7-3-535 +a8897fd5d074d7baaba692013521304b13beb784 v7-3-536 +96715c3a905faa1bbdc50b16b0f57671b4758e0c v7-3-537 +bbf1fbbe4ab45442f8876790004805503e25f563 v7-3-538 +7a710cf51d73cb3c3c76fcea34ee706443800c54 v7-3-539 +af083cb521bcb69aae315654a3873c488dc58c43 v7-3-540 +5c1aaf9b4b1bc2d14d627fe22d414f3a2525c50b v7-3-541 +8d1b63e6d3173625324f4adfe733efc8091f9422 v7-3-542 +ce7bd50bafa74f4da979f27c4e5fa9a47e69d739 v7-3-543 +09d0bda69df0c5eb505a02e37a978e92fbc89332 v7-3-544 +e7ff3251dfa157284a48c5322783499d079e3eb0 v7-3-545 +0a364618c0e59fa777f526c99bee608bb5cf55ce v7-3-546 +4f4db5d661c4fae42f2d917c09549d58a2f4d05f v7-3-547 +8625e38066dbf6a4d5e2563fbe191c3910681d2e v7-3-548 +c0c935956ac3b7c706043e5c7c0ba840636fb10f v7-3-549 +297771eff080ed3bcfb2ade57c2dcab34bac5de8 v7-3-550 +e83c5dcea112a44f9a7b06042b52798e32d96541 v7-3-551 +443c50cd3e8811b58a4ca131ab21abd18aea9489 v7-3-552 +583e46e4a56c40fa1a7336be85eaec93f6800edf v7-3-553 +a967a979c37f458bd4d164afb8a6192a5b4a6fde v7-3-554 +8fb7bd9dfb2b26b43725c90e042d2089762466a6 v7-3-555 +b8924014a03991b79947d735a894e2c2e8f94980 v7-3-556 +a220dd97b5c7218558eaea27d301af2ed4f9ec2d v7-3-557 +34724dc5172bb81a9e670c5bd23edbe6a124fd28 v7-3-558 +74adc9f7e15b8c088abd04de35615cad6c83a811 v7-3-559 +0abd38ba64557c4a6d62575aaa3fc7ab6482d747 v7-3-560 +a1de7928a7aba45240c85a2bc8d70adadc49e4dc v7-3-561 +b2763055bdf26e1f11bf8cfb0601fefbefb34e0d v7-3-562 +02c86cdcf9a23f092400c7631e5906cb9053703b v7-3-563 +683de93060968ed4e9dfb7992910c75f479471ec v7-3-564 +5f811338b1186e1aef683d03fa05a8026d30e9f1 v7-3-565 +18c6b1752d0baab043792d3f6267ec393f7a11e1 v7-3-566 +f90bb88c261582fef85c16009f19168b38debd74 v7-3-567 +3b5f541269e2d9e57b82ea1ec89c6747e2003434 v7-3-568 +c052f3b79b9948e7072580e7db42f90c92eb40af v7-3-569 +4f1c511e71f851c4f1c14e950f95ebd6967c6ed1 v7-3-570 +43fd3896fab7be5ad01deed2960d37d91ba65691 v7-3-571 +3ae387af405f46e200fdf9bc204d0a251864abb9 v7-3-572 +802b1a1b275f5c8f95724d50d53642f221621d79 v7-3-573 +3ac005f02cf015b3aa246482c6331bd61c08d91a v7-3-574 +79ae10bd056520fb6367247804af22e52d2de8b8 v7-3-575 +7e3fedfc3d08d020e3ce047ec1a1cfd195af9ed7 v7-3-576 +286ba0251c0aff1a664a481846c1f4107fae0c11 v7-3-577 +0e9b2622c94a8edf906d6c44831c1cded7184d13 v7-3-578 +80ed6aa7b9eb18058a0b105af2ecd7b213891be2 v7-3-579 +f02b6ad168ae82ead0286b64627762ab2343ee96 v7-3-580 +96249a1803e28e6173faed53f8687334aa63360c v7-3-581 +d383bc2ba8112103389a44c2c747eaa1016da935 v7-3-582 +a69b1d711ff9d8b227acff694c53310cf237933f v7-3-583 +2d107086903af80afee524549e57d3ba016b3f12 v7-3-584 +d258a0c5c38a6a604b983b6499a0f02bc061c816 v7-3-585 +8393a16069fb5f7b22ab766167b698e4dc129911 v7-3-586 +a34fb0a077c9c26946727a25222e0a99dc08db0d v7-3-587 +e92cc285632dc29d932061970e43b53cdbb3460d v7-3-588 +e82937b753a8ca6705bf55dbf258f077746ec428 v7-3-589 +bdf7f3e4c763f2a038c397af8eb6b8950e58db6b v7-3-590 +e5b925ae56e36e86eb2ff059aa28d6a2dd332845 v7-3-591 +0e06193d4bd7be03924dd9c6251a64c6c6adf78d v7-3-592 +46896c29edd74418c665af7c1ed685aa52a41e1a v7-3-593 +5e7b500dbb7e9e964457d300b536aeba9771af6c v7-3-594 +928e7cef8836d13d4f2a17234e127b928ee63ff4 v7-3-595 +5aad2c444a00a2309e6e373b6bcb5441669ba126 v7-3-596 +b9aa7fb4a9281b87a651251f799e049409634757 v7-3-597 +f0747581607924c30530687fa88ebaa57602eb5f v7-3-598 +b06578f1390fea339a2d9d18e12758ec1dbcc279 v7-3-599 +8f98038a0bf34310a8224a569eacd539b7b8b649 v7-3-600 +c1780b4cb9955fc113c3c993c18c139e06425ef5 v7-3-601 +5cacdf56c94b6fa1992f7e9c07c95bfe52bcccec v7-3-602 +085f14642fe828b1cbae5706ca87f2932cebeb75 v7-3-603 +acd91c9741a6d0185b7c63db412888de4f904118 v7-3-604 +4873d9c4ad3b7214d3ea8af9712a87ff69948380 v7-3-605 +c612d154bcdd642e4097ae88526a81ed7868c184 v7-3-606 +002f2c5de317aaedb93bd2e506a295efe2d552ce v7-3-607 +d47e6222d1cde1caf08fa63104375f5750c25d90 v7-3-608 +d29aa05b7e311bc05491521f4059ca2b625c5550 v7-3-609 +9f48a54329975434d73ddfc19e33c343653d5c73 v7-3-610 +e13f2f3568e1e21fbd223a1c0627605e2b670c53 v7-3-611 +2b4b6185054ff05fb6ee3ab1bcde47409bf2ebe0 v7-3-612 +c03b6363492b26c02b4f8a725a91849a1a5cf548 v7-3-613 +2bb51730ef4bb0824658f7507edad165e194dd45 v7-3-614 +169ccc471a8a947c046b7ff41023b9045beb3496 v7-3-615 +baba6286c91e63dd42039206e3e0990fb0ac346f v7-3-616 +73db39ca1877a07008310a2ec98a2220e50c52f1 v7-3-617 +0b1cb3f839c48daaccbb3abcbd5f1c394c57cb10 v7-3-618 +27ecf0c87bd20140d9e85d4fd581332e0916191e v7-3-619 +a6ebae140d89f35876628cde44f0e7ee5a0ae1d2 v7-3-620 +ac13ea2b098d98e62408ec2d88026f690f68f940 v7-3-621 +52247eb615118965bb6a949307e9abfd378cd088 v7-3-622 +a46a101bfddd4fcf30759f3847fa1e18546907f4 v7-3-623 +06749e351b1c030acf50cf8c469f8973aff4a96a v7-3-624 +f43ffd820a46bf47b3e55b56d3e5334302383757 v7-3-625 +956b1ed19282518e0287891d4e7b2b8a3f850402 v7-3-626 +dc65e6429d2c1b79719455d7303f3f95c5897965 v7-3-627 +1ed93878d6e224d46a7c125a82e52338b9bf0f6b v7-3-628 +7de7ef01288db1abc944293a28aac13ddd87879e v7-3-629 +3416ac23d0758528919aaffbe02cecc6420b8aac v7-3-630 +99f076ca8d846d553aefd7e626ca938bcf93f259 v7-3-631 +44038a9777aaf0e6502e0eb57b8f7ccf31798ec4 v7-3-632 +ad5fbf3596e0a8ad15c260c5b529efc5ac689e13 v7-3-633 +b7eea24095073d55ac3c59664466b78a0525bebc v7-3-634 +f7f68f83fc335379bc9e3371c5118b8f81c8d5bc v7-3-635 +616bc1ad4f12be0ef37fe67d2f6ed7535f20e515 v7-3-636 +3b62d8f36cdf709d4e0575d63486ebe57ce7150c v7-3-637 +c0256c4bd91ed7b806aab002e4a45e440dd00343 v7-3-638 +1ec385a8faf4002fa300caf370ef2ac380d9702a v7-3-639 +c2c3577021ed4e354853d330e5fc60691d8750c5 v7-3-640 +c068389057c9a89fa351678b5f5776278971dabe v7-3-641 +79ac6744237ce5076a6d2e2b21198dfddc2cc9dd v7-3-642 +fdac34e3afa5f0dea26dba5e96932e3b9a0be50a v7-3-643 +fb7c028dcac7555fee78096813e3846d157cc91b v7-3-644 +1810ee914648ef3e16a8cf866299a32c4a9a00cb v7-3-645 +e70485d3f81df4d72cb40d6fa4ad4218cf1e8392 v7-3-646 +29fe4e5c1db17a62b16a95fdda84f08cd05c27b5 v7-3-647 +76c099d45772a233982c39a29510d89eaa4d5a1c v7-3-648 +063765c3cebbd6040dc091b8c1ba28739fef9118 v7-3-649 +a638ae0f1b0cc41d8d753d79503238f11215f3ea v7-3-650 +ece544e85821a6118da55dad1538ea4c3625bd1c v7-3-651 +5edf3c51aa93110e57fcd0428c30e5bed149df34 v7-3-652 +fd0c7452fa51118d8f6557b34b4cc96e830ef6c7 v7-3-653 +73557eda70271b49015265b7147562b63a7a094d v7-3-654 +0d3238b54963c4b1358a1f33221f75e067c1613f v7-3-655 +a2f61b2b8e770bb8d233ce50c8c7508508578a8b v7-3-656 +3958b0e672d676a310d756bff1b9c629a7b0142f v7-3-657 +15cdcb8ddcfb848c929cc37e239d5da8fe48a8d9 v7-3-658 +e75da4a3225d48e59ee321411134cf9999348b7d v7-3-659 +8fdadfccd184b7de73811a3a18dc8815b7eb3434 v7-3-660 +5e909c379a1e87491bfa95ba1a37b39d0725933b v7-3-661 +87afa95a2992a31b1937def0e1db4a193b0ab32f v7-3-662 +2a200527131fac8f50487790ec201badbccdaf0e v7-3-663 +f86619764a1e0338ef9e14c653a5909847304b8b v7-3-664 +35939e1e25ff5a3862b83248f8039971c81936d0 v7-3-665 +1e22adc6176ec07f52102f383a9c3c414d43f9c2 v7-3-666 +cd36c0fed43e63a94d6e87b5c5c0b4d95628da27 v7-3-667 +dde6d0216a08a5554f3c351e519134c386d14232 v7-3-668 +2b3b7b48370848149c8b831b2b7aee9b7f4f88bb v7-3-669 +2bf8c00741f7f07d9b58596764236a92eaeca862 v7-3-670 +530f5a9030315f984e096794938c61f9d3562e22 v7-3-671 +fd6ef931aa77239804860b74ed2362b29c1a6d4a v7-3-672 +ca1c025079b11c98363e11576d903af756a593fc v7-3-673 +4da6003f0f0eee0f3908f8627af6d13a94c10cc6 v7-3-674 +9963f7a9b41b555a0660288dd94df44b6dee7c2e v7-3-675 +5309996ddcedd7e2dcc8c46624348405290b8940 v7-3-676 +8115f449a574bc146f75449161f1757aaa5bbb66 v7-3-677 +de253f606048a2862a338190b071e5e3c7de7a41 v7-3-678 +dd0f25ede9a8322b5b638961835cc4743cd479a2 v7-3-679 +52acec46b75ecf24d044982d4cc067ef7890e7d6 v7-3-680 +a2fe24ec6a0d06d0af286b9fee9e307c33f27cca v7-3-681 +8eb5b61161b4c56b378ec829e360204102d22db4 v7-3-682 +0f5ee262963528ddccfa1f54b83696f939d21b53 v7-3-683 +1cc37b8cfaa1c670e442e2f9444feeb1820228bc v7-3-684 +34aa94a421b7a03a71013ddbb92937dbaf83b1aa v7-3-685 +ba9c9d0c4ff4cf56c3c5d2dec2da71decbbe9f6a v7-3-686 +0545dab1517f8ce2b8319c02572e4bb357567034 v7-3-687 +2696da84d37093da0dea419878e4241385eb515b v7-3-688 +3c072c1cb87372f3ebd345463abbc451e80143e2 v7-3-689 +caa0ca9ad06cb515b7e6d2e4410e03802b58e167 v7-3-690 +7f10daa706bb6ed0c39f1d2905cd78368a98d19f v7-3-691 +337a4368fd2b68b9822b94e595d77b4d6773bfa4 v7-3-692 +fd96b3cc88ed71d4c4d24c6ac67c9d3a68ae6e6b v7-3-693 +8235ccf121bb241f8105d0ba6e1c92e9f8b04555 v7-3-694 +cd6c420e31d6843fa1231e1cf7a3d9eff0ad4e07 v7-3-695 +447c688b82eb4a5eb7cd0e16521094b77160fd0f v7-3-696 +7c72b5f7ada1f4a028315aa50f8739e0e83c2e74 v7-3-697 +b5b892472ecb1a10cce1709e41700b264b6485d2 v7-3-698 +4ffb6f9b58e0b51923fe6a71e6af158b6e3f7864 v7-3-699 +c656847932d33b5d68394ae1ea3153dbdba4d3ff v7-3-700 +48af8656094539f8f71dc51e0a6aa14d48ddffd0 v7-3-701 +916b5c11a13e9978c85f9742546e70d614116883 v7-3-702 +f69321485951a3c9bd0e9e7484a1901b94cae726 v7-3-703 +be8ad9c9b973a4d87b9bcfee2b6a8de1f6d3e071 v7-3-704 +0aa74f2f50a8333fd5544f5d4b383132be41704c v7-3-705 +d0ae72c2f5f94e2483ab0979eec652b1289679a8 v7-3-706 +d24d309c365fc5c6a9324a6183d7b927d9f5132f v7-3-707 +64427849c1582299f2af389c6225eead529f0329 v7-3-708 +fb7dec372910b61478abdd7f79871724153ebfdd v7-3-709 +906eb5c0ef129b6876fa9c6c5a13e44807f7a503 v7-3-710 +2a7b2943be22c27edb3c0334423c1b17275f18fb v7-3-711 +557ef119999ea687ccb84eddca295755c24989da v7-3-712 +f15769bce0b811fc840fd455035270288e8d744d v7-3-713 +9ea14f097855e0929f86c86d405725717efb044d v7-3-714 +4f0ddf4137eeb08753f2593a32b42a1dcb1e6f4c v7-3-715 +eb268db98f321b93f5e7552920b6389f9dddfd3f v7-3-716 +6a76846b84eb0fe1220f8cfa19b1161145932d4d v7-3-717 +18e95db59826aa9379e6e3ada5d3540cbae1e596 v7-3-718 +e6d8b44065bc05741effbc0635c21506032d97b4 v7-3-719 +9e119e0ade5d804f174a3b67ad5e0d0e7449739f v7-3-720 +b23f583e132e88ec98f2b449b7216642ba64a8a8 v7-3-721 +de6968039340db04ec65164a3450a40773488e00 v7-3-722 +ee138f29259e02f62fe8181073e7a063523e50b8 v7-3-723 +6e5acfdf7a5a2b3fa27a529881af77c1e1b1c0f7 v7-3-724 +f4aa43d952f5bacc752951c80495fd20c72ba90c v7-3-725 +5049eacbff0e9688af99eb67a408cae5919ff52c v7-3-726 +d3c291efdb0b9f5cd286013b789eb1c91ae868ca v7-3-727 +233666f859339f425684af70dd008354776259af v7-3-728 +d08f05285dd102d8f071ee42869416d25dd4e72d v7-3-729 +37a4cacd20511ead4cf1a8ecb235276bc448fddf v7-3-730 +778ff2e87806133faa8fcfefbd41cad2b601bdb6 v7-3-731 +fa8bf69d3866eaf31e6c8fed74862feea11a40b0 v7-3-732 +509e55bd4a3feeb651ea173cefcbd933f723d8b6 v7-3-733 +fc8b4a06af9db05af800b1304599afd3e1229980 v7-3-734 +d3158bf4dee9270477defcde85949ce58fa350e5 v7-3-735 +b1536bbbda104edb11b0f5772e433d2b5388905e v7-3-736 +1773d5aa6437b0f88029a192cdde2c510faf517d v7-3-737 +eccae034465b9a44aa2389039ba06b25dc6ae7dc v7-3-738 +e2d36f345a7f1131e085336e7b471f718fad6c9d v7-3-739 +2c12cd5c1381dd9691af5e7d3e1fe1f54c929ee1 v7-3-740 +6e1fe64cf4404d899232a880552cf52998934656 v7-3-741 +4d1753f3e85c7fb6d9cde1a8aa9ded8d11cdcd01 v7-3-742 +67e3b2753a6ef97a94084b85f87873c309fea3d6 v7-3-743 +26c8b3b49f743ca163a63463da08cc3822322bc2 v7-3-744 +aab4b29520e79134e33f2c641f1d960de2dcdc1e v7-3-745 +4934eb2e22dc0bc03fd5d4f95706a69a1ddffb94 v7-3-746 +cd59ba19985a3b3bd66dffdcf59b00427f844818 v7-3-747 +56bb88c68f985365b0545a0370be59fcd97a4178 v7-3-748 +3e22fe67fa6935d1156738a34e50bffdf62006c9 v7-3-749 +5c36fe9f19a529fb6064b37b8e47e82cdeeb7ca8 v7-3-750 +d149f18b289fdf19363214e7805a0637307bd264 v7-3-751 +ed936effb1f374004db15f092b8c8ab87631fdd4 v7-3-752 +c83cd3d01128204d6926550cbe1064daaf8dee8c v7-3-753 +beceb0a18c79b5b1bda4822b34cb2d62b2967d27 v7-3-754 +d9b4cf53be2edbb872cc489aea32a4441b39eaf9 v7-3-755 +706c87d16d40ecdf9c6fba45bc47b911d8e140cc v7-3-756 +65ef7c96d65fb2fbf660797608809f0ac5d0c4b7 v7-3-757 +9eb0d30510f7b02aa5f55f400bfab08d847ab447 v7-3-758 +25ea15fdfa5c7d5894a06814fe9411b75050ebff v7-3-759 +8e54a32bcd56226647cfd3d8c5e142e3a98c0ca7 v7-3-760 +6834d6aeae099d6bfdff5151aa2174cafc22647f v7-3-761 +699f8d8f096d4627f97e8d3bcf64b8634a484c26 v7-3-762 +b6148e4a9c397b5dd1716cdac2f96730bd0f353d v7-3-763 +b29e55d0ef01c506ec48c0c5782e669bb1d80f14 v7-3-764 +915fb3d2dd8ffc322a5cc9e294d9bb7dfa8c5a83 v7-3-765 +b5103b7d9e1284ef9ffbc7d1170d9105c0769c4d v7-3-766 +be1cffa1e477c4a96bb54a3097d3369b23f32825 v7-3-767 +9ea81cd9b1f50054629547ce2eccfac1fa00d096 v7-3-768 +d179a8eff9d7b0adc561f4a4dcfb0b7612c1f301 v7-3-769 +da7a7ba36ed2a51f28e4d3f7e1fd550303e3ece8 v7-3-770 +3bd2c055319e086665af5e449498a4d5bf40f25e v7-3-771 +d828cab6964f4249db54bff6df0fe02d0f290387 v7-3-772 +3db9aee957f7eea6729e5bfd294e3a24d41c79e4 v7-3-773 +a8f5876e498125f4916c5f7168823885c27dad8c v7-3-774 +a6e60677aea727622dde15d1306c61588b805500 v7-3-775 +80b041b994d156360992666110964e74f7473d3e v7-3-776 +9a1a4c486e6bb367c639c29c6120d5fb1fadcc38 v7-3-777 +562bbee33aa4f9896cb23ed6de8fbf60cac323e0 v7-3-778 +2067ed78d37c331685ef8f293d6a23c372ca4b78 v7-3-779 +42edc5dac33c92876d93f00f8ab8c1f6bb25d3fc v7-3-780 +29f29e86602e4a7f83d4572d2fe75b9b0de2752f v7-3-781 +0de969850c0687d2018e025f31e5cef9e9ce1444 v7-3-782 +a80af62d5e3b3614ff9e058f42647c99bffe7481 v7-3-783 +fbadf0f6987790d98c3b3fd935fea0494743830a v7-3-784 +be4baed0c933e1f1543ea175e2e36551ff6caa18 v7-3-785 +8b3e88bab70215a18768fca5a90c6f07ac1aa5eb v7-3-786 +e1b98967a985f4d1ad889c8e69b822d9126411ab v7-3-787 +386fc822dd002958fdade4329845013cbfaa3dab v7-3-788 +43c15135926fb95fa82b01424677a9c37f4d0e46 v7-3-789 +8819ea6dcb72dcf61fd0d20f8ea1904a7546917f v7-3-790 +16e8a09e8ab08d2226dc84b12b7e434bda6b4fa9 v7-3-791 +7061704c2014e4563efa032672264a47b4b7b0d9 v7-3-792 +fdbded463fdcc861630b3ea61b9654374847231a v7-3-793 +9867f92c9b9fb082ee6daca816f859b53ed8e58b v7-3-794 +17a312ba38a0b606cfd64d82ed2ebc844828085f v7-3-795 +2c12c4e2fae8db60fbdf58b34c8b73eacdc32665 v7-3-796 +0cbea05f19c73c01dbd0f04378a65ab7de6719e7 v7-3-797 +cdaa688e3dddc442c1d39780b6ac0b5ac98c253e v7-3-798 +5e9730de25e9b4fc2abe14b8d6b0968a9e59983a v7-3-799 +c0cc0e0620dd935956a472e5b23369d1d78f5fb9 v7-3-800 +48b54c590dc83b705f2e19f9aea1e9a69fe09720 v7-3-801 +cd5145d2408bb52217417af654f5664af269e19e v7-3-802 +77fa4dee43fcd1c0bacad9dc85b3deb39e0ba487 v7-3-803 +2eb4b9ed2d42312eff32e845336aab748f7fe311 v7-3-804 +dc30c01f995623e65ee6651a46b12ff062df8860 v7-3-805 +f7e3f87ac9928df0079741258a3c6034ecc48806 v7-3-806 +1efc30385c417bb413f5199253edca2795f9da0e v7-3-807 +3b2a771abb39f670269b0ee9c4041bf02c2d5b84 v7-3-808 +918d7df425afb77261428968ae646efb95b15224 v7-3-809 +8904ccd5ee85ff326a05530c02cc90e1260f768a v7-3-810 +ad21448af931b3923d9b76e4efdcf0e966c9d199 v7-3-811 +4584e59860b8db6fc5870f0b8f0425f540ea90a7 v7-3-812 +4e6e012af15028dde0f55bd9bc676bbb14e481ff v7-3-813 +d5b1d6177b374bbecfbd5c75fbce28e148eeecea v7-3-814 +448a6e7cf32e14a4adcbc4066743e2f058f7e1c0 v7-3-815 +2b340e5c5baaf66015f3367208d9bf22ce1dfc8e v7-3-816 +01fa9313d4b560997234b94b2408e6bf64808afc v7-3-817 +ad7b6062a7f4041b736d45c5f045671d60eb782f v7-3-818 +36fd800b8c6c527c75bfe285d0ed0c3bc1cf45f7 v7-3-819 +688da4d486a019afa3565ffc553af6ee1a4e67d8 v7-3-820 +4936ee89b4bcfaa33f74114bd07f20af382af14d v7-3-821 +2f7883063b19039840a4a73fa227f6f42b9e3281 v7-3-822 +db401e5e4c5d868b7848486c84521f047dc04b01 v7-3-823 +f5ef9b9c18cd9345eca783fb0c6d4ed50e215cb8 v7-3-824 +6b1f3fc893cdb6d0a4fff5997cc8ff083940e727 v7-3-825 +646cb6b6ff2372c26cb9dc9ef1a0f8d562204950 v7-3-826 +5e17a12a3b1438a7ce044db02d9916ef36e404a9 v7-3-827 +13170a796134824375a42e77af4ff012ceed2b5a v7-3-828 +7728d626ae038dedbf3347508238ef3ab4216a9e v7-3-829 +454d35a4339251adf125de78a8a98d99105533eb v7-3-830 +cb185366f5c84852a7221ed6d9b274a7239ad06d v7-3-831 +670e576a58d19c2033877d26b4338873d8a7db12 v7-3-832 +b971097606032c6fceb961fd559121d5bd74a260 v7-3-833 +3ac9d7d8274e669d10178c4d95eac55080ee0ea5 v7-3-834 +d356b5ce84ceac41b036136807ebe887208fb6f0 v7-3-835 +ff193256398a81a520b44c67d661eee36c64ee95 v7-3-836 +14698f63de8db5b034939aa66b7076ab76bcd529 v7-3-837 +1c819b05529cbbc39982513271499e0217382124 v7-3-838 +2030aca407edf6c865114f459bf2d5d79adea390 v7-3-839 +1778d51fcbc37e819c305b860f98c949915d35eb v7-3-840 +b40e6a47ee53789e91b57c04d9ee7328fa9237d5 v7-3-841 +78321dcaa8e263cdf408f7880530b7aea7401a49 v7-3-842 +f4960ddda07ce46a098d9106ac1b22fd0f6d0f0a v7-3-843 +eccc0e8a82fb632efdfa600db3f65f4ed3dff01b v7-3-844 +171234e02b1e74a2482003d56e7110d37fb4a62b v7-3-845 +b06bb07d906be3be689f90399effd2b3b2ac2ee3 v7-3-846 +4dd43d6b3df705a513be75db8a1b50a83f72088d v7-3-847 +e49b80f267dc3cde78de78026368dec3a20520f2 v7-3-848 +dc77c2a14a05810bda7e53373d76b7f41341f44d v7-3-849 +07fef68eb0188adb3d750b92b78059cf41fc8c7c v7-3-850 +dd669f296568a7525e02ab54b615bde20d37c466 v7-3-851 +3fd805ca2a6a6ef231f111c6a7b3cd512abaf537 v7-3-852 +eea32254940fb4cd61339650e10a808f4e702e62 v7-3-853 +14cdb6e4d5b88aaaf7e33eaee87efec5b1c1ebf5 v7-3-854 +6604853dd8227c7983dc1b10f804f6aa4b28578f v7-3-855 +fb533fb6c015f40a3b1301c0c876c35665b0d6ef v7-3-856 +4905e038b1057e133d0e72c48cf88580cdedf26b v7-3-857 +0a3fab86f34d6bab27e0be69db4f39ffb664557a v7-3-858 +ecf21be84def6033137d168e0a66500c29aeffec v7-3-859 +6ce32844727d8d04e8dc91310d0a4118d81aa161 v7-3-860 +6fe728bf165e9b6974ef47e86d98b0eb14ce21f3 v7-3-861 +dd4f3ceb5d86f8367d4cfd6fdc898e493c6d0aad v7-3-862 +5c0652f455c9f2ae72790a782fe5b5fd1a0e857c v7-3-863 +a82ef37d38c09523bab204253b52e177dbbc0581 v7-3-864 +94342b0605fb9111b7fd4a45a8bbc72992c4c255 v7-3-865 +90d72df431e54d677f03171cbe558434029c027e v7-3-866 +0fcb050fd79d84ed190452e6387e42d320678fec v7-3-867 +b31989e2b05832d432557a32ed8901dce237dec2 v7-3-868 +23ce9a61bdc2a35892ec4e4fa22e8964d60dc6cd v7-3-869 +26e59a39fdd965ffe83bd654b705540551c8e0c8 v7-3-870 +d52c45b35fb0c3b77bbace6cec3deda8100fbb7a v7-3-871 +edd0bc1f26bd019cfd328a0dc2c9a854607e4a41 v7-3-872 +7faeece39228fde0ac5c26a362a223d0dbe9bba5 v7-3-873 +4d0b39bcec207130e483ffa66b6f51f999d8e95b v7-3-874 +beab15a2ef147b880bf7b5add269142b9af58317 v7-3-875 +787df0fc6539ff7886e9fabc85ea403096577440 v7-3-876 +96f478b812b14fb1a5710450a1174baa55c73409 v7-3-877 +97a5ce76cb7d5f635876bbddf35b421c0c76690c v7-3-878 +79176b78969cf5d182b378ffb8e341e22f18775b v7-3-879 +9945fe0536a32496fe4842524199b5c24bb8b0d0 v7-3-880 +d8acfc49d94e485f839d8e2534d302b91a98bf9d v7-3-881 +8653c39b85ea93e052bb0cbda571e7298451eebe v7-3-882 +76aa34cef80f5d22bbbcf60278c833fdadd70131 v7-3-883 +22adc26aaa9f701267bd1ee4636592859ee2dc70 v7-3-884 +c5eab656ec51dc2d40ef6e39194c74af868a4b5e v7-3-885 +902d6ab377ee2f011279b3aaebeb05d0f5c2bf80 v7-3-886 +015e53d9978721bbb9283a999c668c98ad2554a9 v7-3-887 +b0b253898cf9ff8f5fbacf69de76b5640b1b6a55 v7-3-888 +cb0c694517a08f1f8f548f0771e874537a390dd4 v7-3-889 +89bdd6d575101291c66f9e701c456ee71085d147 v7-3-890 +1dc160bf2488fb1332250edaefcc9f1e320c8e57 v7-3-891 +6c2e8074ea2588f710adc669e7a15041f6e80adc v7-3-892 +dc3efb6d5a0821c79f939db8e3b77a714292195c v7-3-893 +52e946d654e0fe978609e0a23dde3c8998f2ce24 v7-3-894 +11007e80829ca9d72813a9c60a2eded80a0c1855 v7-3-895 +af3a3680fc75f090e896d902f0b4c7a710c41d41 v7-3-896 +5aa74a2f8f9de4a6c10bdebbef910d6750f2a980 v7-3-897 +aca1886102bdf19f755dc5eb1ac379f1f0680f6d v7-3-898 +bb3cfdb626077d9236447f40ee725b9a5d78216b v7-3-899 +b53fa3b431934de82d3bee329643bbe0856f651b v7-3-900 +790238e5a46c70f45232c0a54d0c73a6ca1d37dd v7-3-901 +b01e3cff92530f6c317e0cf2c0ba0fb4f97df883 v7-3-902 +166b3df562ead7b4f85a494fb8a6eef40affdf85 v7-3-903 +bdab73bf24a8b361a42ffcf429c0aa705d4594e0 v7-3-904 +8e1d1da398b378cf03c0910979cf475ddb2df7e3 v7-3-905 +ff1f3e42df08b2ebc39e3b1f2c80f4751bf16dbc v7-3-906 +9f3da1dea7c0944837e8d5a080eb59a24f6c9dd7 v7-3-907 +4281875776fb2c3127d08a03c3600b58353c9796 v7-3-908 +b79f3c3a584c701e93acd1881a934c931634c39f v7-3-909 +d8d9c591c50fec51b64c12bd2f42d3550bd31d7d v7-3-910 +f1eab4f77a6fe4b77508d86a68a6681195806607 v7-3-911 +62eadd7de409641de83ce61e1eb311e9116e06fa v7-3-912 +0d3573091d42d4797f10cff1c4139557d384f899 v7-3-913 +9f642ac84df9303d34d0214da2ade28f78ecfb6c v7-3-914 +d8053e6bf72a555ed34201c6edb55a23b4fc9965 v7-3-915 +f39af34195702c5587eff88dec51b40e327f418d v7-3-916 +3887b02953cec045611021e0adcd512b3d127692 v7-3-917 +6a8ffaf0585660badbb817f6a2f1cb583c9f1447 v7-3-918 +12636b8248163628e7c8df68210dc17932440157 v7-3-919 +923277a9cce4316d6b4cb3c6571dab538a6b0108 v7-3-920 +97474f967eec7f24f09d20dbac65ec9bb660bb2e v7-3-921 +1d56e5dfa08e68c9ef0645cabf076e401799e3bd v7-3-922 +6ecb80dc6521837e28bc58d27539767d6947037d v7-3-923 +7eaccdaa530431c15fb0e0803e5495074e883bb9 v7-3-924 +04736b4030ecfa2c9e8d6046ea533718dc5d8ff0 v7-3-925 +c80838526eebf3374fc42febcf40cd911cc1523c v7-3-926 +d67e292af6f9d259d0893c8062f3896a8aac000f v7-3-927 +6d45e6f974159e816a4300877296e9a0760ad113 v7-3-928 +94aa0d30a3ea6291daf7e6207810ec5282cc97a4 v7-3-929 +d85196defe0da017ff6d547e36bcf40aecba9661 v7-3-930 +fe0c7437ae8b0e05b57990549e1ddc71e456f18e v7-3-931 +b7f2d97ae2b7442c46c48ef36d9e33c3ddd34db7 v7-3-932 +c9820396afb971035e722ddce2058d5db2f0fc64 v7-3-933 +000bb500208d54e17de26bd5cc5a18fae8d1729c v7-3-934 +c42e130ebf36515e574d89efbe98fe380ec7c694 v7-3-935 +e7361b2d8136f6468daedf1bec7390d77c5c5bb1 v7-3-936 +8ec7323f417d998685afc26bbb4e466eb0204352 v7-3-937 +a2f03b41dca7024da5e702d016ae52fe7f51594c v7-3-938 +48a22f36ff45659594ca865f502fe95691b2e332 v7-3-939 +e2db42528a5bf380bc7e92e41afc807b27f01c12 v7-3-940 +da71e66dc1d4300cd792f0da77a5afd99d634c6c v7-3-941 +358c10968c7fcb2599356b419473a3fd46edcb69 v7-3-942 +736b8e18a3bced7e498a6b81e7189d78cf4671e0 v7-3-943 +71fa86c8fd4a1af0a27a880ea15e3a7b97334453 v7-3-944 +80eea7a9d6b9c2e7e8ceb18d6a090387f7e1e9f5 v7-3-945 +11376842075637114ee3714ccbc2e0e8a432a4ac v7-3-946 +a84f21892563be88839b4026bafba77f9e9a1fec v7-3-947 +a6f0544df95e5f783861d3c67d84bc5a28a315da v7-3-948 +cfd76908da252e03f46ea15cde44a3664e895fb0 v7-3-949 +d4816e7c33289b9c8aec739850133484c5c3e8fa v7-3-950 +907b1f035ee7cc61fec1463db85a9eaba4717120 v7-3-951 +2a166caf8709876053f9b32f4f88590a4fbc6899 v7-3-952 +7b789d337820088f09f6a8fb488efd418f702133 v7-3-953 +1afdb7d21c14e15a1239d406205563dd702d7d24 v7-3-954 +fa90ebf2c8f36d98ef27b2668ac1e1c11db75bbe v7-3-955 +0bbacb6a83bd678266a0a864e47f4e03927103fd v7-3-956 +c16602758d847665ed50138a562f1513ca5dedc8 v7-3-957 +58b74ab7f29df09e54bf76ac84697f04b9f4c163 v7-3-958 +ef6b11bb183da058edf52c86ce705726ccf72600 v7-3-959 +e67522c4f56646bd6ef91ad63b152bcec96b2e05 v7-3-960 +d5177d5ece0c539680390448c8ce8d05a6d61201 v7-3-961 +0a94ac379769762200c427995551fa4325ec8f28 v7-3-962 +7eafa576528e6921f337da5c1e3e2d0a9617993a v7-3-963 +7d81f4e967285d14c9e9901328d2c66911a9a2f2 v7-3-964 +8a3ca4adb5d8046f87aabcf30a2b7aefb8b9d46c v7-3-965 +9b800f0a757fcbedc2c6a1851353c3e5044d39b2 v7-3-966 +20e30e31bd86390590e288516670b81caec6188c v7-3-967 +dfbe53a54c790d63f8788c13a6a2d18198825605 v7-3-968 +137f9d41f50894cd25e5b47764af817dd84037cd v7-3-969 +ccecb03e5e8ba41db171a5535047f9a30b5d391d v7-3-970 +8d6bb2338a583af5eb85589949065cfe46c42bd4 v7-3-971 +ba53304245f033b6cf2f6088c09f45dc0d98c47c v7-3-972 +09e1e574a52d38522a35af8741b3f8ce92336398 v7-3-973 +92fec4b83be56a65ed81f25885717f6db7639854 v7-3-974 +44b89b025cdfb6a7371a036ef1b2dd93670b2a15 v7-3-975 +015a8fabf90072ae0eadee5c013f7db00f83977c v7-3-976 +21e13403140aec6f32a8f9b49dac02c37945ab11 v7-3-977 +fe8a0a6a1c2a2ca51c92275a9010999106505ed8 v7-3-978 +a63361b9097952faa9c9eba2caebef09b9f8b62b v7-3-979 +c83656c9745a005df1aa7d6985787048a1884734 v7-3-980 +4ff8fa416a0dd64046e0471933d09f7f19a4ea0f v7-3-981 +dde1cf311be6edf32243f03fd8436bdf9798de93 v7-3-982 +ab5154170c3dfc0dd769243e1da53a865e1f69d7 v7-3-983 +94c5441984cc47971ac49435d184c13cd6d3014b v7-3-984 +0c940b6f282836186f428d201760c6f6b9b52fc6 v7-3-985 +3cc2dca142a0aed29befbe6d2944ed580d728545 v7-3-986 +032c9f916f257ed59f7c55a6c8113791d3def365 v7-3-987 +035fb0d5e7ce67eaff19a6cadb37b57c0c25a36b v7-3-988 +cd005ab15ef3fce8f551c81ea10c93889f42d09d v7-3-989 +9a1d78f828261181232734378f73d648148a42bc v7-3-990 +8fe768bc1234fc817db3cda61ae9e9dabf4ae958 v7-3-991 +89ea7593fc0cb9ec66cc04619217447715289a78 v7-3-992 +dff1542e64f95a3fe10ea24f4007206d53880087 v7-3-993 +f74611bfb1b77eb2ad42b6d74b3e3657cf3f0725 v7-3-994 +6d517f6e5f0b031cdb386878d8d428f7f2cfc2a1 v7-3-995 +ebd94eabfd8013a605d8efc7df64a970531fd5a8 v7-3-996 +ef02f32d8e53a7b3d7327ac79359a18070e4a101 v7-3-997 +47e6dec5ce3cbc8e833480b8300132d4bf5f035e v7-3-998 +e6e60d9da892296ad770b26a22f98bb72c4e1b7d v7-3-999 +d037b9cbdaaa0af2b383c93acd0fd87e8eb2b8f1 v7-3-1000 +9dbbddb2ed10936c20048ad28a2dcb9fdb6cdd79 v7-3-1001 +b498224f5b417bc436c9b967978628703191c0d9 v7-3-1002 +ce94a870b59bbaad92399eb782edc33a855e0b93 v7-3-1003 +cadb57fbb78165c81fe4718a355b5f73c641bb62 v7-3-1004 +90e9917d4114461c5f7258c04e61de1dff2e1a74 v7-3-1005 +9a2183bd829502597d52f22a1c27fec8399298fd v7-3-1006 +fba9c0f86f77942d47a5505b065e01a733e7f111 v7-3-1007 +8cb14f59a3275cb183f031e2aa1e29e230635d6f v7-3-1008 +57393dc4b811a1283a77c759a09bc52ba78acb8d v7-3-1009 +36ddcf4cecbc96b9854af6956f371dea205a6890 v7-3-1010 +55bcaa1d2749f9dc22187bea848b002220cfe960 v7-3-1011 +432a6b8c7d933dee8faf25a342e857fa0a538eea v7-3-1012 +1be43c095affe8e945751a5cb4e21210f31c02ab v7-3-1013 +6a2005efa02b4ae30fa4867db1463fd4a3689843 v7-3-1014 +45f97c34953728cfe859cfe5212c241fab1da20f v7-3-1015 +5cc98a5898cf9ff0841c78acfe1056ae075a217a v7-3-1016 +532c2e850256cced37b8864ee7042ef8240f135a v7-3-1017 +80170d61a85cc03d66228c16c80cd8a4898a971e v7-3-1018 +08ac4698095359c3a888b34074548435e9775973 v7-3-1019 +f7944ce459ac77416617e0b2f8a91a9c8cb385b6 v7-3-1020 +fc997f05cbc7b566df765c79452a541afaadccb8 v7-3-1021 +849180347ac359fd52b92d70b545800126178eab v7-3-1022 +f0c37f5cf4eabb04044ccab4031cc4056c5a47a2 v7-3-1023 +7b835b2969af137f979b633977d59e13cc0960df v7-3-1024 +b2946c06d1b6d4e9d38fad1d4281e2d4db3523f3 v7-3-1025 +888c12c899e552deb33b2e1e8ea3c8141352c3ce v7-3-1026 +04086e29756318d7a7cfe3d35fd38ccf550ac366 v7-3-1027 +4d81fdda8f35cf764744161118aeaec948b9fc90 v7-3-1028 +e7016af0cbf92a5562c01e95f2cec306b6465783 v7-3-1029 +d1f3c77159f9b69f229ee0f70fd98464b2546920 v7-3-1030 +96c1a785009768720fcb16add8b9daf1290ce56d v7-3-1031 +f262fb02889d46743226a78363250e2e1ed7426b v7-3-1032 +b2a8e3a66f8cc73c3942ef5cb9c0519df86203cd v7-3-1033 +37e444aeb33b2adf359f8736807f18ff5dc11019 v7-3-1034 +626e9ccb7c48b3fa7ff6d2ca5efe91bff39135dc v7-3-1035 +b22bff1a6af81dd78f8e9ff0bcded471ab858245 v7-3-1036 +7a2be4a39423e4763ca164dc77fcfd4b27f91a8e v7-3-1037 +6a73ac422c67d7ad4642ae9194cf9d4c832021d2 v7-3-1038 +321cfbef943199e8e967f6354877ca8fc07e4551 v7-3-1039 +b9f87487d93597f69f09ecab8cdca11bef6c09d0 v7-3-1040 +63c9b681c3dba1cfcd2df48085de2453c43855af v7-3-1041 +fa39483a1363d533f9c7897d476bf0ebd1b8f44b v7-3-1042 +1e8952a5a726ddc1458ff40270cd5da16be3f272 v7-3-1043 +0cf552b325b55d417079ad28dff4e27afec5a2ca v7-3-1044 +29b2be2bba0d369fef85af7aa3196f8b84cce35c v7-3-1045 +00eecb2f8e3e9664ff00682d278a2b1e19cc4b09 v7-3-1046 +89bec74fd7936cc425b42f9e882f1f3864b1c95d v7-3-1047 +19d406a8509d9755b05af7d5ea521925b01f0d76 v7-3-1048 +074491a83571596acb6aac6d371140e8f99fbc24 v7-3-1049 +38276cfe40b2069f94b159cc14b4ade47257c836 v7-3-1050 +70600448f9e7f3bff3b8b0c2f2733662bac08ea8 v7-3-1051 +12421d8a45d5597828b8343c31faa79f77d9c512 v7-3-1052 +49f0fcd9762ce5057e4ac22417105b3ce43a35f3 v7-3-1053 +219b2fcad60d27febcaf7251a91be331484b2c98 v7-3-1054 +5679b8ddd8cc0eb004cbb61babb336c3af398c92 v7-3-1055 +21a99611149b0f1c200e001ec26b8b07c6e28c45 v7-3-1056 +90beab957ba9ebeac150bc5a56cf6ad90f53336d v7-3-1057 +66e615ce7f61948a2a4a8615d703a42d56763490 v7-3-1058 +548b889fe3cfbf06ab50de373df5e65f52cb249c v7-3-1059 +cb5c1e37ad4d4811e5fe178f14c523b178da81ec v7-3-1060 +18ba89e06fab93e8cdf7ca8dfbb34b66ff9d61d1 v7-3-1061 +e4e48d4ee0409509d56f7d654b77a35133283bc7 v7-3-1062 +4157fef7b95074cac55977127964adfa883ec030 v7-3-1063 +3857d399ab41ee8af64c5307c27da64b01e0a233 v7-3-1064 +07c534fe9b6cdbfecfd100b7e01f894d6708de1b v7-3-1065 +4c46e1487c634997f4701d8e68ba9ab019f85227 v7-3-1066 +52a4f66ae1f5695426de21877b2954d11ad8a4f4 v7-3-1067 +59e6c2bd68e38244d2133fc8d76bfc9c7b082d9f v7-3-1068 +6ec3dada4ad3c7e2551191e598cfb6d37bedac36 v7-3-1069 +c316a30a889217be4158fba900c85d9d44ad3a1b v7-3-1070 +857f6c53f1172ed836d44f105f6832973369bef5 v7-3-1071 +9f502d8d5165a79b361ad6048e84c278e1397f88 v7-3-1072 +f10f63aaec5c08e6f3b1b3abdef6ce3eef1cff6f v7-3-1073 +b943fd24c351141113dba360bd1d1f02b38813f5 v7-3-1074 +779ca415f8e142ab5ca74f95c8f732d1f00fb7dc v7-3-1075 +93b7ed814bec8a9a0b43138be7500b948d48eb92 v7-3-1076 +80b0081824fa3084d0e12f0b21f6e504b4e5e076 v7-3-1077 +0dce3d812e7acc74c39b3d87d8bb5b3a4dbee878 v7-3-1078 +bce2051173f01564805158ff669255359953fcad v7-3-1079 +7a35419393c36edcb710602edba31d5096d357d0 v7-3-1080 +9e7ef781d494694a36e056631dbd2c4357ab1090 v7-3-1081 +2d15582e132f62aa37e5eea5e837b3824f148dd2 v7-3-1082 +b3c59716e7001ab5127c259c9fd3552de0d36d53 v7-3-1083 +05d57d7c2d5578f1d794151be9cbb5aef89d821e v7-3-1084 +811a4c9b51d808cbd54dd0bab606d7cc1cc2e412 v7-3-1085 +c1622ff9ed8d984604a47ad0805d3fc528452bde v7-3-1086 +4d92b873acefb69e112fd73b642bfdf7979f1355 v7-3-1087 +2f51ee8825dbeb31713e635fd8d77ef77742ad64 v7-3-1088 +79522bb1712556183073b148e085d302967d7260 v7-3-1089 +8db697ae406a8ceb05f9fb8b45a70980904f230a v7-3-1090 +371cc0c44097772ac13e0e3cb59350c6be52257a v7-3-1091 +9d97a0c045ef5c86652c7fae4d4cd5752bcb42d6 v7-3-1092 +08fbb1ce1bc56e3884c5d35106df31a9cae1f954 v7-3-1093 +efc4fb311d5d45f6320b9d17ed47d24748335bcb v7-3-1094 +ed4e689bbea1c45a8aeb808b526dfd052470ef20 v7-3-1095 +2db0050523719e39f17f4bd855310bf5688155f5 v7-3-1096 +0c25fa1dfd97721cd4c92f4e7a9a524a24f3f43e v7-3-1097 +26f2dbea7443f719c854c7a1fc35dbacdd129307 v7-3-1098 +542af01979be709a4763eb8b9cc1cbcfaf584838 v7-3-1099 +bf917ee1fad22f643d7ef1a919b233f07fc1fb3c v7-3-1100 +761e42cc79c2560af55ebec0ec1060f547e64577 v7-3-1101 +1c5da99d1b708b7af2928e7bc0d9d57935872958 v7-3-1102 +832bf8136d86dd17489d962cd2d7316d7edf5087 v7-3-1103 +fc4d7f02ea3ac731a9717438c72aba098b117e8e v7-3-1104 +a804309e7327f0ece015aace3c855e7987f0ac3d v7-3-1105 +ec72bb4a0fc2e7f0d517cb12f784770cea9cc19c v7-3-1106 +bd6bef0bd0fbeb79b440e429f5e077169388198c v7-3-1107 +3534e9b4fa42b392399d66d08a1dcdd230accba5 v7-3-1108 +450e13fe16211217f32bc57c3827f439540398bf v7-3-1109 +3849c811cc0bccbe09a559e2be5fec7e810510cc v7-3-1110 +43de4ebbe7ad009199987337b864240ba19bfec6 v7-3-1111 +749e2b2755d59eedd6fd28e7d9ec47523b722be7 v7-3-1112 +0798b096bab3efde994f0b50d6776ac72ca0f41c v7-3-1113 +532c31f9e92fd44526d02d26c503a15c1c1c78c2 v7-3-1114 +3f2319a953b3c2fc8cbe9ae9225080a5b30a638a v7-3-1115 +66a9e8fa6f45ddd8dec5b98c193abc576330e4d4 v7-3-1116 +97560c16ca99a1341f31d88ed9f508d777647b5c v7-3-1117 +6a706ca7a889d27ecd6b671e31dbe28ab6b66f28 v7-3-1118 +a62695305e031260557ff0cde6eca1db5ab9e3e9 v7-3-1119 +d1376091d18b5a742ada87bf825d20e99ccbef19 v7-3-1120 +4b9503f0c7d3d75d772c2c0dbe19616da2480749 v7-3-1121 +7793e737ec8723a18d4c5468b33a895249ba4f02 v7-3-1122 +77ecab3bb2078fe525602172b35c2031c819ade3 v7-3-1123 +be1e4acb30cab46ab439e45b9b6871a7aff23800 v7-3-1124 +96f3348f9f119a996ae8826ef4d5a06c3f7e677f v7-3-1125 +b25a1b2e3175902e49a69e8d9ccc5c1cc43fbe3f v7-3-1126 +532a9855bd30d28cc14848ce5136658a273bc999 v7-3-1127 +47906f888725760ac704668b71057629e266e486 v7-3-1128 +f824cb97eb922975cdc1025f3c2c62f1bdbcfdd6 v7-3-1129 +ec24ff78a79c1851d8003780035d6c55f98dcceb v7-3-1130 +82e6588762e4aee5b0f0cd51d5c124ebfec6424d v7-3-1131 +b20dbf3a5370543ffaa1d6fc337df1969843477e v7-3-1132 +03375ccf28a27ed72f6cf347383aaacbd1a51e4d v7-3-1133 +531e598651fc6a7c28bc808d82c09ddc1759bf4f v7-3-1134 +e4bc21965079eb6948d8e22ad96d145659852707 v7-3-1135 +343d09006056ff408f08850317b8e8caf056f5fe v7-3-1136 +c02c7df9bdc91ae08ef626d4a8262fed47285c41 v7-3-1137 +47222d8b1e94c962f9daf6c2ff3f6c6ddcb71613 v7-3-1138 +3b5a023a45434e825b8dbeed551cf7f4578243f6 v7-3-1139 +7fde662e1db24077abbe26e6d78c286928f5c9b6 v7-3-1140 +10673b3531ebcc18467d04bb806036cbee1b8e2b v7-3-1141 +65cef998f860b3745880622cba74135bfa249ae2 v7-3-1142 +66e849c4558aca6c522026882159b41994d0c0c1 v7-3-1143 +8360a59aa04b8668e377a66d1fc46e9e52b35110 v7-3-1144 +a30e3762957d61966152040315d160f860433576 v7-3-1145 +e3f9e33fb28c367aac7b2270b6fd304fd755b6d4 v7-3-1146 +3cd3cc1e91193a0b45e6aff1373cd4802e595a16 v7-3-1147 +220bdea4f57919c290d92b1f6c83a7252cd660b6 v7-3-1148 +66803af09906a828b9f41d7ae0f7a379137eaf99 v7-3-1149 +3dbd251777de232c168d87650acda5fec408146c v7-3-1150 +4d7e3df04256790855f7a6dc289f32ffc04da133 v7-3-1151 +9909e44879b9f80679fd05af19a423b2673b2301 v7-3-1152 +bc3f4804cf470cec5773d8842743efb760f69102 v7-3-1153 +6419ee8098c80f0418081c73b790b09c61f13c3a v7-3-1154 +bf1e6326df1104cabc04b8490f9456dbda901fd2 v7-3-1155 +8c4324e6f4779ee316361511ff783f6344750be9 v7-3-1156 +2f1ee97f5f23a5f9e1c572ed4afb50fb79ce7a35 v7-3-1157 +46077370bc605815f5e41cbfc925120a913acbaa v7-3-1158 +208a6c04e6b8221c1f5187391d86c5b57e61445b v7-3-1159 +60301d4d16827a961019d72a78e811f41326c680 v7-3-1160 +ff393592644960783e9a1c7c7959a8cbb0954673 v7-3-1161 +b8eabb6a96871321bec8526fa04ba1ff1a96780e v7-3-1162 +70b1178dec7919120632cdeee6056e38108356a7 v7-3-1163 +4db0bf9f1b44d1f0d42a1863732dfaef73c9971d v7-3-1164 +05b8436873d48055cbd24f043548092755d77be7 v7-3-1165 +d59ff2114733a526847ea38d093897f496f73ffc v7-3-1166 +81dedcd648216d6b3fc6b967368fef23d8ee1154 v7-3-1167 +ed47632fd1498d50e31ab5b30aac403de3db2496 v7-3-1168 +a83fb2bd8c8ea8865f460f7d82d8ebff8202cced v7-3-1169 +14c2e63caec65cca0d315e82f90b5e1d84430487 v7-3-1170 +fc7f985df53745d157182585b01ee5dadb722a62 v7-3-1171 +96e154e825a7441274a615e7d7fdbe68e5534ee9 v7-3-1172 +b584d361e7461c79728585f16f408984b0234fdd v7-3-1173 +52850ef928f85755f005267c1f02fe9e9f898c99 v7-3-1174 +84a8d1ba81c393dcc3a45eb3b20fb6ac5f18df7b v7-3-1175 +e48cabe984537b06cfa945926844c4af96799331 v7-3-1176 +e79a20f07daa91051435208887cc31b245555046 v7-3-1177 +c4d4f0fc12b9b8665d6859680155797be960c36f v7-3-1178 +d84833983de7708de27774e3f01e7ffc8c03eec6 v7-3-1179 +04b8912a9c85e72728a2cd6a4f8e6aee82525b31 v7-3-1180 +b7bb20390111b75616eb66558aa9517901eb0144 v7-3-1181 +fa98c2b030ed5ac8d8c8139405d20ad6c611c065 v7-3-1182 +044d23a64c177549b4b5e3183642f3a5b286d14f v7-3-1183 +9e36c6b1ebf4554a24bd879965f348b81ad5ca6a v7-3-1184 +6d935f45c489b346f06aef5b1bdd87cb98b8400b v7-3-1185 +7b8991e084f9bea2dde9ceef7a245254d656b6f9 v7-3-1186 +fefd8d33a7ea43f86d6e5a2ab30440140ada14f6 v7-3-1187 +6f7ed9b799a3db282f0fc076d8232752716a4e00 v7-3-1188 +dc78a26f6f64bb1330b9027559ce0c8fe54ba1de v7-3-1189 +25d64a4edc0b0f3f17330a7b12f3c1ca141ccfb3 v7-3-1190 +4c42efb4c0982d305ec9ee99bb3bddfaeec2cf87 v7-3-1191 +07b9c48a30e973833ee70d38633934f6fc2177d8 v7-3-1192 +8b46c37c4b843039e5a543be98978e79ff6f3d31 v7-3-1193 +91136a41f83f3716e7ccb4f2402216ea215a4acf v7-3-1194 +4837fd61be52d420c69fcde0621cd5ecc298d2b6 v7-3-1195 +56fbf60e94766a202ee71749eea19a862695c92f v7-3-1196 +2fc1f3346bfb3229f35455101a5944e6785a02af v7-3-1197 +517fa1a34c7cf1c8fb04d43976ad6c381f48cebd v7-3-1198 +be2973afe77045bd749c63c46ea02f61efa55862 v7-3-1199 +2945fe016b936c9e3a89db48692495c83f1843a1 v7-3-1200 +d8f65e6238fa2bac706f1a4868e8d38ad71ded64 v7-3-1201 +1707ddb6f5aed99b69fff8a66dc3eb8ab40d7f46 v7-3-1202 +ba328b4a990ee460cc907ec59aabee8d872b7768 v7-3-1203 +0792cc5133ce1f37ad9e1d49804100b28d0a391b v7-3-1204 +d02448031708fca0df590f46f850e33acc9f9651 v7-3-1205 +8dd2769ab75c07d88feb49d1dd489a1282854217 v7-3-1206 +6ae32a64e153d7275058d965e0c1c12d106bc7de v7-3-1207 +784e342ddcaeb260ffaab5f0dd30ec5db832842e v7-3-1208 +afb00cc8caacb8969705ffae0316bb9c01156e7f v7-3-1209 +7155782d94fb88e47e252b159dd677c31a3f14e8 v7-3-1210 +1cf02fbe6281c8efe63f866470b6c44d5835125c v7-3-1211 +81e623ff2e554695c372b7b06bd826c6298bb8b5 v7-3-1212 +ae05437a744a3b6f87d6f3304a19e5256849bb1c v7-3-1213 +bcb84438bb5bf27101b25ffb2c2267ab6ff0e946 v7-3-1214 +8bbd0ff486b3cfa711e0a7f305b4a0241bd5dd52 v7-3-1215 +b89aa3374b7fe64968421f4e20cf22cd3e95713b v7-3-1216 +613651492c1905f62cbbcbfc616d7935234badab v7-3-1217 +d10ede931224a9818a98a58bd9382f77728ced1b v7-3-1218 +eb5c3508cd7da14f8d3337ca4dfabe4122ded20c v7-3-1219 +ba7db05e1482457a36b19ed608f820275fafb9f7 v7-3-1220 +9f7b92f232d31450fd04ecec3e89b027c0f28b02 v7-3-1221 +07831d280e90a87ab9f42a9c96775ef2bc0cdedf v7-3-1222 +5cd32322154c1c5970194eb5300eec2ddb8ccc30 v7-3-1223 +0a379dea13c97df4ec2ba1487dd50c1e8ba0c912 v7-3-1224 +27b008d5b7ac5fab02c6934b87f258bc4715aed6 v7-3-1225 +b34d719b13cd9dd44485600e5cd939814b9b065f v7-3-1226 +5cee875f30961cf1adadf386b7e2764ea8aeeb64 v7-3-1227 +620d9b59d4ed9deaac614c707c71257907b1dd21 v7-3-1228 +b6e693e1f9461e5020e4cafa1c6e1de24776e11b v7-3-1229 +f5c822e5a0eba6f490d0be9f6892de929295be87 v7-3-1230 +537bbfff0c5c0bc2307a85133f59f07b00c55e41 v7-3-1231 +a594ce86b5eade96cb84415b3b027abe611c2238 v7-3-1232 +4ed713442c51625160cd0bca612d9a3417e4ba14 v7-3-1233 +f4969f8f66e974584e8e7815d0a262c5dca79638 v7-3-1234 +9ae0fe46777674504e0f372e68cfb8e0be81b2ee v7-3-1235 +39980afcf54aafdb9255424adf5808af45ab2242 v7-3-1236 +5b2c8f3b390632e1e57a3839f040146f6798a969 v7-3-1237 +048c69ebe8eecb218320030d9ea41fe4f6290848 v7-3-1238 +e130cc3d17af412971143b8420d6e7b1cbd13ff2 v7-3-1239 +bc9125136c69a4feecb4b68912fa04380f42b77f v7-3-1240 +c8747604696795a300f6ff05091813d691f9a488 v7-3-1241 +b4a2eaf28b51327b4e56b4eacf4b5d72a52560f6 v7-3-1242 +8a7d3a73adabaad5e9fe079acf6431982145c7d1 v7-3-1243 +b4a71dbdb78790ca423103ad5deb71b1df9b5b04 v7-3-1244 +43329b2b5b79ed2e1017869ee2e0b1caeaf2f0f6 v7-3-1245 +a1b41dabc682ed8f8770a12c2d3a227eb348885b v7-3-1246 +f451d60ab8ec56d02a7b5f2d5c16187566279886 v7-3-1247 +3717d569027d8ec8b62e42e33f91333ac22ce6ba v7-3-1248 +b614332f7df2f6f471bb4bd93767becd7844b90c v7-3-1249 +6aecf486bb347ac6885afe36d62ddbbf2457f898 v7-3-1250 +788f4802967766b7f3d6dce83cc027baef422f4a v7-3-1251 +875a0aeb301c3fb2be8a79f2d82e324d80caf4f3 v7-3-1252 +d6a7dea44a8667d834e463b8658cf85ea938112d v7-3-1253 +5eff37e92f03771aee77a3688d79a73e5b6107e9 v7-3-1254 +f8d307ebd74a4097f7083ea8117be0433f00c7ce v7-3-1255 +322441058afca6a8aa52d34eda9fa307608354d3 v7-3-1256 +5751284311f37399cb7a66d99fe317de4ae86ea9 v7-3-1257 +c9e2ccc53f2e119e247da7fc9111b6b9c9385d93 v7-3-1258 +7ab94cb688bebd694109442be4dd6edb6ebe3c85 v7-3-1259 +7aa4e0822dec0840770d9f41052a772a887cd213 v7-3-1260 +1cf89d38aa7628b55f1a45a5325adc83abe85dc2 v7-3-1261 +5e0b6a9282df8b9435da372cad77482f1f5b20aa v7-3-1262 +a02575cd564ade1019ea89db07c1c1d0c4b5418c v7-3-1263 +558c815e1a38d7ac2fc61c4155aabf8e81a14034 v7-3-1264 +53c1b30632df47993bc00947078dd31a226c9a97 v7-3-1265 +bbe4bd64c68c64afaa6636e8c3e9a9a6241e91cb v7-3-1266 +cabdcfe72dc398fd67bbbe02cff5e11e4dc2506e v7-3-1267 +72fcf674e545eb87bb4ea996df56e4eb7c04f6cc v7-3-1268 +350239b0e9eb063d9f84dfa4bc7a2b47d78e9afb v7-3-1269 +35b6fc57a2868b235284d914820da0815e62d54b v7-3-1270 +034abed357a1a2fabe624ed59ea49ebdec09d790 v7-3-1271 +a00cd1839ac4f3467e1e51e619b4c65ce4e0ee81 v7-3-1272 +30910831e5b0f0eb28a8eea7412f5ec9f3533ab2 v7-3-1273 +761cef8f5d1d42e315fb85765ee90857981fec06 v7-3-1274 +8875401008da99a39878478a293f833f68481ffc v7-3-1275 +d2f9f67924e77ec3d90164dd6ff2e50c5107faf0 v7-3-1276 +6a7ae677d6a1f116b685fa0f892052e20003eaad v7-3-1277 +cf52d2a8c05cd037c049abef0f58fd918146f3bb v7-3-1278 +cca600e6092839efeb3795db863916959921bb0e v7-3-1279 +1cacf785299e771ca463c493c8c870e395c09cd0 v7-3-1280 +19ed30f7cef76224ef39ceadefb64387eb986342 v7-3-1281 +22ac43fb6d30ad1097d0c7e8937b28efcb162137 v7-3-1282 +d6ceddc0be86e46a5a9a696e36c54b9d133f2203 v7-3-1283 +7b20dc8041645778eeb2f7823a4c1c647f735d24 v7-3-1284 +14e7a115d54d2c095f31ccda2d04fbcf775dacde v7-3-1285 +6ddc1785c4ff3779c18f5c313da591a052388b2d v7-3-1286 +34c629c3b4bab5fc755e83869d929f8cb322bfcd v7-3-1287 +8b7baf39a345aecf00a6116b5da211b51c6e3457 v7-3-1288 +1ed945570d47e9a60694ed1ef3a5b208243657e9 v7-3-1289 +08d4c11cdaed2c5d95e2c0be3b0df91d01f52b84 v7-3-1290 +a6ddcab6a240d22f965c4961bb93ddfea6a74c73 v7-3-1291 +cad8d29b0bc0356a49a455296e5e79eb6f38139d v7-3-1292 +18b43970fb7a796ab740e65baa4ff2ba46f929a8 v7-3-1293 +11d0c6df1d7bdc399b34a8cc70f354d6ee908661 v7-3-1294 +93cccad6a26b439728bf3c155ed5532001a2f2ab v7-3-1295 +c3a82208e143e4cd4a3b9d9b1716eb9d876bf462 v7-3-1296 +cb0a5c9c0f9bcc6c5a18ed97762206309d3e334c v7-3-1297 +dafd77a15d44cced4e405a9fcfe67fc48a02004a v7-3-1298 +f063be86b6323f396e6d3a7be73e860e636eb51d v7-3-1299 +56bc3698f8c6ac275a9a05b64ae056de619d226b v7-3-1300 +6cabac58f26fe9d8b608542d9fdbfed3fc437c90 v7-3-1301 +5569d11ef585033ef40e4402cd6a52453e4d13d9 v7-3-1302 +6e611380b4cf586f210de94d92a4f158b6900a5f v7-3-1303 +46d6318d5b965b77278ea252b25209468214dd2d v7-3-1304 +6f24376028af97c93b426cdbd46379795be7cdfd v7-3-1305 +71859e71b1f902c28b8842bc7092dd155b8c7f88 v7-3-1306 +3dafc80e781b8d5ed12d6107a2c804067aeafd90 v7-3-1307 +71e066e10a4789eeb9553aa08f9ca8e7eec96532 v7-3-1308 +a686295448918b7066bc52e3fd9748e6702c2219 v7-3-1309 +b49784c49d537fabe083cc3f8cc460629bb6957f v7-3-1310 +28e6f5f889683fe161b7bc260bd02b742157fc5b v7-3-1311 +80bab8b1a30db72b7eda880b0442ab0b0f4a1611 v7-3-1312 +afbc9dd67cea81e73d64f7ecce47dfcd35d48865 v7-3-1313 +29e57603bf6f3a2e3c178a63d332ed4d2eccfa82 v7-3-1314 +6ec6b7ff2d43842d04a8d653356d0ff3850707c0 v7-4a +0ddba00c204d855c0b3da30cb338d9bdb0ded847 v7-4a-001 +d0288faf3086e6ccd5046edc91f1baf21bf1babf v7-4a-002 +b5abda4e7c4b8b04cb823c160c47097448823ba8 v7-4a-003 +f72d49c406c48293e30d774303493e4c8d120bfb v7-4a-004 +7a6ce0c426fec6051523bb00e050b826fa664beb v7-4a-005 +6b6e1786c7dfb2d1190373dfddc3cd33e5346e18 v7-4a-006 +c624928fbc49408ab932e5c79f5f79e53327d700 v7-4a-007 +b3bd43ef012d975cafb7b2a4c41fb78486ee4cc0 v7-4a-008 +467efeee8f9e2060891bc718e6aeffaf79eab43b v7-4a-009 +a4e08386a6aa29c5e58302f1650fa2ad3f03b76b v7-4a-010 +ce587b26b8d6bec140af41712bb99c4c73c3bf99 v7-4a-011 +fca6ba0d2d66d38da8ae023e73944a69662c0d66 v7-4a-012 +42d592dbbec3706429e3f3f75c9c394db6b9c1bd v7-4a-013 +08eb573821869727e5951e6586207dfbe5fd982c v7-4a-014 +7a1b782ec64ac55052755ed72ff023093b246d96 v7-4a-015 +4104bed69ea561a105c3db590aa6c75be2a24836 v7-4a-016 +4cbff53717d4920cb64d417c7a603b45519138f1 v7-4a-017 +c6dd0c545e5ca25e0b45fc1dbd7d1cb20642830e v7-4a-018 +bea5eb942011c09a6a8805e6b21079375462a710 v7-4a-019 +fa76be660fa914de79e3856caea8261cc7ab6c5b v7-4a-020 +fc6f4a653265f9e6b3dfa82faf067329dd5044a2 v7-4a-021 +c28202427d71b4460122754884bb548f084c3d7a v7-4a-022 +45b2278e6f461689d068f138428e9f3fdb01615c v7-4a-023 +ba9a11fe25637103e1a77fefbbaed4ac2ff182f9 v7-4a-024 +1b89e3f916c59fbdfdbd31e4d8af8b22274275b2 v7-4a-025 +b3ff17862b4c9d06411bd3c854cfceb77d5b97b6 v7-4a-026 +8edba3805d787f50b51d7fd59899c5361c09a348 v7-4a-027 +7aca84c0cd37ab4eceab8897e0297e2e318b8fff v7-4a-028 +2b58913e19a5a40d169f2aa1ef9530a78c375d2e v7-4a-029 +bc4fb031746594e4e84b36e64389e78454617a86 v7-4a-030 +839ebe7c1b2fb8150714fc48ec597d2e1f1c7557 v7-4a-031 +2741b46e96bfe6c06a5e9704bcad649655f7b50f v7-4a-032 +fa024ce48542356206bf86bdc9286ecf0510ad49 v7-4a-033 +947edb6335d1e196c27e2e7e0e0a5ed8f6b78498 v7-4a-034 +4ceacc1b00548c0b21c0dc2628608515899df721 v7-4a-035 +9982ec574beb1866536f0e8a0ace3073faa3bb97 v7-4a-036 +91d478da863e0779c482c790cc96b14188f3ecaf v7-4a-037 +8f983df0299fb4f1c7359eb3b844ee93e8f7e8fb v7-4a-038 +a08fa2919f2b39be0416109d87a42fbb5880ac76 v7-4a-039 +1261caf9bc5193d304140647c08ca5b52120ce52 v7-4a-040 +74d2f3188cd0aaa0d3d7cd3df001d88b04f77f5c v7-4a-041 +1899acc5aebd40f625b9fed7bc4c1b5f67e5bc3f v7-4a-042 +6fa64615c8d38ecf464702b102538c09fe250813 v7-4a-043 +647596ab1ae2f4b36bfc20293adf4b3a43372818 v7-4a-044 +da95a7f1d5a8413ae719188cec5b706b99db4a91 v7-4a-045 +f0361e297d9ceb533a17530647b4482c3990df3c v7-4a-046 +8c6615a30951fb9f2d2b218e55626f5dfa3fa24e v7-4a-047 +09c88160095d98a0b1403e9230c76e8adbb75d59 v7-4b-000 +47a09a572ea670d0498983eaa6ded5ab4f12fd15 v7-4b-001 +2e63b6c763f7af2ef11f751d3047847652dddfe0 v7-4b-002 +ea876fe914833a69018c54d6927dbbdb42ce6ecc v7-4b-003 +3c6e2b89875f39c8417021aa369695ec1ba762df v7-4b-004 +e63e4b4be9236c2d811b5ec7bdd79e387ec8bac9 v7-4b-005 +6b7ab6a4f31a54bceb4e7d6f0f9404b5a37bdad3 v7-4b-006 +b882d4b14e00af23444fd630aae3ac32214dd097 v7-4b-007 +3059c799fcd997ea60a63ed10a2a09d73e3ed3cf v7-4b-008 +cd971e951b0626c253059d8e25859032560920a6 v7-4b-009 +585b623a1aa3baea87a1584e6064612b2183d312 v7-4b-010 +7d1f89b2710305a00e6adac35a1fa6edd47982ba v7-4b-011 +25f67b62afd8c58b6c661961cc762f00ee89e562 v7-4b-012 +1ed6fd19c36051da73f9987777002b331853f5ea v7-4b-013 +3ddec3d25bd178d4f90114bce9ce889f3889e6d2 v7-4b-014 +d96f16667cc48d89c380fae29d86286b20040d5b v7-4b-015 +ba37e955913e85700677b89a720c6e5fc8d23cc3 v7-4b-016 +8c42772f05438e9f06200bca731cf301097be8ea v7-4b-017 +7ed1ec814dafe8109a2f34302174267d31bbc924 v7-4b-018 +74a211a0d3a3135dd67329cd981f5100f5e4d064 v7-4b-019 +46cf49cc9289920704999a971f397eee1efdb3fc v7-4b-020 +059c8a4b103f6971276435127c7ad970a81b0b2c v7-4b-021 +d5d6b78cff090e87d52924179e44131b5ba7436d v7-4b-022 +359743c1f59af353454dd80a26d9f8c20ae6ee8e v7-4 +3e9107b86b68d83bfa94e43afffbf17623afe55e v7-4-001 +e29f11399ccec9215cc8cfab1f9307dea0567d70 v7-4-002 +560a6a2329503d483db019a88cacc3307e5c30b7 v7-4-003 +f6247eaf4e1d556f782321890d725663f74babe6 v7-4-004 +3640cf4c0d4b6e5687bb7a31678fab70c88ed94b v7-4-005 +2374a05efe20287d55bd824689a41becc7662505 v7-4-006 +4fe1dfc7014e57b4beb5a01c9e94357265d19a92 v7-4-007 +b04bdb2c5fce70a278d26c477debb65a388da0ca v7-4-008 +8b5d80861c5e0403ea9f54ddddce2752a463c8a5 v7-4-009 +bb358cc41d920983629ace62bcf26decbf06cab4 v7-4-010 +54e66395831c1a58b4a9804e7884e505842157e8 v7-4-011 +8e28c23e482c5b3c8296d8022271822886793456 v7-4-012 +07737d3aa81725672796cbc9a010d63414ab6fea v7-4-013 +9801d06e7b4ccdcd02cf40bee34eaaada0ca0409 v7-4-014 +a7478f9f2551e95bff138cd658f7a86ced804ab1 v7-4-015 +8d5cd0ec3e7183a289f9bac41d3981307cdc1fac v7-4-016 +c47c8cd5fe5c014c141d9fb3fa8935b268436a4e v7-4-017 +460d5be9395ef3e05f4b1397ea98a5b54d825fc5 v7-4-018 +d5eb32dc231cd870c562e7b0be96fa994b505d9f v7-4-019 +c1ae5baa41f47bbf96be81e0158707a88af48b34 v7-4-020 +c514693882b9f1c7be2e76a0307926df799da3ea v7-4-021 +965044860b7f4884657fcaa042853238c7b13e69 v7-4-022 +09361f13580b075b6e87707c47165e8d45ee98a5 v7-4-023 +00d61a47df66cad21b80c6a683164e8d19180045 v7-4-024 +9085d32d7424963013650805452ede5dad22211c v7-4-025 +6bbb2ae990c92f6858b86c047e16dd12183d4273 v7-4-026 +73cc7272de5e0173b9578f715c4794a8b3803bce v7-4-027 +923738744a60e5e0bd2d9990758a2169106807ca v7-4-028 +2d3fbc68b3a84ad2bf4d58c77244043328e3fb81 v7-4-029 +0978e99043d2a9faedb1a3bad75b59121c270bde v7-4-030 +b21b5dcdca2197fc86b9bde77bd6777f0e2d5175 v7-4-031 +71e92a1cb37db719d6406858a50ca3bdfc9881fb v7-4-032 +91f6a28e010d49ae73c13c85dbb8b14c9e5edb36 v7-4-033 +22dfcd1494e4f7ea8ddc96e8dd895482e77e3b5a v7-4-034 +5481f188dcbb7143596f2d470c7d674bf36efe64 v7-4-035 +90e2f0729a0df249931a2dbe5f4310ba6c91cab4 v7-4-036 +c3d379c2a115b957d82eaa5f2215b688f36a22da v7-4-037 +6daa78b6b99a2ec07d20336db47c9f8165098062 v7-4-038 +4dfba3df303c51fe31efd1255338e9fcbedc5401 v7-4-039 +8336fd924e057d8c797043430325379d9a3ae37b v7-4-040 +408f2a1a953feef25a2c5c96352c82674655e797 v7-4-041 +70915ede509a737ac78c421f43c4447c9682ba41 v7-4-042 +6d11572e2c8b1117b90adf588ff1467b185c1b57 v7-4-043 +c0e3990aed3f179ef006e6de1458e9818c9ab896 v7-4-044 +8ced827b2e8ba49f9ae0da2033670fee83e7b55b v7-4-045 +68056d414f09fccb39219d7fde77fa06769ffa3b v7-4-046 +c21b2f52f1dd003d860e3b574602ed3fdc2b4f1c v7-4-047 +31c9acfeda8f1b84d51a480c1efbb56f384e76b1 v7-4-048 +15c1b8a20da6d650ee3ed0e73c2e3832093b60dd v7-4-049 +eb33cadafcabfc9cb3fc0741e169e84cafec11f8 v7-4-050 +e7a2f217a385e6aebfddc4d29182924ac017d262 v7-4-051 +b9c1c1f4cda9b82a2e703feec441d865b4722d56 v7-4-052 +733193bf24c3a80883c60964922c7cdc83662eb2 v7-4-053 +7b760cda2bbf086ba975fd5a4bdc6190a0f08caf v7-4-054 +38a755adc58063894c6695d702cc37f4910bad14 v7-4-055 +8d83c219fc7b2ec8685ab9e0dd7d3067b7f9d1e9 v7-4-056 +3109053ce4e3d17ca6ecab06c0ea0f38581d2f41 v7-4-057 +fa8447ec582378ca8d2c0245bd4ac195876abf2b v7-4-058 +2a72805a3038285c35f47dc0327a57cdabbdf09d v7-4-059 +46ca8fcee5257cc036ac928d91b2a490cf47a956 v7-4-060 +739074bdceb85d16b9e70791d91a59c2b846ed8d v7-4-061 +d59a0b8e5584c6e093990abb1b1e640aff7620bd v7-4-062 +9cedb4dfd4c830783ac65128dbbb118da2e3c638 v7-4-063 +d062239654688774d38e60ac42cec8ae1fd0f14b v7-4-064 +7f341db39d5bee0a9259a14a65e19bc9efa65417 v7-4-065 +38b948f534e4646bf879cb4d30151474e093d139 v7-4-066 +86bf09a1b6d0275131caf7ffc51598608e7242de v7-4-067 +efa40be729c2c94c1d8d0bf95000c4a7d2976dbc v7-4-068 +878ed73c70706d68bc7175343e4deb24b11963c2 v7-4-069 +e6f3f66028d448bb49ee2336cee60b13ced7cea9 v7-4-070 +faf7e86203b5d5c98bdd30dd92524e5062b2412a v7-4-071 +d563839a9be0be6e85d93e366b4f7ffe705d8e3b v7-4-072 +d0595545e98a3b7b6fe1a96ab0106d8afd63c31e v7-4-073 +9818311eeca0d76641879e95143f314e7295cc26 v7-4-074 +829aa8c8449d85d0de3a29ac8ce647ec706efd02 v7-4-075 +8f0c264db1e76a65499f0846d961907d7ecade9e v7-4-076 +53bc55e58fefee7a83a7a56fc7f05e0a4d36dd47 v7-4-077 +5c3064feddd7c9bfef18d8067172335f101122c5 v7-4-078 +6ae816249627b34aee618b49c4169b7ca1f54ff3 v7-4-079 +c5166fa1046462d73891f0b395d6619e7ce96c82 v7-4-080 +42927712b3d997bdba9d8ff5a1199fe4652c5899 v7-4-081 +9c777e2c702487bd0b5c48a22edc17c98b87e070 v7-4-082 +6367a766027d3b60caff43c35d8d3597ad90f6c6 v7-4-083 +a56f60cf683455bea96daf077458158041e4d6ba v7-4-084 +70c3289803b3129f34ffc327b113dcf152222a56 v7-4-085 +60a5b7b82016da631dd7acc6121913d02c5677f8 v7-4-086 +9334c994be7bb5e16a1f9c6b67e1c4342a6a386c v7-4-087 +853a76c7fdedefbc1dfdc2a4896d37a3806500e2 v7-4-088 +6707c44cec61d76026d5dcdd6573fb41cb89d0bd v7-4-089 +31217cc48e7d8c9aca703688d3d04d8edbc85bba v7-4-090 +9502d1caf90bf56f0125c99b7d17ba70944ebd85 v7-4-091 +1b4cb2c6b285265da4ffbe242af35a73e1b118e6 v7-4-092 +33f3e277ceab43179c74093f68196bd370199dbc v7-4-093 +68b5f8abca93dd035ba180aa673a5bbf035b89db v7-4-094 +acbe5414cb7f302f548bc1cbdc1ddb029dbf9094 v7-4-095 +645358801356c7b1c53a1d3b1543781a669a7733 v7-4-096 +93c8296281dd64e513d52db9f745965926df5cab v7-4-097 +79a8bac614c0c565617b404764f28675687ad442 v7-4-098 +8451f643a13eaf22e35a45e6bdd47c8d5b24c222 v7-4-099 +5ad60cd88339c6217fbea8cf4f92dae04ac1c71d v7-4-100 +ec5d11403c1952b2ed192f28afb6261d0867bb20 v7-4-101 +9417f4de27a2a6acfa6b1660ac6ef2b5692e4554 v7-4-102 +4db151014f93b7512919e452e6b3f4184758db7b v7-4-103 +dd7d1a86b311c11e9c03b7ca95c7b62206bbc7ab v7-4-104 +eed95874f30e9d9dad577f2361f2dfed93c5db4d v7-4-105 +de9a01851ebd1ce1d225b40c182b6f1e105863a7 v7-4-106 +064e2a080e2e158177acc017c318bc953fb7535b v7-4-107 +fa31c5b82424373885d2fa55b4f8531ac21baacd v7-4-108 +1cdf517067743dc33ebb9c7af8844abd9d9c7863 v7-4-109 +6e54d1b3408ca745341b0b219c588c265fa52494 v7-4-110 +3fbda56bb2008e2459951f3ad0258ff0500ba07c v7-4-111 +af8217e4ed7e28b797c628f067ebfd4433c07326 v7-4-112 +0e21e2a38ec6df5c4fe37d639906f56f9f445b96 v7-4-113 +6db758f82227989426560c19fdd234b154b54419 v7-4-114 +e35c69ad482370b2685bf1360a63fb27ce8b3819 v7-4-115 +40aff213baff00d43ea8c1b6a9734ccad63a3921 v7-4-116 +805ad8488dc88a575b841589f36c278aaead4e52 v7-4-117 +62c720661f81c17348636956c1158639d59e1e9f v7-4-118 +2f99966971b0556bc302ec809712f5ba3f030028 v7-4-119 +ca0e43bbf8f9e409130d5d1ce29621edbcdff92a v7-4-120 +4bf53c1ef37a5023e06f3c6b4f1c24857b4f52a6 v7-4-121 +270c62fe685ae943de64e1a4ab295dae6f4ccabe v7-4-122 +32e50f85d2c7a56c600a2c36107e56fa9f2952cb v7-4-123 +9faba192ea90a32ee137aa42f5027b098931ddb2 v7-4-124 +45ef9d2096e82d6a56a58606b6811620a61cb1ba v7-4-125 +b14554844756422a39c72e62b8c2391c2d5a2e17 v7-4-126 +6f5a7d3943007afc6bc03c445380776e18787f0c v7-4-127 +4b92012f6b18f56664c268200fb54f1316495dc5 v7-4-128 +1e28c0fad344549665c60c62374e6f511e5aec76 v7-4-129 +cf722c09236098ae585840d62eca68dbf8065247 v7-4-130 +4b23119cb58473ab70cf1a1204d4d3fad83881ec v7-4-131 +1b09d6792520cbe1c94c20f6c833ad57316e75bb v7-4-132 +6a28a9cf51537b81da7e9ec3f70fea55e393b345 v7-4-133 +0defb460a0ebbc954b0f22267cb06e9d210be43a v7-4-134 +1aeb7f4d6527369cf5f9101813ce8f10caf7a869 v7-4-135 +3881cd916014605875de128226b83a24d18afe46 v7-4-136 +6fdb1d6646b6b256623edb05f9dd770eeacaeb05 v7-4-137 +6eb60041548ce42748cd8d7d49bdbf9dd164c967 v7-4-138 +c8c80c9d2e2237fedeadfb1c6856c53c7a5e90d2 v7-4-139 +505cf1943dc238c2383dcbc37a93fbb136e1f08b v7-4-140 +2ca470c6096e3ec7cbbedeb1d0281056b088812b v7-4-141 +735b70faac4a54ca9d8ebc2303ba28d5d18017e2 v7-4-142 +d11f223f4c753889fa8f974f295c2a0a451c653c v7-4-143 +bcf25cc08236c2adc27a4d7d556e11e8ea6ddce2 v7-4-144 +1098b7b6e147cdd324ac665340540922c2cdceb3 v7-4-145 +ec93f50f1d93c4c279606117a9f3eb37301b051a v7-4-146 +d289f2167d702c87493d1934db863df29676e261 v7-4-147 +8507bf8874d816a79411bc74df71fa58b557b71d v7-4-148 +b43363a7b4c71a7a4e20dc21f4906f4595785983 v7-4-149 +15960ebc2ee8539a1f15f660d43df1a502c34829 v7-4-150 +ec02e1474bc2bbfd73349e7fedf62ae45f941ad9 v7-4-151 +2ace11abcfb59f6e88c3a40aa1d849d335cfd993 v7-4-152 +30e300c0b2c1c069d953afb258dba39c50772463 v7-4-153 +71837ace77dfdd6c01e0a334314a7c6c713a095c v7-4-154 +fa53233519c693591ce60f9270cf259c07d6cc26 v7-4-155 +05a5cb0d6b37eb7806eb902a72d8b00dde48bc1c v7-4-156 +be61f315eafe5cbadbd00bf7275e004fe09779db v7-4-157 +d59544f3022ba0a35af174d1085a321de6d3b9b4 v7-4-158 +a95a151402be5155cd89f8758e2e09ca95473ad1 v7-4-159 +f29febf858be9c7df896cc86ea89c3da8823b4fb v7-4-160 +91f3908748c29b0e8e759ac4cdafc95e536eab9a v7-4-161 +477665b4105fa80e3655981790e55fc9babfeed5 v7-4-162 +7db84aadd37aaf9d59f8f15dd6783a4e28dcb63c v7-4-163 +a01819fb6e2b5c270dac492ab2fe923ea9301651 v7-4-164 +c82339d8fdae0d43d51cde5216c979a5c9415bc4 v7-4-165 +5d03c374712128077ac4c342aad02120ed98df70 v7-4-166 +22387c8eec43ea8b1b704cad49c8f7187e2fd579 v7-4-167 +e61a2b709f693eea9108d475b9bab5ed10ac675d v7-4-168 +4e3a9dd25d428e7c08ed401afc244972e27e08e6 v7-4-169 +8122eab8fcdbbdaac62dfbf7c6458cb3e6f46b04 v7-4-170 +beb037a6c2708f539d50840637f70eed0811d93c v7-4-171 +391e10afccf6879dcfab8b28cb1587a13eb835c0 v7-4-172 +233ad7b960d0fbeb224b383918113b25c74ebe35 v7-4-173 +f2c8d86c460d75fec17a0527a2fe93ac7220693e v7-4-174 +6b69d8dde19e32909f4ee3a6337e6a2ecfbb6f72 v7-4-175 +ae228baaec2c5eda4cd948382c2bab498d1a34cc v7-4-176 +df3b0b70d8c1d29817597f45d19bb72755f86bd1 v7-4-177 +647e6bb15aa3f864eaf447fe77e3e3ae7e37b134 v7-4-178 +d1c8c1d6403485ff0135f0cf5c1ef07272a07173 v7-4-179 +b1b8b097539a001043d1f0aac4663d6ee358dee8 v7-4-180 +cb5683bcde03796baa7e845fd9a2fcaec3383538 v7-4-181 +708a6a5905217736a2a231e36ced82f9535c4954 v7-4-182 +1e2bfe4f3e903110f27cb6231f6642e721808837 v7-4-183 +9ac2fc63501d3eff92446c03b2822b30b169db5a v7-4-184 +b06e58f8dd3037f7f17145968d08432423ac8665 v7-4-185 +4d12112c5efae071aecbeed1a7196f18950457b3 v7-4-186 +a1c07956171a133583df42627d3498f935e59988 v7-4-187 +136f05449f29388e9023f7934d6344bf4ca61d0f v7-4-188 +0a9990bbd94a7dbdf20ca3f897cdf364c356d228 v7-4-189 +6050f52d7cd8d6f79ed5ee8ef3efff332aca4932 v7-4-190 +40f18a1c1592c8b4047f6f2a413557f48a99c55f v7-4-191 +04c4ef8c0a1b757494500e46400552b135135e94 v7-4-192 +a8650e2a0b5a5936f7d503429180df47df2aa775 v7-4-193 +767103b5bcb05171fc1be0d6f480e0aa39aff731 v7-4-194 +c2e88a40d530b7999cd29218555515bcd282d661 v7-4-195 +1ed6acdbfef55e6e80aea55c8bc52d05f8458bbd v7-4-196 +47a673b20e493db91844999f74aa3724808ac624 v7-4-197 +705f398ce6f58016fae80c945a570721fc989117 v7-4-198 +54b1a90c937380195fad6a52408aa3b4eed6d8d1 v7-4-199 +0559091e6f09b5b96619513639ac14578a019612 v7-4-200 +06e5f65c34d8136c3a9d2219429b7eca35cb3a21 v7-4-201 +22d7af9ff3e5e2b93fdbe8603df2f15155a5976b v7-4-202 +fb24b025c7cf07db79a559a3091db42e02c1af86 v7-4-203 +f5120cbf16b9a9c6e0fbb599a6524e05ecf11393 v7-4-204 +0ace3a24c2a0153f0aaf9b619d3958e7f486705f v7-4-205 +7e826028d3999b6125b4741d45b22a2d0a520679 v7-4-206 +2aa909427e44cd3aac7def024b66e41d0c9d0e0d v7-4-207 +9b5541e276aa56fd72c3bbba85a17ef023c54ba8 v7-4-208 +bb402c49379de97fcd475fbbbbdc5ed41e5dff07 v7-4-209 +420fd9cb86d51a92c4307a746557e81914c6d6c4 v7-4-210 +e90bef2240c8d187da6e8d8fa5007ec5afc12284 v7-4-211 +50dbef5e774af6a998d1798569566429c38378b1 v7-4-212 +e25a04c1c515e6eb32197291472f89bcadfabf89 v7-4-213 +fe02fdfbdec077d0dc501bca0c65c51e56e1bd11 v7-4-214 +f069a3a0f84451aa498c6c22d8f922d1e695e96d v7-4-215 +bf1775553d3bf561e289bbf367d014915d09eaad v7-4-216 +2f225a17c26b26eab87cfb89142fc0f95726ee92 v7-4-217 +ddc3f32a4b2191f829206322d46f0e9c7e365e22 v7-4-218 +37af1e6e91bb1e8ceb89d3ba1c49a04ffd889880 v7-4-219 +1e272e318daaba51ec932be83a2481987a133429 v7-4-220 +a548aae15b3a27a56d814900049785c29c01a37a v7-4-221 +9123b4d3ef05c7434b6f6cd011b63f63a9a4a539 v7-4-222 +4b78922d557c324de6b6a75515fb658235fa782c v7-4-223 +092b8f61021b91024b127de3983d1afb74b64996 v7-4-224 +eeb150c07647b3691d2696a3a4cdb96f6db5a63e v7-4-225 +b650f2db8f9604124c0ddfb14af0c04bd4ae0580 v7-4-226 +b0a9df477096e4abe938f998476e84e77db42e0b v7-4-227 +3ee5808a293c7436e34a696a09ed29ce38750d9a v7-4-228 +839cca5ec18d560e3714065e54ed38b6e812aaf7 v7-4-229 +57ecd7a8c0f052296b41b916eb1ae7f2a9a48b27 v7-4-230 +0a295a3c9e473512ad3b006a0fb752ad43d19094 v7-4-231 +845608965bd9d0b2755997a7be812746885ff105 v7-4-232 +22a1d5762ba3a75984e89dcc47a65498f63a6c2c v7-4-233 +d2286df8719d6e99c743e3bf6ac14d1f9debc84d v7-4-234 +5ab2946f7ce560985830fbc3c453bb0f7a01f385 v7-4-235 +a44087db72386d080e9da870d751daf498004be8 v7-4-236 +71b165a378ad580818f6d497ecf0f8ad054a9683 v7-4-237 +410ef4f1a3d2f4a6ecad9aaa87dae645d1578a19 v7-4-238 +98bfec9ea7608f312129475d4ca0ae6d1c6c232e v7-4-239 +8d1ba0a23588932d22ad37cbd87ae3bbd4bfeff8 v7-4-240 +a63d0cd691dc925283815d17d62f4e948d723a59 v7-4-241 +f084024c0ddbba46aabfafa2996c3f7d13080ab6 v7-4-242 +9f8fa56f1906f4f634cd602a7a2b4f8631faf526 v7-4-243 +da17c7de616e3829e4f59923ffa138a067928d9e v7-4-244 +80421d934ebde183ce545ab8d9eb3a4c2065c169 v7-4-245 +2cbac5608217cdce725a0f04d397d4466a3322fe v7-4-246 +76863b4b48a3684905527dcc688e5a8c4c5e23d9 v7-4-247 +e5f1f2ea0b4a4834791924880f78272ef52eb087 v7-4-248 +0b9a66ea49f435536745be0e0a6154be7b607249 v7-4-249 +a8f3f45896288bd7e0a27e0c28c3cc3457ccc507 v7-4-250 +29eb4c2a33ac701bfcd4d2e2bed7864eba876e0e v7-4-251 +a43a8262e1ceffc393625c53a1ffed9e6bcaba62 v7-4-252 +4901a36479f200b2e6700ad91c26911d92deb886 v7-4-253 +251acc686ca41e4bccb037ef44cd7b486774d580 v7-4-254 +5595506b985a198abae41ab0150ee50b8bf1686c v7-4-255 +afb542ea210cb9fc5fa8c5359bb4814370024b80 v7-4-256 +17903ded5e9a9d49ca73b324657b944f2954d4fd v7-4-257 +e8ffd1e6c8dc62c604d34e879791404bd15cab33 v7-4-258 +e4cd5bb75029d2c1208f3e31ebde4e03b16e8123 v7-4-259 +6bc874e4789a0f912b4fd6b23afecf19d80b1605 v7-4-260 +43c6cd07c8defd8505acbe479c6970764c08e6f9 v7-4-261 +0ea551fa607dc443b97c2fba97dc0c9cb0bcf303 v7-4-262 +af1bb39774f41c28eabd24d80cffc775695bc124 v7-4-263 +00acac0af680c2d8c82db5258474b121a5908926 v7-4-264 +8ec9d2196bee0c5108f2d2c196a660a7f4e5f29f v7-4-265 +8f84e906d454a95d3167678a745dde9de442b604 v7-4-266 +75f222d67cea335efbe0274de6340dba174c1e7e v7-4-267 +1a5ed2626b26a982e307a206572121a557adf709 v7-4-268 +81c26975e8f9dc7435353581346542409403f296 v7-4-269 +c519c446c5488bfd48c93a03efae4ae3e0c1f162 v7-4-270 +88b0571de4327ba5127a483493bd7d46e6a9850e v7-4-271 +00228400629e28384f7f52556c3c119ba0d0a44d v7-4-272 +747afb6a6de437131d9674e6b2bcc73d74863a89 v7-4-273 +1ee3fc5b40ae94c2a7fc5a62bca38d4f730f9bb2 v7-4-274 +8a3117a4887c1e12a1165c9719491f96753787d6 v7-4-275 +a6b59ee633a355095e6473ec5e2a7d9088bfb853 v7-4-276 +373204662d82e894b27ee76bc3319bc62c91f6ae v7-4-277 +b4ce0e1fb5a67d7d6b0bca8eaa3edc2e94a085d8 v7-4-278 +8e9db1f27a0063df023cc05a760fce73255dad24 v7-4-279 +daf7e98675cf395e1ef96f8040567affb2782a11 v7-4-280 +24c90f1fec859b54cf2b854b98c4c9e614c46061 v7-4-281 +6d0a1132dd71c7f55f7ed53fe99e97c79bfd05a4 v7-4-282 +aa99d04fa7e288a8580e3a5d4a9d6433a1572b48 v7-4-283 +3c35ca9666e88a8024af6dab585b8e79ab295f83 v7-4-284 +5cb1828fd0056de3c166e71fbafc67a74c57d7b1 v7-4-285 +be19015ef43cc17825929206790696c2e716035d v7-4-286 +66fe4908b649ba18426af6f69e8ccb01b487dcbd v7-4-287 +7965cb6a435ae1ea331c7c2f8740d3d4c3625f3b v7-4-288 +99374096a76b96d1128f5e6aa1fa92b4ba70fee9 v7-4-289 +b871734bf54ea185dbd2cc759d86dbfbe21cde26 v7-4-290 +b5972833add9de714f4651e26fd9ea63ec4a880c v7-4-291 +60cdaa05a6ad31cef55eb6b3dc1f57ecac6fcf79 v7-4-292 +10fc95f48546f438648b8357062e93c9c2c0a377 v7-4-293 +fdea5ea9afd139ea59dee6bdb3f1675b8b882bdf v7-4-294 +662ae48e7e246a63d38c9f3165b15b62252edaee v7-4-295 +53b87d790574b6d19034fb3390987c22fb928c58 v7-4-296 +81f5a056b2a582c8109da10cc538dc16a326a34d v7-4-297 +156f891d520e93eab5d3ce02784660fb13a3b0d3 v7-4-298 +daebf8ce66089c0c179fb436ceba359ef8d593d5 v7-4-299 +1157079ca5f167bcf8746dfc52ea5a85e6c87a30 v7-4-300 +8cb42aa3c4957a543e5dffe307475dbab969612f v7-4-301 +df141c80ea3a1ffcbf82d05c1314675231fcfa75 v7-4-302 +463ef551e9f62b63ac3f85f1f297b668b14bcd09 v7-4-303 +fed2e0967f8133ba9a44b0701f151c8d88c4896a v7-4-304 +63e7cc62402dffb180b40c04c63ceeb5f53957d7 v7-4-305 +05e1d8afcc5e375bf708ccc9810e2fd1a5a8a3cf v7-4-306 +06c10522d321d98874546b2a4d3b0ae145386f2e v7-4-307 +e3d2b8d83bb30c428a051f50791e454fcbc080af v7-4-308 +88a6e9f33822d33b6c32db578750c6c178c63f50 v7-4-309 +ccac0aa34eeaf46dad4b831461a532fc3fe71096 v7-4-310 +f6f7543043246107075f0d3739c471d51b7226da v7-4-311 +66eead134d6800fd4cf2d5d4b135d300c933f09a v7-4-312 +332a5c2b2956d9b18d85268a724d01deea27ec83 v7-4-313 +4d7af1962d6ce61df65fdc5c86544a61951f9517 v7-4-314 +646616b6ff4defcc7bef0b198b540f6d965a8126 v7-4-315 +0fc665889e8f0af532cb4e3be2f0ff0421bf2fbc v7-4-316 +8ffcb546d782121dfc9d88c7edc6f62421efce89 v7-4-317 +5c47dacf397c1c65d2dfc237b3ff395c66ec3d4d v7-4-318 +a076237d1c3849535681e82946a9041ed5525d7f v7-4-319 +f7bc601823e5c81e2ca412506a42eff9fd790ace v7-4-320 +c052937aae8ca5082f308b8ff0712c7eccdd30c8 v7-4-321 +fd96c55d683d76ece4ba01490d9796c13c988cdc v7-4-322 +238f5027830cad22e17a970483af9b160869cdf3 v7-4-323 +c476e0ac8b406693c3877baffa0e97ff25e59b06 v7-4-324 +1f288d2475488c3f44c7248e99019e2612580716 v7-4-325 +1dbcb23ae7a8b68ddbc28b4feb794c4c1db12395 v7-4-326 +99d8f2d72dcd4b850de81998cc9b1120c8165762 v7-4-327 +01d9ffdd6e6ffb39faf946e13ec63bd7dc31e162 v7-4-328 +018df65085f8990c1407442f8c783d4cee72a479 v7-4-329 +f9fa2e506b9f07549cd91074835c5c553db7b3a7 v7-4-330 +6d984caa0409fd284722c44cb09a0a2b5360bd4f v7-4-331 +8fed02d53b45848b0fff60de13d06858963cfb17 v7-4-332 +8ae50e3ef8bf733c0869c01b5132d02feffc0955 v7-4-333 +03d260a8ea0c0c67f424c387dbe2af5754e5e589 v7-4-334 +8ad2ecd116021ad5c945426e8bb80d741392b780 v7-4-335 +a42ba1e5099290a86cac1a9ac490c49e82e4c2cf v7-4-336 +0206ac84ff5fdce6d893c470e0909d2aed547a24 v7-4-337 +ef83b423ebf7de11c1063c795dd2186a9b59b90f v7-4-338 +fd7110d0c3bf4fea3cfa3d16da6c2a945d327c27 v7-4-339 +03f95f5e311b84653df70fb3c08a9d92cf21b8f0 v7-4-340 +adc4a84f72eb44dae657af713922a6e2c1f64ae3 v7-4-341 +8dcc6f142460b2d5eee119a174d441d46d95cd99 v7-4-342 +539ce56d8f35fe2deb5c4f57335e1adf97ae4e74 v7-4-343 +ce284c205558d103326a4c3f22f181774690b3eb v7-4-344 +ea2c5dfee1b04d216ebf992c5f46ecbdfee2854a v7-4-345 +3248c6e40aee01a7254d111dd846c6ec7889a804 v7-4-346 +a162d41f10e1c3c8673d86d8b0c58fdaf1bddeaf v7-4-347 +0b7586868f6da0372af7510650240e22dc1e6e64 v7-4-348 +79950dae1d7de8fc2cb0f8ddd087d403e2b9ce8e v7-4-349 +ad005d0114c1d2d83490787ef7ea2a3c6e5e7b9e v7-4-350 +f9ec944e4474c649faad642797ffd798a7102549 v7-4-351 +b4962cf3a1c06a1f60f1d750df8fcf7035b00b99 v7-4-352 +d42a1d3b74d40f580359dbd139d2d0dfa7235252 v7-4-353 +5deaa4e9812d4b4ae59d8a3e70bf19983e07e6da v7-4-354 +9a4efda75b5ef0f496d6a29c0a4dfcc7c03412f9 v7-4-355 +34465a179ce21c827cab4c65a75e6b490600a96f v7-4-356 +4eedfc4911a1db9c4874689f6c652be0094838f2 v7-4-357 +771b97ba3b4768c77f2070423a93152d6977f012 v7-4-358 +182c7b987283a567121e9c43d831779d1c88645f v7-4-359 +761687c6808f4c9c80d33a919a6bb506dfe9f674 v7-4-360 +a97e5b9dbc26800830e46cf3c1aa6efbfe258097 v7-4-361 +7fa2bed947fde3514a700c96861a537d816d6fd4 v7-4-362 +ff3816167b73fde35017d364b1a820014cd42e76 v7-4-363 +7b324826757595b21b0410a7b6f00227d73c655f v7-4-364 +4625fa27ba6f5b06294675b7f0d1bf8ae8f249fb v7-4-365 +ad775b58706587b6acfb0bb2c732e184efe4f778 v7-4-366 +bdbe2037066df6a463346be1768a56d98001fb36 v7-4-367 +021e16be3c026c9f883b2aba0b48469ecbae5d88 v7-4-368 +72ee0db83788638c36bbcb076cabc2ba6c8cd4e7 v7-4-369 +50575818a97fa4777e52272f5ffc769179d76a8d v7-4-370 +d44f298c43c74555f4ea21b710d377133f948d61 v7-4-371 +a122efb555c4f08405051369310451a627ed524b v7-4-372 +353330c512a9488cf5c1a3f8b8a57fa8cdd83a7a v7-4-373 +f59c4bf0ac3b525f703cafba9a9cb0aeb3cc7745 v7-4-374 +5a5492d676ab1e8334aa86ec552e7e33ee8828e1 v7-4-375 +c3bb76e5b2355c57d7f89997aa9e125e46afdea1 v7-4-376 +255561411d7ae4b3c713bfb2e2f13c5f08ce0c61 v7-4-377 +75ae211df37d789c54f660ccddddd0e370aa67ae v7-4-378 +16cfdf28be40ccbefaeb80ec574a098362a36a34 v7-4-379 +7cfbad4a78bf306e5aaf84dc9c29b48e7d77c1ef v7-4-380 +0a3d958e346ee051667d3e541273b78fb1dfed9a v7-4-381 +dbd7dc1ea2e6bd0fc3c9ec7faec76382412d0129 v7-4-382 +2f02675bc4b051fff7be63f5107f659045a010e1 v7-4-383 +6f88e2dafbf637f573372bb7d8957fe4f2fd0843 v7-4-384 +6e24b97dde6930a62ade6bee725babf4a39bb0a4 v7-4-385 +09af7cb358f0bafd4b7437ff580f4cd7e15b74a1 v7-4-386 +975d96776111914f69c8a0b98ef7db3bbb83cd10 v7-4-387 +76e7fb736c0e9d06b97ff95ee8baad1fb09d420b v7-4-388 +3d206df5c8284f7d5f4a987ae9c7a508f289f008 v7-4-389 +d3a674f6c7370f70d6b66dcefb9e36d22d73c7b7 v7-4-390 +f051e50a6a5feb0f0c6d209440d9d305b82f5836 v7-4-391 +589fd07888abc8a1208616c56b21898d3352fc5b v7-4-392 +1bff71d202621d97acc4ef21ce9f47b78f68bda3 v7-4-393 +d594c15521377493d5e23b03e4dbf5108df69acd v7-4-394 +65b0974c5bebf5d6b56e9abc90d86759d1c4f6d7 v7-4-395 +7766142fc7d3e90c2e15a9c606efcd97331edef8 v7-4-396 +8d361608fe86c534e51e4c7e583375642d34b7a4 v7-4-397 +f62b2e76dd809dc57cad9d0fd8f04a4f3a7193e9 v7-4-398 +18ac55444b37bcae8ea090f7b3abf4826c679bc3 v7-4-399 +50a658bf4cff030cbe6a97a53bb838b5976c2e1a v7-4-400 +ab71bb81b84e9a1cdf030b172f61d779ccda975c v7-4-401 +3aa37ad2c4ed4d4f979e7c7e7d5d88586c6b74ba v7-4-402 +86fb698a38d5c10f59928e57da94ce5b3e124a40 v7-4-403 +0242c27e40e1ce913ec2b6540371d5ea5fceeac9 v7-4-404 +4c25af735304ff17a27bb3ce21e7f7d3b304ff88 v7-4-405 +1134bba900c17abcecdc414c6e30da22c17d32a5 v7-4-406 +3f92ef156c664fb8fea1f036a4a4c87af487ba6b v7-4-407 +cb3218a69c2f0949bbff5bcf9beeccc83ef2ef59 v7-4-408 +de35e123e63c326be4a576f8e678ed9e63ed1f48 v7-4-409 +2fd550c75256cc1ecf06a4afc6a856b305cf7a8a v7-4-410 +d4e0c197e97968050596f4c441552383e31db63b v7-4-411 +4c845a1600d28db8edabd211e6d7a9cd03883ea6 v7-4-412 +121613e72e397db495f5e9b640b249aead5a61c1 v7-4-413 +67edf731a2403a8023440184872159ddc073093c v7-4-414 +20dbceb6f4713ccd01be45dc531abc269fbb7579 v7-4-415 +735bd597a8ffcb00edff68b34a26573b8f3cad9a v7-4-416 +e60327caf9095d5ec067a5ab47bf4a69c0f58580 v7-4-417 +00f58478e38b68faf783d8fe70c1439fe9dd732d v7-4-418 +0a42938f449cf306a429db373106d5e29d8d4312 v7-4-419 +93aa0340130912c69d4093fc626a3cbb0cc7ad68 v7-4-420 +3ee39fe2df7d60d6376b3429383c5c5e3f9bb3fe v7-4-421 +69da1498ce89dd093935c0e5013e1df8060a4e80 v7-4-422 +96a4fa8e530c12137af235a9aaad57d578f9eebd v7-4-423 +85a1802ae810f0e840f8b5d8f2827b4199b39750 v7-4-424 +2e804ebb3ee8cd59451f8f1c1be2f09ebce0d77a v7-4-425 +7ab9a9cf2859ae4b7c00c4fff016fd5a0869450e v7-4-426 +fca35aa9380a9e3acecc78f85e05f26436e87ae1 v7-4-427 +1fe61f6d52079f44f61b3e03cf9b0c300f2890d9 v7-4-428 +e98e415ea3b8c743a5ab04ad9f498ab1b11ae8cf v7-4-429 +f4e9c65a18d4a5753747f327ed55c10f05d8d91c v7-4-430 +5672a06e4bd84cae4194ff0584d487448bad8c38 v7-4-431 +59cd2b16f71846dec2e842491e509385beeda5e9 v7-4-432 +dd3dac42cb9b5f95ad16d5e08220b0c7adf4b024 v7-4-433 +4176c48c7dd51d0fcdb7403cbfb489a75b0d819d v7-4-434 +b98af9af378eebe674052aa9a1b1956ad3f96487 v7-4-435 +52fa8300ce205a8f3c45b3b1874564b7768630ea v7-4-436 +8515b42f939cdf3a59fa6120e989d9f8fe6f4571 v7-4-437 +db3b8fe8330ea2afabd6c4856be5c76ef86d4728 v7-4-438 +07b28e96af8bace1af65bac661f22716781103fd v7-4-439 +1f578cd9a65779d2597e0135a5916db621d65734 v7-4-440 +e754b23b7d1c3825dc2c6028867d631520a8cdca v7-4-441 +8c3c067b4ae3cc02ce4411042df05f97df5bc316 v7-4-442 +f1ba154c3a12d06cd0f40edbfc675103eb2dd7ad v7-4-443 +d4cc9f48d5a40382e3e3d52dfe6e948745ee13b4 v7-4-444 +1138726736fbdb92aa5259ca4b76573b8f4b3f79 v7-4-445 +63121fdd093ff71081725d5495337ea45d38daab v7-4-446 +0d2c821cdc2505879823a551baeeb8d3c61ce758 v7-4-447 +2fd96725b0632cd9183581ce13d7b2cbd734d8d4 v7-4-448 +cb5480096f1b9e8f44e9d742fa190a90d77e1c54 v7-4-449 +7c9abc70ffc187f9bb60d968cb7e3cc5ed6d4231 v7-4-450 +ac6cfdc02695b31b07e9beb60fd704f74f4d4c81 v7-4-451 +78aad99db7627a19574d10415780ded69936d7d7 v7-4-452 +c72eb8499a9d3f618de3528287d1de62025fdda4 v7-4-453 +0cdff7c268559f8f34eae073a013ece71b62b9e3 v7-4-454 +ebc72764fa1e74758ae1ef9d3f49301f80fc3aa4 v7-4-455 +54194bd6ed607aa0cec07d8a27d4794573eabba9 v7-4-456 +96761b6789f61a8dee1551b7cea98e669fb90fb3 v7-4-457 +fe1827921d50cb59ac680ea13e3f9103cd9db660 v7-4-458 +7816c24ff8907c9f24a9e35992a4d5f3cc9dbc7e v7-4-459 +d5eba03293a6193a1b462822800641b820252ce3 v7-4-460 diff -Naur vim74.orig/Filelist vim74/Filelist --- vim74.orig/Filelist 2013-07-13 13:23:38.000000000 +0000 +++ vim74/Filelist 2014-09-27 01:00:28.980513178 +0000 @@ -3,6 +3,7 @@ # source files for all source archives SRC_ALL = \ + .hgignore \ src/README.txt \ src/arabic.c \ src/arabic.h \ @@ -10,6 +11,8 @@ src/blowfish.c \ src/buffer.c \ src/charset.c \ + src/crypt.c \ + src/crypt_zip.c \ src/diff.c \ src/digraph.c \ src/edit.c \ @@ -79,11 +82,17 @@ src/xxd/xxd.c \ src/main.aap \ src/testdir/main.aap \ + src/testdir/README.txt \ src/testdir/*.in \ + src/testdir/sautest/autoload/*.vim \ src/testdir/test[0-9]*.ok \ + src/testdir/test[0-9]*a.ok \ + src/testdir/test_[a-z]*.ok \ src/testdir/test49.vim \ src/testdir/test60.vim \ src/testdir/test83-tags? \ + src/testdir/test77a.com \ + src/testdir/test_*.vim \ src/testdir/python2/*.py \ src/testdir/python3/*.py \ src/testdir/pythonx/*.py \ @@ -97,6 +106,8 @@ src/proto/blowfish.pro \ src/proto/buffer.pro \ src/proto/charset.pro \ + src/proto/crypt.pro \ + src/proto/crypt_zip.pro \ src/proto/diff.pro \ src/proto/digraph.pro \ src/proto/edit.pro \ @@ -283,6 +294,8 @@ src/dosinst.h \ src/glbl_ime.cpp \ src/glbl_ime.h \ + src/gui_dwrite.cpp \ + src/gui_dwrite.h \ src/gui_w16.c \ src/gui_w32.c \ src/gui_w48.c \ diff -Naur vim74.orig/runtime/autoload/clojurecomplete.vim vim74/runtime/autoload/clojurecomplete.vim --- vim74.orig/runtime/autoload/clojurecomplete.vim 2013-02-06 14:35:23.000000000 +0000 +++ vim74/runtime/autoload/clojurecomplete.vim 2014-09-27 01:00:29.160512728 +0000 @@ -1,20 +1,22 @@ " Vim completion script -" Language: Clojure -" Maintainer: Sung Pae -" URL: https://github.com/guns/vim-clojure-static -" License: Same as Vim -" Last Change: 05 February 2013 +" Language: Clojure +" Maintainer: Sung Pae +" URL: https://github.com/guns/vim-clojure-static +" License: Same as Vim +" Last Change: 27 March 2014 -" Special forms and public vars in clojure.core -" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-002/vim_clojure_static.clj -" Clojure 1.5.0-RC6 -let s:words = ["*","*'","*1","*2","*3","*agent*","*allow-unresolved-vars*","*assert*","*clojure-version*","*command-line-args*","*compile-files*","*compile-path*","*compiler-options*","*data-readers*","*default-data-reader-fn*","*e","*err*","*file*","*flush-on-newline*","*fn-loader*","*in*","*math-context*","*ns*","*out*","*print-dup*","*print-length*","*print-level*","*print-meta*","*print-readably*","*read-eval*","*read-whitelist*","*source-path*","*unchecked-math*","*use-context-classloader*","*verbose-defrecords*","*warn-on-reflection*","+","+'","-","-'","->","->>","->ArrayChunk","->Vec","->VecNode","->VecSeq","-cache-protocol-fn","-reset-methods",".","..","/","<","<=","=","==",">",">=","EMPTY-NODE","accessor","aclone","add-classpath","add-watch","agent","agent-error","agent-errors","aget","alength","alias","all-ns","alter","alter-meta!","alter-var-root","amap","ancestors","and","apply","areduce","array-map","as->","aset","aset-boolean","aset-byte","aset-char","aset-double","aset-float","aset-int","aset-long","aset-short","assert","assoc!","assoc","assoc-in","associative?","atom","await","await-for","await1","bases","bean","bigdec","bigint","biginteger","binding","bit-and","bit-and-not","bit-clear","bit-flip","bit-not","bit-or","bit-set","bit-shift-left","bit-shift-right","bit-test","bit-xor","boolean","boolean-array","booleans","bound-fn","bound-fn*","bound?","butlast","byte","byte-array","bytes","case","cast","catch","char","char-array","char-escape-string","char-name-string","char?","chars","chunk","chunk-append","chunk-buffer","chunk-cons","chunk-first","chunk-next","chunk-rest","chunked-seq?","class","class?","clear-agent-errors","clojure-version","coll?","comment","commute","comp","comparator","compare","compare-and-set!","compile","complement","concat","cond","cond->","cond->>","condp","conj!","conj","cons","constantly","construct-proxy","contains?","count","counted?","create-ns","create-struct","cycle","dec","dec'","decimal?","declare","def","default-data-readers","definline","definterface","defmacro","defmethod","defmulti","defn","defn-","defonce","defprotocol","defrecord","defstruct","deftype","delay","delay?","deliver","denominator","deref","derive","descendants","destructure","disj!","disj","dissoc!","dissoc","distinct","distinct?","do","doall","dorun","doseq","dosync","dotimes","doto","double","double-array","doubles","drop","drop-last","drop-while","empty","empty?","ensure","enumeration-seq","error-handler","error-mode","eval","even?","every-pred","every?","ex-data","ex-info","extend","extend-protocol","extend-type","extenders","extends?","false?","ffirst","file-seq","filter","filterv","finally","find","find-keyword","find-ns","find-protocol-impl","find-protocol-method","find-var","first","flatten","float","float-array","float?","floats","flush","fn","fn","fn?","fnext","fnil","for","force","format","frequencies","future","future-call","future-cancel","future-cancelled?","future-done?","future?","gen-class","gen-interface","gensym","get","get-in","get-method","get-proxy-class","get-thread-bindings","get-validator","group-by","hash","hash-combine","hash-map","hash-set","identical?","identity","if","if-let","if-not","ifn?","import","in-ns","inc","inc'","init-proxy","instance?","int","int-array","integer?","interleave","intern","interpose","into","into-array","ints","io!","isa?","iterate","iterator-seq","juxt","keep","keep-indexed","key","keys","keyword","keyword?","last","lazy-cat","lazy-seq","let","let","letfn","line-seq","list","list*","list?","load","load-file","load-reader","load-string","loaded-libs","locking","long","long-array","longs","loop","loop","macroexpand","macroexpand-1","make-array","make-hierarchy","map","map-indexed","map?","mapcat","mapv","max","max-key","memfn","memoize","merge","merge-with","meta","method-sig","methods","min","min-key","mod","monitor-enter","monitor-exit","munge","name","namespace","namespace-munge","neg?","new","newline","next","nfirst","nil?","nnext","not","not-any?","not-empty","not-every?","not=","ns","ns-aliases","ns-imports","ns-interns","ns-map","ns-name","ns-publics","ns-refers","ns-resolve","ns-unalias","ns-unmap","nth","nthnext","nthrest","num","number?","numerator","object-array","odd?","or","parents","partial","partition","partition-all","partition-by","pcalls","peek","persistent!","pmap","pop!","pop","pop-thread-bindings","pos?","pr","pr-str","prefer-method","prefers","primitives-classnames","print","print-ctor","print-dup","print-method","print-simple","print-str","printf","println","println-str","prn","prn-str","promise","proxy","proxy-call-with-super","proxy-mappings","proxy-name","proxy-super","push-thread-bindings","pvalues","quot","quote","rand","rand-int","rand-nth","range","ratio?","rational?","rationalize","re-find","re-groups","re-matcher","re-matches","re-pattern","re-seq","read","read-line","read-string","realized?","recur","reduce","reduce-kv","reduced","reduced?","reductions","ref","ref-history-count","ref-max-history","ref-min-history","ref-set","refer","refer-clojure","reify","release-pending-sends","rem","remove","remove-all-methods","remove-method","remove-ns","remove-watch","repeat","repeatedly","replace","replicate","require","reset!","reset-meta!","resolve","rest","restart-agent","resultset-seq","reverse","reversible?","rseq","rsubseq","satisfies?","second","select-keys","send","send-off","send-via","seq","seq?","seque","sequence","sequential?","set!","set","set-agent-send-executor!","set-agent-send-off-executor!","set-error-handler!","set-error-mode!","set-validator!","set?","short","short-array","shorts","shuffle","shutdown-agents","slurp","some","some->","some->>","some-fn","sort","sort-by","sorted-map","sorted-map-by","sorted-set","sorted-set-by","sorted?","special-symbol?","spit","split-at","split-with","str","string?","struct","struct-map","subs","subseq","subvec","supers","swap!","symbol","symbol?","sync","take","take-last","take-nth","take-while","test","the-ns","thread-bound?","throw","time","to-array","to-array-2d","trampoline","transient","tree-seq","true?","try","type","unchecked-add","unchecked-add-int","unchecked-byte","unchecked-char","unchecked-dec","unchecked-dec-int","unchecked-divide-int","unchecked-double","unchecked-float","unchecked-inc","unchecked-inc-int","unchecked-int","unchecked-long","unchecked-multiply","unchecked-multiply-int","unchecked-negate","unchecked-negate-int","unchecked-remainder-int","unchecked-short","unchecked-subtract","unchecked-subtract-int","underive","unquote","unquote-splicing","update-in","update-proxy","use","val","vals","var","var-get","var-set","var?","vary-meta","vec","vector","vector-of","vector?","when","when-first","when-let","when-not","while","with-bindings","with-bindings*","with-in-str","with-loading-context","with-local-vars","with-meta","with-open","with-out-str","with-precision","with-redefs","with-redefs-fn","xml-seq","zero?","zipmap"] +" -*- COMPLETION WORDS -*- +" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-010/clj/src/vim_clojure_static/generate.clj +" Clojure version 1.6.0 +let s:words = ["*","*'","*1","*2","*3","*agent*","*allow-unresolved-vars*","*assert*","*clojure-version*","*command-line-args*","*compile-files*","*compile-path*","*compiler-options*","*data-readers*","*default-data-reader-fn*","*e","*err*","*file*","*flush-on-newline*","*fn-loader*","*in*","*math-context*","*ns*","*out*","*print-dup*","*print-length*","*print-level*","*print-meta*","*print-readably*","*read-eval*","*source-path*","*unchecked-math*","*use-context-classloader*","*verbose-defrecords*","*warn-on-reflection*","+","+'","-","-'","->","->>","->ArrayChunk","->Vec","->VecNode","->VecSeq","-cache-protocol-fn","-reset-methods",".","..","/","<","<=","=","==",">",">=","EMPTY-NODE","accessor","aclone","add-classpath","add-watch","agent","agent-error","agent-errors","aget","alength","alias","all-ns","alter","alter-meta!","alter-var-root","amap","ancestors","and","apply","areduce","array-map","as->","aset","aset-boolean","aset-byte","aset-char","aset-double","aset-float","aset-int","aset-long","aset-short","assert","assoc!","assoc","assoc-in","associative?","atom","await","await-for","await1","bases","bean","bigdec","bigint","biginteger","binding","bit-and","bit-and-not","bit-clear","bit-flip","bit-not","bit-or","bit-set","bit-shift-left","bit-shift-right","bit-test","bit-xor","boolean","boolean-array","booleans","bound-fn","bound-fn*","bound?","butlast","byte","byte-array","bytes","case","cast","catch","char","char-array","char-escape-string","char-name-string","char?","chars","chunk","chunk-append","chunk-buffer","chunk-cons","chunk-first","chunk-next","chunk-rest","chunked-seq?","class","class?","clear-agent-errors","clojure-version","coll?","comment","commute","comp","comparator","compare","compare-and-set!","compile","complement","concat","cond","cond->","cond->>","condp","conj!","conj","cons","constantly","construct-proxy","contains?","count","counted?","create-ns","create-struct","cycle","dec","dec'","decimal?","declare","def","default-data-readers","definline","definterface","defmacro","defmethod","defmulti","defn","defn-","defonce","defprotocol","defrecord","defstruct","deftype","delay","delay?","deliver","denominator","deref","derive","descendants","destructure","disj!","disj","dissoc!","dissoc","distinct","distinct?","do","doall","dorun","doseq","dosync","dotimes","doto","double","double-array","doubles","drop","drop-last","drop-while","empty","empty?","ensure","enumeration-seq","error-handler","error-mode","eval","even?","every-pred","every?","ex-data","ex-info","extend","extend-protocol","extend-type","extenders","extends?","false?","ffirst","file-seq","filter","filterv","finally","find","find-keyword","find-ns","find-protocol-impl","find-protocol-method","find-var","first","flatten","float","float-array","float?","floats","flush","fn","fn","fn?","fnext","fnil","for","force","format","frequencies","future","future-call","future-cancel","future-cancelled?","future-done?","future?","gen-class","gen-interface","gensym","get","get-in","get-method","get-proxy-class","get-thread-bindings","get-validator","group-by","hash","hash-combine","hash-map","hash-ordered-coll","hash-set","hash-unordered-coll","identical?","identity","if","if-let","if-not","if-some","ifn?","import","in-ns","inc","inc'","init-proxy","instance?","int","int-array","integer?","interleave","intern","interpose","into","into-array","ints","io!","isa?","iterate","iterator-seq","juxt","keep","keep-indexed","key","keys","keyword","keyword?","last","lazy-cat","lazy-seq","let","let","letfn","line-seq","list","list*","list?","load","load-file","load-reader","load-string","loaded-libs","locking","long","long-array","longs","loop","loop","macroexpand","macroexpand-1","make-array","make-hierarchy","map","map-indexed","map?","mapcat","mapv","max","max-key","memfn","memoize","merge","merge-with","meta","method-sig","methods","min","min-key","mix-collection-hash","mod","monitor-enter","monitor-exit","munge","name","namespace","namespace-munge","neg?","new","newline","next","nfirst","nil?","nnext","not","not-any?","not-empty","not-every?","not=","ns","ns-aliases","ns-imports","ns-interns","ns-map","ns-name","ns-publics","ns-refers","ns-resolve","ns-unalias","ns-unmap","nth","nthnext","nthrest","num","number?","numerator","object-array","odd?","or","parents","partial","partition","partition-all","partition-by","pcalls","peek","persistent!","pmap","pop!","pop","pop-thread-bindings","pos?","pr","pr-str","prefer-method","prefers","primitives-classnames","print","print-ctor","print-dup","print-method","print-simple","print-str","printf","println","println-str","prn","prn-str","promise","proxy","proxy-call-with-super","proxy-mappings","proxy-name","proxy-super","push-thread-bindings","pvalues","quot","quote","rand","rand-int","rand-nth","range","ratio?","rational?","rationalize","re-find","re-groups","re-matcher","re-matches","re-pattern","re-seq","read","read-line","read-string","realized?","record?","recur","reduce","reduce-kv","reduced","reduced?","reductions","ref","ref-history-count","ref-max-history","ref-min-history","ref-set","refer","refer-clojure","reify","release-pending-sends","rem","remove","remove-all-methods","remove-method","remove-ns","remove-watch","repeat","repeatedly","replace","replicate","require","reset!","reset-meta!","resolve","rest","restart-agent","resultset-seq","reverse","reversible?","rseq","rsubseq","satisfies?","second","select-keys","send","send-off","send-via","seq","seq?","seque","sequence","sequential?","set!","set","set-agent-send-executor!","set-agent-send-off-executor!","set-error-handler!","set-error-mode!","set-validator!","set?","short","short-array","shorts","shuffle","shutdown-agents","slurp","some","some->","some->>","some-fn","some?","sort","sort-by","sorted-map","sorted-map-by","sorted-set","sorted-set-by","sorted?","special-symbol?","spit","split-at","split-with","str","string?","struct","struct-map","subs","subseq","subvec","supers","swap!","symbol","symbol?","sync","take","take-last","take-nth","take-while","test","the-ns","thread-bound?","throw","time","to-array","to-array-2d","trampoline","transient","tree-seq","true?","try","type","unchecked-add","unchecked-add-int","unchecked-byte","unchecked-char","unchecked-dec","unchecked-dec-int","unchecked-divide-int","unchecked-double","unchecked-float","unchecked-inc","unchecked-inc-int","unchecked-int","unchecked-long","unchecked-multiply","unchecked-multiply-int","unchecked-negate","unchecked-negate-int","unchecked-remainder-int","unchecked-short","unchecked-subtract","unchecked-subtract-int","underive","unquote","unquote-splicing","unsigned-bit-shift-right","update-in","update-proxy","use","val","vals","var","var-get","var-set","var?","vary-meta","vec","vector","vector-of","vector?","when","when-first","when-let","when-not","when-some","while","with-bindings","with-bindings*","with-in-str","with-loading-context","with-local-vars","with-meta","with-open","with-out-str","with-precision","with-redefs","with-redefs-fn","xml-seq","zero?","zipmap"] -" Simple word completion omnifunc +" Simple word completion for special forms and public vars in clojure.core function! clojurecomplete#Complete(findstart, base) - if a:findstart - return searchpos('\<', 'bnW', line('.'))[1] - 1 - else - return { 'words': filter(copy(s:words), 'v:val =~ "\\V\\^' . a:base . '"') } - endif + if a:findstart + return searchpos('\<', 'bnW', line('.'))[1] - 1 + else + return { 'words': filter(copy(s:words), 'v:val =~# "\\V\\^' . a:base . '"') } + endif endfunction + +" vim:sts=8:sw=8:ts=8:noet diff -Naur vim74.orig/runtime/autoload/getscript.vim vim74/runtime/autoload/getscript.vim --- vim74.orig/runtime/autoload/getscript.vim 2013-04-17 13:40:44.000000000 +0000 +++ vim74/runtime/autoload/getscript.vim 2014-09-27 01:00:29.167179378 +0000 @@ -1,8 +1,8 @@ " --------------------------------------------------------------------- " getscript.vim " Author: Charles E. Campbell -" Date: Apr 17, 2013 -" Version: 35 +" Date: Jan 21, 2014 +" Version: 36 " Installing: :help glvs-install " Usage: :help glvs " @@ -15,7 +15,7 @@ if exists("g:loaded_getscript") finish endif -let g:loaded_getscript= "v35" +let g:loaded_getscript= "v36" if &cp echoerr "GetLatestVimScripts is not vi-compatible; not loaded (you need to set nocp)" finish @@ -208,8 +208,8 @@ let lastline = line("$") " call Decho("lastline#".lastline) let firstdir = substitute(&rtp,',.*$','','') - let plugins = split(globpath(firstdir,"plugin/*.vim"),'\n') - let plugins = plugins + split(globpath(firstdir,"AsNeeded/*.vim"),'\n') + let plugins = split(globpath(firstdir,"plugin/**/*.vim"),'\n') + let plugins = plugins + split(globpath(firstdir,"AsNeeded/**/*.vim"),'\n') let foundscript = 0 " this loop updates the GetLatestVimScripts.dat file diff -Naur vim74.orig/runtime/autoload/htmlcomplete.vim vim74/runtime/autoload/htmlcomplete.vim --- vim74.orig/runtime/autoload/htmlcomplete.vim 2011-04-28 11:13:20.000000000 +0000 +++ vim74/runtime/autoload/htmlcomplete.vim 2014-09-27 01:00:29.187179328 +0000 @@ -1,7 +1,49 @@ " Vim completion script " Language: HTML and XHTML " Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) -" Last Change: 2011 Apr 28 +" Last Change: 2014 Jun 20 + +" Distinguish between HTML versions. +" To use with other HTML versions add another "elseif" condition to match +" proper DOCTYPE. +function! htmlcomplete#DetectOmniFlavor() + if &filetype == 'xhtml' + let b:html_omni_flavor = 'xhtml10s' + else + let b:html_omni_flavor = 'html401t' + endif + let i = 1 + let line = "" + while i < 10 && i < line("$") + let line = getline(i) + if line =~ '' + let b:html_omni_flavor = 'html40' + endif + if line =~ '\' + let b:html_omni_flavor .= 't' + elseif line =~ '\' + let b:html_omni_flavor .= 'f' + else + let b:html_omni_flavor .= 's' + endif + endif + endif +endfunction function! htmlcomplete#CompleteTags(findstart, base) if a:findstart diff -Naur vim74.orig/runtime/autoload/netrw.vim vim74/runtime/autoload/netrw.vim --- vim74.orig/runtime/autoload/netrw.vim 2013-05-19 03:28:33.000000000 +0000 +++ vim74/runtime/autoload/netrw.vim 2014-09-27 01:00:29.210512603 +0000 @@ -1,10 +1,10 @@ " netrw.vim: Handles file transfer and remote directory listing across " AUTOLOAD SECTION -" Date: May 18, 2013 -" Version: 149 +" Date: May 13, 2014 +" Version: 152 " Maintainer: Charles E Campbell " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim -" Copyright: Copyright (C) 1999-2012 Charles E. Campbell {{{1 +" Copyright: Copyright (C) 1999-2013 Charles E. Campbell {{{1 " Permission is hereby granted to use and distribute this code, " with or without modifications, provided that this copyright " notice is copied with it. Like anything else that's free, @@ -22,13 +22,14 @@ if &cp || exists("g:loaded_netrw") finish endif -let g:loaded_netrw = "v149" -if v:version < 703 || (v:version == 703 && !has("patch465")) - echohl WarningMsg - echo "***warning*** this version of netrw needs vim 7.3.465 or later" - echohl Normal +if v:version < 704 || !has("patch213") + if !exists("s:needpatch213") + echo "***sorry*** this version of netrw requires vim v7.4 with patch 213" + endif + let s:needpatch213= 1 finish endif +let g:loaded_netrw = "v152" if !exists("s:NOTE") let s:NOTE = 0 let s:WARNING = 1 @@ -36,8 +37,9 @@ endif let s:keepcpo= &cpo -set cpo&vim -"DechoTabOn +setl cpo&vim +"let g:dechofuncname=1 +"DechoRemOn "call Decho("doing autoload/netrw.vim version ".g:loaded_netrw) " ====================== @@ -49,7 +51,7 @@ " 0=note = s:NOTE " 1=warning = s:WARNING " 2=error = s:ERROR -" May 01, 2013 : max errnum currently is 93 +" Apr 16, 2014 : max errnum currently is 97 fun! netrw#ErrorMsg(level,msg,errnum) " call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow) @@ -104,8 +106,8 @@ hi link netrwMesgWarning WarningMsg hi link netrwMesgError Error endif -" call Decho("(ErrorMsg) setl noma ro bh=wipe") - setl noma ro bh=wipe +" call Decho("setl noma ro bh=wipe") + setl ro nomod noma bh=wipe else " (optional) netrw will show messages using echomsg. Even if the @@ -200,6 +202,7 @@ let g:netrw_http_cmd = "" endif endif +call s:NetrwInit("g:netrw_http_put_cmd","curl -T") call s:NetrwInit("g:netrw_rcp_cmd" , "rcp") call s:NetrwInit("g:netrw_rsync_cmd", "rsync") if !exists("g:netrw_scp_cmd") @@ -249,7 +252,7 @@ call s:NetrwInit("g:netrw_altv" , &spr) call s:NetrwInit("g:netrw_banner" , 1) call s:NetrwInit("g:netrw_browse_split", 0) -call s:NetrwInit("g:netrw_bufsettings" , "noma nomod nonu nobl nowrap ro") +call s:NetrwInit("g:netrw_bufsettings" , "noma nomod nonu nobl nowrap ro nornu") call s:NetrwInit("g:netrw_chgwin" , -1) call s:NetrwInit("g:netrw_compress" , "gzip") call s:NetrwInit("g:netrw_ctags" , "ctags") @@ -260,6 +263,7 @@ call s:NetrwInit("g:netrw_cursor" , 2) let s:netrw_usercul = &cursorline let s:netrw_usercuc = &cursorcolumn +call s:NetrwInit("g:netrw_cygdrive","/cygdrive") " Default values - d-g ---------- {{{3 call s:NetrwInit("s:didstarstar",0) call s:NetrwInit("g:netrw_dirhist_cnt" , 0) @@ -291,23 +295,19 @@ endif call s:NetrwInit("g:netrw_keepdir",1) if !exists("g:netrw_list_cmd") - if g:netrw_scp_cmd =~ '^pscp' && executable("pscp") if (has("win32") || has("win95") || has("win64") || has("win16")) && filereadable("c:\\private.ppk") " provide a pscp-based listing command let g:netrw_scp_cmd ="pscp -i C:\\private.ppk" endif let g:netrw_list_cmd= g:netrw_scp_cmd." -ls USEPORT HOSTNAME:" - elseif executable(g:netrw_ssh_cmd) " provide a scp-based default listing command let g:netrw_list_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME ls -FLa" - else -" call Decho(g:netrw_ssh_cmd." is not executable") +" call Decho("g:netrw_ssh_cmd." is not executable") let g:netrw_list_cmd= "" endif - endif call s:NetrwInit("g:netrw_list_hide","") " Default values - lh-lz ---------- {{{3 @@ -323,7 +323,7 @@ if g:netrw_cygwin let g:netrw_localcopycmd= "cp" else - let g:netrw_localcopycmd= "cmd /c copy" + let g:netrw_localcopycmd= expand("$COMSPEC")." /c copy" endif elseif has("unix") || has("macunix") let g:netrw_localcopycmd= "cp" @@ -335,7 +335,15 @@ let g:netrw_localmkdir= g:netrw_local_mkdir call netrw#ErrorMsg(s:NOTE,"g:netrw_local_mkdir is deprecated in favor of g:netrw_localmkdir",87) endif -call s:NetrwInit("g:netrw_localmkdir","mkdir") +if has("win32") || has("win95") || has("win64") || has("win16") + if g:netrw_cygwin + call s:NetrwInit("g:netrw_localmkdir","mkdir") + else + let g:netrw_localmkdir= expand("$COMSPEC")." /c mkdir" + endif +else + call s:NetrwInit("g:netrw_localmkdir","mkdir") +endif call s:NetrwInit("g:netrw_remote_mkdir","mkdir") if exists("g:netrw_local_movecmd") let g:netrw_localmovecmd= g:netrw_local_movecmd @@ -346,7 +354,7 @@ if g:netrw_cygwin let g:netrw_localmovecmd= "mv" else - let g:netrw_localmovecmd= "cmd /c move" + let g:netrw_localmovecmd= expand("$COMSPEC")." /c move" endif elseif has("unix") || has("macunix") let g:netrw_localmovecmd= "mv" @@ -354,11 +362,19 @@ let g:netrw_localmovecmd= "" endif endif -call s:NetrwInit("g:netrw_localrmdir", "rmdir") if exists("g:netrw_local_rmdir") let g:netrw_localrmdir= g:netrw_local_rmdir call netrw#ErrorMsg(s:NOTE,"g:netrw_local_rmdir is deprecated in favor of g:netrw_localrmdir",86) endif +if has("win32") || has("win95") || has("win64") || has("win16") + if g:netrw_cygwin + call s:NetrwInit("g:netrw_localrmdir","rmdir") + else + let g:netrw_localrmdir= expand("$COMSPEC")." /c rmdir" + endif +else + call s:NetrwInit("g:netrw_localrmdir","rmdir") +endif call s:NetrwInit("g:netrw_liststyle" , s:THINLIST) " sanity checks if g:netrw_liststyle < 0 || g:netrw_liststyle >= s:MAXLIST @@ -387,8 +403,17 @@ call s:NetrwInit("g:netrw_rename_cmd" , g:netrw_ssh_cmd." USEPORT HOSTNAME mv") call s:NetrwInit("g:netrw_rm_cmd" , g:netrw_ssh_cmd." USEPORT HOSTNAME rm") call s:NetrwInit("g:netrw_rmdir_cmd" , g:netrw_ssh_cmd." USEPORT HOSTNAME rmdir") -call s:NetrwInit("g:netrw_rmf_cmd" , g:netrw_ssh_cmd." USEPORT HOSTNAME rm -f") -" Default values - s ---------- {{{3 +call s:NetrwInit("g:netrw_rmf_cmd" , g:netrw_ssh_cmd." USEPORT HOSTNAME rm -f ") +" Default values - q-s ---------- {{{3 +call s:NetrwInit("g:netrw_quickhelp",0) +let s:QuickHelp= ["-:go up dir D:delete R:rename s:sort-by x:special", + \ "%:create new file d:create new directory", + \ "o:split&open v:vert-split&open", + \ "i:style qf:file info O:obtain r:reverse p:preview", + \ "mf:mark file mt:set target mm:move mc:copy", + \ "-bookmarks- mb:make mB:delete qb:list gb:go to", + \ "-history- qb:list u:go up U:go down", + \ "-targets- mt:target Tb:use bookmark Th:use history"] " g:netrw_sepchr: picking a character that doesn't appear in filenames that can be used to separate priority from filename call s:NetrwInit("g:netrw_sepchr" , (&enc == "euc-jp")? "\" : "\") call s:NetrwInit("s:netrw_silentxfer" , (exists("g:netrw_silent") && g:netrw_silent != 0)? "sil keepj " : "keepj ") @@ -404,7 +429,7 @@ endif call s:NetrwInit("g:netrw_special_syntax" , 0) call s:NetrwInit("g:netrw_ssh_browse_reject", '^total\s\+\d\+$') -call s:NetrwInit("g:netrw_use_noswf" , 0) +call s:NetrwInit("g:netrw_use_noswf" , 1) " Default values - t-w ---------- {{{3 call s:NetrwInit("g:netrw_timefmt","%c") if !exists("g:netrw_xstrlen") @@ -421,7 +446,6 @@ call s:NetrwInit("g:NetrwTopLvlMenu","Netrw.") call s:NetrwInit("g:netrw_win95ftp",1) call s:NetrwInit("g:netrw_winsize",50) -if g:netrw_winsize == 0|let g:netrw_winsize= -1|endif if g:netrw_winsize > 100|let g:netrw_winsize= 100|endif " --------------------------------------------------------------------- " Default values for netrw's script variables: {{{2 @@ -434,6 +458,11 @@ call s:NetrwInit("g:netrw_menu_escape",'.&? \') call s:NetrwInit("g:netrw_tmpfile_escape",' &;') call s:NetrwInit("s:netrw_map_escape","<|\n\r\\\\"") +if has("gui_running") && (&enc == 'utf-8' || &enc == 'utf-16' || &enc == 'ucs-4') + let s:treedepthstring= "│ " +else + let s:treedepthstring= "| " +endif " BufEnter event ignored by decho when following variable is true " Has a side effect that doau BufReadPost doesn't work, so @@ -444,11 +473,18 @@ " Netrw Initialization: {{{1 " ====================== if v:version >= 700 && has("balloon_eval") && !exists("s:initbeval") && !exists("g:netrw_nobeval") && has("syntax") && exists("g:syntax_on") - let s:initbeval = &beval -" let s:initbexpr = &l:bexpr - let &l:bexpr = "netrw#NetrwBalloonHelp()" - set beval - au BufWinEnter,WinEnter * if &ft == "netrw"|set beval|else|let &beval= s:initbeval|endif +" call Decho("installed beval events") + let &l:bexpr = "netrw#BalloonHelp()" + au FileType netrw setl beval + au WinLeave * if &ft == "netrw" && exists("s:initbeval")|let &beval= s:initbeval|endif + au VimEnter * let s:initbeval= &beval +"else " Decho +" if v:version < 700 | call Decho("did not install beval events: v:version=".v:version." < 700") | endif +" if !has("balloon_eval") | call Decho("did not install beval events: does not have balloon_eval") | endif +" if exists("s:initbeval") | call Decho("did not install beval events: s:initbeval exists") | endif +" if exists("g:netrw_nobeval") | call Decho("did not install beval events: g:netrw_nobeval exists") | endif +" if !has("syntax") | call Decho("did not install beval events: does not have syntax highlighting") | endif +" if exists("g:syntax_on") | call Decho("did not install beval events: g:syntax_on exists") | endif endif au WinEnter * if &ft == "netrw"|call s:NetrwInsureWinVars()|endif @@ -457,276 +493,43 @@ " ============================== " --------------------------------------------------------------------- -" netrw#NetrwBalloonHelp: {{{2 -if v:version >= 700 && has("balloon_eval") && &beval == 1 && has("syntax") && exists("g:syntax_on") - fun! netrw#NetrwBalloonHelp() - if !exists("w:netrw_bannercnt") || v:beval_lnum >= w:netrw_bannercnt || (exists("g:netrw_nobeval") && g:netrw_nobeval) - let mesg= "" - elseif v:beval_text == "Netrw" || v:beval_text == "Directory" || v:beval_text == "Listing" - let mesg = "i: thin-long-wide-tree gh: quick hide/unhide of dot-files qf: quick file info %:open new file" - elseif getline(v:beval_lnum) =~ '^"\s*/' - let mesg = ": edit/enter o: edit/enter in horiz window t: edit/enter in new tab v:edit/enter in vert window" - elseif v:beval_text == "Sorted" || v:beval_text == "by" - let mesg = 's: sort by name, time, or file size r: reverse sorting order mt: mark target' - elseif v:beval_text == "Sort" || v:beval_text == "sequence" - let mesg = "S: edit sorting sequence" - elseif v:beval_text == "Hiding" || v:beval_text == "Showing" - let mesg = "a: hiding-showing-all ctrl-h: editing hiding list mh: hide/show by suffix" - elseif v:beval_text == "Quick" || v:beval_text == "Help" - let mesg = "Help: press " - elseif v:beval_text == "Copy/Move" || v:beval_text == "Tgt" - let mesg = "mt: mark target mc: copy marked file to target mm: move marked file to target" - else - let mesg= "" - endif - return mesg - endfun -endif - -" ------------------------------------------------------------------------ -" s:NetrwOptionSave: save options prior to setting to "netrw-buffer-standard" form {{{2 -" 06/08/07 : removed call to NetrwSafeOptions(), either placed -" immediately after NetrwOptionSave() calls in NetRead -" and NetWrite, or after the s:NetrwEnew() call in -" NetrwBrowse. -" vt: normally its "w:" or "s:" (a variable type) -fun! s:NetrwOptionSave(vt) -" call Dfunc("s:NetrwOptionSave(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">"." winnr($)=".winnr("$")." mod=".&mod." ma=".&ma) -" call Decho(a:vt."netrw_optionsave".(exists("{a:vt}netrw_optionsave")? ("=".{a:vt}netrw_optionsave) : " doesn't exist")) - - if !exists("{a:vt}netrw_optionsave") - let {a:vt}netrw_optionsave= 1 - else -" call Dret("s:NetrwOptionSave : options already saved") - return - endif -" call Decho("fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist")." diff=".&l:diff) - - " Save current settings and current directory -" call Decho("saving current settings and current directory") - let s:yykeep = @@ - if exists("&l:acd")|let {a:vt}netrw_acdkeep = &l:acd|endif - let {a:vt}netrw_aikeep = &l:ai - let {a:vt}netrw_awkeep = &l:aw - let {a:vt}netrw_bhkeep = &l:bh - let {a:vt}netrw_blkeep = &l:bl - let {a:vt}netrw_btkeep = &l:bt - let {a:vt}netrw_bombkeep = &l:bomb - let {a:vt}netrw_cedit = &cedit - let {a:vt}netrw_cikeep = &l:ci - let {a:vt}netrw_cinkeep = &l:cin - let {a:vt}netrw_cinokeep = &l:cino - let {a:vt}netrw_comkeep = &l:com - let {a:vt}netrw_cpokeep = &l:cpo - let {a:vt}netrw_diffkeep = &l:diff - let {a:vt}netrw_fenkeep = &l:fen - let {a:vt}netrw_ffkeep = &l:ff - let {a:vt}netrw_fokeep = &l:fo " formatoptions - let {a:vt}netrw_gdkeep = &l:gd " gdefault - let {a:vt}netrw_hidkeep = &l:hidden - let {a:vt}netrw_imkeep = &l:im - let {a:vt}netrw_iskkeep = &l:isk - let {a:vt}netrw_lskeep = &l:ls - let {a:vt}netrw_makeep = &l:ma - let {a:vt}netrw_magickeep = &l:magic - let {a:vt}netrw_modkeep = &l:mod - let {a:vt}netrw_nukeep = &l:nu - let {a:vt}netrw_repkeep = &l:report - let {a:vt}netrw_rokeep = &l:ro - let {a:vt}netrw_selkeep = &l:sel - let {a:vt}netrw_spellkeep = &l:spell - let {a:vt}netrw_tskeep = &l:ts - let {a:vt}netrw_twkeep = &l:tw " textwidth - let {a:vt}netrw_wigkeep = &l:wig " wildignore - let {a:vt}netrw_wrapkeep = &l:wrap - let {a:vt}netrw_writekeep = &l:write - if g:netrw_use_noswf && has("win32") && !has("win95") - let {a:vt}netrw_swfkeep = &l:swf - endif - - " save a few selected netrw-related variables -" call Decho("saving a few selected netrw-related variables") - if g:netrw_keepdir - let {a:vt}netrw_dirkeep = getcwd() - endif - if has("win32") && !has("win95") - let {a:vt}netrw_swfkeep = &l:swf " swapfile - endif - if &go =~# 'a' | sil! let {a:vt}netrw_regstar = @* | endif - sil! let {a:vt}netrw_regslash= @/ - -" call Dret("s:NetrwOptionSave : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly) -endfun - -" ------------------------------------------------------------------------ -" s:NetrwOptionRestore: restore options {{{2 -fun! s:NetrwOptionRestore(vt) -" call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> winnr($)=".winnr("$")) - if !exists("{a:vt}netrw_optionsave") - if exists("s:nbcd_curpos_{bufnr('%')}") -" call Decho("(NetrwOptionRestore) restoring previous position (s:nbcd_curpos_".bufnr('%')." exists)") - keepj call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')}) -" call Decho("(NetrwOptionRestore) win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> winnr($)=".winnr("$")) -" call Decho("(NetrwOptionRestore) unlet s:nbcd_curpos_".bufnr('%')) - unlet s:nbcd_curpos_{bufnr('%')} - else -" call Decho("(NetrwOptionRestore) no previous position") - endif -" call Decho("(NetrwOptionRestore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") -" call Dret("s:NetrwOptionRestore : ".a:vt."netrw_optionsave doesn't exist") - return - endif - unlet {a:vt}netrw_optionsave - - if exists("+acd") - if exists("{a:vt}netrw_acdkeep") -" call Decho("(NetrwOptionRestore) g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd) - let curdir = getcwd() - let &l:acd = {a:vt}netrw_acdkeep - unlet {a:vt}netrw_acdkeep - if &l:acd -" call Decho("exe keepj lcd ".fnameescape(curdir)) " NOTE: was g:netrw_fname_escape for some reason - try - if !exists("&l:acd") && !&l:acd - exe 'keepj lcd '.fnameescape(curdir) - endif - catch /^Vim\%((\a\+)\)\=:E472/ - call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".curdir."> (permissions?)",61) - endtry - endif +" netrw#BalloonHelp: {{{2 +if v:version >= 700 && has("balloon_eval") && has("syntax") && exists("g:syntax_on") && !exists("g:netrw_nobeval") +" call Decho("loading netrw#BalloonHelp()") + fun! netrw#BalloonHelp() + if &ft != "netrw" + return "" endif - endif - if exists("{a:vt}netrw_aikeep") |let &l:ai = {a:vt}netrw_aikeep |unlet {a:vt}netrw_aikeep |endif - if exists("{a:vt}netrw_awkeep") |let &l:aw = {a:vt}netrw_awkeep |unlet {a:vt}netrw_awkeep |endif - if g:netrw_liststyle != s:TREELIST - if exists("{a:vt}netrw_bhkeep") |let &l:bh = {a:vt}netrw_bhkeep |unlet {a:vt}netrw_bhkeep |endif - endif - if exists("{a:vt}netrw_blkeep") |let &l:bl = {a:vt}netrw_blkeep |unlet {a:vt}netrw_blkeep |endif - if exists("{a:vt}netrw_btkeep") |let &l:bt = {a:vt}netrw_btkeep |unlet {a:vt}netrw_btkeep |endif - if exists("{a:vt}netrw_bombkeep") |let &l:bomb = {a:vt}netrw_bombkeep |unlet {a:vt}netrw_bombkeep |endif - if exists("{a:vt}netrw_cedit") |let &cedit = {a:vt}netrw_cedit |unlet {a:vt}netrw_cedit |endif - if exists("{a:vt}netrw_cikeep") |let &l:ci = {a:vt}netrw_cikeep |unlet {a:vt}netrw_cikeep |endif - if exists("{a:vt}netrw_cinkeep") |let &l:cin = {a:vt}netrw_cinkeep |unlet {a:vt}netrw_cinkeep |endif - if exists("{a:vt}netrw_cinokeep") |let &l:cino = {a:vt}netrw_cinokeep |unlet {a:vt}netrw_cinokeep |endif - if exists("{a:vt}netrw_comkeep") |let &l:com = {a:vt}netrw_comkeep |unlet {a:vt}netrw_comkeep |endif - if exists("{a:vt}netrw_cpokeep") |let &l:cpo = {a:vt}netrw_cpokeep |unlet {a:vt}netrw_cpokeep |endif - if exists("{a:vt}netrw_diffkeep") |let &l:diff = {a:vt}netrw_diffkeep |unlet {a:vt}netrw_diffkeep |endif - if exists("{a:vt}netrw_fenkeep") |let &l:fen = {a:vt}netrw_fenkeep |unlet {a:vt}netrw_fenkeep |endif - if exists("{a:vt}netrw_ffkeep") |let &l:ff = {a:vt}netrw_ffkeep |unlet {a:vt}netrw_ffkeep |endif - if exists("{a:vt}netrw_fokeep") |let &l:fo = {a:vt}netrw_fokeep |unlet {a:vt}netrw_fokeep |endif - if exists("{a:vt}netrw_gdkeep") |let &l:gd = {a:vt}netrw_gdkeep |unlet {a:vt}netrw_gdkeep |endif - if exists("{a:vt}netrw_hidkeep") |let &l:hidden = {a:vt}netrw_hidkeep |unlet {a:vt}netrw_hidkeep |endif - if exists("{a:vt}netrw_imkeep") |let &l:im = {a:vt}netrw_imkeep |unlet {a:vt}netrw_imkeep |endif - if exists("{a:vt}netrw_iskkeep") |let &l:isk = {a:vt}netrw_iskkeep |unlet {a:vt}netrw_iskkeep |endif - if exists("{a:vt}netrw_lskeep") |let &l:ls = {a:vt}netrw_lskeep |unlet {a:vt}netrw_lskeep |endif - if exists("{a:vt}netrw_makeep") |let &l:ma = {a:vt}netrw_makeep |unlet {a:vt}netrw_makeep |endif - if exists("{a:vt}netrw_magickeep")|let &l:magic = {a:vt}netrw_magickeep |unlet {a:vt}netrw_magickeep|endif - if exists("{a:vt}netrw_modkeep") |let &l:mod = {a:vt}netrw_modkeep |unlet {a:vt}netrw_modkeep |endif - if exists("{a:vt}netrw_nukeep") |let &l:nu = {a:vt}netrw_nukeep |unlet {a:vt}netrw_nukeep |endif - if exists("{a:vt}netrw_repkeep") |let &l:report = {a:vt}netrw_repkeep |unlet {a:vt}netrw_repkeep |endif - if exists("{a:vt}netrw_rokeep") |let &l:ro = {a:vt}netrw_rokeep |unlet {a:vt}netrw_rokeep |endif - if exists("{a:vt}netrw_selkeep") |let &l:sel = {a:vt}netrw_selkeep |unlet {a:vt}netrw_selkeep |endif - if exists("{a:vt}netrw_spellkeep")|let &l:spell = {a:vt}netrw_spellkeep |unlet {a:vt}netrw_spellkeep|endif - " Problem: start with liststyle=0; press : result, following line resets l:ts. -" if exists("{a:vt}netrw_tskeep") |let &l:ts = {a:vt}netrw_tskeep |unlet {a:vt}netrw_tskeep |endif - if exists("{a:vt}netrw_twkeep") |let &l:tw = {a:vt}netrw_twkeep |unlet {a:vt}netrw_twkeep |endif - if exists("{a:vt}netrw_wigkeep") |let &l:wig = {a:vt}netrw_wigkeep |unlet {a:vt}netrw_wigkeep |endif - if exists("{a:vt}netrw_wrapkeep") |let &l:wrap = {a:vt}netrw_wrapkeep |unlet {a:vt}netrw_wrapkeep |endif - if exists("{a:vt}netrw_writekeep")|let &l:write = {a:vt}netrw_writekeep |unlet {a:vt}netrw_writekeep|endif - if exists("s:yykeep") |let @@ = s:yykeep |unlet s:yykeep |endif - if exists("{a:vt}netrw_swfkeep") - if &directory == "" - " user hasn't specified a swapfile directory; - " netrw will temporarily set the swapfile directory - " to the current directory as returned by getcwd(). - let &l:directory = getcwd() - sil! let &l:swf = {a:vt}netrw_swfkeep - setl directory= - unlet {a:vt}netrw_swfkeep - elseif &l:swf != {a:vt}netrw_swfkeep - " following line causes a Press ENTER in windows -- can't seem to work around it!!! - sil! let &l:swf= {a:vt}netrw_swfkeep - unlet {a:vt}netrw_swfkeep + if !exists("w:netrw_bannercnt") || v:beval_lnum >= w:netrw_bannercnt || (exists("g:netrw_nobeval") && g:netrw_nobeval) + let mesg= "" + elseif v:beval_text == "Netrw" || v:beval_text == "Directory" || v:beval_text == "Listing" + let mesg = "i: thin-long-wide-tree gh: quick hide/unhide of dot-files qf: quick file info %:open new file" + elseif getline(v:beval_lnum) =~ '^"\s*/' + let mesg = ": edit/enter o: edit/enter in horiz window t: edit/enter in new tab v:edit/enter in vert window" + elseif v:beval_text == "Sorted" || v:beval_text == "by" + let mesg = 's: sort by name, time, or file size r: reverse sorting order mt: mark target' + elseif v:beval_text == "Sort" || v:beval_text == "sequence" + let mesg = "S: edit sorting sequence" + elseif v:beval_text == "Hiding" || v:beval_text == "Showing" + let mesg = "a: hiding-showing-all ctrl-h: editing hiding list mh: hide/show by suffix" + elseif v:beval_text == "Quick" || v:beval_text == "Help" + let mesg = "Help: press " + elseif v:beval_text == "Copy/Move" || v:beval_text == "Tgt" + let mesg = "mt: mark target mc: copy marked file to target mm: move marked file to target" + else + let mesg= "" endif - endif - if exists("{a:vt}netrw_dirkeep") && isdirectory({a:vt}netrw_dirkeep) && g:netrw_keepdir - let dirkeep = substitute({a:vt}netrw_dirkeep,'\\','/','g') - if exists("{a:vt}netrw_dirkeep") |exe "keepj lcd ".fnameescape(dirkeep)|unlet {a:vt}netrw_dirkeep |endif - endif - if exists("{a:vt}netrw_regstar") |sil! let @*= {a:vt}netrw_regstar |unlet {a:vt}netrw_regstar |endif - if exists("{a:vt}netrw_regslash")|sil! let @/= {a:vt}netrw_regslash|unlet {a:vt}netrw_regslash|endif - if exists("s:nbcd_curpos_{bufnr('%')}") -" call Decho("(NetrwOptionRestore) restoring previous position (s:nbcd_curpos_".bufnr('%')." exists)") - keepj call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')}) -" call Decho("(NetrwOptionRestore) unlet s:nbcd_curpos_".bufnr('%')) - unlet s:nbcd_curpos_{bufnr('%')} - else -" call Decho("no previous position") - endif - -" call Decho("(NetrwOptionRestore) g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd) -" call Decho("(NetrwOptionRestore) fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist")) -" call Decho("(NetrwOptionRestore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") -" call Decho("(NetrwOptionRestore) diff=".&l:diff." win#".winnr()." w:netrw_diffkeep=".(exists("w:netrw_diffkeep")? w:netrw_diffkeep : "doesn't exist")) -" call Decho("(NetrwOptionRestore) ts=".&l:ts) - " Moved the filetype detect here from NetrwGetFile() because remote files - " were having their filetype detect-generated settings overwritten by - " NetrwOptionRestore. - if &ft != "netrw" -" call Decho("(NetrwOptionRestore) filetype detect (ft=".&ft.")") - filetype detect - endif -" call Dret("s:NetrwOptionRestore : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly) -endfun - -" --------------------------------------------------------------------- -" s:NetrwSafeOptions: sets options to help netrw do its job {{{2 -" Use s:NetrwSaveOptions() to save user settings -" Use s:NetrwOptionRestore() to restore user settings -fun! s:NetrwSafeOptions() -" call Dfunc("s:NetrwSafeOptions() win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%"))."> winnr($)=".winnr("$")) -" call Decho("win#".winnr()."'s ft=".&ft) - if exists("+acd") | setl noacd | endif - setl noai - setl noaw - setl nobomb - setl noci - setl nocin - if g:netrw_liststyle == s:TREELIST - setl bh=hide - endif - setl cino= - setl com= - setl cpo-=a - setl cpo-=A - setl fo=nroql2 - setl nohid - setl noim - setl isk+=@ isk+=* isk+=/ - setl magic - setl report=10000 - setl sel=inclusive - setl nospell - setl tw=0 - setl wig= - set cedit& - if g:netrw_use_noswf && has("win32") && !has("win95") - setl noswf - endif - call s:NetrwCursor() - - " allow the user to override safe options -" call Decho("ft<".&ft."> ei=".&ei) - if &ft == "netrw" -" call Decho("do any netrw FileType autocmds (doau FileType netrw)") - sil! keepalt keepj doau FileType netrw - endif - -" call Decho("fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist")." bh=".&l:bh) -" call Dret("s:NetrwSafeOptions") -endfun + return mesg + endfun +"else " Decho +" if v:version < 700 |call Decho("did not load netrw#BalloonHelp(): vim version ".v:version." < 700 -")|endif +" if !has("balloon_eval") |call Decho("did not load netrw#BalloonHelp(): does not have balloon eval") |endif +" if !has("syntax") |call Decho("did not load netrw#BalloonHelp(): syntax disabled") |endif +" if !exists("g:syntax_on") |call Decho("did not load netrw#BalloonHelp(): g:syntax_on=".g:syntax_on) |endif +" if exists("g:netrw_nobeval") |call Decho("did not load netrw#BalloonHelp(): g:netrw_nobeval exists") |endif +endif -" --------------------------------------------------------------------- +" ------------------------------------------------------------------------ " netrw#Explore: launch the local browser in the directory of the current file {{{2 " indx: == -1: Nexplore " == -2: Pexplore @@ -737,7 +540,7 @@ " * If Hexplore or Vexplore, then this will override " g:netrw_winsize to specify the qty of rows or columns the " newly split window should have. -" dosplit==0: the window will be split iff the current file has been modified +" dosplit==0: the window will be split iff the current file has been modified and hidden not set " dosplit==1: the window will be split before running the local browser " style == 0: Explore style == 1: Explore! " == 2: Hexplore style == 3: Hexplore! @@ -747,26 +550,52 @@ " call Dfunc("netrw#Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.",a:1<".a:1.">) &modified=".&modified." modifiable=".&modifiable." a:0=".a:0." win#".winnr()." buf#".bufnr("%")) if !exists("b:netrw_curdir") let b:netrw_curdir= getcwd() - if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16")) - let b:netrw_curdir= substitute(b:netrw_curdir,'\','/','g') - endif -" call Decho("(Explore) set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)") +" call Decho("set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)") + endif + + " record current file for Rexplore's benefit + if &ft != "netrw" + let w:netrw_rexfile= expand("%:p") endif + + " record current directory let curdir = simplify(b:netrw_curdir) let curfiledir = substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e') if !exists("g:netrw_cygwin") && (has("win32") || has("win95") || has("win64") || has("win16")) let curdir= substitute(curdir,'\','/','g') endif -" call Decho("(Explore) curdir<".curdir."> curfiledir<".curfiledir.">") +" call Decho("curdir<".curdir."> curfiledir<".curfiledir.">") + + " using completion, directories with spaces in their names (thanks, Bill Gates, for a truly dumb idea) + " will end up with backslashes here. Solution: strip off backslashes that precede white space and + " try Explore again. + if a:0 > 0 +" call Decho('considering retry: a:1<'.a:1.'>: '. + \ ((a:1 =~ "\\\s")? 'has backslash whitespace' : 'does not have backslash whitespace').', '. + \ ((filereadable(a:1))? 'is readable' : 'is not readable').', '. + \ ((isdirectory(a:1))? 'is a directory' : 'is not a directory')) + if a:1 =~ "\\\s" && !filereadable(a:1) && !isdirectory(a:1) +" call Decho("re-trying Explore with <".substitute(a:1,'\\\(\s\)','\1','g').">") + call netrw#Explore(a:indx,a:dosplit,a:style,substitute(a:1,'\\\(\s\)','\1','g')) +" call Dret("netrw#Explore : returning from retry") + return +" else " Decho +" call Decho("retry not needed") + endif + endif " save registers - sil! let keepregstar = @* - sil! let keepregplus = @+ + if has("clipboard") + sil! let keepregstar = @* + sil! let keepregplus = @+ + endif sil! let keepregslash= @/ - " if dosplit or file has been modified - if a:dosplit || &modified || a:style == 6 -" call Decho("(Explore) case dosplit=".a:dosplit." modified=".&modified." a:style=".a:style.": dosplit or file has been modified") + " if dosplit + " -or- file has been modified AND file not hidden when abandoned + " -or- Texplore used + if a:dosplit || (&modified && &hidden == 0 && &bufhidden != "hide") || a:style == 6 +" call Decho("case dosplit=".a:dosplit." modified=".&modified." a:style=".a:style.": dosplit or file has been modified") call s:SaveWinVars() let winsz= g:netrw_winsize if a:indx > 0 @@ -774,106 +603,119 @@ endif if a:style == 0 " Explore, Sexplore -" call Decho("(Explore) style=0: Explore or Sexplore") +" call Decho("style=0: Explore or Sexplore") let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz - exe winsz."wincmd s" + if winsz == 0|let winsz= ""|endif + exe "noswapfile ".winsz."wincmd s" +" call Decho("exe noswapfile ".winsz."wincmd s") elseif a:style == 1 "Explore!, Sexplore! -" call Decho("(Explore) style=1: Explore! or Sexplore!") +" call Decho("style=1: Explore! or Sexplore!") let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz - exe "keepalt ".winsz."wincmd v" + if winsz == 0|let winsz= ""|endif + exe "keepalt noswapfile ".winsz."wincmd v" +" call Decho("exe keepalt noswapfile ".winsz."wincmd v") elseif a:style == 2 " Hexplore -" call Decho("(Explore) style=2: Hexplore") +" call Decho("style=2: Hexplore") let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz - exe "keepalt bel ".winsz."wincmd s" + if winsz == 0|let winsz= ""|endif + exe "keepalt noswapfile bel ".winsz."wincmd s" +" call Decho("exe keepalt noswapfile bel ".winsz."wincmd s") elseif a:style == 3 " Hexplore! -" call Decho("(Explore) style=3: Hexplore!") +" call Decho("style=3: Hexplore!") let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz - exe "keepalt abo ".winsz."wincmd s" + if winsz == 0|let winsz= ""|endif + exe "keepalt noswapfile abo ".winsz."wincmd s" +" call Decho("exe keepalt noswapfile abo ".winsz."wincmd s") elseif a:style == 4 " Vexplore -" call Decho("(Explore) style=4: Vexplore") +" call Decho("style=4: Vexplore") let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz - exe "keepalt lefta ".winsz."wincmd v" + if winsz == 0|let winsz= ""|endif + exe "keepalt noswapfile lefta ".winsz."wincmd v" +" call Decho("exe keepalt noswapfile lefta ".winsz."wincmd v") elseif a:style == 5 " Vexplore! -" call Decho("(Explore) style=5: Vexplore!") +" call Decho("style=5: Vexplore!") let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz - exe "keepalt rightb ".winsz."wincmd v" + if winsz == 0|let winsz= ""|endif + exe "keepalt noswapfile rightb ".winsz."wincmd v" +" call Decho("exe keepalt noswapfile rightb ".winsz."wincmd v") elseif a:style == 6 " Texplore call s:SaveBufVars() -" call Decho("(Explore) style = 6: Texplore") +" call Decho("style = 6: Texplore") exe "keepalt tabnew ".fnameescape(curdir) +" call Decho("exe keepalt tabnew ".fnameescape(curdir)) call s:RestoreBufVars() endif call s:RestoreWinVars() " else " Decho -" call Decho("(Explore) case a:dosplit=".a:dosplit." AND modified=".&modified." AND a:style=".a:style." is not 6") +" call Decho("case a:dosplit=".a:dosplit." AND modified=".&modified." AND a:style=".a:style." is not 6") endif keepj norm! 0 if a:0 > 0 -" call Decho("(Explore) case [a:0=".a:0."] > 0: a:1<".a:1.">") +" call Decho("case [a:0=".a:0."] > 0: a:1<".a:1.">") if a:1 =~ '^\~' && (has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin)) -" call Decho("(Explore) ..case a:1<".a:1.">: starts with ~ and unix or cygwin") +" call Decho("..case a:1<".a:1.">: starts with ~ and unix or cygwin") let dirname= simplify(substitute(a:1,'\~',expand("$HOME"),'')) -" call Decho("(Explore) ..using dirname<".dirname."> (case: ~ && unix||cygwin)") +" call Decho("..using dirname<".dirname."> (case: ~ && unix||cygwin)") elseif a:1 == '.' -" call Decho("(Explore) ..case a:1<".a:1.">: matches .") +" call Decho("..case a:1<".a:1.">: matches .") let dirname= simplify(exists("b:netrw_curdir")? b:netrw_curdir : getcwd()) if dirname !~ '/$' let dirname= dirname."/" endif -" call Decho("(Explore) ..using dirname<".dirname."> (case: ".(exists("b:netrw_curdir")? "b:netrw_curdir" : "getcwd()").")") +" call Decho("..using dirname<".dirname."> (case: ".(exists("b:netrw_curdir")? "b:netrw_curdir" : "getcwd()").")") elseif a:1 =~ '\$' -" call Decho("(Explore) ..case a:1<".a:1.">: matches ending $") +" call Decho("..case a:1<".a:1.">: matches ending $") let dirname= simplify(expand(a:1)) -" call Decho("(Explore) ..using user-specified dirname<".dirname."> with $env-var") +" call Decho("..using user-specified dirname<".dirname."> with $env-var") elseif a:1 !~ '^\*\{1,2}/' && a:1 !~ '^\a\{3,}://' -" call Decho("(Explore) ..case a:1<".a:1.">: other, not pattern or filepattern") +" call Decho("..case a:1<".a:1.">: other, not pattern or filepattern") let dirname= simplify(a:1) -" call Decho("(Explore) ..using user-specified dirname<".dirname.">") +" call Decho("..using user-specified dirname<".dirname.">") else -" call Decho("(Explore) ..case a:1: pattern or filepattern") +" call Decho("..case a:1: pattern or filepattern") let dirname= a:1 endif else " clear explore -" call Decho("(Explore) case a:0=".a:0.": clearing Explore list") +" call Decho("case a:0=".a:0.": clearing Explore list") call s:NetrwClearExplore() " call Dret("netrw#Explore : cleared list") return endif -" call Decho("(Explore) dirname<".dirname.">") +" call Decho("dirname<".dirname.">") if dirname =~ '\.\./\=$' let dirname= simplify(fnamemodify(dirname,':p:h')) elseif dirname =~ '\.\.' || dirname == '.' let dirname= simplify(fnamemodify(dirname,':p')) endif -" call Decho("(Explore) dirname<".dirname."> (after simplify)") +" call Decho("dirname<".dirname."> (after simplify)") if dirname =~ '^\*//' " starpat=1: Explore *//pattern (current directory only search for files containing pattern) -" call Decho("(Explore) case starpat=1: Explore *//pattern") +" call Decho("case starpat=1: Explore *//pattern") let pattern= substitute(dirname,'^\*//\(.*\)$','\1','') let starpat= 1 -" call Decho("(Explore) ..Explore *//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">") +" call Decho("..Explore *//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">") if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif elseif dirname =~ '^\*\*//' " starpat=2: Explore **//pattern (recursive descent search for files containing pattern) -" call Decho("(Explore) case starpat=2: Explore **//pattern") +" call Decho("case starpat=2: Explore **//pattern") let pattern= substitute(dirname,'^\*\*//','','') let starpat= 2 -" call Decho("(Explore) ..Explore **//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">") +" call Decho("..Explore **//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">") elseif dirname =~ '/\*\*/' " handle .../**/.../filepat -" call Decho("(Explore) case starpat=4: Explore .../**/.../filepat") +" call Decho("case starpat=4: Explore .../**/.../filepat") let prefixdir= substitute(dirname,'^\(.\{-}\)\*\*.*$','\1','') if prefixdir =~ '^/' || (prefixdir =~ '^\a:/' && (has("win32") || has("win95") || has("win64") || has("win16"))) let b:netrw_curdir = prefixdir @@ -882,30 +724,30 @@ endif let dirname= substitute(dirname,'^.\{-}\(\*\*/.*\)$','\1','') let starpat= 4 -" call Decho("(Explore) ..pwd<".getcwd()."> dirname<".dirname.">") -" call Decho("(Explore) ..case Explore ../**/../filepat (starpat=".starpat.")") +" call Decho("..pwd<".getcwd()."> dirname<".dirname.">") +" call Decho("..case Explore ../**/../filepat (starpat=".starpat.")") elseif dirname =~ '^\*/' " case starpat=3: Explore */filepat (search in current directory for filenames matching filepat) let starpat= 3 -" call Decho("(Explore) case starpat=3: Explore */filepat (starpat=".starpat.")") +" call Decho("case starpat=3: Explore */filepat (starpat=".starpat.")") elseif dirname=~ '^\*\*/' " starpat=4: Explore **/filepat (recursive descent search for filenames matching filepat) let starpat= 4 -" call Decho("(Explore) case starpat=4: Explore **/filepat (starpat=".starpat.")") +" call Decho("case starpat=4: Explore **/filepat (starpat=".starpat.")") else let starpat= 0 -" call Decho("(Explore) case starpat=0: default") +" call Decho("case starpat=0: default") endif if starpat == 0 && a:indx >= 0 " [Explore Hexplore Vexplore Sexplore] [dirname] -" call Decho("(Explore) case starpat==0 && a:indx=".a:indx.": dirname<".dirname.">, handles Explore Hexplore Vexplore Sexplore") +" call Decho("case starpat==0 && a:indx=".a:indx.": dirname<".dirname.">, handles Explore Hexplore Vexplore Sexplore") if dirname == "" let dirname= curfiledir -" call Decho("(Explore) ..empty dirname, using current file's directory<".dirname.">") +" call Decho("..empty dirname, using current file's directory<".dirname.">") endif if dirname =~ '^scp://' || dirname =~ '^ftp://' call netrw#Nread(2,dirname) @@ -914,15 +756,17 @@ if dirname == "" let dirname= getcwd() elseif (has("win32") || has("win95") || has("win64") || has("win16")) && !g:netrw_cygwin - if dirname !~ '^[a-zA-Z]:' + " Windows : check for a drive specifier, or else for a remote share name ('\\Foo' or '//Foo', + " depending on whether backslashes have been converted to forward slashes by earlier code). + if dirname !~ '^[a-zA-Z]:' && dirname !~ '^\\\\\w\+' && dirname !~ '^//\w\+' let dirname= b:netrw_curdir."/".dirname endif elseif dirname !~ '^/' let dirname= b:netrw_curdir."/".dirname endif -" call Decho("(Explore) ..calling LocalBrowseCheck(dirname<".dirname.">)") +" call Decho("..calling LocalBrowseCheck(dirname<".dirname.">)") call netrw#LocalBrowseCheck(dirname) -" call Decho("(Explore) win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly) +" call Decho("win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly) endif if exists("w:netrw_bannercnt") " done to handle P08-Ingelrest. :Explore will _Always_ go to the line just after the banner. @@ -930,7 +774,7 @@ exe w:netrw_bannercnt endif -" call Decho("(Explore) curdir<".curdir.">") +" call Decho("curdir<".curdir.">") " --------------------------------------------------------------------- " Jan 24, 2013: not sure why the following was present. See P08-Ingelrest " if has("win32") || has("win95") || has("win64") || has("win16") @@ -946,30 +790,32 @@ " starpat=4: Explore **/filepat (recursive descent search for filenames matching filepat) elseif a:indx <= 0 " Nexplore, Pexplore, Explore: handle starpat -" call Decho("(Explore) case a:indx<=0: Nexplore, Pexplore, , starpat=".starpat." a:indx=".a:indx) +" call Decho("case a:indx<=0: Nexplore, Pexplore, , starpat=".starpat." a:indx=".a:indx) if !mapcheck("","n") && !mapcheck("","n") && exists("b:netrw_curdir") -" call Decho("(Explore) ..set up and maps") +" call Decho("..set up and maps") let s:didstarstar= 1 nnoremap :Pexplore nnoremap :Nexplore endif if has("path_extra") -" call Decho("(Explore) ..starpat=".starpat.": has +path_extra") +" call Decho("..starpat=".starpat.": has +path_extra") if !exists("w:netrw_explore_indx") let w:netrw_explore_indx= 0 endif let indx = a:indx -" call Decho("(Explore) ..starpat=".starpat.": set indx= [a:indx=".indx."]") +" call Decho("..starpat=".starpat.": set indx= [a:indx=".indx."]") if indx == -1 " Nexplore -" call Decho("(Explore) ..case Nexplore with starpat=".starpat.": (indx=".indx.")") +" call Decho("..case Nexplore with starpat=".starpat.": (indx=".indx.")") if !exists("w:netrw_explore_list") " sanity check keepj call netrw#ErrorMsg(s:WARNING,"using Nexplore or improperly; see help for netrw-starstar",40) - sil! let @* = keepregstar - sil! let @+ = keepregstar + if has("clipboard") + sil! let @* = keepregstar + sil! let @+ = keepregstar + endif sil! let @/ = keepregslash " call Dret("netrw#Explore") return @@ -978,21 +824,23 @@ if indx < 0 | let indx= 0 | endif if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif let curfile= w:netrw_explore_list[indx] -" call Decho("(Explore) ....indx=".indx." curfile<".curfile.">") +" call Decho("....indx=".indx." curfile<".curfile.">") while indx < w:netrw_explore_listlen && curfile == w:netrw_explore_list[indx] let indx= indx + 1 -" call Decho("(Explore) ....indx=".indx." (Nexplore while loop)") +" call Decho("....indx=".indx." (Nexplore while loop)") endwhile if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif -" call Decho("(Explore) ....Nexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx) +" call Decho("....Nexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx) elseif indx == -2 " Pexplore -" call Decho("(Explore) case Pexplore with starpat=".starpat.": (indx=".indx.")") +" call Decho("case Pexplore with starpat=".starpat.": (indx=".indx.")") if !exists("w:netrw_explore_list") " sanity check keepj call netrw#ErrorMsg(s:WARNING,"using Pexplore or improperly; see help for netrw-starstar",41) - sil! let @* = keepregstar - sil! let @+ = keepregstar + if has("clipboard") + sil! let @* = keepregstar + sil! let @+ = keepregstar + endif sil! let @/ = keepregslash " call Dret("netrw#Explore") return @@ -1001,30 +849,30 @@ if indx < 0 | let indx= 0 | endif if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif let curfile= w:netrw_explore_list[indx] -" call Decho("(Explore) ....indx=".indx." curfile<".curfile.">") +" call Decho("....indx=".indx." curfile<".curfile.">") while indx >= 0 && curfile == w:netrw_explore_list[indx] let indx= indx - 1 -" call Decho("(Explore) ....indx=".indx." (Pexplore while loop)") +" call Decho("....indx=".indx." (Pexplore while loop)") endwhile if indx < 0 | let indx= 0 | endif -" call Decho("(Explore) ....Pexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx) +" call Decho("....Pexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx) else " Explore -- initialize " build list of files to Explore with Nexplore/Pexplore -" call Decho("(Explore) ..starpat=".starpat.": case Explore: initialize (indx=".indx.")") +" call Decho("..starpat=".starpat.": case Explore: initialize (indx=".indx.")") keepj keepalt call s:NetrwClearExplore() let w:netrw_explore_indx= 0 if !exists("b:netrw_curdir") let b:netrw_curdir= getcwd() endif -" call Decho("(Explore) ....starpat=".starpat.": b:netrw_curdir<".b:netrw_curdir.">") +" call Decho("....starpat=".starpat.": b:netrw_curdir<".b:netrw_curdir.">") " switch on starpat to build the w:netrw_explore_list of files if starpat == 1 " starpat=1: Explore *//pattern (current directory only search for files containing pattern) -" call Decho("(Explore) ..case starpat=".starpat.": build *//pattern list (curdir-only srch for files containing pattern) &hls=".&hls) -" call Decho("(Explore) ....pattern<".pattern.">") +" call Decho("..case starpat=".starpat.": build *//pattern list (curdir-only srch for files containing pattern) &hls=".&hls) +" call Decho("....pattern<".pattern.">") try exe "keepj noautocmd vimgrep /".pattern."/gj ".fnameescape(b:netrw_curdir)."/*" catch /^Vim\%((\a\+)\)\=:E480/ @@ -1037,15 +885,17 @@ elseif starpat == 2 " starpat=2: Explore **//pattern (recursive descent search for files containing pattern) -" call Decho("(Explore) ..case starpat=".starpat.": build **//pattern list (recursive descent files containing pattern)") -" call Decho("(Explore) ....pattern<".pattern.">") +" call Decho("..case starpat=".starpat.": build **//pattern list (recursive descent files containing pattern)") +" call Decho("....pattern<".pattern.">") try exe "sil keepj noautocmd keepalt vimgrep /".pattern."/gj "."**/*" catch /^Vim\%((\a\+)\)\=:E480/ keepalt call netrw#ErrorMsg(s:WARNING,'no files matched pattern<'.pattern.'>',45) if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif - sil! let @* = keepregstar - sil! let @+ = keepregstar + if has("clipboard") + sil! let @* = keepregstar + sil! let @+ = keepregstar + endif sil! let @/ = keepregslash " call Dret("netrw#Explore : no files matched pattern") return @@ -1057,53 +907,55 @@ elseif starpat == 3 " starpat=3: Explore */filepat (search in current directory for filenames matching filepat) -" call Decho("(Explore) ..case starpat=".starpat.": build */filepat list (curdir-only srch filenames matching filepat) &hls=".&hls) +" call Decho("..case starpat=".starpat.": build */filepat list (curdir-only srch filenames matching filepat) &hls=".&hls) let filepat= substitute(dirname,'^\*/','','') let filepat= substitute(filepat,'^[%#<]','\\&','') -" call Decho("(Explore) ....b:netrw_curdir<".b:netrw_curdir.">") -" call Decho("(Explore) ....filepat<".filepat.">") +" call Decho("....b:netrw_curdir<".b:netrw_curdir.">") +" call Decho("....filepat<".filepat.">") let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".filepat),'\n')) if &hls | let keepregslash= s:ExplorePatHls(filepat) | endif elseif starpat == 4 " starpat=4: Explore **/filepat (recursive descent search for filenames matching filepat) -" call Decho("(Explore) ..case starpat=".starpat.": build **/filepat list (recursive descent srch filenames matching filepat) &hls=".&hls) +" call Decho("..case starpat=".starpat.": build **/filepat list (recursive descent srch filenames matching filepat) &hls=".&hls) let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".dirname),'\n')) if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif endif " switch on starpat to build w:netrw_explore_list let w:netrw_explore_listlen = len(w:netrw_explore_list) -" call Decho("(Explore) ....w:netrw_explore_list<".string(w:netrw_explore_list).">") -" call Decho("(Explore) ....w:netrw_explore_listlen=".w:netrw_explore_listlen) +" call Decho("....w:netrw_explore_list<".string(w:netrw_explore_list).">") +" call Decho("....w:netrw_explore_listlen=".w:netrw_explore_listlen) if w:netrw_explore_listlen == 0 || (w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/') keepalt keepj call netrw#ErrorMsg(s:WARNING,"no files matched",42) - sil! let @* = keepregstar - sil! let @+ = keepregstar - sil! let @/ = keepregslash -" call Dret("netrw#Explore : no files matched") + if has("clipboard") + sil! let @* = keepregstar + sil! let @+ = keepregstar + endif + sil! let @/ = keepregslash +" call Dret("netrw#Explore : no files matched") return endif endif " if indx ... endif " NetrwStatusLine support - for exploring support let w:netrw_explore_indx= indx -" call Decho("(Explore) ....w:netrw_explore_list<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen) +" call Decho("....w:netrw_explore_list<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen) " wrap the indx around, but issue a note if indx >= w:netrw_explore_listlen || indx < 0 -" call Decho("(Explore) ....wrap indx (indx=".indx." listlen=".w:netrw_explore_listlen.")") +" call Decho("....wrap indx (indx=".indx." listlen=".w:netrw_explore_listlen.")") let indx = (indx < 0)? ( w:netrw_explore_listlen - 1 ) : 0 let w:netrw_explore_indx= indx keepalt keepj call netrw#ErrorMsg(s:NOTE,"no more files match Explore pattern",43) endif exe "let dirfile= w:netrw_explore_list[".indx."]" -" call Decho("(Explore) ....dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">") +" call Decho("....dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">") let newdir= substitute(dirfile,'/[^/]*$','','e') -" call Decho("(Explore) ....newdir<".newdir.">") +" call Decho("....newdir<".newdir.">") -" call Decho("(Explore) ....calling LocalBrowseCheck(newdir<".newdir.">)") +" call Decho("....calling LocalBrowseCheck(newdir<".newdir.">)") call netrw#LocalBrowseCheck(newdir) if !exists("w:netrw_liststyle") let w:netrw_liststyle= g:netrw_liststyle @@ -1117,22 +969,24 @@ let w:netrw_explore_bufnr = bufnr("%") let w:netrw_explore_line = line(".") keepalt keepj call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}') -" call Decho("(Explore) ....explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line) +" call Decho("....explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line) else -" call Decho("(Explore) ..your vim does not have +path_extra") +" call Decho("..your vim does not have +path_extra") if !exists("g:netrw_quiet") keepalt keepj call netrw#ErrorMsg(s:WARNING,"your vim needs the +path_extra feature for Exploring with **!",44) endif - sil! let @* = keepregstar - sil! let @+ = keepregstar + if has("clipboard") + sil! let @* = keepregstar + sil! let @+ = keepregstar + endif sil! let @/ = keepregslash " call Dret("netrw#Explore : missing +path_extra") return endif else -" call Decho("(Explore) ..default case: Explore newdir<".dirname.">") +" call Decho("..default case: Explore newdir<".dirname.">") if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && dirname =~ '/' sil! unlet w:netrw_treedict sil! unlet w:netrw_treetop @@ -1146,22 +1000,22 @@ endif " visual display of **/ **// */ Exploration files -" call Decho("(Explore) w:netrw_explore_indx=".(exists("w:netrw_explore_indx")? w:netrw_explore_indx : "doesn't exist")) -" call Decho("(Explore) b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "n/a").">") +" call Decho("w:netrw_explore_indx=".(exists("w:netrw_explore_indx")? w:netrw_explore_indx : "doesn't exist")) +" call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "n/a").">") if exists("w:netrw_explore_indx") && exists("b:netrw_curdir") -" call Decho("(Explore) s:explore_prvdir<".(exists("s:explore_prvdir")? s:explore_prvdir : "-doesn't exist-")) +" call Decho("s:explore_prvdir<".(exists("s:explore_prvdir")? s:explore_prvdir : "-doesn't exist-")) if !exists("s:explore_prvdir") || s:explore_prvdir != b:netrw_curdir - " only update match list if current directory isn't the same as before -" call Decho("(Explore) only update match list if current directory not the same as before") + " only update match list when current directory isn't the same as before +" call Decho("only update match list when current directory not the same as before") let s:explore_prvdir = b:netrw_curdir let s:explore_match = "" - let dirlen = s:Strlen(b:netrw_curdir) + let dirlen = strlen(b:netrw_curdir) if b:netrw_curdir !~ '/$' let dirlen= dirlen + 1 endif let prvfname= "" for fname in w:netrw_explore_list -" call Decho("(Explore) fname<".fname.">") +" call Decho("fname<".fname.">") if fname =~ '^'.b:netrw_curdir if s:explore_match == "" let s:explore_match= '\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>' @@ -1177,7 +1031,7 @@ endif let prvfname= fname endfor -" call Decho("(Explore) explore_match<".s:explore_match.">") +" call Decho("explore_match<".s:explore_match.">") exe "2match netrwMarkFile /".s:explore_match."/" endif echo "==Pexplore ==Nexplore" @@ -1186,47 +1040,76 @@ if exists("s:explore_match") | unlet s:explore_match | endif if exists("s:explore_prvdir") | unlet s:explore_prvdir | endif echo " " -" call Decho("(Explore) cleared explore match list") +" call Decho("cleared explore match list") endif - sil! let @* = keepregstar - sil! let @+ = keepregstar + " since Explore may be used to initialize netrw's browser, + " there's no danger of a late FocusGained event on initialization. + " Consequently, set s:netrw_events to 2. + let s:netrw_events= 2 + if has("clipboard") + sil! let @* = keepregstar + sil! let @+ = keepregstar + endif sil! let @/ = keepregslash " call Dret("netrw#Explore : @/<".@/.">") endfun " --------------------------------------------------------------------- -" netrw#NetrwMakeTgt: make a target out of the directory name provided {{{2 -fun! netrw#NetrwMakeTgt(dname) -" call Dfunc("netrw#NetrwMakeTgt(dname<".a:dname.">)") - " simplify the target (eg. /abc/def/../ghi -> /abc/ghi) - let svpos = netrw#NetrwSavePosn() - let s:netrwmftgt_islocal= (a:dname !~ '^\a\+://') -" call Decho("s:netrwmftgt_islocal=".s:netrwmftgt_islocal) - if s:netrwmftgt_islocal - let netrwmftgt= simplify(a:dname) - else - let netrwmftgt= a:dname +" netrw#Lexplore: toggle Explorer window, keeping it on the left of the current tab {{{2 +fun! netrw#Lexplore(...) +" call Dfunc("netrw#Lexplore() a:0=".a:0) + if a:0 > 0 && a:1 != "" + " if a netrw window is already on the left-side of the tab + " and a directory has been specified, explore with that + " directory. + let lexwinnr= winnr() + exe "1wincmd w" + if &ft == "netrw" + exe "Explore ".fnameescape(a:1) + exe lexwinnr."wincmd w" + endif + exe lexwinnr."wincmd w" +" call Dret("netrw#Lexplore") + return endif - if exists("s:netrwmftgt") && netrwmftgt == s:netrwmftgt - " re-selected target, so just clear it - unlet s:netrwmftgt s:netrwmftgt_islocal + + if exists("t:netrw_lexbufnr") + " close down netrw explorer window + let lexwinnr = bufwinnr(t:netrw_lexbufnr) + if lexwinnr != -1 + let curwin = winnr() + exe lexwinnr."wincmd w" + close + exe curwin."wincmd w" + endif + unlet t:netrw_lexbufnr + else - let s:netrwmftgt= netrwmftgt + " open netrw explorer window + exe "1wincmd w" + let keep_altv = g:netrw_altv + let g:netrw_altv = 0 + if a:0 > 0 && a:1 != "" + exe "Vexplore ".fnameescape(a:1) + else + Vexplore . + endif + let g:netrw_altv = keep_altv + let t:netrw_lexbufnr = bufnr("%") endif - if g:netrw_fastbrowse <= 1 - call s:NetrwRefresh((b:netrw_curdir !~ '\a\+://'),b:netrw_curdir) + if exists("g:netrw_chgwin") && g:netrw_chgwin == -1 + let g:netrw_chgwin= 2 endif - call netrw#NetrwRestorePosn(svpos) -" call Dret("netrw#NetrwMakeTgt") +" call Dret("netrw#Lexplore") endfun " --------------------------------------------------------------------- -" netrw#NetrwClean: remove netrw {{{2 +" netrw#Clean: remove netrw {{{2 " supports :NetrwClean -- remove netrw from first directory on runtimepath " :NetrwClean! -- remove netrw from all directories on runtimepath -fun! netrw#NetrwClean(sys) -" call Dfunc("netrw#NetrwClean(sys=".a:sys.")") +fun! netrw#Clean(sys) +" call Dfunc("netrw#Clean(sys=".a:sys.")") if a:sys let choice= confirm("Remove personal and system copies of netrw?","&Yes\n&No") @@ -1264,28 +1147,44 @@ endif echohl None -" call Dret("netrw#NetrwClean") +" call Dret("netrw#Clean") endfun " --------------------------------------------------------------------- -" netrw#Nread: {{{2 -fun! netrw#Nread(mode,fname) -" call Dfunc("netrw#Nread(mode=".a:mode." fname<".a:fname.">)") - call netrw#NetrwSavePosn() - call netrw#NetRead(a:mode,a:fname) - call netrw#NetrwRestorePosn() -" call Dret("netrw#Nread") +" netrw#MakeTgt: make a target out of the directory name provided {{{2 +fun! netrw#MakeTgt(dname) +" call Dfunc("netrw#MakeTgt(dname<".a:dname.">)") + " simplify the target (eg. /abc/def/../ghi -> /abc/ghi) + let svpos = netrw#SavePosn() + let s:netrwmftgt_islocal= (a:dname !~ '^\a\+://') +" call Decho("s:netrwmftgt_islocal=".s:netrwmftgt_islocal) + if s:netrwmftgt_islocal + let netrwmftgt= simplify(a:dname) + else + let netrwmftgt= a:dname + endif + if exists("s:netrwmftgt") && netrwmftgt == s:netrwmftgt + " re-selected target, so just clear it + unlet s:netrwmftgt s:netrwmftgt_islocal + else + let s:netrwmftgt= netrwmftgt + endif + if g:netrw_fastbrowse <= 1 + call s:NetrwRefresh((b:netrw_curdir !~ '\a\+://'),b:netrw_curdir) + endif + call netrw#RestorePosn(svpos) +" call Dret("netrw#MakeTgt") endfun -" ------------------------------------------------------------------------ -" netrw#NetrwObtain: {{{2 -" netrw#NetrwObtain(islocal,fname[,tgtdirectory]) +" --------------------------------------------------------------------- +" netrw#Obtain: {{{2 +" netrw#Obtain(islocal,fname[,tgtdirectory]) " islocal=0 obtain from remote source " =1 obtain from local source " fname : a filename or a list of filenames " tgtdir : optional place where files are to go (not present, uses getcwd()) -fun! netrw#NetrwObtain(islocal,fname,...) -" call Dfunc("netrw#NetrwObtain(islocal=".a:islocal." fname<".((type(a:fname) == 1)? a:fname : string(a:fname)).">) a:0=".a:0) +fun! netrw#Obtain(islocal,fname,...) +" call Dfunc("netrw#Obtain(islocal=".a:islocal." fname<".((type(a:fname) == 1)? a:fname : string(a:fname)).">) a:0=".a:0) " NetrwStatusLine support - for obtaining support if type(a:fname) == 1 @@ -1294,7 +1193,7 @@ let fnamelist= a:fname else call netrw#ErrorMsg(s:ERROR,"attempting to use NetrwObtain on something not a filename or a list",62) -" call Dret("netrw#NetrwObtain") +" call Dret("netrw#Obtain") return endif " call Decho("fnamelist<".string(fnamelist).">") @@ -1471,8 +1370,29 @@ keepj call netrw#ErrorMsg(s:ERROR,getline(1),5) endif endif + + elseif b:netrw_method == 9 + " obtain file using sftp +" call Decho("obtain via sftp (method #9)") + if a:fname =~ '/' + let localfile= substitute(a:fname,'^.*/','','') + else + let localfile= a:fname + endif +" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1).shellescape(localfile)." ".shellescape(tgtdir)) + exe s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1).shellescape(localfile)." ".shellescape(tgtdir) + elseif !exists("b:netrw_method") || b:netrw_method < 0 -" call Dfunc("netrw#NetrwObtain : unsupported method") + " probably a badly formed url; protocol not recognized +" call Dret("netrw#Obtain : unsupported method") + return + + else + " protocol recognized but not supported for Obtain (yet?) + if !exists("g:netrw_quiet") + keepj call netrw#ErrorMsg(s:ERROR,"current protocol not supported for obtaining file",97) + endif +" call Dret("netrw#Obtain : current protocol not supported for obtaining file") return endif @@ -1492,107 +1412,387 @@ endif endif -" call Dret("netrw#NetrwObtain") +" call Dret("netrw#Obtain") endfun " --------------------------------------------------------------------- -" NetrwStatusLine: {{{2 -fun! NetrwStatusLine() - -" vvv NetrwStatusLine() debugging vvv -" let g:stlmsg="" -" if !exists("w:netrw_explore_bufnr") -" let g:stlmsg="!X" -" elseif w:netrw_explore_bufnr != bufnr("%") -" let g:stlmsg="explore_bufnr!=".bufnr("%") -" endif -" if !exists("w:netrw_explore_line") -" let g:stlmsg=" !X" -" elseif w:netrw_explore_line != line(".") -" let g:stlmsg=" explore_line!={line(.)<".line(".").">" -" endif -" if !exists("w:netrw_explore_list") -" let g:stlmsg=" !X" -" endif -" ^^^ NetrwStatusLine() debugging ^^^ +" netrw#Nread: save position, call netrw#NetRead(), and restore position {{{2 +fun! netrw#Nread(mode,fname) +" call Dfunc("netrw#Nread(mode=".a:mode." fname<".a:fname.">)") + call netrw#SavePosn() + call netrw#NetRead(a:mode,a:fname) + call netrw#RestorePosn() - if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list") - " restore user's status line - let &stl = s:netrw_users_stl - let &laststatus = s:netrw_users_ls - if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif - if exists("w:netrw_explore_line") |unlet w:netrw_explore_line |endif - return "" - else - return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen + if exists("w:netrw_liststyle") && w:netrw_liststyle != s:TREELIST + if exists("w:netrw_bannercnt") + " start with cursor just after the banner + exe w:netrw_bannercnt + endif endif +" call Dret("netrw#Nread") endfun -" --------------------------------------------------------------------- -" Netrw Transfer Functions: {{{1 -" =============================== - " ------------------------------------------------------------------------ -" netrw#NetRead: responsible for reading a file over the net {{{2 -" mode: =0 read remote file and insert before current line -" =1 read remote file and insert after current line -" =2 replace with remote file -" =3 obtain file, but leave in temporary format -fun! netrw#NetRead(mode,...) -" call Dfunc("netrw#NetRead(mode=".a:mode.",...) a:0=".a:0." ".g:loaded_netrw.((a:0 > 0)? " a:1<".a:1.">" : "")) - - " NetRead: save options {{{3 - call s:NetrwOptionSave("w:") - call s:NetrwSafeOptions() - call s:RestoreCursorline() +" s:NetrwOptionRestore: restore options (based on prior s:NetrwOptionSave) {{{2 +fun! s:NetrwOptionRestore(vt) +" call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> winnr($)=".winnr("$")) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo." a:vt=".a:vt) + if !exists("{a:vt}netrw_optionsave") + if exists("s:nbcd_curpos_{bufnr('%')}") +" call Decho("restoring previous position (s:nbcd_curpos_".bufnr('%')." exists)") + keepj call netrw#RestorePosn(s:nbcd_curpos_{bufnr('%')}) +" call Decho("win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> winnr($)=".winnr("$")) +" call Decho("unlet s:nbcd_curpos_".bufnr('%')) + unlet s:nbcd_curpos_{bufnr('%')} + else +" call Decho("no previous position") + endif +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo." a:vt=".a:vt) +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Dret("s:NetrwOptionRestore : ".a:vt."netrw_optionsave doesn't exist") + return + endif + unlet {a:vt}netrw_optionsave - " NetRead: interpret mode into a readcmd {{{3 - if a:mode == 0 " read remote file before current line - let readcmd = "0r" - elseif a:mode == 1 " read file after current line - let readcmd = "r" - elseif a:mode == 2 " replace with remote file - let readcmd = "%r" - elseif a:mode == 3 " skip read of file (leave as temporary) - let readcmd = "t" + if exists("+acd") + if exists("{a:vt}netrw_acdkeep") +" call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd) + let curdir = getcwd() + let &l:acd = {a:vt}netrw_acdkeep + unlet {a:vt}netrw_acdkeep + if &l:acd + call s:NetrwLcd(curdir) + endif + endif + endif + if exists("{a:vt}netrw_aikeep") |let &l:ai = {a:vt}netrw_aikeep |unlet {a:vt}netrw_aikeep |endif + if exists("{a:vt}netrw_awkeep") |let &l:aw = {a:vt}netrw_awkeep |unlet {a:vt}netrw_awkeep |endif + if g:netrw_liststyle != s:TREELIST + if exists("{a:vt}netrw_bhkeep") |let &l:bh = {a:vt}netrw_bhkeep |unlet {a:vt}netrw_bhkeep |endif + endif + if exists("{a:vt}netrw_blkeep") |let &l:bl = {a:vt}netrw_blkeep |unlet {a:vt}netrw_blkeep |endif + if exists("{a:vt}netrw_btkeep") |let &l:bt = {a:vt}netrw_btkeep |unlet {a:vt}netrw_btkeep |endif + if exists("{a:vt}netrw_bombkeep") |let &l:bomb = {a:vt}netrw_bombkeep |unlet {a:vt}netrw_bombkeep |endif + if exists("{a:vt}netrw_cedit") |let &cedit = {a:vt}netrw_cedit |unlet {a:vt}netrw_cedit |endif + if exists("{a:vt}netrw_cikeep") |let &l:ci = {a:vt}netrw_cikeep |unlet {a:vt}netrw_cikeep |endif + if exists("{a:vt}netrw_cinkeep") |let &l:cin = {a:vt}netrw_cinkeep |unlet {a:vt}netrw_cinkeep |endif + if exists("{a:vt}netrw_cinokeep") |let &l:cino = {a:vt}netrw_cinokeep |unlet {a:vt}netrw_cinokeep |endif + if exists("{a:vt}netrw_comkeep") |let &l:com = {a:vt}netrw_comkeep |unlet {a:vt}netrw_comkeep |endif + if exists("{a:vt}netrw_cpokeep") |let &l:cpo = {a:vt}netrw_cpokeep |unlet {a:vt}netrw_cpokeep |endif + if exists("{a:vt}netrw_diffkeep") |let &l:diff = {a:vt}netrw_diffkeep |unlet {a:vt}netrw_diffkeep |endif + if exists("{a:vt}netrw_fenkeep") |let &l:fen = {a:vt}netrw_fenkeep |unlet {a:vt}netrw_fenkeep |endif + if exists("{a:vt}netrw_ffkeep") |let &l:ff = {a:vt}netrw_ffkeep |unlet {a:vt}netrw_ffkeep |endif + if exists("{a:vt}netrw_fokeep") |let &l:fo = {a:vt}netrw_fokeep |unlet {a:vt}netrw_fokeep |endif + if exists("{a:vt}netrw_gdkeep") |let &l:gd = {a:vt}netrw_gdkeep |unlet {a:vt}netrw_gdkeep |endif + if exists("{a:vt}netrw_hidkeep") |let &l:hidden = {a:vt}netrw_hidkeep |unlet {a:vt}netrw_hidkeep |endif + if exists("{a:vt}netrw_imkeep") |let &l:im = {a:vt}netrw_imkeep |unlet {a:vt}netrw_imkeep |endif + if exists("{a:vt}netrw_iskkeep") |let &l:isk = {a:vt}netrw_iskkeep |unlet {a:vt}netrw_iskkeep |endif + if exists("{a:vt}netrw_lskeep") |let &l:ls = {a:vt}netrw_lskeep |unlet {a:vt}netrw_lskeep |endif + if exists("{a:vt}netrw_makeep") |let &l:ma = {a:vt}netrw_makeep |unlet {a:vt}netrw_makeep |endif + if exists("{a:vt}netrw_magickeep")|let &l:magic = {a:vt}netrw_magickeep |unlet {a:vt}netrw_magickeep|endif + if exists("{a:vt}netrw_modkeep") |let &l:mod = {a:vt}netrw_modkeep |unlet {a:vt}netrw_modkeep |endif + if exists("{a:vt}netrw_nukeep") |let &l:nu = {a:vt}netrw_nukeep |unlet {a:vt}netrw_nukeep |endif + if exists("{a:vt}netrw_rnukeep") |let &l:rnu = {a:vt}netrw_rnukeep |unlet {a:vt}netrw_rnukeep |endif + if exists("{a:vt}netrw_repkeep") |let &l:report = {a:vt}netrw_repkeep |unlet {a:vt}netrw_repkeep |endif + if exists("{a:vt}netrw_rokeep") |let &l:ro = {a:vt}netrw_rokeep |unlet {a:vt}netrw_rokeep |endif + if exists("{a:vt}netrw_selkeep") |let &l:sel = {a:vt}netrw_selkeep |unlet {a:vt}netrw_selkeep |endif + if exists("{a:vt}netrw_spellkeep")|let &l:spell = {a:vt}netrw_spellkeep |unlet {a:vt}netrw_spellkeep|endif + if has("clipboard") + if exists("{a:vt}netrw_starkeep") |let @* = {a:vt}netrw_starkeep |unlet {a:vt}netrw_starkeep |endif + endif + " Problem: start with liststyle=0; press : result, following line resets l:ts. +" if exists("{a:vt}netrw_tskeep") |let &l:ts = {a:vt}netrw_tskeep |unlet {a:vt}netrw_tskeep |endif + if exists("{a:vt}netrw_twkeep") |let &l:tw = {a:vt}netrw_twkeep |unlet {a:vt}netrw_twkeep |endif + if exists("{a:vt}netrw_wigkeep") |let &l:wig = {a:vt}netrw_wigkeep |unlet {a:vt}netrw_wigkeep |endif + if exists("{a:vt}netrw_wrapkeep") |let &l:wrap = {a:vt}netrw_wrapkeep |unlet {a:vt}netrw_wrapkeep |endif + if exists("{a:vt}netrw_writekeep")|let &l:write = {a:vt}netrw_writekeep |unlet {a:vt}netrw_writekeep|endif + if exists("s:yykeep") |let @@ = s:yykeep |unlet s:yykeep |endif + if exists("{a:vt}netrw_swfkeep") + if &directory == "" + " user hasn't specified a swapfile directory; + " netrw will temporarily set the swapfile directory + " to the current directory as returned by getcwd(). + let &l:directory= getcwd() + sil! let &l:swf = {a:vt}netrw_swfkeep + setl directory= + unlet {a:vt}netrw_swfkeep + elseif &l:swf != {a:vt}netrw_swfkeep + " following line causes a Press ENTER in windows -- can't seem to work around it!!! + sil! let &l:swf= {a:vt}netrw_swfkeep + unlet {a:vt}netrw_swfkeep + endif + endif + if exists("{a:vt}netrw_dirkeep") && isdirectory({a:vt}netrw_dirkeep) && g:netrw_keepdir + let dirkeep = substitute({a:vt}netrw_dirkeep,'\\','/','g') + if exists("{a:vt}netrw_dirkeep") + call s:NetrwLcd(dirkeep) + unlet {a:vt}netrw_dirkeep + endif + endif + if has("clipboard") + if exists("{a:vt}netrw_regstar") |sil! let @*= {a:vt}netrw_regstar |unlet {a:vt}netrw_regstar |endif + endif + if exists("{a:vt}netrw_regslash")|sil! let @/= {a:vt}netrw_regslash|unlet {a:vt}netrw_regslash|endif + if exists("s:nbcd_curpos_{bufnr('%')}") +" call Decho("restoring previous position (s:nbcd_curpos_".bufnr('%')." exists)") + keepj call netrw#RestorePosn(s:nbcd_curpos_{bufnr('%')}) +" call Decho("unlet s:nbcd_curpos_".bufnr('%')) + if exists("s:nbcd_curpos_".bufnr('%')) + unlet s:nbcd_curpos_{bufnr('%')} + endif else - exe a:mode - let readcmd = "r" +" call Decho("no previous position") endif - let ichoice = (a:0 == 0)? 0 : 1 -" call Decho("readcmd<".readcmd."> ichoice=".ichoice) - " NetRead: get temporary filename {{{3 - let tmpfile= s:GetTempfile("") - if tmpfile == "" -" call Dret("netrw#NetRead : unable to get a tempfile!") - return +" call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd) +" call Decho("fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist")) +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("diff=".&l:diff." win#".winnr()." w:netrw_diffkeep=".(exists("w:netrw_diffkeep")? w:netrw_diffkeep : "doesn't exist")) +" call Decho("ts=".&l:ts) + " Moved the filetype detect here from NetrwGetFile() because remote files + " were having their filetype detect-generated settings overwritten by + " NetrwOptionRestore. + if &ft != "netrw" +" call Decho("filetype detect (ft=".&ft.")") + filetype detect endif +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo." a:vt=".a:vt) +" call Dret("s:NetrwOptionRestore : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly) +endfun - while ichoice <= a:0 - - " attempt to repeat with previous host-file-etc - if exists("b:netrw_lastfile") && a:0 == 0 -" call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">") - let choice = b:netrw_lastfile - let ichoice= ichoice + 1 +" --------------------------------------------------------------------- +" s:NetrwOptionSave: save options prior to setting to "netrw-buffer-standard" form {{{2 +" Options get restored by s:NetrwOptionRestore() +" 06/08/07 : removed call to NetrwSafeOptions(), either placed +" immediately after NetrwOptionSave() calls in NetRead +" and NetWrite, or after the s:NetrwEnew() call in +" NetrwBrowse. +" vt: normally its "w:" or "s:" (a variable type) +fun! s:NetrwOptionSave(vt) +" call Dfunc("s:NetrwOptionSave(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">"." winnr($)=".winnr("$")." mod=".&mod." ma=".&ma) +" call Decho(a:vt."netrw_optionsave".(exists("{a:vt}netrw_optionsave")? ("=".{a:vt}netrw_optionsave) : " doesn't exist")) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo." a:vt=".a:vt) - else - exe "let choice= a:" . ichoice -" call Decho("no lastfile: choice<" . choice . ">") + if !exists("{a:vt}netrw_optionsave") + let {a:vt}netrw_optionsave= 1 + else +" call Dret("s:NetrwOptionSave : options already saved") + return + endif +" call Decho("prior to save: fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist")." diff=".&l:diff) - if match(choice,"?") == 0 - " give help - echomsg 'NetRead Usage:' - echomsg ':Nread machine:path uses rcp' - echomsg ':Nread "machine path" uses ftp with <.netrc>' - echomsg ':Nread "machine id password path" uses ftp' - echomsg ':Nread dav://machine[:port]/path uses cadaver' - echomsg ':Nread fetch://machine/path uses fetch' - echomsg ':Nread ftp://[user@]machine[:port]/path uses ftp autodetects <.netrc>' - echomsg ':Nread http://[user@]machine/path uses http wget' - echomsg ':Nread rcp://[user@]machine/path uses rcp' - echomsg ':Nread rsync://machine[:port]/path uses rsync' + " Save current settings and current directory +" call Decho("saving current settings and current directory") + let s:yykeep = @@ + if exists("&l:acd")|let {a:vt}netrw_acdkeep = &l:acd|endif + let {a:vt}netrw_aikeep = &l:ai + let {a:vt}netrw_awkeep = &l:aw + let {a:vt}netrw_bhkeep = &l:bh + let {a:vt}netrw_blkeep = &l:bl + let {a:vt}netrw_btkeep = &l:bt + let {a:vt}netrw_bombkeep = &l:bomb + let {a:vt}netrw_cedit = &cedit + let {a:vt}netrw_cikeep = &l:ci + let {a:vt}netrw_cinkeep = &l:cin + let {a:vt}netrw_cinokeep = &l:cino + let {a:vt}netrw_comkeep = &l:com + let {a:vt}netrw_cpokeep = &l:cpo + let {a:vt}netrw_diffkeep = &l:diff + let {a:vt}netrw_fenkeep = &l:fen + if !exists("g:netrw_ffkeep") || g:netrw_ffkeep == 1 + let {a:vt}netrw_ffkeep = &l:ff + endif + let {a:vt}netrw_fokeep = &l:fo " formatoptions + let {a:vt}netrw_gdkeep = &l:gd " gdefault + let {a:vt}netrw_hidkeep = &l:hidden + let {a:vt}netrw_imkeep = &l:im + let {a:vt}netrw_iskkeep = &l:isk + let {a:vt}netrw_lskeep = &l:ls + let {a:vt}netrw_makeep = &l:ma + let {a:vt}netrw_magickeep = &l:magic + let {a:vt}netrw_modkeep = &l:mod + let {a:vt}netrw_nukeep = &l:nu + let {a:vt}netrw_rnukeep = &l:rnu + let {a:vt}netrw_repkeep = &l:report + let {a:vt}netrw_rokeep = &l:ro + let {a:vt}netrw_selkeep = &l:sel + let {a:vt}netrw_spellkeep = &l:spell + if g:netrw_use_noswf + let {a:vt}netrw_swfkeep = &l:swf + endif + if has("clipboard") + let {a:vt}netrw_starkeep = @* + endif + let {a:vt}netrw_tskeep = &l:ts + let {a:vt}netrw_twkeep = &l:tw " textwidth + let {a:vt}netrw_wigkeep = &l:wig " wildignore + let {a:vt}netrw_wrapkeep = &l:wrap + let {a:vt}netrw_writekeep = &l:write + + " save a few selected netrw-related variables +" call Decho("saving a few selected netrw-related variables") + if g:netrw_keepdir + let {a:vt}netrw_dirkeep = getcwd() + endif + if has("clipboard") + if &go =~# 'a' | sil! let {a:vt}netrw_regstar = @* | endif + endif + sil! let {a:vt}netrw_regslash= @/ + +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo." a:vt=".a:vt) +" call Dret("s:NetrwOptionSave : tab#".tabpagenr()." win#".winnr()) +endfun + +" ------------------------------------------------------------------------ +" s:NetrwSafeOptions: sets options to help netrw do its job {{{2 +" Use s:NetrwSaveOptions() to save user settings +" Use s:NetrwOptionRestore() to restore user settings +fun! s:NetrwSafeOptions() +" call Dfunc("s:NetrwSafeOptions() win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%"))."> winnr($)=".winnr("$")) +" call Decho("win#".winnr()."'s ft=".&ft) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) + if exists("+acd") | setl noacd | endif + setl noai + setl noaw + setl nobl + setl nobomb + setl bt=nofile + setl noci + setl nocin + if g:netrw_liststyle == s:TREELIST + setl bh=hide + endif + setl cino= + setl com= + setl cpo-=a + setl cpo-=A + setl fo=nroql2 + setl nohid + setl noim + setl isk+=@ isk+=* isk+=/ + setl magic + if g:netrw_use_noswf + setl noswf + endif + setl report=10000 + setl sel=inclusive + setl nospell + setl tw=0 + setl wig= + setl cedit& + call s:NetrwCursor() + + " allow the user to override safe options +" call Decho("ft<".&ft."> ei=".&ei) + if &ft == "netrw" +" call Decho("do any netrw FileType autocmds (doau FileType netrw)") + sil! keepalt keepj doau FileType netrw + endif + +" call Decho("fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist")." bh=".&l:bh) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) +" call Dret("s:NetrwSafeOptions") +endfun + +" --------------------------------------------------------------------- +" NetrwStatusLine: {{{2 +fun! NetrwStatusLine() + +" vvv NetrwStatusLine() debugging vvv +" let g:stlmsg="" +" if !exists("w:netrw_explore_bufnr") +" let g:stlmsg="!X" +" elseif w:netrw_explore_bufnr != bufnr("%") +" let g:stlmsg="explore_bufnr!=".bufnr("%") +" endif +" if !exists("w:netrw_explore_line") +" let g:stlmsg=" !X" +" elseif w:netrw_explore_line != line(".") +" let g:stlmsg=" explore_line!={line(.)<".line(".").">" +" endif +" if !exists("w:netrw_explore_list") +" let g:stlmsg=" !X" +" endif +" ^^^ NetrwStatusLine() debugging ^^^ + + if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list") + " restore user's status line + let &stl = s:netrw_users_stl + let &laststatus = s:netrw_users_ls + if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif + if exists("w:netrw_explore_line") |unlet w:netrw_explore_line |endif + return "" + else + return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen + endif +endfun + +" --------------------------------------------------------------------- +" Netrw Transfer Functions: {{{1 +" =============================== + +" ------------------------------------------------------------------------ +" netrw#NetRead: responsible for reading a file over the net {{{2 +" mode: =0 read remote file and insert before current line +" =1 read remote file and insert after current line +" =2 replace with remote file +" =3 obtain file, but leave in temporary format +fun! netrw#NetRead(mode,...) +" call Dfunc("netrw#NetRead(mode=".a:mode.",...) a:0=".a:0." ".g:loaded_netrw.((a:0 > 0)? " a:1<".a:1.">" : "")) + + " NetRead: save options {{{3 + call s:NetrwOptionSave("w:") + call s:NetrwSafeOptions() + call s:RestoreCursorline() + + " NetRead: interpret mode into a readcmd {{{3 + if a:mode == 0 " read remote file before current line + let readcmd = "0r" + elseif a:mode == 1 " read file after current line + let readcmd = "r" + elseif a:mode == 2 " replace with remote file + let readcmd = "%r" + elseif a:mode == 3 " skip read of file (leave as temporary) + let readcmd = "t" + else + exe a:mode + let readcmd = "r" + endif + let ichoice = (a:0 == 0)? 0 : 1 +" call Decho("readcmd<".readcmd."> ichoice=".ichoice) + + " NetRead: get temporary filename {{{3 + let tmpfile= s:GetTempfile("") + if tmpfile == "" +" call Dret("netrw#NetRead : unable to get a tempfile!") + return + endif + + while ichoice <= a:0 + + " attempt to repeat with previous host-file-etc + if exists("b:netrw_lastfile") && a:0 == 0 +" call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">") + let choice = b:netrw_lastfile + let ichoice= ichoice + 1 + + else + exe "let choice= a:" . ichoice +" call Decho("no lastfile: choice<" . choice . ">") + + if match(choice,"?") == 0 + " give help + echomsg 'NetRead Usage:' + echomsg ':Nread machine:path uses rcp' + echomsg ':Nread "machine path" uses ftp with <.netrc>' + echomsg ':Nread "machine id password path" uses ftp' + echomsg ':Nread dav://machine[:port]/path uses cadaver' + echomsg ':Nread fetch://machine/path uses fetch' + echomsg ':Nread ftp://[user@]machine[:port]/path uses ftp autodetects <.netrc>' + echomsg ':Nread http://[user@]machine/path uses http wget' + echomsg ':Nread https://[user@]machine/path uses http wget' + echomsg ':Nread rcp://[user@]machine/path uses rcp' + echomsg ':Nread rsync://machine[:port]/path uses rsync' echomsg ':Nread scp://[user@]machine[[:#]port]/path uses scp' echomsg ':Nread sftp://[user@]machine[[:#]port]/path uses sftp' sleep 4 @@ -1637,7 +1837,7 @@ endif let tmpfile= s:GetTempfile(b:netrw_fname) " apply correct suffix - " Check if NetrwBrowse() should be handling this request + " Check whether or not NetrwBrowse() should be handling this request " call Decho("checking if NetrwBrowse() should handle choice<".choice."> with netrw_list_cmd<".g:netrw_list_cmd.">") if choice =~ "^.*[\/]$" && b:netrw_method != 5 && choice !~ '^https\=://' " call Decho("yes, choice matches '^.*[\/]$'") @@ -1659,7 +1859,7 @@ " call Decho("read via rcp (method #1)") " ER: nothing done with g:netrw_uid yet? " ER: on Win2K" rcp machine[.user]:file tmpfile - " ER: if machine contains '.' adding .user is required (use $USERNAME) + " ER: when machine contains '.' adding .user is required (use $USERNAME) " ER: the tmpfile is full path: rcp sees C:\... as host C if s:netrw_has_nt_rcp == 1 if exists("g:netrw_uid") && ( g:netrw_uid != "" ) @@ -1810,11 +2010,11 @@ " using g:netrw_http_cmd (usually elinks, links, curl, wget, or fetch) " call Decho('using '.g:netrw_http_cmd.' (# not in b:netrw_fname<'.b:netrw_fname.">)") if exists("g:netrw_http_xcmd") -" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1)) - exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1) +" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(b:netrw_http."://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1)) + exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(b:netrw_http."://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1) else -" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)) - exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1) +" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape(b:netrw_http."://".g:netrw_machine.b:netrw_fname,1)) + exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape(b:netrw_http."://".g:netrw_machine.b:netrw_fname,1) endif let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) @@ -1825,15 +2025,15 @@ let netrw_tag = substitute(b:netrw_fname,"^.*#","","") " call Decho("netrw_html<".netrw_html.">") " call Decho("netrw_tag <".netrw_tag.">") -" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1)) - exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1) +" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape(b:netrw_http."://".g:netrw_machine.netrw_html,1)) + exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape(b:netrw_http."://".g:netrw_machine.netrw_html,1) let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) " call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/') exe 'keepj norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\" endif let b:netrw_lastfile = choice -" call Decho("(NetRead) setl ro") - setl ro +" call Decho("setl ro") + setl ro nomod "......................................... " NetRead: (dav) NetRead Method #6 {{{3 @@ -1894,7 +2094,7 @@ " call Dret("NetRead") return endif - if exists("g:netrw_option") && g:netrw_option == ":https\=" + if exists("g:netrw_option") && g:netrw_option =~ ":https\=" let netrw_option= "http" else let netrw_option= "ftp" @@ -1911,8 +2111,8 @@ let result = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method) let b:netrw_lastfile = choice -" call Decho("(NetRead) setl ro") - setl ro +" call Decho("setl ro") + setl ro nomod "......................................... " NetRead: (sftp) NetRead Method #9 {{{3 @@ -1978,7 +2178,7 @@ exe "sil keepj w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile) elseif g:netrw_cygwin " write (selected portion of) file to temporary - let cygtmpfile= substitute(tmpfile,'/cygdrive/\(.\)','\1:','') + let cygtmpfile= substitute(tmpfile,g:netrw_cygdrive.'/\(.\)','\1:','') " call Decho("(write selected portion) sil exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile)) exe "sil keepj ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile) else @@ -1988,7 +2188,7 @@ endif if curbufname == "" - " if the file is [No Name], and one attempts to Nwrite it, the buffer takes + " when the file is [No Name], and one attempts to Nwrite it, the buffer takes " on the temporary file's name. Deletion of the temporary file during " cleanup then causes an error message. 0file! @@ -2006,7 +2206,7 @@ else exe "let choice= a:" . ichoice - " Reconstruct Choice if choice starts with '"' + " Reconstruct Choice when choice starts with '"' if match(choice,"?") == 0 echomsg 'NetWrite Usage:"' echomsg ':Nwrite machine:path uses rcp' @@ -2215,8 +2415,13 @@ " NetWrite: (http) NetWrite Method #5 {{{3 elseif b:netrw_method == 5 " call Decho("write via http (method #5)") - if !exists("g:netrw_quiet") - call netrw#ErrorMsg(s:ERROR,"currently does not support writing using http:",16) + let curl= substitute(g:netrw_http_put_cmd,'\s\+.*$',"","") + if executable(curl) + let url= g:netrw_choice +" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_put_cmd." ".shellescape(tmpfile,1)." ".shellescape(url,1) ) + exe s:netrw_silentxfer."!".g:netrw_http_put_cmd." ".shellescape(tmpfile,1)." ".shellescape(url,1) + elseif !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:ERROR,"can't write to http using <".g:netrw_http_put_cmd".">".",16) endif "......................................... @@ -2313,12 +2518,12 @@ if a:firstline == 1 && a:lastline == line("$") " restore modifiability; usually equivalent to set nomod let &mod= mod -" call Decho("(NetWrite) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") elseif !exists("leavemod") " indicate that the buffer has not been modified since last written -" call Decho("(NetWrite) set nomod") - set nomod -" call Decho("(NetWrite) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("set nomod") + setl nomod +" call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") endif " call Dret("netrw#NetWrite") @@ -2347,11 +2552,11 @@ let i= 1 while i <= a:0 call netrw#NetRead(3,a:{i}) -" call Decho("(netrw#NetSource) s:netread_tmpfile<".s:netrw_tmpfile.">") +" call Decho("s:netread_tmpfile<".s:netrw_tmpfile.">") if s:FileReadable(s:netrw_tmpfile) -" call Decho("(netrw#NetSource) exe so ".fnameescape(s:netrw_tmpfile)) +" call Decho("exe so ".fnameescape(s:netrw_tmpfile)) exe "so ".fnameescape(s:netrw_tmpfile) -" call Decho("(netrw#NetSource) delete(".s:netrw_tmpfile.")") +" call Decho("delete(".s:netrw_tmpfile.")") call delete(s:netrw_tmpfile) unlet s:netrw_tmpfile else @@ -2363,6 +2568,49 @@ " call Dret("netrw#NetSource") endfun +" --------------------------------------------------------------------- +" netrw#SetTreetop: resets the tree top to the current directory/specified directory {{{2 +" (implements the :Ntree command) +fun! netrw#SetTreetop(...) +" call Dfunc("netrw#SetTreetop(".((a:0 > 0)? a:1 : "").") a:0=".a:0) + + " clear out the current tree + if exists("w:netrw_treetop") +" call Decho("clearing out current tree") + let inittreetop= w:netrw_treetop + unlet w:netrw_treetop + endif + if exists("w:netrw_treedict") +" call Decho("freeing w:netrw_treedict") + unlet w:netrw_treedict + endif + + if a:1 == "" && exists("inittreetop") + let treedir= s:NetrwTreePath(inittreetop) +" call Decho("treedir<".treedir.">") + else + if isdirectory(a:1) +" call Decho("a:1<".a:1."> is a directory") + let treedir= a:1 + elseif exists("b:netrw_curdir") && isdirectory(b:netrw_curdir."/".a:1) + let treedir= b:netrw_curdir."/".a:1 +" call Decho("a:1<".a:1."> is NOT a directory, trying treedir<".treedir.">") + else + call netrw#ErrorMsg(s:ERROR,"sorry, ".a:1." doesn't seem to be a directory!",95) + let treedir= "." + endif + endif +" call Decho("treedir<".treedir.">") + let islocal= expand("%") !~ '^\a\+://' +" call Decho("islocal=".islocal) + if islocal + call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(islocal,treedir)) + else + call s:NetrwBrowse(islocal,s:NetrwBrowseChgDir(islocal,treedir)) + endif +" call Dret("netrw#SetTreetop") +endfun + " =========================================== " s:NetrwGetFile: Function to read temporary file "tfile" with command "readcmd". {{{2 " readcmd == %r : replace buffer with newly read file @@ -2374,7 +2622,7 @@ " readcmd=='t': simply do nothing if a:readcmd == 't' -" call Decho("(NetrwGetFile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " call Dret("NetrwGetFile : skip read of <".a:tfile.">") return endif @@ -2394,7 +2642,7 @@ " rename the current buffer to the temp file (ie. tfile) if g:netrw_cygwin - let tfile= substitute(a:tfile,'/cygdrive/\(.\)','\1:','') + let tfile= substitute(a:tfile,g:netrw_cygdrive.'/\(.\)','\1:','') else let tfile= a:tfile endif @@ -2440,6 +2688,12 @@ let line1 = 1 let line2 = line("$") + elseif !&ma + " attempting to read a file after the current line in the file, but the buffer is not modifiable + keepj call netrw#ErrorMsg(s:WARNING,"attempt to read<".a:tfile."> into a non-modifiable buffer!",94) +" call Dret("NetrwGetFile : attempt to read<".a:tfile."> into a non-modifiable buffer!") + return + elseif s:FileReadable(a:tfile) " read file after current line " call Decho("read file<".a:tfile."> after current line") @@ -2452,7 +2706,7 @@ else " not readable -" call Decho("(NetrwGetFile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " call Decho("tfile<".a:tfile."> not readable") keepj call netrw#ErrorMsg(s:WARNING,"file <".a:tfile."> not readable",9) " call Dret("NetrwGetFile : tfile<".a:tfile."> not readable") @@ -2477,7 +2731,7 @@ " make sure file is being displayed " redraw! -" call Decho("(NetrwGetFile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " call Dret("NetrwGetFile") endfun @@ -2583,10 +2837,11 @@ " Method#5: http[s]://user@hostname/...path-to-file {{{3 elseif match(a:choice,httpurm) == 0 -" call Decho("http://...") +" call Decho("http[s]://...") let b:netrw_method = 5 let g:netrw_machine= substitute(a:choice,httpurm,'\1',"") let b:netrw_fname = substitute(a:choice,httpurm,'\2',"") + let b:netrw_http = (a:choice =~ '^https:')? "https" : "http" " Method#6: dav://hostname[:port]/..path-to-file.. {{{3 elseif match(a:choice,davurm) == 0 @@ -2820,6 +3075,7 @@ if a:1 =~ '^ftp:' " get host from ftp:... url " access userid and password from hup (host-user-passwd) dictionary +" call Decho("case a:0=1: a:1<".a:1."> (get host from ftp:... url)") let host = substitute(a:1,'^ftp:','','') let host = substitute(host,'\..*','','') if exists("s:netrw_hup[host]") @@ -2834,8 +3090,13 @@ else " case: one input argument, not an url. Using it as a new user-id. +" call Decho("case a:0=1: a:1<".a:1."> (get host from input argument, not an url)") if exists("g:netrw_machine") - let host= substitute(g:netrw_machine,'\..*$','','') + if g:netrw_machine =~ '[0-9.]\+' + let host= g:netrw_machine + else + let host= substitute(g:netrw_machine,'\..*$','','') + endif else let g:netrw_machine= input('Enter hostname: ') endif @@ -2885,365 +3146,32 @@ " =========================================== " --------------------------------------------------------------------- -" s:NetrwMaps: {{{2 -fun! s:NetrwMaps(islocal) -" call Dfunc("s:NetrwMaps(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">") +" s:ExplorePatHls: converts an Explore pattern into a regular expression search pattern {{{2 +fun! s:ExplorePatHls(pattern) +" call Dfunc("s:ExplorePatHls(pattern<".a:pattern.">)") + let repat= substitute(a:pattern,'^**/\{1,2}','','') +" call Decho("repat<".repat.">") + let repat= escape(repat,'][.\') +" call Decho("repat<".repat.">") + let repat= '\<'.substitute(repat,'\*','\\(\\S\\+ \\)*\\S\\+','g').'\>' +" call Dret("s:ExplorePatHls repat<".repat.">") + return repat +endfun - " set up Rexplore and [ 2-leftmouse-click -or- c-leftmouse ] -" call Decho("(NetrwMaps) set up Rexplore command") - com! Rexplore if exists("w:netrw_rexlocal")|call s:NetrwRexplore(w:netrw_rexlocal,exists("w:netrw_rexdir")? w:netrw_rexdir : ".")|else|call netrw#ErrorMsg(s:WARNING,"not a former netrw window",79)|endif - if g:netrw_mousemaps && g:netrw_retmap -" call Decho("(NetrwMaps) set up Rexplore 2-leftmouse") - if !hasmapto("NetrwReturn") - if maparg("<2-leftmouse>","n") == "" || maparg("<2-leftmouse>","n") =~ '^-$' -" call Decho("(NetrwMaps) making map for 2-leftmouse") - nmap <2-leftmouse> NetrwReturn - elseif maparg("","n") == "" -" call Decho("(NetrwMaps) making map for c-leftmouse") - nmap NetrwReturn - endif - endif - nno NetrwReturn :Rexplore -" call Decho("(NetrwMaps) made NetrwReturn map") - endif - - if a:islocal -" call Decho("(NetrwMaps) make local maps") - " local normal-mode maps - nnoremap a :call NetrwHide(1) - nnoremap % :call NetrwOpenFile(1) - nnoremap c :exe "keepjumps lcd ".fnameescape(b:netrw_curdir) - nnoremap C :let g:netrw_chgwin= winnr() - nnoremap :call netrw#LocalBrowseCheck(NetrwBrowseChgDir(1,NetrwGetWord())) - nnoremap d :call NetrwMakeDir("") - nnoremap - :exe "norm! 0"call netrw#LocalBrowseCheck(NetrwBrowseChgDir(1,'../')) - nnoremap gb :call NetrwBookHistHandler(1,b:netrw_curdir) - nnoremap gd :call NetrwForceChgDir(1,NetrwGetWord()) - nnoremap gf :call NetrwForceFile(1,NetrwGetWord()) - nnoremap gh :call NetrwHidden(1) - nnoremap gp :call NetrwChgPerm(1,b:netrw_curdir) - nnoremap I :call NetrwBannerCtrl(1) - nnoremap i :call NetrwListStyle(1) - nnoremap mb :call NetrwBookHistHandler(0,b:netrw_curdir) - nnoremap mB :call NetrwBookHistHandler(6,b:netrw_curdir) - nnoremap mc :call NetrwMarkFileCopy(1) - nnoremap md :call NetrwMarkFileDiff(1) - nnoremap me :call NetrwMarkFileEdit(1) - nnoremap mf :call NetrwMarkFile(1,NetrwGetWord()) - nnoremap mF :call NetrwUnmarkList(bufnr("%"),b:netrw_curdir) - nnoremap mg :call NetrwMarkFileGrep(1) - nnoremap mh :call NetrwMarkHideSfx(1) - nnoremap mm :call NetrwMarkFileMove(1) - nnoremap mp :call NetrwMarkFilePrint(1) - nnoremap mr :call NetrwMarkFileRegexp(1) - nnoremap ms :call NetrwMarkFileSource(1) - nnoremap mt :call NetrwMarkFileTgt(1) - nnoremap mT :call NetrwMarkFileTag(1) - nnoremap mu :call NetrwUnMarkFile(1) - nnoremap mx :call NetrwMarkFileExe(1) - nnoremap mX :call NetrwMarkFileVimCmd(1) - nnoremap mz :call NetrwMarkFileCompress(1) - nnoremap O :call NetrwObtain(1) - nnoremap o :call NetrwSplit(3) - nnoremap p :call NetrwPreview(NetrwBrowseChgDir(1,NetrwGetWord(),1)) - nnoremap P :call NetrwPrevWinOpen(1) - nnoremap qb :call NetrwBookHistHandler(2,b:netrw_curdir) - nnoremap qf :call NetrwFileInfo(1,NetrwGetWord()) - nnoremap qF :call NetrwMarkFileQFEL(1,getqflist()) - nnoremap r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'exe "norm! 0"call NetrwRefresh(1,NetrwBrowseChgDir(1,'./')) - nnoremap s :call NetrwSortStyle(1) - nnoremap S :call NetSortSequence(1) - nnoremap t :call NetrwSplit(4) - nnoremap Tb :call NetrwSetTgt('b',v:count1) - nnoremap Th :call NetrwSetTgt('h',v:count) - nnoremap u :call NetrwBookHistHandler(4,expand("%")) - nnoremap U :call NetrwBookHistHandler(5,expand("%")) - nnoremap v :call NetrwSplit(5) - nnoremap x :call netrw#NetrwBrowseX(NetrwBrowseChgDir(1,NetrwGetWord(),0),0)" - nnoremap X :call NetrwLocalExecute(expand(""))" - " local insert-mode maps - inoremap a :call NetrwHide(1) - inoremap c :exe "keepjumps lcd ".fnameescape(b:netrw_curdir) - inoremap C :let g:netrw_chgwin= winnr() - inoremap % :call NetrwOpenFile(1) - inoremap - :exe "norm! 0"call netrw#LocalBrowseCheck(NetrwBrowseChgDir(1,'../')) - inoremap :call netrw#LocalBrowseCheck(NetrwBrowseChgDir(1,NetrwGetWord())) - inoremap d :call NetrwMakeDir("") - inoremap gb :call NetrwBookHistHandler(1,b:netrw_curdir) - inoremap gh :call NetrwHidden(1) - inoremap gp :call NetrwChgPerm(1,b:netrw_curdir) - inoremap I :call NetrwBannerCtrl(1) - inoremap i :call NetrwListStyle(1) - inoremap mb :call NetrwBookHistHandler(0,b:netrw_curdir) - inoremap mB :call NetrwBookHistHandler(6,b:netrw_curdir) - inoremap mc :call NetrwMarkFileCopy(1) - inoremap md :call NetrwMarkFileDiff(1) - inoremap me :call NetrwMarkFileEdit(1) - inoremap mf :call NetrwMarkFile(1,NetrwGetWord()) - inoremap mg :call NetrwMarkFileGrep(1) - inoremap mh :call NetrwMarkHideSfx(1) - inoremap mm :call NetrwMarkFileMove(1) - inoremap mp :call NetrwMarkFilePrint(1) - inoremap mr :call NetrwMarkFileRegexp(1) - inoremap ms :call NetrwMarkFileSource(1) - inoremap mT :call NetrwMarkFileTag(1) - inoremap mt :call NetrwMarkFileTgt(1) - inoremap mu :call NetrwUnMarkFile(1) - inoremap mx :call NetrwMarkFileExe(1) - inoremap mX :call NetrwMarkFileVimCmd(1) - inoremap mz :call NetrwMarkFileCompress(1) - inoremap O :call NetrwObtain(1) - inoremap o :call NetrwSplit(3) - inoremap p :call NetrwPreview(NetrwBrowseChgDir(1,NetrwGetWord(),1)) - inoremap P :call NetrwPrevWinOpen(1) - inoremap qb :call NetrwBookHistHandler(2,b:netrw_curdir) - inoremap qf :call NetrwFileInfo(1,NetrwGetWord()) - inoremap qF :call NetrwMarkFileQFEL(1,getqflist()) - inoremap r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'exe "norm! 0"call NetrwRefresh(1,NetrwBrowseChgDir(1,'./')) - inoremap s :call NetrwSortStyle(1) - inoremap S :call NetSortSequence(1) - inoremap t :call NetrwSplit(4) - inoremap Tb :call NetrwSetTgt('b',v:count1) - inoremap Th :call NetrwSetTgt('h',v:count) - inoremap u :call NetrwBookHistHandler(4,expand("%")) - inoremap U :call NetrwBookHistHandler(5,expand("%")) - inoremap v :call NetrwSplit(5) - inoremap x :call netrw#NetrwBrowseX(NetrwBrowseChgDir(1,NetrwGetWord(),0),0)" - if !hasmapto('NetrwHideEdit') - nmap NetrwHideEdit - imap NetrwHideEdit - endif - nnoremap NetrwHideEdit :call NetrwHideEdit(1) - if !hasmapto('NetrwRefresh') - nmap NetrwRefresh - imap NetrwRefresh - endif - nnoremap NetrwRefresh :call NetrwRefresh(1,NetrwBrowseChgDir(1,'./')) - if s:didstarstar || !mapcheck("","n") - nnoremap :Nexplore - inoremap :Nexplore - endif - if s:didstarstar || !mapcheck("","n") - nnoremap :Pexplore - inoremap :Pexplore - endif - let mapsafecurdir = escape(b:netrw_curdir, s:netrw_map_escape) - if g:netrw_mousemaps == 1 - nmap NetrwLeftmouse - nno NetrwLeftmouse :call NetrwLeftmouse(1) - nmap NetrwRightdrag - nno NetrwRightdrag :call NetrwRightdrag(1) - nmap NetrwMiddlemouse - nno NetrwMiddlemouse :call NetrwPrevWinOpen(1) - nmap NetrwSLeftmouse - nno NetrwSLeftmouse :call NetrwMarkFile(1,NetrwGetWord()) - nmap <2-leftmouse> Netrw2Leftmouse - nmap Netrw2Leftmouse - - imap ILeftmouse - ino ILeftmouse :call NetrwLeftmouse(1) - imap IMiddlemouse - ino IMiddlemouse :call NetrwPrevWinOpen(1) - imap ISLeftmouse - ino ISLeftmouse :call NetrwMarkFile(1,NetrwGetWord()) - exe 'nnoremap :call NetrwLocalRm("'.mapsafecurdir.'")' - exe 'vnoremap :call NetrwLocalRm("'.mapsafecurdir.'")' - exe 'inoremap :call NetrwLocalRm("'.mapsafecurdir.'")' - endif - exe 'nnoremap :call NetrwLocalRm("'.mapsafecurdir.'")' - exe 'nnoremap D :call NetrwLocalRm("'.mapsafecurdir.'")' - exe 'nnoremap R :call NetrwLocalRename("'.mapsafecurdir.'")' - exe 'nnoremap m :call NetrwMakeDir("")' - exe 'vnoremap :call NetrwLocalRm("'.mapsafecurdir.'")' - exe 'vnoremap D :call NetrwLocalRm("'.mapsafecurdir.'")' - exe 'vnoremap R :call NetrwLocalRename("'.mapsafecurdir.'")' - exe 'inoremap :call NetrwLocalRm("'.mapsafecurdir.'")' - exe 'inoremap D :call NetrwLocalRm("'.mapsafecurdir.'")' - exe 'inoremap R :call NetrwLocalRename("'.mapsafecurdir.'")' - exe 'inoremap m :call NetrwMakeDir("")' - nnoremap :he netrw-quickhelp - - else " remote -" call Decho("(NetrwMaps) make remote maps") - call s:RemotePathAnalysis(b:netrw_curdir) - " remote normal-mode maps - nnoremap :call NetrwBrowse(0,NetrwBrowseChgDir(0,NetrwGetWord())) - nnoremap :call NetrwRefresh(0,NetrwBrowseChgDir(0,'./')) - nnoremap - :exe "norm! 0"call NetrwBrowse(0,NetrwBrowseChgDir(0,'../')) - nnoremap a :call NetrwHide(0) - nnoremap mb :call NetrwBookHistHandler(0,b:netrw_curdir) - nnoremap mc :call NetrwMarkFileCopy(0) - nnoremap md :call NetrwMarkFileDiff(0) - nnoremap me :call NetrwMarkFileEdit(0) - nnoremap mf :call NetrwMarkFile(0,NetrwGetWord()) - nnoremap mF :call NetrwUnmarkList(bufnr("%"),b:netrw_curdir) - nnoremap mg :call NetrwMarkFileGrep(0) - nnoremap mh :call NetrwMarkHideSfx(0) - nnoremap mm :call NetrwMarkFileMove(0) - nnoremap mp :call NetrwMarkFilePrint(0) - nnoremap mr :call NetrwMarkFileRegexp(0) - nnoremap ms :call NetrwMarkFileSource(0) - nnoremap mt :call NetrwMarkFileTgt(0) - nnoremap mT :call NetrwMarkFileTag(0) - nnoremap mu :call NetrwUnMarkFile(0) - nnoremap mx :call NetrwMarkFileExe(0) - nnoremap mX :call NetrwMarkFileVimCmd(0) - nnoremap mz :call NetrwMarkFileCompress(0) - nnoremap gb :call NetrwBookHistHandler(1,b:netrw_curdir) - nnoremap gd :call NetrwForceChgDir(0,NetrwGetWord()) - nnoremap gf :call NetrwForceFile(0,NetrwGetWord()) - nnoremap gh :call NetrwHidden(0) - nnoremap gp :call NetrwChgPerm(0,b:netrw_curdir) - nnoremap C :let g:netrw_chgwin= winnr() - nnoremap i :call NetrwListStyle(0) - nnoremap I :call NetrwBannerCtrl(1) - nnoremap o :call NetrwSplit(0) - nnoremap O :call NetrwObtain(0) - nnoremap p :call NetrwPreview(NetrwBrowseChgDir(1,NetrwGetWord(),1)) - nnoremap P :call NetrwPrevWinOpen(0) - nnoremap qb :call NetrwBookHistHandler(2,b:netrw_curdir) - nnoremap mB :call NetrwBookHistHandler(6,b:netrw_curdir) - nnoremap qf :call NetrwFileInfo(0,NetrwGetWord()) - nnoremap qF :call NetrwMarkFileQFEL(0,getqflist()) - nnoremap r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'exe "norm! 0"call NetrwBrowse(0,NetrwBrowseChgDir(0,'./')) - nnoremap s :call NetrwSortStyle(0) - nnoremap S :call NetSortSequence(0) - nnoremap t :call NetrwSplit(1) - nnoremap Tb :call NetrwSetTgt('b',v:count1) - nnoremap Th :call NetrwSetTgt('h',v:count) - nnoremap u :call NetrwBookHistHandler(4,b:netrw_curdir) - nnoremap U :call NetrwBookHistHandler(5,b:netrw_curdir) - nnoremap v :call NetrwSplit(2) - nnoremap x :call netrw#NetrwBrowseX(NetrwBrowseChgDir(0,NetrwGetWord()),1) - nnoremap % :call NetrwOpenFile(0) - " remote insert-mode maps - inoremap :call NetrwBrowse(0,NetrwBrowseChgDir(0,NetrwGetWord())) - inoremap :call NetrwRefresh(0,NetrwBrowseChgDir(0,'./')) - inoremap - :exe "norm! 0"call NetrwBrowse(0,NetrwBrowseChgDir(0,'../')) - inoremap a :call NetrwHide(0) - inoremap mb :call NetrwBookHistHandler(0,b:netrw_curdir) - inoremap mc :call NetrwMarkFileCopy(0) - inoremap md :call NetrwMarkFileDiff(0) - inoremap me :call NetrwMarkFileEdit(0) - inoremap mf :call NetrwMarkFile(0,NetrwGetWord()) - inoremap mg :call NetrwMarkFileGrep(0) - inoremap mh :call NetrwMarkHideSfx(0) - inoremap mm :call NetrwMarkFileMove(0) - inoremap mp :call NetrwMarkFilePrint(0) - inoremap mr :call NetrwMarkFileRegexp(0) - inoremap ms :call NetrwMarkFileSource(0) - inoremap mt :call NetrwMarkFileTgt(0) - inoremap mT :call NetrwMarkFileTag(0) - inoremap mu :call NetrwUnMarkFile(0) - inoremap mx :call NetrwMarkFileExe(0) - inoremap mX :call NetrwMarkFileVimCmd(0) - inoremap mz :call NetrwMarkFileCompress(0) - inoremap gb :call NetrwBookHistHandler(1,b:netrw_curdir) - inoremap gh :call NetrwHidden(0) - inoremap gp :call NetrwChgPerm(0,b:netrw_curdir) - inoremap C :let g:netrw_chgwin= winnr() - inoremap i :call NetrwListStyle(0) - inoremap I :call NetrwBannerCtrl(1) - inoremap o :call NetrwSplit(0) - inoremap O :call NetrwObtain(0) - inoremap p :call NetrwPreview(NetrwBrowseChgDir(1,NetrwGetWord(),1)) - inoremap P :call NetrwPrevWinOpen(0) - inoremap qb :call NetrwBookHistHandler(2,b:netrw_curdir) - inoremap mB :call NetrwBookHistHandler(6,b:netrw_curdir) - inoremap qf :call NetrwFileInfo(0,NetrwGetWord()) - inoremap qF :call NetrwMarkFileQFEL(0,getqflist()) - inoremap r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'exe "norm! 0"call NetrwBrowse(0,NetrwBrowseChgDir(0,'./')) - inoremap s :call NetrwSortStyle(0) - inoremap S :call NetSortSequence(0) - inoremap t :call NetrwSplit(1) - inoremap Tb :call NetrwSetTgt('b',v:count1) - inoremap Th :call NetrwSetTgt('h',v:count) - inoremap u :call NetrwBookHistHandler(4,b:netrw_curdir) - inoremap U :call NetrwBookHistHandler(5,b:netrw_curdir) - inoremap v :call NetrwSplit(2) - inoremap x :call netrw#NetrwBrowseX(NetrwBrowseChgDir(0,NetrwGetWord()),1) - inoremap % :call NetrwOpenFile(0) - if !hasmapto('NetrwHideEdit') - nmap NetrwHideEdit - imap NetrwHideEdit - endif - nnoremap NetrwHideEdit :call NetrwHideEdit(0) - if !hasmapto('NetrwRefresh') - nmap NetrwRefresh - imap NetrwRefresh - endif - - let mapsafepath = escape(s:path, s:netrw_map_escape) - let mapsafeusermach = escape(s:user.s:machine, s:netrw_map_escape) - - nnoremap NetrwRefresh :call NetrwRefresh(0,NetrwBrowseChgDir(0,'./')) - if g:netrw_mousemaps == 1 - nmap NetrwLeftmouse - nno NetrwLeftmouse :call NetrwLeftmouse(0) - nmap NetrwLeftdrag - nno NetrwLeftdrag :call NetrwLeftdrag(0) - nmap NetrwMiddlemouse - nno NetrwMiddlemouse :call NetrwPrevWinOpen(0) - nmap NetrwSLeftmouse - nno NetrwSLeftmouse :call NetrwMarkFile(0,NetrwGetWord()) - nmap <2-leftmouse> Netrw2Leftmouse - nmap Netrw2Leftmouse - - imap ILeftmouse - ino ILeftmouse :call NetrwLeftmouse(0) - imap IMiddlemouse - ino IMiddlemouse :call NetrwPrevWinOpen(0) - imap ISLeftmouse - ino ISLeftmouse :call NetrwMarkFile(0,NetrwGetWord()) - exe 'nnoremap :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' - exe 'vnoremap :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' - exe 'inoremap :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' - endif - exe 'nnoremap :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' - exe 'nnoremap d :call NetrwMakeDir("'.mapsafeusermach.'")' - exe 'nnoremap D :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' - exe 'nnoremap R :call NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")' - exe 'vnoremap :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' - exe 'vnoremap D :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' - exe 'vnoremap R :call NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")' - exe 'inoremap :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' - exe 'inoremap d :call NetrwMakeDir("'.mapsafeusermach.'")' - exe 'inoremap D :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' - exe 'inoremap R :call NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")' - nnoremap :he netrw-quickhelp - inoremap :he netrw-quickhelp - endif - - keepj call s:SetRexDir(a:islocal,b:netrw_curdir) - -" call Dret("s:NetrwMaps") -endfun - -" --------------------------------------------------------------------- -" s:ExplorePatHls: converts an Explore pattern into a regular expression search pattern {{{2 -fun! s:ExplorePatHls(pattern) -" call Dfunc("s:ExplorePatHls(pattern<".a:pattern.">)") - let repat= substitute(a:pattern,'^**/\{1,2}','','') -" call Decho("repat<".repat.">") - let repat= escape(repat,'][.\') -" call Decho("repat<".repat.">") - let repat= '\<'.substitute(repat,'\*','\\(\\S\\+ \\)*\\S\\+','g').'\>' -" call Dret("s:ExplorePatHls repat<".repat.">") - return repat -endfun - -" --------------------------------------------------------------------- -" s:NetrwBookHistHandler: {{{2 -" 0: (user: ) bookmark current directory -" 1: (user: ) change to the bookmarked directory -" 2: (user: ) list bookmarks -" 3: (browsing) record current directory history -" 4: (user: ) go up (previous) bookmark -" 5: (user: ) go down (next) bookmark -" 6: (user: ) delete bookmark -fun! s:NetrwBookHistHandler(chg,curdir) -" call Dfunc("s:NetrwBookHistHandler(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count." histcnt=".g:netrw_dirhist_cnt." histmax=".g:netrw_dirhistmax) - if !exists("g:netrw_dirhistmax") || g:netrw_dirhistmax <= 0 -" " call Dret("s:NetrwBookHistHandler - suppressed due to g:netrw_dirhistmax") - return +" --------------------------------------------------------------------- +" s:NetrwBookHistHandler: {{{2 +" 0: (user: ) bookmark current directory +" 1: (user: ) change to the bookmarked directory +" 2: (user: ) list bookmarks +" 3: (browsing) record current directory history +" 4: (user: ) go up (previous) bookmark +" 5: (user: ) go down (next) bookmark +" 6: (user: ) delete bookmark +fun! s:NetrwBookHistHandler(chg,curdir) +" call Dfunc("s:NetrwBookHistHandler(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count." histcnt=".g:netrw_dirhist_cnt." histmax=".g:netrw_dirhistmax) + if !exists("g:netrw_dirhistmax") || g:netrw_dirhistmax <= 0 +" " call Dret("s:NetrwBookHistHandler - suppressed due to g:netrw_dirhistmax") + return endif let ykeep= @@ @@ -3338,13 +3266,13 @@ " call Decho("changedir u#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">") if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir") setl ma noro -" call Decho("(NetrwBookHistHandler) setl ma noro") +" call Decho("setl ma noro") sil! keepj %d setl nomod -" call Decho("(NetrwBookHistHandler) setl nomod") -" call Decho("(NetrwBookHistHandler) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("setl nomod") +" call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") endif -" " call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})) +" call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})) exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}) else if g:netrw_dirhistmax > 0 @@ -3363,11 +3291,11 @@ if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}") " call Decho("changedir U#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">") if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir") -" call Decho("(NetrwBookHistHandler) setl ma noro") +" call Decho("setl ma noro") setl ma noro sil! keepj %d " call Decho("removed all lines from buffer (%d)") -" call Decho("(NetrwBookHistHandler) setl nomod") +" call Decho("setl nomod") setl nomod " call Decho("(set nomod) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") endif @@ -3505,7 +3433,9 @@ fun! s:NetrwBrowse(islocal,dirname) if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif " call Dfunc("s:NetrwBrowse(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".w:netrw_liststyle." ".g:loaded_netrw." buf#".bufnr("%")."<".bufname("%")."> win#".winnr()) -" call Decho("(NetrwBrowse) tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly) +" call Decho("tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly) +" call Dredir("ls!") + " s:NetrwBrowse: initialize history {{{3 if !exists("s:netrw_initbookhist") keepj call s:NetrwBookHistRead() @@ -3520,8 +3450,8 @@ if exists("s:netrw_skipbrowse") unlet s:netrw_skipbrowse -" call Decho("(NetrwBrowse) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") -" call Dret("s:NetrwBrowse : s:netrw_skipbrowse=".s:netrw_skipbrowse) +" call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." filename<".expand("%")."> win#".winnr()." ft<".&ft.">") +" call Dret("s:NetrwBrowse : s:netrw_skipbrowse existed") return endif @@ -3542,27 +3472,27 @@ " s:NetrwBrowse: re-instate any marked files {{{3 if exists("s:netrwmarkfilelist_{bufnr('%')}") -" call Decho("(NetrwBrowse) clearing marked files") +" call Decho("clearing marked files") exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/" endif if a:islocal && exists("w:netrw_acdkeep") && w:netrw_acdkeep " s:NetrwBrowse: set up "safe" options for local directory/file {{{3 -" call Decho("(NetrwBrowse) handle w:netrw_acdkeep:") -" call Decho("(NetrwBrowse) keepjumps lcd ".fnameescape(dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")") - exe 'keepj lcd '.fnameescape(dirname) +" call Decho("handle w:netrw_acdkeep:") +" call Decho("keepjumps lcd ".fnameescape(dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")") + call s:NetrwLcd(dirname) call s:NetrwSafeOptions() -" call Decho("(NetrwBrowse) getcwd<".getcwd().">") +" call Decho("getcwd<".getcwd().">") elseif !a:islocal && dirname !~ '[\/]$' && dirname !~ '^"' " s:NetrwBrowse: looks like a remote regular file, attempt transfer {{{3 -" call Decho("(NetrwBrowse) attempt transfer as regular file<".dirname.">") +" call Decho("attempt transfer as regular file<".dirname.">") " remove any filetype indicator from end of dirname, except for the " "this is a directory" indicator (/). " There shouldn't be one of those here, anyway. let path= substitute(dirname,'[*=@|]\r\=$','','e') -" call Decho("(NetrwBrowse) new path<".path.">") +" call Decho("new path<".path.">") call s:RemotePathAnalysis(dirname) " s:NetrwBrowse: remote-read the requested file into current buffer {{{3 @@ -3570,24 +3500,33 @@ call s:NetrwEnew(dirname) call s:NetrwSafeOptions() setl ma noro -" call Decho("(NetrwBrowse) setl ma noro") +" call Decho("setl ma noro") let b:netrw_curdir = dirname let url = s:method."://".s:user.s:machine.(s:port ? ":".s:port : "")."/".s:path -" call Decho("(NetrwBrowse) exe sil! keepalt file ".fnameescape(url)." (bt=".&bt.")") +" call Decho("exe sil! keepalt file ".fnameescape(url)." (bt=".&bt.")") exe "sil! keepj keepalt file ".fnameescape(url) exe "sil! keepj keepalt doau BufReadPre ".fnameescape(s:fname) sil call netrw#NetRead(2,url) - if s:path !~ '.tar.bz2$' && s:path !~ '.tar.gz' && s:path !~ '.tar.xz' && s:path !~ '.txz' - " netrw.vim and tar.vim have already handled decompression of the tarball; avoiding gzip.vim error + " netrw.vim and tar.vim have already handled decompression of the tarball; avoiding gzip.vim error +" call Decho("url<".url.">") +" call Decho("s:path<".s:path.">") +" call Decho("s:fname<".s:fname.">") + if s:path =~ '.bz2' + exe "sil keepj keepalt doau BufReadPost ".fnameescape(substitute(s:fname,'\.bz2$','','')) + elseif s:path =~ '.gz' + exe "sil keepj keepalt doau BufReadPost ".fnameescape(substitute(s:fname,'\.gz$','','')) + elseif s:path =~ '.gz' + exe "sil keepj keepalt doau BufReadPost ".fnameescape(substitute(s:fname,'\.txz$','','')) + else exe "sil keepj keepalt doau BufReadPost ".fnameescape(s:fname) endif " s:NetrwBrowse: save certain window-oriented variables into buffer-oriented variables {{{3 call s:SetBufWinVars() call s:NetrwOptionRestore("w:") -" call Decho("(NetrwBrowse) setl ma nomod") +" call Decho("setl ma nomod") setl ma nomod -" call Decho("(NetrwBrowse) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " call Dret("s:NetrwBrowse : file<".s:fname.">") return @@ -3608,28 +3547,31 @@ let reusing= s:NetrwGetBuffer(a:islocal,dirname) " maintain markfile highlighting if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != "" -" call Decho("(NetrwBrowse) bufnr(%)=".bufnr('%')) -" call Decho("(NetrwBrowse) exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/") +" call Decho("bufnr(%)=".bufnr('%')) +" call Decho("exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/") exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/" else -" call Decho("(NetrwBrowse) 2match none") +" call Decho("2match none") 2match none endif if reusing && line("$") > 1 call s:NetrwOptionRestore("w:") -" call Decho("(NetrwBrowse) setl noma nomod nowrap") +" call Decho("setl noma nomod nowrap") setl noma nomod nowrap -" call Decho("(NetrwBrowse) (set noma nomod nowrap) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("(set noma nomod nowrap) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " call Dret("s:NetrwBrowse : re-using buffer") return endif " set b:netrw_curdir to the new directory name {{{3 -" call Decho("(NetrwBrowse) set b:netrw_curdir to the new directory name: (buf#".bufnr("%").")") +" call Decho("set b:netrw_curdir to the new directory name<".dirname."> (buf#".bufnr("%").")") let b:netrw_curdir= dirname if b:netrw_curdir =~ '[/\\]$' let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e') endif + if b:netrw_curdir =~ '\a:$' && (has("win32") || has("win95") || has("win64") || has("win16")) + let b:netrw_curdir= b:netrw_curdir."/" + endif if b:netrw_curdir == '' if has("amiga") " On the Amiga, the empty string connotes the current directory @@ -3643,39 +3585,23 @@ if !a:islocal && b:netrw_curdir !~ '/$' let b:netrw_curdir= b:netrw_curdir.'/' endif -" call Decho("(NetrwBrowse) b:netrw_curdir<".b:netrw_curdir.">") +" call Decho("b:netrw_curdir<".b:netrw_curdir.">") " ------------ " (local only) {{{3 " ------------ if a:islocal -" call Decho("(NetrwBrowse) local only:") +" call Decho("local only:") " Set up ShellCmdPost handling. Append current buffer to browselist call s:LocalFastBrowser() " handle g:netrw_keepdir: set vim's current directory to netrw's notion of the current directory {{{3 if !g:netrw_keepdir -" call Decho("(NetrwBrowse) handle g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd) -" call Decho("(NetrwBrowse) l:acd".(exists("&l:acd")? "=".&l:acd : " doesn't exist")) +" call Decho("handle g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd) +" call Decho("l:acd".(exists("&l:acd")? "=".&l:acd : " doesn't exist")) if !exists("&l:acd") || !&l:acd -" call Decho('exe keepjumps lcd '.fnameescape(b:netrw_curdir)) - try - exe 'keepj lcd '.fnameescape(b:netrw_curdir) - catch /^Vim\%((\a\+)\)\=:E472/ - call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".b:netrw_curdir."> (permissions?)",61) - if exists("w:netrw_prvdir") - let b:netrw_curdir= w:netrw_prvdir - else - call s:NetrwOptionRestore("w:") -" call Decho("(NetrwBrowse) setl noma nomod nowrap") - setl noma nomod nowrap -" call Decho("(NetrwBrowse) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") - let b:netrw_curdir= dirname -" call Dret("s:NetrwBrowse : reusing buffer#".(exists("bufnum")? bufnum : 'N/A')."<".dirname."> getcwd<".getcwd().">") - return - endif - endtry + call s:NetrwLcd(b:netrw_curdir) endif endif @@ -3683,23 +3609,23 @@ " remote handling: {{{3 " -------------------------------- else -" call Decho("(NetrwBrowse) remote only:") +" call Decho("remote only:") " analyze dirname and g:netrw_list_cmd {{{3 -" call Decho("(NetrwBrowse) b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> dirname<".dirname.">") +" call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> dirname<".dirname.">") if dirname =~ "^NetrwTreeListing\>" let dirname= b:netrw_curdir -" call Decho("(NetrwBrowse) (dirname was ) dirname<".dirname.">") +" call Decho("(dirname was ) dirname<".dirname.">") elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir") let dirname= substitute(b:netrw_curdir,'\\','/','g') if dirname !~ '/$' let dirname= dirname.'/' endif let b:netrw_curdir = dirname -" call Decho("(NetrwBrowse) (liststyle is TREELIST) dirname<".dirname.">") +" call Decho("(liststyle is TREELIST) dirname<".dirname.">") else let dirname = substitute(dirname,'\\','/','g') -" call Decho("(NetrwBrowse) (normal) dirname<".dirname.">") +" call Decho("(normal) dirname<".dirname.">") endif let dirpat = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$' @@ -3708,37 +3634,34 @@ keepj call netrw#ErrorMsg(s:ERROR,"netrw doesn't understand your dirname<".dirname.">",20) endif keepj call s:NetrwOptionRestore("w:") -" call Decho("(NetrwBrowse) setl noma nomod nowrap") +" call Decho("setl noma nomod nowrap") setl noma nomod nowrap -" call Decho("(NetrwBrowse) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " call Dret("s:NetrwBrowse : badly formatted dirname<".dirname.">") return endif let b:netrw_curdir= dirname -" call Decho("(NetrwBrowse) b:netrw_curdir<".b:netrw_curdir."> (remote)") +" call Decho("b:netrw_curdir<".b:netrw_curdir."> (remote)") endif " (additional remote handling) " ----------------------- " Directory Listing: {{{3 " ----------------------- keepj call s:NetrwMaps(a:islocal) + keepj call s:NetrwCommands(a:islocal) keepj call s:PerformListing(a:islocal) if v:version >= 700 && has("balloon_eval") && &beval == 0 && &l:bexpr == "" && !exists("g:netrw_nobeval") - let &l:bexpr= "netrw#NetrwBalloonHelp()" -" call Decho("(NetrwBrowse) set up balloon help: l:bexpr=".&l:bexpr) - set beval + let &l:bexpr= "netrw#BalloonHelp()" +" call Decho("set up balloon help: l:bexpr=".&l:bexpr) + setl beval endif call s:NetrwOptionRestore("w:") - " The s:LocalBrowseShellCmdRefresh() function is called by an autocmd + " The s:LocalBrowseRefresh() function is called by an autocmd " installed by s:LocalFastBrowser() when g:netrw_fastbrowse <= 1 (ie. slow, medium speed). - " However, s:NetrwBrowse() causes the ShellCmdPost event itself to fire once; setting - " the variable below avoids that second refresh of the screen. The s:LocalBrowseShellCmdRefresh() - " function gets called due to that autocmd; it notices that the following variable is set - " and skips the refresh and sets s:locbrowseshellcmd to zero. Oct 13, 2008 - let s:locbrowseshellcmd= 1 + " However, s:NetrwBrowse() causes the FocusGained event to fire the firstt time. -" call Decho("(NetrwBrowse) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " call Dret("s:NetrwBrowse : did PerformListing ft<".&ft.">") return endfun @@ -3746,20 +3669,33 @@ " --------------------------------------------------------------------- " s:NetrwFileInfo: supports qf (query for file information) {{{2 fun! s:NetrwFileInfo(islocal,fname) -" call Dfunc("s:NetrwFileInfo(islocal=".a:islocal." fname<".a:fname.">)") +" call Dfunc("s:NetrwFileInfo(islocal=".a:islocal." fname<".a:fname.">) b:netrw_curdir<".b:netrw_curdir.">") let ykeep= @@ if a:islocal if (has("unix") || has("macunix")) && executable("/bin/ls") - if exists("b:netrw_curdir") -" call Decho('using ls with b:netrw_curdir<'.b:netrw_curdir.'>') + + if getline(".") == "../" + echo system("/bin/ls -lsad ".shellescape("..")) +" call Decho("#1: echo system(/bin/ls -lsad ".shellescape(..).")") + + elseif w:netrw_liststyle == s:TREELIST && getline(".") !~ '^'.s:treedepthstring + echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir)) +" call Decho("#2: echo system(/bin/ls -lsad ".shellescape(b:netrw_curdir).")") + + elseif exists("b:netrw_curdir") if b:netrw_curdir =~ '/$' echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir.a:fname)) +" call Decho("#3: echo system(/bin/ls -lsad ".shellescape(b:netrw_curdir.a:fname).")") + else echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir."/".a:fname)) +" call Decho("#4: echo system(/bin/ls -lsad ".shellescape(b:netrw_curdir."/".a:fname).")") endif + else " call Decho('using ls '.a:fname." using cwd<".getcwd().">") echo system("/bin/ls -lsad ".shellescape(a:fname)) +" call Decho("#5: echo system(/bin/ls -lsad ".shellescape(a:fname).")") endif else " use vim functions to return information about file below cursor @@ -3772,7 +3708,7 @@ let t = getftime(fname) let sz = getfsize(fname) echo a:fname.": ".sz." ".strftime(g:netrw_timefmt,getftime(fname)) -" call Decho(fname.": ".sz." ".strftime(g:netrw_timefmt,getftime(fname))) +" call Decho("fname.": ".sz." ".strftime(g:netrw_timefmt,getftime(fname))) endif else echo "sorry, \"qf\" not supported yet for remote files" @@ -3787,40 +3723,42 @@ " 1=re-used buffer fun! s:NetrwGetBuffer(islocal,dirname) " call Dfunc("s:NetrwGetBuffer(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".g:netrw_liststyle) -" call Decho("(NetrwGetBuffer) modiable=".&mod." modifiable=".&ma." readonly=".&ro) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) let dirname= a:dirname " re-use buffer if possible {{{3 -" call Decho("(NetrwGetBuffer) --re-use a buffer if possible--") +" call Decho("--re-use a buffer if possible--") if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST " find NetrwTreeList buffer if there is one -" call Decho("(NetrwGetBuffer) case liststyle=treelist: find NetrwTreeList buffer if there is one") +" call Decho("case liststyle=treelist: find NetrwTreeList buffer if there is one") if exists("w:netrw_treebufnr") && w:netrw_treebufnr > 0 -" call Decho("(NetrwGetBuffer) re-using w:netrw_treebufnr=".w:netrw_treebufnr) - setl mod - sil! keepj %d +" call Decho(" re-using w:netrw_treebufnr=".w:netrw_treebufnr) let eikeep= &ei - set ei=all - exe "sil! keepalt b ".w:netrw_treebufnr + setl ei=all + exe "sil! noswapfile keepalt b ".w:netrw_treebufnr let &ei= eikeep + setl ma + sil! keepj %d +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) " call Dret("s:NetrwGetBuffer 0 : bufnum#".w:netrw_treebufnr."") return 0 endif let bufnum= -1 -" call Decho("(NetrwGetBuffer) liststyle=TREE but w:netrw_treebufnr doesn't exist") +" call Decho(" liststyle=TREE but w:netrw_treebufnr doesn't exist") else " find buffer number of buffer named precisely the same as dirname {{{3 -" call Decho("(NetrwGetBuffer) case listtyle not treelist: find buffer numnber of buffer named precisely the same as dirname--") +" call Decho("case listtyle not treelist: find buffer numnber of buffer named precisely the same as dirname--") +" call Dredir("(NetrwGetBuffer) ls!","ls!") " get dirname and associated buffer number let bufnum = bufnr(escape(dirname,'\')) -" call Decho("(NetrwGetBuffer) find buffer<".dirname.">'s number ") -" call Decho("(NetrwGetBuffer) bufnr(dirname<".escape(dirname,'\').">)=".bufnum) +" call Decho(" find buffer<".dirname.">'s number ") +" call Decho(" bufnr(dirname<".escape(dirname,'\').">)=".bufnum) if bufnum < 0 && dirname !~ '/$' " try appending a trailing / -" call Decho("(NetrwGetBuffer) try appending a trailing / to dirname<".dirname.">") +" call Decho(" try appending a trailing / to dirname<".dirname.">") let bufnum= bufnr(escape(dirname.'/','\')) if bufnum > 0 let dirname= dirname.'/' @@ -3829,30 +3767,30 @@ if bufnum < 0 && dirname =~ '/$' " try removing a trailing / -" call Decho("(NetrwGetBuffer) try removing a trailing / from dirname<".dirname.">") +" call Decho(" try removing a trailing / from dirname<".dirname.">") let bufnum= bufnr(escape(substitute(dirname,'/$','',''),'\')) if bufnum > 0 let dirname= substitute(dirname,'/$','','') endif endif -" call Decho("(NetrwGetBuffer) findbuf1: bufnum=bufnr('".dirname."')=".bufnum." bufname(".bufnum.")<".bufname(bufnum)."> (initial)") +" call Decho(" findbuf1: bufnum=bufnr('".dirname."')=".bufnum." bufname(".bufnum.")<".bufname(bufnum)."> (initial)") " note: !~ was used just below, but that means using ../ to go back would match (ie. abc/def/ and abc/ matches) if bufnum > 0 && bufname(bufnum) != dirname && bufname(bufnum) != '.' " handle approximate matches -" call Decho("(NetrwGetBuffer) handling approx match: bufnum#".bufnum.">0 AND bufname<".bufname(bufnum).">!=dirname<".dirname."> AND bufname(".bufnum.")!='.'") +" call Decho(" handling approx match: bufnum#".bufnum.">0 AND bufname<".bufname(bufnum).">!=dirname<".dirname."> AND bufname(".bufnum.")!='.'") let ibuf = 1 let buflast = bufnr("$") -" call Decho("(NetrwGetBuffer) findbuf2: buflast=bufnr($)=".buflast) +" call Decho(" findbuf2: buflast=bufnr($)=".buflast) while ibuf <= buflast let bname= substitute(bufname(ibuf),'\\','/','g') let bname= substitute(bname,'.\zs/$','','') -" call Decho("(NetrwGetBuffer) findbuf3: while [ibuf=",ibuf."]<=[buflast=".buflast."]: dirname<".dirname."> bname=bufname(".ibuf.")<".bname.">") +" call Decho(" findbuf3: while [ibuf=",ibuf."]<=[buflast=".buflast."]: dirname<".dirname."> bname=bufname(".ibuf.")<".bname.">") if bname != '' && dirname =~ '/'.bname.'/\=$' && dirname !~ '^/' " bname is not empty " dirname ends with bname, " dirname doesn't start with /, so its not a absolute path -" call Decho("(NetrwGetBuffer) findbuf3a: passes test 1 : dirname<".dirname.'> =~ /'.bname.'/\=$ && dirname !~ ^/') +" call Decho(" findbuf3a: passes test 1 : dirname<".dirname.'> =~ /'.bname.'/\=$ && dirname !~ ^/') break endif if bname =~ '^'.dirname.'/\=$' @@ -3875,79 +3813,83 @@ else let bufnum= ibuf endif -" call Decho("(NetrwGetBuffer) findbuf4: bufnum=".bufnum." (ibuf=".ibuf." buflast=".buflast.")") +" call Decho(" findbuf4: bufnum=".bufnum." (ibuf=".ibuf." buflast=".buflast.")") endif endif " get enew buffer and name it -or- re-use buffer {{{3 -" call Decho("(NetrwGetBuffer) get enew buffer and name it OR re-use buffer") +" call Decho(" get enew buffer and name it OR re-use buffer") sil! keepj keepalt mark ' if bufnum < 0 || !bufexists(bufnum) -" call Decho("(NetrwGetBuffer) --get enew buffer and name it (bufnum#".bufnum."<0 OR bufexists(".bufnum.")=".bufexists(bufnum)."==0)") +" call Decho("--get enew buffer and name it (bufnum#".bufnum."<0 OR bufexists(".bufnum.")=".bufexists(bufnum)."==0)") call s:NetrwEnew(dirname) -" call Decho("(NetrwGetBuffer) got enew buffer#".bufnr("%")." (altbuf<".expand("#").">)") +" call Decho(" got enew buffer#".bufnr("%")." (altbuf<".expand("#").">)") " name the buffer if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST " Got enew buffer; transform into a NetrwTreeListing -" call Decho("(NetrwGetBuffer) --transform enew buffer#".bufnr("%")." into a NetrwTreeListing --") +" call Decho("--transform enew buffer#".bufnr("%")." into a NetrwTreeListing --") if !exists("s:netrw_treelistnum") let s:netrw_treelistnum= 1 else let s:netrw_treelistnum= s:netrw_treelistnum + 1 endif let w:netrw_treebufnr= bufnr("%") -" call Decho("(NetrwGetBuffer) exe sil! keepalt file NetrwTreeListing ".fnameescape(s:netrw_treelistnum)) +" call Decho(" exe sil! keepalt file NetrwTreeListing ".fnameescape(s:netrw_treelistnum)) exe 'sil! keepalt file NetrwTreeListing\ '.fnameescape(s:netrw_treelistnum) - set bt=nofile noswf + setl bt=nofile noswf nnoremap [ :sil call TreeListMove('[') nnoremap ] :sil call TreeListMove(']') nnoremap [[ :sil call TreeListMove('[') nnoremap ]] :sil call TreeListMove(']') -" call Decho("(NetrwGetBuffer) tree listing#".s:netrw_treelistnum." bufnr=".w:netrw_treebufnr) +" call Decho(" tree listing#".s:netrw_treelistnum." bufnr=".w:netrw_treebufnr) else " let v:errmsg= "" " Decho let escdirname= fnameescape(dirname) -" call Decho("(NetrwGetBuffer) errmsg<".v:errmsg."> bufnr(escdirname<".escdirname.">)=".bufnr(escdirname)." bufname()<".bufname(bufnr(escdirname)).">") +" call Decho(" errmsg<".v:errmsg."> bufnr(escdirname<".escdirname.">)=".bufnr(escdirname)." bufname()<".bufname(bufnr(escdirname)).">") " call Decho(' exe sil! keepalt file '.escdirname) " let v:errmsg= "" " Decho exe 'sil! keepalt file '.escdirname -" call Decho("(NetrwGetBuffer) errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">") +" call Decho(" errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">") endif -" call Decho("(NetrwGetBuffer) named enew buffer#".bufnr("%")."<".bufname("%").">") +" call Decho(" named enew buffer#".bufnr("%")."<".bufname("%").">") else " Re-use the buffer -" call Decho("(NetrwGetBuffer) --re-use buffer#".bufnum." (bufnum#".bufnum.">=0 AND bufexists(".bufnum.")=".bufexists(bufnum)."!=0)") +" call Decho("--re-use buffer#".bufnum." (bufnum#".bufnum.">=0 AND bufexists(".bufnum.")=".bufexists(bufnum)."!=0)") let eikeep= &ei - set ei=all + setl ei=all if getline(2) =~ '^" Netrw Directory Listing' -" call Decho("(NetrwGetBuffer) getline(2)<".getline(2).'> matches "Netrw Directory Listing" : using keepalt b '.bufnum) - exe "sil! keepalt b ".bufnum +" call Decho(" getline(2)<".getline(2).'> matches "Netrw Directory Listing" : using keepalt b '.bufnum) + exe "sil! noswapfile keepalt b ".bufnum else -" call Decho("(NetrwGetBuffer) getline(2)<".getline(2).'> does not match "Netrw Directory Listing" : using b '.bufnum) - exe "sil! keepalt b ".bufnum +" call Decho(" getline(2)<".getline(2).'> does not match "Netrw Directory Listing" : using b '.bufnum) + exe "sil! noswapfile keepalt b ".bufnum endif if bufname("%") == '.' -" call Decho("(NetrwGetBuffer) exe sil! keepalt file ".fnameescape(getcwd())) +" call Decho("exe sil! keepalt file ".fnameescape(getcwd())) exe "sil! keepalt file ".fnameescape(getcwd()) endif let &ei= eikeep if line("$") <= 1 keepj call s:NetrwListSettings(a:islocal) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) " call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but its empty, so refresh it") return 0 elseif g:netrw_fastbrowse == 0 || (a:islocal && g:netrw_fastbrowse == 1) keepj call s:NetrwListSettings(a:islocal) sil keepj %d +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) " call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but refreshing due to g:netrw_fastbrowse=".g:netrw_fastbrowse) return 0 elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST -" call Decho("(NetrwGetBuffer) --re-use tree listing--") -" call Decho("(NetrwGetBuffer) clear buffer<".expand("%")."> with :%d") +" call Decho("--re-use tree listing--") +" call Decho(" clear buffer<".expand("%")."> with :%d") sil keepj %d keepj call s:NetrwListSettings(a:islocal) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) " call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but treelist mode always needs a refresh") return 0 else +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) " call Dret("s:NetrwGetBuffer 1 : buf#".bufnr("%")) return 1 endif @@ -3958,18 +3900,19 @@ " slow 0 D D Deleting a buffer implies it will not be re-used (slow) " med 1 D H " fast 2 H H -" call Decho("(NetrwGetBuffer) --do netrw settings: make this buffer#".bufnr("%")." not-a-file, modifiable, not line-numbered, etc--") +" call Decho("--do netrw settings: make this buffer#".bufnr("%")." not-a-file, modifiable, not line-numbered, etc--") let fname= expand("%") keepj call s:NetrwListSettings(a:islocal) -" call Decho("(NetrwGetBuffer) exe sil! keepalt file ".fnameescape(fname)) +" call Decho("exe sil! keepalt file ".fnameescape(fname)) exe "sil! keepj keepalt file ".fnameescape(fname) " delete all lines from buffer {{{3 -" call Decho("(NetrwGetBuffer) --delete all lines from buffer--") -" call Decho("(NetrwGetBuffer) clear buffer<".expand("%")."> with :%d") +" call Decho("--delete all lines from buffer--") +" call Decho(" clear buffer<".expand("%")."> with :%d") sil! keepalt keepj %d -" call Dret("s:NetrwGetBuffer 0 : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) +" call Dret("s:NetrwGetBuffer 0 : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")) return 0 endfun @@ -4048,7 +3991,7 @@ elseif w:netrw_liststyle == s:TREELIST " call Decho("treelist handling") - let dirname= substitute(getline('.'),'^\(| \)*','','e') + let dirname= substitute(getline('.'),'^\('.s:treedepthstring.'\)*','','e') else " call Decho("obtain word from wide listing") @@ -4100,14 +4043,16 @@ " s:NetrwListSettings: make standard settings for a netrw listing {{{2 fun! s:NetrwListSettings(islocal) " call Dfunc("s:NetrwListSettings(islocal=".a:islocal.")") +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) let fname= bufname("%") -" call Decho("(NetrwListSettings) setl bt=nofile nobl ma nonu nowrap noro") - setl bt=nofile nobl ma nonu nowrap noro +" " call Decho("(NetrwListSettings) setl bt=nofile nobl ma nonu nowrap noro nornu") + setl bt=nofile nobl ma nonu nowrap noro nornu " call Decho("(NetrwListSettings) exe sil! keepalt file ".fnameescape(fname)) exe "sil! keepalt file ".fnameescape(fname) if g:netrw_use_noswf setl noswf endif +" call Dredir("ls!") " call Decho("(NetrwListSettings) exe setl ts=".(g:netrw_maxfilenamelen+1)) exe "setl ts=".(g:netrw_maxfilenamelen+1) setl isk+=.,~,- @@ -4116,6 +4061,7 @@ else setl bh=delete endif +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) " call Dret("s:NetrwListSettings") endfun @@ -4125,9 +4071,11 @@ " =1: local browsing fun! s:NetrwListStyle(islocal) " call Dfunc("NetrwListStyle(islocal=".a:islocal.") w:netrw_liststyle=".w:netrw_liststyle) + let ykeep = @@ let fname = s:NetrwGetWord() if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif + let svpos = netrw#SavePosn() let w:netrw_liststyle = (w:netrw_liststyle + 1) % s:MAXLIST " call Decho("fname<".fname.">") " call Decho("chgd w:netrw_liststyle to ".w:netrw_liststyle) @@ -4165,24 +4113,17 @@ " call Decho("clear buffer<".expand("%")."> with :%d") sil! keepj %d " following prevents tree listing buffer from being marked "modified" -" call Decho("(NetrwListStyle) setl nomod") +" call Decho("setl nomod") setl nomod -" call Decho("(NetrwListStyle) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " refresh the listing -" call Decho("(NetrwListStyle) refresh the listing") - let svpos= netrw#NetrwSavePosn() +" call Decho("refresh the listing") keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#NetrwRestorePosn(svpos) keepj call s:NetrwCursor() - " keep cursor on the filename - sil! keepj $ - let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc') -" call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A')) - if result <= 0 && exists("w:netrw_bannercnt") - exe "sil! keepj ".w:netrw_bannercnt - endif + " restore position; keep cursor on the filename + keepj call netrw#RestorePosn(svpos) let @@= ykeep " call Dret("NetrwListStyle".(exists("w:netrw_liststyle")? ' : w:netrw_liststyle='.w:netrw_liststyle : "")) @@ -4198,7 +4139,7 @@ let g:netrw_banner= !g:netrw_banner " refresh the listing - let svpos= netrw#NetrwSavePosn() + let svpos= netrw#SavePosn() call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) " keep cursor on the filename @@ -4239,14 +4180,14 @@ if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != [] && g:netrw_dirhistmax > 0 let cnt= 1 for bmd in g:netrw_bookmarklist - let ebmd= escape(bmd,g:netrw_menu_escape) -" call Decho('sil! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmark.'.ebmd.' :e '.bmd) +" call Decho('sil! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmark.'.bmd.' :e '.bmd) + let bmd= escape(bmd,g:netrw_menu_escape) " show bookmarks for goto menu - exe 'sil! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks.'.ebmd.' :e '.bmd."\" + exe 'sil! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks.'.bmd.' :e '.bmd."\" " show bookmarks for deletion menu - exe 'sil! menu '.g:NetrwMenuPriority.".8.2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete.'.ebmd.' '.cnt."mB" + exe 'sil! menu '.g:NetrwMenuPriority.".8.2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete.'.bmd.' '.cnt."mB" let cnt= cnt + 1 endfor @@ -4284,78 +4225,109 @@ " NetrwBrowseChgDir() edits the file. fun! s:NetrwBrowseChgDir(islocal,newdir,...) " call Dfunc("s:NetrwBrowseChgDir(islocal=".a:islocal."> newdir<".a:newdir.">) a:0=".a:0." curpos<".string(getpos("."))."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "").">") +" call Decho("win#".winnr()) let ykeep= @@ if !exists("b:netrw_curdir") " Don't try to change-directory: this can happen, for example, when netrw#ErrorMsg has been called " and the current window is the NetrwMessage window. let @@= ykeep -" call Decho("(NetrwBrowseChgDir) b:netrw_curdir doesn't exist!") -" call Decho("(NetrwBrowseChgDir) getcwd<".getcwd().">") +" call Decho("b:netrw_curdir doesn't exist!") +" call Decho("getcwd<".getcwd().">") +" call Dredir("ls!") " call Dret("s:NetrwBrowseChgDir") return endif " NetrwBrowseChgDir: save options and initialize {{{3 +" call Decho("saving options") keepj call s:NetrwOptionSave("s:") keepj call s:NetrwSafeOptions() - let nbcd_curpos = netrw#NetrwSavePosn() + let nbcd_curpos = netrw#SavePosn() let s:nbcd_curpos_{bufnr('%')} = nbcd_curpos -" call Decho("(NetrwBrowseChgDir) setting s:nbcd_curpos_".bufnr('%')." to SavePosn") +" call Decho("setting s:nbcd_curpos_".bufnr('%')." to SavePosn") if (has("win32") || has("win95") || has("win64") || has("win16")) - let dirname = substitute(b:netrw_curdir,'\\','/','ge') + let dirname = substitute(b:netrw_curdir,'\\','/','ge') else - let dirname= b:netrw_curdir + let dirname = b:netrw_curdir endif let newdir = a:newdir let dolockout = 0 + let dorestore = 1 +" call Decho("dirname<".dirname.">") + + " ignore s when done in the banner + if g:netrw_banner +" call Decho("w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'n/a')." line(.)#".line('.')." line($)#".line("#")) + if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt && line("$") >= w:netrw_bannercnt + if getline(".") =~ 'Quick Help' +" call Decho("#1: quickhelp=".g:netrw_quickhelp." ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") + let g:netrw_quickhelp= (g:netrw_quickhelp + 1)%len(s:QuickHelp) +" call Decho("#2: quickhelp=".g:netrw_quickhelp." ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") + setl ma noro nowrap + keepj call setline(line('.'),'" Quick Help: :help '.s:QuickHelp[g:netrw_quickhelp]) + setl noma nomod nowrap + keepj call netrw#RestorePosn(nbcd_curpos) + keepj call s:NetrwOptionRestore("s:") +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") + endif + endif +" else " Decho +" call Decho("(s:NetrwBrowseChgdir) g:netrw_banner=".g:netrw_banner." (no banner)") + endif " set up o/s-dependent directory recognition pattern +" call Decho("set up o/s-dependent directory recognition pattern") if has("amiga") let dirpat= '[\/:]$' else let dirpat= '[\/]$' endif -" call Decho("(NetrwBrowseChgDir) dirname<".dirname."> dirpat<".dirpat.">") +" call Decho("dirname<".dirname."> dirpat<".dirpat.">") if dirname !~ dirpat " apparently vim is "recognizing" that it is in a directory and " is removing the trailing "/". Bad idea, so let's put it back. let dirname= dirname.'/' -" call Decho("(NetrwBrowseChgDir) adjusting dirname<".dirname.">") +" call Decho("adjusting dirname<".dirname.">") endif if newdir !~ dirpat " ------------------------------ " NetrwBrowseChgDir: edit a file {{{3 " ------------------------------ -" call Decho('(NetrwBrowseChgDir:edit-a-file) case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">") +" call Decho('edit-a-file: case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">") " save position for benefit of Rexplore - let s:rexposn_{bufnr("%")}= netrw#NetrwSavePosn() + let s:rexposn_{bufnr("%")}= netrw#SavePosn() + +" call Decho("edit-a-file: setting s:rexposn_".bufnr("%")." to SavePosn") +" call Decho("edit-a-file: win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> ft=".&ft) +" call Decho("edit-a-file: w:netrw_liststyle=".(exists("w:netrw_liststyle")? w:netrw_liststyle : 'n/a')." w:netrw_treedict:".(exists("w:netrw_treedict")? "exists" : 'n/a')." newdir<".newdir.">") -" call Decho("(NetrwBrowseChgDir:edit-a-file) setting s:rexposn_".bufnr("%")." to SavePosn") if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") && newdir !~ '^\(/\|\a:\)' +" call Decho("edit-a-file: handle tree listing: w:netrw_treedict<".(exists("w:netrw_treedict")? string(w:netrw_treedict) : 'n/a').">") +" call Decho("edit-a-file: newdir<".newdir.">") let dirname= s:NetrwTreeDir() if dirname =~ '/$' let dirname= dirname.newdir else - let dirname= s:NetrwTreeDir()."/".newdir + let dirname= dirname."/".newdir endif -" call Decho("(NetrwBrowseChgDir:edit-a-file) dirname<".dirname.">") -" call Decho("(NetrwBrowseChgDir:edit-a-file) tree listing") +" call Decho("edit-a-file: dirname<".dirname.">") +" call Decho("edit-a-file: tree listing") elseif newdir =~ '^\(/\|\a:\)' let dirname= newdir else let dirname= s:ComposePath(dirname,newdir) endif -" call Decho("(NetrwBrowseChgDir:edit-a-file) handling a file: dirname<".dirname."> (a:0=".a:0.")") +" call Decho("edit-a-file: handling a file: dirname<".dirname."> (a:0=".a:0.")") " this lets NetrwBrowseX avoid the edit if a:0 < 1 -" call Decho("(NetrwBrowseChgDir:edit-a-file) set up windows for editing<".fnameescape(dirname)."> didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist")) +" call Decho("edit-a-file: set up windows for editing<".fnameescape(dirname)."> didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist")) keepj call s:NetrwOptionRestore("s:") if !exists("s:didsplit") -" call Decho("(NetrwBrowseChgDir:edit-a-file) s:didsplit does not exist; g:netrw_browse_split=".g:netrw_browse_split." win#".winnr()) +" call Decho("edit-a-file: s:didsplit does not exist; g:netrw_browse_split=".g:netrw_browse_split." win#".winnr()) if g:netrw_browse_split == 1 " horizontally splitting the window first keepalt new @@ -4380,10 +4352,18 @@ endif else " handling a file, didn't split, so remove menu -" call Decho("(NetrwBrowseChgDir:edit-a-file) handling a file+didn't split, so remove menu") +" call Decho("edit-a-file: handling a file+didn't split, so remove menu") call s:NetrwMenu(0) " optional change to window if g:netrw_chgwin >= 1 + if winnr("$")+1 == g:netrw_chgwin + " if g:netrw_chgwin is set to one more than the last window, then + " vertically split the last window to make that window available. + let curwin= winnr() + exe "keepj keepalt ".g:netrw_chgwin."wincmd ".winnr("$") + vs + exe "keepj keepalt ".g:netrw_chgwin."wincmd ".curwin + endif exe "keepj keepalt ".g:netrw_chgwin."wincmd w" endif endif @@ -4391,26 +4371,40 @@ " the point where netrw actually edits the (local) file " if its local only: LocalBrowseCheck() doesn't edit a file, but NetrwBrowse() will + " no keepalt to support :e # to return to a directory listing if a:islocal -" call Decho("(NetrwBrowseChgDir:edit-a-file) edit local file: exe e! ".fnameescape(dirname)) - exe "keepj keepalt e! ".fnameescape(dirname) +" call Decho("edit-a-file: edit local file: exe e! ".fnameescape(dirname)) + " some like c-^ to return to the last edited file + " others like c-^ to return to the netrw buffer + if exists("g:netrw_altfile") && g:netrw_altfile + exe "keepj keepalt e! ".fnameescape(dirname) + else + exe "keepj e! ".fnameescape(dirname) + endif +" call Decho("after e! ".dirname.": hidden=".&hidden." bufhidden<".&bufhidden."> mod=".&mod) call s:NetrwCursor() +" call Decho("COMBAK#1: after e! ".dirname.": hidden=".&hidden." bufhidden<".&bufhidden."> mod=".&mod) + if &hidden || &bufhidden == "hide" + " file came from vim's hidden storage. Don't "restore" options with it. + let dorestore= 0 + endif else -" call Decho("(NetrwBrowseChgDir:edit-a-file) remote file: NetrwBrowse will edit it") +" call Decho("edit-a-file: remote file: NetrwBrowse will edit it") endif let dolockout= 1 +" call Decho("COMBAK#2: after e! ".dirname.": hidden=".&hidden." bufhidden<".&bufhidden."> mod=".&mod) " handle g:Netrw_funcref -- call external-to-netrw functions " This code will handle g:Netrw_funcref as an individual function reference " or as a list of function references. It will ignore anything that's not " a function reference. See :help Funcref for information about function references. if exists("g:Netrw_funcref") -" call Decho("(NetrwBrowseChgDir:edit-a-file) handle optional Funcrefs") +" call Decho("edit-a-file: handle optional Funcrefs") if type(g:Netrw_funcref) == 2 -" call Decho("(NetrwBrowseChgDir:edit-a-file) handling a g:Netrw_funcref") +" call Decho("edit-a-file: handling a g:Netrw_funcref") keepj call g:Netrw_funcref() elseif type(g:Netrw_funcref) == 3 -" call Decho("(NetrwBrowseChgDir:edit-a-file) handling a list of g:Netrw_funcrefs") +" call Decho("edit-a-file: handling a list of g:Netrw_funcrefs") for Fncref in g:Netrw_funcref if type(FncRef) == 2 keepj call FncRef() @@ -4424,7 +4418,7 @@ " ---------------------------------------------------- " NetrwBrowseChgDir: just go to the new directory spec {{{3 " ---------------------------------------------------- -" call Decho('(NetrwBrowseChgDir:goto-newdir) case "just go to new directory spec": newdir<'.newdir.'>') +" call Decho('goto-newdir: case "just go to new directory spec": newdir<'.newdir.'>') let dirname = newdir keepj call s:SetRexDir(a:islocal,dirname) keepj call s:NetrwOptionRestore("s:") @@ -4433,37 +4427,52 @@ " --------------------------------------------- " NetrwBrowseChgDir: refresh the directory list {{{3 " --------------------------------------------- -" call Decho('(NetrwBrowseChgDir:refresh-dirlist) case "refresh directory listing": newdir == "./"') +" call Decho('refresh-dirlist: case "refresh directory listing": newdir == "./"') keepj call s:SetRexDir(a:islocal,dirname) elseif newdir == '../' " -------------------------------------- " NetrwBrowseChgDir: go up one directory {{{3 " -------------------------------------- -" call Decho('(NetrwBrowseChgDir:go-up) case "go up one directory": newdir == "../"') +" call Decho('go-up: case "go up one directory": newdir == "../"') if w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") " force a refresh -" call Decho("(NetrwBrowseChgDir:go-up) clear buffer<".expand("%")."> with :%d") -" call Decho("(NetrwBrowseChgDir:go-up) setl noro ma") +" call Decho("go-up: clear buffer<".expand("%")."> with :%d") +" call Decho("go-up: setl noro ma") setl noro ma keepj %d endif if has("amiga") " amiga -" call Decho('(NetrwBrowseChgDir:go-up) case "go up one directory": newdir == "../" and amiga') +" call Decho('go-up: case "go up one directory": newdir == "../" and amiga') if a:islocal let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+$\)','\1','') let dirname= substitute(dirname,'/$','','') else let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+/$\)','\1','') endif -" call Decho("(NetrwBrowseChgDir:go-up) amiga: dirname<".dirname."> (go up one dir)") +" call Decho("go-up: amiga: dirname<".dirname."> (go up one dir)") + + elseif !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16")) + " windows + if a:islocal + let dirname= substitute(dirname,'^\(.*\)/\([^/]\+\)/$','\1','') + if dirname == "" + let dirname= '/' + endif + else + let dirname= substitute(dirname,'^\(\a\+://.\{-}/\{1,2}\)\(.\{-}\)\([^/]\+\)/$','\1\2','') + endif + if dirname =~ '^\a:$' + let dirname= dirname.'/' + endif +" call Decho("go-up: windows: dirname<".dirname."> (go up one dir)") else " unix or cygwin -" call Decho('(NetrwBrowseChgDir:go-up) case "go up one directory": newdir == "../" and unix or cygwin') +" call Decho('go-up: case "go up one directory": newdir == "../" and unix or cygwin') if a:islocal let dirname= substitute(dirname,'^\(.*\)/\([^/]\+\)/$','\1','') if dirname == "" @@ -4472,7 +4481,7 @@ else let dirname= substitute(dirname,'^\(\a\+://.\{-}/\{1,2}\)\(.\{-}\)\([^/]\+\)/$','\1\2','') endif -" call Decho("(NetrwBrowseChgDir:go-up) unix: dirname<".dirname."> (go up one dir)") +" call Decho("go-up: unix: dirname<".dirname."> (go up one dir)") endif keepj call s:SetRexDir(a:islocal,dirname) @@ -4480,35 +4489,35 @@ " -------------------------------------- " NetrwBrowseChgDir: Handle Tree Listing {{{3 " -------------------------------------- -" call Decho('(NetrwBrowseChgDir:tree-list) case liststyle is TREELIST and w:netrw_treedict exists') +" call Decho('tree-list: case liststyle is TREELIST and w:netrw_treedict exists') " force a refresh (for TREELIST, wait for NetrwTreeDir() to force the refresh) -" call Decho("(NetrwBrowseChgDir) (treelist) setl noro ma") +" call Decho("tree-list: setl noro ma") setl noro ma if !(exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")) -" call Decho("(NetrwBrowseChgDir) clear buffer<".expand("%")."> with :%d") +" call Decho("tree-list: clear buffer<".expand("%")."> with :%d") keepj %d endif let treedir = s:NetrwTreeDir() let s:treecurpos = nbcd_curpos let haskey= 0 -" call Decho("(NetrwBrowseChgDir:tree-list) w:netrw_treedict<".string(w:netrw_treedict).">") +" call Decho("tree-list: w:netrw_treedict<".string(w:netrw_treedict).">") " search treedict for tree dir as-is if has_key(w:netrw_treedict,treedir) -" call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'> : found it!') +" call Decho('tree-list: ....searched for treedir<'.treedir.'> : found it!') let haskey= 1 else -" call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'> : not found') +" call Decho('tree-list: ....searched for treedir<'.treedir.'> : not found') endif " search treedict for treedir with a / appended if !haskey && treedir !~ '/$' if has_key(w:netrw_treedict,treedir."/") let treedir= treedir."/" -" call Decho('(NetrwBrowseChgDir:tree-list) ....searched.for treedir<'.treedir.'> found it!') +" call Decho('tree-list: ....searched.for treedir<'.treedir.'> found it!') let haskey = 1 else -" call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'/> : not found') +" call Decho('tree-list: ....searched for treedir<'.treedir.'/> : not found') endif endif @@ -4516,24 +4525,24 @@ if !haskey && treedir =~ '/$' let treedir= substitute(treedir,'/$','','') if has_key(w:netrw_treedict,treedir) -" call Decho('(NetrwBrowseChgDir:tree-list) ....searched.for treedir<'.treedir.'> found it!') +" call Decho('tree-list: ....searched.for treedir<'.treedir.'> found it!') let haskey = 1 else -" call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'> : not found') +" call Decho('tree-list: ....searched for treedir<'.treedir.'> : not found') endif endif if haskey " close tree listing for selected subdirectory -" call Decho("(NetrwBrowseChgDir:tree-list) closing selected subdirectory<".dirname.">") +" call Decho("tree-list: closing selected subdirectory<".dirname.">") call remove(w:netrw_treedict,treedir) -" call Decho("(NetrwBrowseChgDir) removed entry<".treedir."> from treedict") -" call Decho("(NetrwBrowseChgDir) yielding treedict<".string(w:netrw_treedict).">") +" call Decho("tree-list: removed entry<".treedir."> from treedict") +" call Decho("tree-list: yielding treedict<".string(w:netrw_treedict).">") let dirname= w:netrw_treetop else " go down one directory let dirname= substitute(treedir,'/*$','/','') -" call Decho("(NetrwBrowseChgDir:tree-list) go down one dir: treedir<".treedir.">") +" call Decho("tree-list: go down one dir: treedir<".treedir.">") endif keepj call s:SetRexDir(a:islocal,dirname) let s:treeforceredraw = 1 @@ -4543,28 +4552,38 @@ " NetrwBrowseChgDir: Go down one directory {{{3 " ---------------------------------------- let dirname = s:ComposePath(dirname,newdir) -" call Decho("(NetrwBrowseChgDir:go-down) go down one dir: dirname<".dirname."> newdir<".newdir.">") +" call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">") keepj call s:SetRexDir(a:islocal,dirname) endif " -------------------------------------- " NetrwBrowseChgDir: Restore and Cleanup {{{3 " -------------------------------------- - keepj call s:NetrwOptionRestore("s:") - if dolockout -" call Decho("(NetrwBrowseChgDir:restore) filewritable(dirname<".dirname.">)=".filewritable(dirname)) +" call Decho("COMBAK#3: after e! ".dirname.": hidden=".&hidden." bufhidden<".&bufhidden."> mod=".&mod) + if dorestore + " dorestore is zero'd when a local file was hidden or bufhidden; + " in such a case, we want to keep whatever settings it may have. +" call Decho("doing option restore (dorestore=".dorestore.")") + keepj call s:NetrwOptionRestore("s:") +" else " Decho +" call Decho("skipping option restore (dorestore==0): hidden=".&hidden." bufhidden=".&bufhidden." mod=".&mod) + endif +" call Decho("COMBAK#4: after e! ".dirname.": hidden=".&hidden." bufhidden<".&bufhidden."> mod=".&mod) + if dolockout && dorestore +" call Decho("restore: filewritable(dirname<".dirname.">)=".filewritable(dirname)) if filewritable(dirname) -" call Decho("(NetrwBrowseChgDir:restore) doing modification lockout settings: ma nomod noro") -" call Decho("(NetrwBrowseChgDir:restore) setl ma nomod noro") - setl ma nomod noro -" call Decho("(NetrwBrowseChgDir:restore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") - else -" call Decho("(NetrwBrowseChgDir:restore) doing modification lockout settings: ma nomod ro") -" call Decho("(NetrwBrowseChgDir:restore) setl ma nomod noro") - setl ma nomod ro -" call Decho("(NetrwBrowseChgDir:restore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("restore: doing modification lockout settings: ma nomod noro") +" call Decho("restore: setl ma nomod noro") + setl ma noro nomod +" call Decho("restore: ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") + else +" call Decho("restore: doing modification lockout settings: ma nomod ro") +" call Decho("restore: setl ma nomod noro") + setl ma ro nomod +" call Decho("restore: ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") endif endif +" call Decho("COMBAK#5: after e! ".dirname.": hidden=".&hidden." bufhidden<".&bufhidden."> mod=".&mod) let @@= ykeep " call Dret("s:NetrwBrowseChgDir <".dirname."> : curpos<".string(getpos(".")).">") @@ -4572,6 +4591,55 @@ endfun " --------------------------------------------------------------------- +" s:NetrwBrowseUpDir: implements the "-" mappings {{{2 +" for thin, long, and wide: cursor placed just after banner +" for tree, keeps cursor on current filename +fun! s:NetrwBrowseUpDir(islocal) +" call Dfunc("s:NetrwBrowseUpDir(islocal=".a:islocal.")") + norm! 0 + if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") +" call Decho("ftp + treestyle") + let curline= getline(".") + let swwline= winline() - 1 + if exists("w:netrw_treetop") + let b:netrw_curdir= w:netrw_treetop + endif + if a:islocal + call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,'../')) + else + call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,'../')) + endif + if !search('\c^'.s:treedepthstring.curline,'cw') + if !search('\c^'.curline,'cw') + sil! keepj 1 + endif + endif + exe "sil! keepj norm! z\" + while winline() < swwline + let curwinline= winline() + exe "sil! keepj norm! \" + if curwinline == winline() + break + endif + endwhile + else +" call Decho("ftp + not treestyle") + if a:islocal + call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,'../')) + else + call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,'../')) + endif + if exists("w:netrw_bannercnt") +" call Decho("moving to line#".w:netrw_bannercnt) + exe w:netrw_bannercnt + else + 1 + endif + endif +" call Dret("s:NetrwBrowseUpDir") +endfun + +" --------------------------------------------------------------------- " s:NetrwBrowseX: (implements "x") executes a special "viewer" script or program for the {{{2 " given filename; typically this means given their extension. " 0=local, 1=remote @@ -4579,7 +4647,7 @@ " call Dfunc("NetrwBrowseX(fname<".a:fname."> remote=".a:remote.")") let ykeep = @@ - let screenposn = netrw#NetrwSavePosn() + let screenposn = netrw#SavePosn() " special core dump handler if a:fname =~ '/core\(\.\d\+\)\=$' @@ -4597,7 +4665,7 @@ endif endfor endif - call netrw#NetrwRestorePosn(screenposn) + call netrw#RestorePosn(screenposn) let @@= ykeep " call Dret("NetrwBrowseX : coredump handler invoked") return @@ -4629,7 +4697,7 @@ if a:remote == 1 " create a local copy -" call Decho("(remote) a:remote=".a:remote.": create a local copy of <".a:fname.">") +" call Decho("remote: a:remote=".a:remote.": create a local copy of <".a:fname.">") setl bh=delete call netrw#NetRead(3,a:fname) " attempt to rename tempfile @@ -4645,7 +4713,7 @@ let fname= s:netrw_tmpfile endif else -" call Decho("(local) a:remote=".a:remote.": handling local copy of <".a:fname.">") +" call Decho("local: a:remote=".a:remote.": handling local copy of <".a:fname.">") let fname= a:fname " special ~ handler for local if fname =~ '^\~' && expand("$HOME") != "" @@ -4783,7 +4851,7 @@ exe "sil! keepj norm! \" " redraw! endif - call netrw#NetrwRestorePosn(screenposn) + call netrw#RestorePosn(screenposn) let @@= ykeep " call Dret("NetrwBrowseX") @@ -4901,10 +4969,10 @@ fun! s:NetrwHide(islocal) " call Dfunc("NetrwHide(islocal=".a:islocal.") g:netrw_hide=".g:netrw_hide) let ykeep= @@ - let svpos= netrw#NetrwSavePosn() + let svpos= netrw#SavePosn() if exists("s:netrwmarkfilelist_{bufnr('%')}") -" call Decho(((g:netrw_hide == 1)? "unhide" : "hide")." files in markfilelist<".string(s:netrwmarkfilelist_{bufnr("%")}).">") +" call Decho("((g:netrw_hide == 1)? "unhide" : "hide")." files in markfilelist<".string(s:netrwmarkfilelist_{bufnr("%")}).">") " call Decho("g:netrw_list_hide<".g:netrw_list_hide.">") " hide the files in the markfile list @@ -4943,7 +5011,7 @@ endif keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) let @@= ykeep " call Dret("NetrwHide") endfun @@ -4954,7 +5022,7 @@ " call Dfunc("s:NetrwHidden()") let ykeep= @@ " save current position - let svpos= netrw#NetrwSavePosn() + let svpos= netrw#SavePosn() if g:netrw_list_hide =~ '\(^\|,\)\\(^\\|\\s\\s\\)\\zs\\.\\S\\+' " remove pattern from hiding list @@ -4967,7 +5035,7 @@ " refresh screen and return to saved position keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) let @@= ykeep " call Dret("s:NetrwHidden") endfun @@ -5008,291 +5076,745 @@ endfun " --------------------------------------------------------------------- -" s:NetrwLeftmouse: handles the when in a netrw browsing window {{{2 -fun! s:NetrwLeftmouse(islocal) - if exists("s:netrwdrag") - return - endif -" call Dfunc("s:NetrwLeftmouse(islocal=".a:islocal.")") +" s:NetrwLeftmouse: handles the when in a netrw browsing window {{{2 +fun! s:NetrwLeftmouse(islocal) + if exists("s:netrwdrag") + return + endif +" call Dfunc("s:NetrwLeftmouse(islocal=".a:islocal.")") + + let ykeep= @@ + " check if the status bar was clicked on instead of a file/directory name + while getchar(0) != 0 + "clear the input stream + endwhile + call feedkeys("\") + let c = getchar() + let mouse_lnum = v:mouse_lnum + let wlastline = line('w$') + let lastline = line('$') +" call Decho("v:mouse_lnum=".mouse_lnum." line(w$)=".wlastline." line($)=".lastline." v:mouse_win=".v:mouse_win." winnr#".winnr()) +" call Decho("v:mouse_col =".v:mouse_col." col=".col(".")." wincol =".wincol()." winwidth =".winwidth(0)) + if mouse_lnum >= wlastline + 1 || v:mouse_win != winnr() + " appears to be a status bar leftmouse click + let @@= ykeep +" call Dret("s:NetrwLeftmouse : detected a status bar leftmouse click") + return + endif + " NOTE: following test is preventing leftmouse selection/deselection of directories and files in treelist mode (Dec 04, 2013) + " Windows are separated by vertical separator bars - but the mouse seems to be doing what it should when dragging that bar + " without this test. +" if v:mouse_col != col('.') +" let @@= ykeep +" call Dret("s:NetrwLeftmouse : detected a vertical separator bar leftmouse click") +" return +" endif + + if a:islocal + if exists("b:netrw_curdir") + keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord())) + endif + else + if exists("b:netrw_curdir") + keepj call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord())) + endif + endif + let @@= ykeep +" call Dret("s:NetrwLeftmouse") +endfun + +" --------------------------------------------------------------------- +" s:NetrwSLeftmouse: marks the file under the cursor. May be dragged to select additional files {{{2 +fun! s:NetrwSLeftmouse(islocal) +" call Dfunc("s:NetrwSLeftmouse(islocal=".a:islocal.")") + + let s:ngw= s:NetrwGetWord() + call s:NetrwMarkFile(a:islocal,s:ngw) + +" call Dret("s:NetrwSLeftmouse") +endfun + +" --------------------------------------------------------------------- +" s:NetrwSLeftdrag: invoked via a shift-leftmouse and dragging {{{2 +" Used to mark multiple files. +fun! s:NetrwSLeftdrag(islocal) +" call Dfunc("s:NetrwSLeftdrag(islocal=".a:islocal.")") + if !exists("s:netrwdrag") + let s:netrwdrag = winnr() + if a:islocal + nno :call NetrwSLeftrelease(1) + else + nno :call NetrwSLeftrelease(0) + endif + endif + let ngw = s:NetrwGetWord() + if !exists("s:ngw") || s:ngw != ngw + call s:NetrwMarkFile(a:islocal,ngw) + endif + let s:ngw= ngw +" call Dret("s:NetrwSLeftdrag : s:netrwdrag=".s:netrwdrag." buf#".bufnr("%")) +endfun + +" --------------------------------------------------------------------- +" s:NetrwSLeftrelease: terminates shift-leftmouse dragging {{{2 +fun! s:NetrwSLeftrelease(islocal) +" call Dfunc("s:NetrwSLeftrelease(islocal=".a:islocal.") s:netrwdrag=".s:netrwdrag." buf#".bufnr("%")) + if exists("s:netrwdrag") + nunmap + let ngw = s:NetrwGetWord() + if !exists("s:ngw") || s:ngw != ngw + call s:NetrwMarkFile(a:islocal,ngw) + endif + if exists("s:ngw") + unlet s:ngw + endif + unlet s:netrwdrag + endif +" call Dret("s:NetrwSLeftrelease") +endfun + +" --------------------------------------------------------------------- +" s:NetrwListHide: uses [range]g~...~d to delete files that match comma {{{2 +" separated patterns given in g:netrw_list_hide +fun! s:NetrwListHide() +" call Dfunc("NetrwListHide() g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">") + let ykeep= @@ + + " find a character not in the "hide" string to use as a separator for :g and :v commands + " How-it-works: take the hiding command, convert it into a range. Duplicate + " characters don't matter. Remove all such characters from the '/~...90' + " string. Use the first character left as a separator character. + let listhide= g:netrw_list_hide + let sep = strpart(substitute('/~@#$%^&*{};:,<.>?|1234567890','['.escape(listhide,'-]^\').']','','ge'),1,1) +" call Decho("sep=".sep) + + while listhide != "" + if listhide =~ ',' + let hide = substitute(listhide,',.*$','','e') + let listhide = substitute(listhide,'^.\{-},\(.*\)$','\1','e') + else + let hide = listhide + let listhide = "" + endif + + " Prune the list by hiding any files which match + if g:netrw_hide == 1 +" call Decho("hiding<".hide."> listhide<".listhide.">") + exe 'sil! keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'d' + elseif g:netrw_hide == 2 +" call Decho("showing<".hide."> listhide<".listhide.">") + exe 'sil! keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'s@^@ /-KEEP-/ @' + endif + endwhile + if g:netrw_hide == 2 + exe 'sil! keepj '.w:netrw_bannercnt.',$v@^ /-KEEP-/ @d' + exe 'sil! keepj '.w:netrw_bannercnt.',$s@^\%( /-KEEP-/ \)\+@@e' + endif + + " remove any blank lines that have somehow remained. + " This seems to happen under Windows. + exe 'sil! keepj 1,$g@^\s*$@d' + + let @@= ykeep +" call Dret("NetrwListHide") +endfun + +" --------------------------------------------------------------------- +" NetrwHideEdit: allows user to edit the file/directory hiding list +fun! s:NetrwHideEdit(islocal) +" call Dfunc("NetrwHideEdit(islocal=".a:islocal.")") + + let ykeep= @@ + " save current cursor position + let svpos= netrw#SavePosn() + + " get new hiding list from user + call inputsave() + let newhide= input("Edit Hiding List: ",g:netrw_list_hide) + call inputrestore() + let g:netrw_list_hide= newhide +" call Decho("new g:netrw_list_hide<".g:netrw_list_hide.">") + + " refresh the listing + sil keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,"./")) + + " restore cursor position + call netrw#RestorePosn(svpos) + let @@= ykeep + +" call Dret("NetrwHideEdit") +endfun + +" --------------------------------------------------------------------- +" NetSortSequence: allows user to edit the sorting sequence +fun! s:NetSortSequence(islocal) +" call Dfunc("NetSortSequence(islocal=".a:islocal.")") + + let ykeep= @@ + let svpos= netrw#SavePosn() + call inputsave() + let newsortseq= input("Edit Sorting Sequence: ",g:netrw_sort_sequence) + call inputrestore() + + " refresh the listing + let g:netrw_sort_sequence= newsortseq + keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) + keepj call netrw#RestorePosn(svpos) + let @@= ykeep + +" call Dret("NetSortSequence") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMakeDir: this function makes a directory (both local and remote) {{{2 +fun! s:NetrwMakeDir(usrhost) +" call Dfunc("s:NetrwMakeDir(usrhost<".a:usrhost.">)") let ykeep= @@ - " check if the status bar was clicked on instead of a file/directory name - while getchar(0) != 0 - "clear the input stream - endwhile - call feedkeys("\") - let c = getchar() - let mouse_lnum = v:mouse_lnum - let wlastline = line('w$') - let lastline = line('$') -" call Decho("v:mouse_lnum=".mouse_lnum." line(w$)=".wlastline." line($)=".lastline." v:mouse_win=".v:mouse_win." winnr#".winnr()) -" call Decho("v:mouse_col =".v:mouse_col." col=".col(".")." wincol =".wincol()." winwidth =".winwidth(0)) - if mouse_lnum >= wlastline + 1 || v:mouse_win != winnr() - " appears to be a status bar leftmouse click - let @@= ykeep -" call Dret("s:NetrwLeftmouse : detected a status bar leftmouse click") - return - endif - if v:mouse_col != col('.') + " get name of new directory from user. A bare will skip. + " if its currently a directory, also request will be skipped, but with + " a message. + call inputsave() + let newdirname= input("Please give directory name: ") + call inputrestore() +" call Decho("newdirname<".newdirname.">") + + if newdirname == "" let @@= ykeep -" call Dret("s:NetrwLeftmouse : detected a vertical separator bar leftmouse click") +" call Dret("s:NetrwMakeDir : user aborted with bare ") return endif - if a:islocal - if exists("b:netrw_curdir") - keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord())) + if a:usrhost == "" +" call Decho("local mkdir") + + " Local mkdir: + " sanity checks + let fullnewdir= b:netrw_curdir.'/'.newdirname +" call Decho("fullnewdir<".fullnewdir.">") + if isdirectory(fullnewdir) + if !exists("g:netrw_quiet") + keepj call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a directory!",24) + endif + let @@= ykeep +" call Dret("s:NetrwMakeDir : directory<".newdirname."> exists previously") + return endif - else - if exists("b:netrw_curdir") - keepj call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord())) + if s:FileReadable(fullnewdir) + if !exists("g:netrw_quiet") + keepj call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a file!",25) + endif + let @@= ykeep +" call Dret("s:NetrwMakeDir : file<".newdirname."> exists previously") + return endif - endif - let @@= ykeep -" call Dret("s:NetrwLeftmouse") -endfun -" --------------------------------------------------------------------- -" s:NetrwRightdrag: {{{2 -"DechoTabOn -fun! s:NetrwRightdrag(islocal) -" call Dfunc("s:NetrwRightdrag(islocal=".a:islocal.")") - if !exists("s:netrwdrag") - let s:netrwdrag = winnr() - call s:NetrwMarkFile(a:islocal,s:NetrwGetWord()) - if a:islocal - nno :call NetrwRightrelease(1) + " requested new local directory is neither a pre-existing file or + " directory, so make it! + if exists("*mkdir") + if has("unix") + call mkdir(fullnewdir,"p",xor(0777, system("umask"))) + else + call mkdir(fullnewdir,"p") + endif + else + let netrw_origdir= s:NetrwGetcwd(1) + call s:NetrwLcd(b:netrw_curdir) +" call Decho("netrw_origdir<".netrw_origdir.">: lcd b:netrw_curdir<".fnameescape(b:netrw_curdir).">") +" call Decho("exe sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1)) + exe "sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1) + if v:shell_error != 0 + let @@= ykeep + call netrw#ErrorMsg(s:ERROR,"consider setting g:netrw_localmkdir<".g:netrw_localmkdir."> to something that works",80) +" call Dret("s:NetrwMakeDir : failed: sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1)) + return + endif + if !g:netrw_keepdir +" call Decho("restoring netrw_origdir since g:netrw_keepdir=".g:netrw_keepdir) + call s:NetrwLcd(netrw_origdir) + endif + endif + + if v:shell_error == 0 + " refresh listing +" call Decho("refresh listing") + let svpos= netrw#SavePosn() + call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./')) + call netrw#RestorePosn(svpos) + elseif !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",26) + endif +" redraw! + + elseif !exists("b:netrw_method") || b:netrw_method == 4 + " Remote mkdir: using ssh +" call Decho("remote mkdir") + let mkdircmd = s:MakeSshCmd(g:netrw_mkdir_cmd) + let newdirname= substitute(b:netrw_curdir,'^\%(.\{-}/\)\{3}\(.*\)$','\1','').newdirname +" call Decho("exe sil! !".mkdircmd." ".shellescape(newdirname,1)) + exe "sil! !".mkdircmd." ".shellescape(newdirname,1) + if v:shell_error == 0 + " refresh listing + let svpos= netrw#SavePosn() + keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./')) + keepj call netrw#RestorePosn(svpos) + elseif !exists("g:netrw_quiet") + keepj call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",27) + endif +" redraw! + + elseif b:netrw_method == 2 + " Remote mkdir: using ftp+.netrc + let svpos= netrw#SavePosn() +" call Decho("b:netrw_curdir<".b:netrw_curdir.">") + if exists("b:netrw_fname") +" call Decho("b:netrw_fname<".b:netrw_fname.">") + let remotepath= b:netrw_fname + else + let remotepath= "" + endif + call s:NetrwRemoteFtpCmd(remotepath,g:netrw_remote_mkdir.' "'.newdirname.'"') + keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./')) + keepj call netrw#RestorePosn(svpos) + + elseif b:netrw_method == 3 + " Remote mkdir: using ftp + machine, id, passwd, and fname (ie. no .netrc) + let svpos= netrw#SavePosn() +" call Decho("b:netrw_curdir<".b:netrw_curdir.">") + if exists("b:netrw_fname") +" call Decho("b:netrw_fname<".b:netrw_fname.">") + let remotepath= b:netrw_fname else - nno :call NetrwRightrelease(0) + let remotepath= "" endif + call s:NetrwRemoteFtpCmd(remotepath,g:netrw_remote_mkdir.' "'.newdirname.'"') + keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./')) + keepj call netrw#RestorePosn(svpos) endif -" call Dret("s:NetrwRightdrag : s:netrwdrag=".s:netrwdrag." buf#".bufnr("%")) + + let @@= ykeep +" call Dret("s:NetrwMakeDir") endfun " --------------------------------------------------------------------- -" s:NetrwRightrelease: {{{2 -fun! s:NetrwRightrelease(islocal) -" call Dfunc("s:NetrwRightrelease(islocal=".a:islocal.") s:netrwdrag=".s:netrwdrag." buf#".bufnr("%")) - if exists("s:netrwdrag") - nunmap - let tgt = s:NetrwGetWord() -" call Decho("target#1: ".tgt) - if tgt =~ '/$' && tgt !~ '^\./$' - let tgt = b:netrw_curdir."/".tgt - else - let tgt= b:netrw_curdir - endif -" call Decho("target#2: ".tgt) - call netrw#NetrwMakeTgt(tgt) - let curwin= winnr() - exe s:netrwdrag."wincmd w" - call s:NetrwMarkFileMove(a:islocal) - exe curwin."wincmd w" - unlet s:netrwdrag +" s:TreeSqueezeDir: allows a shift-cr (gvim only) to squeeze the current tree-listing directory {{{2 +fun! s:TreeSqueezeDir(islocal) +" call Dfunc("s:TreeSqueezeDir(islocal=".a:islocal.")") + if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") + " its a tree-listing style + let curdepth = substitute(getline('.'),'^\(\%('.s:treedepthstring.'\)*\)[^'.s:treedepthstring.'].\{-}$','\1','e') + let iline = line(".") - 1 + let stopline = (exists("w:netrw_bannercnt")? (w:netrw_bannercnt + 1) : 1) +" call Decho("curdepth=".curdepth) +" call Decho("stopline#".stopline) +" call Decho("starting with line#".line(".").": ".getline('.')) + while iline > stopline + " find a line that has less depth + let depth = substitute(getline('.'),'^\(\%('.s:treedepthstring.'\)*\)[^'.s:treedepthstring.'].\{-}$','\1','e') +" call Decho("considering line#".line(".").": ".getline('.')) + if depth < curdepth + break + endif + norm! k + endwhile +" call Decho("squeezing at line#".line(".").": ".getline('.')) + call s:NetrwBrowse(a:islocal,s:NetrwBrowseChgDir(a:islocal,s:NetrwGetWord())) endif -" call Dret("s:NetrwRightrelease") +" call Dret("s:TreeSqueezeDir") endfun " --------------------------------------------------------------------- -" s:NetrwListHide: uses [range]g~...~d to delete files that match comma {{{2 -" separated patterns given in g:netrw_list_hide -fun! s:NetrwListHide() -" call Dfunc("NetrwListHide() g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">") - let ykeep= @@ +" s:NetrwMaps: {{{2 +fun! s:NetrwMaps(islocal) +" call Dfunc("s:NetrwMaps(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">") - " find a character not in the "hide" string to use as a separator for :g and :v commands - " How-it-works: take the hiding command, convert it into a range. Duplicate - " characters don't matter. Remove all such characters from the '/~...90' - " string. Use the first character left as a separator character. - let listhide= g:netrw_list_hide - let sep = strpart(substitute('/~@#$%^&*{};:,<.>?|1234567890','['.escape(listhide,'-]^\').']','','ge'),1,1) -" call Decho("sep=".sep) + if g:netrw_mousemaps && g:netrw_retmap +" call Decho("set up Rexplore 2-leftmouse") + if !hasmapto("NetrwReturn") + if maparg("<2-leftmouse>","n") == "" || maparg("<2-leftmouse>","n") =~ '^-$' +" call Decho("making map for 2-leftmouse") + nmap <2-leftmouse> NetrwReturn + elseif maparg("","n") == "" +" call Decho("making map for c-leftmouse") + nmap NetrwReturn + endif + endif + nno NetrwReturn :Rexplore +" call Decho("made NetrwReturn map") + endif - while listhide != "" - if listhide =~ ',' - let hide = substitute(listhide,',.*$','','e') - let listhide = substitute(listhide,'^.\{-},\(.*\)$','\1','e') - else - let hide = listhide - let listhide = "" + if a:islocal +" call Decho("make local maps") + " local normal-mode maps + nnoremap a :call NetrwHide(1) + nnoremap % :call NetrwOpenFile(1) + nnoremap c :call NetrwLcd(b:netrw_curdir) + nnoremap C :call NetrwSetChgwin() + nnoremap :call netrw#LocalBrowseCheck(NetrwBrowseChgDir(1,NetrwGetWord())) + nnoremap :call TreeSqueezeDir(1) + nnoremap d :call NetrwMakeDir("") + nnoremap - :call NetrwBrowseUpDir(1) + nnoremap gb :call NetrwBookHistHandler(1,b:netrw_curdir) + nnoremap gd :call NetrwForceChgDir(1,NetrwGetWord()) + nnoremap gf :call NetrwForceFile(1,NetrwGetWord()) + nnoremap gh :call NetrwHidden(1) + nnoremap gp :call NetrwChgPerm(1,b:netrw_curdir) + nnoremap I :call NetrwBannerCtrl(1) + nnoremap i :call NetrwListStyle(1) + nnoremap mb :call NetrwBookHistHandler(0,b:netrw_curdir) + nnoremap mB :call NetrwBookHistHandler(6,b:netrw_curdir) + nnoremap mc :call NetrwMarkFileCopy(1) + nnoremap md :call NetrwMarkFileDiff(1) + nnoremap me :call NetrwMarkFileEdit(1) + nnoremap mf :call NetrwMarkFile(1,NetrwGetWord()) + nnoremap mF :call NetrwUnmarkList(bufnr("%"),b:netrw_curdir) + nnoremap mg :call NetrwMarkFileGrep(1) + nnoremap mh :call NetrwMarkHideSfx(1) + nnoremap mm :call NetrwMarkFileMove(1) + nnoremap mp :call NetrwMarkFilePrint(1) + nnoremap mr :call NetrwMarkFileRegexp(1) + nnoremap ms :call NetrwMarkFileSource(1) + nnoremap mt :call NetrwMarkFileTgt(1) + nnoremap mT :call NetrwMarkFileTag(1) + nnoremap mu :call NetrwUnMarkFile(1) + nnoremap mx :call NetrwMarkFileExe(1) + nnoremap mX :call NetrwMarkFileVimCmd(1) + nnoremap mz :call NetrwMarkFileCompress(1) + nnoremap O :call NetrwObtain(1) + nnoremap o :call NetrwSplit(3) + nnoremap p :call NetrwPreview(NetrwBrowseChgDir(1,NetrwGetWord(),1)) + nnoremap P :call NetrwPrevWinOpen(1) + nnoremap qb :call NetrwBookHistHandler(2,b:netrw_curdir) + nnoremap qf :call NetrwFileInfo(1,NetrwGetWord()) + nnoremap qF :call NetrwMarkFileQFEL(1,getqflist()) + nnoremap r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'exe "norm! 0"call NetrwRefresh(1,NetrwBrowseChgDir(1,'./')) + nnoremap s :call NetrwSortStyle(1) + nnoremap S :call NetSortSequence(1) + nnoremap t :call NetrwSplit(4) + nnoremap Tb :call NetrwSetTgt('b',v:count1) + nnoremap Th :call NetrwSetTgt('h',v:count) + nnoremap u :call NetrwBookHistHandler(4,expand("%")) + nnoremap U :call NetrwBookHistHandler(5,expand("%")) + nnoremap v :call NetrwSplit(5) + nnoremap x :call netrw#NetrwBrowseX(NetrwBrowseChgDir(1,NetrwGetWord(),0),0)" + nnoremap X :call NetrwLocalExecute(expand(""))" + " local insert-mode maps + inoremap a :call NetrwHide(1) + inoremap c :exe "keepjumps lcd ".fnameescape(b:netrw_curdir) + inoremap c :call NetrwLcd(b:netrw_curdir) + inoremap C :call NetrwSetChgwin() + inoremap % :call NetrwOpenFile(1) + inoremap - :call NetrwBrowseUpDir(1) + inoremap :call netrw#LocalBrowseCheck(NetrwBrowseChgDir(1,NetrwGetWord())) + inoremap :call TreeSqueezeDir(1) + inoremap d :call NetrwMakeDir("") + inoremap gb :call NetrwBookHistHandler(1,b:netrw_curdir) + inoremap gh :call NetrwHidden(1) + inoremap gp :call NetrwChgPerm(1,b:netrw_curdir) + inoremap I :call NetrwBannerCtrl(1) + inoremap i :call NetrwListStyle(1) + inoremap mb :call NetrwBookHistHandler(0,b:netrw_curdir) + inoremap mB :call NetrwBookHistHandler(6,b:netrw_curdir) + inoremap mc :call NetrwMarkFileCopy(1) + inoremap md :call NetrwMarkFileDiff(1) + inoremap me :call NetrwMarkFileEdit(1) + inoremap mf :call NetrwMarkFile(1,NetrwGetWord()) + inoremap mg :call NetrwMarkFileGrep(1) + inoremap mh :call NetrwMarkHideSfx(1) + inoremap mm :call NetrwMarkFileMove(1) + inoremap mp :call NetrwMarkFilePrint(1) + inoremap mr :call NetrwMarkFileRegexp(1) + inoremap ms :call NetrwMarkFileSource(1) + inoremap mT :call NetrwMarkFileTag(1) + inoremap mt :call NetrwMarkFileTgt(1) + inoremap mu :call NetrwUnMarkFile(1) + inoremap mx :call NetrwMarkFileExe(1) + inoremap mX :call NetrwMarkFileVimCmd(1) + inoremap mz :call NetrwMarkFileCompress(1) + inoremap O :call NetrwObtain(1) + inoremap o :call NetrwSplit(3) + inoremap p :call NetrwPreview(NetrwBrowseChgDir(1,NetrwGetWord(),1)) + inoremap P :call NetrwPrevWinOpen(1) + inoremap qb :call NetrwBookHistHandler(2,b:netrw_curdir) + inoremap qf :call NetrwFileInfo(1,NetrwGetWord()) + inoremap qF :call NetrwMarkFileQFEL(1,getqflist()) + inoremap r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'exe "norm! 0"call NetrwRefresh(1,NetrwBrowseChgDir(1,'./')) + inoremap s :call NetrwSortStyle(1) + inoremap S :call NetSortSequence(1) + inoremap t :call NetrwSplit(4) + inoremap Tb :call NetrwSetTgt('b',v:count1) + inoremap Th :call NetrwSetTgt('h',v:count) + inoremap u :call NetrwBookHistHandler(4,expand("%")) + inoremap U :call NetrwBookHistHandler(5,expand("%")) + inoremap v :call NetrwSplit(5) + inoremap x :call netrw#NetrwBrowseX(NetrwBrowseChgDir(1,NetrwGetWord(),0),0)" + if !hasmapto('NetrwHideEdit') + nmap NetrwHideEdit + imap NetrwHideEdit + endif + nnoremap NetrwHideEdit :call NetrwHideEdit(1) + if !hasmapto('NetrwRefresh') + nmap NetrwRefresh + imap NetrwRefresh endif - - " Prune the list by hiding any files which match - if g:netrw_hide == 1 -" call Decho("hiding<".hide."> listhide<".listhide.">") - exe 'sil! keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'d' - elseif g:netrw_hide == 2 -" call Decho("showing<".hide."> listhide<".listhide.">") - exe 'sil! keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'s@^@ /-KEEP-/ @' + nnoremap NetrwRefresh :call NetrwRefresh(1,NetrwBrowseChgDir(1,'./')) + if s:didstarstar || !mapcheck("","n") + nnoremap :Nexplore + inoremap :Nexplore endif - endwhile - if g:netrw_hide == 2 - exe 'sil! keepj '.w:netrw_bannercnt.',$v@^ /-KEEP-/ @d' - exe 'sil! keepj '.w:netrw_bannercnt.',$s@^\%( /-KEEP-/ \)\+@@e' - endif - - " remove any blank lines that have somehow remained. - " This seems to happen under Windows. - exe 'sil! keepj 1,$g@^\s*$@d' - - let @@= ykeep -" call Dret("NetrwListHide") -endfun - -" --------------------------------------------------------------------- -" NetrwHideEdit: allows user to edit the file/directory hiding list -fun! s:NetrwHideEdit(islocal) -" call Dfunc("NetrwHideEdit(islocal=".a:islocal.")") - - let ykeep= @@ - " save current cursor position - let svpos= netrw#NetrwSavePosn() - - " get new hiding list from user - call inputsave() - let newhide= input("Edit Hiding List: ",g:netrw_list_hide) - call inputrestore() - let g:netrw_list_hide= newhide -" call Decho("new g:netrw_list_hide<".g:netrw_list_hide.">") - - " refresh the listing - sil keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,"./")) - - " restore cursor position - call netrw#NetrwRestorePosn(svpos) - let @@= ykeep - -" call Dret("NetrwHideEdit") -endfun - -" --------------------------------------------------------------------- -" NetSortSequence: allows user to edit the sorting sequence -fun! s:NetSortSequence(islocal) -" call Dfunc("NetSortSequence(islocal=".a:islocal.")") - - let ykeep= @@ - let svpos= netrw#NetrwSavePosn() - call inputsave() - let newsortseq= input("Edit Sorting Sequence: ",g:netrw_sort_sequence) - call inputrestore() - - " refresh the listing - let g:netrw_sort_sequence= newsortseq - keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#NetrwRestorePosn(svpos) - let @@= ykeep - -" call Dret("NetSortSequence") -endfun - -" --------------------------------------------------------------------- -" s:NetrwMakeDir: this function makes a directory (both local and remote) {{{2 -fun! s:NetrwMakeDir(usrhost) -" call Dfunc("NetrwMakeDir(usrhost<".a:usrhost.">)") - - let ykeep= @@ - " get name of new directory from user. A bare will skip. - " if its currently a directory, also request will be skipped, but with - " a message. - call inputsave() - let newdirname= input("Please give directory name: ") - call inputrestore() -" call Decho("newdirname<".newdirname.">") - - if newdirname == "" - let @@= ykeep -" call Dret("NetrwMakeDir : user aborted with bare ") - return - endif - - if a:usrhost == "" -" call Decho("local mkdir") + if s:didstarstar || !mapcheck("","n") + nnoremap :Pexplore + inoremap :Pexplore + endif + let mapsafecurdir = escape(b:netrw_curdir, s:netrw_map_escape) + if g:netrw_mousemaps == 1 + nmap NetrwLeftmouse + nno NetrwLeftmouse :call NetrwLeftmouse(1) + nmap NetrwMiddlemouse + nno NetrwMiddlemouse :call NetrwPrevWinOpen(1) + nmap NetrwSLeftmouse + nno NetrwSLeftmouse :call NetrwSLeftmouse(1) + nmap NetrwSLeftdrag + nno NetrwSLeftdrag :call NetrwSLeftdrag(1) + nmap <2-leftmouse> Netrw2Leftmouse + nmap Netrw2Leftmouse - + imap ILeftmouse + ino ILeftmouse :call NetrwLeftmouse(1) + imap IMiddlemouse + ino IMiddlemouse :call NetrwPrevWinOpen(1) + imap ISLeftmouse + ino ISLeftmouse :call NetrwMarkFile(1,NetrwGetWord()) + exe 'nnoremap :call NetrwLocalRm("'.mapsafecurdir.'")' + exe 'vnoremap :call NetrwLocalRm("'.mapsafecurdir.'")' + exe 'inoremap :call NetrwLocalRm("'.mapsafecurdir.'")' + endif + exe 'nnoremap :call NetrwLocalRm("'.mapsafecurdir.'")' + exe 'nnoremap D :call NetrwLocalRm("'.mapsafecurdir.'")' + exe 'nnoremap R :call NetrwLocalRename("'.mapsafecurdir.'")' + exe 'nnoremap d :call NetrwMakeDir("")' + exe 'vnoremap :call NetrwLocalRm("'.mapsafecurdir.'")' + exe 'vnoremap D :call NetrwLocalRm("'.mapsafecurdir.'")' + exe 'vnoremap R :call NetrwLocalRename("'.mapsafecurdir.'")' + exe 'inoremap :call NetrwLocalRm("'.mapsafecurdir.'")' + exe 'inoremap D :call NetrwLocalRm("'.mapsafecurdir.'")' + exe 'inoremap R :call NetrwLocalRename("'.mapsafecurdir.'")' + exe 'inoremap d :call NetrwMakeDir("")' + nnoremap :he netrw-quickhelp - " Local mkdir: - " sanity checks - let fullnewdir= b:netrw_curdir.'/'.newdirname -" call Decho("fullnewdir<".fullnewdir.">") - if isdirectory(fullnewdir) - if !exists("g:netrw_quiet") - keepj call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a directory!",24) - endif - let @@= ykeep -" call Dret("NetrwMakeDir : directory<".newdirname."> exists previously") - return + else " remote +" call Decho("make remote maps") + call s:RemotePathAnalysis(b:netrw_curdir) + " remote normal-mode maps + nnoremap :call NetrwBrowse(0,NetrwBrowseChgDir(0,NetrwGetWord())) + nnoremap :call TreeSqueezeDir(0) + nnoremap :call NetrwRefresh(0,NetrwBrowseChgDir(0,'./')) + nnoremap - :call NetrwBrowseUpDir(0) + nnoremap a :call NetrwHide(0) + nnoremap mb :call NetrwBookHistHandler(0,b:netrw_curdir) + nnoremap mc :call NetrwMarkFileCopy(0) + nnoremap md :call NetrwMarkFileDiff(0) + nnoremap me :call NetrwMarkFileEdit(0) + nnoremap mf :call NetrwMarkFile(0,NetrwGetWord()) + nnoremap mF :call NetrwUnmarkList(bufnr("%"),b:netrw_curdir) + nnoremap mg :call NetrwMarkFileGrep(0) + nnoremap mh :call NetrwMarkHideSfx(0) + nnoremap mm :call NetrwMarkFileMove(0) + nnoremap mp :call NetrwMarkFilePrint(0) + nnoremap mr :call NetrwMarkFileRegexp(0) + nnoremap ms :call NetrwMarkFileSource(0) + nnoremap mt :call NetrwMarkFileTgt(0) + nnoremap mT :call NetrwMarkFileTag(0) + nnoremap mu :call NetrwUnMarkFile(0) + nnoremap mx :call NetrwMarkFileExe(0) + nnoremap mX :call NetrwMarkFileVimCmd(0) + nnoremap mz :call NetrwMarkFileCompress(0) + nnoremap gb :call NetrwBookHistHandler(1,b:netrw_curdir) + nnoremap gd :call NetrwForceChgDir(0,NetrwGetWord()) + nnoremap gf :call NetrwForceFile(0,NetrwGetWord()) + nnoremap gh :call NetrwHidden(0) + nnoremap gp :call NetrwChgPerm(0,b:netrw_curdir) + nnoremap C :call NetrwSetChgwin() + nnoremap i :call NetrwListStyle(0) + nnoremap I :call NetrwBannerCtrl(1) + nnoremap o :call NetrwSplit(0) + nnoremap O :call NetrwObtain(0) + nnoremap p :call NetrwPreview(NetrwBrowseChgDir(1,NetrwGetWord(),1)) + nnoremap P :call NetrwPrevWinOpen(0) + nnoremap qb :call NetrwBookHistHandler(2,b:netrw_curdir) + nnoremap mB :call NetrwBookHistHandler(6,b:netrw_curdir) + nnoremap qf :call NetrwFileInfo(0,NetrwGetWord()) + nnoremap qF :call NetrwMarkFileQFEL(0,getqflist()) + nnoremap r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'exe "norm! 0"call NetrwBrowse(0,NetrwBrowseChgDir(0,'./')) + nnoremap s :call NetrwSortStyle(0) + nnoremap S :call NetSortSequence(0) + nnoremap t :call NetrwSplit(1) + nnoremap Tb :call NetrwSetTgt('b',v:count1) + nnoremap Th :call NetrwSetTgt('h',v:count) + nnoremap u :call NetrwBookHistHandler(4,b:netrw_curdir) + nnoremap U :call NetrwBookHistHandler(5,b:netrw_curdir) + nnoremap v :call NetrwSplit(2) + nnoremap x :call netrw#NetrwBrowseX(NetrwBrowseChgDir(0,NetrwGetWord()),1) + nnoremap % :call NetrwOpenFile(0) + " remote insert-mode maps + inoremap :call NetrwBrowse(0,NetrwBrowseChgDir(0,NetrwGetWord())) + inoremap :call NetrwRefresh(0,NetrwBrowseChgDir(0,'./')) + inoremap :call TreeSqueezeDir(0) + inoremap - :call NetrwBrowseUpDir(0) + inoremap a :call NetrwHide(0) + inoremap mb :call NetrwBookHistHandler(0,b:netrw_curdir) + inoremap mc :call NetrwMarkFileCopy(0) + inoremap md :call NetrwMarkFileDiff(0) + inoremap me :call NetrwMarkFileEdit(0) + inoremap mf :call NetrwMarkFile(0,NetrwGetWord()) + inoremap mg :call NetrwMarkFileGrep(0) + inoremap mh :call NetrwMarkHideSfx(0) + inoremap mm :call NetrwMarkFileMove(0) + inoremap mp :call NetrwMarkFilePrint(0) + inoremap mr :call NetrwMarkFileRegexp(0) + inoremap ms :call NetrwMarkFileSource(0) + inoremap mt :call NetrwMarkFileTgt(0) + inoremap mT :call NetrwMarkFileTag(0) + inoremap mu :call NetrwUnMarkFile(0) + inoremap mx :call NetrwMarkFileExe(0) + inoremap mX :call NetrwMarkFileVimCmd(0) + inoremap mz :call NetrwMarkFileCompress(0) + inoremap gb :call NetrwBookHistHandler(1,b:netrw_curdir) + inoremap gh :call NetrwHidden(0) + inoremap gp :call NetrwChgPerm(0,b:netrw_curdir) + inoremap C :call NetrwSetChgwin() + inoremap i :call NetrwListStyle(0) + inoremap I :call NetrwBannerCtrl(1) + inoremap o :call NetrwSplit(0) + inoremap O :call NetrwObtain(0) + inoremap p :call NetrwPreview(NetrwBrowseChgDir(1,NetrwGetWord(),1)) + inoremap P :call NetrwPrevWinOpen(0) + inoremap qb :call NetrwBookHistHandler(2,b:netrw_curdir) + inoremap mB :call NetrwBookHistHandler(6,b:netrw_curdir) + inoremap qf :call NetrwFileInfo(0,NetrwGetWord()) + inoremap qF :call NetrwMarkFileQFEL(0,getqflist()) + inoremap r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'exe "norm! 0"call NetrwBrowse(0,NetrwBrowseChgDir(0,'./')) + inoremap s :call NetrwSortStyle(0) + inoremap S :call NetSortSequence(0) + inoremap t :call NetrwSplit(1) + inoremap Tb :call NetrwSetTgt('b',v:count1) + inoremap Th :call NetrwSetTgt('h',v:count) + inoremap u :call NetrwBookHistHandler(4,b:netrw_curdir) + inoremap U :call NetrwBookHistHandler(5,b:netrw_curdir) + inoremap v :call NetrwSplit(2) + inoremap x :call netrw#NetrwBrowseX(NetrwBrowseChgDir(0,NetrwGetWord()),1) + inoremap % :call NetrwOpenFile(0) + if !hasmapto('NetrwHideEdit') + nmap NetrwHideEdit + imap NetrwHideEdit endif - if s:FileReadable(fullnewdir) - if !exists("g:netrw_quiet") - keepj call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a file!",25) - endif - let @@= ykeep -" call Dret("NetrwMakeDir : file<".newdirname."> exists previously") - return + nnoremap NetrwHideEdit :call NetrwHideEdit(0) + if !hasmapto('NetrwRefresh') + nmap NetrwRefresh + imap NetrwRefresh endif - " requested new local directory is neither a pre-existing file or - " directory, so make it! - if exists("*mkdir") - call mkdir(fullnewdir,"p") - else - let netrw_origdir= s:NetrwGetcwd(1) - exe 'keepj lcd '.fnameescape(b:netrw_curdir) -" call Decho("netrw_origdir<".netrw_origdir.">: lcd b:netrw_curdir<".fnameescape(b:netrw_curdir).">") -" call Decho("exe sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1)) - exe "sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1) - if v:shell_error != 0 - let @@= ykeep - call netrw#ErrorMsg(s:ERROR,"consider setting g:netrw_localmkdir<".g:netrw_localmkdir."> to something that works",80) -" call Dret("NetrwMakeDir : failed: sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1)) - return - endif - if !g:netrw_keepdir - exe 'keepj lcd '.fnameescape(netrw_origdir) -" call Decho("netrw_keepdir=".g:netrw_keepdir.": keepjumps lcd ".fnameescape(netrw_origdir)." getcwd<".getcwd().">") - endif + let mapsafepath = escape(s:path, s:netrw_map_escape) + let mapsafeusermach = escape(s:user.s:machine, s:netrw_map_escape) + + nnoremap NetrwRefresh :call NetrwRefresh(0,NetrwBrowseChgDir(0,'./')) + if g:netrw_mousemaps == 1 + nmap NetrwLeftmouse + nno NetrwLeftmouse :call NetrwLeftmouse(0) + nmap NetrwLeftdrag + nno NetrwLeftdrag :call NetrwLeftdrag(0) + nmap NetrwSLeftmouse + nno NetrwSLeftmouse :call NetrwSLeftmouse(0) + nmap NetrwSLeftdrag + nno NetrwSLeftdrag :call NetrwSLeftdrag(0) + nmap NetrwMiddlemouse + nno NetrwMiddlemouse :call NetrwPrevWinOpen(0) + nmap <2-leftmouse> Netrw2Leftmouse + nmap Netrw2Leftmouse - + imap ILeftmouse + ino ILeftmouse :call NetrwLeftmouse(0) + imap IMiddlemouse + ino IMiddlemouse :call NetrwPrevWinOpen(0) + imap ISLeftmouse + ino ISLeftmouse :call NetrwMarkFile(0,NetrwGetWord()) + exe 'nnoremap :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' + exe 'vnoremap :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' + exe 'inoremap :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' endif + exe 'nnoremap :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' + exe 'nnoremap d :call NetrwMakeDir("'.mapsafeusermach.'")' + exe 'nnoremap D :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' + exe 'nnoremap R :call NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")' + exe 'vnoremap :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' + exe 'vnoremap D :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' + exe 'vnoremap R :call NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")' + exe 'inoremap :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' + exe 'inoremap d :call NetrwMakeDir("'.mapsafeusermach.'")' + exe 'inoremap D :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' + exe 'inoremap R :call NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")' + nnoremap :he netrw-quickhelp + inoremap :he netrw-quickhelp + endif - if v:shell_error == 0 - " refresh listing -" call Decho("refresh listing") - let svpos= netrw#NetrwSavePosn() - call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./')) - call netrw#NetrwRestorePosn(svpos) - elseif !exists("g:netrw_quiet") - call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",26) - endif -" redraw! + keepj call s:SetRexDir(a:islocal,b:netrw_curdir) - elseif !exists("b:netrw_method") || b:netrw_method == 4 - " Remote mkdir: -" call Decho("remote mkdir") - let mkdircmd = s:MakeSshCmd(g:netrw_mkdir_cmd) - let newdirname= substitute(b:netrw_curdir,'^\%(.\{-}/\)\{3}\(.*\)$','\1','').newdirname -" call Decho("exe sil! !".mkdircmd." ".shellescape(newdirname,1)) - exe "sil! !".mkdircmd." ".shellescape(newdirname,1) - if v:shell_error == 0 - " refresh listing - let svpos= netrw#NetrwSavePosn() - keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./')) - keepj call netrw#NetrwRestorePosn(svpos) - elseif !exists("g:netrw_quiet") - keepj call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",27) - endif -" redraw! +" call Dret("s:NetrwMaps") +endfun - elseif b:netrw_method == 2 - let svpos= netrw#NetrwSavePosn() - call s:NetrwRemoteFtpCmd("",g:netrw_remote_mkdir.' "'.newdirname.'"') - keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./')) - keepj call netrw#NetrwRestorePosn(svpos) - elseif b:netrw_method == 3 - let svpos= netrw#NetrwSavePosn() - call s:NetrwRemoteFtpCmd("",g:netrw_remote_mkdir.' "'.newdirname.'"') - keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./')) - keepj call netrw#NetrwRestorePosn(svpos) +" --------------------------------------------------------------------- +" s:NetrwCommands: sets up commands available only in the netrw buffer windows {{{2 +fun! s:NetrwCommands(islocal) +" call Dfunc("s:NetrwCommands(islocal=".a:islocal.")") + + com! Rexplore if exists("w:netrw_rexlocal")|call s:NetrwRexplore(w:netrw_rexlocal,exists("w:netrw_rexdir")? w:netrw_rexdir : ".")|else|call netrw#ErrorMsg(s:WARNING,"not a former netrw window",79)|endif + if a:islocal + com! -buffer -nargs=+ -complete=file MF call s:NetrwMarkFiles(1,) + else + com! -buffer -nargs=+ -complete=file MF call s:NetrwMarkFiles(0,) endif + com! -buffer -nargs=? -complete=file MT call s:NetrwMarkTarget() - let @@= ykeep -" call Dret("NetrwMakeDir") +" call Dret("s:NetrwCommands") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMarkFiles: apply s:NetrwMarkFile() to named file(s) {{{2 +" glob()ing only works with local files +fun! s:NetrwMarkFiles(islocal,...) +" call Dfunc("s:NetrwMarkFiles(islocal=".a:islocal."...) a:0=".a:0) + let i = 1 + while i <= a:0 + if a:islocal + let mffiles= glob(a:{i},0,1) + else + let mffiles= [a:{i}] + endif +" call Decho("mffiles".string(mffiles)) + for mffile in mffiles +" call Decho("mffile<".mffile.">") + call s:NetrwMarkFile(a:islocal,mffile) + endfor + let i= i + 1 + endwhile +" call Dret("s:NetrwMarkFiles") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMarkTarget: {{{2 +fun! s:NetrwMarkTarget(...) +" call Dfunc("s:NetrwMarkTarget() a:0=".a:0) + if a:0 == 0 || (a:0 == 1 && a:1 == "") + let tgt= b:netrw_curdir + else + let tgt= a:1 + endif +" call Decho("tgt<".tgt.">") + let s:netrwmftgt = tgt + let s:netrwmftgt_islocal = tgt !~ '^\a\+://' + let curislocal = b:netrw_curdir !~ '^\a\+://' + let svpos = netrw#SavePosn() + call s:NetrwRefresh(curislocal,s:NetrwBrowseChgDir(curislocal,'./')) + call netrw#RestorePosn(svpos) +" call Dret("s:NetrwMarkTarget") endfun " --------------------------------------------------------------------- @@ -5324,7 +5846,16 @@ let ykeep = @@ let curbufnr= bufnr("%") let curdir = b:netrw_curdir - let trailer = '[@=|\/\*]\=\ze\%( \|\t\|$\)' + if a:fname =~ '^\a' + let leader= '\<' + else + let leader= '' + endif + if a:fname =~ '\a$' + let trailer = '\>[@=|\/\*]\=\ze\%( \|\t\|$\)' + else + let trailer = '[@=|\/\*]\=\ze\%( \|\t\|$\)' + endif if exists("s:netrwmarkfilelist_{curbufnr}") " markfile list pre-exists @@ -5336,7 +5867,7 @@ " append filename to buffer's markfilelist " call Decho("append filename<".a:fname."> to local markfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">") call add(s:netrwmarkfilelist_{curbufnr},a:fname) - let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\|\<'.escape(a:fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").trailer + let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\|'.leader.escape(a:fname,g:netrw_markfileesc).trailer else " remove filename from buffer's markfilelist @@ -5350,12 +5881,12 @@ " rebuild match list to display markings correctly " call Decho("rebuild s:netrwmarkfilemtch_".curbufnr) let s:netrwmarkfilemtch_{curbufnr}= "" - let first = 1 + let first = 1 for fname in s:netrwmarkfilelist_{curbufnr} if first - let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").trailer + let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.leader.escape(fname,g:netrw_markfileesc).trailer else - let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\|\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").trailer + let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\|'.leader.escape(fname,g:netrw_markfileesc).trailer endif let first= 0 endfor @@ -5373,9 +5904,9 @@ " build initial markfile matching pattern if a:fname =~ '/$' - let s:netrwmarkfilemtch_{curbufnr}= '\<'.escape(a:fname,g:netrw_markfileesc) + let s:netrwmarkfilemtch_{curbufnr}= leader.escape(a:fname,g:netrw_markfileesc) else - let s:netrwmarkfilemtch_{curbufnr}= '\<'.escape(a:fname,g:netrw_markfileesc).trailer + let s:netrwmarkfilemtch_{curbufnr}= leader.escape(a:fname,g:netrw_markfileesc).trailer endif " call Decho("ending s:netrwmarkfilemtch_".curbufnr."<".s:netrwmarkfilemtch_{curbufnr}.">") endif @@ -5427,7 +5958,7 @@ " g:netrw_decompress = { ".gz" : "gunzip" , ".bz2" : "bunzip2" , ".zip" : "unzip" , ".tar" : "tar -xf", ".xz" : "unxz"} fun! s:NetrwMarkFileCompress(islocal) " call Dfunc("s:NetrwMarkFileCompress(islocal=".a:islocal.")") - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() let curdir = b:netrw_curdir let curbufnr = bufnr("%") @@ -5482,7 +6013,7 @@ call s:NetrwUnmarkList(curbufnr,curdir) keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) endif " call Dret("s:NetrwMarkFileCompress") endfun @@ -5522,7 +6053,7 @@ if a:islocal && s:netrwmftgt_islocal " Copy marked files, local directory to local directory " call Decho("copy from local to local") - if !executable(g:netrw_localcopycmd) && g:netrw_localcopycmd !~ '\ not executable on your system, aborting",91) " call Dfunc("s:NetrwMarkFileMove : g:netrw_localcopycmd<".g:netrw_localcopycmd."> n/a!") return @@ -5596,7 +6127,7 @@ elseif !a:islocal && s:netrwmftgt_islocal " Copy marked files, remote directory to local directory " call Decho("copy from remote to local") - keepj call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt) + keepj call netrw#Obtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt) elseif !a:islocal && !s:netrwmftgt_islocal " Copy marked files, remote directory to remote directory @@ -5617,15 +6148,15 @@ endif endif if isdirectory(tmpdir) - exe "keepj lcd ".fnameescape(tmpdir) - keepj call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},tmpdir) + call s:NetrwLcd(tmpdir) + keepj call netrw#Obtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},tmpdir) let localfiles= map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),'substitute(v:val,"^.*/","","")') keepj call s:NetrwUpload(localfiles,s:netrwmftgt) if getcwd() == tmpdir for fname in s:netrwmarkfilelist_{bufnr('%')} keepj call s:NetrwDelete(fname) endfor - exe "keepj lcd ".fnameescape(curdir) + call s:NetrwLcd(curdir) exe "sil !".g:netrw_localrmdir." ".shellescape(tmpdir,1) if v:shell_error != 0 call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localrmdir<".g:netrw_localrmdir."> to something that works",80) @@ -5633,7 +6164,7 @@ return endif else - exe "keepj lcd ".fnameescape(curdir) + call s:NetrwLcd(curdir) endif endif endif @@ -5655,7 +6186,7 @@ keepj call s:NetrwRefreshDir(a:islocal,curdir) endif if g:netrw_fastbrowse <= 1 - keepj call s:LocalBrowseShellCmdRefresh() + keepj call s:LocalBrowseRefresh() endif " call Dret("s:NetrwMarkFileCopy 1") @@ -5679,7 +6210,7 @@ endif " call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr})) - if exists("s:netrwmarkfilelist_{."curbufnr}") + if exists("s:netrwmarkfilelist_{".curbufnr."}") let cnt = 0 let curdir = b:netrw_curdir for fname in s:netrwmarkfilelist @@ -5771,7 +6302,7 @@ " Uses the local marked-file list. fun! s:NetrwMarkFileExe(islocal) " call Dfunc("s:NetrwMarkFileExe(islocal=".a:islocal.")") - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() let curdir = b:netrw_curdir let curbufnr = bufnr("%") @@ -5829,7 +6360,7 @@ " refresh the listing keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) else keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59) endif @@ -5843,7 +6374,7 @@ " Uses the local marked file list. fun! s:NetrwMarkHideSfx(islocal) " call Dfunc("s:NetrwMarkHideSfx(islocal=".a:islocal.")") - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() let curbufnr = bufnr("%") " s:netrwmarkfilelist_{curbufnr}: the List of marked files @@ -5886,7 +6417,7 @@ " refresh the listing keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) else keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59) endif @@ -5899,7 +6430,7 @@ " Uses the local marked-file list. fun! s:NetrwMarkFileVimCmd(islocal) " call Dfunc("s:NetrwMarkFileVimCmd(islocal=".a:islocal.")") - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() let curdir = b:netrw_curdir let curbufnr = bufnr("%") @@ -5943,7 +6474,7 @@ " refresh the listing keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) else keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59) endif @@ -5957,7 +6488,7 @@ " Uses the local marked file list. fun! s:NetrwMarkHideSfx(islocal) " call Dfunc("s:NetrwMarkHideSfx(islocal=".a:islocal.")") - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() let curbufnr = bufnr("%") " s:netrwmarkfilelist_{curbufnr}: the List of marked files @@ -6000,7 +6531,7 @@ " refresh the listing keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) else keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59) endif @@ -6013,7 +6544,7 @@ " Uses the global markfilelist fun! s:NetrwMarkFileGrep(islocal) " call Dfunc("s:NetrwMarkFileGrep(islocal=".a:islocal.")") - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() let curbufnr = bufnr("%") if exists("s:netrwmarkfilelist") @@ -6053,7 +6584,7 @@ echo "(use :cn, :cp to navigate, :Rex to return)" 2match none - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) if exists("nonisi") " original, user-supplied pattern did not begin with a character from isident @@ -6094,8 +6625,8 @@ if a:islocal && s:netrwmftgt_islocal " move: local -> local " call Decho("move from local to local") -" call Decho("(s:NetrwMarkFileMove) local to local move") - if !executable(g:netrw_localmovecmd) && g:netrw_localmovecmd !~ '\ not executable on your system, aborting",90) " call Dfunc("s:NetrwMarkFileMove : g:netrw_localmovecmd<".g:netrw_localmovecmd."> n/a!") return @@ -6189,7 +6720,7 @@ endif if g:netrw_fastbrowse <= 1 " call Decho("since g:netrw_fastbrowse=".g:netrw_fastbrowse.", perform shell cmd refresh") - keepj call s:LocalBrowseShellCmdRefresh() + keepj call s:LocalBrowseRefresh() endif " call Dret("s:NetrwMarkFileMove") @@ -6267,8 +6798,8 @@ let eikeep = &ei let areg = @a sil keepj %y a - set ei=all ma -" call Decho("set ei=all ma") + setl ei=all ma +" call Decho("setl ei=all ma") 1split keepj call s:NetrwEnew() keepj call s:NetrwSafeOptions() @@ -6276,7 +6807,7 @@ keepj 2 let bannercnt= search('^" =====','W') exe "sil keepj 1,".bannercnt."d" - set bt=nofile + setl bt=nofile if g:netrw_liststyle == s:LONGLIST sil keepj %s/\s\{2,}\S.*$//e call histdel("/",-1) @@ -6284,7 +6815,7 @@ sil keepj %s/\s\{2,}/\r/ge call histdel("/",-1) elseif g:netrw_liststyle == s:TREELIST - sil keepj %s/^| //e + exe 'sil keepj %s/^'.s:treedepthstring.' //e' sil! keepj g/^ .*$/d call histdel("/",-1) call histdel("/",-1) @@ -6348,7 +6879,7 @@ " Uses the global markfilelist fun! s:NetrwMarkFileTag(islocal) " call Dfunc("s:NetrwMarkFileTag(islocal=".a:islocal.")") - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() let curdir = b:netrw_curdir let curbufnr = bufnr("%") @@ -6374,7 +6905,7 @@ endif else let cmd = s:RemoteSystem(g:netrw_ctags." ".netrwmarkfilelist) - call netrw#NetrwObtain(a:islocal,"tags") + call netrw#Obtain(a:islocal,"tags") let curdir= b:netrw_curdir 1split e tags @@ -6386,7 +6917,7 @@ endif 2match none call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - call netrw#NetrwRestorePosn(svpos) + call netrw#RestorePosn(svpos) endif " call Dret("s:NetrwMarkFileTag") @@ -6400,7 +6931,7 @@ " 1=target directory is local fun! s:NetrwMarkFileTgt(islocal) " call Dfunc("s:NetrwMarkFileTgt(islocal=".a:islocal.")") - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() let curdir = b:netrw_curdir let hadtgt = exists("s:netrwmftgt") if !exists("w:netrw_bannercnt") @@ -6414,10 +6945,10 @@ " call Decho("cursor in banner region, and target already is <".b:netrw_curdir.">: removing target") unlet s:netrwmftgt s:netrwmftgt_islocal if g:netrw_fastbrowse <= 1 - call s:LocalBrowseShellCmdRefresh() + call s:LocalBrowseRefresh() endif call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - call netrw#NetrwRestorePosn(svpos) + call netrw#RestorePosn(svpos) " call Dret("s:NetrwMarkFileTgt : removed target") return else @@ -6454,10 +6985,10 @@ let s:netrwmftgt_islocal= a:islocal if g:netrw_fastbrowse <= 1 - call s:LocalBrowseShellCmdRefresh() + call s:LocalBrowseRefresh() endif call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - call netrw#NetrwRestorePosn(svpos) + call netrw#RestorePosn(svpos) if !hadtgt sil! keepj norm! j endif @@ -6559,7 +7090,7 @@ " s:NetrwUnMarkFile: {{{2 fun! s:NetrwUnMarkFile(islocal) " call Dfunc("s:NetrwUnMarkFile(islocal=".a:islocal.")") - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() let curbufnr = bufnr("%") " unmark marked file list (although I expect s:NetrwUpload() @@ -6573,7 +7104,7 @@ endif " call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - call netrw#NetrwRestorePosn(svpos) + call netrw#RestorePosn(svpos) " call Dret("s:NetrwUnMarkFile") endfun @@ -6688,10 +7219,10 @@ let ykeep= @@ if exists("s:netrwmarkfilelist_{bufnr('%')}") let islocal= s:netrwmarkfilelist_{bufnr('%')}[1] !~ '^\a\+://' - call netrw#NetrwObtain(islocal,s:netrwmarkfilelist_{bufnr('%')}) + call netrw#Obtain(islocal,s:netrwmarkfilelist_{bufnr('%')}) call s:NetrwUnmarkList(bufnr('%'),b:netrw_curdir) else - call netrw#NetrwObtain(a:islocal,expand("")) + call netrw#Obtain(a:islocal,expand("")) endif let @@= ykeep @@ -6707,19 +7238,22 @@ " choice = 2 : didn't save modified file, opened window " choice = 3 : cancel open fun! s:NetrwPrevWinOpen(islocal) -" call Dfunc("NetrwPrevWinOpen(islocal=".a:islocal.")") +" call Dfunc("s:NetrwPrevWinOpen(islocal=".a:islocal.")") let ykeep= @@ " grab a copy of the b:netrw_curdir to pass it along to newly split windows - let curdir = b:netrw_curdir + let curdir = b:netrw_curdir " get last window number and the word currently under the cursor + let origwin = winnr() let lastwinnr = winnr("$") let curword = s:NetrwGetWord() let choice = 0 -" call Decho("lastwinnr=".lastwinnr." curword<".curword.">") + let s:treedir = s:NetrwTreeDir() + let curdir = s:treedir +" call Decho("winnr($)#".lastwinnr." curword<".curword.">") - let didsplit = 0 + let didsplit = 0 if lastwinnr == 1 " if only one window, open a new one first " call Decho("only one window, so open a new one (g:netrw_alto=".g:netrw_alto.")") @@ -6732,68 +7266,73 @@ " call Decho("exe ".(g:netrw_alto? "bel " : "abo ").winsz."wincmd s") exe (g:netrw_alto? "bel " : "abo ").winsz."wincmd s" endif - let didsplit = 1 + let didsplit = 1 +" call Decho("did split") else keepj call s:SaveBufVars() -" call Decho("wincmd p") + let eikeep= &ei + setl ei=all wincmd p +" call Decho("wincmd p (now in win#".winnr().") curdir<".curdir.">") + + " prevwinnr: the window number of the "prev" window + " prevbufnr: the buffer number of the buffer in the "prev" window + " bnrcnt : the qty of windows open on the "prev" buffer + let prevwinnr = winnr() + let prevbufnr = bufnr("%") + let prevbufname = bufname("%") + let prevmod = &mod + let bnrcnt = 0 keepj call s:RestoreBufVars() - " if the previous window's buffer has been changed (is modified), +" call Decho("after wincmd p: win#".winnr()." win($)#".winnr("$")." origwin#".origwin." &mod=".&mod." bufname(%)<".bufname("%")."> prevbufnr=".prevbufnr) + + " if the previous window's buffer has been changed (ie. its modified flag is set), " and it doesn't appear in any other extant window, then ask the " user if s/he wants to abandon modifications therein. - let bnr = winbufnr(0) - let bnrcnt = 0 - if &mod -" call Decho("detected: prev window's buffer has been modified: bnr=".bnr." winnr#".winnr()) - let eikeep= &ei - set ei=all - windo if winbufnr(0) == bnr | let bnrcnt=bnrcnt+1 | endif - exe bnr."wincmd p" - let &ei= eikeep -" call Decho("bnr=".bnr." bnrcnt=".bnrcnt." buftype=".&bt." winnr#".winnr()) - if bnrcnt == 1 - let bufname = bufname(winbufnr(winnr())) - let choice = confirm("Save modified file<".bufname.">?","&Yes\n&No\n&Cancel") -" call Decho("bufname<".bufname."> choice=".choice." winnr#".winnr()) + if prevmod +" call Decho("detected that prev window's buffer has been modified: prevbufnr=".prevbufnr." winnr()#".winnr()) + windo if winbufnr(0) == prevbufnr | let bnrcnt=bnrcnt+1 | endif +" call Decho("prevbufnr=".prevbufnr." bnrcnt=".bnrcnt." buftype=".&bt." winnr()=".winnr()." prevwinnr#".prevwinnr) + exe prevwinnr."wincmd w" + + if bnrcnt == 1 && &hidden == 0 + " only one copy of the modified buffer in a window, and + " hidden not set, so overwriting will lose the modified file. Ask first... + let choice = confirm("Save modified buffer<".prevbufname."> first?","&Yes\n&No\n&Cancel") +" call Decho("(NetrwPrevWinOpen) prevbufname<".prevbufname."> choice=".choice." current-winnr#".winnr()) + let &ei= eikeep if choice == 1 " Yes -- write file & then browse let v:errmsg= "" sil w if v:errmsg != "" - call netrw#ErrorMsg(s:ERROR,"unable to write <".bufname.">!",30) - if didsplit - q - else - wincmd p - endif - let @@= ykeep -" call Dret("NetrwPrevWinOpen ".choice." : unable to write <".bufname.">") + call netrw#ErrorMsg(s:ERROR,"unable to write <".prevbufname.">!",30) + exe origwin."wincmd w" + let &ei = eikeep + let @@ = ykeep +" call Dret("s:NetrwPrevWinOpen ".choice." : unable to write <".prevbufname.">") return choice endif elseif choice == 2 " No -- don't worry about changed file, just browse anyway -" call Decho("(NetrwPrevWinOpen) setl nomod") - setl nomod -" call Decho("(NetrwPrevWinOpen) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") - keepj call netrw#ErrorMsg(s:WARNING,bufname." changes to ".bufname." abandoned",31) - wincmd p +" call Decho("don't worry about chgd file, just browse anyway (winnr($)#".winnr("$").")") + echomsg "**note** changes to ".prevbufname." abandoned" else " Cancel -- don't do this - if didsplit - q - else - wincmd p - endif - let @@= ykeep -" call Dret("NetrwPrevWinOpen ".choice." : cancelled") +" call Decho("cancel, don't browse, switch to win#".origwin) + exe origwin."wincmd w" + let &ei= eikeep + let @@ = ykeep +" call Dret("s:NetrwPrevWinOpen ".choice." : cancelled") return choice endif endif endif + let &ei= eikeep endif " restore b:netrw_curdir (window split/enew may have lost it) @@ -6806,7 +7345,7 @@ endif endif let @@= ykeep -" call Dret("NetrwPrevWinOpen ".choice) +" call Dret("s:NetrwPrevWinOpen ".choice) return choice endfun @@ -6855,7 +7394,7 @@ " call Decho("handle uploading a list of files via scp") let curdir= getcwd() if a:tgt =~ '^scp:' - exe "keepjumps sil lcd ".fnameescape(fromdir) + call s:NetrwLcd(fromdir) let filelist= deepcopy(s:netrwmarkfilelist_{bufnr('%')}) let args = join(map(filelist,"shellescape(v:val, 1)")) if exists("g:netrw_port") && g:netrw_port != "" @@ -6867,7 +7406,7 @@ let tgt = substitute(a:tgt,'^scp://[^/]\+/\(.*\)$','\1','') " call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".args." ".shellescape(machine.":".tgt,1)) exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".args." ".shellescape(machine.":".tgt,1) - exe "keepjumps sil lcd ".fnameescape(curdir) + call s:NetrwLcd(curdir) elseif a:tgt =~ '^ftp:' call s:NetrwMethod(a:tgt) @@ -7029,13 +7568,14 @@ fun! s:NetrwRefresh(islocal,dirname) " call Dfunc("NetrwRefresh(islocal<".a:islocal.">,dirname=".a:dirname.") hide=".g:netrw_hide." sortdir=".g:netrw_sort_direction) " at the current time (Mar 19, 2007) all calls to NetrwRefresh() call NetrwBrowseChgDir() first. - " (defunct) NetrwBrowseChgDir() may clear the display; hence a NetrwSavePosn() may not work if its placed here. - " (defunct) Also, NetrwBrowseChgDir() now does a NetrwSavePosn() itself. setl ma noro " call Decho("setl ma noro") " call Decho("clear buffer<".expand("%")."> with :%d") let ykeep = @@ - let screenposn = netrw#NetrwSavePosn() + + " save the cursor position before refresh. + let screenposn = netrw#SavePosn() +" call Decho("win#".winnr().": ".winheight(0)."x".winwidth(0)." curfile<".expand("%").">") " call Decho("clearing buffer prior to refresh") sil! keepj %d if a:islocal @@ -7043,7 +7583,9 @@ else keepj call s:NetrwBrowse(a:islocal,a:dirname) endif - keepj call netrw#NetrwRestorePosn(screenposn) + + " restore position + keepj call netrw#RestorePosn(screenposn) " restore file marks if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != "" @@ -7062,7 +7604,7 @@ " --------------------------------------------------------------------- " s:NetrwRefreshDir: refreshes a directory by name {{{2 " Called by NetrwMarkFileCopy() -" Interfaces to s:NetrwRefresh() and s:LocalBrowseShellCmdRefresh() +" Interfaces to s:NetrwRefresh() and s:LocalBrowseRefresh() fun! s:NetrwRefreshDir(islocal,dirname) " call Dfunc("s:NetrwRefreshDir(islocal=".a:islocal." dirname<".a:dirname.">) g:netrw_fastbrowse=".g:netrw_fastbrowse) if g:netrw_fastbrowse == 0 @@ -7087,12 +7629,27 @@ elseif g:netrw_fastbrowse <= 1 " call Decho("medium-speed mode: refresh local buffers only") - keepj call s:LocalBrowseShellCmdRefresh() + keepj call s:LocalBrowseRefresh() endif " call Dret("s:NetrwRefreshDir") endfun " --------------------------------------------------------------------- +" s:NetrwSetChgwin: set g:netrw_chgwin; a will use the specified +" window number to do its editing in. +" Supports [count]C where the count, if present, is used to specify +" a window to use for editing via the mapping. +fun! s:NetrwSetChgwin() +" call Dfunc("s:NetrwSetChgwin() v:count=".v:count) + if v:count > 0 + let g:netrw_chgwin= v:count + else + let g:netrw_chgwin= winnr() + endif +" call Dret("s:NetrwSetChgwin") +endfun + +" --------------------------------------------------------------------- " s:NetrwSetSort: sets up the sort based on the g:netrw_sort_sequence {{{2 " What this function does is to compute a priority for the patterns " in the g:netrw_sort_sequence. It applies a substitute to any @@ -7149,7 +7706,7 @@ let priority = priority + 1 endwhile if exists("starpriority") - exe 'sil keepj '.w:netrw_bannercnt.',$v/^\d\{3}'.g:netrw_sepchr.'/s/^/'.starpriority.'/' + exe 'sil keepj '.w:netrw_bannercnt.',$v/^\d\{3}'.g:netrw_sepchr.'/s/^/'.starpriority.'/e' keepj call histdel("/",-1) endif @@ -7178,7 +7735,7 @@ " supports choosing a bookmark as a target using a qb-generated list let choice= a:choice - 1 if exists("g:netrw_bookmarklist[".choice."]") - call netrw#NetrwMakeTgt(g:netrw_bookmarklist[choice]) + call netrw#MakeTgt(g:netrw_bookmarklist[choice]) else echomsg "Sorry, bookmark#".a:choice." doesn't exist!" endif @@ -7188,7 +7745,7 @@ let choice= (a:choice % g:netrw_dirhistmax) + 1 if exists("g:netrw_dirhist_".choice) let histentry = g:netrw_dirhist_{choice} - call netrw#NetrwMakeTgt(histentry) + call netrw#MakeTgt(histentry) else echomsg "Sorry, history#".a:choice." not available!" endif @@ -7202,12 +7759,12 @@ fun! s:NetrwSortStyle(islocal) " call Dfunc("s:NetrwSortStyle(islocal=".a:islocal.") netrw_sort_by<".g:netrw_sort_by.">") keepj call s:NetrwSaveWordPosn() - let svpos= netrw#NetrwSavePosn() + let svpos= netrw#SavePosn() let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name' keepj norm! 0 keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) " call Dret("s:NetrwSortStyle : netrw_sort_by<".g:netrw_sort_by.">") endfun @@ -7229,6 +7786,7 @@ if a:mode == 0 " remote and o let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winheight(0))/100 : -g:netrw_winsize + if winsz == 0|let winsz= ""|endif " call Decho("exe ".(g:netrw_alto? "bel " : "abo ").winsz."wincmd s") exe (g:netrw_alto? "bel " : "abo ").winsz."wincmd s" let s:didsplit= 1 @@ -7249,6 +7807,7 @@ elseif a:mode == 2 " remote and v let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winwidth(0))/100 : -g:netrw_winsize + if winsz == 0|let winsz= ""|endif " call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").winsz."wincmd v") exe (g:netrw_altv? "rightb " : "lefta ").winsz."wincmd v" let s:didsplit= 1 @@ -7259,6 +7818,7 @@ elseif a:mode == 3 " local and o let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winheight(0))/100 : -g:netrw_winsize + if winsz == 0|let winsz= ""|endif " call Decho("exe ".(g:netrw_alto? "bel " : "abo ").winsz."wincmd s") exe (g:netrw_alto? "bel " : "abo ").winsz."wincmd s" let s:didsplit= 1 @@ -7269,18 +7829,35 @@ elseif a:mode == 4 " local and t let cursorword = s:NetrwGetWord() + let eikeep = &ei + let netrw_winnr = winnr() + let netrw_line = line(".") + let netrw_col = virtcol(".") + keepj norm! H0 + let netrw_hline = line(".") + setl ei=all + exe "keepj norm! ".netrw_hline."G0z\" + exe "keepj norm! ".netrw_line."G0".netrw_col."\" + let &ei= eikeep let netrw_curdir= s:NetrwTreeDir() " call Decho("tabnew") tabnew - let b:netrw_curdir= netrw_curdir - let s:didsplit= 1 + let b:netrw_curdir = netrw_curdir + let s:didsplit = 1 keepj call s:RestoreWinVars() keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,cursorword)) + if &ft == "netrw" + setl ei=all + exe "keepj norm! ".netrw_hline."G0z\" + exe "keepj norm! ".netrw_line."G0".netrw_col."\" + let &ei= eikeep + endif unlet s:didsplit elseif a:mode == 5 " local and v let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winwidth(0))/100 : -g:netrw_winsize + if winsz == 0|let winsz= ""|endif " call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").winsz."wincmd v") exe (g:netrw_altv? "rightb " : "lefta ").winsz."wincmd v" let s:didsplit= 1 @@ -7322,7 +7899,7 @@ let ebmd= escape(bmd,g:netrw_menu_escape) " show bookmarks for goto menu " call Decho("menu: Targets: ".bmd) - exe 'sil! menu '.g:NetrwMenuPriority.".19.1.".cnt." ".g:NetrwTopLvlMenu.'Targets.'.ebmd." :call netrw#NetrwMakeTgt('".bmd."')\" + exe 'sil! menu '.g:NetrwMenuPriority.".19.1.".cnt." ".g:NetrwTopLvlMenu.'Targets.'.ebmd." :call netrw#MakeTgt('".bmd."')\" let cnt= cnt + 1 endfor endif @@ -7337,7 +7914,7 @@ let histentry = g:netrw_dirhist_{histcnt} let ehistentry = escape(histentry,g:netrw_menu_escape) " call Decho("menu: Targets: ".histentry) - exe 'sil! menu '.g:NetrwMenuPriority.".19.2.".priority." ".g:NetrwTopLvlMenu.'Targets.'.ehistentry." :call netrw#NetrwMakeTgt('".histentry."')\" + exe 'sil! menu '.g:NetrwMenuPriority.".19.2.".priority." ".g:NetrwTopLvlMenu.'Targets.'.ehistentry." :call netrw#MakeTgt('".histentry."')\" endif let histcnt = histcnt + 1 endwhile @@ -7350,60 +7927,57 @@ " s:NetrwTreeDir: determine tree directory given current cursor position {{{2 " (full path directory with trailing slash returned) fun! s:NetrwTreeDir() -" call Dfunc("NetrwTreeDir() curline#".line(".")."<".getline('.')."> b:netrw_curdir<".b:netrw_curdir."> tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%").">") +" call Dfunc("s:NetrwTreeDir() getline(".line(".").")"."<".getline('.')."> b:netrw_curdir<".b:netrw_curdir."> tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> ft=".&ft) - let treedir= b:netrw_curdir -" call Decho("(NetrwTreeDir) set initial treedir<".treedir.">") - let s:treecurpos= netrw#NetrwSavePosn() + if exists("s:treedir") + " s:NetrwPrevWinOpen opens a "previous" window -- and thus needs to and does call s:NetrwTreeDir early + let treedir= s:treedir + unlet s:treedir +" call Dret("s:NetrwTreeDir ".treedir) + return treedir + endif + if !exists("b:netrw_curdir") || b:netrw_curdir == "" + let b:netrw_curdir= getcwd() + endif + let treedir = b:netrw_curdir +" call Decho("set initial treedir<".treedir.">") + let s:treecurpos= netrw#SavePosn() if w:netrw_liststyle == s:TREELIST -" call Decho("(NetrwTreeDir) w:netrw_liststyle is TREELIST:") -" call Decho("(NetrwTreeDir) line#".line(".")." getline(.)<".getline('.')."> treecurpos<".string(s:treecurpos).">") +" call Decho("w:netrw_liststyle is TREELIST:") +" call Decho("line#".line(".")." getline(.)<".getline('.')."> treecurpos<".string(s:treecurpos).">") " extract tree directory if on a line specifying a subdirectory (ie. ends with "/") if getline('.') =~ '/$' - let treedir= substitute(getline('.'),'^\%(| \)*\([^|].\{-}\)$','\1','e') +" call Decho("extract tree subdirectory from current line") + let treedir= substitute(getline('.'),'^\%('.s:treedepthstring.'\)*\([^'.s:treedepthstring.'].\{-}\)$','\1','e') +" call Decho("treedir<".treedir.">") else +" call Decho("do not extract tree subdirectory from current line and set treedir to empty") let treedir= "" endif -" call Decho("(NetrwTreeDir) treedir<".treedir.">") " detect user attempting to close treeroot - if getline('.') !~ '|' && getline('.') != '..' -" call Decho("user attempted to close treeroot") +" call Decho("win#".winnr()." buf#".bufnr("%")."<".bufname("%").">") +" call Decho("getline(".line(".").")<".getline('.').'> '.((getline('.') =~ '^'.s:treedepthstring)? '=~' : '!~').' ^'.s:treedepthstring) + if getline('.') !~ '^'.s:treedepthstring && getline('.') != '..' +" call Decho("user may have attempted to close treeroot") " now force a refresh -" call Decho("(NetrwTreeDir) clear buffer<".expand("%")."> with :%d") +" call Decho("clear buffer<".expand("%")."> with :%d") sil! keepj %d -" call Dret("NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">") +" call Dret("s:NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">") return b:netrw_curdir +" else " Decho +" call Decho("user did not attempt to close treeroot") endif - " elide all non-depth information - let depth = substitute(getline('.'),'^\(\%(| \)*\)[^|].\{-}$','\1','e') -" call Decho("(NetrwTreeDir) depth<".depth."> 1st subst (non-depth info removed)") - - " elide first depth - let depth = substitute(depth,'^| ','','') -" call Decho("(NetrwTreeDir) depth<".depth."> 2nd subst (first depth removed)") - - " construct treedir by searching backwards at correct depth -" call Decho("(NetrwTreeDir) constructing treedir<".treedir."> depth<".depth.">") - while depth != "" && search('^'.depth.'[^|].\{-}/$','bW') - let dirname= substitute(getline('.'),'^\(| \)*','','e') - let treedir= dirname.treedir - let depth = substitute(depth,'^| ','','') -" call Decho("(NetrwTreeDir) constructing treedir<".treedir.">: dirname<".dirname."> while depth<".depth.">") - endwhile - if w:netrw_treetop =~ '/$' - let treedir= w:netrw_treetop.treedir - else - let treedir= w:netrw_treetop.'/'.treedir - endif -" call Decho("(NetrwTreeDir) bufnr(.)=".bufnr("%")." line($)=".line("$")." line(.)=".line(".")) + let treedir = s:NetrwTreePath(w:netrw_treetop) endif + + " sanity maintenance: keep those //s away... let treedir= substitute(treedir,'//$','/','') -" call Dret("NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">") +" call Dret("s:NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">") return treedir endfun @@ -7440,7 +8014,7 @@ endif " display subtrees (if any) - let depth= "| ".a:depth + let depth= s:treedepthstring.a:depth " call Decho("display subtrees with depth<".depth."> and current leaves") for entry in w:netrw_treedict[a:dir] @@ -7457,6 +8031,7 @@ sil! keepj call setline(line("$")+1,depth.entry) endif endfor + " call Dret("NetrwTreeDisplay") endfun @@ -7466,7 +8041,8 @@ if w:netrw_liststyle == s:TREELIST " call Dfunc("NetrwTreeListing() bufname<".expand("%").">") " call Decho("curdir<".a:dirname.">") -" call Decho("win#".winnr().": w:netrw_treetop ".(exists("w:netrw_treetop")? "exists" : "doesn't exit")." w:netrw_treedict ".(exists("w:netrw_treedict")? "exists" : "doesn't exit")) +" call Decho("win#".winnr().": w:netrw_treetop ".(exists("w:netrw_treetop")? "exists" : "doesn't exist")." w:netrw_treedict ".(exists("w:netrw_treedict")? "exists" : "doesn't exit")) +" call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") " update the treetop " call Decho("update the treetop") @@ -7485,7 +8061,7 @@ " update the directory listing for the current directory " call Decho("updating dictionary with ".a:dirname.":[..directory listing..]") -" call Decho("bannercnt=".w:netrw_bannercnt." line($)=".line("$")) +" call Decho("w:netrw_bannercnt=".w:netrw_bannercnt." line($)=".line("$")) exe "sil! keepj ".w:netrw_bannercnt.',$g@^\.\.\=/$@d' let w:netrw_treedict[a:dirname]= getline(w:netrw_bannercnt,line("$")) " call Decho("w:treedict[".a:dirname."]= ".string(w:netrw_treedict[a:dirname])) @@ -7498,9 +8074,19 @@ let fname= "" endif " call Decho("fname<".fname.">") +" call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") " display from treetop on down keepj call s:NetrwTreeDisplay(w:netrw_treetop,"") +" call Decho("s:NetrwTreeDisplay) setl noma nomod ro") + + " remove any blank line remaining as line#1 (happens in treelisting mode with banner suppressed) + while getline(1) =~ '^\s*$' && byte2line(1) > 0 +" call Decho("deleting blank line") + 1d + endwhile + + exe "setl ".g:netrw_bufsettings " call Dret("NetrwTreeListing : bufname<".expand("%").">") return @@ -7508,6 +8094,44 @@ endfun " --------------------------------------------------------------------- +" s:NetrwTreePath: returns path to current file in tree listing {{{2 +" Normally, treetop is w:netrw_treetop, but a +" user of the function ( netrw#SetTreetop() ) +" wipes that out prior to calling this function +fun! s:NetrwTreePath(treetop) +" call Dfunc("s:NetrwTreePath() line#".line(".")."<".getline(".").">") + let depth = substitute(getline('.'),'^\(\%('.s:treedepthstring.'\)*\)[^'.s:treedepthstring.'].\{-}$','\1','e') +" call Decho("(s:NetrwTreePath) depth<".depth."> 1st subst") + let depth = substitute(depth,'^'.s:treedepthstring,'','') +" call Decho("(s:NetrwTreePath) depth<".depth."> 2nd subst (first depth removed)") + if getline('.') =~ '/$' +" call Decho("extract tree directory from current line") + let treedir= substitute(getline('.'),'^\%('.s:treedepthstring.'\)*\([^'.s:treedepthstring.'].\{-}\)$','\1','e') +" call Decho("(s:NetrwTreePath) treedir<".treedir.">") + else +" call Decho("(s:NetrwTreePath) do not extract tree directory from current line and set treedir to empty") + let treedir= "" + endif + " construct treedir by searching backwards at correct depth +" call Decho("(s:NetrwTreePath) construct treedir by searching backwards for correct depth") +" call Decho("(s:NetrwTreePath) initial treedir<".treedir."> depth<".depth.">") + while depth != "" && search('^'.depth.'[^'.s:treedepthstring.'].\{-}/$','bW') + let dirname= substitute(getline('.'),'^\('.s:treedepthstring.'\)*','','e') + let treedir= dirname.treedir + let depth = substitute(depth,'^'.s:treedepthstring,'','') +" call Decho("(s:NetrwTreePath) constructing treedir<".treedir.">: dirname<".dirname."> while depth<".depth.">") + endwhile + if a:treetop =~ '/$' + let treedir= a:treetop.treedir + else + let treedir= a:treetop.'/'.treedir + endif + let treedir= substitute(treedir,'//$','/','') +" call Dret("s:NetrwTreePath <".treedir.">") + return treedir +endfun + +" --------------------------------------------------------------------- " s:NetrwWideListing: {{{2 fun! s:NetrwWideListing() @@ -7544,7 +8168,9 @@ let newcolstart = w:netrw_bannercnt + fpc let newcolend = newcolstart + fpc - 1 " call Decho("bannercnt=".w:netrw_bannercnt." fpl=".w:netrw_fpl." fpc=".fpc." newcol[".newcolstart.",".newcolend."]") - sil! let keepregstar = @* + if has("clipboard") + sil! let keepregstar = @* + endif while line("$") >= newcolstart if newcolend > line("$") | let newcolend= line("$") | endif let newcolqty= newcolend - newcolstart @@ -7557,13 +8183,15 @@ exe "sil! keepj ".newcolstart.','.newcolend.'d' exe 'sil! keepj '.w:netrw_bannercnt endwhile - sil! let @*= keepregstar + if has("clipboard") + sil! let @*= keepregstar + endif exe "sil! keepj ".w:netrw_bannercnt.',$s/\s\+$//e' keepj call histdel("/",-1) exe "nmap w /^\\\\|\\s\\s\\zs\\S/\" exe "nmap b ?^\\\\|\\s\\s\\zs\\S?\" " call Decho("NetrwWideListing) setl noma nomod ro") - setl noma nomod ro + exe "setl ".g:netrw_bufsettings " call Decho("(NetrwWideListing) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " call Dret("NetrwWideListing") return @@ -7582,30 +8210,32 @@ " s:PerformListing: {{{2 fun! s:PerformListing(islocal) " call Dfunc("s:PerformListing(islocal=".a:islocal.") bufnr(%)=".bufnr("%")."<".bufname("%").">") +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (enter)") " set up syntax highlighting {{{3 -" call Decho("(PerformListing) set up syntax highlighting") +" call Decho("set up syntax highlighting") if has("syntax") if !exists("g:syntax_on") || !g:syntax_on -" call Decho("(PerformListing) but g:syntax_on".(exists("g:syntax_on")? "=".g:syntax_on : "")) +" call Decho("but g:syntax_on".(exists("g:syntax_on")? "=".g:syntax_on : "")) setl ft= elseif &ft != "netrw" +" call Decho("setl ft=netrw") setl ft=netrw endif endif keepj call s:NetrwSafeOptions() - set noro ma -" call Decho("(PerformListing) setl noro ma bh=".&bh) + setl noro ma +" call Decho("setl noro ma bh=".&bh) " if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1 " Decho -" call Decho("(PerformListing) (netrw) Processing your browsing request...") +" call Decho("(netrw) Processing your browsing request...") " endif " Decho " call Decho('w:netrw_liststyle='.(exists("w:netrw_liststyle")? w:netrw_liststyle : 'n/a')) if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") " force a refresh for tree listings -" call Decho("(PerformListing) force refresh for treelisting: clear buffer<".expand("%")."> with :%d") +" call Decho("force refresh for treelisting: clear buffer<".expand("%")."> with :%d") sil! keepj %d endif @@ -7614,7 +8244,7 @@ " Set up the banner {{{3 if g:netrw_banner -" call Decho("(PerformListing) set up banner") +" call Decho("set up banner") keepj call setline(1,'" ============================================================================') keepj call setline(2,'" Netrw Directory Listing (netrw '.g:loaded_netrw.')') if exists("g:netrw_bannerbackslash") && g:netrw_bannerbackslash @@ -7628,6 +8258,7 @@ keepj 1 let w:netrw_bannercnt= 1 endif +" call Decho("w:netrw_bannercnt=".w:netrw_bannercnt." win#".winnr()) let sortby= g:netrw_sort_by if g:netrw_sort_direction =~ "^r" @@ -7636,26 +8267,28 @@ " Sorted by... {{{3 if g:netrw_banner -" call Decho("(PerformListing) handle specified sorting: g:netrw_sort_by<".g:netrw_sort_by.">") +" call Decho("handle specified sorting: g:netrw_sort_by<".g:netrw_sort_by.">") if g:netrw_sort_by =~ "^n" -" call Decho("(PerformListing) directories will be sorted by name") +" call Decho("directories will be sorted by name") " sorted by name keepj put ='\" Sorted by '.sortby keepj put ='\" Sort sequence: '.g:netrw_sort_sequence let w:netrw_bannercnt= w:netrw_bannercnt + 2 else -" call Decho("(PerformListing) directories will be sorted by size or time") +" call Decho("directories will be sorted by size or time") " sorted by size or date keepj put ='\" Sorted by '.sortby let w:netrw_bannercnt= w:netrw_bannercnt + 1 endif exe "sil! keepj ".w:netrw_bannercnt +" else " Decho +" call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") endif " show copy/move target, if any if g:netrw_banner if exists("s:netrwmftgt") && exists("s:netrwmftgt_islocal") -" call Decho("(PerformListing) show copy/move target<".s:netrwmftgt.">") +" call Decho("show copy/move target<".s:netrwmftgt.">") keepj put ='' if s:netrwmftgt_islocal sil! keepj call setline(line("."),'" Copy/Move Tgt: '.s:netrwmftgt.' (local)') @@ -7664,14 +8297,14 @@ endif let w:netrw_bannercnt= w:netrw_bannercnt + 1 else -" call Decho("(PerformListing) s:netrwmftgt does not exist, don't make Copy/Move Tgt") +" call Decho("s:netrwmftgt does not exist, don't make Copy/Move Tgt") endif exe "sil! keepj ".w:netrw_bannercnt endif " Hiding... -or- Showing... {{{3 if g:netrw_banner -" call Decho("(PerformListing) handle hiding/showing (g:netrw_hide=".g:netrw_list_hide." g:netrw_list_hide<".g:netrw_list_hide.">)") +" call Decho("handle hiding/showing (g:netrw_hide=".g:netrw_list_hide." g:netrw_list_hide<".g:netrw_list_hide.">)") if g:netrw_list_hide != "" && g:netrw_hide if g:netrw_hide == 1 keepj put ='\" Hiding: '.g:netrw_list_hide @@ -7681,47 +8314,62 @@ let w:netrw_bannercnt= w:netrw_bannercnt + 1 endif exe "keepjumps ".w:netrw_bannercnt - keepj put ='\" Quick Help: :help -:go up dir D:delete R:rename s:sort-by x:exec' - keepj put ='\" ============================================================================' + +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") + let quickhelp = g:netrw_quickhelp%len(s:QuickHelp) +" call Decho("quickhelp =".quickhelp) + keepj put ='\" Quick Help: :help '.s:QuickHelp[quickhelp] +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") + keepj put ='\" ==============================================================================' let w:netrw_bannercnt= w:netrw_bannercnt + 2 +" else " Decho +" call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") endif " bannercnt should index the line just after the banner if g:netrw_banner let w:netrw_bannercnt= w:netrw_bannercnt + 1 exe "sil! keepj ".w:netrw_bannercnt -" call Decho("(PerformListing) w:netrw_bannercnt=".w:netrw_bannercnt." (should index line just after banner) line($)=".line("$")) +" call Decho("w:netrw_bannercnt=".w:netrw_bannercnt." (should index line just after banner) line($)=".line("$")) +" else " Decho +" call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") endif " get list of files -" call Decho("(PerformListing) Get list of files - islocal=".a:islocal) +" call Decho("Get list of files - islocal=".a:islocal) if a:islocal keepj call s:LocalListing() else " remote - keepj call s:NetrwRemoteListing() + keepj let badresult= s:NetrwRemoteListing() + if badresult +" call Decho("w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'n/a')." win#".winnr()." buf#".bufnr("%")."<".bufname("%").">") +" call Dret("s:PerformListing : error detected by NetrwRemoteListing") + return + endif endif " manipulate the directory listing (hide, sort) {{{3 if !exists("w:netrw_bannercnt") let w:netrw_bannercnt= 0 endif -" call Decho("(PerformListing) g:netrw_banner=".g:netrw_banner." w:netrw_bannercnt=".w:netrw_bannercnt." (banner complete)") +" call Decho("g:netrw_banner=".g:netrw_banner." w:netrw_bannercnt=".w:netrw_bannercnt." (banner complete)") +" call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") if !g:netrw_banner || line("$") >= w:netrw_bannercnt -" call Decho("(PerformListing) manipulate directory listing (hide)") -" call Decho("(PerformListing) g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">") +" call Decho("manipulate directory listing (hide)") +" call Decho("g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">") if g:netrw_hide && g:netrw_list_hide != "" keepj call s:NetrwListHide() endif if !g:netrw_banner || line("$") >= w:netrw_bannercnt -" call Decho("(PerformListing) manipulate directory listing (sort) : g:netrw_sort_by<".g:netrw_sort_by.">") +" call Decho("manipulate directory listing (sort) : g:netrw_sort_by<".g:netrw_sort_by.">") if g:netrw_sort_by =~ "^n" " sort by name keepj call s:NetrwSetSort() if !g:netrw_banner || w:netrw_bannercnt < line("$") -" call Decho("(PerformListing) g:netrw_sort_direction=".g:netrw_sort_direction." (bannercnt=".w:netrw_bannercnt.")") +" call Decho("g:netrw_sort_direction=".g:netrw_sort_direction." (bannercnt=".w:netrw_bannercnt.")") if g:netrw_sort_direction =~ 'n' " normal direction sorting exe 'sil keepj '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options @@ -7731,13 +8379,13 @@ endif endif " remove priority pattern prefix -" call Decho("(PerformListing) remove priority pattern prefix") +" call Decho("remove priority pattern prefix") exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\d\{3}'.g:netrw_sepchr.'//e' keepj call histdel("/",-1) elseif a:islocal if !g:netrw_banner || w:netrw_bannercnt < line("$") -" call Decho("(PerformListing) g:netrw_sort_direction=".g:netrw_sort_direction) +" call Decho("g:netrw_sort_direction=".g:netrw_sort_direction) if g:netrw_sort_direction =~ 'n' " call Decho('exe sil keepjumps '.w:netrw_bannercnt.',$sort') exe 'sil! keepj '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options @@ -7751,47 +8399,57 @@ endif elseif g:netrw_sort_direction =~ 'r' -" call Decho('reverse the sorted listing') +" call Decho('(s:PerformListing) reverse the sorted listing') if !g:netrw_banner || w:netrw_bannercnt < line('$') exe 'sil! keepj '.w:netrw_bannercnt.',$g/^/m '.w:netrw_bannercnt call histdel("/",-1) endif endif endif +" call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") " convert to wide/tree listing {{{3 -" call Decho("(PerformListing) modify display if wide/tree listing style") +" call Decho("modify display if wide/tree listing style") +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#1)") keepj call s:NetrwWideListing() +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#2)") keepj call s:NetrwTreeListing(b:netrw_curdir) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#3)") if exists("w:netrw_bannercnt") && (line("$") > w:netrw_bannercnt || !g:netrw_banner) " place cursor on the top-left corner of the file listing -" call Decho("(PerformListing) place cursor on top-left corner of file listing") +" call Decho("place cursor on top-left corner of file listing") exe 'sil! keepj '.w:netrw_bannercnt sil! keepj norm! 0 endif " record previous current directory let w:netrw_prvdir= b:netrw_curdir -" call Decho("(PerformListing) record netrw_prvdir<".w:netrw_prvdir.">") +" call Decho("record netrw_prvdir<".w:netrw_prvdir.">") " save certain window-oriented variables into buffer-oriented variables {{{3 +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#4)") keepj call s:SetBufWinVars() +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#5)") keepj call s:NetrwOptionRestore("w:") +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#6)") " set display to netrw display settings -" call Decho("(PerformListing) set display to netrw display settings (".g:netrw_bufsettings.")") +" call Decho("set display to netrw display settings (".g:netrw_bufsettings.")") exe "setl ".g:netrw_bufsettings +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#7)") if g:netrw_liststyle == s:LONGLIST -" call Decho("(PerformListing) exe setl ts=".(g:netrw_maxfilenamelen+1)) +" call Decho("exe setl ts=".(g:netrw_maxfilenamelen+1)) exe "setl ts=".(g:netrw_maxfilenamelen+1) endif - if exists("s:treecurpos") - keepj call netrw#NetrwRestorePosn(s:treecurpos) + if exists("s:treecurpos") +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (internal#8)") + keepj call netrw#RestorePosn(s:treecurpos) unlet s:treecurpos endif +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo. " (return)") " call Dret("s:PerformListing : curpos<".string(getpos(".")).">") endfun @@ -7810,79 +8468,226 @@ if !exists("s:netrw_users_ls") let s:netrw_users_ls= &laststatus endif - - " set up User9 highlighting as needed - let keepa= @a - redir @a - try - hi User9 - catch /^Vim\%((\a\+)\)\=:E411/ - if &bg == "dark" - hi User9 ctermfg=yellow ctermbg=blue guifg=yellow guibg=blue - else - hi User9 ctermbg=yellow ctermfg=blue guibg=yellow guifg=blue - endif - endtry - redir END - let @a= keepa + + " set up User9 highlighting as needed + let keepa= @a + redir @a + try + hi User9 + catch /^Vim\%((\a\+)\)\=:E411/ + if &bg == "dark" + hi User9 ctermfg=yellow ctermbg=blue guifg=yellow guibg=blue + else + hi User9 ctermbg=yellow ctermfg=blue guibg=yellow guifg=blue + endif + endtry + redir END + let @a= keepa + endif + + " set up status line (may use User9 highlighting) + " insure that windows have a statusline + " make sure statusline is displayed + let &stl=a:statline + setl laststatus=2 +" call Decho("stl=".&stl) + redraw + +" call Dret("SetupNetrwStatusLine : stl=".&stl) +endfun + +" --------------------------------------------------------------------- +" Remote Directory Browsing Support: {{{1 +" =========================================== + +" --------------------------------------------------------------------- +" s:NetrwRemoteFtpCmd: unfortunately, not all ftp servers honor options for ls {{{2 +" This function assumes that a long listing will be received. Size, time, +" and reverse sorts will be requested of the server but not otherwise +" enforced here. +fun! s:NetrwRemoteFtpCmd(path,listcmd) +" call Dfunc("NetrwRemoteFtpCmd(path<".a:path."> listcmd<".a:listcmd.">) w:netrw_method=".(exists("w:netrw_method")? w:netrw_method : (exists("b:netrw_method")? b:netrw_method : "???"))) +" call Decho("line($)=".line("$")." w:netrw_bannercnt=".w:netrw_bannercnt) + " sanity check: {{{3 + if !exists("w:netrw_method") + if exists("b:netrw_method") + let w:netrw_method= b:netrw_method + else + call netrw#ErrorMsg(2,"(s:NetrwRemoteFtpCmd) internal netrw error",93) +" call Dret("NetrwRemoteFtpCmd") + return + endif + endif + + " WinXX ftp uses unix style input, so set ff to unix " {{{3 + let ffkeep= &ff + setl ma ff=unix noro +" call Decho("setl ma ff=unix noro") + + " clear off any older non-banner lines " {{{3 + " note that w:netrw_bannercnt indexes the line after the banner +" call Decho('exe sil! keepjumps '.w:netrw_bannercnt.",$d (clear off old non-banner lines)") + exe "sil! keepjumps ".w:netrw_bannercnt.",$d" + + "......................................... + if w:netrw_method == 2 || w:netrw_method == 5 " {{{3 + " ftp + <.netrc>: Method #2 + if a:path != "" + keepj put ='cd \"'.a:path.'\"' + endif + if exists("g:netrw_ftpextracmd") + keepj put =g:netrw_ftpextracmd +" call Decho("filter input: ".getline('.')) + endif + keepj call setline(line("$")+1,a:listcmd) +" exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))' + if exists("g:netrw_port") && g:netrw_port != "" +" call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)) + exe s:netrw_silentxfer." keepj ".w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1) + else +" call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)) + exe s:netrw_silentxfer." keepj ".w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1) + endif + + "......................................... + elseif w:netrw_method == 3 " {{{3 + " ftp + machine,id,passwd,filename: Method #3 + setl ff=unix + if exists("g:netrw_port") && g:netrw_port != "" + keepj put ='open '.g:netrw_machine.' '.g:netrw_port + else + keepj put ='open '.g:netrw_machine + endif + + " handle userid and password + let host= substitute(g:netrw_machine,'\..*$','','') +" call Decho("host<".host.">") + if exists("s:netrw_hup") && exists("s:netrw_hup[host]") + call NetUserPass("ftp:".host) + endif + if exists("g:netrw_uid") && g:netrw_uid != "" + if exists("g:netrw_ftp") && g:netrw_ftp == 1 + keepj put =g:netrw_uid + if exists("s:netrw_passwd") && s:netrw_passwd != "" + keepj put ='\"'.s:netrw_passwd.'\"' + endif + elseif exists("s:netrw_passwd") + keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"' + endif + endif + + if a:path != "" + keepj put ='cd \"'.a:path.'\"' + endif + if exists("g:netrw_ftpextracmd") + keepj put =g:netrw_ftpextracmd +" call Decho("filter input: ".getline('.')) + endif + keepj call setline(line("$")+1,a:listcmd) + + " perform ftp: + " -i : turns off interactive prompting from ftp + " -n unix : DON'T use <.netrc>, even though it exists + " -n win32: quit being obnoxious about password + if exists("w:netrw_bannercnt") +" exe w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))' +" call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." ".g:netrw_ftp_options) + exe s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." ".g:netrw_ftp_options +" else " Decho +" call Decho("WARNING: w:netrw_bannercnt doesn't exist!") +" g/^./call Decho("SKIPPING ftp#".line(".").": ".getline(".")) " COMBAK + endif + + "......................................... + elseif w:netrw_method == 9 " {{{3 + " sftp username@machine: Method #9 + " s:netrw_sftp_cmd + setl ff=unix + + " restore settings + let &ff= ffkeep +" call Dret("NetrwRemoteFtpCmd") + return + + "......................................... + else " {{{3 + keepj call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . bufname("%") . ">",23) + endif + + " cleanup for Windows " {{{3 + if has("win32") || has("win95") || has("win64") || has("win16") + sil! keepj %s/\r$//e + keepj call histdel("/",-1) + endif + if a:listcmd == "dir" + " infer directory/link based on the file permission string + sil! keepj g/d\%([-r][-w][-x]\)\{3}/keepj s@$@/@e + sil! keepj g/l\%([-r][-w][-x]\)\{3}/keepj s/$/@/e + keepj call histdel("/",-1) + keepj call histdel("/",-1) + if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST + exe "sil! keepj ".w:netrw_bannercnt.',$s/^\%(\S\+\s\+\)\{8}//e' + keepj call histdel("/",-1) + endif endif - " set up status line (may use User9 highlighting) - " insure that windows have a statusline - " make sure statusline is displayed - let &stl=a:statline - setl laststatus=2 -" call Decho("stl=".&stl) - redraw + " ftp's listing doesn't seem to include ./ or ../ " {{{3 + if !search('^\.\/$\|\s\.\/$','wn') + exe 'keepj '.w:netrw_bannercnt + keepj put ='./' + endif + if !search('^\.\.\/$\|\s\.\.\/$','wn') + exe 'keepj '.w:netrw_bannercnt + keepj put ='../' + endif -" call Dret("SetupNetrwStatusLine : stl=".&stl) + " restore settings " {{{3 + let &ff= ffkeep +" call Dret("NetrwRemoteFtpCmd") endfun " --------------------------------------------------------------------- -" Remote Directory Browsing Support: {{{1 -" =========================================== - -" --------------------------------------------------------------------- " s:NetrwRemoteListing: {{{2 fun! s:NetrwRemoteListing() " call Dfunc("s:NetrwRemoteListing() b:netrw_curdir<".b:netrw_curdir.">)") + if !exists("w:netrw_bannercnt") && exists("s:bannercnt") + let w:netrw_bannercnt= s:bannercnt + endif + if !exists("w:netrw_bannercnt") && exists("b:bannercnt") + let w:netrw_bannercnt= s:bannercnt + endif + call s:RemotePathAnalysis(b:netrw_curdir) -" call Decho("b:netrw_method#".(exists("b:netrw_method")? b:netrw_method : 'n/a')) -" call Decho("g:netrw_list_cmd<".(exists("g:netrw_list_cmd")? g:netrw_list_cmd : 'n/a').">") -" call Decho("ssh is ".(executable("ssh")? "" : "not ")."executable") -" call Decho("ftp is ".(executable("ftp")? "" : "not ")."executable") -" call Decho("sftp is ".(executable("sftp")? "" : "not ")."executable") " sanity check: if exists("b:netrw_method") && b:netrw_method =~ '[235]' - " b:netrw_method = 2: ftp+.netrc - " b:netrw_method = 3: ftp+machine,id,p/w,filename (ie. no .netrc) - " b:netrw_method = 5: wget (http) -" call Decho("b:netrw_method=".b:netrw_method." (for ".s:method.")") +" call Decho("b:netrw_method=".b:netrw_method) if !executable("ftp") +" call Decho("ftp is not executable") if !exists("g:netrw_quiet") call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ftp",18) endif call s:NetrwOptionRestore("w:") -" call Dret("s:NetrwRemoteListing") - return +" call Dret("s:NetrwRemoteListing -1") + return -1 endif - elseif s:method == "scp" && (!exists("g:netrw_list_cmd") || g:netrw_list_cmd == '') -" call Decho("g:netrw_list_cmd<".(exists("g:netrw_list_cmd")? g:netrw_list_cmd : 'n/a').">") + elseif !exists("g:netrw_list_cmd") || g:netrw_list_cmd == '' +" call Decho("g:netrw_list_cmd<",(exists("g:netrw_list_cmd")? 'n/a' : "-empty-").">") if !exists("g:netrw_quiet") - if !exists("g:netrw_list_cmd") || g:netrw_list_cmd == "" - keepj call netrw#ErrorMsg(s:ERROR,"neither ssh nor ftp"." is executable on your system",47) + if g:netrw_list_cmd == "" + keepj call netrw#ErrorMsg(s:ERROR,"your g:netrw_list_cmd is empty; perhaps ".g:netrw_ssh_cmd." is not executable on your system",47) else keepj call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ".g:netrw_list_cmd,19) endif endif keepj call s:NetrwOptionRestore("w:") -" call Dret("s:NetrwRemoteListing") - return +" call Dret("s:NetrwRemoteListing -1") + return -1 endif " (remote handling sanity check) +" call Decho("passed remote listing sanity checks") if exists("b:netrw_method") " call Decho("setting w:netrw_method to b:netrw_method<".b:netrw_method.">") @@ -7892,8 +8697,8 @@ if s:method == "ftp" " use ftp to get remote file listing {{{3 " call Decho("use ftp to get remote file listing") - let s:method = "ftp" - let listcmd = g:netrw_ftp_list_cmd + let s:method = "ftp" + let listcmd = g:netrw_ftp_list_cmd if g:netrw_sort_by =~ '^t' let listcmd= g:netrw_ftp_timelist_cmd elseif g:netrw_sort_by =~ '^s' @@ -7903,6 +8708,20 @@ call s:NetrwRemoteFtpCmd(s:path,listcmd) " exe "sil! keepalt keepj ".w:netrw_bannercnt.',$g/^./call Decho("raw listing: ".getline("."))' + " report on missing file or directory messages + if search('[Nn]o such file or directory\|Failed to change directory') + let mesg= getline(".") + if exists("w:netrw_bannercnt") + setl ma + exe w:netrw_bannercnt.",$d" + setl noma + endif + keepj call s:NetrwOptionRestore("w:") + call netrw#ErrorMsg(s:WARNING,mesg,96) +" call Dret("s:NetrwRemoteListing : -1") + return -1 + endif + if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST " shorten the listing " call Decho("generate short listing") @@ -7944,7 +8763,7 @@ endif endif - else + else " use ssh to get remote file listing {{{3 " call Decho("use ssh to get remote file listing: s:path<".s:path.">") let listcmd= s:MakeSshCmd(g:netrw_list_cmd) @@ -7975,8 +8794,8 @@ endif " cleanup - if g:netrw_ftp_browse_reject != "" -" call Decho("(cleanup) exe sil! g/".g:netrw_ssh_browse_reject."/keepjumps d") + if g:netrw_ssh_browse_reject != "" +" call Decho("cleanup: exe sil! g/".g:netrw_ssh_browse_reject."/keepjumps d") exe "sil! g/".g:netrw_ssh_browse_reject."/keepj d" keepj call histdel("/",-1) endif @@ -8023,7 +8842,9 @@ " if exists("w:netrw_bannercnt") && w:netrw_bannercnt <= line("$") " Decho " exe "keepj ".w:netrw_bannercnt.',$g/^./call Decho("listing: ".getline("."))' " endif " Decho -" call Dret("s:NetrwRemoteListing") + +" call Dret("s:NetrwRemoteListing 0") + return 0 endfun " --------------------------------------------------------------------- @@ -8031,7 +8852,7 @@ fun! s:NetrwRemoteRm(usrhost,path) range " call Dfunc("s:NetrwRemoteRm(usrhost<".a:usrhost."> path<".a:path.">) virtcol=".virtcol(".")) " call Decho("firstline=".a:firstline." lastline=".a:lastline) - let svpos= netrw#NetrwSavePosn() + let svpos= netrw#SavePosn() let all= 0 if exists("s:netrwmarkfilelist_{bufnr('%')}") @@ -8070,7 +8891,7 @@ " refresh the (remote) directory listing " call Decho("refresh remote directory listing") keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) " call Dret("s:NetrwRemoteRm") endfun @@ -8190,141 +9011,12 @@ endfun " --------------------------------------------------------------------- -" s:NetrwRemoteFtpCmd: unfortunately, not all ftp servers honor options for ls {{{2 -" This function assumes that a long listing will be received. Size, time, -" and reverse sorts will be requested of the server but not otherwise -" enforced here. -fun! s:NetrwRemoteFtpCmd(path,listcmd) -" call Dfunc("NetrwRemoteFtpCmd(path<".a:path."> listcmd<".a:listcmd.">) w:netrw_method=".(exists("w:netrw_method")? w:netrw_method : (exists("b:netrw_method")? b:netrw_method : "???"))) -" call Decho("line($)=".line("$")." w:netrw_bannercnt=".w:netrw_bannercnt) - if !exists("w:netrw_method") - if exists("b:netrw_method") - let w:netrw_method= b:netrw_method - else - call netrw#ErrorMsg(2,"(s:NetrwRemoteFtpCmd) internal netrw error",93) -" call Dret("NetrwRemoteFtpCmd") - return - endif - endif - - " because WinXX ftp uses unix style input - let ffkeep= &ff - setl ma ff=unix noro -" call Decho("setl ma ff=unix noro") - - " clear off any older non-banner lines - " note that w:netrw_bannercnt indexes the line after the banner -" call Decho('exe sil! keepjumps '.w:netrw_bannercnt.",$d (clear off old non-banner lines)") - exe "sil! keepjumps ".w:netrw_bannercnt.",$d" - - "......................................... - if w:netrw_method == 2 || w:netrw_method == 5 - " ftp + <.netrc>: Method #2 - if a:path != "" - keepj put ='cd \"'.a:path.'\"' - endif - if exists("g:netrw_ftpextracmd") - keepj put =g:netrw_ftpextracmd -" call Decho("filter input: ".getline('.')) - endif - keepj call setline(line("$")+1,a:listcmd) -" exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))' - if exists("g:netrw_port") && g:netrw_port != "" -" call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)) - exe s:netrw_silentxfer." keepj ".w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1) - else -" call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)) - exe s:netrw_silentxfer." keepj ".w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1) - endif - - "......................................... - elseif w:netrw_method == 3 - " ftp + machine,id,passwd,filename: Method #3 - setl ff=unix - if exists("g:netrw_port") && g:netrw_port != "" - keepj put ='open '.g:netrw_machine.' '.g:netrw_port - else - keepj put ='open '.g:netrw_machine - endif - - " handle userid and password - let host= substitute(g:netrw_machine,'\..*$','','') -" call Decho("host<".host.">") - if exists("s:netrw_hup") && exists("s:netrw_hup[host]") - call NetUserPass("ftp:".host) - endif - if exists("g:netrw_uid") && g:netrw_uid != "" - if exists("g:netrw_ftp") && g:netrw_ftp == 1 - keepj put =g:netrw_uid - if exists("s:netrw_passwd") && s:netrw_passwd != "" - keepj put ='\"'.s:netrw_passwd.'\"' - endif - elseif exists("s:netrw_passwd") - keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"' - endif - endif - - if a:path != "" - keepj put ='cd \"'.a:path.'\"' - endif - if exists("g:netrw_ftpextracmd") - keepj put =g:netrw_ftpextracmd -" call Decho("filter input: ".getline('.')) - endif - keepj call setline(line("$")+1,a:listcmd) - - " perform ftp: - " -i : turns off interactive prompting from ftp - " -n unix : DON'T use <.netrc>, even though it exists - " -n win32: quit being obnoxious about password -" exe w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))' -" call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." ".g:netrw_ftp_options) - exe s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." ".g:netrw_ftp_options - - "......................................... - else - keepj call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",23) - endif - - " cleanup for Windows - if has("win32") || has("win95") || has("win64") || has("win16") - sil! keepj %s/\r$//e - keepj call histdel("/",-1) - endif - if a:listcmd == "dir" - " infer directory/link based on the file permission string - sil! keepj g/d\%([-r][-w][-x]\)\{3}/keepj s@$@/@ - sil! keepj g/l\%([-r][-w][-x]\)\{3}/keepj s/$/@/ - keepj call histdel("/",-1) - keepj call histdel("/",-1) - if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST - exe "sil! keepj ".w:netrw_bannercnt.',$s/^\%(\S\+\s\+\)\{8}//e' - keepj call histdel("/",-1) - endif - endif - - " ftp's listing doesn't seem to include ./ or ../ - if !search('^\.\/$\|\s\.\/$','wn') - exe 'keepj '.w:netrw_bannercnt - keepj put ='./' - endif - if !search('^\.\.\/$\|\s\.\.\/$','wn') - exe 'keepj '.w:netrw_bannercnt - keepj put ='../' - endif - - " restore settings - let &ff= ffkeep -" call Dret("NetrwRemoteFtpCmd") -endfun - -" --------------------------------------------------------------------- " s:NetrwRemoteRename: rename a remote file or directory {{{2 fun! s:NetrwRemoteRename(usrhost,path) range " call Dfunc("NetrwRemoteRename(usrhost<".a:usrhost."> path<".a:path.">)") " preparation for removing multiple files/directories - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() let ctr = a:firstline let rename_cmd = s:MakeSshCmd(g:netrw_rename_cmd) @@ -8387,7 +9079,7 @@ " refresh the directory keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) " call Dret("NetrwRemoteRename") endfun @@ -8439,9 +9131,9 @@ exe 'sil! bdelete '.plainfname exe 'keepalt file! '.plainfname keepj 1d -" call Decho("(FileUrlRead) setl nomod") +" call Decho("setl nomod") setl nomod -" call Decho("(FileUrlRead) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " call Dret("netrw#FileUrlRead") exe "sil doau BufReadPost ".fname2396e endfun @@ -8456,107 +9148,263 @@ " The &ft == "netrw" test was installed because the BufEnter event " would hit when re-entering netrw windows, creating unexpected " refreshes (and would do so in the middle of NetrwSaveOptions(), too) -" call Decho("(LocalBrowseCheck) isdir<".a:dirname.">=".isdirectory(a:dirname).((exists("s:treeforceredraw")? " treeforceredraw" : ""))) -" call Dredir("LocalBrowseCheck","ls!")|redraw!|sleep 3 +" call Dfunc("netrw#LocalBrowseCheck(dirname<".a:dirname.">") +" call Decho("isdir<".a:dirname.">=".isdirectory(a:dirname).((exists("s:treeforceredraw")? " treeforceredraw" : ""))) +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) +" call Dredir("ls!","ls!") + let ykeep= @@ if isdirectory(a:dirname) -" call Decho("(LocalBrowseCheck) is-directory ft<".&ft."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : " doesn't exist")."> dirname<".a:dirname.">"." line($)=".line("$")." ft<".&ft."> g:netrw_fastbrowse=".g:netrw_fastbrowse) - let svposn= netrw#NetrwSavePosn() +" call Decho("is-directory ft<".&ft."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : " doesn't exist")."> dirname<".a:dirname.">"." line($)=".line("$")." ft<".&ft."> g:netrw_fastbrowse=".g:netrw_fastbrowse) + let svposn= netrw#SavePosn() if &ft != "netrw" || (exists("b:netrw_curdir") && b:netrw_curdir != a:dirname) || g:netrw_fastbrowse <= 1 +" call Decho("case 1 : ft=".&ft) sil! keepj keepalt call s:NetrwBrowse(1,a:dirname) - keepalt call netrw#NetrwRestorePosn(svposn) + keepalt call netrw#RestorePosn(svposn) + elseif &ft == "netrw" && line("$") == 1 +" call Decho("case 2 (ft≡netrw && line($)≡1)") sil! keepj keepalt call s:NetrwBrowse(1,a:dirname) - keepalt call netrw#NetrwRestorePosn(svposn) + keepalt call netrw#RestorePosn(svposn) + elseif exists("s:treeforceredraw") +" call Decho("case 3 (treeforceredraw)") unlet s:treeforceredraw sil! keepj keepalt call s:NetrwBrowse(1,a:dirname) - keepalt call netrw#NetrwRestorePosn(svposn) + keepalt call netrw#RestorePosn(svposn) + endif + +" call Dret("netrw#LocalBrowseCheck") + return + endif + + " following code wipes out currently unused netrw buffers + " IF g:netrw_fastbrowse is zero (ie. slow browsing selected) + " AND IF the listing style is not a tree listing + if exists("g:netrw_fastbrowse") && g:netrw_fastbrowse == 0 && g:netrw_liststyle != s:TREELIST +" call Decho("wiping out currently unused netrw buffers") + let ibuf = 1 + let buflast = bufnr("$") + while ibuf <= buflast + if bufwinnr(ibuf) == -1 && isdirectory(bufname(ibuf)) + exe "sil! keepalt ".ibuf."bw!" + endif + let ibuf= ibuf + 1 + endwhile + endif + let @@= ykeep +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) + " not a directory, ignore it +" call Dret("netrw#LocalBrowseCheck : not a directory, ignoring it; dirname<".a:dirname.">") +endfun + +" --------------------------------------------------------------------- +" s:LocalBrowseRefresh: this function is called after a user has {{{2 +" performed any shell command. The idea is to cause all local-browsing +" buffers to be refreshed after a user has executed some shell command, +" on the chance that s/he removed/created a file/directory with it. +fun! s:LocalBrowseRefresh() +" call Dfunc("s:LocalBrowseRefresh() tabpagenr($)=".tabpagenr("$")) +" call Decho("s:netrw_browselist =".(exists("s:netrw_browselist")? string(s:netrw_browselist) : '')) +" call Decho("w:netrw_bannercnt =".(exists("w:netrw_bannercnt")? string(w:netrw_bannercnt) : '')) + + " determine which buffers currently reside in a tab + if !exists("s:netrw_browselist") +" call Dret("s:LocalBrowseRefresh : browselist is empty") + return + endif + if !exists("w:netrw_bannercnt") +" call Dret("s:LocalBrowseRefresh : don't refresh when focus not on netrw window") + return + endif + if exists("s:netrw_events") && s:netrw_events == 1 + " s:LocalFastBrowser gets called (indirectly) from a + let s:netrw_events= 2 +" call Dret("s:LocalBrowseRefresh : avoid initial double refresh") + return + endif + let itab = 1 + let buftablist = [] + let ykeep = @@ + while itab <= tabpagenr("$") + let buftablist = buftablist + tabpagebuflist() + let itab = itab + 1 + tabn + endwhile +" call Decho("buftablist".string(buftablist)) +" call Decho("s:netrw_browselist<".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "").">") + " GO through all buffers on netrw_browselist (ie. just local-netrw buffers): + " | refresh any netrw window + " | wipe out any non-displaying netrw buffer + let curwin = winnr() + let ibl = 0 + for ibuf in s:netrw_browselist +" call Decho("bufwinnr(".ibuf.") index(buftablist,".ibuf.")=".index(buftablist,ibuf)) + if bufwinnr(ibuf) == -1 && index(buftablist,ibuf) == -1 + " wipe out any non-displaying netrw buffer +" call Decho("wiping buf#".ibuf,"<".bufname(ibuf).">") + exe "sil! bd ".fnameescape(ibuf) + call remove(s:netrw_browselist,ibl) +" call Decho("browselist=".string(s:netrw_browselist)) + continue + elseif index(tabpagebuflist(),ibuf) != -1 + " refresh any netrw buffer +" call Decho("refresh buf#".ibuf.'-> win#'.bufwinnr(ibuf)) + exe bufwinnr(ibuf)."wincmd w" + if getline(".") =~ 'Quick Help' + " decrement g:netrw_quickhelp to prevent refresh from changing g:netrw_quickhelp + " (counteracts s:NetrwBrowseChgDir()'s incrementing) + let g:netrw_quickhelp= g:netrw_quickhelp - 1 + endif +" call Decho("#3: quickhelp=".g:netrw_quickhelp) + keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./')) endif + let ibl= ibl + 1 + endfor + exe curwin."wincmd w" + let @@= ykeep + +" call Dret("s:LocalBrowseRefresh") +endfun + +" --------------------------------------------------------------------- +" s:LocalFastBrowser: handles setting up/taking down fast browsing for the local browser {{{2 +" +" g:netrw_ Directory Is +" fastbrowse Local Remote +" slow 0 D D D=Deleting a buffer implies it will not be re-used (slow) +" med 1 D H H=Hiding a buffer implies it may be re-used (fast) +" fast 2 H H +" +" Deleting a buffer means that it will be re-loaded when examined, hence "slow". +" Hiding a buffer means that it will be re-used when examined, hence "fast". +" (re-using a buffer may not be as accurate) +" +" s:netrw_events : doesn't exist, s:LocalFastBrowser() will install autocmds whena med or fast browsing +" =1: autocmds installed, but ignore next FocusGained event to avoid initial double-refresh of listing. +" BufEnter may be first event, then a FocusGained event. Ignore the first FocusGained event. +" If :Explore used: it sets s:netrw_events to 2, so no FocusGained events are ignored. +" =2: autocmds installed (doesn't ignore any FocusGained events) +fun! s:LocalFastBrowser() +" call Dfunc("LocalFastBrowser() g:netrw_fastbrowse=".g:netrw_fastbrowse) +" call Decho("s:netrw_events ".(exists("s:netrw_events")? "exists" : 'n/a')) +" call Decho("autocmd: ShellCmdPost ".(exists("#ShellCmdPost")? "installed" : "not installed")) +" call Decho("autocmd: FocusGained ".(exists("#FocusGained")? "installed" : "not installed")) + + " initialize browselist, a list of buffer numbers that the local browser has used + if !exists("s:netrw_browselist") +" call Decho("initialize s:netrw_browselist") + let s:netrw_browselist= [] endif - " following code wipes out currently unused netrw buffers - " IF g:netrw_fastbrowse is zero (ie. slow browsing selected) - " AND IF the listing style is not a tree listing - if exists("g:netrw_fastbrowse") && g:netrw_fastbrowse == 0 && g:netrw_liststyle != s:TREELIST - let ibuf = 1 - let buflast = bufnr("$") - while ibuf <= buflast - if bufwinnr(ibuf) == -1 && isdirectory(bufname(ibuf)) - exe "sil! keepalt ".ibuf."bw!" + + " append current buffer to fastbrowse list + if empty(s:netrw_browselist) || bufnr("%") > s:netrw_browselist[-1] +" call Decho("appendng current buffer to browselist") + call add(s:netrw_browselist,bufnr("%")) +" call Decho("browselist=".string(s:netrw_browselist)) + endif + + " enable autocmd events to handle refreshing/removing local browser buffers + " If local browse buffer is currently showing: refresh it + " If local browse buffer is currently hidden : wipe it + " g:netrw_fastbrowse=0 : slow speed, never re-use directory listing + " =1 : medium speed, re-use directory listing for remote only + " =2 : fast speed, always re-use directory listing when possible + if g:netrw_fastbrowse <= 1 && !exists("#ShellCmdPost") && !exists("s:netrw_events") + let s:netrw_events= 1 + augroup AuNetrwEvent + au! + if (has("win32") || has("win95") || has("win64") || has("win16")) +" call Decho("installing autocmd: ShellCmdPost") + au ShellCmdPost * call s:LocalBrowseRefresh() + else +" call Decho("installing autocmds: ShellCmdPost FocusGained") + au ShellCmdPost,FocusGained * call s:LocalBrowseRefresh() endif - let ibuf= ibuf + 1 - endwhile + augroup END + + " user must have changed fastbrowse to its fast setting, so remove + " the associated autocmd events + elseif g:netrw_fastbrowse > 1 && exists("#ShellCmdPost") && exists("s:netrw_events") +" call Decho("remove AuNetrwEvent autcmd group") + unlet s:netrw_events + augroup AuNetrwEvent + au! + augroup END + augroup! AuNetrwEvent endif - let @@= ykeep - " not a directory, ignore it + +" call Dret("LocalFastBrowser : browselist<".string(s:netrw_browselist).">") endfun " --------------------------------------------------------------------- " s:LocalListing: does the job of "ls" for local directories {{{2 fun! s:LocalListing() " call Dfunc("s:LocalListing()") -" call Decho("(LocalListing) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") -" call Decho("(LocalListing) tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly) +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly) -" if exists("b:netrw_curdir") |call Decho('(LocalListing) b:netrw_curdir<'.b:netrw_curdir.">") |else|call Decho("(LocalListing) b:netrw_curdir doesn't exist") |endif -" if exists("g:netrw_sort_by")|call Decho('(LocalListing) g:netrw_sort_by<'.g:netrw_sort_by.">")|else|call Decho("(LocalListing) g:netrw_sort_by doesn't exist")|endif +" if exists("b:netrw_curdir") |call Decho('b:netrw_curdir<'.b:netrw_curdir.">") |else|call Decho("b:netrw_curdir doesn't exist") |endif +" if exists("g:netrw_sort_by")|call Decho('g:netrw_sort_by<'.g:netrw_sort_by.">")|else|call Decho("g:netrw_sort_by doesn't exist")|endif +" call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") " get the list of files contained in the current directory let dirname = b:netrw_curdir - let dirnamelen = s:Strlen(b:netrw_curdir) + let dirnamelen = strlen(b:netrw_curdir) let filelist = glob(s:ComposePath(dirname,"*"),0,1) let filelist = filelist + glob(s:ComposePath(dirname,".*"),0,1) -" call Decho("(LocalListing) filelist=".filelist) +" call Decho("filelist=".filelist) if g:netrw_cygwin == 0 && (has("win32") || has("win95") || has("win64") || has("win16")) -" call Decho("(LocalListing) filelist=".string(filelist)) +" call Decho("filelist=".string(filelist)) elseif index(filelist,'..') == -1 && b:netrw_curdir !~ '/' " include ../ in the glob() entry if its missing -" call Decho("(LocalListing) forcibly including on \"..\"") +" call Decho("forcibly including on \"..\"") let filelist= filelist+[s:ComposePath(b:netrw_curdir,"../")] -" call Decho("(LocalListing) filelist=".string(filelist)) +" call Decho("filelist=".string(filelist)) endif -" call Decho("(LocalListing) (before while) dirname<".dirname.">") -" call Decho("(LocalListing) (before while) dirnamelen<".dirnamelen.">") -" call Decho("(LocalListing) (before while) filelist=".string(filelist)) +" call Decho("before while: dirname<".dirname.">") +" call Decho("before while: dirnamelen<".dirnamelen.">") +" call Decho("before while: filelist=".string(filelist)) if get(g:, 'netrw_dynamic_maxfilenamelen', 0) let filelistcopy = map(deepcopy(filelist),'fnamemodify(v:val, ":t")') let g:netrw_maxfilenamelen = max(map(filelistcopy,'len(v:val)')) + 1 -" call Decho("(LocalListing) dynamic_maxfilenamelen: filenames =".string(filelistcopy)) -" call Decho("(LocalListing) dynamic_maxfilenamelen: g:netrw_maxfilenamelen=".g:netrw_maxfilenamelen) +" call Decho("dynamic_maxfilenamelen: filenames =".string(filelistcopy)) +" call Decho("dynamic_maxfilenamelen: g:netrw_maxfilenamelen=".g:netrw_maxfilenamelen) endif +" call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")") for filename in filelist -" call Decho("(LocalListing) ") -" call Decho("(LocalListing) (while) filename<".filename.">") +" call Decho(" ") +" call Decho("for filename in filelist: filename<".filename.">") if getftype(filename) == "link" " indicate a symbolic link -" call Decho("(LocalListing) indicate <".filename."> is a symbolic link with trailing @") +" call Decho("indicate <".filename."> is a symbolic link with trailing @") let pfile= filename."@" elseif getftype(filename) == "socket" " indicate a socket -" call Decho("(LocalListing) indicate <".filename."> is a socket with trailing =") +" call Decho("indicate <".filename."> is a socket with trailing =") let pfile= filename."=" elseif getftype(filename) == "fifo" " indicate a fifo -" call Decho("(LocalListing) indicate <".filename."> is a fifo with trailing |") +" call Decho("indicate <".filename."> is a fifo with trailing |") let pfile= filename."|" elseif isdirectory(filename) " indicate a directory -" call Decho("(LocalListing) indicate <".filename."> is a directory with trailing /") +" call Decho("indicate <".filename."> is a directory with trailing /") let pfile= filename."/" elseif exists("b:netrw_curdir") && b:netrw_curdir !~ '^.*://' && !isdirectory(filename) if (has("win32") || has("win95") || has("win64") || has("win16")) if filename =~ '\.[eE][xX][eE]$' || filename =~ '\.[cC][oO][mM]$' || filename =~ '\.[bB][aA][tT]$' " indicate an executable -" call Decho("(LocalListing) indicate <".filename."> is executable with trailing *") +" call Decho("indicate <".filename."> is executable with trailing *") let pfile= filename."*" else " normal file @@ -8564,7 +9412,7 @@ endif elseif executable(filename) " indicate an executable -" call Decho("(LocalListing) indicate <".filename."> is executable with trailing *") +" call Decho("indicate <".filename."> is executable with trailing *") let pfile= filename."*" else " normal file @@ -8575,45 +9423,45 @@ " normal file let pfile= filename endif -" call Decho("(LocalListing) pfile<".pfile."> (after *@/ appending)") +" call Decho("pfile<".pfile."> (after *@/ appending)") if pfile =~ '//$' let pfile= substitute(pfile,'//$','/','e') -" call Decho("(LocalListing) change // to /: pfile<".pfile.">") +" call Decho("change // to /: pfile<".pfile.">") endif let pfile= strpart(pfile,dirnamelen) let pfile= substitute(pfile,'^[/\\]','','e') -" call Decho("(LocalListing) filename<".filename.">") -" call Decho("(LocalListing) pfile <".pfile.">") +" call Decho("filename<".filename.">") +" call Decho("pfile <".pfile.">") if w:netrw_liststyle == s:LONGLIST let sz = getfsize(filename) let fsz = strpart(" ",1,15-strlen(sz)).sz let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename)) -" call Decho("(LocalListing) sz=".sz." fsz=".fsz) +" call Decho("sz=".sz." fsz=".fsz) endif if g:netrw_sort_by =~ "^t" " sort by time (handles time up to 1 quintillion seconds, US) -" call Decho("(LocalListing) getftime(".filename.")=".getftime(filename)) +" call Decho("getftime(".filename.")=".getftime(filename)) let t = getftime(filename) let ft = strpart("000000000000000000",1,18-strlen(t)).t -" call Decho("(LocalListing) exe keepjumps put ='".ft.'/'.filename."'") +" call Decho("exe keepjumps put ='".ft.'/'.filename."'") let ftpfile= ft.'/'.pfile sil! keepj put=ftpfile elseif g:netrw_sort_by =~ "^s" " sort by size (handles file sizes up to 1 quintillion bytes, US) -" call Decho("(LocalListing) getfsize(".filename.")=".getfsize(filename)) +" call Decho("getfsize(".filename.")=".getfsize(filename)) let sz = getfsize(filename) let fsz = strpart("000000000000000000",1,18-strlen(sz)).sz -" call Decho("(LocalListing) exe keepj put ='".fsz.'/'.filename."'") +" call Decho("exe keepj put ='".fsz.'/'.filename."'") let fszpfile= fsz.'/'.pfile sil! keepj put =fszpfile else " sort by name -" call Decho("(LocalListing) exe keepjumps put ='".pfile."'") +" call Decho("exe keepjumps put ='".pfile."'") sil! keepj put=pfile endif endfor @@ -8622,138 +9470,13 @@ sil! keepj g/^$/d sil! keepj %s/\r$//e call histdel("/",-1) -" call Decho("(LocalListing) exe setl ts=".(g:netrw_maxfilenamelen+1)) +" call Decho("exe setl ts=".(g:netrw_maxfilenamelen+1)) exe "setl ts=".(g:netrw_maxfilenamelen+1) " call Dret("s:LocalListing") endfun " --------------------------------------------------------------------- -" s:LocalBrowseShellCmdRefresh: this function is called after a user has {{{2 -" performed any shell command. The idea is to cause all local-browsing -" buffers to be refreshed after a user has executed some shell command, -" on the chance that s/he removed/created a file/directory with it. -fun! s:LocalBrowseShellCmdRefresh() -" call Dfunc("LocalBrowseShellCmdRefresh() browselist=".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "empty")." ".tabpagenr("$")." tabs") - " determine which buffers currently reside in a tab - if !exists("s:netrw_browselist") -" call Dret("LocalBrowseShellCmdRefresh : browselist is empty") - return - endif - if !exists("w:netrw_bannercnt") -" call Dret("LocalBrowseShellCmdRefresh : don't refresh when focus not on netrw window") - return - endif - if exists("s:locbrowseshellcmd") - if s:locbrowseshellcmd - let s:locbrowseshellcmd= 0 -" call Dret("LocalBrowseShellCmdRefresh : NetrwBrowse itself caused the refresh") - return - endif - let s:locbrowseshellcmd= 0 - endif - let itab = 1 - let buftablist = [] - let ykeep = @@ - while itab <= tabpagenr("$") - let buftablist = buftablist + tabpagebuflist() - let itab = itab + 1 - tabn - endwhile -" call Decho("(LocalBrowseShellCmdRefresh) buftablist".string(buftablist)) -" call Decho("(LocalBrowseShellCmdRefresh) s:netrw_browselist<".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "").">") - " GO through all buffers on netrw_browselist (ie. just local-netrw buffers): - " | refresh any netrw window - " | wipe out any non-displaying netrw buffer - let curwin = winnr() - let ibl = 0 - for ibuf in s:netrw_browselist -" call Decho("(LocalBrowseShellCmdRefresh) bufwinnr(".ibuf.") index(buftablist,".ibuf.")=".index(buftablist,ibuf)) - if bufwinnr(ibuf) == -1 && index(buftablist,ibuf) == -1 - " wipe out any non-displaying netrw buffer -" call Decho("(LocalBrowseShellCmdRefresh) wiping buf#".ibuf,"<".bufname(ibuf).">") - exe "sil! bd ".fnameescape(ibuf) - call remove(s:netrw_browselist,ibl) -" call Decho("(LocalBrowseShellCmdRefresh) browselist=".string(s:netrw_browselist)) - continue - elseif index(tabpagebuflist(),ibuf) != -1 - " refresh any netrw buffer -" call Decho("(LocalBrowseShellCmdRefresh) refresh buf#".ibuf.'-> win#'.bufwinnr(ibuf)) - exe bufwinnr(ibuf)."wincmd w" - keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./')) - endif - let ibl= ibl + 1 - endfor - exe curwin."wincmd w" - let @@= ykeep - -" call Dret("LocalBrowseShellCmdRefresh") -endfun - -" --------------------------------------------------------------------- -" s:LocalFastBrowser: handles setting up/taking down fast browsing for the local browser {{{2 -" -" g:netrw_ Directory Is -" fastbrowse Local Remote -" slow 0 D D D=Deleting a buffer implies it will not be re-used (slow) -" med 1 D H H=Hiding a buffer implies it may be re-used (fast) -" fast 2 H H -" -" Deleting a buffer means that it will be re-loaded when examined, hence "slow". -" Hiding a buffer means that it will be re-used when examined, hence "fast". -" (re-using a buffer may not be as accurate) -fun! s:LocalFastBrowser() -" call Dfunc("LocalFastBrowser() g:netrw_fastbrowse=".g:netrw_fastbrowse." s:netrw_browser_shellcmd ".(exists("s:netrw_browser_shellcmd")? "exists" : "does not exist")) - - " initialize browselist, a list of buffer numbers that the local browser has used - if !exists("s:netrw_browselist") -" call Decho("(LocalFastBrowser) initialize s:netrw_browselist") - let s:netrw_browselist= [] - endif - - " append current buffer to fastbrowse list - if empty(s:netrw_browselist) || bufnr("%") > s:netrw_browselist[-1] -" call Decho("(LocalFastBrowser) appendng current buffer to browselist") - call add(s:netrw_browselist,bufnr("%")) -" call Decho("(LocalFastBrowser) browselist=".string(s:netrw_browselist)) - endif - - " enable autocmd events to handle refreshing/removing local browser buffers - " If local browse buffer is currently showing: refresh it - " If local browse buffer is currently hidden : wipe it - " g:netrw_fastbrowse=0 : slow speed, never re-use directory listing - " =1 : medium speed, re-use directory listing for remote only - " =2 : fast speed, always re-use directory listing when possible - if !exists("s:netrw_browser_shellcmd") && g:netrw_fastbrowse <= 1 -" call Decho("(LocalFastBrowser) setting up local-browser shell command refresh") - let s:netrw_browser_shellcmd= 1 - augroup AuNetrwShellCmd - au! - if (has("win32") || has("win95") || has("win64") || has("win16")) -" call Decho("(LocalFastBrowser) autocmd: ShellCmdPost * call s:LocalBrowseShellCmdRefresh()") - au ShellCmdPost * call s:LocalBrowseShellCmdRefresh() - else - au ShellCmdPost,FocusGained * call s:LocalBrowseShellCmdRefresh() -" call Decho("(LocalFastBrowser) autocmd: ShellCmdPost,FocusGained * call s:LocalBrowseShellCmdRefresh()") - endif - augroup END - endif - - " user must have changed fastbrowse to its fast setting, so remove - " the associated autocmd events - if g:netrw_fastbrowse > 1 && exists("s:netrw_browser_shellcmd") -" call Decho("(LocalFastBrowser) remove AuNetrwShellCmd autcmd group") - unlet s:netrw_browser_shellcmd - augroup AuNetrwShellCmd - au! - augroup END - augroup! AuNetrwShellCmd - endif - -" call Dret("LocalFastBrowser : browselist<".string(s:netrw_browselist).">") -endfun - -" --------------------------------------------------------------------- " s:NetrwLocalExecute: uses system() to execute command under cursor ("X" command support) {{{2 fun! s:NetrwLocalExecute(cmd) " call Dfunc("s:NetrwLocalExecute(cmd<".a:cmd.">)") @@ -8769,7 +9492,7 @@ let optargs= input(":!".a:cmd,"","file") " call Decho("optargs<".optargs.">") let result= system(a:cmd.optargs) -" call Decho(result) +" call Decho("result) " strip any ansi escape sequences off let result = substitute(result,"\e\\[[0-9;]*m","","g") @@ -8789,7 +9512,7 @@ " preparation for removing multiple files/directories let ykeep = @@ let ctr = a:firstline - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() " rename files given by the markfilelist if exists("s:netrwmarkfilelist_{bufnr('%')}") @@ -8848,7 +9571,7 @@ " refresh the directory " call Decho("refresh the directory listing") keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) let @@= ykeep " call Dret("NetrwLocalRename") @@ -8864,7 +9587,7 @@ let ykeep = @@ let ret = 0 let all = 0 - let svpos = netrw#NetrwSavePosn() + let svpos = netrw#SavePosn() if exists("s:netrwmarkfilelist_{bufnr('%')}") " remove all marked files @@ -8911,7 +9634,7 @@ " call Decho("bufname<".bufname("%").">") if bufname("%") != "NetrwMessage" keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./')) - keepj call netrw#NetrwRestorePosn(svpos) + keepj call netrw#RestorePosn(svpos) endif let @@= ykeep @@ -9007,31 +9730,26 @@ " Support Functions: {{{1 " --------------------------------------------------------------------- -" netrw#WinPath: tries to insure that the path is windows-acceptable, whether cygwin is used or not {{{2 -fun! netrw#WinPath(path) -" call Dfunc("netrw#WinPath(path<".a:path.">)") - if (!g:netrw_cygwin || &shell !~ '\%(\\|\\)\%(\.exe\)\=$') && (has("win32") || has("win95") || has("win64") || has("win16")) - " remove cygdrive prefix, if present - let path = substitute(a:path,'/cygdrive/\(.\)','\1:','') - " remove trailing slash (Win95) - let path = substitute(path, '\(\\\|/\)$', '', 'g') - " remove escaped spaces - let path = substitute(path, '\ ', ' ', 'g') - " convert slashes to backslashes - let path = substitute(path, '/', '\', 'g') - else - let path= a:path - endif -" call Dret("netrw#WinPath <".path.">") - return path +" netrw#Access: intended to provide access to variable values for netrw's test suite {{{2 +" 0: marked file list of current buffer +" 1: marked file target +fun! netrw#Access(ilist) + if a:ilist == 0 + if exists("s:netrwmarkfilelist_".bufnr('%')) + return s:netrwmarkfilelist_{bufnr('%')} + else + return "no-list-buf#".bufnr('%') + endif + elseif a:ilist == 1 + return s:netrwmftgt endfun -" --------------------------------------------------------------------- -" netrw#NetrwRestorePosn: restores the cursor and file position as saved by NetrwSavePosn() {{{2 -fun! netrw#NetrwRestorePosn(...) -" call Dfunc("netrw#NetrwRestorePosn() a:0=".a:0." winnr=".(exists("w:netrw_winnr")? w:netrw_winnr : -1)." line=".(exists("w:netrw_line")? w:netrw_line : -1)." col=".(exists("w:netrw_col")? w:netrw_col : -1)." hline=".(exists("w:netrw_hline")? w:netrw_hline : -1)) +" ------------------------------------------------------------------------ +" netrw#RestorePosn: restores the cursor and file position as saved by NetrwSavePosn() {{{2 +fun! netrw#RestorePosn(...) +" call Dfunc("netrw#RestorePosn() a:0=".a:0." winnr=".(exists("w:netrw_winnr")? w:netrw_winnr : -1)." line=".(exists("w:netrw_line")? w:netrw_line : -1)." col=".(exists("w:netrw_col")? w:netrw_col : -1)." hline=".(exists("w:netrw_hline")? w:netrw_hline : -1)) let eikeep= &ei - set ei=all + setl ei=all if expand("%") == "NetrwMessage" if exists("s:winBeforeErr") exe s:winBeforeErr."wincmd w" @@ -9041,10 +9759,22 @@ if a:0 > 0 exe "keepj ".a:1 endif +" call Decho("a:1 = ".((a:0 > 0)? a:1 : 'n/a')) +" call Decho("liststyle = ".(exists("liststyle")? liststyle : 'n/a'). " w:netrw_liststyle=".(exists("w:netrw_liststyle")? w:netrw_liststyle : 'n/a')) + if exists("liststyle") && exists("w:netrw_liststyle") && liststyle != w:netrw_liststyle + let usesrch= 1 + else + let usesrch= 0 + endif + +" call Decho("winh = ".(exists("w:netrw_winh")? w:netrw_winh : -1)) +" call Decho("winw = ".(exists("w:netrw_winw")? w:netrw_winw : -1)) +" call Decho("cur winheight=".winheight(0)." winwidth=".winwidth(0)) +" call Decho("w:netrw_winfile = ".(exists("w:netrw_winfile")? w:netrw_winfile : 'n/a')) " restore window if exists("w:netrw_winnr") -" call Decho("(NetrwRestorePosn) restore window: exe sil! ".w:netrw_winnr."wincmd w") +" call Decho("restore window: exe sil! ".w:netrw_winnr."wincmd w") exe "sil! ".w:netrw_winnr."wincmd w" endif if v:shell_error == 0 @@ -9055,64 +9785,111 @@ " restore top-of-screen line if exists("w:netrw_hline") -" call Decho("(NetrwRestorePosn) restore topofscreen: exe keepj norm! ".w:netrw_hline."G0z") +" call Decho("restore topofscreen: exe keepj norm! ".w:netrw_hline."G0z") exe "keepj norm! ".w:netrw_hline."G0z\" endif " restore position - if exists("w:netrw_line") && exists("w:netrw_col") -" call Decho("(NetrwRestorePosn) restore posn: exe keepj norm! ".w:netrw_line."G0".w:netrw_col."|") + " when the window's height x width has changed, the line,col is no longer useful + if w:netrw_winh == winheight(0) && w:netrw_winw == winwidth(0) && exists("w:netrw_line") && exists("w:netrw_col") && !usesrch +" call Decho("using posn: exe keepj norm! ".w:netrw_line."G0".w:netrw_col."|") exe "keepj norm! ".w:netrw_line."G0".w:netrw_col."\" + + elseif exists("w:netrw_winfile") + if !search('\<'.escape(w:netrw_winfile,g:netrw_fname_escape),'cw') + if exists("w:netrw_bannercnt") +" call Decho("using bannercnt: win#".winnr()." ".winheight(0)."x".winwidth(0)." w:netrw_winfile<".w:netrw_winfile.">") + exe "keepj ".w:netrw_bannercnt + norm! 0 + else + " go to upper left corner +" call Decho("goto ulc: win#".winnr()." ".winheight(0)."x".winwidth(0)." w:netrw_winfile<".w:netrw_winfile.">") + keepj 1 + norm! 0 + endif + else +" call Decho("used search: w:netrw_winfile<".w:netrw_winfile.">") + endif + + else +" call Decho("goto ulc: win#".winnr()." ".winheight(0)."x".winwidth(0)) + keepj 1 + norm! 0 endif let &ei= eikeep -" call Dret("netrw#NetrwRestorePosn : line#".line(".")." col#".col(".")." winline#".winline()." wincol#".wincol()) +" call Dret("netrw#RestorePosn : line#".line(".")." col#".col(".")." winline#".winline()." wincol#".wincol()) +endfun + +" --------------------------------------------------------------------- +" netrw#RFC2396: converts %xx into characters {{{2 +fun! netrw#RFC2396(fname) +" call Dfunc("netrw#RFC2396(fname<".a:fname.">)") + let fname = escape(substitute(a:fname,'%\(\x\x\)','\=nr2char("0x".submatch(1))','ge')," \t") +" call Dret("netrw#RFC2396 ".fname) + return fname endfun " --------------------------------------------------------------------- -" netrw#NetrwSavePosn: saves position of cursor on screen {{{2 -fun! netrw#NetrwSavePosn() -" call Dfunc("netrw#NetrwSavePosn() line#".line(".")." col#".col(".")." winline#".winline()." wincol#".wincol()) +" netrw#SavePosn: saves position of cursor on screen {{{2 +fun! netrw#SavePosn() +" call Dfunc("netrw#SavePosn() line#".line(".")." col#".col(".")." winline#".winline()." wincol#".wincol()) " Save current line and column let w:netrw_winnr= winnr() let w:netrw_line = line(".") let w:netrw_col = virtcol(".") -" call Decho("(NetrwSavePosn) currently, win#".w:netrw_winnr." line#".w:netrw_line." col#".w:netrw_col) +" call Decho("currently, win#".w:netrw_winnr." line#".w:netrw_line." col#".w:netrw_col) + + " save filename under cursor +" call Decho("line#".line(".")." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'n/a')) + if exists("w:netrw_bannercnt") && line(".") >= w:netrw_bannercnt && &ft == "netrw" + let winfile = "|let w:netrw_winfile='".s:NetrwGetWord()."'" + else + let winfile= "" + endif +" call Decho("winfile<".winfile.">") + if exists("w:netrw_liststyle") + let liststyle = "|let liststyle=".w:netrw_liststyle + else + let liststyle= "" + endif +" call Decho("liststyle=".liststyle) " Save top-of-screen line keepj norm! H0 let w:netrw_hline= line(".") + " save up alternate position information + " use this when window height x width has changed + let w:netrw_winh = winheight(0) + let w:netrw_winw = winwidth(0) + " set up string holding position parameters - let ret = "let w:netrw_winnr=".w:netrw_winnr."|let w:netrw_line=".w:netrw_line."|let w:netrw_col=".w:netrw_col."|let w:netrw_hline=".w:netrw_hline + let ret = "let w:netrw_winnr=".w:netrw_winnr."|let w:netrw_line=".w:netrw_line."|let w:netrw_col=".w:netrw_col."|let w:netrw_hline=".w:netrw_hline."|let w:netrw_winh=".w:netrw_winh."|let w:netrw_winw=".w:netrw_winw.liststyle.winfile - keepj call netrw#NetrwRestorePosn() -" call Dret("netrw#NetrwSavePosn : winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline) + keepj call netrw#RestorePosn() +" call Dret("netrw#SavePosn : winnr=".(exists("w:netrw_winnr")? w:netrw_winnr : "n/a")." line=".(exists("w:netrw_line")? w:netrw_line : "n/a")." col=".(exists("w:netrw_col")? w:netrw_col : "n/a")." hline=".(exists("w:netrw_hline")? w:netrw_hline : "n/a")) return ret endfun " --------------------------------------------------------------------- -" netrw#NetrwAccess: intended to provide access to variable values for netrw's test suite {{{2 -" 0: marked file list of current buffer -" 1: marked file target -fun! netrw#NetrwAccess(ilist) - if a:ilist == 0 - if exists("s:netrwmarkfilelist_".bufnr('%')) - return s:netrwmarkfilelist_{bufnr('%')} - else - return "no-list-buf#".bufnr('%') - endif - elseif a:ilist == 1 - return s:netrwmftgt -endfun - -" ------------------------------------------------------------------------ -" netrw#RFC2396: converts %xx into characters {{{2 -fun! netrw#RFC2396(fname) -" call Dfunc("netrw#RFC2396(fname<".a:fname.">)") - let fname = escape(substitute(a:fname,'%\(\x\x\)','\=nr2char("0x".submatch(1))','ge')," \t") -" call Dret("netrw#RFC2396 ".fname) - return fname +" netrw#WinPath: tries to insure that the path is windows-acceptable, whether cygwin is used or not {{{2 +fun! netrw#WinPath(path) +" call Dfunc("netrw#WinPath(path<".a:path.">)") + if (!g:netrw_cygwin || &shell !~ '\%(\\|\\)\%(\.exe\)\=$') && (has("win32") || has("win95") || has("win64") || has("win16")) + " remove cygdrive prefix, if present + let path = substitute(a:path,g:netrw_cygdrive.'/\(.\)','\1:','') + " remove trailing slash (Win95) + let path = substitute(path, '\(\\\|/\)$', '', 'g') + " remove escaped spaces + let path = substitute(path, '\ ', ' ', 'g') + " convert slashes to backslashes + let path = substitute(path, '/', '\', 'g') + else + let path= a:path + endif +" call Dret("netrw#WinPath <".path.">") + return path endfun " --------------------------------------------------------------------- @@ -9179,7 +9956,7 @@ " call Dfunc("s:FileReadable(fname<".a:fname.">)") if g:netrw_cygwin - let ret= filereadable(substitute(a:fname,'/cygdrive/\(.\)','\1:/','')) + let ret= filereadable(substitute(a:fname,g:netrw_cygdrive.'/\(.\)','\1:/','')) else let ret= filereadable(a:fname) endif @@ -9205,7 +9982,7 @@ " sanity check -- does the temporary file's directory exist? if !isdirectory(substitute(tmpfile,'[^/]\+$','','e')) -" call Decho("(GetTempfile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") keepj call netrw#ErrorMsg(s:ERROR,"your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!",2) " call Dret("s:GetTempfile getcwd<".getcwd().">") return "" @@ -9217,7 +9994,7 @@ " o/s dependencies if g:netrw_cygwin != 0 - let tmpfile = substitute(tmpfile,'^\(\a\):','/cygdrive/\1','e') + let tmpfile = substitute(tmpfile,'^\(\a\):',g:netrw_cygdrive.'/\1','e') elseif has("win32") || has("win95") || has("win64") || has("win16") if !exists("+shellslash") || !&ssl let tmpfile = substitute(tmpfile,'/','\','g') @@ -9253,7 +10030,7 @@ endif endif -" call Decho("(GetTempFile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") " call Dret("s:GetTempfile <".tmpfile.">") return tmpfile endfun @@ -9263,7 +10040,11 @@ " a correct command for use with a system() call fun! s:MakeSshCmd(sshcmd) " call Dfunc("s:MakeSshCmd(sshcmd<".a:sshcmd.">) user<".s:user."> machine<".s:machine.">") - let sshcmd = substitute(a:sshcmd,'\',s:user.s:machine,'') + if s:user == "" + let sshcmd = substitute(a:sshcmd,'\',s:machine,'') + else + let sshcmd = substitute(a:sshcmd,'\',s:user."@".s:machine,'') + endif if exists("g:netrw_port") && g:netrw_port != "" let sshcmd= substitute(sshcmd,"USEPORT",g:netrw_sshport.' '.g:netrw_port,'') elseif exists("s:port") && s:port != "" @@ -9342,7 +10123,7 @@ let &l:cursorcolumn = s:netrw_usercuc if w:netrw_liststyle == s:WIDELIST " call Decho("case g:netrw_cursor==2 and wide: setl cul (use user's cuc)") - set cursorline + setl cursorline else " call Decho("case g:netrw_cursor==2 and not wide: (use user's cul,cuc)") let &l:cursorline = s:netrw_usercul @@ -9361,7 +10142,7 @@ " --------------------------------------------------------------------- " s:RestoreCursorline: restores cursorline/cursorcolumn to original user settings {{{2 fun! s:RestoreCursorline() -" call Dfunc("s:RestoreCursorline() currently, cul=".&l:cursorline." cuc=".&l:cursorcolumn." win#".winnr()." buf#".bufnr("%")." mod=".&mod) +" call Dfunc("s:RestoreCursorline() currently, cul=".&l:cursorline." cuc=".&l:cursorcolumn." win#".winnr()." buf#".bufnr("%")) if exists("s:netrw_usercul") let &l:cursorline = s:netrw_usercul endif @@ -9430,9 +10211,9 @@ keepj call s:NetrwOptionRestore("w:") " call Decho("generate a buffer with keepjumps keepalt enew!") let netrw_keepdiff= &l:diff - keepj keepalt enew! + noswapfile keepj keepalt enew! let &l:diff= netrw_keepdiff -" call Decho("bufnr($)=".bufnr("$")) +" call Decho("bufnr($)=".bufnr("$")." winnr($)=".winnr("$")) keepj call s:NetrwOptionSave("w:") " copy function-local-variables to buffer variable equivalents @@ -9459,7 +10240,7 @@ if b:netrw_curdir =~ '/$' if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST file NetrwTreeListing - set bt=nowrite noswf bh=hide + setl bt=nowrite noswf bh=hide nno [ :sil call TreeListMove('[') nno ] :sil call TreeListMove(']') else @@ -9468,7 +10249,7 @@ endif endif -" call Dret("s:NetrwEnew : buf#".bufnr("%")."<".bufname("%")."> expand(%)<".expand("%")."> expand(#)<".expand("#")."> bh=".&bh) +" call Dret("s:NetrwEnew : buf#".bufnr("%")."<".bufname("%")."> expand(%)<".expand("%")."> expand(#)<".expand("#")."> bh=".&bh." win#".winnr()." winnr($)#".winnr("$")) endfun " --------------------------------------------------------------------- @@ -9499,6 +10280,43 @@ " call Dret("s:NetrwInsureWinVars win#".winnr()) endfun +" --------------------------------------------------------------------- +" s:NetrwLcd: handles changing the (local) directory {{{2 +fun! s:NetrwLcd(newdir) +" call Dfunc("s:NetrwLcd(newdir<".a:newdir.">)") + + try + exe 'keepj sil lcd '.fnameescape(a:newdir) + catch /^Vim\%((\a\+)\)\=:E344/ + " Vim's lcd fails with E344 when attempting to go above the 'root' of a Windows share. + " Therefore, detect if a Windows share is present, and if E344 occurs, just settle at + " 'root' (ie. '\'). The share name may start with either backslashes ('\\Foo') or + " forward slashes ('//Foo'), depending on whether backslashes have been converted to + " forward slashes by earlier code; so check for both. + if (has("win32") || has("win95") || has("win64") || has("win16")) && !g:netrw_cygwin + if a:newdir =~ '^\\\\\w\+' || a:newdir =~ '^//\w\+' + let dirname = '\' + exe 'keepj sil lcd '.fnameescape(dirname) + endif + endif + catch /^Vim\%((\a\+)\)\=:E472/ + call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".a:newdir."> (permissions?)",61) + if exists("w:netrw_prvdir") + let a:newdir= w:netrw_prvdir + else + call s:NetrwOptionRestore("w:") +" call Decho("setl noma nomod nowrap") + exe "setl ".g:netrw_bufsettings +" call Decho(" ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)") + let a:newdir= dirname +" call Dret("s:NetrwBrowse : reusing buffer#".(exists("bufnum")? bufnum : 'N/A')."<".dirname."> getcwd<".getcwd().">") + return + endif + endtry + +" call Dret("s:NetrwLcd") +endfun + " ------------------------------------------------------------------------ " s:NetrwSaveWordPosn: used to keep cursor on same word after refresh, {{{2 " changed sorting, etc. Also see s:NetrwRestoreWordPosn(). @@ -9537,13 +10355,19 @@ fun! s:RemotePathAnalysis(dirname) " call Dfunc("s:RemotePathAnalysis(a:dirname<".a:dirname.">)") - let dirpat = '^\(\w\{-}\)://\(\w\+@\)\=\([^/:#]\+\)\%([:#]\(\d\+\)\)\=/\(.*\)$' + " method :// user @ machine :port /path + let dirpat = '^\(\w\{-}\)://\(\(\w\+\)@\)\=\([^/:#]\+\)\%([:#]\(\d\+\)\)\=/\(.*\)$' let s:method = substitute(a:dirname,dirpat,'\1','') - let s:user = substitute(a:dirname,dirpat,'\2','') - let s:machine = substitute(a:dirname,dirpat,'\3','') - let s:port = substitute(a:dirname,dirpat,'\4','') - let s:path = substitute(a:dirname,dirpat,'\5','') - let s:fname = substitute(a:dirname,'^.*/\ze.','','') + let s:user = substitute(a:dirname,dirpat,'\3','') + let s:machine = substitute(a:dirname,dirpat,'\4','') + let s:port = substitute(a:dirname,dirpat,'\5','') + let s:path = substitute(a:dirname,dirpat,'\6','') + let s:fname = substitute(s:path,'^.*/\ze.','','') + if s:machine =~ '@' + let dirpat = '^\(.*\)@\(.\{-}\)$' + let s:user = s:user.'@'.substitute(s:machine,dirpat,'\1','') + let s:machine = substitute(s:machine,dirpat,'\2','') + endif " call Decho("set up s:method <".s:method .">") " call Decho("set up s:user <".s:user .">") @@ -9620,33 +10444,51 @@ return endif " call Dfunc("s:NetrwRexplore() w:netrw_rexlocal=".w:netrw_rexlocal." w:netrw_rexdir<".w:netrw_rexdir.">") +" call Decho("ft=".&ft." win#".winnr()." w:netrw_rexfile<".(exists("w:netrw_rexfile")? w:netrw_rexfile : 'n/a').">") + + if &ft == "netrw" && exists("w:netrw_rexfile") && w:netrw_rexfile != "" +" call Decho("in netrw buffer, will edit file<".w:netrw_rexfile.">") + exe "e ".w:netrw_rexfile + unlet w:netrw_rexfile +" call Dret("s:NetrwRexplore returning from netrw to buf#".bufnr("%")."<".bufname("%")."> (ft=".&ft.")") + return + endif + + " record current file so :Rex can return to it from netrw + let w:netrw_rexfile= expand("%") + if !exists("w:netrw_rexlocal") -" " call Dret("s:NetrwRexplore() w:netrw_rexlocal doesn't exist") +" call Dret("s:NetrwRexplore w:netrw_rexlocal doesn't exist (".&ft.")") return endif +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) if w:netrw_rexlocal keepj call netrw#LocalBrowseCheck(w:netrw_rexdir) else keepj call s:NetrwBrowse(0,w:netrw_rexdir) endif if exists("s:initbeval") - set beval + setl beval endif if exists("s:rexposn_".bufnr("%")) -" call Decho("(NetrwRexplore) restore posn, then unlet s:rexposn_".bufnr('%')) - keepj call netrw#NetrwRestorePosn(s:rexposn_{bufnr('%')}) +" call Decho("restore posn, then unlet s:rexposn_".bufnr('%')) + keepj call netrw#RestorePosn(s:rexposn_{bufnr('%')}) unlet s:rexposn_{bufnr('%')} else -" call Decho("(NetrwRexplore) s:rexposn_".bufnr('%')." doesn't exist") +" call Decho("s:rexposn_".bufnr('%')." doesn't exist") endif + if exists("s:explore_match") exe "2match netrwMarkFile /".s:explore_match."/" endif -" call Dret("s:NetrwRexplore") + +" call Decho("settings buf#".bufnr("%")."<".bufname("%").">: ".((&l:ma == 0)? "no" : "")."ma ".((&l:mod == 0)? "no" : "")."mod ".((&l:bl == 0)? "no" : "")."bl ".((&l:ro == 0)? "no" : "")."ro fo=".&l:fo) +" call Dret("s:NetrwRexplore : ft=".&ft) endfun " --------------------------------------------------------------------- -" s:SaveBufVars: {{{2 +" s:SaveBufVars: save selected b: variables to s: variables {{{2 +" use s:RestoreBufVars() to restore b: variables from s: variables fun! s:SaveBufVars() " call Dfunc("s:SaveBufVars() buf#".bufnr("%")) @@ -9717,42 +10559,48 @@ endfun " --------------------------------------------------------------------- -" s:Strlen: this function returns the length of a string, even if its {{{2 -" using multiple-byte characters. -" Solution from Nicolai Weibull, vim docs (:help strlen()), Tony Mechelynck, -" and a bit from me. -" if g:netrw_xstrlen is zero (default), then the builtin strlen() function is used. +" s:Strlen: this function returns the length of a string, even if its using multi-byte characters. {{{2 +" Solution from Nicolai Weibull, vim docs (:help strlen()), +" Tony Mechelynck, and my own invention. fun! s:Strlen(x) -" call Dfunc("s:Strlen(x<".a:x.">") - if g:netrw_xstrlen == 1 +" "" call Dfunc("s:Strlen(x<".a:x."> g:Align_xstrlen=".g:Align_xstrlen.")") + + if v:version >= 703 && exists("*strdisplaywidth") + let ret= strdisplaywidth(a:x) + + elseif type(g:Align_xstrlen) == 1 + " allow user to specify a function to compute the string length (ie. let g:Align_xstrlen="mystrlenfunc") + exe "let ret= ".g:Align_xstrlen."('".substitute(a:x,"'","''","g")."')" + + elseif g:Align_xstrlen == 1 " number of codepoints (Latin a + combining circumflex is two codepoints) " (comment from TM, solution from NW) let ret= strlen(substitute(a:x,'.','c','g')) - - elseif g:netrw_xstrlen == 2 - " number of spacing codepoints (Latin a + combining circumflex is one spacing + + elseif g:Align_xstrlen == 2 + " number of spacing codepoints (Latin a + combining circumflex is one spacing " codepoint; a hard tab is one; wide and narrow CJK are one each; etc.) " (comment from TM, solution from TM) - let ret=strlen(substitute(a:x, '.\Z', 'x', 'g')) - - elseif g:netrw_xstrlen == 3 - " virtual length (counting, for instance, tabs as anything between 1 and - " 'tabstop', wide CJK as 2 rather than 1, Arabic alif as zero when immediately + let ret=strlen(substitute(a:x, '.\Z', 'x', 'g')) + + elseif g:Align_xstrlen == 3 + " virtual length (counting, for instance, tabs as anything between 1 and + " 'tabstop', wide CJK as 2 rather than 1, Arabic alif as zero when immediately " preceded by lam, one otherwise, etc.) " (comment from TM, solution from me) - let modkeep= &mod - exe "keepj norm! o\" + let modkeep= &l:mod + exe "norm! o\" call setline(line("."),a:x) let ret= virtcol("$") - 1 - keepj d + d keepj norm! k - let &mod= modkeep - + let &l:mod= modkeep + else " at least give a decent default - let ret= strlen(a:x) + let ret= strlen(a:x) endif -" call Dret("s:Strlen ".ret) +" "" call Dret("s:Strlen ".ret) return ret endfun @@ -9764,7 +10612,7 @@ let prvline = (line(".") > 1)? getline(line(".")-1) : '' let nxtline = (line(".") < line("$"))? getline(line(".")+1) : '' let curindent= substitute(curline,'^\([| ]*\).\{-}$','\1','') - let indentm1 = substitute(curindent,'^| ','','') + let indentm1 = substitute(curindent,'^'.s:treedepthstring.' ','','') " call Decho("prvline <".prvline."> #".line(".")-1) " call Decho("curline <".curline."> #".line(".")) " call Decho("nxtline <".nxtline."> #".line(".")+1) @@ -9775,22 +10623,22 @@ " call Decho('regfile') if a:dir == '[' && prvline != '' keepj norm! 0 - let nl = search('^'.indentm1.'[^|]','bWe') " search backwards from regular file + let nl = search('^'.indentm1.'[^'.s:treedepthstring.']','bWe') " search backwards from regular file " call Decho("regfile srch back: ".nl) elseif a:dir == ']' && nxtline != '' keepj norm! $ - let nl = search('^'.indentm1.'[^|]','We') " search forwards from regular file + let nl = search('^'.indentm1.'[^'.s:treedepthstring.']','We') " search forwards from regular file " call Decho("regfile srch fwd: ".nl) endif elseif a:dir == '[' && prvline != '' keepj norm! 0 let curline= line(".") - let nl = search('^'.curindent.'[^|]','bWe') " search backwards From directory, same indentation + let nl = search('^'.curindent.'[^'.s:treedepthstring.']','bWe') " search backwards From directory, same indentation " call Decho("dir srch back ind: ".nl) if nl != 0 if line(".") == curline-1 - let nl= search('^'.indentm1.'[^|]','bWe') " search backwards from directory, indentation - 1 + let nl= search('^'.indentm1.'[^'.s:treedepthstring.']','bWe') " search backwards from directory, indentation - 1 " call Decho("dir srch back ind-1: ".nl) endif endif @@ -9798,11 +10646,11 @@ elseif a:dir == ']' && nxtline != '' keepj norm! $ let curline = line(".") - let nl = search('^'.curindent.'[^|]','We') " search forwards from directory, same indentation + let nl = search('^'.curindent.'[^'.s:treedepthstring.']','We') " search forwards from directory, same indentation " call Decho("dir srch fwd ind: ".nl) if nl != 0 if line(".") == curline+1 - let nl= search('^'.indentm1.'[^|]','We') " search forwards from directory, indentation - 1 + let nl= search('^'.indentm1.'[^'.s:treedepthstring.']','We') " search forwards from directory, indentation - 1 " call Decho("dir srch fwd ind-1: ".nl) endif endif diff -Naur vim74.orig/runtime/autoload/netrwSettings.vim vim74/runtime/autoload/netrwSettings.vim --- vim74.orig/runtime/autoload/netrwSettings.vim 2013-05-03 19:53:43.000000000 +0000 +++ vim74/runtime/autoload/netrwSettings.vim 2014-09-27 01:00:29.217179253 +0000 @@ -1,7 +1,7 @@ " netrwSettings.vim: makes netrw settings simpler -" Date: May 03, 2013 +" Date: Aug 27, 2013 " Maintainer: Charles E Campbell -" Version: 14a ASTRO-ONLY +" Version: 14 " Copyright: Copyright (C) 1999-2007 Charles E. Campbell {{{1 " Permission is hereby granted to use and distribute this code, " with or without modifications, provided that this copyright @@ -19,7 +19,7 @@ if exists("g:loaded_netrwSettings") || &cp finish endif -let g:loaded_netrwSettings = "v14a" +let g:loaded_netrwSettings = "v14" if v:version < 700 echohl WarningMsg echo "***warning*** this version of netrwSettings needs vim 7.0" @@ -98,6 +98,11 @@ put = '' put ='+ Netrw Browser Control' + if exists("g:netrw_altfile") + put = 'let g:netrw_altfile = '.g:netrw_altfile + else + put = 'let g:netrw_altfile = 0' + endif put = 'let g:netrw_alto = '.g:netrw_alto put = 'let g:netrw_altv = '.g:netrw_altv put = 'let g:netrw_banner = '.g:netrw_banner diff -Naur vim74.orig/runtime/autoload/netrw_gitignore.vim vim74/runtime/autoload/netrw_gitignore.vim --- vim74.orig/runtime/autoload/netrw_gitignore.vim 1970-01-01 00:00:00.000000000 +0000 +++ vim74/runtime/autoload/netrw_gitignore.vim 2014-09-27 01:00:29.217179253 +0000 @@ -0,0 +1,71 @@ +" netrw_gitignore#Hide: gitignore-based hiding +" Function returns a string of comma separated patterns convenient for +" assignment to `g:netrw_list_hide` option. +" Function can take additional filenames as arguments, example: +" netrw_gitignore#Hide('custom_gitignore1', 'custom_gitignore2') +" +" Usage examples: +" let g:netrw_list_hide = netrw_gitignore#Hide() +" let g:netrw_list_hide = netrw_gitignore#Hide() . 'more,hide,patterns' +" +" Copyright: Copyright (C) 2013 Bruno Sutic {{{1 +" Permission is hereby granted to use and distribute this code, +" with or without modifications, provided that this copyright +" notice is copied with it. Like anything else that's free, +" netrw_gitignore.vim is provided *as is* and comes with no +" warranty of any kind, either expressed or implied. By using +" this plugin, you agree that in no event will the copyright +" holder be liable for any damages resulting from the use +" of this software. +function! netrw_gitignore#Hide(...) + let additional_files = a:000 + + let default_files = ['.gitignore', '.git/info/exclude'] + + " get existing global/system gitignore files + let global_gitignore = expand(substitute(system("git config --global core.excludesfile"), '\n', '', 'g')) + if global_gitignore !=# '' + let default_files = add(default_files, global_gitignore) + endif + let system_gitignore = expand(substitute(system("git config --system core.excludesfile"), '\n', '', 'g')) + if system_gitignore !=# '' + let default_files = add(default_files, system_gitignore) + endif + + " append additional files if given as function arguments + if additional_files !=# [] + let files = extend(default_files, additional_files) + else + let files = default_files + endif + + " keep only existing/readable files + let gitignore_files = [] + for file in files + if filereadable(file) + let gitignore_files = add(gitignore_files, file) + endif + endfor + + " get contents of gitignore patterns from those files + let gitignore_lines = [] + for file in gitignore_files + for line in readfile(file) + " filter empty lines and comments + if line !~# '^#' && line !~# '^$' + let gitignore_lines = add(gitignore_lines, line) + endif + endfor + endfor + + " convert gitignore patterns to Netrw/Vim regex patterns + let escaped_lines = [] + for line in gitignore_lines + let escaped = line + let escaped = substitute(escaped, '\.', '\\.', 'g') + let escaped = substitute(escaped, '*', '.*', 'g') + let escaped_lines = add(escaped_lines, escaped) + endfor + + return join(escaped_lines, ',') +endfunction diff -Naur vim74.orig/runtime/autoload/phpcomplete.vim vim74/runtime/autoload/phpcomplete.vim --- vim74.orig/runtime/autoload/phpcomplete.vim 2011-12-08 15:38:25.000000000 +0000 +++ vim74/runtime/autoload/phpcomplete.vim 2014-09-27 01:00:29.230512553 +0000 @@ -1,28 +1,102 @@ " Vim completion script " Language: PHP -" Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) -" Last Change: 2011 Dec 08 +" Maintainer: Dávid Szabó ( complex857 AT gmail DOT com ) +" Previous Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) +" URL: https://github.com/shawncplus/phpcomplete.vim +" Last Change: 2014 Aug 10 " -" TODO: -" - Class aware completion: -" a) caching? -" - Switching to HTML (XML?) completion (SQL) inside of phpStrings -" - allow also for XML completion <- better do html_flavor for HTML -" completion -" - outside of getting parent tag may cause problems. Heh, even in -" perfect conditions GetLastOpenTag doesn't cooperate... Inside of -" phpStrings this can be even a bonus but outside of it is not the -" best situation +" OPTIONS: +" +" let g:phpcomplete_relax_static_constraint = 1/0 [default 0] +" Enables completion for non-static methods when completing for static context (::). +" This generates E_STRICT level warning, but php calls these methods nontheless. +" +" let g:phpcomplete_complete_for_unknown_classes = 1/0 [default 0] +" Enables completion of variables and functions in "everything under the sun" fashion +" when completing for an instance or static class context but the code can't tell the class +" or locate the file that it lives in. +" The completion list generated this way is only filtered by the completion base +" and generally not much more accurate then simple keyword completion. +" +" let g:phpcomplete_search_tags_for_variables = 1/0 [default 0] +" Enables use of tags when the plugin tries to find variables. +" When enabled the plugin will search for the variables in the tag files with kind 'v', +" lines like $some_var = new Foo; but these usually yield highly inaccurate results and +" can be fairly slow. +" +" let g:phpcomplete_min_num_of_chars_for_namespace_completion = n [default 1] +" This option controls the number of characters the user needs to type before +" the tags will be searched for namespaces and classes in typed out namespaces in +" "use ..." context. Setting this to 0 is not recommended because that means the code +" have to scan every tag, and vim's taglist() function runs extremly slow with a +" "match everything" pattern. +" +" let g:phpcomplete_parse_docblock_comments = 1/0 [default 0] +" When enabled the preview window's content will include information +" extracted from docblock comments of the completions. +" Enabling this option will add return types to the completion menu for functions too. +" +" let g:phpcomplete_cache_taglists = 1/0 [default 1] +" When enabled the taglist() lookups will be cached and subsequent searches +" for the same pattern will not check the tagfiles any more, thus making the +" lookups faster. Cache expiration is based on the mtimes of the tag files. +" +" TODO: +" - Switching to HTML (XML?) completion (SQL) inside of phpStrings +" - allow also for XML completion <- better do html_flavor for HTML +" completion +" - outside of getting parent tag may cause problems. Heh, even in +" perfect conditions GetLastOpenTag doesn't cooperate... Inside of +" phpStrings this can be even a bonus but outside of it is not the +" best situation + +if !exists('g:phpcomplete_relax_static_constraint') + let g:phpcomplete_relax_static_constraint = 0 +endif + +if !exists('g:phpcomplete_complete_for_unknown_classes') + let g:phpcomplete_complete_for_unknown_classes = 0 +endif + +if !exists('g:phpcomplete_search_tags_for_variables') + let g:phpcomplete_search_tags_for_variables = 0 +endif + +if !exists('g:phpcomplete_min_num_of_chars_for_namespace_completion') + let g:phpcomplete_min_num_of_chars_for_namespace_completion = 1 +endif + +if !exists('g:phpcomplete_parse_docblock_comments') + let g:phpcomplete_parse_docblock_comments = 0 +endif + +if !exists('g:phpcomplete_cache_taglists') + let g:phpcomplete_cache_taglists = 1 +endif + +if !exists('s:cache_classstructures') + let s:cache_classstructures = {} +endif + +if !exists('s:cache_tags') + let s:cache_tags = {} +endif + +if !exists('s:cache_tags_checksum') + let s:cache_tags_checksum = '' +endif + +let s:script_path = fnamemodify(resolve(expand(':p')), ':h') -function! phpcomplete#CompletePHP(findstart, base) +function! phpcomplete#CompletePHP(findstart, base) " {{{ if a:findstart unlet! b:php_menu " Check if we are inside of PHP markup let pos = getpos('.') let phpbegin = searchpairpos('', 'bWn', - \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\|comment"') - let phpend = searchpairpos('', 'Wn', - \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\|comment"') + \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"') + let phpend = searchpairpos('', 'Wn', + \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"') if phpbegin == [0,0] && phpend == [0,0] " We are outside of any PHP markup. Complete HTML @@ -35,5118 +109,2547 @@ " locate the start of the word let line = getline('.') let start = col('.') - 1 - let curline = line('.') let compl_begin = col('.') - 2 - while start >= 0 && line[start - 1] =~ '[a-zA-Z_0-9\x7f-\xff$]' + while start >= 0 && line[start - 1] =~ '[\\a-zA-Z_0-9\x7f-\xff$]' let start -= 1 endwhile - let b:compl_context = getline('.')[0:compl_begin] - return start + let b:phpbegin = phpbegin + let b:compl_context = phpcomplete#GetCurrentInstruction(line('.'), max([0, col('.') - 2]), phpbegin) + return start " We can be also inside of phpString with HTML tags. Deal with " it later (time, not lines). endif - endif + + " If exists b:php_menu it means completion was already constructed we " don't need to do anything more if exists("b:php_menu") return b:php_menu endif - " Initialize base return lists - let res = [] - let res2 = [] + + if !exists('g:php_builtin_functions') + call phpcomplete#LoadData() + endif + " a:base is very short - we need context if exists("b:compl_context") let context = b:compl_context unlet! b:compl_context - endif + " chop of the "base" from the end of the current instruction + if a:base != "" + let context = substitute(context, '\s*[$a-zA-Z_0-9\x7f-\xff]*$', '', '') + end + end - if !exists('g:php_builtin_functions') - call phpcomplete#LoadData() + let [current_namespace, imports] = phpcomplete#GetCurrentNameSpace(getline(0, line('.'))) + + if context =~? '^use\s' + return phpcomplete#CompleteUse(a:base) endif - let scontext = substitute(context, '\$\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*$', '', '') + if context =~ '\(->\|::\)$' + " {{{ + " Get name of the class + let classname = phpcomplete#GetClassName(line('.'), context, current_namespace, imports) + + " Get location of class definition, we have to iterate through all + if classname != '' + if classname =~ '\' + " split the last \ segment as a classname, everything else is the namespace + let classname_parts = split(classname, '\') + let namespace = join(classname_parts[0:-2], '\') + let classname = classname_parts[-1] + else + let namespace = '\' + endif + let classlocation = phpcomplete#GetClassLocation(classname, namespace) + else + let classlocation = '' + endif - if scontext =~ '\(=\s*new\|extends\)\s\+$' - " Complete class name - " Internal solution for finding classes in current file. - let file = getline(1, '$') - call filter(file, - \ 'v:val =~ "class\\s\\+[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("') - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - let jfile = join(file, ' ') - let int_values = split(jfile, 'class\s\+') - let int_classes = {} - for i in int_values - let c_name = matchstr(i, '^[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*') - if c_name != '' - let int_classes[c_name] = '' + if classlocation != '' + if classlocation == 'VIMPHP_BUILTINOBJECT' && has_key(g:php_builtin_classes, tolower(classname)) + return phpcomplete#CompleteBuiltInClass(context, classname, a:base) endif - endfor - " Prepare list of classes from tags file - let ext_classes = {} - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - if fnames != '' - exe 'silent! vimgrep /^'.a:base.'.*\tc\(\t\|$\)/j '.fnames - let qflist = getqflist() - if len(qflist) > 0 - for field in qflist - " [:space:] thing: we don't have to be so strict when - " dealing with tags files - entries there were already - " checked by ctags. - let item = matchstr(field['text'], '^[^[:space:]]\+') - let ext_classes[item] = '' - endfor + if filereadable(classlocation) + let classfile = readfile(classlocation) + let classcontent = '' + let classcontent .= "\n".phpcomplete#GetClassContents(classlocation, classname) + let sccontent = split(classcontent, "\n") + let visibility = expand('%:p') == fnamemodify(classlocation, ':p') ? 'private' : 'public' + + return phpcomplete#CompleteUserClass(context, a:base, sccontent, visibility) endif endif - " Prepare list of built in classes from g:php_builtin_functions - if !exists("g:php_omni_bi_classes") - let g:php_omni_bi_classes = {} - for i in keys(g:php_builtin_object_functions) - let g:php_omni_bi_classes[substitute(i, '::.*$', '', '')] = '' - endfor + return phpcomplete#CompleteUnknownClass(a:base, context) + " }}} + elseif context =~? 'implements' + return phpcomplete#CompleteClassName(a:base, ['i'], current_namespace, imports) + elseif context =~? 'extends\s\+.\+$' + return ['implements'] + elseif context =~? 'extends' + let kinds = context =~? 'class\s' ? ['c'] : ['i'] + return phpcomplete#CompleteClassName(a:base, kinds, current_namespace, imports) + elseif context =~? 'class [a-zA-Z_\x7f-\xff\\][a-zA-Z_0-9\x7f-\xff\\]*' + " special case when you've typed the class keyword and the name too, only extends and implements allowed there + return filter(['extends', 'implements'], 'stridx(v:val, a:base) == 0') + elseif context =~? 'new' + return phpcomplete#CompleteClassName(a:base, ['c'], current_namespace, imports) + endif + + if a:base =~ '^\$' + return phpcomplete#CompleteVariable(a:base) + else + return phpcomplete#CompleteGeneral(a:base, current_namespace, imports) + endif +endfunction +" }}} + +function! phpcomplete#CompleteUse(base) " {{{ + " completes builtin class names regadless of g:phpcomplete_min_num_of_chars_for_namespace_completion + " completes namespaces from tags + " * requires patched ctags + " completes classnames from tags within the already typed out namespace using the "namespace" field of tags + " * requires patched ctags + + let res = [] + + " class and namespace names are always considered absoltute in use ... expressions, leading slash is not recommended + " by the php manual, so we gonna get rid of that + if a:base =~? '^\' + let base = substitute(a:base, '^\', '', '') + else + let base = a:base + endif + + let namespace_match_pattern = substitute(base, '\\', '\\\\', 'g') + let classname_match_pattern = matchstr(base, '[^\\]\+$') + let namespace_for_class = substitute(substitute(namespace_match_pattern, '\\\\', '\\', 'g'), '\\*'.classname_match_pattern.'$', '', '') + + if len(namespace_match_pattern) >= g:phpcomplete_min_num_of_chars_for_namespace_completion + if len(classname_match_pattern) >= g:phpcomplete_min_num_of_chars_for_namespace_completion + let tags = phpcomplete#GetTaglist('^\('.namespace_match_pattern.'\|'.classname_match_pattern.'\)') + else + let tags = phpcomplete#GetTaglist('^'.namespace_match_pattern) endif - let classes = sort(keys(int_classes)) - let classes += sort(keys(ext_classes)) - let classes += sort(keys(g:php_omni_bi_classes)) - - for m in classes - if m =~ '^'.a:base - call add(res, m) + let patched_ctags_detected = 0 + let namespaced_matches = [] + let no_namespace_matches = [] + for tag in tags + if has_key(tag, 'namespace') + let patched_ctags_detected = 1 + endif + if tag.kind ==? 'n' && tag.name =~? '^'.namespace_match_pattern + let patched_ctags_detected = 1 + call add(namespaced_matches, {'word': tag.name, 'kind': 'n', 'menu': tag.filename, 'info': tag.filename }) + elseif has_key(tag, 'namespace') && (tag.kind ==? 'c' || tag.kind ==? 'i') && tag.namespace ==? namespace_for_class + call add(namespaced_matches, {'word': namespace_for_class.'\'.tag.name, 'kind': tag.kind, 'menu': tag.filename, 'info': tag.filename }) + elseif (tag.kind ==? 'c' || tag.kind ==? 'i') + call add(no_namespace_matches, {'word': namespace_for_class.'\'.tag.name, 'kind': tag.kind, 'menu': tag.filename, 'info': tag.filename }) endif endfor + " if it seems that the tags file have namespace informations we can safely throw + " away namespaceless tag matches since we can be sure they are invalid + if patched_ctags_detected + no_namespace_matches = [] + endif + let res += namespaced_matches + no_namespace_matches + endif - let final_menu = [] - for i in res - let final_menu += [{'word':i, 'kind':'c'}] + if base !~ '\' + let builtin_classnames = filter(keys(copy(g:php_builtin_classnames)), 'v:val =~? "^'.classname_match_pattern.'"') + for classname in builtin_classnames + call add(res, {'word': g:php_builtin_classes[tolower(classname)].name, 'kind': 'c'}) endfor + let builtin_interfacenames = filter(keys(copy(g:php_builtin_interfacenames)), 'v:val =~? "^'.classname_match_pattern.'"') + for interfacename in builtin_interfacenames + call add(res, {'word': g:php_builtin_interfaces[tolower(interfacename)].name, 'kind': 'i'}) + endfor + endif - return final_menu + return res +endfunction +" }}} - elseif scontext =~ '\(->\|::\)$' - " Complete user functions and variables - " Internal solution for current file. - " That seems as unnecessary repeating of functions but there are - " few not so subtle differences as not appending of $ and addition - " of 'kind' tag (not necessary in regular completion) - - if scontext =~ '->$' && scontext !~ '\$this->$' - - " Get name of the class - let classname = phpcomplete#GetClassName(scontext) - - " Get location of class definition, we have to iterate through all - " tags files separately because we need relative path from current - " file to the exact file (tags file can be in different dir) - if classname != '' - let classlocation = phpcomplete#GetClassLocation(classname) - else - let classlocation = '' - endif +function! phpcomplete#CompleteGeneral(base, current_namespace, imports) " {{{ + " Complete everything + " + functions, DONE + " + keywords of language DONE + " + defines (constant definitions), DONE + " + extend keywords for predefined constants, DONE + " + classes (after new), DONE + " + limit choice after -> and :: to funcs and vars DONE - if classlocation == 'VIMPHP_BUILTINOBJECT' + " Internal solution for finding functions in current file. - for object in keys(g:php_builtin_object_functions) - if object =~ '^'.classname - let res += [{'word':substitute(object, '.*::', '', ''), - \ 'info': g:php_builtin_object_functions[object]}] - endif - endfor + if a:base =~? '^\' + let leading_slash = '\' + else + let leading_slash = '' + endif - return res + let file = getline(1, '$') + call filter(file, + \ 'v:val =~ "function\\s\\+&\\?[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("') + let jfile = join(file, ' ') + let int_values = split(jfile, 'function\s\+') + let int_functions = {} + for i in int_values + let f_name = matchstr(i, + \ '^&\?\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') + if f_name =~? '^'.substitute(a:base, '\\', '\\\\', 'g') + let f_args = matchstr(i, + \ '^&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\zs.\{-}\ze)\_s*\({\|$\)') + let int_functions[f_name.'('] = f_args.')' + endif + endfor - endif + " Internal solution for finding constants in current file + let file = getline(1, '$') + call filter(file, 'v:val =~ "define\\s*("') + let jfile = join(file, ' ') + let int_values = split(jfile, 'define\s*(\s*') + let int_constants = {} + for i in int_values + let c_name = matchstr(i, '\(["'']\)\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze\1') + if c_name != '' && c_name =~# '^'.substitute(a:base, '\\', '\\\\', 'g') + let int_constants[leading_slash.c_name] = '' + endif + endfor - if filereadable(classlocation) - let classfile = readfile(classlocation) - let classcontent = '' - let classcontent .= "\n".phpcomplete#GetClassContents(classfile, classname) - let sccontent = split(classcontent, "\n") + " Prepare list of functions from tags file + let ext_functions = {} + let ext_constants = {} + let ext_classes = {} + let ext_interfaces = {} + let ext_namespaces = {} + + let base = substitute(a:base, '^\\', '', '') + let [tag_match_pattern, namespace_for_tag] = phpcomplete#ExpandClassName(a:base, a:current_namespace, a:imports) + let namespace_match_pattern = substitute((namespace_for_tag == '' ? '' : namespace_for_tag.'\').tag_match_pattern, '\\', '\\\\', 'g') + + let tags = [] + if len(namespace_match_pattern) >= g:phpcomplete_min_num_of_chars_for_namespace_completion && len(tag_match_pattern) >= g:phpcomplete_min_num_of_chars_for_namespace_completion && tag_match_pattern != namespace_match_pattern + let tags = phpcomplete#GetTaglist('\c^\('.tag_match_pattern.'\|'.namespace_match_pattern.'\)') + elseif len(namespace_match_pattern) >= g:phpcomplete_min_num_of_chars_for_namespace_completion + let tags = phpcomplete#GetTaglist('\c^'.namespace_match_pattern) + elseif len(tag_match_pattern) >= g:phpcomplete_min_num_of_chars_for_namespace_completion + let tags = phpcomplete#GetTaglist('\c^'.tag_match_pattern) + endif - " YES, YES, YES! - we have whole content including extends! - " Now we need to get two elements: public functions and public - " vars - " NO, NO, NO! - third separate filtering looking for content - " :(, but all of them have differences. To squeeze them into - " one implementation would require many additional arguments - " and ifs. No good solution - " Functions declared with public keyword or without any - " keyword are public - let functions = filter(deepcopy(sccontent), - \ 'v:val =~ "^\\s*\\(static\\s\\+\\|public\\s\\+\\)*function"') - let jfuncs = join(functions, ' ') - let sfuncs = split(jfuncs, 'function\s\+') - let c_functions = {} - for i in sfuncs - let f_name = matchstr(i, - \ '^&\?\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') - let f_args = matchstr(i, - \ '^&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\zs.\{-}\ze)\_s*{') - if f_name != '' - let c_functions[f_name.'('] = f_args - endif - endfor - " Variables declared with var or with public keyword are - " public - let variables = filter(deepcopy(sccontent), - \ 'v:val =~ "^\\s*\\(public\\|var\\)\\s\\+\\$"') - let jvars = join(variables, ' ') - let svars = split(jvars, '\$') - let c_variables = {} - for i in svars - let c_var = matchstr(i, - \ '^\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') - if c_var != '' - let c_variables[c_var] = '' - endif - endfor + for tag in tags + if !has_key(tag, 'namespace') || tag.namespace ==? a:current_namespace || tag.namespace ==? namespace_for_tag + if has_key(tag, 'namespace') + let full_name = tag.namespace.'\'.tag.name " absolute namespaced name (without leading '\') + + let base_parts = split(a:base, '\') + if len(base_parts) > 1 + let namespace_part = join(base_parts[0:-2], '\') + else + let namespace_part = '' + endif + let relative_name = (namespace_part == '' ? '' : namespace_part.'\').tag.name + endif - let all_values = {} - call extend(all_values, c_functions) - call extend(all_values, c_variables) - - for m in sort(keys(all_values)) - if m =~ '^'.a:base && m !~ '::' - call add(res, m) - elseif m =~ '::'.a:base - call add(res2, m) + if tag.kind ==? 'n' && tag.name =~? '^'.namespace_match_pattern + let info = tag.name.' - '.tag.filename + " patched ctag provides absolute namespace names as tag name, namespace tags dont have namespace fields + let full_name = tag.name + + let base_parts = split(a:base, '\') + let full_name_parts = split(full_name, '\') + if len(base_parts) > 1 + " the first segment could be a renamed import, take the first segment from the user provided input + " so if it's a sub namespace of a renamed namespace, just use the typed in segments in place of the absolute path + " for example: + " you have a namespace NS1\SUBNS as SUB + " you have a sub-sub-namespace NS1\SUBNS\SUBSUB + " typed in SUB\SU + " the tags will return NS1\SUBNS\SUBSUB + " the completion should be: SUB\SUBSUB by replacing the NS1\SUBSN to SUB as in the import + if has_key(a:imports, base_parts[0]) && a:imports[base_parts[0]].kind == 'n' + let import = a:imports[base_parts[0]] + let relative_name = substitute(full_name, '^'.substitute(import.name, '\\', '\\\\', 'g'), base_parts[0], '') + else + let relative_name = strpart(full_name, stridx(full_name, a:base)) endif - endfor + else + let relative_name = strpart(full_name, stridx(full_name, a:base)) + endif - let start_list = res + res2 + if leading_slash == '' + let ext_namespaces[relative_name.'\'] = info + else + let ext_namespaces['\'.full_name.'\'] = info + endif + elseif tag.kind ==? 'f' && !has_key(tag, 'class') " class related functions (methods) completed elsewhere, only works with patched ctags + if has_key(tag, 'signature') + let prototype = tag.signature[1:-2] " drop the ()s around the string + else + let prototype = matchstr(tag.cmd, + \ 'function\s\+&\?[^[:space:]]\+\s*(\s*\zs.\{-}\ze\s*)\s*{\?') + endif + let info = prototype.') - '.tag.filename - let final_list = [] - for i in start_list - if has_key(c_variables, i) - let class = ' ' - if all_values[i] != '' - let class = i.' class ' + if !has_key(tag, 'namespace') + let ext_functions[tag.name.'('] = info + else + if tag.namespace ==? namespace_for_tag + if leading_slash == '' + let ext_functions[relative_name.'('] = info + else + let ext_functions['\'.full_name.'('] = info endif - let final_list += - \ [{'word':i, - \ 'info':class.all_values[i], - \ 'kind':'v'}] - else - let final_list += - \ [{'word':substitute(i, '.*::', '', ''), - \ 'info':i.all_values[i].')', - \ 'kind':'f'}] endif - endfor + endif + elseif tag.kind ==? 'd' + let info = ' - '.tag.filename + if !has_key(tag, 'namespace') + let ext_constants[tag.name] = info + else + if tag.namespace ==? namespace_for_tag + if leading_slash == '' + let ext_constants[relative_name] = info + else + let ext_constants['\'.full_name] = info + endif + endif + endif + elseif tag.kind ==? 'c' || tag.kind ==? 'i' + let info = ' - '.tag.filename - return final_list + let key = '' + if !has_key(tag, 'namespace') + let key = tag.name + else + if tag.namespace ==? namespace_for_tag + if leading_slash == '' + let key = relative_name + else + let key = '\'.full_name + endif + endif + endif + if key != '' + if tag.kind ==? 'c' + let ext_classes[key] = info + elseif tag.kind ==? 'i' + let ext_interfaces[key] = info + endif + endif endif - endif + endfor - if a:base =~ '^\$' - let adddollar = '$' - else - let adddollar = '' - endif - let file = getline(1, '$') - let jfile = join(file, ' ') - let sfile = split(jfile, '\$') - let int_vars = {} - for i in sfile - if i =~ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*=\s*new' - let val = matchstr(i, '^[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*').'->' - else - let val = matchstr(i, '^[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*') - endif - if val !~ '' - let int_vars[adddollar.val] = '' + let builtin_constants = {} + let builtin_classnames = {} + let builtin_interfaces = {} + let builtin_functions = {} + let builtin_keywords = {} + let base = substitute(a:base, '^\', '', '') + if a:current_namespace == '\' || (a:base =~ '^\\' && a:base =~ '^\\[^\\]*$') + + " Add builtin class names + for [classname, info] in items(g:php_builtin_classnames) + if classname =~? '^'.base + let builtin_classnames[leading_slash.g:php_builtin_classes[tolower(classname)].name] = info endif endfor - - " ctags has good support for PHP, use tags file for external - " variables - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - let ext_vars = {} - if fnames != '' - let sbase = substitute(a:base, '^\$', '', '') - exe 'silent! vimgrep /^'.sbase.'.*\tv\(\t\|$\)/j '.fnames - let qflist = getqflist() - if len(qflist) > 0 - for field in qflist - let item = matchstr(field['text'], '^[^[:space:]]\+') - " Add -> if it is possible object declaration - let classname = '' - if field['text'] =~ item.'\s*=\s*new\s\+' - let item = item.'->' - let classname = matchstr(field['text'], - \ '=\s*new\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze') - endif - let ext_vars[adddollar.item] = classname - endfor + for [interfacename, info] in items(g:php_builtin_interfacenames) + if interfacename =~? '^'.base + let builtin_interfaces[leading_slash.interfacename] = info endif - endif - - " Now we have all variables in int_vars dictionary - call extend(int_vars, ext_vars) - - " Internal solution for finding functions in current file. - let file = getline(1, '$') - call filter(file, - \ 'v:val =~ "function\\s\\+&\\?[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("') - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - let jfile = join(file, ' ') - let int_values = split(jfile, 'function\s\+') - let int_functions = {} - for i in int_values - let f_name = matchstr(i, - \ '^&\?\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') - let f_args = matchstr(i, - \ '^&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\zs.\{-}\ze)\_s*{') - let int_functions[f_name.'('] = f_args.')' endfor + endif - " Prepare list of functions from tags file - let ext_functions = {} - if fnames != '' - exe 'silent! vimgrep /^'.a:base.'.*\tf\(\t\|$\)/j '.fnames - let qflist = getqflist() - if len(qflist) > 0 - for field in qflist - " File name - let item = matchstr(field['text'], '^[^[:space:]]\+') - let fname = matchstr(field['text'], '\t\zs\f\+\ze') - let prototype = matchstr(field['text'], - \ 'function\s\+&\?[^[:space:]]\+\s*(\s*\zs.\{-}\ze\s*)\s*{\?') - let ext_functions[item.'('] = prototype.') - '.fname - endfor - endif + " Prepare list of constants from built-in constants + for [constant, info] in items(g:php_constants) + if constant =~# '^'.base + let builtin_constants[leading_slash.constant] = info endif + endfor - let all_values = {} - call extend(all_values, int_functions) - call extend(all_values, ext_functions) - call extend(all_values, int_vars) " external variables are already in - call extend(all_values, g:php_builtin_object_functions) - - for m in sort(keys(all_values)) - if m =~ '\(^\|::\)'.a:base - call add(res, m) + if leading_slash == '' " keywords should not be completed when base starts with '\' + " Treat keywords as constants + for [constant, info] in items(g:php_keywords) + if constant =~? '^'.a:base + let builtin_keywords[constant] = info endif endfor + endif - let start_list = res + for [function_name, info] in items(g:php_builtin_functions) + if function_name =~? '^'.base + let builtin_functions[leading_slash.function_name] = info + endif + endfor - let final_list = [] - for i in start_list - if has_key(int_vars, i) - let class = ' ' - if all_values[i] != '' - let class = i.' class ' + " All constants + call extend(int_constants, ext_constants) + + " All functions + call extend(int_functions, ext_functions) + call extend(int_functions, builtin_functions) + + for [imported_name, import] in items(a:imports) + if imported_name =~? '^'.base + if import.kind ==? 'c' + if import.builtin + let builtin_classnames[imported_name] = ' '.import.name + else + let ext_classes[imported_name] = ' '.import.name.' - '.import.filename + endif + elseif import.kind ==? 'i' + if import.builtin + let builtin_interfaces[imported_name] = ' '.import.name + else + let ext_interfaces[imported_name] = ' '.import.name.' - '.import.filename endif - let final_list += [{'word':i, 'info':class.all_values[i], 'kind':'v'}] - else - let final_list += - \ [{'word':substitute(i, '.*::', '', ''), - \ 'info':i.all_values[i], - \ 'kind':'f'}] endif - endfor - return final_list - endif + " no builtin interfaces + if import.kind == 'n' + let ext_namespaces[imported_name.'\'] = ' '.import.name.' - '.import.filename + endif + end + endfor - if a:base =~ '^\$' - " Complete variables - " Built-in variables {{{ - let g:php_builtin_vars = {'$GLOBALS':'', - \ '$_SERVER':'', - \ '$_GET':'', - \ '$_POST':'', - \ '$_COOKIE':'', - \ '$_FILES':'', - \ '$_ENV':'', - \ '$_REQUEST':'', - \ '$_SESSION':'', - \ '$HTTP_SERVER_VARS':'', - \ '$HTTP_ENV_VARS':'', - \ '$HTTP_COOKIE_VARS':'', - \ '$HTTP_GET_VARS':'', - \ '$HTTP_POST_VARS':'', - \ '$HTTP_POST_FILES':'', - \ '$HTTP_SESSION_VARS':'', - \ '$php_errormsg':'', - \ '$this':'' - \ } - " }}} + let all_values = {} - " Internal solution for current file. - let file = getline(1, '$') - let jfile = join(file, ' ') - let int_vals = split(jfile, '\ze\$') - let int_vars = {} - for i in int_vals - if i =~ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*=\s*new' - let val = matchstr(i, - \ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*').'->' - else - let val = matchstr(i, - \ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*') - endif - if val != '' - let int_vars[val] = '' - endif - endfor + " Add functions found in this file + call extend(all_values, int_functions) - call extend(int_vars,g:php_builtin_vars) + " Add namespaces from tags + call extend(all_values, ext_namespaces) - " ctags has support for PHP, use tags file for external variables - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - let ext_vars = {} - if fnames != '' - let sbase = substitute(a:base, '^\$', '', '') - exe 'silent! vimgrep /^'.sbase.'.*\tv\(\t\|$\)/j '.fnames - let qflist = getqflist() - if len(qflist) > 0 - for field in qflist - let item = '$'.matchstr(field['text'], '^[^[:space:]]\+') - let m_menu = '' - " Add -> if it is possible object declaration - if field['text'] =~ item.'\s*=\s*new\s\+' - let item = item.'->' - let m_menu = matchstr(field['text'], - \ '=\s*new\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze') - endif - let ext_vars[item] = m_menu - endfor - endif - endif + " Add constants from the current file + call extend(all_values, int_constants) - call extend(int_vars, ext_vars) - let g:a0 = keys(int_vars) + " Add built-in constants + call extend(all_values, builtin_constants) - for m in sort(keys(int_vars)) - if m =~ '^\'.a:base - call add(res, m) - endif - endfor + " Add external classes + call extend(all_values, ext_classes) - let int_list = res + " Add external interfaces + call extend(all_values, ext_interfaces) - let int_dict = [] - for i in int_list - if int_vars[i] != '' - let class = ' ' - if int_vars[i] != '' - let class = i.' class ' - endif - let int_dict += [{'word':i, 'info':class.int_vars[i], 'kind':'v'}] - else - let int_dict += [{'word':i, 'kind':'v'}] - endif - endfor + " Add built-in classes + call extend(all_values, builtin_classnames) - return int_dict + " Add built-in interfaces + call extend(all_values, builtin_interfaces) - else - " Complete everything else - - " + functions, DONE - " + keywords of language DONE - " + defines (constant definitions), DONE - " + extend keywords for predefined constants, DONE - " + classes (after new), DONE - " + limit choice after -> and :: to funcs and vars DONE - - " Internal solution for finding functions in current file. - let file = getline(1, '$') - call filter(file, - \ 'v:val =~ "function\\s\\+&\\?[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("') - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - let jfile = join(file, ' ') - let int_values = split(jfile, 'function\s\+') - let int_functions = {} - for i in int_values - let f_name = matchstr(i, - \ '^&\?\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') - let f_args = matchstr(i, - \ '^&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\s*\zs.\{-}\ze\s*)\_s*{') - let int_functions[f_name.'('] = f_args.')' - endfor + " Add php keywords + call extend(all_values, builtin_keywords) - " Prepare list of functions from tags file - let ext_functions = {} - if fnames != '' - exe 'silent! vimgrep /^'.a:base.'.*\tf\(\t\|$\)/j '.fnames - let qflist = getqflist() - if len(qflist) > 0 - for field in qflist - " File name - let item = matchstr(field['text'], '^[^[:space:]]\+') - let fname = matchstr(field['text'], '\t\zs\f\+\ze') - let prototype = matchstr(field['text'], - \ 'function\s\+&\?[^[:space:]]\+\s*(\s*\zs.\{-}\ze\s*)\s*{\?') - let ext_functions[item.'('] = prototype.') - '.fname - endfor - endif + let final_list = [] + let int_list = sort(keys(all_values)) + for i in int_list + if has_key(ext_namespaces, i) + let final_list += [{'word':i, 'kind':'n', 'menu': ext_namespaces[i], 'info': ext_namespaces[i]}] + elseif has_key(int_functions, i) + let final_list += + \ [{'word':i, + \ 'info':i.int_functions[i], + \ 'menu':int_functions[i], + \ 'kind':'f'}] + elseif has_key(ext_classes, i) || has_key(builtin_classnames, i) + let info = has_key(ext_classes, i) ? ext_classes[i] : builtin_classnames[i].' - builtin' + let final_list += [{'word':i, 'kind': 'c', 'menu': info, 'info': i.info}] + elseif has_key(ext_interfaces, i) || has_key(builtin_interfaces, i) + let info = has_key(ext_interfaces, i) ? ext_interfaces[i] : builtin_interfaces[i].' - builtin' + let final_list += [{'word':i, 'kind': 'i', 'menu': info, 'info': i.info}] + elseif has_key(int_constants, i) || has_key(builtin_constants, i) + let info = has_key(int_constants, i) ? int_constants[i] : ' - builtin' + let final_list += [{'word':i, 'kind': 'd', 'menu': info, 'info': i.info}] + else + let final_list += [{'word':i}] endif + endfor - " All functions - call extend(int_functions, ext_functions) - call extend(int_functions, g:php_builtin_functions) - - " Internal solution for finding constants in current file - let file = getline(1, '$') - call filter(file, 'v:val =~ "define\\s*("') - let jfile = join(file, ' ') - let int_values = split(jfile, 'define\s*(\s*') - let int_constants = {} - for i in int_values - let c_name = matchstr(i, '\(["'']\)\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze\1') - " let c_value = matchstr(i, - " \ '\(["'']\)[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\1\s*,\s*\zs.\{-}\ze\s*)') - if c_name != '' - let int_constants[c_name] = '' " c_value - endif - endfor + return final_list +endfunction +" }}} - " Prepare list of constants from tags file - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - let ext_constants = {} - if fnames != '' - exe 'silent! vimgrep /^'.a:base.'.*\td\(\t\|$\)/j '.fnames - let qflist = getqflist() - if len(qflist) > 0 - for field in qflist - let item = matchstr(field['text'], '^[^[:space:]]\+') - let ext_constants[item] = '' - endfor - endif - endif +function! phpcomplete#CompleteUnknownClass(base, context) " {{{ + let res = [] - " All constants - call extend(int_constants, ext_constants) - " Treat keywords as constants + if g:phpcomplete_complete_for_unknown_classes != 1 + return [] + endif + + if a:base =~ '^\$' + let adddollar = '$' + else + let adddollar = '' + endif - let all_values = {} + let file = getline(1, '$') - " One big dictionary of functions - call extend(all_values, int_functions) + " Internal solution for finding object properties in current file. + if a:context =~ '::' + let variables = filter(deepcopy(file), + \ 'v:val =~ "^\\s*\\(static\\|static\\s\\+\\(public\\|var\\)\\|\\(public\\|var\\)\\s\\+static\\)\\s\\+\\$"') + elseif a:context =~ '->' + let variables = filter(deepcopy(file), + \ 'v:val =~ "^\\s*\\(public\\|var\\)\\s\\+\\$"') + endif + let jvars = join(variables, ' ') + let svars = split(jvars, '\$') + let int_vars = {} + for i in svars + let c_var = matchstr(i, + \ '^\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') + if c_var != '' + let int_vars[adddollar.c_var] = '' + endif + endfor - " Add constants - call extend(all_values, int_constants) - " Add keywords - call extend(all_values, g:php_keywords) - - for m in sort(keys(all_values)) - if m =~ '^'.a:base - call add(res, m) - endif - endfor + " Internal solution for finding functions in current file. + call filter(deepcopy(file), + \ 'v:val =~ "function\\s\\+&\\?[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*("') + let jfile = join(file, ' ') + let int_values = split(jfile, 'function\s\+') + let int_functions = {} + for i in int_values + let f_name = matchstr(i, + \ '^&\?\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') + let f_args = matchstr(i, + \ '^&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\zs.\{-}\ze)\_s*\({\|$\)') - let int_list = res + let int_functions[f_name.'('] = f_args.')' + endfor - let final_list = [] - for i in int_list - if has_key(int_functions, i) - let final_list += - \ [{'word':i, - \ 'info':i.int_functions[i], - \ 'kind':'f'}] - elseif has_key(int_constants, i) - let final_list += [{'word':i, 'kind':'d'}] + " collect external functions from tags + let ext_functions = {} + let tags = phpcomplete#GetTaglist('^'.substitute(a:base, '^\$', '', '')) + for tag in tags + if tag.kind ==? 'f' + let item = tag.name + if has_key(tag, 'signature') + let prototype = tag.signature[1:-2] else - let final_list += [{'word':i}] + let prototype = matchstr(tag.cmd, + \ 'function\s\+&\?[^[:space:]]\+\s*(\s*\zs.\{-}\ze\s*)\s*{\?') endif - endfor + let ext_functions[item.'('] = prototype.') - '.tag['filename'] + endif + endfor - return final_list + " All functions to one hash for later reference when deciding kind + call extend(int_functions, ext_functions) - endif + let all_values = {} + call extend(all_values, int_functions) + call extend(all_values, int_vars) " external variables are already in + call extend(all_values, g:php_builtin_object_functions) + + for m in sort(keys(all_values)) + if m =~ '\(^\|::\)'.a:base + call add(res, m) + endif + endfor + let start_list = res + + let final_list = [] + for i in start_list + if has_key(int_vars, i) + let class = ' ' + if all_values[i] != '' + let class = i.' class ' + endif + let final_list += [{'word':i, 'info':class.all_values[i], 'kind':'v'}] + else + let final_list += + \ [{'word':substitute(i, '.*::', '', ''), + \ 'info':i.all_values[i], + \ 'menu':all_values[i], + \ 'kind':'f'}] + endif + endfor + return final_list endfunction +" }}} -function! phpcomplete#GetClassName(scontext) " {{{ - " Get class name - " Class name can be detected in few ways: - " @var $myVar class - " line above - " or line in tags file +function! phpcomplete#CompleteVariable(base) " {{{ + let res = [] - let object = matchstr(a:scontext, '\zs[a-zA-Z_0-9\x7f-\xff]\+\ze->') - let i = 1 - while i < line('.') - let line = getline(line('.')-i) - if line =~ '^\s*\*\/\?\s*$' - let i += 1 - continue + " Internal solution for current file. + let file = getline(1, '$') + let jfile = join(file, ' ') + let int_vals = split(jfile, '\ze\$') + let int_vars = {} + for i in int_vals + if i =~? '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*=\s*new' + let val = matchstr(i, + \ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*') else - if line =~ '@var\s\+\$'.object.'\s\+[a-zA-Z_0-9\x7f-\xff]\+' - let classname = matchstr(line, '@var\s\+\$'.object.'\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+') - return classname - else - break - endif + let val = matchstr(i, + \ '^\$[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*') endif - endwhile + if val != '' + let int_vars[val] = '' + endif + endfor - " OK, first way failed, now check tags file(s) - let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) - exe 'silent! vimgrep /^'.object.'.*\$'.object.'.*=\s*new\s\+.*\tv\(\t\|$\)/j '.fnames - let qflist = getqflist() - if len(qflist) == 0 - return '' - else - " In all properly managed projects it should be one item list, even if it - " *is* longer we cannot solve conflicts, assume it is first element - let classname = matchstr(qflist[0]['text'], '=\s*new\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze') - return classname - endif + call extend(int_vars, g:php_builtin_vars) -endfunction -" }}} -function! phpcomplete#GetClassLocation(classname) " {{{ - " Check classname may be name of built in object - if !exists("g:php_omni_bi_classes") - let g:php_omni_bi_classes = {} - for i in keys(g:php_builtin_object_functions) - let g:php_omni_bi_classes[substitute(i, '::.*$', '', '')] = '' + " ctags has support for PHP, use tags file for external variables + if g:phpcomplete_search_tags_for_variables + let ext_vars = {} + let tags = phpcomplete#GetTaglist('\C^'.substitute(a:base, '^\$', '', '')) + for tag in tags + if tag.kind ==? 'v' + let item = tag.name + let m_menu = '' + if tag.cmd =~? tag['name'].'\s*=\s*new\s\+' + let m_menu = matchstr(tag.cmd, + \ '\c=\s*new\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze') + endif + let ext_vars['$'.item] = m_menu + endif endfor - endif - if has_key(g:php_omni_bi_classes, a:classname) - return 'VIMPHP_BUILTINOBJECT' + call extend(int_vars, ext_vars) endif - " Get class location - for fname in tagfiles() - let fhead = fnamemodify(fname, ":h") - if fhead != '' - let psep = '/' " Note: slash is potential problem! - let fhead .= psep - endif - let fname = escape(fname, " \\") - exe 'silent! vimgrep /^'.a:classname.'.*\tc\(\t\|$\)/j '.fname - let qflist = getqflist() - " As in GetClassName we can manage only one element if it exists - if len(qflist) > 0 - let classlocation = matchstr(qflist[0]['text'], '\t\zs\f\+\ze\t') - else - return '' + for m in sort(keys(int_vars)) + if m =~# '^\'.a:base + call add(res, m) endif - " And only one class location - if classlocation != '' - let classlocation = fhead.classlocation - return classlocation + endfor + + let int_list = res + + let int_dict = [] + for i in int_list + if int_vars[i] != '' + let class = ' ' + if int_vars[i] != '' + let class = i.' class ' + endif + let int_dict += [{'word':i, 'info':class.int_vars[i], 'menu':int_vars[i], 'kind':'v'}] else - return '' + let int_dict += [{'word':i, 'kind':'v'}] endif endfor + return int_dict endfunction " }}} -function! phpcomplete#GetClassContents(file, name) " {{{ - let cfile = join(a:file, "\n") - " We use new buffer and (later) normal! because - " this is the most efficient way. The other way - " is to go through the looong string looking for - " matching {} - let original_window = winnr() - below 1new - 0put =cfile - call search('class\s\+'.a:name) - let cfline = line('.') - " Catch extends - if getline('.') =~ 'extends' - let extends_class = matchstr(getline('.'), - \ 'class\s\+'.a:name.'\s\+extends\s\+\zs[a-zA-Z_0-9\x7f-\xff]\+\ze') +function! phpcomplete#CompleteClassName(base, kinds, current_namespace, imports) " {{{ + let kinds = sort(a:kinds) + " Complete class name + let res = [] + if a:base =~? '^\' + let leading_slash = '\' + let base = substitute(a:base, '^\', '', '') else - let extends_class = '' + let leading_slash = '' + let base = a:base endif - call search('{') - normal! % - let classc = getline(cfline, ".") - let classcontent = join(classc, "\n") - - bw! % - " go back to where we started - exe original_window.'wincmd w' - if extends_class != '' - let classlocation = phpcomplete#GetClassLocation(extends_class) - if filereadable(classlocation) - let classfile = readfile(classlocation) - let classcontent .= "\n".phpcomplete#GetClassContents(classfile, extends_class) - endif + " Internal solution for finding classes in current file. + let file = getline(1, '$') + let filterstr = '' + + if kinds == ['c', 'i'] + let filterstr = 'v:val =~? "\\(class\\|interface\\)\\s\\+[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*"' + elseif kinds == ['c'] + let filterstr = 'v:val =~? "class\\s\\+[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*"' + elseif kinds == ['i'] + let filterstr = 'v:val =~? "interface\\s\\+[a-zA-Z_\\x7f-\\xff][a-zA-Z_0-9\\x7f-\\xff]*\\s*"' endif - return classcontent -endfunction -" }}} + call filter(file, filterstr) -function! phpcomplete#LoadData() " {{{ -" Keywords/reserved words, all other special things {{{ -" Later it is possible to add some help to values, or type of -" defined variable -let g:php_keywords = { -\ 'PHP_SELF':'', -\ 'argv':'', -\ 'argc':'', -\ 'GATEWAY_INTERFACE':'', -\ 'SERVER_ADDR':'', -\ 'SERVER_NAME':'', -\ 'SERVER_SOFTWARE':'', -\ 'SERVER_PROTOCOL':'', -\ 'REQUEST_METHOD':'', -\ 'REQUEST_TIME':'', -\ 'QUERY_STRING':'', -\ 'DOCUMENT_ROOT':'', -\ 'HTTP_ACCEPT':'', -\ 'HTTP_ACCEPT_CHARSET':'', -\ 'HTTP_ACCEPT_ENCODING':'', -\ 'HTTP_ACCEPT_LANGUAGE':'', -\ 'HTTP_CONNECTION':'', -\ 'HTTP_POST':'', -\ 'HTTP_REFERER':'', -\ 'HTTP_USER_AGENT':'', -\ 'HTTPS':'', -\ 'REMOTE_ADDR':'', -\ 'REMOTE_HOST':'', -\ 'REMOTE_PORT':'', -\ 'SCRIPT_FILENAME':'', -\ 'SERVER_ADMIN':'', -\ 'SERVER_PORT':'', -\ 'SERVER_SIGNATURE':'', -\ 'PATH_TRANSLATED':'', -\ 'SCRIPT_NAME':'', -\ 'REQUEST_URI':'', -\ 'PHP_AUTH_DIGEST':'', -\ 'PHP_AUTH_USER':'', -\ 'PHP_AUTH_PW':'', -\ 'AUTH_TYPE':'', -\ 'and':'', -\ 'or':'', -\ 'xor':'', -\ '__FILE__':'', -\ 'exception':'', -\ '__LINE__':'', -\ 'as':'', -\ 'break':'', -\ 'case':'', -\ 'class':'', -\ 'const':'', -\ 'continue':'', -\ 'declare':'', -\ 'default':'', -\ 'do':'', -\ 'echo':'', -\ 'else':'', -\ 'elseif':'', -\ 'enddeclare':'', -\ 'endfor':'', -\ 'endforeach':'', -\ 'endif':'', -\ 'endswitch':'', -\ 'endwhile':'', -\ 'extends':'', -\ 'for':'', -\ 'foreach':'', -\ 'function':'', -\ 'global':'', -\ 'if':'', -\ 'new':'', -\ 'static':'', -\ 'switch':'', -\ 'use':'', -\ 'var':'', -\ 'while':'', -\ '__FUNCTION__':'', -\ '__CLASS__':'', -\ '__METHOD__':'', -\ 'final':'', -\ 'php_user_filter':'', -\ 'interface':'', -\ 'implements':'', -\ 'public':'', -\ 'private':'', -\ 'protected':'', -\ 'abstract':'', -\ 'clone':'', -\ 'try':'', -\ 'catch':'', -\ 'throw':'', -\ 'cfunction':'', -\ 'old_function':'', -\ 'this':'', -\ 'PHP_VERSION': '', -\ 'PHP_OS': '', -\ 'PHP_SAPI': '', -\ 'PHP_EOL': '', -\ 'PHP_INT_MAX': '', -\ 'PHP_INT_SIZE': '', -\ 'DEFAULT_INCLUDE_PATH': '', -\ 'PEAR_INSTALL_DIR': '', -\ 'PEAR_EXTENSION_DIR': '', -\ 'PHP_EXTENSION_DIR': '', -\ 'PHP_PREFIX': '', -\ 'PHP_BINDIR': '', -\ 'PHP_LIBDIR': '', -\ 'PHP_DATADIR': '', -\ 'PHP_SYSCONFDIR': '', -\ 'PHP_LOCALSTATEDIR': '', -\ 'PHP_CONFIG_FILE_PATH': '', -\ 'PHP_CONFIG_FILE_SCAN_DIR': '', -\ 'PHP_SHLIB_SUFFIX': '', -\ 'PHP_OUTPUT_HANDLER_START': '', -\ 'PHP_OUTPUT_HANDLER_CONT': '', -\ 'PHP_OUTPUT_HANDLER_END': '', -\ 'E_ERROR': '', -\ 'E_WARNING': '', -\ 'E_PARSE': '', -\ 'E_NOTICE': '', -\ 'E_CORE_ERROR': '', -\ 'E_CORE_WARNING': '', -\ 'E_COMPILE_ERROR': '', -\ 'E_COMPILE_WARNING': '', -\ 'E_USER_ERROR': '', -\ 'E_USER_WARNING': '', -\ 'E_USER_NOTICE': '', -\ 'E_ALL': '', -\ 'E_STRICT': '', -\ '__COMPILER_HALT_OFFSET__': '', -\ 'EXTR_OVERWRITE': '', -\ 'EXTR_SKIP': '', -\ 'EXTR_PREFIX_SAME': '', -\ 'EXTR_PREFIX_ALL': '', -\ 'EXTR_PREFIX_INVALID': '', -\ 'EXTR_PREFIX_IF_EXISTS': '', -\ 'EXTR_IF_EXISTS': '', -\ 'SORT_ASC': '', -\ 'SORT_DESC': '', -\ 'SORT_REGULAR': '', -\ 'SORT_NUMERIC': '', -\ 'SORT_STRING': '', -\ 'CASE_LOWER': '', -\ 'CASE_UPPER': '', -\ 'COUNT_NORMAL': '', -\ 'COUNT_RECURSIVE': '', -\ 'ASSERT_ACTIVE': '', -\ 'ASSERT_CALLBACK': '', -\ 'ASSERT_BAIL': '', -\ 'ASSERT_WARNING': '', -\ 'ASSERT_QUIET_EVAL': '', -\ 'CONNECTION_ABORTED': '', -\ 'CONNECTION_NORMAL': '', -\ 'CONNECTION_TIMEOUT': '', -\ 'INI_USER': '', -\ 'INI_PERDIR': '', -\ 'INI_SYSTEM': '', -\ 'INI_ALL': '', -\ 'M_E': '', -\ 'M_LOG2E': '', -\ 'M_LOG10E': '', -\ 'M_LN2': '', -\ 'M_LN10': '', -\ 'M_PI': '', -\ 'M_PI_2': '', -\ 'M_PI_4': '', -\ 'M_1_PI': '', -\ 'M_2_PI': '', -\ 'M_2_SQRTPI': '', -\ 'M_SQRT2': '', -\ 'M_SQRT1_2': '', -\ 'CRYPT_SALT_LENGTH': '', -\ 'CRYPT_STD_DES': '', -\ 'CRYPT_EXT_DES': '', -\ 'CRYPT_MD5': '', -\ 'CRYPT_BLOWFISH': '', -\ 'DIRECTORY_SEPARATOR': '', -\ 'SEEK_SET': '', -\ 'SEEK_CUR': '', -\ 'SEEK_END': '', -\ 'LOCK_SH': '', -\ 'LOCK_EX': '', -\ 'LOCK_UN': '', -\ 'LOCK_NB': '', -\ 'HTML_SPECIALCHARS': '', -\ 'HTML_ENTITIES': '', -\ 'ENT_COMPAT': '', -\ 'ENT_QUOTES': '', -\ 'ENT_NOQUOTES': '', -\ 'INFO_GENERAL': '', -\ 'INFO_CREDITS': '', -\ 'INFO_CONFIGURATION': '', -\ 'INFO_MODULES': '', -\ 'INFO_ENVIRONMENT': '', -\ 'INFO_VARIABLES': '', -\ 'INFO_LICENSE': '', -\ 'INFO_ALL': '', -\ 'CREDITS_GROUP': '', -\ 'CREDITS_GENERAL': '', -\ 'CREDITS_SAPI': '', -\ 'CREDITS_MODULES': '', -\ 'CREDITS_DOCS': '', -\ 'CREDITS_FULLPAGE': '', -\ 'CREDITS_QA': '', -\ 'CREDITS_ALL': '', -\ 'STR_PAD_LEFT': '', -\ 'STR_PAD_RIGHT': '', -\ 'STR_PAD_BOTH': '', -\ 'PATHINFO_DIRNAME': '', -\ 'PATHINFO_BASENAME': '', -\ 'PATHINFO_EXTENSION': '', -\ 'PATH_SEPARATOR': '', -\ 'CHAR_MAX': '', -\ 'LC_CTYPE': '', -\ 'LC_NUMERIC': '', -\ 'LC_TIME': '', -\ 'LC_COLLATE': '', -\ 'LC_MONETARY': '', -\ 'LC_ALL': '', -\ 'LC_MESSAGES': '', -\ 'ABDAY_1': '', -\ 'ABDAY_2': '', -\ 'ABDAY_3': '', -\ 'ABDAY_4': '', -\ 'ABDAY_5': '', -\ 'ABDAY_6': '', -\ 'ABDAY_7': '', -\ 'DAY_1': '', -\ 'DAY_2': '', -\ 'DAY_3': '', -\ 'DAY_4': '', -\ 'DAY_5': '', -\ 'DAY_6': '', -\ 'DAY_7': '', -\ 'ABMON_1': '', -\ 'ABMON_2': '', -\ 'ABMON_3': '', -\ 'ABMON_4': '', -\ 'ABMON_5': '', -\ 'ABMON_6': '', -\ 'ABMON_7': '', -\ 'ABMON_8': '', -\ 'ABMON_9': '', -\ 'ABMON_10': '', -\ 'ABMON_11': '', -\ 'ABMON_12': '', -\ 'MON_1': '', -\ 'MON_2': '', -\ 'MON_3': '', -\ 'MON_4': '', -\ 'MON_5': '', -\ 'MON_6': '', -\ 'MON_7': '', -\ 'MON_8': '', -\ 'MON_9': '', -\ 'MON_10': '', -\ 'MON_11': '', -\ 'MON_12': '', -\ 'AM_STR': '', -\ 'PM_STR': '', -\ 'D_T_FMT': '', -\ 'D_FMT': '', -\ 'T_FMT': '', -\ 'T_FMT_AMPM': '', -\ 'ERA': '', -\ 'ERA_YEAR': '', -\ 'ERA_D_T_FMT': '', -\ 'ERA_D_FMT': '', -\ 'ERA_T_FMT': '', -\ 'ALT_DIGITS': '', -\ 'INT_CURR_SYMBOL': '', -\ 'CURRENCY_SYMBOL': '', -\ 'CRNCYSTR': '', -\ 'MON_DECIMAL_POINT': '', -\ 'MON_THOUSANDS_SEP': '', -\ 'MON_GROUPING': '', -\ 'POSITIVE_SIGN': '', -\ 'NEGATIVE_SIGN': '', -\ 'INT_FRAC_DIGITS': '', -\ 'FRAC_DIGITS': '', -\ 'P_CS_PRECEDES': '', -\ 'P_SEP_BY_SPACE': '', -\ 'N_CS_PRECEDES': '', -\ 'N_SEP_BY_SPACE': '', -\ 'P_SIGN_POSN': '', -\ 'N_SIGN_POSN': '', -\ 'DECIMAL_POINT': '', -\ 'RADIXCHAR': '', -\ 'THOUSANDS_SEP': '', -\ 'THOUSEP': '', -\ 'GROUPING': '', -\ 'YESEXPR': '', -\ 'NOEXPR': '', -\ 'YESSTR': '', -\ 'NOSTR': '', -\ 'CODESET': '', -\ 'LOG_EMERG': '', -\ 'LOG_ALERT': '', -\ 'LOG_CRIT': '', -\ 'LOG_ERR': '', -\ 'LOG_WARNING': '', -\ 'LOG_NOTICE': '', -\ 'LOG_INFO': '', -\ 'LOG_DEBUG': '', -\ 'LOG_KERN': '', -\ 'LOG_USER': '', -\ 'LOG_MAIL': '', -\ 'LOG_DAEMON': '', -\ 'LOG_AUTH': '', -\ 'LOG_SYSLOG': '', -\ 'LOG_LPR': '', -\ 'LOG_NEWS': '', -\ 'LOG_UUCP': '', -\ 'LOG_CRON': '', -\ 'LOG_AUTHPRIV': '', -\ 'LOG_LOCAL0': '', -\ 'LOG_LOCAL1': '', -\ 'LOG_LOCAL2': '', -\ 'LOG_LOCAL3': '', -\ 'LOG_LOCAL4': '', -\ 'LOG_LOCAL5': '', -\ 'LOG_LOCAL6': '', -\ 'LOG_LOCAL7': '', -\ 'LOG_PID': '', -\ 'LOG_CONS': '', -\ 'LOG_ODELAY': '', -\ 'LOG_NDELAY': '', -\ 'LOG_NOWAIT': '', -\ 'LOG_PERROR': '', -\ } -" }}} -" PHP builtin functions {{{ -" To create from scratch list of functions: -" 1. Download multi html file PHP documentation -" 2. run for i in `ls | grep "^function\."`; do grep -A4 Description $i >> funcs; done -" 3. Open funcs in Vim and -" a) g/Description/normal! 5J -" b) remove all html tags (it will require few s/// and g//) -" c) :%s/^\([^[:space:]]\+\) \([^[:space:]]\+\) ( \(.*\))/\\ '\2(': '\3| \1', -" This will create Dictionary -" d) remove all /^[^\\] lines -let g:php_builtin_functions = { -\ 'abs(': 'mixed number | number', -\ 'acosh(': 'float arg | float', -\ 'acos(': 'float arg | float', -\ 'addcslashes(': 'string str, string charlist | string', -\ 'addslashes(': 'string str | string', -\ 'aggregate(': 'object object, string class_name | void', -\ 'aggregate_info(': 'object object | array', -\ 'aggregate_methods_by_list(': 'object object, string class_name, array methods_list [, bool exclude] | void', -\ 'aggregate_methods_by_regexp(': 'object object, string class_name, string regexp [, bool exclude] | void', -\ 'aggregate_methods(': 'object object, string class_name | void', -\ 'aggregate_properties_by_list(': 'object object, string class_name, array properties_list [, bool exclude] | void', -\ 'aggregate_properties_by_regexp(': 'object object, string class_name, string regexp [, bool exclude] | void', -\ 'aggregate_properties(': 'object object, string class_name | void', -\ 'apache_child_terminate(': 'void | bool', -\ 'apache_getenv(': 'string variable [, bool walk_to_top] | string', -\ 'apache_get_modules(': 'void | array', -\ 'apache_get_version(': 'void | string', -\ 'apache_lookup_uri(': 'string filename | object', -\ 'apache_note(': 'string note_name [, string note_value] | string', -\ 'apache_request_headers(': 'void | array', -\ 'apache_reset_timeout(': 'void | bool', -\ 'apache_response_headers(': 'void | array', -\ 'apache_setenv(': 'string variable, string value [, bool walk_to_top] | bool', -\ 'apc_cache_info(': '[string cache_type] | array', -\ 'apc_clear_cache(': '[string cache_type] | bool', -\ 'apc_define_constants(': 'string key, array constants [, bool case_sensitive] | bool', -\ 'apc_delete(': 'string key | bool', -\ 'apc_fetch(': 'string key | mixed', -\ 'apc_load_constants(': 'string key [, bool case_sensitive] | bool', -\ 'apc_sma_info(': 'void | array', -\ 'apc_store(': 'string key, mixed var [, int ttl] | bool', -\ 'apd_breakpoint(': 'int debug_level | bool', -\ 'apd_callstack(': 'void | array', -\ 'apd_clunk(': 'string warning [, string delimiter] | void', -\ 'apd_continue(': 'int debug_level | bool', -\ 'apd_croak(': 'string warning [, string delimiter] | void', -\ 'apd_dump_function_table(': 'void | void', -\ 'apd_dump_persistent_resources(': 'void | array', -\ 'apd_dump_regular_resources(': 'void | array', -\ 'apd_echo(': 'string output | bool', -\ 'apd_get_active_symbols(': ' | array', -\ 'apd_set_pprof_trace(': '[string dump_directory] | void', -\ 'apd_set_session(': 'int debug_level | void', -\ 'apd_set_session_trace(': 'int debug_level [, string dump_directory] | void', -\ 'apd_set_socket_session_trace(': 'string ip_address_or_unix_socket_file, int socket_type, int port, int debug_level | bool', -\ 'array_change_key_case(': 'array input [, int case] | array', -\ 'array_chunk(': 'array input, int size [, bool preserve_keys] | array', -\ 'array_combine(': 'array keys, array values | array', -\ 'array_count_values(': 'array input | array', -\ 'array_diff_assoc(': 'array array1, array array2 [, array ...] | array', -\ 'array_diff(': 'array array1, array array2 [, array ...] | array', -\ 'array_diff_key(': 'array array1, array array2 [, array ...] | array', -\ 'array_diff_uassoc(': 'array array1, array array2 [, array ..., callback key_compare_func] | array', -\ 'array_diff_ukey(': 'array array1, array array2 [, array ..., callback key_compare_func] | array', -\ 'array_fill(': 'int start_index, int num, mixed value | array', -\ 'array_filter(': 'array input [, callback callback] | array', -\ 'array_flip(': 'array trans | array', -\ 'array(': '[mixed ...] | array', -\ 'array_intersect_assoc(': 'array array1, array array2 [, array ...] | array', -\ 'array_intersect(': 'array array1, array array2 [, array ...] | array', -\ 'array_intersect_key(': 'array array1, array array2 [, array ...] | array', -\ 'array_intersect_uassoc(': 'array array1, array array2 [, array ..., callback key_compare_func] | array', -\ 'array_intersect_ukey(': 'array array1, array array2 [, array ..., callback key_compare_func] | array', -\ 'array_key_exists(': 'mixed key, array search | bool', -\ 'array_keys(': 'array input [, mixed search_value [, bool strict]] | array', -\ 'array_map(': 'callback callback, array arr1 [, array ...] | array', -\ 'array_merge(': 'array array1 [, array array2 [, array ...]] | array', -\ 'array_merge_recursive(': 'array array1 [, array ...] | array', -\ 'array_multisort(': 'array ar1 [, mixed arg [, mixed ... [, array ...]]] | bool', -\ 'array_pad(': 'array input, int pad_size, mixed pad_value | array', -\ 'array_pop(': 'array &array | mixed', -\ 'array_product(': 'array array | number', -\ 'array_push(': 'array &array, mixed var [, mixed ...] | int', -\ 'array_rand(': 'array input [, int num_req] | mixed', -\ 'array_reduce(': 'array input, callback function [, int initial] | mixed', -\ 'array_reverse(': 'array array [, bool preserve_keys] | array', -\ 'array_search(': 'mixed needle, array haystack [, bool strict] | mixed', -\ 'array_shift(': 'array &array | mixed', -\ 'array_slice(': 'array array, int offset [, int length [, bool preserve_keys]] | array', -\ 'array_splice(': 'array &input, int offset [, int length [, array replacement]] | array', -\ 'array_sum(': 'array array | number', -\ 'array_udiff_assoc(': 'array array1, array array2 [, array ..., callback data_compare_func] | array', -\ 'array_udiff(': 'array array1, array array2 [, array ..., callback data_compare_func] | array', -\ 'array_udiff_uassoc(': 'array array1, array array2 [, array ..., callback data_compare_func, callback key_compare_func] | array', -\ 'array_uintersect_assoc(': 'array array1, array array2 [, array ..., callback data_compare_func] | array', -\ 'array_uintersect(': 'array array1, array array2 [, array ..., callback data_compare_func] | array', -\ 'array_uintersect_uassoc(': 'array array1, array array2 [, array ..., callback data_compare_func, callback key_compare_func] | array', -\ 'array_unique(': 'array array | array', -\ 'array_unshift(': 'array &array, mixed var [, mixed ...] | int', -\ 'array_values(': 'array input | array', -\ 'array_walk(': 'array &array, callback funcname [, mixed userdata] | bool', -\ 'array_walk_recursive(': 'array &input, callback funcname [, mixed userdata] | bool', -\ 'arsort(': 'array &array [, int sort_flags] | bool', -\ 'ascii2ebcdic(': 'string ascii_str | int', -\ 'asinh(': 'float arg | float', -\ 'asin(': 'float arg | float', -\ 'asort(': 'array &array [, int sort_flags] | bool', -\ 'aspell_check(': 'int dictionary_link, string word | bool', -\ 'aspell_check_raw(': 'int dictionary_link, string word | bool', -\ 'aspell_new(': 'string master [, string personal] | int', -\ 'aspell_suggest(': 'int dictionary_link, string word | array', -\ 'assert(': 'mixed assertion | bool', -\ 'assert_options(': 'int what [, mixed value] | mixed', -\ 'atan2(': 'float y, float x | float', -\ 'atanh(': 'float arg | float', -\ 'atan(': 'float arg | float', -\ 'base64_decode(': 'string encoded_data | string', -\ 'base64_encode(': 'string data | string', -\ 'base_convert(': 'string number, int frombase, int tobase | string', -\ 'basename(': 'string path [, string suffix] | string', -\ 'bcadd(': 'string left_operand, string right_operand [, int scale] | string', -\ 'bccomp(': 'string left_operand, string right_operand [, int scale] | int', -\ 'bcdiv(': 'string left_operand, string right_operand [, int scale] | string', -\ 'bcmod(': 'string left_operand, string modulus | string', -\ 'bcmul(': 'string left_operand, string right_operand [, int scale] | string', -\ 'bcompiler_load_exe(': 'string filename | bool', -\ 'bcompiler_load(': 'string filename | bool', -\ 'bcompiler_parse_class(': 'string class, string callback | bool', -\ 'bcompiler_read(': 'resource filehandle | bool', -\ 'bcompiler_write_class(': 'resource filehandle, string className [, string extends] | bool', -\ 'bcompiler_write_constant(': 'resource filehandle, string constantName | bool', -\ 'bcompiler_write_exe_footer(': 'resource filehandle, int startpos | bool', -\ 'bcompiler_write_file(': 'resource filehandle, string filename | bool', -\ 'bcompiler_write_footer(': 'resource filehandle | bool', -\ 'bcompiler_write_function(': 'resource filehandle, string functionName | bool', -\ 'bcompiler_write_functions_from_file(': 'resource filehandle, string fileName | bool', -\ 'bcompiler_write_header(': 'resource filehandle [, string write_ver] | bool', -\ 'bcpow(': 'string x, string y [, int scale] | string', -\ 'bcpowmod(': 'string x, string y, string modulus [, int scale] | string', -\ 'bcscale(': 'int scale | bool', -\ 'bcsqrt(': 'string operand [, int scale] | string', -\ 'bcsub(': 'string left_operand, string right_operand [, int scale] | string', -\ 'bin2hex(': 'string str | string', -\ 'bindec(': 'string binary_string | number', -\ 'bind_textdomain_codeset(': 'string domain, string codeset | string', -\ 'bindtextdomain(': 'string domain, string directory | string', -\ 'bzclose(': 'resource bz | int', -\ 'bzcompress(': 'string source [, int blocksize [, int workfactor]] | mixed', -\ 'bzdecompress(': 'string source [, int small] | mixed', -\ 'bzerrno(': 'resource bz | int', -\ 'bzerror(': 'resource bz | array', -\ 'bzerrstr(': 'resource bz | string', -\ 'bzflush(': 'resource bz | int', -\ 'bzopen(': 'string filename, string mode | resource', -\ 'bzread(': 'resource bz [, int length] | string', -\ 'bzwrite(': 'resource bz, string data [, int length] | int', -\ 'cal_days_in_month(': 'int calendar, int month, int year | int', -\ 'cal_from_jd(': 'int jd, int calendar | array', -\ 'cal_info(': '[int calendar] | array', -\ 'call_user_func_array(': 'callback function, array param_arr | mixed', -\ 'call_user_func(': 'callback function [, mixed parameter [, mixed ...]] | mixed', -\ 'call_user_method_array(': 'string method_name, object &obj, array paramarr | mixed', -\ 'call_user_method(': 'string method_name, object &obj [, mixed parameter [, mixed ...]] | mixed', -\ 'cal_to_jd(': 'int calendar, int month, int day, int year | int', -\ 'ccvs_add(': 'string session, string invoice, string argtype, string argval | string', -\ 'ccvs_auth(': 'string session, string invoice | string', -\ 'ccvs_command(': 'string session, string type, string argval | string', -\ 'ccvs_count(': 'string session, string type | int', -\ 'ccvs_delete(': 'string session, string invoice | string', -\ 'ccvs_done(': 'string sess | string', -\ 'ccvs_init(': 'string name | string', -\ 'ccvs_lookup(': 'string session, string invoice, int inum | string', -\ 'ccvs_new(': 'string session, string invoice | string', -\ 'ccvs_report(': 'string session, string type | string', -\ 'ccvs_return(': 'string session, string invoice | string', -\ 'ccvs_reverse(': 'string session, string invoice | string', -\ 'ccvs_sale(': 'string session, string invoice | string', -\ 'ccvs_status(': 'string session, string invoice | string', -\ 'ccvs_textvalue(': 'string session | string', -\ 'ccvs_void(': 'string session, string invoice | string', -\ 'ceil(': 'float value | float', -\ 'chdir(': 'string directory | bool', -\ 'checkdate(': 'int month, int day, int year | bool', -\ 'checkdnsrr(': 'string host [, string type] | int', -\ 'chgrp(': 'string filename, mixed group | bool', -\ 'chmod(': 'string filename, int mode | bool', -\ 'chown(': 'string filename, mixed user | bool', -\ 'chr(': 'int ascii | string', -\ 'chroot(': 'string directory | bool', -\ 'chunk_split(': 'string body [, int chunklen [, string end]] | string', -\ 'class_exists(': 'string class_name [, bool autoload] | bool', -\ 'class_implements(': 'mixed class [, bool autoload] | array', -\ 'classkit_import(': 'string filename | array', -\ 'classkit_method_add(': 'string classname, string methodname, string args, string code [, int flags] | bool', -\ 'classkit_method_copy(': 'string dClass, string dMethod, string sClass [, string sMethod] | bool', -\ 'classkit_method_redefine(': 'string classname, string methodname, string args, string code [, int flags] | bool', -\ 'classkit_method_remove(': 'string classname, string methodname | bool', -\ 'classkit_method_rename(': 'string classname, string methodname, string newname | bool', -\ 'class_parents(': 'mixed class [, bool autoload] | array', -\ 'clearstatcache(': 'void | void', -\ 'closedir(': 'resource dir_handle | void', -\ 'closelog(': 'void | bool', -\ 'com_addref(': 'void | void', -\ 'com_create_guid(': 'void | string', -\ 'com_event_sink(': 'variant comobject, object sinkobject [, mixed sinkinterface] | bool', -\ 'com_get_active_object(': 'string progid [, int code_page] | variant', -\ 'com_get(': 'resource com_object, string property | mixed', -\ 'com_invoke(': 'resource com_object, string function_name [, mixed function_parameters] | mixed', -\ 'com_isenum(': 'variant com_module | bool', -\ 'com_load(': 'string module_name [, string server_name [, int codepage]] | resource', -\ 'com_load_typelib(': 'string typelib_name [, bool case_insensitive] | bool', -\ 'com_message_pump(': '[int timeoutms] | bool', -\ 'compact(': 'mixed varname [, mixed ...] | array', -\ 'com_print_typeinfo(': 'object comobject [, string dispinterface [, bool wantsink]] | bool', -\ 'com_release(': 'void | void', -\ 'com_set(': 'resource com_object, string property, mixed value | void', -\ 'connection_aborted(': 'void | int', -\ 'connection_status(': 'void | int', -\ 'connection_timeout(': 'void | bool', -\ 'constant(': 'string name | mixed', -\ 'convert_cyr_string(': 'string str, string from, string to | string', -\ 'convert_uudecode(': 'string data | string', -\ 'convert_uuencode(': 'string data | string', -\ 'copy(': 'string source, string dest | bool', -\ 'cosh(': 'float arg | float', -\ 'cos(': 'float arg | float', -\ 'count_chars(': 'string string [, int mode] | mixed', -\ 'count(': 'mixed var [, int mode] | int', -\ 'cpdf_add_annotation(': 'int pdf_document, float llx, float lly, float urx, float ury, string title, string content [, int mode] | bool', -\ 'cpdf_add_outline(': 'int pdf_document, int lastoutline, int sublevel, int open, int pagenr, string text | int', -\ 'cpdf_arc(': 'int pdf_document, float x_coor, float y_coor, float radius, float start, float end [, int mode] | bool', -\ 'cpdf_begin_text(': 'int pdf_document | bool', -\ 'cpdf_circle(': 'int pdf_document, float x_coor, float y_coor, float radius [, int mode] | bool', -\ 'cpdf_clip(': 'int pdf_document | bool', -\ 'cpdf_close(': 'int pdf_document | bool', -\ 'cpdf_closepath_fill_stroke(': 'int pdf_document | bool', -\ 'cpdf_closepath(': 'int pdf_document | bool', -\ 'cpdf_closepath_stroke(': 'int pdf_document | bool', -\ 'cpdf_continue_text(': 'int pdf_document, string text | bool', -\ 'cpdf_curveto(': 'int pdf_document, float x1, float y1, float x2, float y2, float x3, float y3 [, int mode] | bool', -\ 'cpdf_end_text(': 'int pdf_document | bool', -\ 'cpdf_fill(': 'int pdf_document | bool', -\ 'cpdf_fill_stroke(': 'int pdf_document | bool', -\ 'cpdf_finalize(': 'int pdf_document | bool', -\ 'cpdf_finalize_page(': 'int pdf_document, int page_number | bool', -\ 'cpdf_global_set_document_limits(': 'int maxpages, int maxfonts, int maximages, int maxannotations, int maxobjects | bool', -\ 'cpdf_import_jpeg(': 'int pdf_document, string file_name, float x_coor, float y_coor, float angle, float width, float height, float x_scale, float y_scale, int gsave [, int mode] | bool', -\ 'cpdf_lineto(': 'int pdf_document, float x_coor, float y_coor [, int mode] | bool', -\ 'cpdf_moveto(': 'int pdf_document, float x_coor, float y_coor [, int mode] | bool', -\ 'cpdf_newpath(': 'int pdf_document | bool', -\ 'cpdf_open(': 'int compression [, string filename [, array doc_limits]] | int', -\ 'cpdf_output_buffer(': 'int pdf_document | bool', -\ 'cpdf_page_init(': 'int pdf_document, int page_number, int orientation, float height, float width [, float unit] | bool', -\ 'cpdf_place_inline_image(': 'int pdf_document, int image, float x_coor, float y_coor, float angle, float width, float height, int gsave [, int mode] | bool', -\ 'cpdf_rect(': 'int pdf_document, float x_coor, float y_coor, float width, float height [, int mode] | bool', -\ 'cpdf_restore(': 'int pdf_document | bool', -\ 'cpdf_rlineto(': 'int pdf_document, float x_coor, float y_coor [, int mode] | bool', -\ 'cpdf_rmoveto(': 'int pdf_document, float x_coor, float y_coor [, int mode] | bool', -\ 'cpdf_rotate(': 'int pdf_document, float angle | bool', -\ 'cpdf_rotate_text(': 'int pdfdoc, float angle | bool', -\ 'cpdf_save(': 'int pdf_document | bool', -\ 'cpdf_save_to_file(': 'int pdf_document, string filename | bool', -\ 'cpdf_scale(': 'int pdf_document, float x_scale, float y_scale | bool', -\ 'cpdf_set_action_url(': 'int pdfdoc, float xll, float yll, float xur, float xur, string url [, int mode] | bool', -\ 'cpdf_set_char_spacing(': 'int pdf_document, float space | bool', -\ 'cpdf_set_creator(': 'int pdf_document, string creator | bool', -\ 'cpdf_set_current_page(': 'int pdf_document, int page_number | bool', -\ 'cpdf_setdash(': 'int pdf_document, float white, float black | bool', -\ 'cpdf_setflat(': 'int pdf_document, float value | bool', -\ 'cpdf_set_font_directories(': 'int pdfdoc, string pfmdir, string pfbdir | bool', -\ 'cpdf_set_font(': 'int pdf_document, string font_name, float size, string encoding | bool', -\ 'cpdf_set_font_map_file(': 'int pdfdoc, string filename | bool', -\ 'cpdf_setgray_fill(': 'int pdf_document, float value | bool', -\ 'cpdf_setgray(': 'int pdf_document, float gray_value | bool', -\ 'cpdf_setgray_stroke(': 'int pdf_document, float gray_value | bool', -\ 'cpdf_set_horiz_scaling(': 'int pdf_document, float scale | bool', -\ 'cpdf_set_keywords(': 'int pdf_document, string keywords | bool', -\ 'cpdf_set_leading(': 'int pdf_document, float distance | bool', -\ 'cpdf_setlinecap(': 'int pdf_document, int value | bool', -\ 'cpdf_setlinejoin(': 'int pdf_document, int value | bool', -\ 'cpdf_setlinewidth(': 'int pdf_document, float width | bool', -\ 'cpdf_setmiterlimit(': 'int pdf_document, float value | bool', -\ 'cpdf_set_page_animation(': 'int pdf_document, int transition, float duration, float direction, int orientation, int inout | bool', -\ 'cpdf_setrgbcolor_fill(': 'int pdf_document, float red_value, float green_value, float blue_value | bool', -\ 'cpdf_setrgbcolor(': 'int pdf_document, float red_value, float green_value, float blue_value | bool', -\ 'cpdf_setrgbcolor_stroke(': 'int pdf_document, float red_value, float green_value, float blue_value | bool', -\ 'cpdf_set_subject(': 'int pdf_document, string subject | bool', -\ 'cpdf_set_text_matrix(': 'int pdf_document, array matrix | bool', -\ 'cpdf_set_text_pos(': 'int pdf_document, float x_coor, float y_coor [, int mode] | bool', -\ 'cpdf_set_text_rendering(': 'int pdf_document, int rendermode | bool', -\ 'cpdf_set_text_rise(': 'int pdf_document, float value | bool', -\ 'cpdf_set_title(': 'int pdf_document, string title | bool', -\ 'cpdf_set_viewer_preferences(': 'int pdfdoc, array preferences | bool', -\ 'cpdf_set_word_spacing(': 'int pdf_document, float space | bool', -\ 'cpdf_show(': 'int pdf_document, string text | bool', -\ 'cpdf_show_xy(': 'int pdf_document, string text, float x_coor, float y_coor [, int mode] | bool', -\ 'cpdf_stringwidth(': 'int pdf_document, string text | float', -\ 'cpdf_stroke(': 'int pdf_document | bool', -\ 'cpdf_text(': 'int pdf_document, string text [, float x_coor, float y_coor [, int mode [, float orientation [, int alignmode]]]] | bool', -\ 'cpdf_translate(': 'int pdf_document, float x_coor, float y_coor | bool', -\ 'crack_check(': 'resource dictionary, string password | bool', -\ 'crack_closedict(': '[resource dictionary] | bool', -\ 'crack_getlastmessage(': 'void | string', -\ 'crack_opendict(': 'string dictionary | resource', -\ 'crc32(': 'string str | int', -\ 'create_function(': 'string args, string code | string', -\ 'crypt(': 'string str [, string salt] | string', -\ 'ctype_alnum(': 'string text | bool', -\ 'ctype_alpha(': 'string text | bool', -\ 'ctype_cntrl(': 'string text | bool', -\ 'ctype_digit(': 'string text | bool', -\ 'ctype_graph(': 'string text | bool', -\ 'ctype_lower(': 'string text | bool', -\ 'ctype_print(': 'string text | bool', -\ 'ctype_punct(': 'string text | bool', -\ 'ctype_space(': 'string text | bool', -\ 'ctype_upper(': 'string text | bool', -\ 'ctype_xdigit(': 'string text | bool', -\ 'curl_close(': 'resource ch | void', -\ 'curl_copy_handle(': 'resource ch | resource', -\ 'curl_errno(': 'resource ch | int', -\ 'curl_error(': 'resource ch | string', -\ 'curl_exec(': 'resource ch | mixed', -\ 'curl_getinfo(': 'resource ch [, int opt] | mixed', -\ 'curl_init(': '[string url] | resource', -\ 'curl_multi_add_handle(': 'resource mh, resource ch | int', -\ 'curl_multi_close(': 'resource mh | void', -\ 'curl_multi_exec(': 'resource mh, int &still_running | int', -\ 'curl_multi_getcontent(': 'resource ch | string', -\ 'curl_multi_info_read(': 'resource mh | array', -\ 'curl_multi_init(': 'void | resource', -\ 'curl_multi_remove_handle(': 'resource mh, resource ch | int', -\ 'curl_multi_select(': 'resource mh [, float timeout] | int', -\ 'curl_setopt(': 'resource ch, int option, mixed value | bool', -\ 'curl_version(': '[int version] | array', -\ 'current(': 'array &array | mixed', -\ 'cybercash_base64_decode(': 'string inbuff | string', -\ 'cybercash_base64_encode(': 'string inbuff | string', -\ 'cybercash_decr(': 'string wmk, string sk, string inbuff | array', -\ 'cybercash_encr(': 'string wmk, string sk, string inbuff | array', -\ 'cybermut_creerformulairecm(': 'string url_cm, string version, string tpe, string price, string ref_command, string text_free, string url_return, string url_return_ok, string url_return_err, string language, string code_company, string text_button | string', -\ 'cybermut_creerreponsecm(': 'string sentence | string', -\ 'cybermut_testmac(': 'string code_mac, string version, string tpe, string cdate, string price, string ref_command, string text_free, string code_return | bool', -\ 'cyrus_authenticate(': 'resource connection [, string mechlist [, string service [, string user [, int minssf [, int maxssf [, string authname [, string password]]]]]]] | void', -\ 'cyrus_bind(': 'resource connection, array callbacks | bool', -\ 'cyrus_close(': 'resource connection | bool', -\ 'cyrus_connect(': '[string host [, string port [, int flags]]] | resource', -\ 'cyrus_query(': 'resource connection, string query | array', -\ 'cyrus_unbind(': 'resource connection, string trigger_name | bool', -\ 'date_default_timezone_get(': 'void | string', -\ 'date_default_timezone_set(': 'string timezone_identifier | bool', -\ 'date(': 'string format [, int timestamp] | string', -\ 'date_sunrise(': 'int timestamp [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]] | mixed', -\ 'date_sunset(': 'int timestamp [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]] | mixed', -\ 'db2_autocommit(': 'resource connection [, bool value] | mixed', -\ 'db2_bind_param(': 'resource stmt, int parameter-number, string variable-name [, int parameter-type [, int data-type [, int precision [, int scale]]]] | bool', -\ 'db2_client_info(': 'resource connection | object', -\ 'db2_close(': 'resource connection | bool', -\ 'db2_column_privileges(': 'resource connection [, string qualifier [, string schema [, string table-name [, string column-name]]]] | resource', -\ 'db2_columns(': 'resource connection [, string qualifier [, string schema [, string table-name [, string column-name]]]] | resource', -\ 'db2_commit(': 'resource connection | bool', -\ 'db2_connect(': 'string database, string username, string password [, array options] | resource', -\ 'db2_conn_error(': '[resource connection] | string', -\ 'db2_conn_errormsg(': '[resource connection] | string', -\ 'db2_cursor_type(': 'resource stmt | int', -\ 'db2_exec(': 'resource connection, string statement [, array options] | resource', -\ 'db2_execute(': 'resource stmt [, array parameters] | bool', -\ 'db2_fetch_array(': 'resource stmt [, int row_number] | array', -\ 'db2_fetch_assoc(': 'resource stmt [, int row_number] | array', -\ 'db2_fetch_both(': 'resource stmt [, int row_number] | array', -\ 'db2_fetch_object(': 'resource stmt [, int row_number] | object', -\ 'db2_fetch_row(': 'resource stmt [, int row_number] | bool', -\ 'db2_field_display_size(': 'resource stmt, mixed column | int', -\ 'db2_field_name(': 'resource stmt, mixed column | string', -\ 'db2_field_num(': 'resource stmt, mixed column | int', -\ 'db2_field_precision(': 'resource stmt, mixed column | int', -\ 'db2_field_scale(': 'resource stmt, mixed column | int', -\ 'db2_field_type(': 'resource stmt, mixed column | string', -\ 'db2_field_width(': 'resource stmt, mixed column | int', -\ 'db2_foreign_keys(': 'resource connection, string qualifier, string schema, string table-name | resource', -\ 'db2_free_result(': 'resource stmt | bool', -\ 'db2_free_stmt(': 'resource stmt | bool', -\ 'db2_next_result(': 'resource stmt | resource', -\ 'db2_num_fields(': 'resource stmt | int', -\ 'db2_num_rows(': 'resource stmt | int', -\ 'db2_pconnect(': 'string database, string username, string password [, array options] | resource', -\ 'db2_prepare(': 'resource connection, string statement [, array options] | resource', -\ 'db2_primary_keys(': 'resource connection, string qualifier, string schema, string table-name | resource', -\ 'db2_procedure_columns(': 'resource connection, string qualifier, string schema, string procedure, string parameter | resource', -\ 'db2_procedures(': 'resource connection, string qualifier, string schema, string procedure | resource', -\ 'db2_result(': 'resource stmt, mixed column | mixed', -\ 'db2_rollback(': 'resource connection | bool', -\ 'db2_server_info(': 'resource connection | object', -\ 'db2_special_columns(': 'resource connection, string qualifier, string schema, string table_name, int scope | resource', -\ 'db2_statistics(': 'resource connection, string qualifier, string schema, string table-name, bool unique | resource', -\ 'db2_stmt_error(': '[resource stmt] | string', -\ 'db2_stmt_errormsg(': '[resource stmt] | string', -\ 'db2_table_privileges(': 'resource connection [, string qualifier [, string schema [, string table_name]]] | resource', -\ 'db2_tables(': 'resource connection [, string qualifier [, string schema [, string table-name [, string table-type]]]] | resource', -\ 'dba_close(': 'resource handle | void', -\ 'dba_delete(': 'string key, resource handle | bool', -\ 'dba_exists(': 'string key, resource handle | bool', -\ 'dba_fetch(': 'string key, resource handle | string', -\ 'dba_firstkey(': 'resource handle | string', -\ 'dba_handlers(': '[bool full_info] | array', -\ 'dba_insert(': 'string key, string value, resource handle | bool', -\ 'dba_key_split(': 'mixed key | mixed', -\ 'dba_list(': 'void | array', -\ 'dba_nextkey(': 'resource handle | string', -\ 'dba_open(': 'string path, string mode [, string handler [, mixed ...]] | resource', -\ 'dba_optimize(': 'resource handle | bool', -\ 'dba_popen(': 'string path, string mode [, string handler [, mixed ...]] | resource', -\ 'dba_replace(': 'string key, string value, resource handle | bool', -\ 'dbase_add_record(': 'int dbase_identifier, array record | bool', -\ 'dbase_close(': 'int dbase_identifier | bool', -\ 'dbase_create(': 'string filename, array fields | int', -\ 'dbase_delete_record(': 'int dbase_identifier, int record_number | bool', -\ 'dbase_get_header_info(': 'int dbase_identifier | array', -\ 'dbase_get_record(': 'int dbase_identifier, int record_number | array', -\ 'dbase_get_record_with_names(': 'int dbase_identifier, int record_number | array', -\ 'dbase_numfields(': 'int dbase_identifier | int', -\ 'dbase_numrecords(': 'int dbase_identifier | int', -\ 'dbase_open(': 'string filename, int mode | int', -\ 'dbase_pack(': 'int dbase_identifier | bool', -\ 'dbase_replace_record(': 'int dbase_identifier, array record, int record_number | bool', -\ 'dba_sync(': 'resource handle | bool', -\ 'dblist(': 'void | string', -\ 'dbmclose(': 'resource dbm_identifier | bool', -\ 'dbmdelete(': 'resource dbm_identifier, string key | bool', -\ 'dbmexists(': 'resource dbm_identifier, string key | bool', -\ 'dbmfetch(': 'resource dbm_identifier, string key | string', -\ 'dbmfirstkey(': 'resource dbm_identifier | string', -\ 'dbminsert(': 'resource dbm_identifier, string key, string value | int', -\ 'dbmnextkey(': 'resource dbm_identifier, string key | string', -\ 'dbmopen(': 'string filename, string flags | resource', -\ 'dbmreplace(': 'resource dbm_identifier, string key, string value | int', -\ 'dbplus_add(': 'resource relation, array tuple | int', -\ 'dbplus_aql(': 'string query [, string server [, string dbpath]] | resource', -\ 'dbplus_chdir(': '[string newdir] | string', -\ 'dbplus_close(': 'resource relation | mixed', -\ 'dbplus_curr(': 'resource relation, array &tuple | int', -\ 'dbplus_errcode(': '[int errno] | string', -\ 'dbplus_errno(': 'void | int', -\ 'dbplus_find(': 'resource relation, array constraints, mixed tuple | int', -\ 'dbplus_first(': 'resource relation, array &tuple | int', -\ 'dbplus_flush(': 'resource relation | int', -\ 'dbplus_freealllocks(': 'void | int', -\ 'dbplus_freelock(': 'resource relation, string tname | int', -\ 'dbplus_freerlocks(': 'resource relation | int', -\ 'dbplus_getlock(': 'resource relation, string tname | int', -\ 'dbplus_getunique(': 'resource relation, int uniqueid | int', -\ 'dbplus_info(': 'resource relation, string key, array &result | int', -\ 'dbplus_last(': 'resource relation, array &tuple | int', -\ 'dbplus_lockrel(': 'resource relation | int', -\ 'dbplus_next(': 'resource relation, array &tuple | int', -\ 'dbplus_open(': 'string name | resource', -\ 'dbplus_prev(': 'resource relation, array &tuple | int', -\ 'dbplus_rchperm(': 'resource relation, int mask, string user, string group | int', -\ 'dbplus_rcreate(': 'string name, mixed domlist [, bool overwrite] | resource', -\ 'dbplus_rcrtexact(': 'string name, resource relation [, bool overwrite] | mixed', -\ 'dbplus_rcrtlike(': 'string name, resource relation [, int overwrite] | mixed', -\ 'dbplus_resolve(': 'string relation_name | array', -\ 'dbplus_restorepos(': 'resource relation, array tuple | int', -\ 'dbplus_rkeys(': 'resource relation, mixed domlist | mixed', -\ 'dbplus_ropen(': 'string name | resource', -\ 'dbplus_rquery(': 'string query [, string dbpath] | resource', -\ 'dbplus_rrename(': 'resource relation, string name | int', -\ 'dbplus_rsecindex(': 'resource relation, mixed domlist, int type | mixed', -\ 'dbplus_runlink(': 'resource relation | int', -\ 'dbplus_rzap(': 'resource relation | int', -\ 'dbplus_savepos(': 'resource relation | int', -\ 'dbplus_setindexbynumber(': 'resource relation, int idx_number | int', -\ 'dbplus_setindex(': 'resource relation, string idx_name | int', -\ 'dbplus_sql(': 'string query [, string server [, string dbpath]] | resource', -\ 'dbplus_tcl(': 'int sid, string script | string', -\ 'dbplus_tremove(': 'resource relation, array tuple [, array &current] | int', -\ 'dbplus_undo(': 'resource relation | int', -\ 'dbplus_undoprepare(': 'resource relation | int', -\ 'dbplus_unlockrel(': 'resource relation | int', -\ 'dbplus_unselect(': 'resource relation | int', -\ 'dbplus_update(': 'resource relation, array old, array new | int', -\ 'dbplus_xlockrel(': 'resource relation | int', -\ 'dbplus_xunlockrel(': 'resource relation | int', -\ 'dbx_close(': 'object link_identifier | bool', -\ 'dbx_compare(': 'array row_a, array row_b, string column_key [, int flags] | int', -\ 'dbx_connect(': 'mixed module, string host, string database, string username, string password [, int persistent] | object', -\ 'dbx_error(': 'object link_identifier | string', -\ 'dbx_escape_string(': 'object link_identifier, string text | string', -\ 'dbx_fetch_row(': 'object result_identifier | mixed', -\ 'dbx_query(': 'object link_identifier, string sql_statement [, int flags] | mixed', -\ 'dbx_sort(': 'object result, string user_compare_function | bool', -\ 'dcgettext(': 'string domain, string message, int category | string', -\ 'dcngettext(': 'string domain, string msgid1, string msgid2, int n, int category | string', -\ 'deaggregate(': 'object object [, string class_name] | void', -\ 'debug_backtrace(': 'void | array', -\ 'debugger_off(': 'void | int', -\ 'debugger_on(': 'string address | int', -\ 'debug_print_backtrace(': 'void | void', -\ 'debug_zval_dump(': 'mixed variable | void', -\ 'decbin(': 'int number | string', -\ 'dechex(': 'int number | string', -\ 'decoct(': 'int number | string', -\ 'defined(': 'string name | bool', -\ 'define(': 'string name, mixed value [, bool case_insensitive] | bool', -\ 'define_syslog_variables(': 'void | void', -\ 'deg2rad(': 'float number | float', -\ 'delete(': 'string file | void', -\ 'dgettext(': 'string domain, string message | string', -\ 'dio_close(': 'resource fd | void', -\ 'dio_fcntl(': 'resource fd, int cmd [, mixed args] | mixed', -\ 'dio_open(': 'string filename, int flags [, int mode] | resource', -\ 'dio_read(': 'resource fd [, int len] | string', -\ 'dio_seek(': 'resource fd, int pos [, int whence] | int', -\ 'dio_stat(': 'resource fd | array', -\ 'dio_tcsetattr(': 'resource fd, array options | bool', -\ 'dio_truncate(': 'resource fd, int offset | bool', -\ 'dio_write(': 'resource fd, string data [, int len] | int', -\ 'dirname(': 'string path | string', -\ 'disk_free_space(': 'string directory | float', -\ 'disk_total_space(': 'string directory | float', -\ 'dl(': 'string library | int', -\ 'dngettext(': 'string domain, string msgid1, string msgid2, int n | string', -\ 'dns_check_record(': 'string host [, string type] | bool', -\ 'dns_get_mx(': 'string hostname, array &mxhosts [, array &weight] | bool', -\ 'dns_get_record(': 'string hostname [, int type [, array &authns, array &addtl]] | array', -\ 'DomDocument->add_root(': 'string name | domelement', -\ 'DomDocument->create_attribute(': 'string name, string value | domattribute', -\ 'DomDocument->create_cdata_section(': 'string content | domcdata', -\ 'DomDocument->create_comment(': 'string content | domcomment', -\ 'DomDocument->create_element(': 'string name | domelement', -\ 'DomDocument->create_element_ns(': 'string uri, string name [, string prefix] | domelement', -\ 'DomDocument->create_entity_reference(': 'string content | domentityreference', -\ 'DomDocument->create_processing_instruction(': 'string content | domprocessinginstruction', -\ 'DomDocument->create_text_node(': 'string content | domtext', -\ 'DomDocument->doctype(': 'void | domdocumenttype', -\ 'DomDocument->document_element(': 'void | domelement', -\ 'DomDocument->dump_file(': 'string filename [, bool compressionmode [, bool format]] | string', -\ 'DomDocument->dump_mem(': '[bool format [, string encoding]] | string', -\ 'DomDocument->get_element_by_id(': 'string id | domelement', -\ 'DomDocument->get_elements_by_tagname(': 'string name | array', -\ 'DomDocument->html_dump_mem(': 'void | string', -\ 'DomDocument->xinclude(': 'void | int', -\ 'dom_import_simplexml(': 'SimpleXMLElement node | DOMElement', -\ 'DomNode->append_sibling(': 'domelement newnode | domelement', -\ 'DomNode->attributes(': 'void | array', -\ 'DomNode->child_nodes(': 'void | array', -\ 'DomNode->clone_node(': 'void | domelement', -\ 'DomNode->dump_node(': 'void | string', -\ 'DomNode->first_child(': 'void | domelement', -\ 'DomNode->get_content(': 'void | string', -\ 'DomNode->has_attributes(': 'void | bool', -\ 'DomNode->has_child_nodes(': 'void | bool', -\ 'DomNode->insert_before(': 'domelement newnode, domelement refnode | domelement', -\ 'DomNode->is_blank_node(': 'void | bool', -\ 'DomNode->last_child(': 'void | domelement', -\ 'DomNode->next_sibling(': 'void | domelement', -\ 'DomNode->node_name(': 'void | string', -\ 'DomNode->node_type(': 'void | int', -\ 'DomNode->node_value(': 'void | string', -\ 'DomNode->owner_document(': 'void | domdocument', -\ 'DomNode->parent_node(': 'void | domnode', -\ 'DomNode->prefix(': 'void | string', -\ 'DomNode->previous_sibling(': 'void | domelement', -\ 'DomNode->remove_child(': 'domtext oldchild | domtext', -\ 'DomNode->replace_child(': 'domelement oldnode, domelement newnode | domelement', -\ 'DomNode->replace_node(': 'domelement newnode | domelement', -\ 'DomNode->set_content(': 'string content | bool', -\ 'DomNode->set_name(': 'void | bool', -\ 'DomNode->set_namespace(': 'string uri [, string prefix] | void', -\ 'DomNode->unlink_node(': 'void | void', -\ 'domxml_new_doc(': 'string version | DomDocument', -\ 'domxml_open_file(': 'string filename [, int mode [, array &error]] | DomDocument', -\ 'domxml_open_mem(': 'string str [, int mode [, array &error]] | DomDocument', -\ 'domxml_version(': 'void | string', -\ 'domxml_xmltree(': 'string str | DomDocument', -\ 'domxml_xslt_stylesheet_doc(': 'DomDocument xsl_doc | DomXsltStylesheet', -\ 'domxml_xslt_stylesheet_file(': 'string xsl_file | DomXsltStylesheet', -\ 'domxml_xslt_stylesheet(': 'string xsl_buf | DomXsltStylesheet', -\ 'domxml_xslt_version(': 'void | int', -\ 'dotnet_load(': 'string assembly_name [, string datatype_name [, int codepage]] | int', -\ 'each(': 'array &array | array', -\ 'easter_date(': '[int year] | int', -\ 'easter_days(': '[int year [, int method]] | int', -\ 'ebcdic2ascii(': 'string ebcdic_str | int', -\ 'echo(': 'string arg1 [, string ...] | void', -\ 'empty(': 'mixed var | bool', -\ 'end(': 'array &array | mixed', -\ 'ereg(': 'string pattern, string string [, array &regs] | int', -\ 'eregi(': 'string pattern, string string [, array &regs] | int', -\ 'eregi_replace(': 'string pattern, string replacement, string string | string', -\ 'ereg_replace(': 'string pattern, string replacement, string string | string', -\ 'error_log(': 'string message [, int message_type [, string destination [, string extra_headers]]] | bool', -\ 'error_reporting(': '[int level] | int', -\ 'escapeshellarg(': 'string arg | string', -\ 'escapeshellcmd(': 'string command | string', -\ 'eval(': 'string code_str | mixed', -\ 'exec(': 'string command [, array &output [, int &return_var]] | string', -\ 'exif_imagetype(': 'string filename | int', -\ 'exif_read_data(': 'string filename [, string sections [, bool arrays [, bool thumbnail]]] | array', -\ 'exif_tagname(': 'string index | string', -\ 'exif_thumbnail(': 'string filename [, int &width [, int &height [, int &imagetype]]] | string', -\ 'exit(': '[string status] | void', -\ 'expect_expectl(': 'resource expect, array cases, string &match | mixed', -\ 'expect_popen(': 'string command | resource', -\ 'exp(': 'float arg | float', -\ 'explode(': 'string separator, string string [, int limit] | array', -\ 'expm1(': 'float number | float', -\ 'extension_loaded(': 'string name | bool', -\ 'extract(': 'array var_array [, int extract_type [, string prefix]] | int', -\ 'ezmlm_hash(': 'string addr | int', -\ 'fam_cancel_monitor(': 'resource fam, resource fam_monitor | bool', -\ 'fam_close(': 'resource fam | void', -\ 'fam_monitor_collection(': 'resource fam, string dirname, int depth, string mask | resource', -\ 'fam_monitor_directory(': 'resource fam, string dirname | resource', -\ 'fam_monitor_file(': 'resource fam, string filename | resource', -\ 'fam_next_event(': 'resource fam | array', -\ 'fam_open(': '[string appname] | resource', -\ 'fam_pending(': 'resource fam | int', -\ 'fam_resume_monitor(': 'resource fam, resource fam_monitor | bool', -\ 'fam_suspend_monitor(': 'resource fam, resource fam_monitor | bool', -\ 'fbsql_affected_rows(': '[resource link_identifier] | int', -\ 'fbsql_autocommit(': 'resource link_identifier [, bool OnOff] | bool', -\ 'fbsql_blob_size(': 'string blob_handle [, resource link_identifier] | int', -\ 'fbsql_change_user(': 'string user, string password [, string database [, resource link_identifier]] | resource', -\ 'fbsql_clob_size(': 'string clob_handle [, resource link_identifier] | int', -\ 'fbsql_close(': '[resource link_identifier] | bool', -\ 'fbsql_commit(': '[resource link_identifier] | bool', -\ 'fbsql_connect(': '[string hostname [, string username [, string password]]] | resource', -\ 'fbsql_create_blob(': 'string blob_data [, resource link_identifier] | string', -\ 'fbsql_create_clob(': 'string clob_data [, resource link_identifier] | string', -\ 'fbsql_create_db(': 'string database_name [, resource link_identifier [, string database_options]] | bool', -\ 'fbsql_database(': 'resource link_identifier [, string database] | string', -\ 'fbsql_database_password(': 'resource link_identifier [, string database_password] | string', -\ 'fbsql_data_seek(': 'resource result_identifier, int row_number | bool', -\ 'fbsql_db_query(': 'string database, string query [, resource link_identifier] | resource', -\ 'fbsql_db_status(': 'string database_name [, resource link_identifier] | int', -\ 'fbsql_drop_db(': 'string database_name [, resource link_identifier] | bool', -\ 'fbsql_errno(': '[resource link_identifier] | int', -\ 'fbsql_error(': '[resource link_identifier] | string', -\ 'fbsql_fetch_array(': 'resource result [, int result_type] | array', -\ 'fbsql_fetch_assoc(': 'resource result | array', -\ 'fbsql_fetch_field(': 'resource result [, int field_offset] | object', -\ 'fbsql_fetch_lengths(': 'resource result | array', -\ 'fbsql_fetch_object(': 'resource result [, int result_type] | object', -\ 'fbsql_fetch_row(': 'resource result | array', -\ 'fbsql_field_flags(': 'resource result [, int field_offset] | string', -\ 'fbsql_field_len(': 'resource result [, int field_offset] | int', -\ 'fbsql_field_name(': 'resource result [, int field_index] | string', -\ 'fbsql_field_seek(': 'resource result [, int field_offset] | bool', -\ 'fbsql_field_table(': 'resource result [, int field_offset] | string', -\ 'fbsql_field_type(': 'resource result [, int field_offset] | string', -\ 'fbsql_free_result(': 'resource result | bool', -\ 'fbsql_get_autostart_info(': '[resource link_identifier] | array', -\ 'fbsql_hostname(': 'resource link_identifier [, string host_name] | string', -\ 'fbsql_insert_id(': '[resource link_identifier] | int', -\ 'fbsql_list_dbs(': '[resource link_identifier] | resource', -\ 'fbsql_list_fields(': 'string database_name, string table_name [, resource link_identifier] | resource', -\ 'fbsql_list_tables(': 'string database [, resource link_identifier] | resource', -\ 'fbsql_next_result(': 'resource result_id | bool', -\ 'fbsql_num_fields(': 'resource result | int', -\ 'fbsql_num_rows(': 'resource result | int', -\ 'fbsql_password(': 'resource link_identifier [, string password] | string', -\ 'fbsql_pconnect(': '[string hostname [, string username [, string password]]] | resource', -\ 'fbsql_query(': 'string query [, resource link_identifier [, int batch_size]] | resource', -\ 'fbsql_read_blob(': 'string blob_handle [, resource link_identifier] | string', -\ 'fbsql_read_clob(': 'string clob_handle [, resource link_identifier] | string', -\ 'fbsql_result(': 'resource result [, int row [, mixed field]] | mixed', -\ 'fbsql_rollback(': '[resource link_identifier] | bool', -\ 'fbsql_select_db(': '[string database_name [, resource link_identifier]] | bool', -\ 'fbsql_set_lob_mode(': 'resource result, string database_name | bool', -\ 'fbsql_set_password(': 'resource link_identifier, string user, string password, string old_password | bool', -\ 'fbsql_set_transaction(': 'resource link_identifier, int Locking, int Isolation | void', -\ 'fbsql_start_db(': 'string database_name [, resource link_identifier [, string database_options]] | bool', -\ 'fbsql_stop_db(': 'string database_name [, resource link_identifier] | bool', -\ 'fbsql_tablename(': 'resource result, int i | string', -\ 'fbsql_username(': 'resource link_identifier [, string username] | string', -\ 'fbsql_warnings(': '[bool OnOff] | bool', -\ 'fclose(': 'resource handle | bool', -\ 'fdf_add_doc_javascript(': 'resource fdfdoc, string script_name, string script_code | bool', -\ 'fdf_add_template(': 'resource fdfdoc, int newpage, string filename, string template, int rename | bool', -\ 'fdf_close(': 'resource fdf_document | void', -\ 'fdf_create(': 'void | resource', -\ 'fdf_enum_values(': 'resource fdfdoc, callback function [, mixed userdata] | bool', -\ 'fdf_errno(': 'void | int', -\ 'fdf_error(': '[int error_code] | string', -\ 'fdf_get_ap(': 'resource fdf_document, string field, int face, string filename | bool', -\ 'fdf_get_attachment(': 'resource fdf_document, string fieldname, string savepath | array', -\ 'fdf_get_encoding(': 'resource fdf_document | string', -\ 'fdf_get_file(': 'resource fdf_document | string', -\ 'fdf_get_flags(': 'resource fdfdoc, string fieldname, int whichflags | int', -\ 'fdf_get_opt(': 'resource fdfdof, string fieldname [, int element] | mixed', -\ 'fdf_get_status(': 'resource fdf_document | string', -\ 'fdf_get_value(': 'resource fdf_document, string fieldname [, int which] | mixed', -\ 'fdf_get_version(': '[resource fdf_document] | string', -\ 'fdf_header(': 'void | void', -\ 'fdf_next_field_name(': 'resource fdf_document [, string fieldname] | string', -\ 'fdf_open(': 'string filename | resource', -\ 'fdf_open_string(': 'string fdf_data | resource', -\ 'fdf_remove_item(': 'resource fdfdoc, string fieldname, int item | bool', -\ 'fdf_save(': 'resource fdf_document [, string filename] | bool', -\ 'fdf_save_string(': 'resource fdf_document | string', -\ 'fdf_set_ap(': 'resource fdf_document, string field_name, int face, string filename, int page_number | bool', -\ 'fdf_set_encoding(': 'resource fdf_document, string encoding | bool', -\ 'fdf_set_file(': 'resource fdf_document, string url [, string target_frame] | bool', -\ 'fdf_set_flags(': 'resource fdf_document, string fieldname, int whichFlags, int newFlags | bool', -\ 'fdf_set_javascript_action(': 'resource fdf_document, string fieldname, int trigger, string script | bool', -\ 'fdf_set_on_import_javascript(': 'resource fdfdoc, string script, bool before_data_import | bool', -\ 'fdf_set_opt(': 'resource fdf_document, string fieldname, int element, string str1, string str2 | bool', -\ 'fdf_set_status(': 'resource fdf_document, string status | bool', -\ 'fdf_set_submit_form_action(': 'resource fdf_document, string fieldname, int trigger, string script, int flags | bool', -\ 'fdf_set_target_frame(': 'resource fdf_document, string frame_name | bool', -\ 'fdf_set_value(': 'resource fdf_document, string fieldname, mixed value [, int isName] | bool', -\ 'fdf_set_version(': 'resource fdf_document, string version | bool', -\ 'feof(': 'resource handle | bool', -\ 'fflush(': 'resource handle | bool', -\ 'fgetc(': 'resource handle | string', -\ 'fgetcsv(': 'resource handle [, int length [, string delimiter [, string enclosure]]] | array', -\ 'fgets(': 'resource handle [, int length] | string', -\ 'fgetss(': 'resource handle [, int length [, string allowable_tags]] | string', -\ 'fileatime(': 'string filename | int', -\ 'filectime(': 'string filename | int', -\ 'file_exists(': 'string filename | bool', -\ 'file_get_contents(': 'string filename [, bool use_include_path [, resource context [, int offset [, int maxlen]]]] | string', -\ 'filegroup(': 'string filename | int', -\ 'file(': 'string filename [, int use_include_path [, resource context]] | array', -\ 'fileinode(': 'string filename | int', -\ 'filemtime(': 'string filename | int', -\ 'fileowner(': 'string filename | int', -\ 'fileperms(': 'string filename | int', -\ 'filepro_fieldcount(': 'void | int', -\ 'filepro_fieldname(': 'int field_number | string', -\ 'filepro_fieldtype(': 'int field_number | string', -\ 'filepro_fieldwidth(': 'int field_number | int', -\ 'filepro(': 'string directory | bool', -\ 'filepro_retrieve(': 'int row_number, int field_number | string', -\ 'filepro_rowcount(': 'void | int', -\ 'file_put_contents(': 'string filename, mixed data [, int flags [, resource context]] | int', -\ 'filesize(': 'string filename | int', -\ 'filetype(': 'string filename | string', -\ 'floatval(': 'mixed var | float', -\ 'flock(': 'resource handle, int operation [, int &wouldblock] | bool', -\ 'floor(': 'float value | float', -\ 'flush(': 'void | void', -\ 'fmod(': 'float x, float y | float', -\ 'fnmatch(': 'string pattern, string string [, int flags] | bool', -\ 'fopen(': 'string filename, string mode [, bool use_include_path [, resource zcontext]] | resource', -\ 'fpassthru(': 'resource handle | int', -\ 'fprintf(': 'resource handle, string format [, mixed args [, mixed ...]] | int', -\ 'fputcsv(': 'resource handle [, array fields [, string delimiter [, string enclosure]]] | int', -\ 'fread(': 'resource handle, int length | string', -\ 'frenchtojd(': 'int month, int day, int year | int', -\ 'fribidi_log2vis(': 'string str, string direction, int charset | string', -\ 'fscanf(': 'resource handle, string format [, mixed &...] | mixed', -\ 'fseek(': 'resource handle, int offset [, int whence] | int', -\ 'fsockopen(': 'string target [, int port [, int &errno [, string &errstr [, float timeout]]]] | resource', -\ 'fstat(': 'resource handle | array', -\ 'ftell(': 'resource handle | int', -\ 'ftok(': 'string pathname, string proj | int', -\ 'ftp_alloc(': 'resource ftp_stream, int filesize [, string &result] | bool', -\ 'ftp_cdup(': 'resource ftp_stream | bool', -\ 'ftp_chdir(': 'resource ftp_stream, string directory | bool', -\ 'ftp_chmod(': 'resource ftp_stream, int mode, string filename | int', -\ 'ftp_close(': 'resource ftp_stream | bool', -\ 'ftp_connect(': 'string host [, int port [, int timeout]] | resource', -\ 'ftp_delete(': 'resource ftp_stream, string path | bool', -\ 'ftp_exec(': 'resource ftp_stream, string command | bool', -\ 'ftp_fget(': 'resource ftp_stream, resource handle, string remote_file, int mode [, int resumepos] | bool', -\ 'ftp_fput(': 'resource ftp_stream, string remote_file, resource handle, int mode [, int startpos] | bool', -\ 'ftp_get(': 'resource ftp_stream, string local_file, string remote_file, int mode [, int resumepos] | bool', -\ 'ftp_get_option(': 'resource ftp_stream, int option | mixed', -\ 'ftp_login(': 'resource ftp_stream, string username, string password | bool', -\ 'ftp_mdtm(': 'resource ftp_stream, string remote_file | int', -\ 'ftp_mkdir(': 'resource ftp_stream, string directory | string', -\ 'ftp_nb_continue(': 'resource ftp_stream | int', -\ 'ftp_nb_fget(': 'resource ftp_stream, resource handle, string remote_file, int mode [, int resumepos] | int', -\ 'ftp_nb_fput(': 'resource ftp_stream, string remote_file, resource handle, int mode [, int startpos] | int', -\ 'ftp_nb_get(': 'resource ftp_stream, string local_file, string remote_file, int mode [, int resumepos] | int', -\ 'ftp_nb_put(': 'resource ftp_stream, string remote_file, string local_file, int mode [, int startpos] | int', -\ 'ftp_nlist(': 'resource ftp_stream, string directory | array', -\ 'ftp_pasv(': 'resource ftp_stream, bool pasv | bool', -\ 'ftp_put(': 'resource ftp_stream, string remote_file, string local_file, int mode [, int startpos] | bool', -\ 'ftp_pwd(': 'resource ftp_stream | string', -\ 'ftp_raw(': 'resource ftp_stream, string command | array', -\ 'ftp_rawlist(': 'resource ftp_stream, string directory [, bool recursive] | array', -\ 'ftp_rename(': 'resource ftp_stream, string oldname, string newname | bool', -\ 'ftp_rmdir(': 'resource ftp_stream, string directory | bool', -\ 'ftp_set_option(': 'resource ftp_stream, int option, mixed value | bool', -\ 'ftp_site(': 'resource ftp_stream, string command | bool', -\ 'ftp_size(': 'resource ftp_stream, string remote_file | int', -\ 'ftp_ssl_connect(': 'string host [, int port [, int timeout]] | resource', -\ 'ftp_systype(': 'resource ftp_stream | string', -\ 'ftruncate(': 'resource handle, int size | bool', -\ 'func_get_arg(': 'int arg_num | mixed', -\ 'func_get_args(': 'void | array', -\ 'func_num_args(': 'void | int', -\ 'function_exists(': 'string function_name | bool', -\ 'fwrite(': 'resource handle, string string [, int length] | int', -\ 'gd_info(': 'void | array', -\ 'getallheaders(': 'void | array', -\ 'get_browser(': '[string user_agent [, bool return_array]] | mixed', -\ 'get_cfg_var(': 'string varname | string', -\ 'get_class(': '[object obj] | string', -\ 'get_class_methods(': 'mixed class_name | array', -\ 'get_class_vars(': 'string class_name | array', -\ 'get_current_user(': 'void | string', -\ 'getcwd(': 'void | string', -\ 'getdate(': '[int timestamp] | array', -\ 'get_declared_classes(': 'void | array', -\ 'get_declared_interfaces(': 'void | array', -\ 'get_defined_constants(': '[mixed categorize] | array', -\ 'get_defined_functions(': 'void | array', -\ 'get_defined_vars(': 'void | array', -\ 'getenv(': 'string varname | string', -\ 'get_extension_funcs(': 'string module_name | array', -\ 'get_headers(': 'string url [, int format] | array', -\ 'gethostbyaddr(': 'string ip_address | string', -\ 'gethostbyname(': 'string hostname | string', -\ 'gethostbynamel(': 'string hostname | array', -\ 'get_html_translation_table(': '[int table [, int quote_style]] | array', -\ 'getimagesize(': 'string filename [, array &imageinfo] | array', -\ 'get_included_files(': 'void | array', -\ 'get_include_path(': 'void | string', -\ 'getlastmod(': 'void | int', -\ 'get_loaded_extensions(': 'void | array', -\ 'get_magic_quotes_gpc(': 'void | int', -\ 'get_magic_quotes_runtime(': 'void | int', -\ 'get_meta_tags(': 'string filename [, bool use_include_path] | array', -\ 'getmxrr(': 'string hostname, array &mxhosts [, array &weight] | bool', -\ 'getmygid(': 'void | int', -\ 'getmyinode(': 'void | int', -\ 'getmypid(': 'void | int', -\ 'getmyuid(': 'void | int', -\ 'get_object_vars(': 'object obj | array', -\ 'getopt(': 'string options | array', -\ 'get_parent_class(': '[mixed obj] | string', -\ 'getprotobyname(': 'string name | int', -\ 'getprotobynumber(': 'int number | string', -\ 'getrandmax(': 'void | int', -\ 'get_resource_type(': 'resource handle | string', -\ 'getrusage(': '[int who] | array', -\ 'getservbyname(': 'string service, string protocol | int', -\ 'getservbyport(': 'int port, string protocol | string', -\ 'gettext(': 'string message | string', -\ 'gettimeofday(': '[bool return_float] | mixed', -\ 'gettype(': 'mixed var | string', -\ 'glob(': 'string pattern [, int flags] | array', -\ 'gmdate(': 'string format [, int timestamp] | string', -\ 'gmmktime(': '[int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] | int', -\ 'gmp_abs(': 'resource a | resource', -\ 'gmp_add(': 'resource a, resource b | resource', -\ 'gmp_and(': 'resource a, resource b | resource', -\ 'gmp_clrbit(': 'resource &a, int index | void', -\ 'gmp_cmp(': 'resource a, resource b | int', -\ 'gmp_com(': 'resource a | resource', -\ 'gmp_divexact(': 'resource n, resource d | resource', -\ 'gmp_div_q(': 'resource a, resource b [, int round] | resource', -\ 'gmp_div_qr(': 'resource n, resource d [, int round] | array', -\ 'gmp_div_r(': 'resource n, resource d [, int round] | resource', -\ 'gmp_fact(': 'int a | resource', -\ 'gmp_gcdext(': 'resource a, resource b | array', -\ 'gmp_gcd(': 'resource a, resource b | resource', -\ 'gmp_hamdist(': 'resource a, resource b | int', -\ 'gmp_init(': 'mixed number [, int base] | resource', -\ 'gmp_intval(': 'resource gmpnumber | int', -\ 'gmp_invert(': 'resource a, resource b | resource', -\ 'gmp_jacobi(': 'resource a, resource p | int', -\ 'gmp_legendre(': 'resource a, resource p | int', -\ 'gmp_mod(': 'resource n, resource d | resource', -\ 'gmp_mul(': 'resource a, resource b | resource', -\ 'gmp_neg(': 'resource a | resource', -\ 'gmp_or(': 'resource a, resource b | resource', -\ 'gmp_perfect_square(': 'resource a | bool', -\ 'gmp_popcount(': 'resource a | int', -\ 'gmp_pow(': 'resource base, int exp | resource', -\ 'gmp_powm(': 'resource base, resource exp, resource mod | resource', -\ 'gmp_prob_prime(': 'resource a [, int reps] | int', -\ 'gmp_random(': 'int limiter | resource', -\ 'gmp_scan0(': 'resource a, int start | int', -\ 'gmp_scan1(': 'resource a, int start | int', -\ 'gmp_setbit(': 'resource &a, int index [, bool set_clear] | void', -\ 'gmp_sign(': 'resource a | int', -\ 'gmp_sqrt(': 'resource a | resource', -\ 'gmp_sqrtrem(': 'resource a | array', -\ 'gmp_strval(': 'resource gmpnumber [, int base] | string', -\ 'gmp_sub(': 'resource a, resource b | resource', -\ 'gmp_xor(': 'resource a, resource b | resource', -\ 'gmstrftime(': 'string format [, int timestamp] | string', -\ 'gnupg_adddecryptkey(': 'resource identifier, string fingerprint, string passphrase | bool', -\ 'gnupg_addencryptkey(': 'resource identifier, string fingerprint | bool', -\ 'gnupg_addsignkey(': 'resource identifier, string fingerprint [, string passphrase] | bool', -\ 'gnupg_cleardecryptkeys(': 'resource identifier | bool', -\ 'gnupg_clearencryptkeys(': 'resource identifier | bool', -\ 'gnupg_clearsignkeys(': 'resource identifier | bool', -\ 'gnupg_decrypt(': 'resource identifier, string text | string', -\ 'gnupg_decryptverify(': 'resource identifier, string text, string plaintext | array', -\ 'gnupg_encrypt(': 'resource identifier, string plaintext | string', -\ 'gnupg_encryptsign(': 'resource identifier, string plaintext | string', -\ 'gnupg_export(': 'resource identifier, string fingerprint | string', -\ 'gnupg_geterror(': 'resource identifier | string', -\ 'gnupg_getprotocol(': 'resource identifier | int', -\ 'gnupg_import(': 'resource identifier, string keydata | array', -\ 'gnupg_keyinfo(': 'resource identifier, string pattern | array', -\ 'gnupg_setarmor(': 'resource identifier, int armor | bool', -\ 'gnupg_seterrormode(': 'resource identifier, int errormode | void', -\ 'gnupg_setsignmode(': 'resource identifier, int signmode | bool', -\ 'gnupg_sign(': 'resource identifier, string plaintext | string', -\ 'gnupg_verify(': 'resource identifier, string signed_text, string signature [, string plaintext] | array', -\ 'gopher_parsedir(': 'string dirent | array', -\ 'gregoriantojd(': 'int month, int day, int year | int', -\ 'gzclose(': 'resource zp | bool', -\ 'gzcompress(': 'string data [, int level] | string', -\ 'gzdeflate(': 'string data [, int level] | string', -\ 'gzencode(': 'string data [, int level [, int encoding_mode]] | string', -\ 'gzeof(': 'resource zp | int', -\ 'gzfile(': 'string filename [, int use_include_path] | array', -\ 'gzgetc(': 'resource zp | string', -\ 'gzgets(': 'resource zp, int length | string', -\ 'gzgetss(': 'resource zp, int length [, string allowable_tags] | string', -\ 'gzinflate(': 'string data [, int length] | string', -\ 'gzopen(': 'string filename, string mode [, int use_include_path] | resource', -\ 'gzpassthru(': 'resource zp | int', -\ 'gzread(': 'resource zp, int length | string', -\ 'gzrewind(': 'resource zp | bool', -\ 'gzseek(': 'resource zp, int offset | int', -\ 'gztell(': 'resource zp | int', -\ 'gzuncompress(': 'string data [, int length] | string', -\ 'gzwrite(': 'resource zp, string string [, int length] | int', -\ '__halt_compiler(': 'void | void', -\ 'hash_algos(': 'void | array', -\ 'hash_file(': 'string algo, string filename [, bool raw_output] | string', -\ 'hash_final(': 'resource context [, bool raw_output] | string', -\ 'hash_hmac_file(': 'string algo, string filename, string key [, bool raw_output] | string', -\ 'hash_hmac(': 'string algo, string data, string key [, bool raw_output] | string', -\ 'hash(': 'string algo, string data [, bool raw_output] | string', -\ 'hash_init(': 'string algo [, int options, string key] | resource', -\ 'hash_update_file(': 'resource context, string filename [, resource context] | bool', -\ 'hash_update(': 'resource context, string data | bool', -\ 'hash_update_stream(': 'resource context, resource handle [, int length] | int', -\ 'header(': 'string string [, bool replace [, int http_response_code]] | void', -\ 'headers_list(': 'void | array', -\ 'headers_sent(': '[string &file [, int &line]] | bool', -\ 'hebrevc(': 'string hebrew_text [, int max_chars_per_line] | string', -\ 'hebrev(': 'string hebrew_text [, int max_chars_per_line] | string', -\ 'hexdec(': 'string hex_string | number', -\ 'highlight_file(': 'string filename [, bool return] | mixed', -\ 'highlight_string(': 'string str [, bool return] | mixed', -\ 'htmlentities(': 'string string [, int quote_style [, string charset]] | string', -\ 'html_entity_decode(': 'string string [, int quote_style [, string charset]] | string', -\ 'htmlspecialchars_decode(': 'string string [, int quote_style] | string', -\ 'htmlspecialchars(': 'string string [, int quote_style [, string charset]] | string', -\ 'http_build_query(': 'array formdata [, string numeric_prefix] | string', -\ 'hw_api_attribute(': '[string name [, string value]] | HW_API_Attribute', -\ 'hw_api_attribute->key(': 'void | string', -\ 'hw_api_attribute->langdepvalue(': 'string language | string', -\ 'hw_api_attribute->value(': 'void | string', -\ 'hw_api_attribute->values(': 'void | array', -\ 'hw_api->checkin(': 'array parameter | bool', -\ 'hw_api->checkout(': 'array parameter | bool', -\ 'hw_api->children(': 'array parameter | array', -\ 'hw_api->content(': 'array parameter | HW_API_Content', -\ 'hw_api_content->mimetype(': 'void | string', -\ 'hw_api_content->read(': 'string buffer, int len | string', -\ 'hw_api->copy(': 'array parameter | hw_api_object', -\ 'hw_api->dbstat(': 'array parameter | hw_api_object', -\ 'hw_api->dcstat(': 'array parameter | hw_api_object', -\ 'hw_api->dstanchors(': 'array parameter | array', -\ 'hw_api->dstofsrcanchor(': 'array parameter | hw_api_object', -\ 'hw_api_error->count(': 'void | int', -\ 'hw_api_error->reason(': 'void | HW_API_Reason', -\ 'hw_api->find(': 'array parameter | array', -\ 'hw_api->ftstat(': 'array parameter | hw_api_object', -\ 'hwapi_hgcsp(': 'string hostname [, int port] | HW_API', -\ 'hw_api->hwstat(': 'array parameter | hw_api_object', -\ 'hw_api->identify(': 'array parameter | bool', -\ 'hw_api->info(': 'array parameter | array', -\ 'hw_api->insertanchor(': 'array parameter | hw_api_object', -\ 'hw_api->insertcollection(': 'array parameter | hw_api_object', -\ 'hw_api->insertdocument(': 'array parameter | hw_api_object', -\ 'hw_api->insert(': 'array parameter | hw_api_object', -\ 'hw_api->link(': 'array parameter | bool', -\ 'hw_api->lock(': 'array parameter | bool', -\ 'hw_api->move(': 'array parameter | bool', -\ 'hw_api_content(': 'string content, string mimetype | HW_API_Content', -\ 'hw_api_object->assign(': 'array parameter | bool', -\ 'hw_api_object->attreditable(': 'array parameter | bool', -\ 'hw_api->objectbyanchor(': 'array parameter | hw_api_object', -\ 'hw_api_object->count(': 'array parameter | int', -\ 'hw_api->object(': 'array parameter | hw_api_object', -\ 'hw_api_object->insert(': 'HW_API_Attribute attribute | bool', -\ 'hw_api_object(': 'array parameter | hw_api_object', -\ 'hw_api_object->remove(': 'string name | bool', -\ 'hw_api_object->title(': 'array parameter | string', -\ 'hw_api_object->value(': 'string name | string', -\ 'hw_api->parents(': 'array parameter | array', -\ 'hw_api_reason->description(': 'void | string', -\ 'hw_api_reason->type(': 'void | HW_API_Reason', -\ 'hw_api->remove(': 'array parameter | bool', -\ 'hw_api->replace(': 'array parameter | hw_api_object', -\ 'hw_api->setcommittedversion(': 'array parameter | hw_api_object', -\ 'hw_api->srcanchors(': 'array parameter | array', -\ 'hw_api->srcsofdst(': 'array parameter | array', -\ 'hw_api->unlock(': 'array parameter | bool', -\ 'hw_api->user(': 'array parameter | hw_api_object', -\ 'hw_api->userlist(': 'array parameter | array', -\ 'hw_array2objrec(': 'array object_array | string', -\ 'hw_changeobject(': 'int link, int objid, array attributes | bool', -\ 'hw_children(': 'int connection, int objectID | array', -\ 'hw_childrenobj(': 'int connection, int objectID | array', -\ 'hw_close(': 'int connection | bool', -\ 'hw_connect(': 'string host, int port [, string username, string password] | int', -\ 'hw_connection_info(': 'int link | void', -\ 'hw_cp(': 'int connection, array object_id_array, int destination_id | int', -\ 'hw_deleteobject(': 'int connection, int object_to_delete | bool', -\ 'hw_docbyanchor(': 'int connection, int anchorID | int', -\ 'hw_docbyanchorobj(': 'int connection, int anchorID | string', -\ 'hw_document_attributes(': 'int hw_document | string', -\ 'hw_document_bodytag(': 'int hw_document [, string prefix] | string', -\ 'hw_document_content(': 'int hw_document | string', -\ 'hw_document_setcontent(': 'int hw_document, string content | bool', -\ 'hw_document_size(': 'int hw_document | int', -\ 'hw_dummy(': 'int link, int id, int msgid | string', -\ 'hw_edittext(': 'int connection, int hw_document | bool', -\ 'hw_error(': 'int connection | int', -\ 'hw_errormsg(': 'int connection | string', -\ 'hw_free_document(': 'int hw_document | bool', -\ 'hw_getanchors(': 'int connection, int objectID | array', -\ 'hw_getanchorsobj(': 'int connection, int objectID | array', -\ 'hw_getandlock(': 'int connection, int objectID | string', -\ 'hw_getchildcoll(': 'int connection, int objectID | array', -\ 'hw_getchildcollobj(': 'int connection, int objectID | array', -\ 'hw_getchilddoccoll(': 'int connection, int objectID | array', -\ 'hw_getchilddoccollobj(': 'int connection, int objectID | array', -\ 'hw_getobjectbyquerycoll(': 'int connection, int objectID, string query, int max_hits | array', -\ 'hw_getobjectbyquerycollobj(': 'int connection, int objectID, string query, int max_hits | array', -\ 'hw_getobjectbyquery(': 'int connection, string query, int max_hits | array', -\ 'hw_getobjectbyqueryobj(': 'int connection, string query, int max_hits | array', -\ 'hw_getobject(': 'int connection, mixed objectID [, string query] | mixed', -\ 'hw_getparents(': 'int connection, int objectID | array', -\ 'hw_getparentsobj(': 'int connection, int objectID | array', -\ 'hw_getrellink(': 'int link, int rootid, int sourceid, int destid | string', -\ 'hw_getremotechildren(': 'int connection, string object_record | mixed', -\ 'hw_getremote(': 'int connection, int objectID | int', -\ 'hw_getsrcbydestobj(': 'int connection, int objectID | array', -\ 'hw_gettext(': 'int connection, int objectID [, mixed rootID/prefix] | int', -\ 'hw_getusername(': 'int connection | string', -\ 'hw_identify(': 'int link, string username, string password | string', -\ 'hw_incollections(': 'int connection, array object_id_array, array collection_id_array, int return_collections | array', -\ 'hw_info(': 'int connection | string', -\ 'hw_inscoll(': 'int connection, int objectID, array object_array | int', -\ 'hw_insdoc(': 'resource connection, int parentID, string object_record [, string text] | int', -\ 'hw_insertanchors(': 'int hwdoc, array anchorecs, array dest [, array urlprefixes] | bool', -\ 'hw_insertdocument(': 'int connection, int parent_id, int hw_document | int', -\ 'hw_insertobject(': 'int connection, string object_rec, string parameter | int', -\ 'hw_mapid(': 'int connection, int server_id, int object_id | int', -\ 'hw_modifyobject(': 'int connection, int object_to_change, array remove, array add [, int mode] | bool', -\ 'hw_mv(': 'int connection, array object_id_array, int source_id, int destination_id | int', -\ 'hw_new_document(': 'string object_record, string document_data, int document_size | int', -\ 'hw_objrec2array(': 'string object_record [, array format] | array', -\ 'hw_output_document(': 'int hw_document | bool', -\ 'hw_pconnect(': 'string host, int port [, string username, string password] | int', -\ 'hw_pipedocument(': 'int connection, int objectID [, array url_prefixes] | int', -\ 'hw_root(': ' | int', -\ 'hw_setlinkroot(': 'int link, int rootid | int', -\ 'hw_stat(': 'int link | string', -\ 'hw_unlock(': 'int connection, int objectID | bool', -\ 'hw_who(': 'int connection | array', -\ 'hypot(': 'float x, float y | float', -\ 'i18n_loc_get_default(': 'void | string', -\ 'i18n_loc_set_default(': 'string name | bool', -\ 'ibase_add_user(': 'resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]] | bool', -\ 'ibase_affected_rows(': '[resource link_identifier] | int', -\ 'ibase_backup(': 'resource service_handle, string source_db, string dest_file [, int options [, bool verbose]] | mixed', -\ 'ibase_blob_add(': 'resource blob_handle, string data | void', -\ 'ibase_blob_cancel(': 'resource blob_handle | bool', -\ 'ibase_blob_close(': 'resource blob_handle | mixed', -\ 'ibase_blob_create(': '[resource link_identifier] | resource', -\ 'ibase_blob_echo(': 'resource link_identifier, string blob_id | bool', -\ 'ibase_blob_get(': 'resource blob_handle, int len | string', -\ 'ibase_blob_import(': 'resource link_identifier, resource file_handle | string', -\ 'ibase_blob_info(': 'resource link_identifier, string blob_id | array', -\ 'ibase_blob_open(': 'resource link_identifier, string blob_id | resource', -\ 'ibase_close(': '[resource connection_id] | bool', -\ 'ibase_commit(': '[resource link_or_trans_identifier] | bool', -\ 'ibase_commit_ret(': '[resource link_or_trans_identifier] | bool', -\ 'ibase_connect(': '[string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role [, int sync]]]]]]]] | resource', -\ 'ibase_db_info(': 'resource service_handle, string db, int action [, int argument] | string', -\ 'ibase_delete_user(': 'resource service_handle, string user_name | bool', -\ 'ibase_drop_db(': '[resource connection] | bool', -\ 'ibase_errcode(': 'void | int', -\ 'ibase_errmsg(': 'void | string', -\ 'ibase_execute(': 'resource query [, mixed bind_arg [, mixed ...]] | resource', -\ 'ibase_fetch_assoc(': 'resource result [, int fetch_flag] | array', -\ 'ibase_fetch_object(': 'resource result_id [, int fetch_flag] | object', -\ 'ibase_fetch_row(': 'resource result_identifier [, int fetch_flag] | array', -\ 'ibase_field_info(': 'resource result, int field_number | array', -\ 'ibase_free_event_handler(': 'resource event | bool', -\ 'ibase_free_query(': 'resource query | bool', -\ 'ibase_free_result(': 'resource result_identifier | bool', -\ 'ibase_gen_id(': 'string generator [, int increment [, resource link_identifier]] | mixed', -\ 'ibase_maintain_db(': 'resource service_handle, string db, int action [, int argument] | bool', -\ 'ibase_modify_user(': 'resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]] | bool', -\ 'ibase_name_result(': 'resource result, string name | bool', -\ 'ibase_num_fields(': 'resource result_id | int', -\ 'ibase_num_params(': 'resource query | int', -\ 'ibase_param_info(': 'resource query, int param_number | array', -\ 'ibase_pconnect(': '[string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role [, int sync]]]]]]]] | resource', -\ 'ibase_prepare(': 'string query | resource', -\ 'ibase_query(': '[resource link_identifier, string query [, int bind_args]] | resource', -\ 'ibase_restore(': 'resource service_handle, string source_file, string dest_db [, int options [, bool verbose]] | mixed', -\ 'ibase_rollback(': '[resource link_or_trans_identifier] | bool', -\ 'ibase_rollback_ret(': '[resource link_or_trans_identifier] | bool', -\ 'ibase_server_info(': 'resource service_handle, int action | string', -\ 'ibase_service_attach(': 'string host, string dba_username, string dba_password | resource', -\ 'ibase_service_detach(': 'resource service_handle | bool', -\ 'ibase_set_event_handler(': 'callback event_handler, string event_name1 [, string event_name2 [, string ...]] | resource', -\ 'ibase_timefmt(': 'string format [, int columntype] | int', -\ 'ibase_trans(': '[int trans_args [, resource link_identifier]] | resource', -\ 'ibase_wait_event(': 'string event_name1 [, string event_name2 [, string ...]] | string', -\ 'icap_close(': 'int icap_stream [, int flags] | int', -\ 'icap_create_calendar(': 'int stream_id, string calendar | string', -\ 'icap_delete_calendar(': 'int stream_id, string calendar | string', -\ 'icap_delete_event(': 'int stream_id, int uid | string', -\ 'icap_fetch_event(': 'int stream_id, int event_id [, int options] | int', -\ 'icap_list_alarms(': 'int stream_id, array date, array time | int', -\ 'icap_list_events(': 'int stream_id, int begin_date [, int end_date] | array', -\ 'icap_open(': 'string calendar, string username, string password, string options | resource', -\ 'icap_rename_calendar(': 'int stream_id, string old_name, string new_name | string', -\ 'icap_reopen(': 'int stream_id, string calendar [, int options] | int', -\ 'icap_snooze(': 'int stream_id, int uid | string', -\ 'icap_store_event(': 'int stream_id, object event | string', -\ 'iconv_get_encoding(': '[string type] | mixed', -\ 'iconv(': 'string in_charset, string out_charset, string str | string', -\ 'iconv_mime_decode_headers(': 'string encoded_headers [, int mode [, string charset]] | array', -\ 'iconv_mime_decode(': 'string encoded_header [, int mode [, string charset]] | string', -\ 'iconv_mime_encode(': 'string field_name, string field_value [, array preferences] | string', -\ 'iconv_set_encoding(': 'string type, string charset | bool', -\ 'iconv_strlen(': 'string str [, string charset] | int', -\ 'iconv_strpos(': 'string haystack, string needle [, int offset [, string charset]] | int', -\ 'iconv_strrpos(': 'string haystack, string needle [, string charset] | int', -\ 'iconv_substr(': 'string str, int offset [, int length [, string charset]] | string', -\ 'id3_get_frame_long_name(': 'string frameId | string', -\ 'id3_get_frame_short_name(': 'string frameId | string', -\ 'id3_get_genre_id(': 'string genre | int', -\ 'id3_get_genre_list(': 'void | array', -\ 'id3_get_genre_name(': 'int genre_id | string', -\ 'id3_get_tag(': 'string filename [, int version] | array', -\ 'id3_get_version(': 'string filename | int', -\ 'id3_remove_tag(': 'string filename [, int version] | bool', -\ 'id3_set_tag(': 'string filename, array tag [, int version] | bool', -\ 'idate(': 'string format [, int timestamp] | int', -\ 'ifx_affected_rows(': 'int result_id | int', -\ 'ifx_blobinfile_mode(': 'int mode | void', -\ 'ifx_byteasvarchar(': 'int mode | void', -\ 'ifx_close(': '[int link_identifier] | int', -\ 'ifx_connect(': '[string database [, string userid [, string password]]] | int', -\ 'ifx_copy_blob(': 'int bid | int', -\ 'ifx_create_blob(': 'int type, int mode, string param | int', -\ 'ifx_create_char(': 'string param | int', -\ 'ifx_do(': 'int result_id | int', -\ 'ifx_error(': 'void | string', -\ 'ifx_errormsg(': '[int errorcode] | string', -\ 'ifx_fetch_row(': 'int result_id [, mixed position] | array', -\ 'ifx_fieldproperties(': 'int result_id | array', -\ 'ifx_fieldtypes(': 'int result_id | array', -\ 'ifx_free_blob(': 'int bid | int', -\ 'ifx_free_char(': 'int bid | int', -\ 'ifx_free_result(': 'int result_id | int', -\ 'ifx_get_blob(': 'int bid | int', -\ 'ifx_get_char(': 'int bid | int', -\ 'ifx_getsqlca(': 'int result_id | array', -\ 'ifx_htmltbl_result(': 'int result_id [, string html_table_options] | int', -\ 'ifx_nullformat(': 'int mode | void', -\ 'ifx_num_fields(': 'int result_id | int', -\ 'ifx_num_rows(': 'int result_id | int', -\ 'ifx_pconnect(': '[string database [, string userid [, string password]]] | int', -\ 'ifx_prepare(': 'string query, int conn_id [, int cursor_def, mixed blobidarray] | int', -\ 'ifx_query(': 'string query, int link_identifier [, int cursor_type [, mixed blobidarray]] | int', -\ 'ifx_textasvarchar(': 'int mode | void', -\ 'ifx_update_blob(': 'int bid, string content | bool', -\ 'ifx_update_char(': 'int bid, string content | int', -\ 'ifxus_close_slob(': 'int bid | int', -\ 'ifxus_create_slob(': 'int mode | int', -\ 'ifxus_free_slob(': 'int bid | int', -\ 'ifxus_open_slob(': 'int bid, int mode | int', -\ 'ifxus_read_slob(': 'int bid, int nbytes | int', -\ 'ifxus_seek_slob(': 'int bid, int mode, int offset | int', -\ 'ifxus_tell_slob(': 'int bid | int', -\ 'ifxus_write_slob(': 'int bid, string content | int', -\ 'ignore_user_abort(': '[bool setting] | int', -\ 'iis_add_server(': 'string path, string comment, string server_ip, int port, string host_name, int rights, int start_server | int', -\ 'iis_get_dir_security(': 'int server_instance, string virtual_path | int', -\ 'iis_get_script_map(': 'int server_instance, string virtual_path, string script_extension | string', -\ 'iis_get_server_by_comment(': 'string comment | int', -\ 'iis_get_server_by_path(': 'string path | int', -\ 'iis_get_server_rights(': 'int server_instance, string virtual_path | int', -\ 'iis_get_service_state(': 'string service_id | int', -\ 'iis_remove_server(': 'int server_instance | int', -\ 'iis_set_app_settings(': 'int server_instance, string virtual_path, string application_scope | int', -\ 'iis_set_dir_security(': 'int server_instance, string virtual_path, int directory_flags | int', -\ 'iis_set_script_map(': 'int server_instance, string virtual_path, string script_extension, string engine_path, int allow_scripting | int', -\ 'iis_set_server_rights(': 'int server_instance, string virtual_path, int directory_flags | int', -\ 'iis_start_server(': 'int server_instance | int', -\ 'iis_start_service(': 'string service_id | int', -\ 'iis_stop_server(': 'int server_instance | int', -\ 'iis_stop_service(': 'string service_id | int', -\ 'image2wbmp(': 'resource image [, string filename [, int threshold]] | int', -\ 'imagealphablending(': 'resource image, bool blendmode | bool', -\ 'imageantialias(': 'resource im, bool on | bool', -\ 'imagearc(': 'resource image, int cx, int cy, int w, int h, int s, int e, int color | bool', -\ 'imagechar(': 'resource image, int font, int x, int y, string c, int color | bool', -\ 'imagecharup(': 'resource image, int font, int x, int y, string c, int color | bool', -\ 'imagecolorallocatealpha(': 'resource image, int red, int green, int blue, int alpha | int', -\ 'imagecolorallocate(': 'resource image, int red, int green, int blue | int', -\ 'imagecolorat(': 'resource image, int x, int y | int', -\ 'imagecolorclosestalpha(': 'resource image, int red, int green, int blue, int alpha | int', -\ 'imagecolorclosest(': 'resource image, int red, int green, int blue | int', -\ 'imagecolorclosesthwb(': 'resource image, int red, int green, int blue | int', -\ 'imagecolordeallocate(': 'resource image, int color | bool', -\ 'imagecolorexactalpha(': 'resource image, int red, int green, int blue, int alpha | int', -\ 'imagecolorexact(': 'resource image, int red, int green, int blue | int', -\ 'imagecolormatch(': 'resource image1, resource image2 | bool', -\ 'imagecolorresolvealpha(': 'resource image, int red, int green, int blue, int alpha | int', -\ 'imagecolorresolve(': 'resource image, int red, int green, int blue | int', -\ 'imagecolorset(': 'resource image, int index, int red, int green, int blue | void', -\ 'imagecolorsforindex(': 'resource image, int index | array', -\ 'imagecolorstotal(': 'resource image | int', -\ 'imagecolortransparent(': 'resource image [, int color] | int', -\ 'imageconvolution(': 'resource image, array matrix3x3, float div, float offset | bool', -\ 'imagecopy(': 'resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h | bool', -\ 'imagecopymergegray(': 'resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct | bool', -\ 'imagecopymerge(': 'resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct | bool', -\ 'imagecopyresampled(': 'resource dst_image, resource src_image, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h | bool', -\ 'imagecopyresized(': 'resource dst_image, resource src_image, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h | bool', -\ 'imagecreatefromgd2(': 'string filename | resource', -\ 'imagecreatefromgd2part(': 'string filename, int srcX, int srcY, int width, int height | resource', -\ 'imagecreatefromgd(': 'string filename | resource', -\ 'imagecreatefromgif(': 'string filename | resource', -\ 'imagecreatefromjpeg(': 'string filename | resource', -\ 'imagecreatefrompng(': 'string filename | resource', -\ 'imagecreatefromstring(': 'string image | resource', -\ 'imagecreatefromwbmp(': 'string filename | resource', -\ 'imagecreatefromxbm(': 'string filename | resource', -\ 'imagecreatefromxpm(': 'string filename | resource', -\ 'imagecreate(': 'int x_size, int y_size | resource', -\ 'imagecreatetruecolor(': 'int x_size, int y_size | resource', -\ 'imagedashedline(': 'resource image, int x1, int y1, int x2, int y2, int color | bool', -\ 'imagedestroy(': 'resource image | bool', -\ 'imageellipse(': 'resource image, int cx, int cy, int w, int h, int color | bool', -\ 'imagefilledarc(': 'resource image, int cx, int cy, int w, int h, int s, int e, int color, int style | bool', -\ 'imagefilledellipse(': 'resource image, int cx, int cy, int w, int h, int color | bool', -\ 'imagefilledpolygon(': 'resource image, array points, int num_points, int color | bool', -\ 'imagefilledrectangle(': 'resource image, int x1, int y1, int x2, int y2, int color | bool', -\ 'imagefill(': 'resource image, int x, int y, int color | bool', -\ 'imagefilltoborder(': 'resource image, int x, int y, int border, int color | bool', -\ 'imagefilter(': 'resource src_im, int filtertype [, int arg1 [, int arg2 [, int arg3]]] | bool', -\ 'imagefontheight(': 'int font | int', -\ 'imagefontwidth(': 'int font | int', -\ 'imageftbbox(': 'float size, float angle, string font_file, string text [, array extrainfo] | array', -\ 'imagefttext(': 'resource image, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo] | array', -\ 'imagegammacorrect(': 'resource image, float inputgamma, float outputgamma | bool', -\ 'imagegd2(': 'resource image [, string filename [, int chunk_size [, int type]]] | bool', -\ 'imagegd(': 'resource image [, string filename] | bool', -\ 'imagegif(': 'resource image [, string filename] | bool', -\ 'imageinterlace(': 'resource image [, int interlace] | int', -\ 'imageistruecolor(': 'resource image | bool', -\ 'imagejpeg(': 'resource image [, string filename [, int quality]] | bool', -\ 'imagelayereffect(': 'resource image, int effect | bool', -\ 'imageline(': 'resource image, int x1, int y1, int x2, int y2, int color | bool', -\ 'imageloadfont(': 'string file | int', -\ 'imagepalettecopy(': 'resource destination, resource source | void', -\ 'imagepng(': 'resource image [, string filename] | bool', -\ 'imagepolygon(': 'resource image, array points, int num_points, int color | bool', -\ 'imagepsbbox(': 'string text, int font, int size [, int space, int tightness, float angle] | array', -\ 'imagepscopyfont(': 'resource fontindex | int', -\ 'imagepsencodefont(': 'resource font_index, string encodingfile | bool', -\ 'imagepsextendfont(': 'int font_index, float extend | bool', -\ 'imagepsfreefont(': 'resource fontindex | bool', -\ 'imagepsloadfont(': 'string filename | resource', -\ 'imagepsslantfont(': 'resource font_index, float slant | bool', -\ 'imagepstext(': 'resource image, string text, resource font, int size, int foreground, int background, int x, int y [, int space, int tightness, float angle, int antialias_steps] | array', -\ 'imagerectangle(': 'resource image, int x1, int y1, int x2, int y2, int col | bool', -\ 'imagerotate(': 'resource src_im, float angle, int bgd_color [, int ignore_transparent] | resource', -\ 'imagesavealpha(': 'resource image, bool saveflag | bool', -\ 'imagesetbrush(': 'resource image, resource brush | bool', -\ 'imagesetpixel(': 'resource image, int x, int y, int color | bool', -\ 'imagesetstyle(': 'resource image, array style | bool', -\ 'imagesetthickness(': 'resource image, int thickness | bool', -\ 'imagesettile(': 'resource image, resource tile | bool', -\ 'imagestring(': 'resource image, int font, int x, int y, string s, int col | bool', -\ 'imagestringup(': 'resource image, int font, int x, int y, string s, int col | bool', -\ 'imagesx(': 'resource image | int', -\ 'imagesy(': 'resource image | int', -\ 'imagetruecolortopalette(': 'resource image, bool dither, int ncolors | bool', -\ 'imagettfbbox(': 'float size, float angle, string fontfile, string text | array', -\ 'imagettftext(': 'resource image, float size, float angle, int x, int y, int color, string fontfile, string text | array', -\ 'imagetypes(': 'void | int', -\ 'image_type_to_extension(': 'int imagetype [, bool include_dot] | string', -\ 'image_type_to_mime_type(': 'int imagetype | string', -\ 'imagewbmp(': 'resource image [, string filename [, int foreground]] | bool', -\ 'imagexbm(': 'resource image, string filename [, int foreground] | bool', -\ 'imap_8bit(': 'string string | string', -\ 'imap_alerts(': 'void | array', -\ 'imap_append(': 'resource imap_stream, string mbox, string message [, string options] | bool', -\ 'imap_base64(': 'string text | string', -\ 'imap_binary(': 'string string | string', -\ 'imap_body(': 'resource imap_stream, int msg_number [, int options] | string', -\ 'imap_bodystruct(': 'resource stream_id, int msg_no, string section | object', -\ 'imap_check(': 'resource imap_stream | object', -\ 'imap_clearflag_full(': 'resource stream, string sequence, string flag [, string options] | bool', -\ 'imap_close(': 'resource imap_stream [, int flag] | bool', -\ 'imap_createmailbox(': 'resource imap_stream, string mbox | bool', -\ 'imap_delete(': 'int imap_stream, int msg_number [, int options] | bool', -\ 'imap_deletemailbox(': 'resource imap_stream, string mbox | bool', -\ 'imap_errors(': 'void | array', -\ 'imap_expunge(': 'resource imap_stream | bool', -\ 'imap_fetchbody(': 'resource imap_stream, int msg_number, string part_number [, int options] | string', -\ 'imap_fetchheader(': 'resource imap_stream, int msgno [, int options] | string', -\ 'imap_fetch_overview(': 'resource imap_stream, string sequence [, int options] | array', -\ 'imap_fetchstructure(': 'resource imap_stream, int msg_number [, int options] | object', -\ 'imap_getacl(': 'resource stream_id, string mailbox | array', -\ 'imap_getmailboxes(': 'resource imap_stream, string ref, string pattern | array', -\ 'imap_get_quota(': 'resource imap_stream, string quota_root | array', -\ 'imap_get_quotaroot(': 'resource imap_stream, string quota_root | array', -\ 'imap_getsubscribed(': 'resource imap_stream, string ref, string pattern | array', -\ 'imap_headerinfo(': 'resource imap_stream, int msg_number [, int fromlength [, int subjectlength [, string defaulthost]]] | object', -\ 'imap_headers(': 'resource imap_stream | array', -\ 'imap_last_error(': 'void | string', -\ 'imap_list(': 'resource imap_stream, string ref, string pattern | array', -\ 'imap_listscan(': 'resource imap_stream, string ref, string pattern, string content | array', -\ 'imap_lsub(': 'resource imap_stream, string ref, string pattern | array', -\ 'imap_mailboxmsginfo(': 'resource imap_stream | object', -\ 'imap_mail_compose(': 'array envelope, array body | string', -\ 'imap_mail_copy(': 'resource imap_stream, string msglist, string mbox [, int options] | bool', -\ 'imap_mail(': 'string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]] | bool', -\ 'imap_mail_move(': 'resource imap_stream, string msglist, string mbox [, int options] | bool', -\ 'imap_mime_header_decode(': 'string text | array', -\ 'imap_msgno(': 'resource imap_stream, int uid | int', -\ 'imap_num_msg(': 'resource imap_stream | int', -\ 'imap_num_recent(': 'resource imap_stream | int', -\ 'imap_open(': 'string mailbox, string username, string password [, int options] | resource', -\ 'imap_ping(': 'resource imap_stream | bool', -\ 'imap_qprint(': 'string string | string', -\ 'imap_renamemailbox(': 'resource imap_stream, string old_mbox, string new_mbox | bool', -\ 'imap_reopen(': 'resource imap_stream, string mailbox [, int options] | bool', -\ 'imap_rfc822_parse_adrlist(': 'string address, string default_host | array', -\ 'imap_rfc822_parse_headers(': 'string headers [, string defaulthost] | object', -\ 'imap_rfc822_write_address(': 'string mailbox, string host, string personal | string', -\ 'imap_search(': 'resource imap_stream, string criteria [, int options [, string charset]] | array', -\ 'imap_setacl(': 'resource stream_id, string mailbox, string id, string rights | bool', -\ 'imap_setflag_full(': 'resource stream, string sequence, string flag [, string options] | bool', -\ 'imap_set_quota(': 'resource imap_stream, string quota_root, int quota_limit | bool', -\ 'imap_sort(': 'resource stream, int criteria, int reverse [, int options [, string search_criteria [, string charset]]] | array', -\ 'imap_status(': 'resource imap_stream, string mailbox, int options | object', -\ 'imap_subscribe(': 'resource imap_stream, string mbox | bool', -\ 'imap_thread(': 'resource stream_id [, int options] | array', -\ 'imap_timeout(': 'int timeout_type [, int timeout] | mixed', -\ 'imap_uid(': 'resource imap_stream, int msgno | int', -\ 'imap_undelete(': 'resource imap_stream, int msg_number [, int flags] | bool', -\ 'imap_unsubscribe(': 'string imap_stream, string mbox | bool', -\ 'imap_utf7_decode(': 'string text | string', -\ 'imap_utf7_encode(': 'string data | string', -\ 'imap_utf8(': 'string mime_encoded_text | string', -\ 'implode(': 'string glue, array pieces | string', -\ 'import_request_variables(': 'string types [, string prefix] | bool', -\ 'in_array(': 'mixed needle, array haystack [, bool strict] | bool', -\ 'inet_ntop(': 'string in_addr | string', -\ 'inet_pton(': 'string address | string', -\ 'ingres_autocommit(': '[resource link] | bool', -\ 'ingres_close(': '[resource link] | bool', -\ 'ingres_commit(': '[resource link] | bool', -\ 'ingres_connect(': '[string database [, string username [, string password]]] | resource', -\ 'ingres_cursor(': '[resource link] | string', -\ 'ingres_errno(': '[resource link] | int', -\ 'ingres_error(': '[resource link] | string', -\ 'ingres_errsqlstate(': '[resource link] | string', -\ 'ingres_fetch_array(': '[int result_type [, resource link]] | array', -\ 'ingres_fetch_object(': '[int result_type [, resource link]] | object', -\ 'ingres_fetch_row(': '[resource link] | array', -\ 'ingres_field_length(': 'int index [, resource link] | int', -\ 'ingres_field_name(': 'int index [, resource link] | string', -\ 'ingres_field_nullable(': 'int index [, resource link] | bool', -\ 'ingres_field_precision(': 'int index [, resource link] | int', -\ 'ingres_field_scale(': 'int index [, resource link] | int', -\ 'ingres_field_type(': 'int index [, resource link] | string', -\ 'ingres_num_fields(': '[resource link] | int', -\ 'ingres_num_rows(': '[resource link] | int', -\ 'ingres_pconnect(': '[string database [, string username [, string password]]] | resource', -\ 'ingres_query(': 'string query [, resource link] | bool', -\ 'ingres_rollback(': '[resource link] | bool', -\ 'ini_get_all(': '[string extension] | array', -\ 'ini_get(': 'string varname | string', -\ 'ini_restore(': 'string varname | void', -\ 'ini_set(': 'string varname, string newvalue | string', -\ 'interface_exists(': 'string interface_name [, bool autoload] | bool', -\ 'intval(': 'mixed var [, int base] | int', -\ 'ip2long(': 'string ip_address | int', -\ 'iptcembed(': 'string iptcdata, string jpeg_file_name [, int spool] | mixed', -\ 'iptcparse(': 'string iptcblock | array', -\ 'ircg_channel_mode(': 'resource connection, string channel, string mode_spec, string nick | bool', -\ 'ircg_disconnect(': 'resource connection, string reason | bool', -\ 'ircg_eval_ecmascript_params(': 'string params | array', -\ 'ircg_fetch_error_msg(': 'resource connection | array', -\ 'ircg_get_username(': 'resource connection | string', -\ 'ircg_html_encode(': 'string html_string [, bool auto_links [, bool conv_br]] | string', -\ 'ircg_ignore_add(': 'resource connection, string nick | void', -\ 'ircg_ignore_del(': 'resource connection, string nick | bool', -\ 'ircg_invite(': 'resource connection, string channel, string nickname | bool', -\ 'ircg_is_conn_alive(': 'resource connection | bool', -\ 'ircg_join(': 'resource connection, string channel [, string key] | bool', -\ 'ircg_kick(': 'resource connection, string channel, string nick, string reason | bool', -\ 'ircg_list(': 'resource connection, string channel | bool', -\ 'ircg_lookup_format_messages(': 'string name | bool', -\ 'ircg_lusers(': 'resource connection | bool', -\ 'ircg_msg(': 'resource connection, string recipient, string message [, bool suppress] | bool', -\ 'ircg_names(': 'int connection, string channel [, string target] | bool', -\ 'ircg_nick(': 'resource connection, string nick | bool', -\ 'ircg_nickname_escape(': 'string nick | string', -\ 'ircg_nickname_unescape(': 'string nick | string', -\ 'ircg_notice(': 'resource connection, string recipient, string message | bool', -\ 'ircg_oper(': 'resource connection, string name, string password | bool', -\ 'ircg_part(': 'resource connection, string channel | bool', -\ 'ircg_pconnect(': 'string username [, string server_ip [, int server_port [, string msg_format [, array ctcp_messages [, array user_settings [, bool bailout_on_trivial]]]]]] | resource', -\ 'ircg_register_format_messages(': 'string name, array messages | bool', -\ 'ircg_set_current(': 'resource connection | bool', -\ 'ircg_set_file(': 'resource connection, string path | bool', -\ 'ircg_set_on_die(': 'resource connection, string host, int port, string data | bool', -\ 'ircg_topic(': 'resource connection, string channel, string new_topic | bool', -\ 'ircg_who(': 'resource connection, string mask [, bool ops_only] | bool', -\ 'ircg_whois(': 'resource connection, string nick | bool', -\ 'is_a(': 'object object, string class_name | bool', -\ 'is_array(': 'mixed var | bool', -\ 'is_bool(': 'mixed var | bool', -\ 'is_callable(': 'mixed var [, bool syntax_only [, string &callable_name]] | bool', -\ 'is_dir(': 'string filename | bool', -\ 'is_executable(': 'string filename | bool', -\ 'is_file(': 'string filename | bool', -\ 'is_finite(': 'float val | bool', -\ 'is_float(': 'mixed var | bool', -\ 'is_infinite(': 'float val | bool', -\ 'is_int(': 'mixed var | bool', -\ 'is_link(': 'string filename | bool', -\ 'is_nan(': 'float val | bool', -\ 'is_null(': 'mixed var | bool', -\ 'is_numeric(': 'mixed var | bool', -\ 'is_object(': 'mixed var | bool', -\ 'is_readable(': 'string filename | bool', -\ 'is_resource(': 'mixed var | bool', -\ 'is_scalar(': 'mixed var | bool', -\ 'isset(': 'mixed var [, mixed var [, ...]] | bool', -\ 'is_soap_fault(': 'mixed obj | bool', -\ 'is_string(': 'mixed var | bool', -\ 'is_subclass_of(': 'mixed object, string class_name | bool', -\ 'is_uploaded_file(': 'string filename | bool', -\ 'is_writable(': 'string filename | bool', -\ 'iterator_count(': 'IteratorAggregate iterator | int', -\ 'iterator_to_array(': 'IteratorAggregate iterator | array', -\ 'java_last_exception_clear(': 'void | void', -\ 'java_last_exception_get(': 'void | object', -\ 'jddayofweek(': 'int julianday [, int mode] | mixed', -\ 'jdmonthname(': 'int julianday, int mode | string', -\ 'jdtofrench(': 'int juliandaycount | string', -\ 'jdtogregorian(': 'int julianday | string', -\ 'jdtojewish(': 'int juliandaycount [, bool hebrew [, int fl]] | string', -\ 'jdtojulian(': 'int julianday | string', -\ 'jdtounix(': 'int jday | int', -\ 'jewishtojd(': 'int month, int day, int year | int', -\ 'jpeg2wbmp(': 'string jpegname, string wbmpname, int d_height, int d_width, int threshold | int', -\ 'juliantojd(': 'int month, int day, int year | int', -\ 'kadm5_chpass_principal(': 'resource handle, string principal, string password | bool', -\ 'kadm5_create_principal(': 'resource handle, string principal [, string password [, array options]] | bool', -\ 'kadm5_delete_principal(': 'resource handle, string principal | bool', -\ 'kadm5_destroy(': 'resource handle | bool', -\ 'kadm5_flush(': 'resource handle | bool', -\ 'kadm5_get_policies(': 'resource handle | array', -\ 'kadm5_get_principal(': 'resource handle, string principal | array', -\ 'kadm5_get_principals(': 'resource handle | array', -\ 'kadm5_init_with_password(': 'string admin_server, string realm, string principal, string password | resource', -\ 'kadm5_modify_principal(': 'resource handle, string principal, array options | bool', -\ 'key(': 'array &array | mixed', -\ 'krsort(': 'array &array [, int sort_flags] | bool', -\ 'ksort(': 'array &array [, int sort_flags] | bool', -\ 'lcg_value(': 'void | float', -\ 'ldap_8859_to_t61(': 'string value | string', -\ 'ldap_add(': 'resource link_identifier, string dn, array entry | bool', -\ 'ldap_bind(': 'resource link_identifier [, string bind_rdn [, string bind_password]] | bool', -\ 'ldap_compare(': 'resource link_identifier, string dn, string attribute, string value | mixed', -\ 'ldap_connect(': '[string hostname [, int port]] | resource', -\ 'ldap_count_entries(': 'resource link_identifier, resource result_identifier | int', -\ 'ldap_delete(': 'resource link_identifier, string dn | bool', -\ 'ldap_dn2ufn(': 'string dn | string', -\ 'ldap_err2str(': 'int errno | string', -\ 'ldap_errno(': 'resource link_identifier | int', -\ 'ldap_error(': 'resource link_identifier | string', -\ 'ldap_explode_dn(': 'string dn, int with_attrib | array', -\ 'ldap_first_attribute(': 'resource link_identifier, resource result_entry_identifier, int &ber_identifier | string', -\ 'ldap_first_entry(': 'resource link_identifier, resource result_identifier | resource', -\ 'ldap_first_reference(': 'resource link, resource result | resource', -\ 'ldap_free_result(': 'resource result_identifier | bool', -\ 'ldap_get_attributes(': 'resource link_identifier, resource result_entry_identifier | array', -\ 'ldap_get_dn(': 'resource link_identifier, resource result_entry_identifier | string', -\ 'ldap_get_entries(': 'resource link_identifier, resource result_identifier | array', -\ 'ldap_get_option(': 'resource link_identifier, int option, mixed &retval | bool', -\ 'ldap_get_values(': 'resource link_identifier, resource result_entry_identifier, string attribute | array', -\ 'ldap_get_values_len(': 'resource link_identifier, resource result_entry_identifier, string attribute | array', -\ 'ldap_list(': 'resource link_identifier, string base_dn, string filter [, array attributes [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]] | resource', -\ 'ldap_mod_add(': 'resource link_identifier, string dn, array entry | bool', -\ 'ldap_mod_del(': 'resource link_identifier, string dn, array entry | bool', -\ 'ldap_modify(': 'resource link_identifier, string dn, array entry | bool', -\ 'ldap_mod_replace(': 'resource link_identifier, string dn, array entry | bool', -\ 'ldap_next_attribute(': 'resource link_identifier, resource result_entry_identifier, resource &ber_identifier | string', -\ 'ldap_next_entry(': 'resource link_identifier, resource result_entry_identifier | resource', -\ 'ldap_next_reference(': 'resource link, resource entry | resource', -\ 'ldap_parse_reference(': 'resource link, resource entry, array &referrals | bool', -\ 'ldap_parse_result(': 'resource link, resource result, int &errcode [, string &matcheddn [, string &errmsg [, array &referrals]]] | bool', -\ 'ldap_read(': 'resource link_identifier, string base_dn, string filter [, array attributes [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]] | resource', -\ 'ldap_rename(': 'resource link_identifier, string dn, string newrdn, string newparent, bool deleteoldrdn | bool', -\ 'ldap_sasl_bind(': 'resource link [, string binddn [, string password [, string sasl_mech [, string sasl_realm [, string sasl_authz_id [, string props]]]]]] | bool', -\ 'ldap_search(': 'resource link_identifier, string base_dn, string filter [, array attributes [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]] | resource', -\ 'ldap_set_option(': 'resource link_identifier, int option, mixed newval | bool', -\ 'ldap_set_rebind_proc(': 'resource link, callback callback | bool', -\ 'ldap_sort(': 'resource link, resource result, string sortfilter | bool', -\ 'ldap_start_tls(': 'resource link | bool', -\ 'ldap_t61_to_8859(': 'string value | string', -\ 'ldap_unbind(': 'resource link_identifier | bool', -\ 'levenshtein(': 'string str1, string str2 [, int cost_ins [, int cost_rep, int cost_del]] | int', -\ 'libxml_clear_errors(': 'void | void', -\ 'libxml_get_errors(': 'void | array', -\ 'libxml_get_last_error(': 'void | LibXMLError', -\ 'libxml_set_streams_context(': 'resource streams_context | void', -\ 'libxml_use_internal_errors(': '[bool use_errors] | bool', -\ 'link(': 'string target, string link | bool', -\ 'linkinfo(': 'string path | int', -\ 'list(': 'mixed varname, mixed ... | void', -\ 'localeconv(': 'void | array', -\ 'localtime(': '[int timestamp [, bool is_associative]] | array', -\ 'log10(': 'float arg | float', -\ 'log1p(': 'float number | float', -\ 'log(': 'float arg [, float base] | float', -\ 'long2ip(': 'int proper_address | string', -\ 'lstat(': 'string filename | array', -\ 'ltrim(': 'string str [, string charlist] | string', -\ 'lzf_compress(': 'string data | string', -\ 'lzf_decompress(': 'string data | string', -\ 'lzf_optimized_for(': 'void | int', -\ 'mail(': 'string to, string subject, string message [, string additional_headers [, string additional_parameters]] | bool', -\ 'mailparse_determine_best_xfer_encoding(': 'resource fp | string', -\ 'mailparse_msg_create(': 'void | resource', -\ 'mailparse_msg_extract_part_file(': 'resource rfc2045, string filename [, callback callbackfunc] | string', -\ 'mailparse_msg_extract_part(': 'resource rfc2045, string msgbody [, callback callbackfunc] | void', -\ 'mailparse_msg_free(': 'resource rfc2045buf | bool', -\ 'mailparse_msg_get_part_data(': 'resource rfc2045 | array', -\ 'mailparse_msg_get_part(': 'resource rfc2045, string mimesection | resource', -\ 'mailparse_msg_get_structure(': 'resource rfc2045 | array', -\ 'mailparse_msg_parse_file(': 'string filename | resource', -\ 'mailparse_msg_parse(': 'resource rfc2045buf, string data | bool', -\ 'mailparse_rfc822_parse_addresses(': 'string addresses | array', -\ 'mailparse_stream_encode(': 'resource sourcefp, resource destfp, string encoding | bool', -\ 'mailparse_uudecode_all(': 'resource fp | array', -\ 'maxdb_connect_errno(': 'void | int', -\ 'maxdb_connect_error(': 'void | string', -\ 'maxdb_debug(': 'string debug | void', -\ 'maxdb_disable_rpl_parse(': 'resource link | bool', -\ 'maxdb_dump_debug_info(': 'resource link | bool', -\ 'maxdb_embedded_connect(': '[string dbname] | resource', -\ 'maxdb_enable_reads_from_master(': 'resource link | bool', -\ 'maxdb_enable_rpl_parse(': 'resource link | bool', -\ 'maxdb_get_client_info(': 'void | string', -\ 'maxdb_get_client_version(': 'void | int', -\ 'maxdb_init(': 'void | resource', -\ 'maxdb_master_query(': 'resource link, string query | bool', -\ 'maxdb_more_results(': 'resource link | bool', -\ 'maxdb_next_result(': 'resource link | bool', -\ 'maxdb_report(': 'int flags | bool', -\ 'maxdb_rollback(': 'resource link | bool', -\ 'maxdb_rpl_parse_enabled(': 'resource link | int', -\ 'maxdb_rpl_probe(': 'resource link | bool', -\ 'maxdb_rpl_query_type(': 'resource link | int', -\ 'maxdb_select_db(': 'resource link, string dbname | bool', -\ 'maxdb_send_query(': 'resource link, string query | bool', -\ 'maxdb_server_end(': 'void | void', -\ 'maxdb_server_init(': '[array server [, array groups]] | bool', -\ 'maxdb_stmt_sqlstate(': 'resource stmt | string', -\ 'max(': 'number arg1, number arg2 [, number ...] | mixed', -\ 'mb_convert_case(': 'string str, int mode [, string encoding] | string', -\ 'mb_convert_encoding(': 'string str, string to_encoding [, mixed from_encoding] | string', -\ 'mb_convert_kana(': 'string str [, string option [, string encoding]] | string', -\ 'mb_convert_variables(': 'string to_encoding, mixed from_encoding, mixed &vars [, mixed &...] | string', -\ 'mb_decode_mimeheader(': 'string str | string', -\ 'mb_decode_numericentity(': 'string str, array convmap [, string encoding] | string', -\ 'mb_detect_encoding(': 'string str [, mixed encoding_list [, bool strict]] | string', -\ 'mb_detect_order(': '[mixed encoding_list] | mixed', -\ 'mb_encode_mimeheader(': 'string str [, string charset [, string transfer_encoding [, string linefeed]]] | string', -\ 'mb_encode_numericentity(': 'string str, array convmap [, string encoding] | string', -\ 'mb_ereg(': 'string pattern, string string [, array regs] | int', -\ 'mb_eregi(': 'string pattern, string string [, array regs] | int', -\ 'mb_eregi_replace(': 'string pattern, string replace, string string [, string option] | string', -\ 'mb_ereg_match(': 'string pattern, string string [, string option] | bool', -\ 'mb_ereg_replace(': 'string pattern, string replacement, string string [, string option] | string', -\ 'mb_ereg_search_getpos(': 'void | int', -\ 'mb_ereg_search_getregs(': 'void | array', -\ 'mb_ereg_search(': '[string pattern [, string option]] | bool', -\ 'mb_ereg_search_init(': 'string string [, string pattern [, string option]] | bool', -\ 'mb_ereg_search_pos(': '[string pattern [, string option]] | array', -\ 'mb_ereg_search_regs(': '[string pattern [, string option]] | array', -\ 'mb_ereg_search_setpos(': 'int position | bool', -\ 'mb_get_info(': '[string type] | mixed', -\ 'mb_http_input(': '[string type] | mixed', -\ 'mb_http_output(': '[string encoding] | mixed', -\ 'mb_internal_encoding(': '[string encoding] | mixed', -\ 'mb_language(': '[string language] | mixed', -\ 'mb_list_encodings(': 'void | array', -\ 'mb_output_handler(': 'string contents, int status | string', -\ 'mb_parse_str(': 'string encoded_string [, array &result] | bool', -\ 'mb_preferred_mime_name(': 'string encoding | string', -\ 'mb_regex_encoding(': '[string encoding] | mixed', -\ 'mb_regex_set_options(': '[string options] | string', -\ 'mb_send_mail(': 'string to, string subject, string message [, string additional_headers [, string additional_parameter]] | bool', -\ 'mb_split(': 'string pattern, string string [, int limit] | array', -\ 'mb_strcut(': 'string str, int start [, int length [, string encoding]] | string', -\ 'mb_strimwidth(': 'string str, int start, int width [, string trimmarker [, string encoding]] | string', -\ 'mb_strlen(': 'string str [, string encoding] | int', -\ 'mb_strpos(': 'string haystack, string needle [, int offset [, string encoding]] | int', -\ 'mb_strrpos(': 'string haystack, string needle [, string encoding] | int', -\ 'mb_strtolower(': 'string str [, string encoding] | string', -\ 'mb_strtoupper(': 'string str [, string encoding] | string', -\ 'mb_strwidth(': 'string str [, string encoding] | int', -\ 'mb_substitute_character(': '[mixed substrchar] | mixed', -\ 'mb_substr_count(': 'string haystack, string needle [, string encoding] | int', -\ 'mb_substr(': 'string str, int start [, int length [, string encoding]] | string', -\ 'mcal_append_event(': 'int mcal_stream | int', -\ 'mcal_close(': 'int mcal_stream [, int flags] | bool', -\ 'mcal_create_calendar(': 'int stream, string calendar | bool', -\ 'mcal_date_compare(': 'int a_year, int a_month, int a_day, int b_year, int b_month, int b_day | int', -\ 'mcal_date_valid(': 'int year, int month, int day | bool', -\ 'mcal_day_of_week(': 'int year, int month, int day | int', -\ 'mcal_day_of_year(': 'int year, int month, int day | int', -\ 'mcal_days_in_month(': 'int month, int leap_year | int', -\ 'mcal_delete_calendar(': 'int stream, string calendar | bool', -\ 'mcal_delete_event(': 'int mcal_stream, int event_id | bool', -\ 'mcal_event_add_attribute(': 'int stream, string attribute, string value | bool', -\ 'mcal_event_init(': 'int stream | void', -\ 'mcal_event_set_alarm(': 'int stream, int alarm | void', -\ 'mcal_event_set_category(': 'int stream, string category | void', -\ 'mcal_event_set_class(': 'int stream, int class | void', -\ 'mcal_event_set_description(': 'int stream, string description | void', -\ 'mcal_event_set_end(': 'int stream, int year, int month, int day [, int hour [, int min [, int sec]]] | void', -\ 'mcal_event_set_recur_daily(': 'int stream, int year, int month, int day, int interval | void', -\ 'mcal_event_set_recur_monthly_mday(': 'int stream, int year, int month, int day, int interval | void', -\ 'mcal_event_set_recur_monthly_wday(': 'int stream, int year, int month, int day, int interval | void', -\ 'mcal_event_set_recur_none(': 'int stream | void', -\ 'mcal_event_set_recur_weekly(': 'int stream, int year, int month, int day, int interval, int weekdays | void', -\ 'mcal_event_set_recur_yearly(': 'int stream, int year, int month, int day, int interval | void', -\ 'mcal_event_set_start(': 'int stream, int year, int month, int day [, int hour [, int min [, int sec]]] | void', -\ 'mcal_event_set_title(': 'int stream, string title | void', -\ 'mcal_expunge(': 'int stream | bool', -\ 'mcal_fetch_current_stream_event(': 'int stream | object', -\ 'mcal_fetch_event(': 'int mcal_stream, int event_id [, int options] | object', -\ 'mcal_is_leap_year(': 'int year | bool', -\ 'mcal_list_alarms(': 'int mcal_stream [, int begin_year, int begin_month, int begin_day, int end_year, int end_month, int end_day] | array', -\ 'mcal_list_events(': 'int mcal_stream [, int begin_year, int begin_month, int begin_day, int end_year, int end_month, int end_day] | array', -\ 'mcal_next_recurrence(': 'int stream, int weekstart, array next | object', -\ 'mcal_open(': 'string calendar, string username, string password [, int options] | int', -\ 'mcal_popen(': 'string calendar, string username, string password [, int options] | int', -\ 'mcal_rename_calendar(': 'int stream, string old_name, string new_name | bool', -\ 'mcal_reopen(': 'int mcal_stream, string calendar [, int options] | bool', -\ 'mcal_snooze(': 'int stream_id, int event_id | bool', -\ 'mcal_store_event(': 'int mcal_stream | int', -\ 'mcal_time_valid(': 'int hour, int minutes, int seconds | bool', -\ 'mcal_week_of_year(': 'int day, int month, int year | int', -\ 'm_checkstatus(': 'resource conn, int identifier | int', -\ 'm_completeauthorizations(': 'resource conn, int &array | int', -\ 'm_connect(': 'resource conn | int', -\ 'm_connectionerror(': 'resource conn | string', -\ 'mcrypt_cbc(': 'int cipher, string key, string data, int mode [, string iv] | string', -\ 'mcrypt_cfb(': 'int cipher, string key, string data, int mode, string iv | string', -\ 'mcrypt_create_iv(': 'int size [, int source] | string', -\ 'mcrypt_decrypt(': 'string cipher, string key, string data, string mode [, string iv] | string', -\ 'mcrypt_ecb(': 'int cipher, string key, string data, int mode | string', -\ 'mcrypt_enc_get_algorithms_name(': 'resource td | string', -\ 'mcrypt_enc_get_block_size(': 'resource td | int', -\ 'mcrypt_enc_get_iv_size(': 'resource td | int', -\ 'mcrypt_enc_get_key_size(': 'resource td | int', -\ 'mcrypt_enc_get_modes_name(': 'resource td | string', -\ 'mcrypt_enc_get_supported_key_sizes(': 'resource td | array', -\ 'mcrypt_enc_is_block_algorithm(': 'resource td | bool', -\ 'mcrypt_enc_is_block_algorithm_mode(': 'resource td | bool', -\ 'mcrypt_enc_is_block_mode(': 'resource td | bool', -\ 'mcrypt_encrypt(': 'string cipher, string key, string data, string mode [, string iv] | string', -\ 'mcrypt_enc_self_test(': 'resource td | int', -\ 'mcrypt_generic_deinit(': 'resource td | bool', -\ 'mcrypt_generic_end(': 'resource td | bool', -\ 'mcrypt_generic(': 'resource td, string data | string', -\ 'mcrypt_generic_init(': 'resource td, string key, string iv | int', -\ 'mcrypt_get_block_size(': 'int cipher | int', -\ 'mcrypt_get_cipher_name(': 'int cipher | string', -\ 'mcrypt_get_iv_size(': 'string cipher, string mode | int', -\ 'mcrypt_get_key_size(': 'int cipher | int', -\ 'mcrypt_list_algorithms(': '[string lib_dir] | array', -\ 'mcrypt_list_modes(': '[string lib_dir] | array', -\ 'mcrypt_module_close(': 'resource td | bool', -\ 'mcrypt_module_get_algo_block_size(': 'string algorithm [, string lib_dir] | int', -\ 'mcrypt_module_get_algo_key_size(': 'string algorithm [, string lib_dir] | int', -\ 'mcrypt_module_get_supported_key_sizes(': 'string algorithm [, string lib_dir] | array', -\ 'mcrypt_module_is_block_algorithm(': 'string algorithm [, string lib_dir] | bool', -\ 'mcrypt_module_is_block_algorithm_mode(': 'string mode [, string lib_dir] | bool', -\ 'mcrypt_module_is_block_mode(': 'string mode [, string lib_dir] | bool', -\ 'mcrypt_module_open(': 'string algorithm, string algorithm_directory, string mode, string mode_directory | resource', -\ 'mcrypt_module_self_test(': 'string algorithm [, string lib_dir] | bool', -\ 'mcrypt_ofb(': 'int cipher, string key, string data, int mode, string iv | string', -\ 'md5_file(': 'string filename [, bool raw_output] | string', -\ 'md5(': 'string str [, bool raw_output] | string', -\ 'mdecrypt_generic(': 'resource td, string data | string', -\ 'm_deletetrans(': 'resource conn, int identifier | bool', -\ 'm_destroyconn(': 'resource conn | bool', -\ 'm_destroyengine(': 'void | void', -\ 'memcache_debug(': 'bool on_off | bool', -\ 'memory_get_usage(': 'void | int', -\ 'metaphone(': 'string str [, int phones] | string', -\ 'method_exists(': 'object object, string method_name | bool', -\ 'm_getcellbynum(': 'resource conn, int identifier, int column, int row | string', -\ 'm_getcell(': 'resource conn, int identifier, string column, int row | string', -\ 'm_getcommadelimited(': 'resource conn, int identifier | string', -\ 'm_getheader(': 'resource conn, int identifier, int column_num | string', -\ 'mhash_count(': 'void | int', -\ 'mhash_get_block_size(': 'int hash | int', -\ 'mhash_get_hash_name(': 'int hash | string', -\ 'mhash(': 'int hash, string data [, string key] | string', -\ 'mhash_keygen_s2k(': 'int hash, string password, string salt, int bytes | string', -\ 'microtime(': '[bool get_as_float] | mixed', -\ 'mime_content_type(': 'string filename | string', -\ 'ming_keypress(': 'string str | int', -\ 'ming_setcubicthreshold(': 'int threshold | void', -\ 'ming_setscale(': 'int scale | void', -\ 'ming_useConstants(': 'int use | void', -\ 'ming_useswfversion(': 'int version | void', -\ 'min(': 'number arg1, number arg2 [, number ...] | mixed', -\ 'm_initconn(': 'void | resource', -\ 'm_initengine(': 'string location | int', -\ 'm_iscommadelimited(': 'resource conn, int identifier | int', -\ 'mkdir(': 'string pathname [, int mode [, bool recursive [, resource context]]] | bool', -\ 'mktime(': '[int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] | int', -\ 'm_maxconntimeout(': 'resource conn, int secs | bool', -\ 'm_monitor(': 'resource conn | int', -\ 'm_numcolumns(': 'resource conn, int identifier | int', -\ 'm_numrows(': 'resource conn, int identifier | int', -\ 'money_format(': 'string format, float number | string', -\ 'move_uploaded_file(': 'string filename, string destination | bool', -\ 'm_parsecommadelimited(': 'resource conn, int identifier | int', -\ 'm_responsekeys(': 'resource conn, int identifier | array', -\ 'm_responseparam(': 'resource conn, int identifier, string key | string', -\ 'm_returnstatus(': 'resource conn, int identifier | int', -\ 'msession_connect(': 'string host, string port | bool', -\ 'msession_count(': 'void | int', -\ 'msession_create(': 'string session | bool', -\ 'msession_destroy(': 'string name | bool', -\ 'msession_disconnect(': 'void | void', -\ 'msession_find(': 'string name, string value | array', -\ 'msession_get_array(': 'string session | array', -\ 'msession_get_data(': 'string session | string', -\ 'msession_get(': 'string session, string name, string value | string', -\ 'msession_inc(': 'string session, string name | string', -\ 'msession_list(': 'void | array', -\ 'msession_listvar(': 'string name | array', -\ 'msession_lock(': 'string name | int', -\ 'msession_plugin(': 'string session, string val [, string param] | string', -\ 'msession_randstr(': 'int param | string', -\ 'msession_set_array(': 'string session, array tuples | void', -\ 'msession_set_data(': 'string session, string value | bool', -\ 'msession_set(': 'string session, string name, string value | bool', -\ 'msession_timeout(': 'string session [, int param] | int', -\ 'msession_uniq(': 'int param | string', -\ 'msession_unlock(': 'string session, int key | int', -\ 'm_setblocking(': 'resource conn, int tf | int', -\ 'm_setdropfile(': 'resource conn, string directory | int', -\ 'm_setip(': 'resource conn, string host, int port | int', -\ 'm_setssl_cafile(': 'resource conn, string cafile | int', -\ 'm_setssl_files(': 'resource conn, string sslkeyfile, string sslcertfile | int', -\ 'm_setssl(': 'resource conn, string host, int port | int', -\ 'm_settimeout(': 'resource conn, int seconds | int', -\ 'msg_get_queue(': 'int key [, int perms] | resource', -\ 'msg_receive(': 'resource queue, int desiredmsgtype, int &msgtype, int maxsize, mixed &message [, bool unserialize [, int flags [, int &errorcode]]] | bool', -\ 'msg_remove_queue(': 'resource queue | bool', -\ 'msg_send(': 'resource queue, int msgtype, mixed message [, bool serialize [, bool blocking [, int &errorcode]]] | bool', -\ 'msg_set_queue(': 'resource queue, array data | bool', -\ 'msg_stat_queue(': 'resource queue | array', -\ 'msql_affected_rows(': 'resource result | int', -\ 'msql_close(': '[resource link_identifier] | bool', -\ 'msql_connect(': '[string hostname] | resource', -\ 'msql_create_db(': 'string database_name [, resource link_identifier] | bool', -\ 'msql_data_seek(': 'resource result, int row_number | bool', -\ 'msql_db_query(': 'string database, string query [, resource link_identifier] | resource', -\ 'msql_drop_db(': 'string database_name [, resource link_identifier] | bool', -\ 'msql_error(': 'void | string', -\ 'msql_fetch_array(': 'resource result [, int result_type] | array', -\ 'msql_fetch_field(': 'resource result [, int field_offset] | object', -\ 'msql_fetch_object(': 'resource result | object', -\ 'msql_fetch_row(': 'resource result | array', -\ 'msql_field_flags(': 'resource result, int field_offset | string', -\ 'msql_field_len(': 'resource result, int field_offset | int', -\ 'msql_field_name(': 'resource result, int field_offset | string', -\ 'msql_field_seek(': 'resource result, int field_offset | bool', -\ 'msql_field_table(': 'resource result, int field_offset | int', -\ 'msql_field_type(': 'resource result, int field_offset | string', -\ 'msql_free_result(': 'resource result | bool', -\ 'msql_list_dbs(': '[resource link_identifier] | resource', -\ 'msql_list_fields(': 'string database, string tablename [, resource link_identifier] | resource', -\ 'msql_list_tables(': 'string database [, resource link_identifier] | resource', -\ 'msql_num_fields(': 'resource result | int', -\ 'msql_num_rows(': 'resource query_identifier | int', -\ 'msql_pconnect(': '[string hostname] | resource', -\ 'msql_query(': 'string query [, resource link_identifier] | resource', -\ 'msql_result(': 'resource result, int row [, mixed field] | string', -\ 'msql_select_db(': 'string database_name [, resource link_identifier] | bool', -\ 'm_sslcert_gen_hash(': 'string filename | string', -\ 'mssql_bind(': 'resource stmt, string param_name, mixed &var, int type [, int is_output [, int is_null [, int maxlen]]] | bool', -\ 'mssql_close(': '[resource link_identifier] | bool', -\ 'mssql_connect(': '[string servername [, string username [, string password]]] | resource', -\ 'mssql_data_seek(': 'resource result_identifier, int row_number | bool', -\ 'mssql_execute(': 'resource stmt [, bool skip_results] | mixed', -\ 'mssql_fetch_array(': 'resource result [, int result_type] | array', -\ 'mssql_fetch_assoc(': 'resource result_id | array', -\ 'mssql_fetch_batch(': 'resource result_index | int', -\ 'mssql_fetch_field(': 'resource result [, int field_offset] | object', -\ 'mssql_fetch_object(': 'resource result | object', -\ 'mssql_fetch_row(': 'resource result | array', -\ 'mssql_field_length(': 'resource result [, int offset] | int', -\ 'mssql_field_name(': 'resource result [, int offset] | string', -\ 'mssql_field_seek(': 'resource result, int field_offset | bool', -\ 'mssql_field_type(': 'resource result [, int offset] | string', -\ 'mssql_free_result(': 'resource result | bool', -\ 'mssql_free_statement(': 'resource statement | bool', -\ 'mssql_get_last_message(': 'void | string', -\ 'mssql_guid_string(': 'string binary [, int short_format] | string', -\ 'mssql_init(': 'string sp_name [, resource conn_id] | resource', -\ 'mssql_min_error_severity(': 'int severity | void', -\ 'mssql_min_message_severity(': 'int severity | void', -\ 'mssql_next_result(': 'resource result_id | bool', -\ 'mssql_num_fields(': 'resource result | int', -\ 'mssql_num_rows(': 'resource result | int', -\ 'mssql_pconnect(': '[string servername [, string username [, string password]]] | resource', -\ 'mssql_query(': 'string query [, resource link_identifier [, int batch_size]] | mixed', -\ 'mssql_result(': 'resource result, int row, mixed field | string', -\ 'mssql_rows_affected(': 'resource conn_id | int', -\ 'mssql_select_db(': 'string database_name [, resource link_identifier] | bool', -\ 'mt_getrandmax(': 'void | int', -\ 'mt_rand(': '[int min, int max] | int', -\ 'm_transactionssent(': 'resource conn | int', -\ 'm_transinqueue(': 'resource conn | int', -\ 'm_transkeyval(': 'resource conn, int identifier, string key, string value | int', -\ 'm_transnew(': 'resource conn | int', -\ 'm_transsend(': 'resource conn, int identifier | int', -\ 'mt_srand(': '[int seed] | void', -\ 'muscat_close(': 'resource muscat_handle | void', -\ 'muscat_get(': 'resource muscat_handle | string', -\ 'muscat_give(': 'resource muscat_handle, string string | void', -\ 'muscat_setup(': 'int size [, string muscat_dir] | resource', -\ 'muscat_setup_net(': 'string muscat_host | resource', -\ 'm_uwait(': 'int microsecs | int', -\ 'm_validateidentifier(': 'resource conn, int tf | int', -\ 'm_verifyconnection(': 'resource conn, int tf | bool', -\ 'm_verifysslcert(': 'resource conn, int tf | bool', -\ 'mysql_affected_rows(': '[resource link_identifier] | int', -\ 'mysql_change_user(': 'string user, string password [, string database [, resource link_identifier]] | int', -\ 'mysql_client_encoding(': '[resource link_identifier] | string', -\ 'mysql_close(': '[resource link_identifier] | bool', -\ 'mysql_connect(': '[string server [, string username [, string password [, bool new_link [, int client_flags]]]]] | resource', -\ 'mysql_create_db(': 'string database_name [, resource link_identifier] | bool', -\ 'mysql_data_seek(': 'resource result, int row_number | bool', -\ 'mysql_db_name(': 'resource result, int row [, mixed field] | string', -\ 'mysql_db_query(': 'string database, string query [, resource link_identifier] | resource', -\ 'mysql_drop_db(': 'string database_name [, resource link_identifier] | bool', -\ 'mysql_errno(': '[resource link_identifier] | int', -\ 'mysql_error(': '[resource link_identifier] | string', -\ 'mysql_escape_string(': 'string unescaped_string | string', -\ 'mysql_fetch_array(': 'resource result [, int result_type] | array', -\ 'mysql_fetch_assoc(': 'resource result | array', -\ 'mysql_fetch_field(': 'resource result [, int field_offset] | object', -\ 'mysql_fetch_lengths(': 'resource result | array', -\ 'mysql_fetch_object(': 'resource result | object', -\ 'mysql_fetch_row(': 'resource result | array', -\ 'mysql_field_flags(': 'resource result, int field_offset | string', -\ 'mysql_field_len(': 'resource result, int field_offset | int', -\ 'mysql_field_name(': 'resource result, int field_offset | string', -\ 'mysql_field_seek(': 'resource result, int field_offset | bool', -\ 'mysql_field_table(': 'resource result, int field_offset | string', -\ 'mysql_field_type(': 'resource result, int field_offset | string', -\ 'mysql_free_result(': 'resource result | bool', -\ 'mysql_get_client_info(': 'void | string', -\ 'mysql_get_host_info(': '[resource link_identifier] | string', -\ 'mysql_get_proto_info(': '[resource link_identifier] | int', -\ 'mysql_get_server_info(': '[resource link_identifier] | string', -\ 'mysqli_connect_errno(': 'void | int', -\ 'mysqli_connect_error(': 'void | string', -\ 'mysqli_debug(': 'string debug | bool', -\ 'mysqli_disable_rpl_parse(': 'mysqli link | bool', -\ 'mysqli_dump_debug_info(': 'mysqli link | bool', -\ 'mysqli_embedded_connect(': '[string dbname] | mysqli', -\ 'mysqli_enable_reads_from_master(': 'mysqli link | bool', -\ 'mysqli_enable_rpl_parse(': 'mysqli link | bool', -\ 'mysqli_get_client_info(': 'void | string', -\ 'mysqli_get_client_version(': 'void | int', -\ 'mysqli_init(': 'void | mysqli', -\ 'mysqli_master_query(': 'mysqli link, string query | bool', -\ 'mysqli_more_results(': 'mysqli link | bool', -\ 'mysqli_next_result(': 'mysqli link | bool', -\ 'mysql_info(': '[resource link_identifier] | string', -\ 'mysql_insert_id(': '[resource link_identifier] | int', -\ 'mysqli_report(': 'int flags | bool', -\ 'mysqli_rollback(': 'mysqli link | bool', -\ 'mysqli_rpl_parse_enabled(': 'mysqli link | int', -\ 'mysqli_rpl_probe(': 'mysqli link | bool', -\ 'mysqli_select_db(': 'mysqli link, string dbname | bool', -\ 'mysqli_server_end(': 'void | void', -\ 'mysqli_server_init(': '[array server [, array groups]] | bool', -\ 'mysqli_set_charset(': 'mysqli link, string charset | bool', -\ 'mysqli_stmt_sqlstate(': 'mysqli_stmt stmt | string', -\ 'mysql_list_dbs(': '[resource link_identifier] | resource', -\ 'mysql_list_fields(': 'string database_name, string table_name [, resource link_identifier] | resource', -\ 'mysql_list_processes(': '[resource link_identifier] | resource', -\ 'mysql_list_tables(': 'string database [, resource link_identifier] | resource', -\ 'mysql_num_fields(': 'resource result | int', -\ 'mysql_num_rows(': 'resource result | int', -\ 'mysql_pconnect(': '[string server [, string username [, string password [, int client_flags]]]] | resource', -\ 'mysql_ping(': '[resource link_identifier] | bool', -\ 'mysql_query(': 'string query [, resource link_identifier] | resource', -\ 'mysql_real_escape_string(': 'string unescaped_string [, resource link_identifier] | string', -\ 'mysql_result(': 'resource result, int row [, mixed field] | string', -\ 'mysql_select_db(': 'string database_name [, resource link_identifier] | bool', -\ 'mysql_stat(': '[resource link_identifier] | string', -\ 'mysql_tablename(': 'resource result, int i | string', -\ 'mysql_thread_id(': '[resource link_identifier] | int', -\ 'mysql_unbuffered_query(': 'string query [, resource link_identifier] | resource', -\ 'natcasesort(': 'array &array | bool', -\ 'natsort(': 'array &array | bool', -\ 'ncurses_addch(': 'int ch | int', -\ 'ncurses_addchnstr(': 'string s, int n | int', -\ 'ncurses_addchstr(': 'string s | int', -\ 'ncurses_addnstr(': 'string s, int n | int', -\ 'ncurses_addstr(': 'string text | int', -\ 'ncurses_assume_default_colors(': 'int fg, int bg | int', -\ 'ncurses_attroff(': 'int attributes | int', -\ 'ncurses_attron(': 'int attributes | int', -\ 'ncurses_attrset(': 'int attributes | int', -\ 'ncurses_baudrate(': 'void | int', -\ 'ncurses_beep(': 'void | int', -\ 'ncurses_bkgd(': 'int attrchar | int', -\ 'ncurses_bkgdset(': 'int attrchar | void', -\ 'ncurses_border(': 'int left, int right, int top, int bottom, int tl_corner, int tr_corner, int bl_corner, int br_corner | int', -\ 'ncurses_bottom_panel(': 'resource panel | int', -\ 'ncurses_can_change_color(': 'void | bool', -\ 'ncurses_cbreak(': 'void | bool', -\ 'ncurses_clear(': 'void | bool', -\ 'ncurses_clrtobot(': 'void | bool', -\ 'ncurses_clrtoeol(': 'void | bool', -\ 'ncurses_color_content(': 'int color, int &r, int &g, int &b | int', -\ 'ncurses_color_set(': 'int pair | int', -\ 'ncurses_curs_set(': 'int visibility | int', -\ 'ncurses_define_key(': 'string definition, int keycode | int', -\ 'ncurses_def_prog_mode(': 'void | bool', -\ 'ncurses_def_shell_mode(': 'void | bool', -\ 'ncurses_delay_output(': 'int milliseconds | int', -\ 'ncurses_delch(': 'void | bool', -\ 'ncurses_deleteln(': 'void | bool', -\ 'ncurses_del_panel(': 'resource panel | bool', -\ 'ncurses_delwin(': 'resource window | bool', -\ 'ncurses_doupdate(': 'void | bool', -\ 'ncurses_echochar(': 'int character | int', -\ 'ncurses_echo(': 'void | bool', -\ 'ncurses_end(': 'void | int', -\ 'ncurses_erasechar(': 'void | string', -\ 'ncurses_erase(': 'void | bool', -\ 'ncurses_filter(': 'void | void', -\ 'ncurses_flash(': 'void | bool', -\ 'ncurses_flushinp(': 'void | bool', -\ 'ncurses_getch(': 'void | int', -\ 'ncurses_getmaxyx(': 'resource window, int &y, int &x | void', -\ 'ncurses_getmouse(': 'array &mevent | bool', -\ 'ncurses_getyx(': 'resource window, int &y, int &x | void', -\ 'ncurses_halfdelay(': 'int tenth | int', -\ 'ncurses_has_colors(': 'void | bool', -\ 'ncurses_has_ic(': 'void | bool', -\ 'ncurses_has_il(': 'void | bool', -\ 'ncurses_has_key(': 'int keycode | int', -\ 'ncurses_hide_panel(': 'resource panel | int', -\ 'ncurses_hline(': 'int charattr, int n | int', -\ 'ncurses_inch(': 'void | string', -\ 'ncurses_init_color(': 'int color, int r, int g, int b | int', -\ 'ncurses_init(': 'void | void', -\ 'ncurses_init_pair(': 'int pair, int fg, int bg | int', -\ 'ncurses_insch(': 'int character | int', -\ 'ncurses_insdelln(': 'int count | int', -\ 'ncurses_insertln(': 'void | bool', -\ 'ncurses_insstr(': 'string text | int', -\ 'ncurses_instr(': 'string &buffer | int', -\ 'ncurses_isendwin(': 'void | bool', -\ 'ncurses_keyok(': 'int keycode, bool enable | int', -\ 'ncurses_keypad(': 'resource window, bool bf | int', -\ 'ncurses_killchar(': 'void | string', -\ 'ncurses_longname(': 'void | string', -\ 'ncurses_meta(': 'resource window, bool 8bit | int', -\ 'ncurses_mouseinterval(': 'int milliseconds | int', -\ 'ncurses_mousemask(': 'int newmask, int &oldmask | int', -\ 'ncurses_mouse_trafo(': 'int &y, int &x, bool toscreen | bool', -\ 'ncurses_move(': 'int y, int x | int', -\ 'ncurses_move_panel(': 'resource panel, int startx, int starty | int', -\ 'ncurses_mvaddch(': 'int y, int x, int c | int', -\ 'ncurses_mvaddchnstr(': 'int y, int x, string s, int n | int', -\ 'ncurses_mvaddchstr(': 'int y, int x, string s | int', -\ 'ncurses_mvaddnstr(': 'int y, int x, string s, int n | int', -\ 'ncurses_mvaddstr(': 'int y, int x, string s | int', -\ 'ncurses_mvcur(': 'int old_y, int old_x, int new_y, int new_x | int', -\ 'ncurses_mvdelch(': 'int y, int x | int', -\ 'ncurses_mvgetch(': 'int y, int x | int', -\ 'ncurses_mvhline(': 'int y, int x, int attrchar, int n | int', -\ 'ncurses_mvinch(': 'int y, int x | int', -\ 'ncurses_mvvline(': 'int y, int x, int attrchar, int n | int', -\ 'ncurses_mvwaddstr(': 'resource window, int y, int x, string text | int', -\ 'ncurses_napms(': 'int milliseconds | int', -\ 'ncurses_newpad(': 'int rows, int cols | resource', -\ 'ncurses_new_panel(': 'resource window | resource', -\ 'ncurses_newwin(': 'int rows, int cols, int y, int x | resource', -\ 'ncurses_nl(': 'void | bool', -\ 'ncurses_nocbreak(': 'void | bool', -\ 'ncurses_noecho(': 'void | bool', -\ 'ncurses_nonl(': 'void | bool', -\ 'ncurses_noqiflush(': 'void | void', -\ 'ncurses_noraw(': 'void | bool', -\ 'ncurses_pair_content(': 'int pair, int &f, int &b | int', -\ 'ncurses_panel_above(': 'resource panel | resource', -\ 'ncurses_panel_below(': 'resource panel | resource', -\ 'ncurses_panel_window(': 'resource panel | resource', -\ 'ncurses_pnoutrefresh(': 'resource pad, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol | int', -\ 'ncurses_prefresh(': 'resource pad, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol | int', -\ 'ncurses_putp(': 'string text | int', -\ 'ncurses_qiflush(': 'void | void', -\ 'ncurses_raw(': 'void | bool', -\ 'ncurses_refresh(': 'int ch | int', -\ 'ncurses_replace_panel(': 'resource panel, resource window | int', -\ 'ncurses_reset_prog_mode(': 'void | int', -\ 'ncurses_reset_shell_mode(': 'void | int', -\ 'ncurses_resetty(': 'void | bool', -\ 'ncurses_savetty(': 'void | bool', -\ 'ncurses_scr_dump(': 'string filename | int', -\ 'ncurses_scr_init(': 'string filename | int', -\ 'ncurses_scrl(': 'int count | int', -\ 'ncurses_scr_restore(': 'string filename | int', -\ 'ncurses_scr_set(': 'string filename | int', -\ 'ncurses_show_panel(': 'resource panel | int', -\ 'ncurses_slk_attr(': 'void | bool', -\ 'ncurses_slk_attroff(': 'int intarg | int', -\ 'ncurses_slk_attron(': 'int intarg | int', -\ 'ncurses_slk_attrset(': 'int intarg | int', -\ 'ncurses_slk_clear(': 'void | bool', -\ 'ncurses_slk_color(': 'int intarg | int', -\ 'ncurses_slk_init(': 'int format | bool', -\ 'ncurses_slk_noutrefresh(': 'void | bool', -\ 'ncurses_slk_refresh(': 'void | bool', -\ 'ncurses_slk_restore(': 'void | bool', -\ 'ncurses_slk_set(': 'int labelnr, string label, int format | bool', -\ 'ncurses_slk_touch(': 'void | bool', -\ 'ncurses_standend(': 'void | int', -\ 'ncurses_standout(': 'void | int', -\ 'ncurses_start_color(': 'void | int', -\ 'ncurses_termattrs(': 'void | bool', -\ 'ncurses_termname(': 'void | string', -\ 'ncurses_timeout(': 'int millisec | void', -\ 'ncurses_top_panel(': 'resource panel | int', -\ 'ncurses_typeahead(': 'int fd | int', -\ 'ncurses_ungetch(': 'int keycode | int', -\ 'ncurses_ungetmouse(': 'array mevent | bool', -\ 'ncurses_update_panels(': 'void | void', -\ 'ncurses_use_default_colors(': 'void | bool', -\ 'ncurses_use_env(': 'bool flag | void', -\ 'ncurses_use_extended_names(': 'bool flag | int', -\ 'ncurses_vidattr(': 'int intarg | int', -\ 'ncurses_vline(': 'int charattr, int n | int', -\ 'ncurses_waddch(': 'resource window, int ch | int', -\ 'ncurses_waddstr(': 'resource window, string str [, int n] | int', -\ 'ncurses_wattroff(': 'resource window, int attrs | int', -\ 'ncurses_wattron(': 'resource window, int attrs | int', -\ 'ncurses_wattrset(': 'resource window, int attrs | int', -\ 'ncurses_wborder(': 'resource window, int left, int right, int top, int bottom, int tl_corner, int tr_corner, int bl_corner, int br_corner | int', -\ 'ncurses_wclear(': 'resource window | int', -\ 'ncurses_wcolor_set(': 'resource window, int color_pair | int', -\ 'ncurses_werase(': 'resource window | int', -\ 'ncurses_wgetch(': 'resource window | int', -\ 'ncurses_whline(': 'resource window, int charattr, int n | int', -\ 'ncurses_wmouse_trafo(': 'resource window, int &y, int &x, bool toscreen | bool', -\ 'ncurses_wmove(': 'resource window, int y, int x | int', -\ 'ncurses_wnoutrefresh(': 'resource window | int', -\ 'ncurses_wrefresh(': 'resource window | int', -\ 'ncurses_wstandend(': 'resource window | int', -\ 'ncurses_wstandout(': 'resource window | int', -\ 'ncurses_wvline(': 'resource window, int charattr, int n | int', -\ 'newt_bell(': 'void | void', -\ 'newt_button_bar(': 'array &buttons | resource', -\ 'newt_button(': 'int left, int top, string text | resource', -\ 'newt_centered_window(': 'int width, int height [, string title] | int', -\ 'newt_checkbox_get_value(': 'resource checkbox | string', -\ 'newt_checkbox(': 'int left, int top, string text, string def_value [, string seq] | resource', -\ 'newt_checkbox_set_flags(': 'resource checkbox, int flags, int sense | void', -\ 'newt_checkbox_set_value(': 'resource checkbox, string value | void', -\ 'newt_checkbox_tree_add_item(': 'resource checkboxtree, string text, mixed data, int flags, int index [, int ...] | void', -\ 'newt_checkbox_tree_find_item(': 'resource checkboxtree, mixed data | array', -\ 'newt_checkbox_tree_get_current(': 'resource checkboxtree | mixed', -\ 'newt_checkbox_tree_get_entry_value(': 'resource checkboxtree, mixed data | string', -\ 'newt_checkbox_tree_get_multi_selection(': 'resource checkboxtree, string seqnum | array', -\ 'newt_checkbox_tree_get_selection(': 'resource checkboxtree | array', -\ 'newt_checkbox_tree(': 'int left, int top, int height [, int flags] | resource', -\ 'newt_checkbox_tree_multi(': 'int left, int top, int height, string seq [, int flags] | resource', -\ 'newt_checkbox_tree_set_current(': 'resource checkboxtree, mixed data | void', -\ 'newt_checkbox_tree_set_entry(': 'resource checkboxtree, mixed data, string text | void', -\ 'newt_checkbox_tree_set_entry_value(': 'resource checkboxtree, mixed data, string value | void', -\ 'newt_checkbox_tree_set_width(': 'resource checkbox_tree, int width | void', -\ 'newt_clear_key_buffer(': 'void | void', -\ 'newt_cls(': 'void | void', -\ 'newt_compact_button(': 'int left, int top, string text | resource', -\ 'newt_component_add_callback(': 'resource component, mixed func_name, mixed data | void', -\ 'newt_component_takes_focus(': 'resource component, bool takes_focus | void', -\ 'newt_create_grid(': 'int cols, int rows | resource', -\ 'newt_cursor_off(': 'void | void', -\ 'newt_cursor_on(': 'void | void', -\ 'newt_delay(': 'int microseconds | void', -\ 'newt_draw_form(': 'resource form | void', -\ 'newt_draw_root_text(': 'int left, int top, string text | void', -\ 'newt_entry_get_value(': 'resource entry | string', -\ 'newt_entry(': 'int left, int top, int width [, string init_value [, int flags]] | resource', -\ 'newt_entry_set_filter(': 'resource entry, callback filter, mixed data | void', -\ 'newt_entry_set_flags(': 'resource entry, int flags, int sense | void', -\ 'newt_entry_set(': 'resource entry, string value [, bool cursor_at_end] | void', -\ 'newt_finished(': 'void | int', -\ 'newt_form_add_component(': 'resource form, resource component | void', -\ 'newt_form_add_components(': 'resource form, array components | void', -\ 'newt_form_add_host_key(': 'resource form, int key | void', -\ 'newt_form_destroy(': 'resource form | void', -\ 'newt_form_get_current(': 'resource form | resource', -\ 'newt_form(': '[resource vert_bar [, string help [, int flags]]] | resource', -\ 'newt_form_run(': 'resource form, array &exit_struct | void', -\ 'newt_form_set_background(': 'resource from, int background | void', -\ 'newt_form_set_height(': 'resource form, int height | void', -\ 'newt_form_set_size(': 'resource form | void', -\ 'newt_form_set_timer(': 'resource form, int milliseconds | void', -\ 'newt_form_set_width(': 'resource form, int width | void', -\ 'newt_form_watch_fd(': 'resource form, resource stream [, int flags] | void', -\ 'newt_get_screen_size(': 'int &cols, int &rows | void', -\ 'newt_grid_add_components_to_form(': 'resource grid, resource form, bool recurse | void', -\ 'newt_grid_basic_window(': 'resource text, resource middle, resource buttons | resource', -\ 'newt_grid_free(': 'resource grid, bool recurse | void', -\ 'newt_grid_get_size(': 'resouce grid, int &width, int &height | void', -\ 'newt_grid_h_close_stacked(': 'int element1_type, resource element1 [, int ... [, resource ...]] | resource', -\ 'newt_grid_h_stacked(': 'int element1_type, resource element1 [, int ... [, resource ...]] | resource', -\ 'newt_grid_place(': 'resource grid, int left, int top | void', -\ 'newt_grid_set_field(': 'resource grid, int col, int row, int type, resource val, int pad_left, int pad_top, int pad_right, int pad_bottom, int anchor [, int flags] | void', -\ 'newt_grid_simple_window(': 'resource text, resource middle, resource buttons | resource', -\ 'newt_grid_v_close_stacked(': 'int element1_type, resource element1 [, int ... [, resource ...]] | resource', -\ 'newt_grid_v_stacked(': 'int element1_type, resource element1 [, int ... [, resource ...]] | resource', -\ 'newt_grid_wrapped_window_at(': 'resource grid, string title, int left, int top | void', -\ 'newt_grid_wrapped_window(': 'resource grid, string title | void', -\ 'newt_init(': 'void | int', -\ 'newt_label(': 'int left, int top, string text | resource', -\ 'newt_label_set_text(': 'resource label, string text | void', -\ 'newt_listbox_append_entry(': 'resource listbox, string text, mixed data | void', -\ 'newt_listbox_clear(': 'resource listobx | void', -\ 'newt_listbox_clear_selection(': 'resource listbox | void', -\ 'newt_listbox_delete_entry(': 'resource listbox, mixed key | void', -\ 'newt_listbox_get_current(': 'resource listbox | string', -\ 'newt_listbox_get_selection(': 'resource listbox | array', -\ 'newt_listbox(': 'int left, int top, int height [, int flags] | resource', -\ 'newt_listbox_insert_entry(': 'resource listbox, string text, mixed data, mixed key | void', -\ 'newt_listbox_item_count(': 'resource listbox | int', -\ 'newt_listbox_select_item(': 'resource listbox, mixed key, int sense | void', -\ 'newt_listbox_set_current_by_key(': 'resource listbox, mixed key | void', -\ 'newt_listbox_set_current(': 'resource listbox, int num | void', -\ 'newt_listbox_set_data(': 'resource listbox, int num, mixed data | void', -\ 'newt_listbox_set_entry(': 'resource listbox, int num, string text | void', -\ 'newt_listbox_set_width(': 'resource listbox, int width | void', -\ 'newt_listitem_get_data(': 'resource item | mixed', -\ 'newt_listitem(': 'int left, int top, string text, bool is_default, resouce prev_item, mixed data [, int flags] | resource', -\ 'newt_listitem_set(': 'resource item, string text | void', -\ 'newt_open_window(': 'int left, int top, int width, int height [, string title] | int', -\ 'newt_pop_help_line(': 'void | void', -\ 'newt_pop_window(': 'void | void', -\ 'newt_push_help_line(': '[string text] | void', -\ 'newt_radiobutton(': 'int left, int top, string text, bool is_default [, resource prev_button] | resource', -\ 'newt_radio_get_current(': 'resource set_member | resource', -\ 'newt_redraw_help_line(': 'void | void', -\ 'newt_reflow_text(': 'string text, int width, int flex_down, int flex_up, int &actual_width, int &actual_height | string', -\ 'newt_refresh(': 'void | void', -\ 'newt_resize_screen(': '[bool redraw] | void', -\ 'newt_resume(': 'void | void', -\ 'newt_run_form(': 'resource form | resource', -\ 'newt_scale(': 'int left, int top, int width, int full_value | resource', -\ 'newt_scale_set(': 'resource scale, int amount | void', -\ 'newt_scrollbar_set(': 'resource scrollbar, int where, int total | void', -\ 'newt_set_help_callback(': 'mixed function | void', -\ 'newt_set_suspend_callback(': 'callback function, mixed data | void', -\ 'newt_suspend(': 'void | void', -\ 'newt_texbox_set_text(': 'resource textbox, string text | void', -\ 'newt_textbox_get_num_lines(': 'resource textbox | int', -\ 'newt_textbox(': 'int left, int top, int width, int height [, int flags] | resource', -\ 'newt_textbox_reflowed(': 'int left, int top, char *text, int width, int flex_down, int flex_up [, int flags] | resource', -\ 'newt_textbox_set_height(': 'resource textbox, int height | void', -\ 'newt_vertical_scrollbar(': 'int left, int top, int height [, int normal_colorset [, int thumb_colorset]] | resource', -\ 'newt_wait_for_key(': 'void | void', -\ 'newt_win_choice(': 'string title, string button1_text, string button2_text, string format [, mixed args [, mixed ...]] | int', -\ 'newt_win_entries(': 'string title, string text, int suggested_width, int flex_down, int flex_up, int data_width, array &items, string button1 [, string ...] | int', -\ 'newt_win_menu(': 'string title, string text, int suggestedWidth, int flexDown, int flexUp, int maxListHeight, array items, int &listItem [, string button1 [, string ...]] | int', -\ 'newt_win_message(': 'string title, string button_text, string format [, mixed args [, mixed ...]] | void', -\ 'newt_win_messagev(': 'string title, string button_text, string format, array args | void', -\ 'newt_win_ternary(': 'string title, string button1_text, string button2_text, string button3_text, string format [, mixed args [, mixed ...]] | int', -\ 'next(': 'array &array | mixed', -\ 'ngettext(': 'string msgid1, string msgid2, int n | string', -\ 'nl2br(': 'string string | string', -\ 'nl_langinfo(': 'int item | string', -\ 'notes_body(': 'string server, string mailbox, int msg_number | array', -\ 'notes_copy_db(': 'string from_database_name, string to_database_name | bool', -\ 'notes_create_db(': 'string database_name | bool', -\ 'notes_create_note(': 'string database_name, string form_name | bool', -\ 'notes_drop_db(': 'string database_name | bool', -\ 'notes_find_note(': 'string database_name, string name [, string type] | int', -\ 'notes_header_info(': 'string server, string mailbox, int msg_number | object', -\ 'notes_list_msgs(': 'string db | bool', -\ 'notes_mark_read(': 'string database_name, string user_name, string note_id | bool', -\ 'notes_mark_unread(': 'string database_name, string user_name, string note_id | bool', -\ 'notes_nav_create(': 'string database_name, string name | bool', -\ 'notes_search(': 'string database_name, string keywords | array', -\ 'notes_unread(': 'string database_name, string user_name | array', -\ 'notes_version(': 'string database_name | float', -\ 'nsapi_request_headers(': 'void | array', -\ 'nsapi_response_headers(': 'void | array', -\ 'nsapi_virtual(': 'string uri | bool', -\ 'number_format(': 'float number [, int decimals [, string dec_point, string thousands_sep]] | string', -\ 'ob_clean(': 'void | void', -\ 'ob_end_clean(': 'void | bool', -\ 'ob_end_flush(': 'void | bool', -\ 'ob_flush(': 'void | void', -\ 'ob_get_clean(': 'void | string', -\ 'ob_get_contents(': 'void | string', -\ 'ob_get_flush(': 'void | string', -\ 'ob_get_length(': 'void | int', -\ 'ob_get_level(': 'void | int', -\ 'ob_gzhandler(': 'string buffer, int mode | string', -\ 'ob_iconv_handler(': 'string contents, int status | string', -\ 'ob_implicit_flush(': '[int flag] | void', -\ 'ob_list_handlers(': 'void | array', -\ 'ob_start(': '[callback output_callback [, int chunk_size [, bool erase]]] | bool', -\ 'ob_tidyhandler(': 'string input [, int mode] | string', -\ 'oci_bind_by_name(': 'resource stmt, string ph_name, mixed &variable [, int maxlength [, int type]] | bool', -\ 'oci_cancel(': 'resource stmt | bool', -\ 'oci_close(': 'resource connection | bool', -\ 'oci_commit(': 'resource connection | bool', -\ 'oci_connect(': 'string username, string password [, string db [, string charset [, int session_mode]]] | resource', -\ 'oci_define_by_name(': 'resource statement, string column_name, mixed &variable [, int type] | bool', -\ 'oci_error(': '[resource source] | array', -\ 'oci_execute(': 'resource stmt [, int mode] | bool', -\ 'oci_fetch_all(': 'resource statement, array &output [, int skip [, int maxrows [, int flags]]] | int', -\ 'oci_fetch_array(': 'resource statement [, int mode] | array', -\ 'oci_fetch_assoc(': 'resource statement | array', -\ 'oci_fetch(': 'resource statement | bool', -\ 'ocifetchinto(': 'resource statement, array &result [, int mode] | int', -\ 'oci_fetch_object(': 'resource statement | object', -\ 'oci_fetch_row(': 'resource statement | array', -\ 'oci_field_is_null(': 'resource stmt, mixed field | bool', -\ 'oci_field_name(': 'resource statement, int field | string', -\ 'oci_field_precision(': 'resource statement, int field | int', -\ 'oci_field_scale(': 'resource statement, int field | int', -\ 'oci_field_size(': 'resource stmt, mixed field | int', -\ 'oci_field_type(': 'resource stmt, int field | mixed', -\ 'oci_field_type_raw(': 'resource statement, int field | int', -\ 'oci_free_statement(': 'resource statement | bool', -\ 'oci_internal_debug(': 'int onoff | void', -\ 'oci_lob_copy(': 'OCI-Lob lob_to, OCI-Lob lob_from [, int length] | bool', -\ 'oci_lob_is_equal(': 'OCI-Lob lob1, OCI-Lob lob2 | bool', -\ 'oci_new_collection(': 'resource connection, string tdo [, string schema] | OCI-Collection', -\ 'oci_new_connect(': 'string username, string password [, string db [, string charset [, int session_mode]]] | resource', -\ 'oci_new_cursor(': 'resource connection | resource', -\ 'oci_new_descriptor(': 'resource connection [, int type] | OCI-Lob', -\ 'oci_num_fields(': 'resource statement | int', -\ 'oci_num_rows(': 'resource stmt | int', -\ 'oci_parse(': 'resource connection, string query | resource', -\ 'oci_password_change(': 'resource connection, string username, string old_password, string new_password | bool', -\ 'oci_pconnect(': 'string username, string password [, string db [, string charset [, int session_mode]]] | resource', -\ 'oci_result(': 'resource statement, mixed field | mixed', -\ 'oci_rollback(': 'resource connection | bool', -\ 'oci_server_version(': 'resource connection | string', -\ 'oci_set_prefetch(': 'resource statement [, int rows] | bool', -\ 'oci_statement_type(': 'resource statement | string', -\ 'octdec(': 'string octal_string | number', -\ 'odbc_autocommit(': 'resource connection_id [, bool OnOff] | mixed', -\ 'odbc_binmode(': 'resource result_id, int mode | bool', -\ 'odbc_close_all(': 'void | void', -\ 'odbc_close(': 'resource connection_id | void', -\ 'odbc_columnprivileges(': 'resource connection_id, string qualifier, string owner, string table_name, string column_name | resource', -\ 'odbc_columns(': 'resource connection_id [, string qualifier [, string schema [, string table_name [, string column_name]]]] | resource', -\ 'odbc_commit(': 'resource connection_id | bool', -\ 'odbc_connect(': 'string dsn, string user, string password [, int cursor_type] | resource', -\ 'odbc_cursor(': 'resource result_id | string', -\ 'odbc_data_source(': 'resource connection_id, int fetch_type | array', -\ 'odbc_do(': 'resource conn_id, string query | resource', -\ 'odbc_error(': '[resource connection_id] | string', -\ 'odbc_errormsg(': '[resource connection_id] | string', -\ 'odbc_exec(': 'resource connection_id, string query_string [, int flags] | resource', -\ 'odbc_execute(': 'resource result_id [, array parameters_array] | bool', -\ 'odbc_fetch_array(': 'resource result [, int rownumber] | array', -\ 'odbc_fetch_into(': 'resource result_id, array &result_array [, int rownumber] | int', -\ 'odbc_fetch_object(': 'resource result [, int rownumber] | object', -\ 'odbc_fetch_row(': 'resource result_id [, int row_number] | bool', -\ 'odbc_field_len(': 'resource result_id, int field_number | int', -\ 'odbc_field_name(': 'resource result_id, int field_number | string', -\ 'odbc_field_num(': 'resource result_id, string field_name | int', -\ 'odbc_field_precision(': 'resource result_id, int field_number | int', -\ 'odbc_field_scale(': 'resource result_id, int field_number | int', -\ 'odbc_field_type(': 'resource result_id, int field_number | string', -\ 'odbc_foreignkeys(': 'resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table | resource', -\ 'odbc_free_result(': 'resource result_id | bool', -\ 'odbc_gettypeinfo(': 'resource connection_id [, int data_type] | resource', -\ 'odbc_longreadlen(': 'resource result_id, int length | bool', -\ 'odbc_next_result(': 'resource result_id | bool', -\ 'odbc_num_fields(': 'resource result_id | int', -\ 'odbc_num_rows(': 'resource result_id | int', -\ 'odbc_pconnect(': 'string dsn, string user, string password [, int cursor_type] | resource', -\ 'odbc_prepare(': 'resource connection_id, string query_string | resource', -\ 'odbc_primarykeys(': 'resource connection_id, string qualifier, string owner, string table | resource', -\ 'odbc_procedurecolumns(': 'resource connection_id [, string qualifier, string owner, string proc, string column] | resource', -\ 'odbc_procedures(': 'resource connection_id [, string qualifier, string owner, string name] | resource', -\ 'odbc_result_all(': 'resource result_id [, string format] | int', -\ 'odbc_result(': 'resource result_id, mixed field | mixed', -\ 'odbc_rollback(': 'resource connection_id | bool', -\ 'odbc_setoption(': 'resource id, int function, int option, int param | bool', -\ 'odbc_specialcolumns(': 'resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable | resource', -\ 'odbc_statistics(': 'resource connection_id, string qualifier, string owner, string table_name, int unique, int accuracy | resource', -\ 'odbc_tableprivileges(': 'resource connection_id, string qualifier, string owner, string name | resource', -\ 'odbc_tables(': 'resource connection_id [, string qualifier [, string owner [, string name [, string types]]]] | resource', -\ 'openal_buffer_create(': 'void | resource', -\ 'openal_buffer_data(': 'resource buffer, int format, string data, int freq | bool', -\ 'openal_buffer_destroy(': 'resource buffer | bool', -\ 'openal_buffer_get(': 'resource buffer, int property | int', -\ 'openal_buffer_loadwav(': 'resource buffer, string wavfile | bool', -\ 'openal_context_create(': 'resource device | resource', -\ 'openal_context_current(': 'resource context | bool', -\ 'openal_context_destroy(': 'resource context | bool', -\ 'openal_context_process(': 'resource context | bool', -\ 'openal_context_suspend(': 'resource context | bool', -\ 'openal_device_close(': 'resource device | bool', -\ 'openal_device_open(': '[string device_desc] | resource', -\ 'openal_listener_get(': 'int property | mixed', -\ 'openal_listener_set(': 'int property, mixed setting | bool', -\ 'openal_source_create(': 'void | resource', -\ 'openal_source_destroy(': 'resource source | bool', -\ 'openal_source_get(': 'resource source, int property | mixed', -\ 'openal_source_pause(': 'resource source | bool', -\ 'openal_source_play(': 'resource source | bool', -\ 'openal_source_rewind(': 'resource source | bool', -\ 'openal_source_set(': 'resource source, int property, mixed setting | bool', -\ 'openal_source_stop(': 'resource source | bool', -\ 'openal_stream(': 'resource source, int format, int rate | resource', -\ 'opendir(': 'string path [, resource context] | resource', -\ 'openlog(': 'string ident, int option, int facility | bool', -\ 'openssl_csr_export(': 'resource csr, string &out [, bool notext] | bool', -\ 'openssl_csr_export_to_file(': 'resource csr, string outfilename [, bool notext] | bool', -\ 'openssl_csr_new(': 'array dn, resource &privkey [, array configargs [, array extraattribs]] | mixed', -\ 'openssl_csr_sign(': 'mixed csr, mixed cacert, mixed priv_key, int days [, array configargs [, int serial]] | resource', -\ 'openssl_error_string(': 'void | string', -\ 'openssl_free_key(': 'resource key_identifier | void', -\ 'openssl_open(': 'string sealed_data, string &open_data, string env_key, mixed priv_key_id | bool', -\ 'openssl_pkcs7_decrypt(': 'string infilename, string outfilename, mixed recipcert [, mixed recipkey] | bool', -\ 'openssl_pkcs7_encrypt(': 'string infile, string outfile, mixed recipcerts, array headers [, int flags [, int cipherid]] | bool', -\ 'openssl_pkcs7_sign(': 'string infilename, string outfilename, mixed signcert, mixed privkey, array headers [, int flags [, string extracerts]] | bool', -\ 'openssl_pkcs7_verify(': 'string filename, int flags [, string outfilename [, array cainfo [, string extracerts]]] | mixed', -\ 'openssl_pkey_export(': 'mixed key, string &out [, string passphrase [, array configargs]] | bool', -\ 'openssl_pkey_export_to_file(': 'mixed key, string outfilename [, string passphrase [, array configargs]] | bool', -\ 'openssl_pkey_free(': 'resource key | void', -\ 'openssl_pkey_get_private(': 'mixed key [, string passphrase] | resource', -\ 'openssl_pkey_get_public(': 'mixed certificate | resource', -\ 'openssl_pkey_new(': '[array configargs] | resource', -\ 'openssl_private_decrypt(': 'string data, string &decrypted, mixed key [, int padding] | bool', -\ 'openssl_private_encrypt(': 'string data, string &crypted, mixed key [, int padding] | bool', -\ 'openssl_public_decrypt(': 'string data, string &decrypted, mixed key [, int padding] | bool', -\ 'openssl_public_encrypt(': 'string data, string &crypted, mixed key [, int padding] | bool', -\ 'openssl_seal(': 'string data, string &sealed_data, array &env_keys, array pub_key_ids | int', -\ 'openssl_sign(': 'string data, string &signature, mixed priv_key_id [, int signature_alg] | bool', -\ 'openssl_verify(': 'string data, string signature, mixed pub_key_id | int', -\ 'openssl_x509_check_private_key(': 'mixed cert, mixed key | bool', -\ 'openssl_x509_checkpurpose(': 'mixed x509cert, int purpose [, array cainfo [, string untrustedfile]] | int', -\ 'openssl_x509_export(': 'mixed x509, string &output [, bool notext] | bool', -\ 'openssl_x509_export_to_file(': 'mixed x509, string outfilename [, bool notext] | bool', -\ 'openssl_x509_free(': 'resource x509cert | void', -\ 'openssl_x509_parse(': 'mixed x509cert [, bool shortnames] | array', -\ 'openssl_x509_read(': 'mixed x509certdata | resource', -\ 'ora_bind(': 'resource cursor, string PHP_variable_name, string SQL_parameter_name, int length [, int type] | bool', -\ 'ora_close(': 'resource cursor | bool', -\ 'ora_columnname(': 'resource cursor, int column | string', -\ 'ora_columnsize(': 'resource cursor, int column | int', -\ 'ora_columntype(': 'resource cursor, int column | string', -\ 'ora_commit(': 'resource conn | bool', -\ 'ora_commitoff(': 'resource conn | bool', -\ 'ora_commiton(': 'resource conn | bool', -\ 'ora_do(': 'resource conn, string query | resource', -\ 'ora_errorcode(': '[resource cursor_or_connection] | int', -\ 'ora_error(': '[resource cursor_or_connection] | string', -\ 'ora_exec(': 'resource cursor | bool', -\ 'ora_fetch(': 'resource cursor | bool', -\ 'ora_fetch_into(': 'resource cursor, array &result [, int flags] | int', -\ 'ora_getcolumn(': 'resource cursor, int column | string', -\ 'ora_logoff(': 'resource connection | bool', -\ 'ora_logon(': 'string user, string password | resource', -\ 'ora_numcols(': 'resource cursor | int', -\ 'ora_numrows(': 'resource cursor | int', -\ 'ora_open(': 'resource connection | resource', -\ 'ora_parse(': 'resource cursor, string sql_statement [, int defer] | bool', -\ 'ora_plogon(': 'string user, string password | resource', -\ 'ora_rollback(': 'resource connection | bool', -\ 'OrbitEnum(': 'string id | new', -\ 'OrbitObject(': 'string ior | new', -\ 'OrbitStruct(': 'string id | new', -\ 'ord(': 'string string | int', -\ 'output_add_rewrite_var(': 'string name, string value | bool', -\ 'output_reset_rewrite_vars(': 'void | bool', -\ 'overload(': '[string class_name] | void', -\ 'override_function(': 'string function_name, string function_args, string function_code | bool', -\ 'ovrimos_close(': 'int connection | void', -\ 'ovrimos_commit(': 'int connection_id | bool', -\ 'ovrimos_connect(': 'string host, string db, string user, string password | int', -\ 'ovrimos_cursor(': 'int result_id | string', -\ 'ovrimos_exec(': 'int connection_id, string query | int', -\ 'ovrimos_execute(': 'int result_id [, array parameters_array] | bool', -\ 'ovrimos_fetch_into(': 'int result_id, array &result_array [, string how [, int rownumber]] | bool', -\ 'ovrimos_fetch_row(': 'int result_id [, int how [, int row_number]] | bool', -\ 'ovrimos_field_len(': 'int result_id, int field_number | int', -\ 'ovrimos_field_name(': 'int result_id, int field_number | string', -\ 'ovrimos_field_num(': 'int result_id, string field_name | int', -\ 'ovrimos_field_type(': 'int result_id, int field_number | int', -\ 'ovrimos_free_result(': 'int result_id | bool', -\ 'ovrimos_longreadlen(': 'int result_id, int length | bool', -\ 'ovrimos_num_fields(': 'int result_id | int', -\ 'ovrimos_num_rows(': 'int result_id | int', -\ 'ovrimos_prepare(': 'int connection_id, string query | int', -\ 'ovrimos_result_all(': 'int result_id [, string format] | int', -\ 'ovrimos_result(': 'int result_id, mixed field | string', -\ 'ovrimos_rollback(': 'int connection_id | bool', -\ 'pack(': 'string format [, mixed args [, mixed ...]] | string', -\ 'parse_ini_file(': 'string filename [, bool process_sections] | array', -\ 'parsekit_compile_file(': 'string filename [, array &errors [, int options]] | array', -\ 'parsekit_compile_string(': 'string phpcode [, array &errors [, int options]] | array', -\ 'parsekit_func_arginfo(': 'mixed function | array', -\ 'parse_str(': 'string str [, array &arr] | void', -\ 'parse_url(': 'string url | array', -\ 'passthru(': 'string command [, int &return_var] | void', -\ 'pathinfo(': 'string path [, int options] | mixed', -\ 'pclose(': 'resource handle | int', -\ 'pcntl_alarm(': 'int seconds | int', -\ 'pcntl_exec(': 'string path [, array args [, array envs]] | void', -\ 'pcntl_fork(': 'void | int', -\ 'pcntl_getpriority(': '[int pid [, int process_identifier]] | int', -\ 'pcntl_setpriority(': 'int priority [, int pid [, int process_identifier]] | bool', -\ 'pcntl_signal(': 'int signo, callback handle [, bool restart_syscalls] | bool', -\ 'pcntl_wait(': 'int &status [, int options] | int', -\ 'pcntl_waitpid(': 'int pid, int &status [, int options] | int', -\ 'pcntl_wexitstatus(': 'int status | int', -\ 'pcntl_wifexited(': 'int status | bool', -\ 'pcntl_wifsignaled(': 'int status | bool', -\ 'pcntl_wifstopped(': 'int status | bool', -\ 'pcntl_wstopsig(': 'int status | int', -\ 'pcntl_wtermsig(': 'int status | int', -\ 'pdf_activate_item(': 'resource pdfdoc, int id | bool', -\ 'pdf_add_launchlink(': 'resource pdfdoc, float llx, float lly, float urx, float ury, string filename | bool', -\ 'pdf_add_locallink(': 'resource pdfdoc, float lowerleftx, float lowerlefty, float upperrightx, float upperrighty, int page, string dest | bool', -\ 'pdf_add_nameddest(': 'resource pdfdoc, string name, string optlist | bool', -\ 'pdf_add_note(': 'resource pdfdoc, float llx, float lly, float urx, float ury, string contents, string title, string icon, int open | bool', -\ 'pdf_add_pdflink(': 'resource pdfdoc, float bottom_left_x, float bottom_left_y, float up_right_x, float up_right_y, string filename, int page, string dest | bool', -\ 'pdf_add_thumbnail(': 'resource pdfdoc, int image | bool', -\ 'pdf_add_weblink(': 'resource pdfdoc, float lowerleftx, float lowerlefty, float upperrightx, float upperrighty, string url | bool', -\ 'pdf_arc(': 'resource p, float x, float y, float r, float alpha, float beta | bool', -\ 'pdf_arcn(': 'resource p, float x, float y, float r, float alpha, float beta | bool', -\ 'pdf_attach_file(': 'resource pdfdoc, float llx, float lly, float urx, float ury, string filename, string description, string author, string mimetype, string icon | bool', -\ 'pdf_begin_document(': 'resource pdfdoc, string filename, string optlist | int', -\ 'pdf_begin_font(': 'resource pdfdoc, string filename, float a, float b, float c, float d, float e, float f, string optlist | bool', -\ 'pdf_begin_glyph(': 'resource pdfdoc, string glyphname, float wx, float llx, float lly, float urx, float ury | bool', -\ 'pdf_begin_item(': 'resource pdfdoc, string tag, string optlist | int', -\ 'pdf_begin_layer(': 'resource pdfdoc, int layer | bool', -\ 'pdf_begin_page_ext(': 'resource pdfdoc, float width, float height, string optlist | bool', -\ 'pdf_begin_page(': 'resource pdfdoc, float width, float height | bool', -\ 'pdf_begin_pattern(': 'resource pdfdoc, float width, float height, float xstep, float ystep, int painttype | int', -\ 'pdf_begin_template(': 'resource pdfdoc, float width, float height | int', -\ 'pdf_circle(': 'resource pdfdoc, float x, float y, float r | bool', -\ 'pdf_clip(': 'resource p | bool', -\ 'pdf_close(': 'resource p | bool', -\ 'pdf_close_image(': 'resource p, int image | void', -\ 'pdf_closepath_fill_stroke(': 'resource p | bool', -\ 'pdf_closepath(': 'resource p | bool', -\ 'pdf_closepath_stroke(': 'resource p | bool', -\ 'pdf_close_pdi(': 'resource p, int doc | bool', -\ 'pdf_close_pdi_page(': 'resource p, int page | bool', -\ 'pdf_concat(': 'resource p, float a, float b, float c, float d, float e, float f | bool', -\ 'pdf_continue_text(': 'resource p, string text | bool', -\ 'pdf_create_action(': 'resource pdfdoc, string type, string optlist | int', -\ 'pdf_create_annotation(': 'resource pdfdoc, float llx, float lly, float urx, float ury, string type, string optlist | bool', -\ 'pdf_create_bookmark(': 'resource pdfdoc, string text, string optlist | int', -\ 'pdf_create_fieldgroup(': 'resource pdfdoc, string name, string optlist | bool', -\ 'pdf_create_field(': 'resource pdfdoc, float llx, float lly, float urx, float ury, string name, string type, string optlist | bool', -\ 'pdf_create_gstate(': 'resource pdfdoc, string optlist | int', -\ 'pdf_create_pvf(': 'resource pdfdoc, string filename, string data, string optlist | bool', -\ 'pdf_create_textflow(': 'resource pdfdoc, string text, string optlist | int', -\ 'pdf_curveto(': 'resource p, float x1, float y1, float x2, float y2, float x3, float y3 | bool', -\ 'pdf_define_layer(': 'resource pdfdoc, string name, string optlist | int', -\ 'pdf_delete(': 'resource pdfdoc | bool', -\ 'pdf_delete_pvf(': 'resource pdfdoc, string filename | int', -\ 'pdf_delete_textflow(': 'resource pdfdoc, int textflow | bool', -\ 'pdf_encoding_set_char(': 'resource pdfdoc, string encoding, int slot, string glyphname, int uv | bool', -\ 'pdf_end_document(': 'resource pdfdoc, string optlist | bool', -\ 'pdf_end_font(': 'resource pdfdoc | bool', -\ 'pdf_end_glyph(': 'resource pdfdoc | bool', -\ 'pdf_end_item(': 'resource pdfdoc, int id | bool', -\ 'pdf_end_layer(': 'resource pdfdoc | bool', -\ 'pdf_end_page_ext(': 'resource pdfdoc, string optlist | bool', -\ 'pdf_end_page(': 'resource p | bool', -\ 'pdf_end_pattern(': 'resource p | bool', -\ 'pdf_end_template(': 'resource p | bool', -\ 'pdf_fill(': 'resource p | bool', -\ 'pdf_fill_imageblock(': 'resource pdfdoc, int page, string blockname, int image, string optlist | int', -\ 'pdf_fill_pdfblock(': 'resource pdfdoc, int page, string blockname, int contents, string optlist | int', -\ 'pdf_fill_stroke(': 'resource p | bool', -\ 'pdf_fill_textblock(': 'resource pdfdoc, int page, string blockname, string text, string optlist | int', -\ 'pdf_findfont(': 'resource p, string fontname, string encoding, int embed | int', -\ 'pdf_fit_image(': 'resource pdfdoc, int image, float x, float y, string optlist | bool', -\ 'pdf_fit_pdi_page(': 'resource pdfdoc, int page, float x, float y, string optlist | bool', -\ 'pdf_fit_textflow(': 'resource pdfdoc, int textflow, float llx, float lly, float urx, float ury, string optlist | string', -\ 'pdf_fit_textline(': 'resource pdfdoc, string text, float x, float y, string optlist | bool', -\ 'pdf_get_apiname(': 'resource pdfdoc | string', -\ 'pdf_get_buffer(': 'resource p | string', -\ 'pdf_get_errmsg(': 'resource pdfdoc | string', -\ 'pdf_get_errnum(': 'resource pdfdoc | int', -\ 'pdf_get_majorversion(': 'void | int', -\ 'pdf_get_minorversion(': 'void | int', -\ 'pdf_get_parameter(': 'resource p, string key, float modifier | string', -\ 'pdf_get_pdi_parameter(': 'resource p, string key, int doc, int page, int reserved | string', -\ 'pdf_get_pdi_value(': 'resource p, string key, int doc, int page, int reserved | float', -\ 'pdf_get_value(': 'resource p, string key, float modifier | float', -\ 'pdf_info_textflow(': 'resource pdfdoc, int textflow, string keyword | float', -\ 'pdf_initgraphics(': 'resource p | bool', -\ 'pdf_lineto(': 'resource p, float x, float y | bool', -\ 'pdf_load_font(': 'resource pdfdoc, string fontname, string encoding, string optlist | int', -\ 'pdf_load_iccprofile(': 'resource pdfdoc, string profilename, string optlist | int', -\ 'pdf_load_image(': 'resource pdfdoc, string imagetype, string filename, string optlist | int', -\ 'pdf_makespotcolor(': 'resource p, string spotname | int', -\ 'pdf_moveto(': 'resource p, float x, float y | bool', -\ 'pdf_new(': ' | resource', -\ 'pdf_open_ccitt(': 'resource pdfdoc, string filename, int width, int height, int BitReverse, int k, int Blackls1 | int', -\ 'pdf_open_file(': 'resource p, string filename | bool', -\ 'pdf_open_image_file(': 'resource p, string imagetype, string filename, string stringparam, int intparam | int', -\ 'pdf_open_image(': 'resource p, string imagetype, string source, string data, int length, int width, int height, int components, int bpc, string params | int', -\ 'pdf_open_memory_image(': 'resource p, resource image | int', -\ 'pdf_open_pdi(': 'resource pdfdoc, string filename, string optlist, int len | int', -\ 'pdf_open_pdi_page(': 'resource p, int doc, int pagenumber, string optlist | int', -\ 'pdf_place_image(': 'resource pdfdoc, int image, float x, float y, float scale | bool', -\ 'pdf_place_pdi_page(': 'resource pdfdoc, int page, float x, float y, float sx, float sy | bool', -\ 'pdf_process_pdi(': 'resource pdfdoc, int doc, int page, string optlist | int', -\ 'pdf_rect(': 'resource p, float x, float y, float width, float height | bool', -\ 'pdf_restore(': 'resource p | bool', -\ 'pdf_resume_page(': 'resource pdfdoc, string optlist | bool', -\ 'pdf_rotate(': 'resource p, float phi | bool', -\ 'pdf_save(': 'resource p | bool', -\ 'pdf_scale(': 'resource p, float sx, float sy | bool', -\ 'pdf_set_border_color(': 'resource p, float red, float green, float blue | bool', -\ 'pdf_set_border_dash(': 'resource pdfdoc, float black, float white | bool', -\ 'pdf_set_border_style(': 'resource pdfdoc, string style, float width | bool', -\ 'pdf_setcolor(': 'resource p, string fstype, string colorspace, float c1, float c2, float c3, float c4 | bool', -\ 'pdf_setdash(': 'resource pdfdoc, float b, float w | bool', -\ 'pdf_setdashpattern(': 'resource pdfdoc, string optlist | bool', -\ 'pdf_setflat(': 'resource pdfdoc, float flatness | bool', -\ 'pdf_setfont(': 'resource pdfdoc, int font, float fontsize | bool', -\ 'pdf_setgray_fill(': 'resource p, float g | bool', -\ 'pdf_setgray(': 'resource p, float g | bool', -\ 'pdf_setgray_stroke(': 'resource p, float g | bool', -\ 'pdf_set_gstate(': 'resource pdfdoc, int gstate | bool', -\ 'pdf_set_info(': 'resource p, string key, string value | bool', -\ 'pdf_set_layer_dependency(': 'resource pdfdoc, string type, string optlist | bool', -\ 'pdf_setlinecap(': 'resource p, int linecap | bool', -\ 'pdf_setlinejoin(': 'resource p, int value | bool', -\ 'pdf_setlinewidth(': 'resource p, float width | bool', -\ 'pdf_setmatrix(': 'resource p, float a, float b, float c, float d, float e, float f | bool', -\ 'pdf_setmiterlimit(': 'resource pdfdoc, float miter | bool', -\ 'pdf_set_parameter(': 'resource p, string key, string value | bool', -\ 'pdf_setrgbcolor_fill(': 'resource p, float red, float green, float blue | bool', -\ 'pdf_setrgbcolor(': 'resource p, float red, float green, float blue | bool', -\ 'pdf_setrgbcolor_stroke(': 'resource p, float red, float green, float blue | bool', -\ 'pdf_set_text_pos(': 'resource p, float x, float y | bool', -\ 'pdf_set_value(': 'resource p, string key, float value | bool', -\ 'pdf_shading(': 'resource pdfdoc, string shtype, float x0, float y0, float x1, float y1, float c1, float c2, float c3, float c4, string optlist | int', -\ 'pdf_shading_pattern(': 'resource pdfdoc, int shading, string optlist | int', -\ 'pdf_shfill(': 'resource pdfdoc, int shading | bool', -\ 'pdf_show_boxed(': 'resource p, string text, float left, float top, float width, float height, string mode, string feature | int', -\ 'pdf_show(': 'resource pdfdoc, string text | bool', -\ 'pdf_show_xy(': 'resource p, string text, float x, float y | bool', -\ 'pdf_skew(': 'resource p, float alpha, float beta | bool', -\ 'pdf_stringwidth(': 'resource p, string text, int font, float fontsize | float', -\ 'pdf_stroke(': 'resource p | bool', -\ 'pdf_suspend_page(': 'resource pdfdoc, string optlist | bool', -\ 'pdf_translate(': 'resource p, float tx, float ty | bool', -\ 'pdf_utf16_to_utf8(': 'resource pdfdoc, string utf16string | string', -\ 'pdf_utf8_to_utf16(': 'resource pdfdoc, string utf8string, string ordering | string', -\ 'pdf_xshow(': 'resource pdfdoc, string text | bool', -\ 'pfpro_cleanup(': 'void | bool', -\ 'pfpro_init(': 'void | bool', -\ 'pfpro_process(': 'array parameters [, string address [, int port [, int timeout [, string proxy_address [, int proxy_port [, string proxy_logon [, string proxy_password]]]]]]] | array', -\ 'pfpro_process_raw(': 'string parameters [, string address [, int port [, int timeout [, string proxy_address [, int proxy_port [, string proxy_logon [, string proxy_password]]]]]]] | string', -\ 'pfpro_version(': 'void | string', -\ 'pfsockopen(': 'string hostname [, int port [, int &errno [, string &errstr [, float timeout]]]] | resource', -\ 'pg_affected_rows(': 'resource result | int', -\ 'pg_cancel_query(': 'resource connection | bool', -\ 'pg_client_encoding(': '[resource connection] | string', -\ 'pg_close(': '[resource connection] | bool', -\ 'pg_connect(': 'string connection_string [, int connect_type] | resource', -\ 'pg_connection_busy(': 'resource connection | bool', -\ 'pg_connection_reset(': 'resource connection | bool', -\ 'pg_connection_status(': 'resource connection | int', -\ 'pg_convert(': 'resource connection, string table_name, array assoc_array [, int options] | array', -\ 'pg_copy_from(': 'resource connection, string table_name, array rows [, string delimiter [, string null_as]] | bool', -\ 'pg_copy_to(': 'resource connection, string table_name [, string delimiter [, string null_as]] | array', -\ 'pg_dbname(': '[resource connection] | string', -\ 'pg_delete(': 'resource connection, string table_name, array assoc_array [, int options] | mixed', -\ 'pg_end_copy(': '[resource connection] | bool', -\ 'pg_escape_bytea(': 'string data | string', -\ 'pg_escape_string(': 'string data | string', -\ 'pg_execute(': 'resource connection, string stmtname, array params | resource', -\ 'pg_fetch_all_columns(': 'resource result [, int column] | array', -\ 'pg_fetch_all(': 'resource result | array', -\ 'pg_fetch_array(': 'resource result [, int row [, int result_type]] | array', -\ 'pg_fetch_assoc(': 'resource result [, int row] | array', -\ 'pg_fetch_object(': 'resource result [, int row [, int result_type]] | object', -\ 'pg_fetch_result(': 'resource result, int row, mixed field | string', -\ 'pg_fetch_row(': 'resource result [, int row] | array', -\ 'pg_field_is_null(': 'resource result, int row, mixed field | int', -\ 'pg_field_name(': 'resource result, int field_number | string', -\ 'pg_field_num(': 'resource result, string field_name | int', -\ 'pg_field_prtlen(': 'resource result, int row_number, mixed field_name_or_number | int', -\ 'pg_field_size(': 'resource result, int field_number | int', -\ 'pg_field_type(': 'resource result, int field_number | string', -\ 'pg_field_type_oid(': 'resource result, int field_number | int', -\ 'pg_free_result(': 'resource result | bool', -\ 'pg_get_notify(': 'resource connection [, int result_type] | array', -\ 'pg_get_pid(': 'resource connection | int', -\ 'pg_get_result(': '[resource connection] | resource', -\ 'pg_host(': '[resource connection] | string', -\ 'pg_insert(': 'resource connection, string table_name, array assoc_array [, int options] | mixed', -\ 'pg_last_error(': '[resource connection] | string', -\ 'pg_last_notice(': 'resource connection | string', -\ 'pg_last_oid(': 'resource result | string', -\ 'pg_lo_close(': 'resource large_object | bool', -\ 'pg_lo_create(': '[resource connection] | int', -\ 'pg_lo_export(': 'resource connection, int oid, string pathname | bool', -\ 'pg_lo_import(': 'resource connection, string pathname | int', -\ 'pg_lo_open(': 'resource connection, int oid, string mode | resource', -\ 'pg_lo_read_all(': 'resource large_object | int', -\ 'pg_lo_read(': 'resource large_object [, int len] | string', -\ 'pg_lo_seek(': 'resource large_object, int offset [, int whence] | bool', -\ 'pg_lo_tell(': 'resource large_object | int', -\ 'pg_lo_unlink(': 'resource connection, int oid | bool', -\ 'pg_lo_write(': 'resource large_object, string data [, int len] | int', -\ 'pg_meta_data(': 'resource connection, string table_name | array', -\ 'pg_num_fields(': 'resource result | int', -\ 'pg_num_rows(': 'resource result | int', -\ 'pg_options(': '[resource connection] | string', -\ 'pg_parameter_status(': 'resource connection, string param_name | string', -\ 'pg_pconnect(': 'string connection_string [, int connect_type] | resource', -\ 'pg_ping(': '[resource connection] | bool', -\ 'pg_port(': '[resource connection] | int', -\ 'pg_prepare(': 'resource connection, string stmtname, string query | resource', -\ 'pg_put_line(': 'string data | bool', -\ 'pg_query(': 'string query | resource', -\ 'pg_query_params(': 'resource connection, string query, array params | resource', -\ 'pg_result_error_field(': 'resource result, int fieldcode | string', -\ 'pg_result_error(': 'resource result | string', -\ 'pg_result_seek(': 'resource result, int offset | bool', -\ 'pg_result_status(': 'resource result [, int type] | mixed', -\ 'pg_select(': 'resource connection, string table_name, array assoc_array [, int options] | mixed', -\ 'pg_send_execute(': 'resource connection, string stmtname, array params | bool', -\ 'pg_send_prepare(': 'resource connection, string stmtname, string query | bool', -\ 'pg_send_query(': 'resource connection, string query | bool', -\ 'pg_send_query_params(': 'resource connection, string query, array params | bool', -\ 'pg_set_client_encoding(': 'string encoding | int', -\ 'pg_set_error_verbosity(': 'resource connection, int verbosity | int', -\ 'pg_trace(': 'string pathname [, string mode [, resource connection]] | bool', -\ 'pg_transaction_status(': 'resource connection | int', -\ 'pg_tty(': '[resource connection] | string', -\ 'pg_unescape_bytea(': 'string data | string', -\ 'pg_untrace(': '[resource connection] | bool', -\ 'pg_update(': 'resource connection, string table_name, array data, array condition [, int options] | mixed', -\ 'pg_version(': '[resource connection] | array', -\ 'php_check_syntax(': 'string file_name [, string &error_message] | bool', -\ 'phpcredits(': '[int flag] | bool', -\ 'phpinfo(': '[int what] | bool', -\ 'php_ini_scanned_files(': 'void | string', -\ 'php_logo_guid(': 'void | string', -\ 'php_sapi_name(': 'void | string', -\ 'php_strip_whitespace(': 'string filename | string', -\ 'php_uname(': '[string mode] | string', -\ 'phpversion(': '[string extension] | string', -\ 'pi(': 'void | float', -\ 'png2wbmp(': 'string pngname, string wbmpname, int d_height, int d_width, int threshold | int', -\ 'popen(': 'string command, string mode | resource', -\ 'posix_access(': 'string file [, int mode] | bool', -\ 'posix_ctermid(': 'void | string', -\ 'posix_getcwd(': 'void | string', -\ 'posix_getegid(': 'void | int', -\ 'posix_geteuid(': 'void | int', -\ 'posix_getgid(': 'void | int', -\ 'posix_getgrgid(': 'int gid | array', -\ 'posix_getgrnam(': 'string name | array', -\ 'posix_getgroups(': 'void | array', -\ 'posix_get_last_error(': 'void | int', -\ 'posix_getlogin(': 'void | string', -\ 'posix_getpgid(': 'int pid | int', -\ 'posix_getpgrp(': 'void | int', -\ 'posix_getpid(': 'void | int', -\ 'posix_getppid(': 'void | int', -\ 'posix_getpwnam(': 'string username | array', -\ 'posix_getpwuid(': 'int uid | array', -\ 'posix_getrlimit(': 'void | array', -\ 'posix_getsid(': 'int pid | int', -\ 'posix_getuid(': 'void | int', -\ 'posix_isatty(': 'int fd | bool', -\ 'posix_kill(': 'int pid, int sig | bool', -\ 'posix_mkfifo(': 'string pathname, int mode | bool', -\ 'posix_mknod(': 'string pathname, int mode [, int major [, int minor]] | bool', -\ 'posix_setegid(': 'int gid | bool', -\ 'posix_seteuid(': 'int uid | bool', -\ 'posix_setgid(': 'int gid | bool', -\ 'posix_setpgid(': 'int pid, int pgid | bool', -\ 'posix_setsid(': 'void | int', -\ 'posix_setuid(': 'int uid | bool', -\ 'posix_strerror(': 'int errno | string', -\ 'posix_times(': 'void | array', -\ 'posix_ttyname(': 'int fd | string', -\ 'posix_uname(': 'void | array', -\ 'pow(': 'number base, number exp | number', -\ 'preg_grep(': 'string pattern, array input [, int flags] | array', -\ 'preg_match_all(': 'string pattern, string subject, array &matches [, int flags [, int offset]] | int', -\ 'preg_match(': 'string pattern, string subject [, array &matches [, int flags [, int offset]]] | int', -\ 'preg_quote(': 'string str [, string delimiter] | string', -\ 'preg_replace_callback(': 'mixed pattern, callback callback, mixed subject [, int limit [, int &count]] | mixed', -\ 'preg_replace(': 'mixed pattern, mixed replacement, mixed subject [, int limit [, int &count]] | mixed', -\ 'preg_split(': 'string pattern, string subject [, int limit [, int flags]] | array', -\ 'prev(': 'array &array | mixed', -\ 'printer_abort(': 'resource handle | void', -\ 'printer_close(': 'resource handle | void', -\ 'printer_create_brush(': 'int style, string color | resource', -\ 'printer_create_dc(': 'resource handle | void', -\ 'printer_create_font(': 'string face, int height, int width, int font_weight, bool italic, bool underline, bool strikeout, int orientation | resource', -\ 'printer_create_pen(': 'int style, int width, string color | resource', -\ 'printer_delete_brush(': 'resource handle | void', -\ 'printer_delete_dc(': 'resource handle | bool', -\ 'printer_delete_font(': 'resource handle | void', -\ 'printer_delete_pen(': 'resource handle | void', -\ 'printer_draw_bmp(': 'resource handle, string filename, int x, int y [, int width, int height] | bool', -\ 'printer_draw_chord(': 'resource handle, int rec_x, int rec_y, int rec_x1, int rec_y1, int rad_x, int rad_y, int rad_x1, int rad_y1 | void', -\ 'printer_draw_elipse(': 'resource handle, int ul_x, int ul_y, int lr_x, int lr_y | void', -\ 'printer_draw_line(': 'resource printer_handle, int from_x, int from_y, int to_x, int to_y | void', -\ 'printer_draw_pie(': 'resource handle, int rec_x, int rec_y, int rec_x1, int rec_y1, int rad1_x, int rad1_y, int rad2_x, int rad2_y | void', -\ 'printer_draw_rectangle(': 'resource handle, int ul_x, int ul_y, int lr_x, int lr_y | void', -\ 'printer_draw_roundrect(': 'resource handle, int ul_x, int ul_y, int lr_x, int lr_y, int width, int height | void', -\ 'printer_draw_text(': 'resource printer_handle, string text, int x, int y | void', -\ 'printer_end_doc(': 'resource handle | bool', -\ 'printer_end_page(': 'resource handle | bool', -\ 'printer_get_option(': 'resource handle, string option | mixed', -\ 'printer_list(': 'int enumtype [, string name [, int level]] | array', -\ 'printer_logical_fontheight(': 'resource handle, int height | int', -\ 'printer_open(': '[string devicename] | resource', -\ 'printer_select_brush(': 'resource printer_handle, resource brush_handle | void', -\ 'printer_select_font(': 'resource printer_handle, resource font_handle | void', -\ 'printer_select_pen(': 'resource printer_handle, resource pen_handle | void', -\ 'printer_set_option(': 'resource handle, int option, mixed value | bool', -\ 'printer_start_doc(': 'resource handle [, string document] | bool', -\ 'printer_start_page(': 'resource handle | bool', -\ 'printer_write(': 'resource handle, string content | bool', -\ 'printf(': 'string format [, mixed args [, mixed ...]] | int', -\ 'print(': 'string arg | int', -\ 'print_r(': 'mixed expression [, bool return] | bool', -\ 'proc_close(': 'resource process | int', -\ 'proc_get_status(': 'resource process | array', -\ 'proc_nice(': 'int increment | bool', -\ 'proc_open(': 'string cmd, array descriptorspec, array &pipes [, string cwd [, array env [, array other_options]]] | resource', -\ 'proc_terminate(': 'resource process [, int signal] | int', -\ 'property_exists(': 'mixed class, string property | bool', -\ 'ps_add_bookmark(': 'resource psdoc, string text [, int parent [, int open]] | int', -\ 'ps_add_launchlink(': 'resource psdoc, float llx, float lly, float urx, float ury, string filename | bool', -\ 'ps_add_locallink(': 'resource psdoc, float llx, float lly, float urx, float ury, int page, string dest | bool', -\ 'ps_add_note(': 'resource psdoc, float llx, float lly, float urx, float ury, string contents, string title, string icon, int open | bool', -\ 'ps_add_pdflink(': 'resource psdoc, float llx, float lly, float urx, float ury, string filename, int page, string dest | bool', -\ 'ps_add_weblink(': 'resource psdoc, float llx, float lly, float urx, float ury, string url | bool', -\ 'ps_arc(': 'resource psdoc, float x, float y, float radius, float alpha, float beta | bool', -\ 'ps_arcn(': 'resource psdoc, float x, float y, float radius, float alpha, float beta | bool', -\ 'ps_begin_page(': 'resource psdoc, float width, float height | bool', -\ 'ps_begin_pattern(': 'resource psdoc, float width, float height, float xstep, float ystep, int painttype | bool', -\ 'ps_begin_template(': 'resource psdoc, float width, float height | bool', -\ 'ps_circle(': 'resource psdoc, float x, float y, float radius | bool', -\ 'ps_clip(': 'resource psdoc | bool', -\ 'ps_close(': 'resource psdoc | bool', -\ 'ps_close_image(': 'resource psdoc, int imageid | void', -\ 'ps_closepath(': 'resource psdoc | bool', -\ 'ps_closepath_stroke(': 'resource psdoc | bool', -\ 'ps_continue_text(': 'resource psdoc, string text | bool', -\ 'ps_curveto(': 'resource psdoc, float x1, float y1, float x2, float y2, float x3, float y3 | bool', -\ 'ps_delete(': 'resource psdoc | bool', -\ 'ps_end_page(': 'resource psdoc | bool', -\ 'ps_end_pattern(': 'resource psdoc | bool', -\ 'ps_end_template(': 'resource psdoc | bool', -\ 'ps_fill(': 'resource psdoc | bool', -\ 'ps_fill_stroke(': 'resource psdoc | bool', -\ 'ps_findfont(': 'resource psdoc, string fontname, string encoding [, bool embed] | int', -\ 'ps_get_buffer(': 'resource psdoc | string', -\ 'ps_get_parameter(': 'resource psdoc, string name [, float modifier] | string', -\ 'ps_get_value(': 'resource psdoc, string name [, float modifier] | float', -\ 'ps_hyphenate(': 'resource psdoc, string text | array', -\ 'ps_lineto(': 'resource psdoc, float x, float y | bool', -\ 'ps_makespotcolor(': 'resource psdoc, string name [, float reserved] | int', -\ 'ps_moveto(': 'resource psdoc, float x, float y | bool', -\ 'ps_new(': 'void | resource', -\ 'ps_open_file(': 'resource psdoc [, string filename] | bool', -\ 'ps_open_image_file(': 'resource psdoc, string type, string filename [, string stringparam [, int intparam]] | int', -\ 'ps_open_image(': 'resource psdoc, string type, string source, string data, int lenght, int width, int height, int components, int bpc, string params | int', -\ 'pspell_add_to_personal(': 'int dictionary_link, string word | bool', -\ 'pspell_add_to_session(': 'int dictionary_link, string word | bool', -\ 'pspell_check(': 'int dictionary_link, string word | bool', -\ 'pspell_clear_session(': 'int dictionary_link | bool', -\ 'pspell_config_create(': 'string language [, string spelling [, string jargon [, string encoding]]] | int', -\ 'pspell_config_data_dir(': 'int conf, string directory | bool', -\ 'pspell_config_dict_dir(': 'int conf, string directory | bool', -\ 'pspell_config_ignore(': 'int dictionary_link, int n | bool', -\ 'pspell_config_mode(': 'int dictionary_link, int mode | bool', -\ 'pspell_config_personal(': 'int dictionary_link, string file | bool', -\ 'pspell_config_repl(': 'int dictionary_link, string file | bool', -\ 'pspell_config_runtogether(': 'int dictionary_link, bool flag | bool', -\ 'pspell_config_save_repl(': 'int dictionary_link, bool flag | bool', -\ 'pspell_new_config(': 'int config | int', -\ 'pspell_new(': 'string language [, string spelling [, string jargon [, string encoding [, int mode]]]] | int', -\ 'pspell_new_personal(': 'string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]] | int', -\ 'pspell_save_wordlist(': 'int dictionary_link | bool', -\ 'pspell_store_replacement(': 'int dictionary_link, string misspelled, string correct | bool', -\ 'pspell_suggest(': 'int dictionary_link, string word | array', -\ 'ps_place_image(': 'resource psdoc, int imageid, float x, float y, float scale | bool', -\ 'ps_rect(': 'resource psdoc, float x, float y, float width, float height | bool', -\ 'ps_restore(': 'resource psdoc | bool', -\ 'ps_rotate(': 'resource psdoc, float rot | bool', -\ 'ps_save(': 'resource psdoc | bool', -\ 'ps_scale(': 'resource psdoc, float x, float y | bool', -\ 'ps_set_border_color(': 'resource psdoc, float red, float green, float blue | bool', -\ 'ps_set_border_dash(': 'resource psdoc, float black, float white | bool', -\ 'ps_set_border_style(': 'resource psdoc, string style, float width | bool', -\ 'ps_setcolor(': 'resource psdoc, string type, string colorspace, float c1, float c2, float c3, float c4 | bool', -\ 'ps_setdash(': 'resource psdoc, float on, float off | bool', -\ 'ps_setflat(': 'resource psdoc, float value | bool', -\ 'ps_setfont(': 'resource psdoc, int fontid, float size | bool', -\ 'ps_setgray(': 'resource psdoc, float gray | bool', -\ 'ps_set_info(': 'resource p, string key, string val | bool', -\ 'ps_setlinecap(': 'resource psdoc, int type | bool', -\ 'ps_setlinejoin(': 'resource psdoc, int type | bool', -\ 'ps_setlinewidth(': 'resource psdoc, float width | bool', -\ 'ps_setmiterlimit(': 'resource psdoc, float value | bool', -\ 'ps_set_parameter(': 'resource psdoc, string name, string value | bool', -\ 'ps_setpolydash(': 'resource psdoc, float arr | bool', -\ 'ps_set_text_pos(': 'resource psdoc, float x, float y | bool', -\ 'ps_set_value(': 'resource psdoc, string name, float value | bool', -\ 'ps_shading(': 'resource psdoc, string type, float x0, float y0, float x1, float y1, float c1, float c2, float c3, float c4, string optlist | int', -\ 'ps_shading_pattern(': 'resource psdoc, int shadingid, string optlist | int', -\ 'ps_shfill(': 'resource psdoc, int shadingid | bool', -\ 'ps_show_boxed(': 'resource psdoc, string text, float left, float bottom, float width, float height, string hmode [, string feature] | int', -\ 'ps_show(': 'resource psdoc, string text | bool', -\ 'ps_show_xy(': 'resource psdoc, string text, float x, float y | bool', -\ 'ps_string_geometry(': 'resource psdoc, string text [, int fontid [, float size]] | array', -\ 'ps_stringwidth(': 'resource psdoc, string text [, int fontid [, float size]] | float', -\ 'ps_stroke(': 'resource psdoc | bool', -\ 'ps_symbol(': 'resource psdoc, int ord | bool', -\ 'ps_symbol_name(': 'resource psdoc, int ord [, int fontid] | string', -\ 'ps_symbol_width(': 'resource psdoc, int ord [, int fontid [, float size]] | float', -\ 'ps_translate(': 'resource psdoc, float x, float y | bool', -\ 'putenv(': 'string setting | bool', -\ 'px_close(': 'resource pxdoc | bool', -\ 'px_create_fp(': 'resource pxdoc, resource file, array fielddesc | bool', -\ 'px_date2string(': 'resource pxdoc, int value, string format | string', -\ 'px_delete(': 'resource pxdoc | bool', -\ 'px_delete_record(': 'resource pxdoc, int num | bool', -\ 'px_get_field(': 'resource pxdoc, int fieldno | array', -\ 'px_get_info(': 'resource pxdoc | array', -\ 'px_get_parameter(': 'resource pxdoc, string name | string', -\ 'px_get_record(': 'resource pxdoc, int num [, int mode] | array', -\ 'px_get_schema(': 'resource pxdoc [, int mode] | array', -\ 'px_get_value(': 'resource pxdoc, string name | float', -\ 'px_insert_record(': 'resource pxdoc, array data | int', -\ 'px_new(': 'void | resource', -\ 'px_numfields(': 'resource pxdoc | int', -\ 'px_numrecords(': 'resource pxdoc | int', -\ 'px_open_fp(': 'resource pxdoc, resource file | bool', -\ 'px_put_record(': 'resource pxdoc, array record [, int recpos] | bool', -\ 'px_retrieve_record(': 'resource pxdoc, int num [, int mode] | array', -\ 'px_set_blob_file(': 'resource pxdoc, string filename | bool', -\ 'px_set_parameter(': 'resource pxdoc, string name, string value | bool', -\ 'px_set_tablename(': 'resource pxdoc, string name | void', -\ 'px_set_targetencoding(': 'resource pxdoc, string encoding | bool', -\ 'px_set_value(': 'resource pxdoc, string name, float value | bool', -\ 'px_timestamp2string(': 'resource pxdoc, float value, string format | string', -\ 'px_update_record(': 'resource pxdoc, array data, int num | bool', -\ 'qdom_error(': 'void | string', -\ 'qdom_tree(': 'string doc | QDomDocument', -\ 'quoted_printable_decode(': 'string str | string', -\ 'quotemeta(': 'string str | string', -\ 'rad2deg(': 'float number | float', -\ 'radius_acct_open(': 'void | resource', -\ 'radius_add_server(': 'resource radius_handle, string hostname, int port, string secret, int timeout, int max_tries | bool', -\ 'radius_auth_open(': 'void | resource', -\ 'radius_close(': 'resource radius_handle | bool', -\ 'radius_config(': 'resource radius_handle, string file | bool', -\ 'radius_create_request(': 'resource radius_handle, int type | bool', -\ 'radius_cvt_addr(': 'string data | string', -\ 'radius_cvt_int(': 'string data | int', -\ 'radius_cvt_string(': 'string data | string', -\ 'radius_demangle(': 'resource radius_handle, string mangled | string', -\ 'radius_demangle_mppe_key(': 'resource radius_handle, string mangled | string', -\ 'radius_get_attr(': 'resource radius_handle | mixed', -\ 'radius_get_vendor_attr(': 'string data | array', -\ 'radius_put_addr(': 'resource radius_handle, int type, string addr | bool', -\ 'radius_put_attr(': 'resource radius_handle, int type, string value | bool', -\ 'radius_put_int(': 'resource radius_handle, int type, int value | bool', -\ 'radius_put_string(': 'resource radius_handle, int type, string value | bool', -\ 'radius_put_vendor_addr(': 'resource radius_handle, int vendor, int type, string addr | bool', -\ 'radius_put_vendor_attr(': 'resource radius_handle, int vendor, int type, string value | bool', -\ 'radius_put_vendor_int(': 'resource radius_handle, int vendor, int type, int value | bool', -\ 'radius_put_vendor_string(': 'resource radius_handle, int vendor, int type, string value | bool', -\ 'radius_request_authenticator(': 'resource radius_handle | string', -\ 'radius_send_request(': 'resource radius_handle | int', -\ 'radius_server_secret(': 'resource radius_handle | string', -\ 'radius_strerror(': 'resource radius_handle | string', -\ 'rand(': '[int min, int max] | int', -\ 'range(': 'mixed low, mixed high [, number step] | array', -\ 'rar_close(': 'resource rar_file | bool', -\ 'rar_entry_get(': 'resource rar_file, string entry_name | RarEntry', -\ 'rar_list(': 'resource rar_file | array', -\ 'rar_open(': 'string filename [, string password] | resource', -\ 'rawurldecode(': 'string str | string', -\ 'rawurlencode(': 'string str | string', -\ 'readdir(': 'resource dir_handle | string', -\ 'readfile(': 'string filename [, bool use_include_path [, resource context]] | int', -\ 'readgzfile(': 'string filename [, int use_include_path] | int', -\ 'readline_add_history(': 'string line | bool', -\ 'readline_callback_handler_install(': 'string prompt, callback callback | bool', -\ 'readline_callback_handler_remove(': 'void | bool', -\ 'readline_callback_read_char(': 'void | void', -\ 'readline_clear_history(': 'void | bool', -\ 'readline_completion_function(': 'callback function | bool', -\ 'readline(': 'string prompt | string', -\ 'readline_info(': '[string varname [, string newvalue]] | mixed', -\ 'readline_list_history(': 'void | array', -\ 'readline_on_new_line(': 'void | void', -\ 'readline_read_history(': '[string filename] | bool', -\ 'readline_redisplay(': 'void | void', -\ 'readline_write_history(': '[string filename] | bool', -\ 'readlink(': 'string path | string', -\ 'realpath(': 'string path | string', -\ 'recode_file(': 'string request, resource input, resource output | bool', -\ 'recode_string(': 'string request, string string | string', -\ 'register_shutdown_function(': 'callback function [, mixed parameter [, mixed ...]] | void', -\ 'register_tick_function(': 'callback function [, mixed arg [, mixed ...]] | bool', -\ 'rename_function(': 'string original_name, string new_name | bool', -\ 'rename(': 'string oldname, string newname [, resource context] | bool', -\ 'reset(': 'array &array | mixed', -\ 'restore_error_handler(': 'void | bool', -\ 'restore_exception_handler(': 'void | bool', -\ 'restore_include_path(': 'void | void', -\ 'rewinddir(': 'resource dir_handle | void', -\ 'rewind(': 'resource handle | bool', -\ 'rmdir(': 'string dirname [, resource context] | bool', -\ 'round(': 'float val [, int precision] | float', -\ 'rpm_close(': 'resource rpmr | boolean', -\ 'rpm_get_tag(': 'resource rpmr, int tagnum | mixed', -\ 'rpm_is_valid(': 'string filename | boolean', -\ 'rpm_open(': 'string filename | resource', -\ 'rpm_version(': 'void | string', -\ 'rsort(': 'array &array [, int sort_flags] | bool', -\ 'rtrim(': 'string str [, string charlist] | string', -\ 'runkit_class_adopt(': 'string classname, string parentname | bool', -\ 'runkit_class_emancipate(': 'string classname | bool', -\ 'runkit_constant_add(': 'string constname, mixed value | bool', -\ 'runkit_constant_redefine(': 'string constname, mixed newvalue | bool', -\ 'runkit_constant_remove(': 'string constname | bool', -\ 'runkit_function_add(': 'string funcname, string arglist, string code | bool', -\ 'runkit_function_copy(': 'string funcname, string targetname | bool', -\ 'runkit_function_redefine(': 'string funcname, string arglist, string code | bool', -\ 'runkit_function_remove(': 'string funcname | bool', -\ 'runkit_function_rename(': 'string funcname, string newname | bool', -\ 'runkit_import(': 'string filename [, int flags] | bool', -\ 'runkit_lint_file(': 'string filename | bool', -\ 'runkit_lint(': 'string code | bool', -\ 'runkit_method_add(': 'string classname, string methodname, string args, string code [, int flags] | bool', -\ 'runkit_method_copy(': 'string dClass, string dMethod, string sClass [, string sMethod] | bool', -\ 'runkit_method_redefine(': 'string classname, string methodname, string args, string code [, int flags] | bool', -\ 'runkit_method_remove(': 'string classname, string methodname | bool', -\ 'runkit_method_rename(': 'string classname, string methodname, string newname | bool', -\ 'runkit_return_value_used(': 'void | bool', -\ 'runkit_sandbox_output_handler(': 'object sandbox [, mixed callback] | mixed', -\ 'runkit_superglobals(': 'void | array', -\ 'satellite_caught_exception(': 'void | bool', -\ 'satellite_exception_id(': 'void | string', -\ 'satellite_exception_value(': 'void | OrbitStruct', -\ 'satellite_get_repository_id(': 'object obj | int', -\ 'satellite_load_idl(': 'string file | bool', -\ 'satellite_object_to_string(': 'object obj | string', -\ 'scandir(': 'string directory [, int sorting_order [, resource context]] | array', -\ 'sem_acquire(': 'resource sem_identifier | bool', -\ 'sem_get(': 'int key [, int max_acquire [, int perm [, int auto_release]]] | resource', -\ 'sem_release(': 'resource sem_identifier | bool', -\ 'sem_remove(': 'resource sem_identifier | bool', -\ 'serialize(': 'mixed value | string', -\ 'sesam_affected_rows(': 'string result_id | int', -\ 'sesam_commit(': 'void | bool', -\ 'sesam_connect(': 'string catalog, string schema, string user | bool', -\ 'sesam_diagnostic(': 'void | array', -\ 'sesam_disconnect(': 'void | bool', -\ 'sesam_errormsg(': 'void | string', -\ 'sesam_execimm(': 'string query | string', -\ 'sesam_fetch_array(': 'string result_id [, int whence [, int offset]] | array', -\ 'sesam_fetch_result(': 'string result_id [, int max_rows] | mixed', -\ 'sesam_fetch_row(': 'string result_id [, int whence [, int offset]] | array', -\ 'sesam_field_array(': 'string result_id | array', -\ 'sesam_field_name(': 'string result_id, int index | int', -\ 'sesam_free_result(': 'string result_id | int', -\ 'sesam_num_fields(': 'string result_id | int', -\ 'sesam_query(': 'string query [, bool scrollable] | string', -\ 'sesam_rollback(': 'void | bool', -\ 'sesam_seek_row(': 'string result_id, int whence [, int offset] | bool', -\ 'sesam_settransaction(': 'int isolation_level, int read_only | bool', -\ 'session_cache_expire(': '[int new_cache_expire] | int', -\ 'session_cache_limiter(': '[string cache_limiter] | string', -\ 'session_decode(': 'string data | bool', -\ 'session_destroy(': 'void | bool', -\ 'session_encode(': 'void | string', -\ 'session_get_cookie_params(': 'void | array', -\ 'session_id(': '[string id] | string', -\ 'session_is_registered(': 'string name | bool', -\ 'session_module_name(': '[string module] | string', -\ 'session_name(': '[string name] | string', -\ 'session_pgsql_add_error(': 'int error_level [, string error_message] | bool', -\ 'session_pgsql_get_error(': '[bool with_error_message] | array', -\ 'session_pgsql_get_field(': 'void | string', -\ 'session_pgsql_reset(': 'void | bool', -\ 'session_pgsql_set_field(': 'string value | bool', -\ 'session_pgsql_status(': 'void | array', -\ 'session_regenerate_id(': '[bool delete_old_session] | bool', -\ 'session_register(': 'mixed name [, mixed ...] | bool', -\ 'session_save_path(': '[string path] | string', -\ 'session_set_cookie_params(': 'int lifetime [, string path [, string domain [, bool secure]]] | void', -\ 'session_set_save_handler(': 'callback open, callback close, callback read, callback write, callback destroy, callback gc | bool', -\ 'session_start(': 'void | bool', -\ 'session_unregister(': 'string name | bool', -\ 'session_unset(': 'void | void', -\ 'session_write_close(': 'void | void', -\ 'setcookie(': 'string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] | bool', -\ 'set_error_handler(': 'callback error_handler [, int error_types] | mixed', -\ 'set_exception_handler(': 'callback exception_handler | string', -\ 'set_include_path(': 'string new_include_path | string', -\ 'setlocale(': 'int category, string locale [, string ...] | string', -\ 'set_magic_quotes_runtime(': 'int new_setting | bool', -\ 'setrawcookie(': 'string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] | bool', -\ 'set_time_limit(': 'int seconds | void', -\ 'settype(': 'mixed &var, string type | bool', -\ 'sha1_file(': 'string filename [, bool raw_output] | string', -\ 'sha1(': 'string str [, bool raw_output] | string', -\ 'shell_exec(': 'string cmd | string', -\ 'shm_attach(': 'int key [, int memsize [, int perm]] | int', -\ 'shm_detach(': 'int shm_identifier | bool', -\ 'shm_get_var(': 'int shm_identifier, int variable_key | mixed', -\ 'shmop_close(': 'int shmid | void', -\ 'shmop_delete(': 'int shmid | bool', -\ 'shmop_open(': 'int key, string flags, int mode, int size | int', -\ 'shmop_read(': 'int shmid, int start, int count | string', -\ 'shmop_size(': 'int shmid | int', -\ 'shmop_write(': 'int shmid, string data, int offset | int', -\ 'shm_put_var(': 'int shm_identifier, int variable_key, mixed variable | bool', -\ 'shm_remove(': 'int shm_identifier | bool', -\ 'shm_remove_var(': 'int shm_identifier, int variable_key | bool', -\ 'shuffle(': 'array &array | bool', -\ 'similar_text(': 'string first, string second [, float &percent] | int', -\ 'SimpleXMLElement->asXML(': '[string filename] | mixed', -\ 'simplexml_element->attributes(': '[string data] | SimpleXMLElement', -\ 'simplexml_element->children(': '[string nsprefix] | SimpleXMLElement', -\ 'SimpleXMLElement->xpath(': 'string path | array', -\ 'simplexml_import_dom(': 'DOMNode node [, string class_name] | SimpleXMLElement', -\ 'simplexml_load_file(': 'string filename [, string class_name [, int options]] | object', -\ 'simplexml_load_string(': 'string data [, string class_name [, int options]] | object', -\ 'sinh(': 'float arg | float', -\ 'sin(': 'float arg | float', -\ 'sleep(': 'int seconds | int', -\ 'snmpget(': 'string hostname, string community, string object_id [, int timeout [, int retries]] | string', -\ 'snmpgetnext(': 'string host, string community, string object_id [, int timeout [, int retries]] | string', -\ 'snmp_get_quick_print(': 'void | bool', -\ 'snmp_get_valueretrieval(': 'void | int', -\ 'snmp_read_mib(': 'string filename | bool', -\ 'snmprealwalk(': 'string host, string community, string object_id [, int timeout [, int retries]] | array', -\ 'snmp_set_enum_print(': 'int enum_print | void', -\ 'snmpset(': 'string hostname, string community, string object_id, string type, mixed value [, int timeout [, int retries]] | bool', -\ 'snmp_set_oid_numeric_print(': 'int oid_numeric_print | void', -\ 'snmp_set_quick_print(': 'bool quick_print | void', -\ 'snmp_set_valueretrieval(': 'int method | void', -\ 'snmpwalk(': 'string hostname, string community, string object_id [, int timeout [, int retries]] | array', -\ 'snmpwalkoid(': 'string hostname, string community, string object_id [, int timeout [, int retries]] | array', -\ 'socket_accept(': 'resource socket | resource', -\ 'socket_bind(': 'resource socket, string address [, int port] | bool', -\ 'socket_clear_error(': '[resource socket] | void', -\ 'socket_close(': 'resource socket | void', -\ 'socket_connect(': 'resource socket, string address [, int port] | bool', -\ 'socket_create(': 'int domain, int type, int protocol | resource', -\ 'socket_create_listen(': 'int port [, int backlog] | resource', -\ 'socket_create_pair(': 'int domain, int type, int protocol, array &fd | bool', -\ 'socket_get_option(': 'resource socket, int level, int optname | mixed', -\ 'socket_getpeername(': 'resource socket, string &addr [, int &port] | bool', -\ 'socket_getsockname(': 'resource socket, string &addr [, int &port] | bool', -\ 'socket_last_error(': '[resource socket] | int', -\ 'socket_listen(': 'resource socket [, int backlog] | bool', -\ 'socket_read(': 'resource socket, int length [, int type] | string', -\ 'socket_recvfrom(': 'resource socket, string &buf, int len, int flags, string &name [, int &port] | int', -\ 'socket_recv(': 'resource socket, string &buf, int len, int flags | int', -\ 'socket_select(': 'array &read, array &write, array &except, int tv_sec [, int tv_usec] | int', -\ 'socket_send(': 'resource socket, string buf, int len, int flags | int', -\ 'socket_sendto(': 'resource socket, string buf, int len, int flags, string addr [, int port] | int', -\ 'socket_set_block(': 'resource socket | bool', -\ 'socket_set_nonblock(': 'resource socket | bool', -\ 'socket_set_option(': 'resource socket, int level, int optname, mixed optval | bool', -\ 'socket_shutdown(': 'resource socket [, int how] | bool', -\ 'socket_strerror(': 'int errno | string', -\ 'socket_write(': 'resource socket, string buffer [, int length] | int', -\ 'sort(': 'array &array [, int sort_flags] | bool', -\ 'soundex(': 'string str | string', -\ 'spl_classes(': 'void | array', -\ 'split(': 'string pattern, string string [, int limit] | array', -\ 'spliti(': 'string pattern, string string [, int limit] | array', -\ 'sprintf(': 'string format [, mixed args [, mixed ...]] | string', -\ 'sqlite_array_query(': 'resource dbhandle, string query [, int result_type [, bool decode_binary]] | array', -\ 'sqlite_busy_timeout(': 'resource dbhandle, int milliseconds | void', -\ 'sqlite_changes(': 'resource dbhandle | int', -\ 'sqlite_close(': 'resource dbhandle | void', -\ 'sqlite_column(': 'resource result, mixed index_or_name [, bool decode_binary] | mixed', -\ 'sqlite_create_aggregate(': 'resource dbhandle, string function_name, callback step_func, callback finalize_func [, int num_args] | void', -\ 'sqlite_create_function(': 'resource dbhandle, string function_name, callback callback [, int num_args] | void', -\ 'sqlite_current(': 'resource result [, int result_type [, bool decode_binary]] | array', -\ 'sqlite_error_string(': 'int error_code | string', -\ 'sqlite_escape_string(': 'string item | string', -\ 'sqlite_exec(': 'resource dbhandle, string query [, string &error_msg] | bool', -\ 'sqlite_factory(': 'string filename [, int mode [, string &error_message]] | SQLiteDatabase', -\ 'sqlite_fetch_all(': 'resource result [, int result_type [, bool decode_binary]] | array', -\ 'sqlite_fetch_array(': 'resource result [, int result_type [, bool decode_binary]] | array', -\ 'sqlite_fetch_column_types(': 'string table_name, resource dbhandle [, int result_type] | array', -\ 'sqlite_fetch_object(': 'resource result [, string class_name [, array ctor_params [, bool decode_binary]]] | object', -\ 'sqlite_fetch_single(': 'resource result [, bool decode_binary] | string', -\ 'sqlite_field_name(': 'resource result, int field_index | string', -\ 'sqlite_has_more(': 'resource result | bool', -\ 'sqlite_has_prev(': 'resource result | bool', -\ 'sqlite_key(': 'resource result | int', -\ 'sqlite_last_error(': 'resource dbhandle | int', -\ 'sqlite_last_insert_rowid(': 'resource dbhandle | int', -\ 'sqlite_libencoding(': 'void | string', -\ 'sqlite_libversion(': 'void | string', -\ 'sqlite_next(': 'resource result | bool', -\ 'sqlite_num_fields(': 'resource result | int', -\ 'sqlite_num_rows(': 'resource result | int', -\ 'sqlite_open(': 'string filename [, int mode [, string &error_message]] | resource', -\ 'sqlite_popen(': 'string filename [, int mode [, string &error_message]] | resource', -\ 'sqlite_prev(': 'resource result | bool', -\ 'sqlite_query(': 'resource dbhandle, string query [, int result_type [, string &error_msg]] | resource', -\ 'sqlite_rewind(': 'resource result | bool', -\ 'sqlite_seek(': 'resource result, int rownum | bool', -\ 'sqlite_single_query(': 'resource db, string query [, bool first_row_only [, bool decode_binary]] | array', -\ 'sqlite_udf_decode_binary(': 'string data | string', -\ 'sqlite_udf_encode_binary(': 'string data | string', -\ 'sqlite_unbuffered_query(': 'resource dbhandle, string query [, int result_type [, string &error_msg]] | resource', -\ 'sqlite_valid(': 'resource result | bool', -\ 'sql_regcase(': 'string string | string', -\ 'sqrt(': 'float arg | float', -\ 'srand(': '[int seed] | void', -\ 'sscanf(': 'string str, string format [, mixed &...] | mixed', -\ 'ssh2_auth_hostbased_file(': 'resource session, string username, string hostname, string pubkeyfile, string privkeyfile [, string passphrase [, string local_username]] | bool', -\ 'ssh2_auth_none(': 'resource session, string username | mixed', -\ 'ssh2_auth_password(': 'resource session, string username, string password | bool', -\ 'ssh2_auth_pubkey_file(': 'resource session, string username, string pubkeyfile, string privkeyfile [, string passphrase] | bool', -\ 'ssh2_connect(': 'string host [, int port [, array methods [, array callbacks]]] | resource', -\ 'ssh2_exec(': 'resource session, string command [, string pty [, array env [, int width [, int height [, int width_height_type]]]]] | resource', -\ 'ssh2_fetch_stream(': 'resource channel, int streamid | resource', -\ 'ssh2_fingerprint(': 'resource session [, int flags] | string', -\ 'ssh2_methods_negotiated(': 'resource session | array', -\ 'ssh2_publickey_add(': 'resource pkey, string algoname, string blob [, bool overwrite [, array attributes]] | bool', -\ 'ssh2_publickey_init(': 'resource session | resource', -\ 'ssh2_publickey_list(': 'resource pkey | array', -\ 'ssh2_publickey_remove(': 'resource pkey, string algoname, string blob | bool', -\ 'ssh2_scp_recv(': 'resource session, string remote_file, string local_file | bool', -\ 'ssh2_scp_send(': 'resource session, string local_file, string remote_file [, int create_mode] | bool', -\ 'ssh2_sftp(': 'resource session | resource', -\ 'ssh2_sftp_lstat(': 'resource sftp, string path | array', -\ 'ssh2_sftp_mkdir(': 'resource sftp, string dirname [, int mode [, bool recursive]] | bool', -\ 'ssh2_sftp_readlink(': 'resource sftp, string link | string', -\ 'ssh2_sftp_realpath(': 'resource sftp, string filename | string', -\ 'ssh2_sftp_rename(': 'resource sftp, string from, string to | bool', -\ 'ssh2_sftp_rmdir(': 'resource sftp, string dirname | bool', -\ 'ssh2_sftp_stat(': 'resource sftp, string path | array', -\ 'ssh2_sftp_symlink(': 'resource sftp, string target, string link | bool', -\ 'ssh2_sftp_unlink(': 'resource sftp, string filename | bool', -\ 'ssh2_shell(': 'resource session [, string term_type [, array env [, int width [, int height [, int width_height_type]]]]] | resource', -\ 'ssh2_tunnel(': 'resource session, string host, int port | resource', -\ 'stat(': 'string filename | array', -\ 'stats_absolute_deviation(': 'array a | float', -\ 'stats_cdf_beta(': 'float par1, float par2, float par3, int which | float', -\ 'stats_cdf_binomial(': 'float par1, float par2, float par3, int which | float', -\ 'stats_cdf_cauchy(': 'float par1, float par2, float par3, int which | float', -\ 'stats_cdf_chisquare(': 'float par1, float par2, int which | float', -\ 'stats_cdf_exponential(': 'float par1, float par2, int which | float', -\ 'stats_cdf_f(': 'float par1, float par2, float par3, int which | float', -\ 'stats_cdf_gamma(': 'float par1, float par2, float par3, int which | float', -\ 'stats_cdf_laplace(': 'float par1, float par2, float par3, int which | float', -\ 'stats_cdf_logistic(': 'float par1, float par2, float par3, int which | float', -\ 'stats_cdf_negative_binomial(': 'float par1, float par2, float par3, int which | float', -\ 'stats_cdf_noncentral_chisquare(': 'float par1, float par2, float par3, int which | float', -\ 'stats_cdf_noncentral_f(': 'float par1, float par2, float par3, float par4, int which | float', -\ 'stats_cdf_poisson(': 'float par1, float par2, int which | float', -\ 'stats_cdf_t(': 'float par1, float par2, int which | float', -\ 'stats_cdf_uniform(': 'float par1, float par2, float par3, int which | float', -\ 'stats_cdf_weibull(': 'float par1, float par2, float par3, int which | float', -\ 'stats_covariance(': 'array a, array b | float', -\ 'stats_dens_beta(': 'float x, float a, float b | float', -\ 'stats_dens_cauchy(': 'float x, float ave, float stdev | float', -\ 'stats_dens_chisquare(': 'float x, float dfr | float', -\ 'stats_dens_exponential(': 'float x, float scale | float', -\ 'stats_dens_f(': 'float x, float dfr1, float dfr2 | float', -\ 'stats_dens_gamma(': 'float x, float shape, float scale | float', -\ 'stats_dens_laplace(': 'float x, float ave, float stdev | float', -\ 'stats_dens_logistic(': 'float x, float ave, float stdev | float', -\ 'stats_dens_negative_binomial(': 'float x, float n, float pi | float', -\ 'stats_dens_normal(': 'float x, float ave, float stdev | float', -\ 'stats_dens_pmf_binomial(': 'float x, float n, float pi | float', -\ 'stats_dens_pmf_hypergeometric(': 'float n1, float n2, float N1, float N2 | float', -\ 'stats_dens_pmf_poisson(': 'float x, float lb | float', -\ 'stats_dens_t(': 'float x, float dfr | float', -\ 'stats_dens_weibull(': 'float x, float a, float b | float', -\ 'stats_den_uniform(': 'float x, float a, float b | float', -\ 'stats_harmonic_mean(': 'array a | number', -\ 'stats_kurtosis(': 'array a | float', -\ 'stats_rand_gen_beta(': 'float a, float b | float', -\ 'stats_rand_gen_chisquare(': 'float df | float', -\ 'stats_rand_gen_exponential(': 'float av | float', -\ 'stats_rand_gen_f(': 'float dfn, float dfd | float', -\ 'stats_rand_gen_funiform(': 'float low, float high | float', -\ 'stats_rand_gen_gamma(': 'float a, float r | float', -\ 'stats_rand_gen_ibinomial(': 'int n, float pp | int', -\ 'stats_rand_gen_ibinomial_negative(': 'int n, float p | int', -\ 'stats_rand_gen_int(': 'void | int', -\ 'stats_rand_gen_ipoisson(': 'float mu | int', -\ 'stats_rand_gen_iuniform(': 'int low, int high | int', -\ 'stats_rand_gen_noncenral_chisquare(': 'float df, float xnonc | float', -\ 'stats_rand_gen_noncentral_f(': 'float dfn, float dfd, float xnonc | float', -\ 'stats_rand_gen_noncentral_t(': 'float df, float xnonc | float', -\ 'stats_rand_gen_normal(': 'float av, float sd | float', -\ 'stats_rand_gen_t(': 'float df | float', -\ 'stats_rand_get_seeds(': 'void | array', -\ 'stats_rand_phrase_to_seeds(': 'string phrase | array', -\ 'stats_rand_ranf(': 'void | float', -\ 'stats_rand_setall(': 'int iseed1, int iseed2 | void', -\ 'stats_skew(': 'array a | float', -\ 'stats_standard_deviation(': 'array a [, bool sample] | float', -\ 'stats_stat_binomial_coef(': 'int x, int n | float', -\ 'stats_stat_correlation(': 'array arr1, array arr2 | float', -\ 'stats_stat_gennch(': 'int n | float', -\ 'stats_stat_independent_t(': 'array arr1, array arr2 | float', -\ 'stats_stat_innerproduct(': 'array arr1, array arr2 | float', -\ 'stats_stat_noncentral_t(': 'float par1, float par2, float par3, int which | float', -\ 'stats_stat_paired_t(': 'array arr1, array arr2 | float', -\ 'stats_stat_percentile(': 'float df, float xnonc | float', -\ 'stats_stat_powersum(': 'array arr, float power | float', -\ 'stats_variance(': 'array a [, bool sample] | float', -\ 'strcasecmp(': 'string str1, string str2 | int', -\ 'strcmp(': 'string str1, string str2 | int', -\ 'strcoll(': 'string str1, string str2 | int', -\ 'strcspn(': 'string str1, string str2 [, int start [, int length]] | int', -\ 'stream_bucket_append(': 'resource brigade, resource bucket | void', -\ 'stream_bucket_make_writeable(': 'resource brigade | object', -\ 'stream_bucket_new(': 'resource stream, string buffer | object', -\ 'stream_bucket_prepend(': 'resource brigade, resource bucket | void', -\ 'stream_context_create(': '[array options] | resource', -\ 'stream_context_get_default(': '[array options] | resource', -\ 'stream_context_get_options(': 'resource stream_or_context | array', -\ 'stream_context_set_option(': 'resource stream_or_context, string wrapper, string option, mixed value | bool', -\ 'stream_context_set_params(': 'resource stream_or_context, array params | bool', -\ 'stream_copy_to_stream(': 'resource source, resource dest [, int maxlength [, int offset]] | int', -\ 'stream_filter_append(': 'resource stream, string filtername [, int read_write [, mixed params]] | resource', -\ 'stream_filter_prepend(': 'resource stream, string filtername [, int read_write [, mixed params]] | resource', -\ 'stream_filter_register(': 'string filtername, string classname | bool', -\ 'stream_filter_remove(': 'resource stream_filter | bool', -\ 'stream_get_contents(': 'resource handle [, int maxlength [, int offset]] | string', -\ 'stream_get_filters(': 'void | array', -\ 'stream_get_line(': 'resource handle, int length [, string ending] | string', -\ 'stream_get_meta_data(': 'resource stream | array', -\ 'stream_get_transports(': 'void | array', -\ 'stream_get_wrappers(': 'void | array', -\ 'stream_select(': 'array &read, array &write, array &except, int tv_sec [, int tv_usec] | int', -\ 'stream_set_blocking(': 'resource stream, int mode | bool', -\ 'stream_set_timeout(': 'resource stream, int seconds [, int microseconds] | bool', -\ 'stream_set_write_buffer(': 'resource stream, int buffer | int', -\ 'stream_socket_accept(': 'resource server_socket [, float timeout [, string &peername]] | resource', -\ 'stream_socket_client(': 'string remote_socket [, int &errno [, string &errstr [, float timeout [, int flags [, resource context]]]]] | resource', -\ 'stream_socket_enable_crypto(': 'resource stream, bool enable [, int crypto_type [, resource session_stream]] | mixed', -\ 'stream_socket_get_name(': 'resource handle, bool want_peer | string', -\ 'stream_socket_pair(': 'int domain, int type, int protocol | array', -\ 'stream_socket_recvfrom(': 'resource socket, int length [, int flags [, string &address]] | string', -\ 'stream_socket_sendto(': 'resource socket, string data [, int flags [, string address]] | int', -\ 'stream_socket_server(': 'string local_socket [, int &errno [, string &errstr [, int flags [, resource context]]]] | resource', -\ 'stream_wrapper_register(': 'string protocol, string classname | bool', -\ 'stream_wrapper_restore(': 'string protocol | bool', -\ 'stream_wrapper_unregister(': 'string protocol | bool', -\ 'strftime(': 'string format [, int timestamp] | string', -\ 'stripcslashes(': 'string str | string', -\ 'stripos(': 'string haystack, string needle [, int offset] | int', -\ 'stripslashes(': 'string str | string', -\ 'strip_tags(': 'string str [, string allowable_tags] | string', -\ 'str_ireplace(': 'mixed search, mixed replace, mixed subject [, int &count] | mixed', -\ 'stristr(': 'string haystack, string needle | string', -\ 'strlen(': 'string string | int', -\ 'strnatcasecmp(': 'string str1, string str2 | int', -\ 'strnatcmp(': 'string str1, string str2 | int', -\ 'strncasecmp(': 'string str1, string str2, int len | int', -\ 'strncmp(': 'string str1, string str2, int len | int', -\ 'str_pad(': 'string input, int pad_length [, string pad_string [, int pad_type]] | string', -\ 'strpbrk(': 'string haystack, string char_list | string', -\ 'strpos(': 'string haystack, mixed needle [, int offset] | int', -\ 'strptime(': 'string date, string format | array', -\ 'strrchr(': 'string haystack, string needle | string', -\ 'str_repeat(': 'string input, int multiplier | string', -\ 'str_replace(': 'mixed search, mixed replace, mixed subject [, int &count] | mixed', -\ 'strrev(': 'string string | string', -\ 'strripos(': 'string haystack, string needle [, int offset] | int', -\ 'str_rot13(': 'string str | string', -\ 'strrpos(': 'string haystack, string needle [, int offset] | int', -\ 'str_shuffle(': 'string str | string', -\ 'str_split(': 'string string [, int split_length] | array', -\ 'strspn(': 'string str1, string str2 [, int start [, int length]] | int', -\ 'strstr(': 'string haystack, string needle | string', -\ 'strtok(': 'string str, string token | string', -\ 'strtolower(': 'string str | string', -\ 'strtotime(': 'string time [, int now] | int', -\ 'strtoupper(': 'string string | string', -\ 'strtr(': 'string str, string from, string to | string', -\ 'strval(': 'mixed var | string', -\ 'str_word_count(': 'string string [, int format [, string charlist]] | mixed', -\ 'substr_compare(': 'string main_str, string str, int offset [, int length [, bool case_insensitivity]] | int', -\ 'substr_count(': 'string haystack, string needle [, int offset [, int length]] | int', -\ 'substr(': 'string string, int start [, int length] | string', -\ 'substr_replace(': 'mixed string, string replacement, int start [, int length] | mixed', -\ 'swf_actiongeturl(': 'string url, string target | void', -\ 'swf_actiongotoframe(': 'int framenumber | void', -\ 'swf_actiongotolabel(': 'string label | void', -\ 'swfaction(': 'string script | SWFAction', -\ 'swf_actionnextframe(': 'void | void', -\ 'swf_actionplay(': 'void | void', -\ 'swf_actionprevframe(': 'void | void', -\ 'swf_actionsettarget(': 'string target | void', -\ 'swf_actionstop(': 'void | void', -\ 'swf_actiontogglequality(': 'void | void', -\ 'swf_actionwaitforframe(': 'int framenumber, int skipcount | void', -\ 'swf_addbuttonrecord(': 'int states, int shapeid, int depth | void', -\ 'swf_addcolor(': 'float r, float g, float b, float a | void', -\ 'swfbitmap->getheight(': 'void | float', -\ 'swfbitmap->getwidth(': 'void | float', -\ 'swfbitmap(': 'mixed file [, mixed alphafile] | SWFBitmap', -\ 'swfbutton->addaction(': 'resource action, int flags | void', -\ 'swfbutton->addshape(': 'resource shape, int flags | void', -\ 'swfbutton(': 'void | SWFButton', -\ 'swfbutton->setaction(': 'resource action | void', -\ 'swfbutton->setdown(': 'resource shape | void', -\ 'swfbutton->sethit(': 'resource shape | void', -\ 'swfbutton->setover(': 'resource shape | void', -\ 'swfbutton->setup(': 'resource shape | void', -\ 'swf_closefile(': '[int return_file] | void', -\ 'swf_definebitmap(': 'int objid, string image_name | void', -\ 'swf_definefont(': 'int fontid, string fontname | void', -\ 'swf_defineline(': 'int objid, float x1, float y1, float x2, float y2, float width | void', -\ 'swf_definepoly(': 'int objid, array coords, int npoints, float width | void', -\ 'swf_definerect(': 'int objid, float x1, float y1, float x2, float y2, float width | void', -\ 'swf_definetext(': 'int objid, string str, int docenter | void', -\ 'swfdisplayitem->addcolor(': 'int red, int green, int blue [, int a] | void', -\ 'swfdisplayitem->move(': 'int dx, int dy | void', -\ 'swfdisplayitem->moveto(': 'int x, int y | void', -\ 'swfdisplayitem->multcolor(': 'int red, int green, int blue [, int a] | void', -\ 'swfdisplayitem->remove(': 'void | void', -\ 'swfdisplayitem->rotate(': 'float ddegrees | void', -\ 'swfdisplayitem->rotateto(': 'float degrees | void', -\ 'swfdisplayitem->scale(': 'int dx, int dy | void', -\ 'swfdisplayitem->scaleto(': 'int x [, int y] | void', -\ 'swfdisplayitem->setdepth(': 'float depth | void', -\ 'swfdisplayitem->setname(': 'string name | void', -\ 'swfdisplayitem->setratio(': 'float ratio | void', -\ 'swfdisplayitem->skewx(': 'float ddegrees | void', -\ 'swfdisplayitem->skewxto(': 'float degrees | void', -\ 'swfdisplayitem->skewy(': 'float ddegrees | void', -\ 'swfdisplayitem->skewyto(': 'float degrees | void', -\ 'swf_endbutton(': 'void | void', -\ 'swf_enddoaction(': 'void | void', -\ 'swf_endshape(': 'void | void', -\ 'swf_endsymbol(': 'void | void', -\ 'swffill(': 'void | SWFFill', -\ 'swffill->moveto(': 'int x, int y | void', -\ 'swffill->rotateto(': 'float degrees | void', -\ 'swffill->scaleto(': 'int x [, int y] | void', -\ 'swffill->skewxto(': 'float x | void', -\ 'swffill->skewyto(': 'float y | void', -\ 'swffont->getwidth(': 'string string | float', -\ 'swffont(': 'string filename | SWFFont', -\ 'swf_fontsize(': 'float size | void', -\ 'swf_fontslant(': 'float slant | void', -\ 'swf_fonttracking(': 'float tracking | void', -\ 'swf_getbitmapinfo(': 'int bitmapid | array', -\ 'swf_getfontinfo(': 'void | array', -\ 'swf_getframe(': 'void | int', -\ 'swfgradient->addentry(': 'float ratio, int red, int green, int blue [, int a] | void', -\ 'swfgradient(': 'void | SWFGradient', -\ 'swf_labelframe(': 'string name | void', -\ 'swf_lookat(': 'float view_x, float view_y, float view_z, float reference_x, float reference_y, float reference_z, float twist | void', -\ 'swf_modifyobject(': 'int depth, int how | void', -\ 'swfmorph->getshape1(': 'void | mixed', -\ 'swfmorph->getshape2(': 'void | mixed', -\ 'swfmorph(': 'void | SWFMorph', -\ 'swfmovie->add(': 'resource instance | void', -\ 'swfmovie(': 'void | SWFMovie', -\ 'swfmovie->nextframe(': 'void | void', -\ 'swfmovie->output(': '[int compression] | int', -\ 'swfmovie->remove(': 'resource instance | void', -\ 'swfmovie->save(': 'string filename [, int compression] | int', -\ 'swfmovie->setbackground(': 'int red, int green, int blue | void', -\ 'swfmovie->setdimension(': 'int width, int height | void', -\ 'swfmovie->setframes(': 'string numberofframes | void', -\ 'swfmovie->setrate(': 'int rate | void', -\ 'swfmovie->streammp3(': 'mixed mp3File | void', -\ 'swf_mulcolor(': 'float r, float g, float b, float a | void', -\ 'swf_nextid(': 'void | int', -\ 'swf_oncondition(': 'int transition | void', -\ 'swf_openfile(': 'string filename, float width, float height, float framerate, float r, float g, float b | void', -\ 'swf_ortho2(': 'float xmin, float xmax, float ymin, float ymax | void', -\ 'swf_ortho(': 'float xmin, float xmax, float ymin, float ymax, float zmin, float zmax | void', -\ 'swf_perspective(': 'float fovy, float aspect, float near, float far | void', -\ 'swf_placeobject(': 'int objid, int depth | void', -\ 'swf_polarview(': 'float dist, float azimuth, float incidence, float twist | void', -\ 'swf_popmatrix(': 'void | void', -\ 'swf_posround(': 'int round | void', -\ 'SWFPrebuiltClip(': '[string file] | SWFPrebuiltClip', -\ 'swf_pushmatrix(': 'void | void', -\ 'swf_removeobject(': 'int depth | void', -\ 'swf_rotate(': 'float angle, string axis | void', -\ 'swf_scale(': 'float x, float y, float z | void', -\ 'swf_setfont(': 'int fontid | void', -\ 'swf_setframe(': 'int framenumber | void', -\ 'SWFShape->addFill(': 'int red, int green, int blue [, int a] | SWFFill', -\ 'swf_shapearc(': 'float x, float y, float r, float ang1, float ang2 | void', -\ 'swf_shapecurveto3(': 'float x1, float y1, float x2, float y2, float x3, float y3 | void', -\ 'swf_shapecurveto(': 'float x1, float y1, float x2, float y2 | void', -\ 'swfshape->drawcurve(': 'int controldx, int controldy, int anchordx, int anchordy [, int targetdx, int targetdy] | int', -\ 'swfshape->drawcurveto(': 'int controlx, int controly, int anchorx, int anchory [, int targetx, int targety] | int', -\ 'swfshape->drawline(': 'int dx, int dy | void', -\ 'swfshape->drawlineto(': 'int x, int y | void', -\ 'swf_shapefillbitmapclip(': 'int bitmapid | void', -\ 'swf_shapefillbitmaptile(': 'int bitmapid | void', -\ 'swf_shapefilloff(': 'void | void', -\ 'swf_shapefillsolid(': 'float r, float g, float b, float a | void', -\ 'swfshape(': 'void | SWFShape', -\ 'swf_shapelinesolid(': 'float r, float g, float b, float a, float width | void', -\ 'swf_shapelineto(': 'float x, float y | void', -\ 'swfshape->movepen(': 'int dx, int dy | void', -\ 'swfshape->movepento(': 'int x, int y | void', -\ 'swf_shapemoveto(': 'float x, float y | void', -\ 'swfshape->setleftfill(': 'swfgradient fill | void', -\ 'swfshape->setline(': 'swfshape shape | void', -\ 'swfshape->setrightfill(': 'swfgradient fill | void', -\ 'swf_showframe(': 'void | void', -\ 'SWFSound(': 'string filename, int flags | SWFSound', -\ 'swfsprite->add(': 'resource object | void', -\ 'swfsprite(': 'void | SWFSprite', -\ 'swfsprite->nextframe(': 'void | void', -\ 'swfsprite->remove(': 'resource object | void', -\ 'swfsprite->setframes(': 'int numberofframes | void', -\ 'swf_startbutton(': 'int objid, int type | void', -\ 'swf_startdoaction(': 'void | void', -\ 'swf_startshape(': 'int objid | void', -\ 'swf_startsymbol(': 'int objid | void', -\ 'swftext->addstring(': 'string string | void', -\ 'swftextfield->addstring(': 'string string | void', -\ 'swftextfield->align(': 'int alignement | void', -\ 'swftextfield(': '[int flags] | SWFTextField', -\ 'swftextfield->setbounds(': 'int width, int height | void', -\ 'swftextfield->setcolor(': 'int red, int green, int blue [, int a] | void', -\ 'swftextfield->setfont(': 'string font | void', -\ 'swftextfield->setheight(': 'int height | void', -\ 'swftextfield->setindentation(': 'int width | void', -\ 'swftextfield->setleftmargin(': 'int width | void', -\ 'swftextfield->setlinespacing(': 'int height | void', -\ 'swftextfield->setmargins(': 'int left, int right | void', -\ 'swftextfield->setname(': 'string name | void', -\ 'swftextfield->setrightmargin(': 'int width | void', -\ 'swftext->getwidth(': 'string string | float', -\ 'swftext(': 'void | SWFText', -\ 'swftext->moveto(': 'int x, int y | void', -\ 'swftext->setcolor(': 'int red, int green, int blue [, int a] | void', -\ 'swftext->setfont(': 'string font | void', -\ 'swftext->setheight(': 'int height | void', -\ 'swftext->setspacing(': 'float spacing | void', -\ 'swf_textwidth(': 'string str | float', -\ 'swf_translate(': 'float x, float y, float z | void', -\ 'SWFVideoStream(': '[string file] | SWFVideoStream', -\ 'swf_viewport(': 'float xmin, float xmax, float ymin, float ymax | void', -\ 'sybase_affected_rows(': '[resource link_identifier] | int', -\ 'sybase_close(': '[resource link_identifier] | bool', -\ 'sybase_connect(': '[string servername [, string username [, string password [, string charset [, string appname]]]]] | resource', -\ 'sybase_data_seek(': 'resource result_identifier, int row_number | bool', -\ 'sybase_deadlock_retry_count(': 'int retry_count | void', -\ 'sybase_fetch_array(': 'resource result | array', -\ 'sybase_fetch_assoc(': 'resource result | array', -\ 'sybase_fetch_field(': 'resource result [, int field_offset] | object', -\ 'sybase_fetch_object(': 'resource result [, mixed object] | object', -\ 'sybase_fetch_row(': 'resource result | array', -\ 'sybase_field_seek(': 'resource result, int field_offset | bool', -\ 'sybase_free_result(': 'resource result | bool', -\ 'sybase_get_last_message(': 'void | string', -\ 'sybase_min_client_severity(': 'int severity | void', -\ 'sybase_min_error_severity(': 'int severity | void', -\ 'sybase_min_message_severity(': 'int severity | void', -\ 'sybase_min_server_severity(': 'int severity | void', -\ 'sybase_num_fields(': 'resource result | int', -\ 'sybase_num_rows(': 'resource result | int', -\ 'sybase_pconnect(': '[string servername [, string username [, string password [, string charset [, string appname]]]]] | resource', -\ 'sybase_query(': 'string query [, resource link_identifier] | mixed', -\ 'sybase_result(': 'resource result, int row, mixed field | string', -\ 'sybase_select_db(': 'string database_name [, resource link_identifier] | bool', -\ 'sybase_set_message_handler(': 'callback handler [, resource connection] | bool', -\ 'sybase_unbuffered_query(': 'string query, resource link_identifier [, bool store_result] | resource', -\ 'symlink(': 'string target, string link | bool', -\ 'sys_getloadavg(': 'void | array', -\ 'syslog(': 'int priority, string message | bool', -\ 'system(': 'string command [, int &return_var] | string', -\ 'tanh(': 'float arg | float', -\ 'tan(': 'float arg | float', -\ 'tcpwrap_check(': 'string daemon, string address [, string user [, bool nodns]] | bool', -\ 'tempnam(': 'string dir, string prefix | string', -\ 'textdomain(': 'string text_domain | string', -\ 'tidy_access_count(': 'tidy object | int', -\ 'tidy_config_count(': 'tidy object | int', -\ 'tidy_error_count(': 'tidy object | int', -\ 'tidy_get_output(': 'tidy object | string', -\ 'tidy_load_config(': 'string filename, string encoding | void', -\ 'tidy_node->get_attr(': 'int attrib_id | tidy_attr', -\ 'tidy_node->get_nodes(': 'int node_id | array', -\ 'tidyNode->hasChildren(': 'void | bool', -\ 'tidyNode->hasSiblings(': 'void | bool', -\ 'tidyNode->isAsp(': 'void | bool', -\ 'tidyNode->isComment(': 'void | bool', -\ 'tidyNode->isHtml(': 'void | bool', -\ 'tidyNode->isJste(': 'void | bool', -\ 'tidyNode->isPhp(': 'void | bool', -\ 'tidyNode->isText(': 'void | bool', -\ 'tidy_node->next(': 'void | tidy_node', -\ 'tidy_node->prev(': 'void | tidy_node', -\ 'tidy_repair_file(': 'string filename [, mixed config [, string encoding [, bool use_include_path]]] | string', -\ 'tidy_repair_string(': 'string data [, mixed config [, string encoding]] | string', -\ 'tidy_reset_config(': 'void | bool', -\ 'tidy_save_config(': 'string filename | bool', -\ 'tidy_set_encoding(': 'string encoding | bool', -\ 'tidy_setopt(': 'string option, mixed value | bool', -\ 'tidy_warning_count(': 'tidy object | int', -\ 'time(': 'void | int', -\ 'time_nanosleep(': 'int seconds, int nanoseconds | mixed', -\ 'time_sleep_until(': 'float timestamp | bool', -\ 'tmpfile(': 'void | resource', -\ 'token_get_all(': 'string source | array', -\ 'token_name(': 'int token | string', -\ 'touch(': 'string filename [, int time [, int atime]] | bool', -\ 'trigger_error(': 'string error_msg [, int error_type] | bool', -\ 'trim(': 'string str [, string charlist] | string', -\ 'uasort(': 'array &array, callback cmp_function | bool', -\ 'ucfirst(': 'string str | string', -\ 'ucwords(': 'string str | string', -\ 'udm_add_search_limit(': 'resource agent, int var, string val | bool', -\ 'udm_alloc_agent_array(': 'array databases | resource', -\ 'udm_alloc_agent(': 'string dbaddr [, string dbmode] | resource', -\ 'udm_api_version(': 'void | int', -\ 'udm_cat_list(': 'resource agent, string category | array', -\ 'udm_cat_path(': 'resource agent, string category | array', -\ 'udm_check_charset(': 'resource agent, string charset | bool', -\ 'udm_check_stored(': 'resource agent, int link, string doc_id | int', -\ 'udm_clear_search_limits(': 'resource agent | bool', -\ 'udm_close_stored(': 'resource agent, int link | int', -\ 'udm_crc32(': 'resource agent, string str | int', -\ 'udm_errno(': 'resource agent | int', -\ 'udm_error(': 'resource agent | string', -\ 'udm_find(': 'resource agent, string query | resource', -\ 'udm_free_agent(': 'resource agent | int', -\ 'udm_free_ispell_data(': 'int agent | bool', -\ 'udm_free_res(': 'resource res | bool', -\ 'udm_get_doc_count(': 'resource agent | int', -\ 'udm_get_res_field(': 'resource res, int row, int field | string', -\ 'udm_get_res_param(': 'resource res, int param | string', -\ 'udm_hash32(': 'resource agent, string str | int', -\ 'udm_load_ispell_data(': 'resource agent, int var, string val1, string val2, int flag | bool', -\ 'udm_open_stored(': 'resource agent, string storedaddr | int', -\ 'udm_set_agent_param(': 'resource agent, int var, string val | bool', -\ 'uksort(': 'array &array, callback cmp_function | bool', -\ 'umask(': '[int mask] | int', -\ 'unicode_encode(': 'unicode input, string encoding | string', -\ 'unicode_semantics(': 'void | bool', -\ 'uniqid(': '[string prefix [, bool more_entropy]] | string', -\ 'unixtojd(': '[int timestamp] | int', -\ 'unlink(': 'string filename [, resource context] | bool', -\ 'unpack(': 'string format, string data | array', -\ 'unregister_tick_function(': 'string function_name | void', -\ 'unserialize(': 'string str | mixed', -\ 'unset(': 'mixed var [, mixed var [, mixed ...]] | void', -\ 'urldecode(': 'string str | string', -\ 'urlencode(': 'string str | string', -\ 'use_soap_error_handler(': '[bool handler] | bool', -\ 'usleep(': 'int micro_seconds | void', -\ 'usort(': 'array &array, callback cmp_function | bool', -\ 'utf8_decode(': 'string data | string', -\ 'utf8_encode(': 'string data | string', -\ 'var_dump(': 'mixed expression [, mixed expression [, ...]] | void', -\ 'var_export(': 'mixed expression [, bool return] | mixed', -\ 'variant_abs(': 'mixed val | mixed', -\ 'variant_add(': 'mixed left, mixed right | mixed', -\ 'variant_and(': 'mixed left, mixed right | mixed', -\ 'variant_cast(': 'variant variant, int type | variant', -\ 'variant_cat(': 'mixed left, mixed right | mixed', -\ 'variant_cmp(': 'mixed left, mixed right [, int lcid [, int flags]] | int', -\ 'variant_date_from_timestamp(': 'int timestamp | variant', -\ 'variant_date_to_timestamp(': 'variant variant | int', -\ 'variant_div(': 'mixed left, mixed right | mixed', -\ 'variant_eqv(': 'mixed left, mixed right | mixed', -\ 'variant_fix(': 'mixed variant | mixed', -\ 'variant_get_type(': 'variant variant | int', -\ 'variant_idiv(': 'mixed left, mixed right | mixed', -\ 'variant_imp(': 'mixed left, mixed right | mixed', -\ 'variant_int(': 'mixed variant | mixed', -\ 'variant_mod(': 'mixed left, mixed right | mixed', -\ 'variant_mul(': 'mixed left, mixed right | mixed', -\ 'variant_neg(': 'mixed variant | mixed', -\ 'variant_not(': 'mixed variant | mixed', -\ 'variant_or(': 'mixed left, mixed right | mixed', -\ 'variant_pow(': 'mixed left, mixed right | mixed', -\ 'variant_round(': 'mixed variant, int decimals | mixed', -\ 'variant_set(': 'variant variant, mixed value | void', -\ 'variant_set_type(': 'variant variant, int type | void', -\ 'variant_sub(': 'mixed left, mixed right | mixed', -\ 'variant_xor(': 'mixed left, mixed right | mixed', -\ 'version_compare(': 'string version1, string version2 [, string operator] | mixed', -\ 'vfprintf(': 'resource handle, string format, array args | int', -\ 'virtual(': 'string filename | bool', -\ 'vpopmail_add_alias_domain_ex(': 'string olddomain, string newdomain | bool', -\ 'vpopmail_add_alias_domain(': 'string domain, string aliasdomain | bool', -\ 'vpopmail_add_domain_ex(': 'string domain, string passwd [, string quota [, string bounce [, bool apop]]] | bool', -\ 'vpopmail_add_domain(': 'string domain, string dir, int uid, int gid | bool', -\ 'vpopmail_add_user(': 'string user, string domain, string password [, string gecos [, bool apop]] | bool', -\ 'vpopmail_alias_add(': 'string user, string domain, string alias | bool', -\ 'vpopmail_alias_del_domain(': 'string domain | bool', -\ 'vpopmail_alias_del(': 'string user, string domain | bool', -\ 'vpopmail_alias_get_all(': 'string domain | array', -\ 'vpopmail_alias_get(': 'string alias, string domain | array', -\ 'vpopmail_auth_user(': 'string user, string domain, string password [, string apop] | bool', -\ 'vpopmail_del_domain_ex(': 'string domain | bool', -\ 'vpopmail_del_domain(': 'string domain | bool', -\ 'vpopmail_del_user(': 'string user, string domain | bool', -\ 'vpopmail_error(': 'void | string', -\ 'vpopmail_passwd(': 'string user, string domain, string password [, bool apop] | bool', -\ 'vpopmail_set_user_quota(': 'string user, string domain, string quota | bool', -\ 'vprintf(': 'string format, array args | int', -\ 'vsprintf(': 'string format, array args | string', -\ 'w32api_deftype(': 'string typename, string member1_type, string member1_name [, string ... [, string ...]] | bool', -\ 'w32api_init_dtype(': 'string typename, mixed value [, mixed ...] | resource', -\ 'w32api_invoke_function(': 'string funcname, mixed argument [, mixed ...] | mixed', -\ 'w32api_register_function(': 'string library, string function_name, string return_type | bool', -\ 'w32api_set_call_method(': 'int method | void', -\ 'wddx_add_vars(': 'int packet_id, mixed name_var [, mixed ...] | bool', -\ 'wddx_packet_end(': 'resource packet_id | string', -\ 'wddx_packet_start(': '[string comment] | resource', -\ 'wddx_serialize_value(': 'mixed var [, string comment] | string', -\ 'wddx_serialize_vars(': 'mixed var_name [, mixed ...] | string', -\ 'wddx_unserialize(': 'string packet | mixed', -\ 'win32_create_service(': 'array details [, string machine] | int', -\ 'win32_delete_service(': 'string servicename [, string machine] | int', -\ 'win32_get_last_control_message(': 'void | int', -\ 'win32_ps_list_procs(': 'void | array', -\ 'win32_ps_stat_mem(': 'void | array', -\ 'win32_ps_stat_proc(': '[int pid] | array', -\ 'win32_query_service_status(': 'string servicename [, string machine] | mixed', -\ 'win32_set_service_status(': 'int status | bool', -\ 'win32_start_service_ctrl_dispatcher(': 'string name | bool', -\ 'win32_start_service(': 'string servicename [, string machine] | int', -\ 'win32_stop_service(': 'string servicename [, string machine] | int', -\ 'wordwrap(': 'string str [, int width [, string break [, bool cut]]] | string', -\ 'xattr_get(': 'string filename, string name [, int flags] | string', -\ 'xattr_list(': 'string filename [, int flags] | array', -\ 'xattr_remove(': 'string filename, string name [, int flags] | bool', -\ 'xattr_set(': 'string filename, string name, string value [, int flags] | bool', -\ 'xattr_supported(': 'string filename [, int flags] | bool', -\ 'xdiff_file_diff_binary(': 'string file1, string file2, string dest | bool', -\ 'xdiff_file_diff(': 'string file1, string file2, string dest [, int context [, bool minimal]] | bool', -\ 'xdiff_file_merge3(': 'string file1, string file2, string file3, string dest | mixed', -\ 'xdiff_file_patch_binary(': 'string file, string patch, string dest | bool', -\ 'xdiff_file_patch(': 'string file, string patch, string dest [, int flags] | mixed', -\ 'xdiff_string_diff_binary(': 'string str1, string str2 | string', -\ 'xdiff_string_diff(': 'string str1, string str2 [, int context [, bool minimal]] | string', -\ 'xdiff_string_merge3(': 'string str1, string str2, string str3 [, string &error] | mixed', -\ 'xdiff_string_patch_binary(': 'string str, string patch | string', -\ 'xdiff_string_patch(': 'string str, string patch [, int flags [, string &error]] | string', -\ 'xml_error_string(': 'int code | string', -\ 'xml_get_current_byte_index(': 'resource parser | int', -\ 'xml_get_current_column_number(': 'resource parser | int', -\ 'xml_get_current_line_number(': 'resource parser | int', -\ 'xml_get_error_code(': 'resource parser | int', -\ 'xml_parse(': 'resource parser, string data [, bool is_final] | int', -\ 'xml_parse_into_struct(': 'resource parser, string data, array &values [, array &index] | int', -\ 'xml_parser_create(': '[string encoding] | resource', -\ 'xml_parser_create_ns(': '[string encoding [, string separator]] | resource', -\ 'xml_parser_free(': 'resource parser | bool', -\ 'xml_parser_get_option(': 'resource parser, int option | mixed', -\ 'xml_parser_set_option(': 'resource parser, int option, mixed value | bool', -\ 'xmlrpc_decode(': 'string xml [, string encoding] | array', -\ 'xmlrpc_decode_request(': 'string xml, string &method [, string encoding] | array', -\ 'xmlrpc_encode(': 'mixed value | string', -\ 'xmlrpc_encode_request(': 'string method, mixed params [, array output_options] | string', -\ 'xmlrpc_get_type(': 'mixed value | string', -\ 'xmlrpc_is_fault(': 'array arg | bool', -\ 'xmlrpc_parse_method_descriptions(': 'string xml | array', -\ 'xmlrpc_server_add_introspection_data(': 'resource server, array desc | int', -\ 'xmlrpc_server_call_method(': 'resource server, string xml, mixed user_data [, array output_options] | string', -\ 'xmlrpc_server_create(': 'void | resource', -\ 'xmlrpc_server_destroy(': 'resource server | int', -\ 'xmlrpc_server_register_introspection_callback(': 'resource server, string function | bool', -\ 'xmlrpc_server_register_method(': 'resource server, string method_name, string function | bool', -\ 'xmlrpc_set_type(': 'string &value, string type | bool', -\ 'xml_set_character_data_handler(': 'resource parser, callback handler | bool', -\ 'xml_set_default_handler(': 'resource parser, callback handler | bool', -\ 'xml_set_element_handler(': 'resource parser, callback start_element_handler, callback end_element_handler | bool', -\ 'xml_set_end_namespace_decl_handler(': 'resource parser, callback handler | bool', -\ 'xml_set_external_entity_ref_handler(': 'resource parser, callback handler | bool', -\ 'xml_set_notation_decl_handler(': 'resource parser, callback handler | bool', -\ 'xml_set_object(': 'resource parser, object &object | bool', -\ 'xml_set_processing_instruction_handler(': 'resource parser, callback handler | bool', -\ 'xml_set_start_namespace_decl_handler(': 'resource parser, callback handler | bool', -\ 'xml_set_unparsed_entity_decl_handler(': 'resource parser, callback handler | bool', -\ 'xmlwriter_end_attribute(': 'resource xmlwriter | bool', -\ 'xmlwriter_end_cdata(': 'resource xmlwriter | bool', -\ 'xmlwriter_end_comment(': 'resource xmlwriter | bool', -\ 'xmlwriter_end_document(': 'resource xmlwriter | bool', -\ 'xmlwriter_end_dtd_attlist(': 'resource xmlwriter | bool', -\ 'xmlwriter_end_dtd_element(': 'resource xmlwriter | bool', -\ 'xmlwriter_end_dtd_entity(': 'resource xmlwriter | bool', -\ 'xmlwriter_end_dtd(': 'resource xmlwriter | bool', -\ 'xmlwriter_end_element(': 'resource xmlwriter | bool', -\ 'xmlwriter_end_pi(': 'resource xmlwriter | bool', -\ 'xmlwriter_flush(': 'resource xmlwriter [, bool empty] | mixed', -\ 'xmlwriter_full_end_element(': 'resource xmlwriter | bool', -\ 'xmlwriter_open_memory(': 'void | resource', -\ 'xmlwriter_open_uri(': 'string source | resource', -\ 'xmlwriter_output_memory(': 'resource xmlwriter [, bool flush] | string', -\ 'xmlwriter_set_indent(': 'resource xmlwriter, bool indent | bool', -\ 'xmlwriter_set_indent_string(': 'resource xmlwriter, string indentString | bool', -\ 'xmlwriter_start_attribute(': 'resource xmlwriter, string name | bool', -\ 'xmlwriter_start_attribute_ns(': 'resource xmlwriter, string prefix, string name, string uri | bool', -\ 'xmlwriter_start_cdata(': 'resource xmlwriter | bool', -\ 'xmlwriter_start_comment(': 'resource xmlwriter | bool', -\ 'xmlwriter_start_document(': 'resource xmlwriter [, string version [, string encoding [, string standalone]]] | bool', -\ 'xmlwriter_start_dtd_attlist(': 'resource xmlwriter, string name | bool', -\ 'xmlwriter_start_dtd_element(': 'resource xmlwriter, string name | bool', -\ 'xmlwriter_start_dtd_entity(': 'resource xmlwriter, string name, bool isparam | bool', -\ 'xmlwriter_start_dtd(': 'resource xmlwriter, string name [, string pubid [, string sysid]] | bool', -\ 'xmlwriter_start_element(': 'resource xmlwriter, string name | bool', -\ 'xmlwriter_start_element_ns(': 'resource xmlwriter, string prefix, string name, string uri | bool', -\ 'xmlwriter_start_pi(': 'resource xmlwriter, string target | bool', -\ 'xmlwriter_text(': 'resource xmlwriter, string content | bool', -\ 'xmlwriter_write_attribute(': 'resource xmlwriter, string name, string content | bool', -\ 'xmlwriter_write_attribute_ns(': 'resource xmlwriter, string prefix, string name, string uri, string content | bool', -\ 'xmlwriter_write_cdata(': 'resource xmlwriter, string content | bool', -\ 'xmlwriter_write_comment(': 'resource xmlwriter, string content | bool', -\ 'xmlwriter_write_dtd_attlist(': 'resource xmlwriter, string name, string content | bool', -\ 'xmlwriter_write_dtd_element(': 'resource xmlwriter, string name, string content | bool', -\ 'xmlwriter_write_dtd_entity(': 'resource xmlwriter, string name, string content | bool', -\ 'xmlwriter_write_dtd(': 'resource xmlwriter, string name [, string pubid [, string sysid [, string subset]]] | bool', -\ 'xmlwriter_write_element(': 'resource xmlwriter, string name, string content | bool', -\ 'xmlwriter_write_element_ns(': 'resource xmlwriter, string prefix, string name, string uri, string content | bool', -\ 'xmlwriter_write_pi(': 'resource xmlwriter, string target, string content | bool', -\ 'xmlwriter_write_raw(': 'resource xmlwriter, string content | bool', -\ 'xpath_new_context(': 'domdocument dom_document | XPathContext', -\ 'xpath_register_ns_auto(': 'XPathContext xpath_context [, object context_node] | bool', -\ 'xpath_register_ns(': 'XPathContext xpath_context, string prefix, string uri | bool', -\ 'xptr_new_context(': 'void | XPathContext', -\ 'xslt_backend_info(': 'void | string', -\ 'xslt_backend_name(': 'void | string', -\ 'xslt_backend_version(': 'void | string', -\ 'xslt_create(': 'void | resource', -\ 'xslt_errno(': 'resource xh | int', -\ 'xslt_error(': 'resource xh | string', -\ 'xslt_free(': 'resource xh | void', -\ 'xslt_getopt(': 'resource processor | int', -\ 'xslt_process(': 'resource xh, string xmlcontainer, string xslcontainer [, string resultcontainer [, array arguments [, array parameters]]] | mixed', -\ 'xslt_set_base(': 'resource xh, string uri | void', -\ 'xslt_set_encoding(': 'resource xh, string encoding | void', -\ 'xslt_set_error_handler(': 'resource xh, mixed handler | void', -\ 'xslt_set_log(': 'resource xh [, mixed log] | void', -\ 'xslt_set_object(': 'resource processor, object &obj | bool', -\ 'xslt_setopt(': 'resource processor, int newmask | mixed', -\ 'xslt_set_sax_handler(': 'resource xh, array handlers | void', -\ 'xslt_set_sax_handlers(': 'resource processor, array handlers | void', -\ 'xslt_set_scheme_handler(': 'resource xh, array handlers | void', -\ 'xslt_set_scheme_handlers(': 'resource processor, array handlers | void', -\ 'yaz_addinfo(': 'resource id | string', -\ 'yaz_ccl_conf(': 'resource id, array config | void', -\ 'yaz_ccl_parse(': 'resource id, string query, array &result | bool', -\ 'yaz_close(': 'resource id | bool', -\ 'yaz_connect(': 'string zurl [, mixed options] | mixed', -\ 'yaz_database(': 'resource id, string databases | bool', -\ 'yaz_element(': 'resource id, string elementset | bool', -\ 'yaz_errno(': 'resource id | int', -\ 'yaz_error(': 'resource id | string', -\ 'yaz_es_result(': 'resource id | array', -\ 'yaz_get_option(': 'resource id, string name | string', -\ 'yaz_hits(': 'resource id [, array searchresult] | int', -\ 'yaz_itemorder(': 'resource id, array args | void', -\ 'yaz_present(': 'resource id | bool', -\ 'yaz_range(': 'resource id, int start, int number | void', -\ 'yaz_record(': 'resource id, int pos, string type | string', -\ 'yaz_scan(': 'resource id, string type, string startterm [, array flags] | void', -\ 'yaz_scan_result(': 'resource id [, array &result] | array', -\ 'yaz_schema(': 'resource id, string schema | void', -\ 'yaz_search(': 'resource id, string type, string query | bool', -\ 'yaz_set_option(': 'resource id, string name, string value | void', -\ 'yaz_sort(': 'resource id, string criteria | void', -\ 'yaz_syntax(': 'resource id, string syntax | void', -\ 'yaz_wait(': '[array &options] | mixed', -\ 'yp_all(': 'string domain, string map, string callback | void', -\ 'yp_cat(': 'string domain, string map | array', -\ 'yp_errno(': 'void | int', -\ 'yp_err_string(': 'int errorcode | string', -\ 'yp_first(': 'string domain, string map | array', -\ 'yp_get_default_domain(': 'void | string', -\ 'yp_master(': 'string domain, string map | string', -\ 'yp_match(': 'string domain, string map, string key | string', -\ 'yp_next(': 'string domain, string map, string key | array', -\ 'yp_order(': 'string domain, string map | int', -\ 'zend_logo_guid(': 'void | string', -\ 'zend_version(': 'void | string', -\ 'zip_close(': 'resource zip | void', -\ 'zip_entry_close(': 'resource zip_entry | void', -\ 'zip_entry_compressedsize(': 'resource zip_entry | int', -\ 'zip_entry_compressionmethod(': 'resource zip_entry | string', -\ 'zip_entry_filesize(': 'resource zip_entry | int', -\ 'zip_entry_name(': 'resource zip_entry | string', -\ 'zip_entry_open(': 'resource zip, resource zip_entry [, string mode] | bool', -\ 'zip_entry_read(': 'resource zip_entry [, int length] | string', -\ 'zip_open(': 'string filename | resource', -\ 'zip_read(': 'resource zip | resource', -\ 'zlib_get_coding_type(': 'void | string' -\ } -" }}} -" built-in object functions {{{ -let g:php_builtin_object_functions = { -\ 'ArrayIterator::current(': 'void | mixed', -\ 'ArrayIterator::key(': 'void | mixed', -\ 'ArrayIterator::next(': 'void | void', -\ 'ArrayIterator::rewind(': 'void | void', -\ 'ArrayIterator::seek(': 'int position | void', -\ 'ArrayIterator::valid(': 'void | bool', -\ 'ArrayObject::append(': 'mixed newval | void', -\ 'ArrayObject::__construct(': 'mixed input | ArrayObject', -\ 'ArrayObject::count(': 'void | int', -\ 'ArrayObject::getIterator(': 'void | ArrayIterator', -\ 'ArrayObject::offsetExists(': 'mixed index | bool', -\ 'ArrayObject::offsetGet(': 'mixed index | bool', -\ 'ArrayObject::offsetSet(': 'mixed index, mixed newval | void', -\ 'ArrayObject::offsetUnset(': 'mixed index | void', -\ 'CachingIterator::hasNext(': 'void | bool', -\ 'CachingIterator::next(': 'void | void', -\ 'CachingIterator::rewind(': 'void | void', -\ 'CachingIterator::__toString(': 'void | string', -\ 'CachingIterator::valid(': 'void | bool', -\ 'CachingRecursiveIterator::getChildren(': 'void | CachingRecursiveIterator', -\ 'CachingRecursiveIterator::hasChildren(': 'void | bolean', -\ 'DirectoryIterator::__construct(': 'string path | DirectoryIterator', -\ 'DirectoryIterator::current(': 'void | DirectoryIterator', -\ 'DirectoryIterator::getATime(': 'void | int', -\ 'DirectoryIterator::getChildren(': 'void | RecursiveDirectoryIterator', -\ 'DirectoryIterator::getCTime(': 'void | int', -\ 'DirectoryIterator::getFilename(': 'void | string', -\ 'DirectoryIterator::getGroup(': 'void | int', -\ 'DirectoryIterator::getInode(': 'void | int', -\ 'DirectoryIterator::getMTime(': 'void | int', -\ 'DirectoryIterator::getOwner(': 'void | int', -\ 'DirectoryIterator::getPath(': 'void | string', -\ 'DirectoryIterator::getPathname(': 'void | string', -\ 'DirectoryIterator::getPerms(': 'void | int', -\ 'DirectoryIterator::getSize(': 'void | int', -\ 'DirectoryIterator::getType(': 'void | string', -\ 'DirectoryIterator::isDir(': 'void | bool', -\ 'DirectoryIterator::isDot(': 'void | bool', -\ 'DirectoryIterator::isExecutable(': 'void | bool', -\ 'DirectoryIterator::isFile(': 'void | bool', -\ 'DirectoryIterator::isLink(': 'void | bool', -\ 'DirectoryIterator::isReadable(': 'void | bool', -\ 'DirectoryIterator::isWritable(': 'void | bool', -\ 'DirectoryIterator::key(': 'void | string', -\ 'DirectoryIterator::next(': 'void | void', -\ 'DirectoryIterator::rewind(': 'void | void', -\ 'DirectoryIterator::valid(': 'void | string', -\ 'FilterIterator::current(': 'void | mixed', -\ 'FilterIterator::getInnerIterator(': 'void | Iterator', -\ 'FilterIterator::key(': 'void | mixed', -\ 'FilterIterator::next(': 'void | void', -\ 'FilterIterator::rewind(': 'void | void', -\ 'FilterIterator::valid(': 'void | bool', -\ 'LimitIterator::getPosition(': 'void | int', -\ 'LimitIterator::next(': 'void | void', -\ 'LimitIterator::rewind(': 'void | void', -\ 'LimitIterator::seek(': 'int position | void', -\ 'LimitIterator::valid(': 'void | bool', -\ 'Memcache::add(': 'string key, mixed var [, int flag [, int expire]] | bool', -\ 'Memcache::addServer(': 'string host [, int port [, bool persistent [, int weight [, int timeout [, int retry_interval]]]]] | bool', -\ 'Memcache::close(': 'void | bool', -\ 'Memcache::connect(': 'string host [, int port [, int timeout]] | bool', -\ 'Memcache::decrement(': 'string key [, int value] | int', -\ 'Memcache::delete(': 'string key [, int timeout] | bool', -\ 'Memcache::flush(': 'void | bool', -\ 'Memcache::getExtendedStats(': 'void | array', -\ 'Memcache::get(': 'string key | string', -\ 'Memcache::getStats(': 'void | array', -\ 'Memcache::getVersion(': 'void | string', -\ 'Memcache::increment(': 'string key [, int value] | int', -\ 'Memcache::pconnect(': 'string host [, int port [, int timeout]] | bool', -\ 'Memcache::replace(': 'string key, mixed var [, int flag [, int expire]] | bool', -\ 'Memcache::setCompressThreshold(': 'int threshold [, float min_savings] | bool', -\ 'Memcache::set(': 'string key, mixed var [, int flag [, int expire]] | bool', -\ 'ParentIterator::getChildren(': 'void | ParentIterator', -\ 'ParentIterator::hasChildren(': 'void | bool', -\ 'ParentIterator::next(': 'void | void', -\ 'ParentIterator::rewind(': 'void | void', -\ 'PDO::beginTransaction(': 'void | bool', -\ 'PDO::commit(': 'void | bool', -\ 'PDO::__construct(': 'string dsn [, string username [, string password [, array driver_options]]] | PDO', -\ 'PDO::errorCode(': 'void | string', -\ 'PDO::errorInfo(': 'void | array', -\ 'PDO::exec(': 'string statement | int', -\ 'PDO::getAttribute(': 'int attribute | mixed', -\ 'PDO::getAvailableDrivers(': 'void | array', -\ 'PDO::lastInsertId(': '[string name] | string', -\ 'PDO::prepare(': 'string statement [, array driver_options] | PDOStatement', -\ 'PDO::query(': 'string statement | PDOStatement', -\ 'PDO::quote(': 'string string [, int parameter_type] | string', -\ 'PDO::rollBack(': 'void | bool', -\ 'PDO::setAttribute(': 'int attribute, mixed value | bool', -\ 'PDO::sqliteCreateAggregate(': 'string function_name, callback step_func, callback finalize_func [, int num_args] | bool', -\ 'PDO::sqliteCreateFunction(': 'string function_name, callback callback [, int num_args] | bool', -\ 'PDOStatement::bindColumn(': 'mixed column, mixed &param [, int type] | bool', -\ 'PDOStatement::bindParam(': 'mixed parameter, mixed &variable [, int data_type [, int length [, mixed driver_options]]] | bool', -\ 'PDOStatement::bindValue(': 'mixed parameter, mixed value [, int data_type] | bool', -\ 'PDOStatement::closeCursor(': 'void | bool', -\ 'PDOStatement::columnCount(': 'void | int', -\ 'PDOStatement::errorCode(': 'void | string', -\ 'PDOStatement::errorInfo(': 'void | array', -\ 'PDOStatement::execute(': '[array input_parameters] | bool', -\ 'PDOStatement::fetchAll(': '[int fetch_style [, int column_index]] | array', -\ 'PDOStatement::fetchColumn(': '[int column_number] | string', -\ 'PDOStatement::fetch(': '[int fetch_style [, int cursor_orientation [, int cursor_offset]]] | mixed', -\ 'PDOStatement::fetchObject(': '[string class_name [, array ctor_args]] | mixed', -\ 'PDOStatement::getAttribute(': 'int attribute | mixed', -\ 'PDOStatement::getColumnMeta(': 'int column | mixed', -\ 'PDOStatement::nextRowset(': 'void | bool', -\ 'PDOStatement::rowCount(': 'void | int', -\ 'PDOStatement::setAttribute(': 'int attribute, mixed value | bool', -\ 'PDOStatement::setFetchMode(': 'int mode | bool', -\ 'Rar::extract(': 'string dir [, string filepath] | bool', -\ 'Rar::getAttr(': 'void | int', -\ 'Rar::getCrc(': 'void | int', -\ 'Rar::getFileTime(': 'void | string', -\ 'Rar::getHostOs(': 'void | int', -\ 'Rar::getMethod(': 'void | int', -\ 'Rar::getName(': 'void | string', -\ 'Rar::getPackedSize(': 'void | int', -\ 'Rar::getUnpackedSize(': 'void | int', -\ 'Rar::getVersion(': 'void | int', -\ 'RecursiveDirectoryIterator::getChildren(': 'void | object', -\ 'RecursiveDirectoryIterator::hasChildren(': '[bool allow_links] | bool', -\ 'RecursiveDirectoryIterator::key(': 'void | string', -\ 'RecursiveDirectoryIterator::next(': 'void | void', -\ 'RecursiveDirectoryIterator::rewind(': 'void | void', -\ 'RecursiveIteratorIterator::current(': 'void | mixed', -\ 'RecursiveIteratorIterator::getDepth(': 'void | int', -\ 'RecursiveIteratorIterator::getSubIterator(': 'void | RecursiveIterator', -\ 'RecursiveIteratorIterator::key(': 'void | mixed', -\ 'RecursiveIteratorIterator::next(': 'void | void', -\ 'RecursiveIteratorIterator::rewind(': 'void | void', -\ 'RecursiveIteratorIterator::valid(': 'void | bolean', -\ 'SDO_DAS_ChangeSummary::beginLogging(': 'void | void', -\ 'SDO_DAS_ChangeSummary::endLogging(': 'void | void', -\ 'SDO_DAS_ChangeSummary::getChangedDataObjects(': 'void | SDO_List', -\ 'SDO_DAS_ChangeSummary::getChangeType(': 'SDO_DataObject dataObject | int', -\ 'SDO_DAS_ChangeSummary::getOldContainer(': 'SDO_DataObject data_object | SDO_DataObject', -\ 'SDO_DAS_ChangeSummary::getOldValues(': 'SDO_DataObject data_object | SDO_List', -\ 'SDO_DAS_ChangeSummary::isLogging(': 'void | bool', -\ 'SDO_DAS_DataFactory::addPropertyToType(': 'string parent_type_namespace_uri, string parent_type_name, string property_name, string type_namespace_uri, string type_name [, array options] | void', -\ 'SDO_DAS_DataFactory::addType(': 'string type_namespace_uri, string type_name [, array options] | void', -\ 'SDO_DAS_DataFactory::getDataFactory(': 'void | SDO_DAS_DataFactory', -\ 'SDO_DAS_DataObject::getChangeSummary(': 'void | SDO_DAS_ChangeSummary', -\ 'SDO_DAS_Relational::applyChanges(': 'PDO database_handle, SDODataObject root_data_object | void', -\ 'SDO_DAS_Relational::__construct(': 'array database_metadata [, string application_root_type [, array SDO_containment_references_metadata]] | SDO_DAS_Relational', -\ 'SDO_DAS_Relational::createRootDataObject(': 'void | SDODataObject', -\ 'SDO_DAS_Relational::executePreparedQuery(': 'PDO database_handle, PDOStatement prepared_statement, array value_list [, array column_specifier] | SDODataObject', -\ 'SDO_DAS_Relational::executeQuery(': 'PDO database_handle, string SQL_statement [, array column_specifier] | SDODataObject', -\ 'SDO_DAS_Setting::getListIndex(': 'void | int', -\ 'SDO_DAS_Setting::getPropertyIndex(': 'void | int', -\ 'SDO_DAS_Setting::getPropertyName(': 'void | string', -\ 'SDO_DAS_Setting::getValue(': 'void | mixed', -\ 'SDO_DAS_Setting::isSet(': 'void | bool', -\ 'SDO_DAS_XML::addTypes(': 'string xsd_file | void', -\ 'SDO_DAS_XML::createDataObject(': 'string namespace_uri, string type_name | SDO_DataObject', -\ 'SDO_DAS_XML::createDocument(': '[string document_element_name] | SDO_DAS_XML_Document', -\ 'SDO_DAS_XML::create(': '[string xsd_file] | SDO_DAS_XML', -\ 'SDO_DAS_XML_Document::getRootDataObject(': 'void | SDO_DataObject', -\ 'SDO_DAS_XML_Document::getRootElementName(': 'void | string', -\ 'SDO_DAS_XML_Document::getRootElementURI(': 'void | string', -\ 'SDO_DAS_XML_Document::setEncoding(': 'string encoding | void', -\ 'SDO_DAS_XML_Document::setXMLDeclaration(': 'bool xmlDeclatation | void', -\ 'SDO_DAS_XML_Document::setXMLVersion(': 'string xmlVersion | void', -\ 'SDO_DAS_XML::loadFile(': 'string xml_file | SDO_XMLDocument', -\ 'SDO_DAS_XML::loadString(': 'string xml_string | SDO_DAS_XML_Document', -\ 'SDO_DAS_XML::saveFile(': 'SDO_XMLDocument xdoc, string xml_file [, int indent] | void', -\ 'SDO_DAS_XML::saveString(': 'SDO_XMLDocument xdoc [, int indent] | string', -\ 'SDO_DataFactory::create(': 'string type_namespace_uri, string type_name | void', -\ 'SDO_DataObject::clear(': 'void | void', -\ 'SDO_DataObject::createDataObject(': 'mixed identifier | SDO_DataObject', -\ 'SDO_DataObject::getContainer(': 'void | SDO_DataObject', -\ 'SDO_DataObject::getSequence(': 'void | SDO_Sequence', -\ 'SDO_DataObject::getTypeName(': 'void | string', -\ 'SDO_DataObject::getTypeNamespaceURI(': 'void | string', -\ 'SDO_Exception::getCause(': 'void | mixed', -\ 'SDO_List::insert(': 'mixed value [, int index] | void', -\ 'SDO_Model_Property::getContainingType(': 'void | SDO_Model_Type', -\ 'SDO_Model_Property::getDefault(': 'void | mixed', -\ 'SDO_Model_Property::getName(': 'void | string', -\ 'SDO_Model_Property::getType(': 'void | SDO_Model_Type', -\ 'SDO_Model_Property::isContainment(': 'void | bool', -\ 'SDO_Model_Property::isMany(': 'void | bool', -\ 'SDO_Model_ReflectionDataObject::__construct(': 'SDO_DataObject data_object | SDO_Model_ReflectionDataObject', -\ 'SDO_Model_ReflectionDataObject::export(': 'SDO_Model_ReflectionDataObject rdo [, bool return] | mixed', -\ 'SDO_Model_ReflectionDataObject::getContainmentProperty(': 'void | SDO_Model_Property', -\ 'SDO_Model_ReflectionDataObject::getInstanceProperties(': 'void | array', -\ 'SDO_Model_ReflectionDataObject::getType(': 'void | SDO_Model_Type', -\ 'SDO_Model_Type::getBaseType(': 'void | SDO_Model_Type', -\ 'SDO_Model_Type::getName(': 'void | string', -\ 'SDO_Model_Type::getNamespaceURI(': 'void | string', -\ 'SDO_Model_Type::getProperties(': 'void | array', -\ 'SDO_Model_Type::getProperty(': 'mixed identifier | SDO_Model_Property', -\ 'SDO_Model_Type::isAbstractType(': 'void | bool', -\ 'SDO_Model_Type::isDataType(': 'void | bool', -\ 'SDO_Model_Type::isInstance(': 'SDO_DataObject data_object | bool', -\ 'SDO_Model_Type::isOpenType(': 'void | bool', -\ 'SDO_Model_Type::isSequencedType(': 'void | bool', -\ 'SDO_Sequence::getProperty(': 'int sequence_index | SDO_Model_Property', -\ 'SDO_Sequence::insert(': 'mixed value [, int sequenceIndex [, mixed propertyIdentifier]] | void', -\ 'SDO_Sequence::move(': 'int toIndex, int fromIndex | void', -\ 'SimpleXMLIterator::current(': 'void | mixed', -\ 'SimpleXMLIterator::getChildren(': 'void | object', -\ 'SimpleXMLIterator::hasChildren(': 'void | bool', -\ 'SimpleXMLIterator::key(': 'void | mixed', -\ 'SimpleXMLIterator::next(': 'void | void', -\ 'SimpleXMLIterator::rewind(': 'void | void', -\ 'SimpleXMLIterator::valid(': 'void | bool', -\ 'SWFButton::addASound(': 'SWFSound sound, int flags | SWFSoundInstance', -\ 'SWFButton::setMenu(': 'int flag | void', -\ 'SWFDisplayItem::addAction(': 'SWFAction action, int flags | void', -\ 'SWFDisplayItem::endMask(': 'void | void', -\ 'SWFDisplayItem::getRot(': 'void | float', -\ 'SWFDisplayItem::getX(': 'void | float', -\ 'SWFDisplayItem::getXScale(': 'void | float', -\ 'SWFDisplayItem::getXSkew(': 'void | float', -\ 'SWFDisplayItem::getY(': 'void | float', -\ 'SWFDisplayItem::getYScale(': 'void | float', -\ 'SWFDisplayItem::getYSkew(': 'void | float', -\ 'SWFDisplayItem::setMaskLevel(': 'int level | void', -\ 'SWFDisplayItem::setMatrix(': 'float a, float b, float c, float d, float x, float y | void', -\ 'SWFFontChar::addChars(': 'string char | void', -\ 'SWFFontChar::addUTF8Chars(': 'string char | void', -\ 'SWFFont::getAscent(': 'void | float', -\ 'SWFFont::getDescent(': 'void | float', -\ 'SWFFont::getLeading(': 'void | float', -\ 'SWFFont::getShape(': 'int code | string', -\ 'SWFFont::getUTF8Width(': 'string string | float', -\ 'SWFMovie::addExport(': 'SWFCharacter char, string name | void', -\ 'SWFMovie::addFont(': 'SWFFont font | SWFFontChar', -\ 'SWFMovie::importChar(': 'string libswf, string name | SWFSprite', -\ 'SWFMovie::importFont(': 'string libswf, string name | SWFFontChar', -\ 'SWFMovie::labelFrame(': 'string label | void', -\ 'SWFMovie::saveToFile(': 'stream x [, int compression] | int', -\ 'SWFMovie::startSound(': 'SWFSound sound | SWFSoundInstance', -\ 'SWFMovie::stopSound(': 'SWFSound sound | void', -\ 'SWFMovie::writeExports(': 'void | void', -\ 'SWFShape::drawArc(': 'float r, float startAngle, float endAngle | void', -\ 'SWFShape::drawCircle(': 'float r | void', -\ 'SWFShape::drawCubic(': 'float bx, float by, float cx, float cy, float dx, float dy | int', -\ 'SWFShape::drawCubicTo(': 'float bx, float by, float cx, float cy, float dx, float dy | int', -\ 'SWFShape::drawGlyph(': 'SWFFont font, string character [, int size] | void', -\ 'SWFSoundInstance::loopCount(': 'int point | void', -\ 'SWFSoundInstance::loopInPoint(': 'int point | void', -\ 'SWFSoundInstance::loopOutPoint(': 'int point | void', -\ 'SWFSoundInstance::noMultiple(': 'void | void', -\ 'SWFSprite::labelFrame(': 'string label | void', -\ 'SWFSprite::startSound(': 'SWFSound sound | SWFSoundInstance', -\ 'SWFSprite::stopSound(': 'SWFSound sound | void', -\ 'SWFText::addUTF8String(': 'string text | void', -\ 'SWFTextField::addChars(': 'string chars | void', -\ 'SWFTextField::setPadding(': 'float padding | void', -\ 'SWFText::getAscent(': 'void | float', -\ 'SWFText::getDescent(': 'void | float', -\ 'SWFText::getLeading(': 'void | float', -\ 'SWFText::getUTF8Width(': 'string string | float', -\ 'SWFVideoStream::getNumFrames(': 'void | int', -\ 'SWFVideoStream::setDimension(': 'int x, int y | void', -\ 'tidy::__construct(': '[string filename [, mixed config [, string encoding [, bool use_include_path]]]] | tidy' -\ } - " }}} -" Add control structures (they are outside regular pattern of PHP functions) -let php_control = { - \ 'include(': 'string filename | resource', - \ 'include_once(': 'string filename | resource', - \ 'require(': 'string filename | resource', + for line in file + let c_name = matchstr(line, '\c\(class\|interface\)\s*\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*') + let kind = (line =~? '^\s*class' ? 'c' : 'i') + if c_name != '' && c_name =~? '^'.base + call add(res, {'word': c_name, 'kind': kind}) + endif + endfor + + " resolve the typed in part with namespaces (if theres a \ in it) + let [tag_match_pattern, namespace_for_class] = phpcomplete#ExpandClassName(a:base, a:current_namespace, a:imports) + + let tags = [] + if len(tag_match_pattern) >= g:phpcomplete_min_num_of_chars_for_namespace_completion + let tags = phpcomplete#GetTaglist('^'.tag_match_pattern) + endif + + if len(tags) + let base_parts = split(a:base, '\') + if len(base_parts) > 1 + let namespace_part = join(base_parts[0:-2], '\').'\' + else + let namespace_part = '' + endif + let no_namespace_matches = [] + let namespaced_matches = [] + let seen_namespaced_tag = 0 + for tag in tags + if has_key(tag, 'namespace') + let seen_namespaced_tag = 1 + endif + let relative_name = namespace_part.tag.name + " match base without the namespace part for namespaced base but not namespaced tags, for tagfiles with old ctags + if !has_key(tag, 'namespace') && index(kinds, tag.kind) != -1 && stridx(tolower(tag.name), tolower(base[len(namespace_part):])) == 0 + call add(no_namespace_matches, {'word': leading_slash.relative_name, 'kind': tag.kind, 'menu': tag.filename, 'info': tag.filename }) + endif + if has_key(tag, 'namespace') && index(kinds, tag.kind) != -1 && tag.namespace ==? namespace_for_class + let full_name = tag.namespace.'\'.tag.name " absolute namespaced name (without leading '\') + call add(namespaced_matches, {'word': leading_slash == '\' ? leading_slash.full_name : relative_name, 'kind': tag.kind, 'menu': tag.filename, 'info': tag.filename }) + endif + endfor + " if there was a tag with namespace field, assume tag files with namespace support, so the matches + " without a namespace field are in the global namespace so if there were namespace in the base + " we should not add them to the matches + if seen_namespaced_tag && namespace_part != '' + let no_namespace_matches = [] + endif + let res += no_namespace_matches + namespaced_matches + endif + + " look for built in classnames and interfaces + let base_parts = split(base, '\') + if a:current_namespace == '\' || (leading_slash == '\' && len(base_parts) < 2) + if index(kinds, 'c') != -1 + let builtin_classnames = filter(keys(copy(g:php_builtin_classnames)), 'v:val =~? "^'.substitute(a:base, '\\', '', 'g').'"') + for classname in builtin_classnames + let menu = '' + " if we have a constructor for this class, add parameters as to the info + if has_key(g:php_builtin_classes[tolower(classname)].methods, '__construct') + let menu = g:php_builtin_classes[tolower(classname)]['methods']['__construct']['signature'] + endif + call add(res, {'word': leading_slash.g:php_builtin_classes[tolower(classname)].name, 'kind': 'c', 'menu': menu}) + endfor + endif + + if index(kinds, 'i') != -1 + let builtin_interfaces = filter(keys(copy(g:php_builtin_interfaces)), 'v:val =~? "^'.substitute(a:base, '\\', '', 'g').'"') + for interfacename in builtin_interfaces + call add(res, {'word': leading_slash.g:php_builtin_interfaces[interfacename]['name'], 'kind': 'i', 'menu': ''}) + endfor + endif + endif + + " add matching imported things + for [imported_name, import] in items(a:imports) + if imported_name =~? '^'.base && index(kinds, import.kind) != -1 + let menu = import.name.(import.builtin ? ' - builtin' : '') + call add(res, {'word': imported_name, 'kind': import.kind, 'menu': menu}) + endif + endfor + + let res = sort(res, 'phpcomplete#CompareCompletionRow') + return res +endfunction +" }}} + +function! phpcomplete#CompareCompletionRow(i1, i2) " {{{ + return a:i1.word == a:i2.word ? 0 : a:i1.word > a:i2.word ? 1 : -1 +endfunction +" }}} + +function! phpcomplete#EvaluateModifiers(modifiers, required_modifiers, prohibited_modifiers) " {{{ + " if theres no modifier, and no modifier is allowed and no modifier is required + if len(a:modifiers) == 0 && len(a:required_modifiers) == 0 + return 1 + else + " check if every requred modifier is present + for required_modifier in a:required_modifiers + if index(a:modifiers, required_modifier) == -1 + return 0 + endif + endfor + + for modifier in a:modifiers + " if the modifier is prohibited its a no match + if index(a:prohibited_modifiers, modifier) != -1 + return 0 + endif + endfor + + " anything that is not explicitly required or prohibited is allowed + return 1 + endif +endfunction +" }}} + +function! phpcomplete#CompleteUserClass(context, base, sccontent, visibility) " {{{ + let final_list = [] + let res = [] + + let required_modifiers = [] + let prohibited_modifiers = [] + + if a:visibility == 'public' + let prohibited_modifiers += ['private', 'protected'] + endif + + " limit based on context to static or normal methods + let static_con = '' + if a:context =~ '::$' && a:context !~? 'parent::$' + if g:phpcomplete_relax_static_constraint != 1 + let required_modifiers += ['static'] + endif + elseif a:context =~ '->$' + let prohibited_modifiers += ['static'] + endif + + let all_function = filter(deepcopy(a:sccontent), + \ 'v:val =~ "^\\s*\\(public\\s\\+\\|protected\\s\\+\\|private\\s\\+\\|final\\s\\+\\|abstract\\s\\+\\|static\\s\\+\\)*function"') + + let functions = [] + for i in all_function + let modifiers = split(matchstr(tolower(i), '\zs.\+\zefunction'), '\s\+') + if phpcomplete#EvaluateModifiers(modifiers, required_modifiers, prohibited_modifiers) == 1 + call add(functions, i) + endif + endfor + + let c_functions = {} + let c_doc = {} + for i in functions + let f_name = matchstr(i, + \ 'function\s*&\?\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') + let f_args = matchstr(i, + \ 'function\s*&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\zs.\{-}\ze)\_s*\({\|\_$\)') + if f_name != '' && stridx(f_name, '__') != 0 + let c_functions[f_name.'('] = f_args + if g:phpcomplete_parse_docblock_comments + let c_doc[f_name.'('] = phpcomplete#GetDocBlock(a:sccontent, 'function\s*&\?\<'.f_name.'\>') + endif + endif + endfor + + " limit based on context to static or normal attributes + if a:context =~ '::$' && a:context !~? 'parent::$' + " variables must have static to be accessed as static unlike functions + let required_modifiers += ['static'] + endif + let all_variable = filter(deepcopy(a:sccontent), + \ 'v:val =~ "^\\s*\\(var\\s\\+\\|public\\s\\+\\|protected\\s\\+\\|private\\s\\+\\|final\\s\\+\\|abstract\\s\\+\\|static\\s\\+\\)\\+\\$"') + + let variables = [] + for i in all_variable + let modifiers = split(matchstr(tolower(i), '\zs.\+\ze\$'), '\s\+') + if phpcomplete#EvaluateModifiers(modifiers, required_modifiers, prohibited_modifiers) == 1 + call add(variables, i) + endif + endfor + + let static_vars = split(join(variables, ' '), '\$') + let c_variables = {} + + let var_index = 0 + for i in static_vars + let c_var = matchstr(i, + \ '^\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') + if c_var != '' + if a:context =~ '::$' + let c_var = '$'.c_var + endif + let c_variables[c_var] = '' + if g:phpcomplete_parse_docblock_comments && len(get(variables, var_index)) > 0 + let c_doc[c_var] = phpcomplete#GetDocBlock(a:sccontent, variables[var_index]) + endif + let var_index += 1 + endif + endfor + + let constants = filter(deepcopy(a:sccontent), + \ 'v:val =~ "^\\s*const\\s\\+"') + + let jcons = join(constants, ' ') + let scons = split(jcons, 'const') + + let c_constants = {} + let const_index = 0 + for i in scons + let c_con = matchstr(i, + \ '^\s*\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\ze') + if c_con != '' + let c_constants[c_con] = '' + if g:phpcomplete_parse_docblock_comments && len(get(constants, const_index)) > 0 + let c_doc[c_con] = phpcomplete#GetDocBlock(a:sccontent, constants[const_index]) + endif + let const_index += 1 + endif + endfor + + let all_values = {} + call extend(all_values, c_functions) + call extend(all_values, c_variables) + call extend(all_values, c_constants) + + for m in sort(keys(all_values)) + if stridx(m, a:base) == 0 + call add(res, m) + endif + endfor + + let start_list = res + + let final_list = [] + for i in start_list + let docblock = phpcomplete#ParseDocBlock(get(c_doc, i, '')) + if has_key(c_variables, i) + let final_list += + \ [{'word': i, + \ 'info':phpcomplete#FormatDocBlock(docblock), + \ 'menu':get(docblock.var, 'type', ''), + \ 'kind':'v'}] + elseif has_key(c_constants, i) + let info = phpcomplete#FormatDocBlock(docblock) + if info != '' + let info = "\n".info + endif + let final_list += + \ [{'word':i, + \ 'info':i.info, + \ 'menu':all_values[i], + \ 'kind':'d'}] + else + let return_type = get(docblock.return, 'type', '') + if return_type != '' + let return_type = ' | '.return_type + endif + let info = phpcomplete#FormatDocBlock(docblock) + if info != '' + let info = "\n".info + endif + let final_list += + \ [{'word':substitute(i, '.*::', '', ''), + \ 'info':i.all_values[i].')'.info, + \ 'menu':all_values[i].')'.return_type, + \ 'kind':'f'}] + endif + endfor + + return final_list +endfunction +" }}} + +function! phpcomplete#CompleteBuiltInClass(context, classname, base) " {{{ + let class_info = g:php_builtin_classes[tolower(a:classname)] + let res = [] + if a:context =~ '->$' " complete for everything instance related + " methods + for [method_name, method_info] in items(class_info.methods) + if stridx(method_name, '__') != 0 && (a:base == '' || method_name =~? '^'.a:base) + call add(res, {'word':method_name.'(', 'kind': 'f', 'menu': method_info.signature, 'info': method_info.signature }) + endif + endfor + " properties + for [property_name, property_info] in items(class_info.properties) + if a:base == '' || property_name =~? '^'.a:base + call add(res, {'word':property_name, 'kind': 'v', 'menu': property_info.type, 'info': property_info.type }) + endif + endfor + elseif a:context =~ '::$' " complete for everything static + " methods + for [method_name, method_info] in items(class_info.static_methods) + if a:base == '' || method_name =~? '^'.a:base + call add(res, {'word':method_name.'(', 'kind': 'f', 'menu': method_info.signature, 'info': method_info.signature }) + endif + endfor + " properties + for [property_name, property_info] in items(class_info.static_properties) + if a:base == '' || property_name =~? '^'.a:base + call add(res, {'word':property_name, 'kind': 'v', 'menu': property_info.type, 'info': property_info.type }) + endif + endfor + " constants + for [constant_name, constant_info] in items(class_info.constants) + if a:base == '' || constant_name =~? '^'.a:base + call add(res, {'word':constant_name, 'kind': 'd', 'menu': constant_info, 'info': constant_info}) + endif + endfor + endif + return res +endfunction +" }}} + +function! phpcomplete#GetTaglist(pattern) " {{{ + let cache_checksum = '' + if g:phpcomplete_cache_taglists == 1 + " build a string with format of ":$:..." + " to validate that the tags are not changed since the time we saved the results in cache + for tagfile in sort(tagfiles()) + let cache_checksum .= fnamemodify(tagfile, ':p').':'.getftime(tagfile).'$' + endfor + + if s:cache_tags_checksum != cache_checksum + " tag file(s) changed + " since we don't know where individual tags coming from when calling taglist() we zap the whole cache + " no way to clear only the entries originating from the changed tag file + let s:cache_tags = {} + endif + + if has_key(s:cache_tags, a:pattern) + return s:cache_tags[a:pattern] + endif + endif + + let tags = taglist(a:pattern) + let s:cache_tags[a:pattern] = tags + let has_key = has_key(s:cache_tags, a:pattern) + let s:cache_tags_checksum = cache_checksum + return tags +endfunction +" }}} + +function! phpcomplete#GetCurrentInstruction(line_number, col_number, phpbegin) " {{{ + " locate the current instruction (up until the previous non comment or string ";" or php region start (', '<', '.', '?', + \ ';', '(', '|', '[' + \ ] + + let phpbegin_length = len(matchstr(getline(a:phpbegin[0]), '\zs= 0 && bracket_depth >= 0 && synIDName !~? 'comment\|string' + " break if we are on a "naked" stop_char (operators, colon, openparent...) + if index(stop_chars, current_char) != -1 + let do_break = 1 + " dont break does not look like a "->" + if (prev_char == '-' && current_char == '>') || (current_char == '-' && next_char == '>') + let do_break = 0 + endif + " dont break if its looks like a "::" + if (prev_char == ':' && current_char == ':') || (current_char == ':' && next_char == ':') + let do_break = 0 + endif + + if do_break + break + endif + endif + + " save the coma position for later use if theres a "naked" , possibly separating a parameter and it is not in a parented part + if first_coma_break_pos == -1 && current_char == ',' + let first_coma_break_pos = len(instruction) + endif + endif + + " count nested darenthesis and brackets so we can tell if we need to break on a ';' or not (think of for (;;) loops) + if synIDName =~? 'phpBraceFunc\|phpParent\|Delimiter' + if current_char == '(' + let parent_depth += 1 + elseif current_char == ')' + let parent_depth -= 1 + + elseif current_char == '[' + let bracket_depth += 1 + elseif current_char == ']' + let bracket_depth -= 1 + endif + endif + + " stop collecting chars if we see a function start { (think of first line in a function) + if (current_char == '{' || current_char == '}') && synIDName =~? 'phpBraceFunc\|phpParent\|Delimiter' + break + endif + + " break if we are reached the php block start (foo()->bar()->baz()-> + + let classname_candidate = a:classname_candidate + let class_candidate_namespace = a:class_candidate_namespace + let methodstack = a:methodstack + let unknown_result = ['', ''] + let prev_method_is_array = (methodstack[0] =~ '\v^[^([]+\[' ? 1 : 0) + let classname_candidate_is_array = (classname_candidate =~ '\[\]$' ? 1 : 0) + + if prev_method_is_array + if classname_candidate_is_array + let classname_candidate = substitute(classname_candidate, '\[\]$', '', '') + else + return unknown_result + endif + endif + + if (len(methodstack) == 1) + let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(classname_candidate, class_candidate_namespace, a:imports) + return [classname_candidate, class_candidate_namespace] + else + call remove(methodstack, 0) + let method_is_array = (methodstack[0] =~ '\v^[^[]+\[' ? 1 : 0) + let method = matchstr(methodstack[0], '\v^\$*\zs[^[(]+\ze') + + let classlocation = phpcomplete#GetClassLocation(classname_candidate, class_candidate_namespace) + + if classlocation == 'VIMPHP_BUILTINOBJECT' && has_key(g:php_builtin_classes, tolower(classname_candidate)) + let class_info = g:php_builtin_classes[tolower(classname_candidate)] + if has_key(class_info['methods'], method) + return phpcomplete#GetCallChainReturnType(class_info['methods'][method].return_type, '\', a:imports, methodstack) + endif + if has_key(class_info['properties'], method) + return phpcomplete#GetCallChainReturnType(class_info['properties'][method].type, '\', a:imports, methodstack) + endif + if has_key(class_info['static_methods'], method) + return phpcomplete#GetCallChainReturnType(class_info['static_methods'][method].return_type, '\', a:imports, methodstack) + endif + if has_key(class_info['static_properties'], method) + return phpcomplete#GetCallChainReturnType(class_info['static_properties'][method].type, '\', a:imports, methodstack) + endif + + return unknown_result + + elseif classlocation != '' && filereadable(classlocation) + " Read the next method from the stack and extract only the name + + let classcontents = phpcomplete#GetCachedClassContents(classlocation, classname_candidate) + + " Get Structured information of all classes and subclasses including namespace and includes + " try to find the method's return type in docblock comment + for classstructure in classcontents + let doclock_target_pattern = 'function\s\+&\?'.method.'\|\(public\|private\|protected\|var\).\+\$'.method + let doc_str = phpcomplete#GetDocBlock(split(classstructure.content, '\n'), doclock_target_pattern) + if doc_str != '' + break + endif + endfor + if doc_str != '' + let docblock = phpcomplete#ParseDocBlock(doc_str) + if has_key(docblock.return, 'type') || has_key(docblock.var, 'type') + let type = has_key(docblock.return, 'type') ? docblock.return.type : docblock.var.type + + " there's a namespace in the type, threat the type as FQCN + if type =~ '\\' + let parts = split(substitute(type, '^\\', '', ''), '\') + let class_candidate_namespace = join(parts[0:-2], '\') + let classname_candidate = parts[-1] + " check for renamed namepsace in imports + if has_key(classstructure.imports, class_candidate_namespace) + let class_candidate_namespace = classstructure.imports[class_candidate_namespace].name + endif + else + " no namespace in the type, threat it as a relative classname + let returnclass = type + if has_key(classstructure.imports, returnclass) + if has_key(classstructure.imports[returnclass], 'namespace') + let fullnamespace = classstructure.imports[returnclass].namespace + else + let fullnamespace = class_candidate_namespace + endif + else + let fullnamespace = class_candidate_namespace + endif + " make @return self, static, $this the same way + " (not exactly what php means by these) + if returnclass == 'self' || returnclass == 'static' || returnclass == '$this' + let classname_candidate = a:classname_candidate + let class_candidate_namespace = a:class_candidate_namespace + else + let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(returnclass, fullnamespace, a:imports) + endif + endif + + return phpcomplete#GetCallChainReturnType(classname_candidate, class_candidate_namespace, a:imports, methodstack) + endif + endif + + return unknown_result + else + return unknown_result + endif + endif +endfunction " }}} + +function! phpcomplete#GetMethodStack(line) " {{{ + let methodstack = [] + let i = 0 + let end = len(a:line) + + let current_part = '' + + let parent_depth = 0 + let in_string = 0 + let string_start = '' + + let next_char = '' + + while i < end + let current_char = a:line[i] + let next_char = i + 1 < end ? a:line[i + 1] : '' + let prev_char = i >= 1 ? a:line[i - 1] : '' + let prev_prev_char = i >= 2 ? a:line[i - 2] : '' + + if in_string == 0 && parent_depth == 0 && ((current_char == '-' && next_char == '>') || (current_char == ':' && next_char == ':')) + call add(methodstack, current_part) + let current_part = '' + let i += 2 + continue + endif + + " if it's looks like a string + if current_char == "'" || current_char == '"' + " and it is not escaped + if prev_char != '\' || (prev_char == '\' && prev_prev_char == '\') + " and we are in a string already + if in_string + " and that string started with this char too + if current_char == string_start + " clear the string mark + let in_string = 0 + endif + else " ... and we are not in a string + " set the string mark + let in_string = 1 + let string_start = current_char + endif + endif + endif + + if !in_string && a:line[i] == '(' + let parent_depth += 1 + endif + if !in_string && a:line[i] == ')' + let parent_depth -= 1 + endif + + let current_part .= current_char + let i += 1 + endwhile + + " add the last remaining part, this can be an empty string and this is expected + " the empty string represents the completion base (which happen to be an empty string) + if current_part != '' + call add(methodstack, current_part) + endif + + return methodstack +endfunction +" }}} + +function! phpcomplete#GetClassName(start_line, context, current_namespace, imports) " {{{ + " Get class name + " Class name can be detected in few ways: + " @var $myVar class + " @var class $myVar + " in the same line (php 5.4 (new Class)-> syntax) + " line above + " or line in tags file + + let class_name_pattern = '[a-zA-Z_\x7f-\xff\\][a-zA-Z_0-9\x7f-\xff\\]*' + let function_name_pattern = '[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*' + let function_invocation_pattern = '[a-zA-Z_\x7f-\xff\\][a-zA-Z_0-9\x7f-\xff\\]*(' + let variable_name_pattern = '\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*' + + let classname_candidate = '' + let class_candidate_namespace = a:current_namespace + let class_candidate_imports = a:imports + let methodstack = phpcomplete#GetMethodStack(a:context) + + if a:context =~? '\$this->' || a:context =~? '\(self\|static\)::' || a:context =~? 'parent::' + let i = 1 + while i < a:start_line + let line = getline(a:start_line - i) + + " Don't complete self:: or $this if outside of a class + " (assumes correct indenting) + if line =~ '^}' + return '' + endif + + if line =~? '\v^\s*(abstract\s+|final\s+)*\s*class' + let class_name = matchstr(line, '\c\s*class\s*\zs'.class_name_pattern.'\ze') + let extended_class = matchstr(line, '\cclass\s\+'.class_name_pattern.'\s\+extends\s\+\zs'.class_name_pattern.'\ze') + + let classname_candidate = a:context =~? 'parent::' ? extended_class : class_name + else + let i += 1 + continue + endif + + if classname_candidate != '' + let [classname_candidate, class_candidate_namespace] = phpcomplete#GetCallChainReturnType(classname_candidate, class_candidate_namespace, class_candidate_imports, methodstack) + " return absolute classname, without leading \ + return (class_candidate_namespace == '\' || class_candidate_namespace == '') ? classname_candidate : class_candidate_namespace.'\'.classname_candidate + endif + endwhile + elseif a:context =~? '(\s*new\s\+'.class_name_pattern.'\s*)->' + let classname_candidate = matchstr(a:context, '\cnew\s\+\zs'.class_name_pattern.'\ze') + let [classname_candidate, class_candidate_namespace] = phpcomplete#GetCallChainReturnType(classname_candidate, class_candidate_namespace, class_candidate_imports, methodstack) + " return absolute classname, without leading \ + return (class_candidate_namespace == '\' || class_candidate_namespace == '') ? classname_candidate : class_candidate_namespace.'\'.classname_candidate + elseif get(methodstack, 0) =~# function_invocation_pattern + let function_name = matchstr(methodstack[0], '^\s*\zs'.function_name_pattern) + let function_file = phpcomplete#GetFunctionLocation(function_name, a:current_namespace) + + if function_file == 'VIMPHP_BUILTINFUNCTION' + " built in function, grab the return type from the info string + let return_type = matchstr(g:php_builtin_functions[function_name.'('], '\v\|\s+\zs.+$') + let classname_candidate = return_type + let class_candidate_namespace = '\' + elseif function_file != '' && filereadable(function_file) + let file_lines = readfile(function_file) + let docblock_str = phpcomplete#GetDocBlock(file_lines, 'function\s*&\?\<'.function_name.'\>') + let docblock = phpcomplete#ParseDocBlock(docblock_str) + if has_key(docblock.return, 'type') + let classname_candidate = docblock.return.type + let [class_candidate_namespace, function_imports] = phpcomplete#GetCurrentNameSpace(file_lines) + " try to expand the classname of the returned type with the context got from the function's source file + + let [classname_candidate, unused] = phpcomplete#ExpandClassName(classname_candidate, class_candidate_namespace, function_imports) + endif + endif + if classname_candidate != '' + let [classname_candidate, class_candidate_namespace] = phpcomplete#GetCallChainReturnType(classname_candidate, class_candidate_namespace, class_candidate_imports, methodstack) + " return absolute classname, without leading \ + return (class_candidate_namespace == '\' || class_candidate_namespace == '') ? classname_candidate : class_candidate_namespace.'\'.classname_candidate + endif + else + " extract the variable name from the context + let object = methodstack[0] + let object_is_array = (object =~ '\v^[^[]+\[' ? 1 : 0) + let object = matchstr(object, variable_name_pattern) + + let function_boundary = phpcomplete#GetCurrentFunctionBoundaries() + let search_end_line = max([1, function_boundary[0][0]]) + " -1 makes us ignore the current line (where the completion was invoked + let lines = reverse(getline(search_end_line, line('.') - 1)) + + " check Constant lookup + let constant_object = matchstr(a:context, '\zs'.class_name_pattern.'\ze::') + if constant_object != '' + let classname_candidate = constant_object + endif + + if classname_candidate == '' + " scan the file backwards from current line for explicit type declaration (@var $variable Classname) + for line in lines + " in file lookup for /* @var $foo Class */ + if line =~# '@var\s\+'.object.'\s\+'.class_name_pattern + let classname_candidate = matchstr(line, '@var\s\+'.object.'\s\+\zs'.class_name_pattern.'\(\[\]\)\?') + let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(classname_candidate, a:current_namespace, a:imports) + break + endif + " in file lookup for /* @var Class $foo */ + if line =~# '@var\s\+'.class_name_pattern.'\s\+'.object + let classname_candidate = matchstr(line, '@var\s\+\zs'.class_name_pattern.'\(\[\]\)\?\ze'.'\s\+'.object) + let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(classname_candidate, a:current_namespace, a:imports) + break + endif + endfor + endif + + if classname_candidate != '' + let [classname_candidate, class_candidate_namespace] = phpcomplete#GetCallChainReturnType(classname_candidate, class_candidate_namespace, class_candidate_imports, methodstack) + " return absolute classname, without leading \ + return (class_candidate_namespace == '\' || class_candidate_namespace == '') ? classname_candidate : class_candidate_namespace.'\'.classname_candidate + endif + " scan the file backwards from the current line + let i = 1 + for line in lines " {{{ + " do in-file lookup of $var = new Class + if line =~# '^\s*'.object.'\s*=\s*new\s\+'.class_name_pattern && !object_is_array + let classname_candidate = matchstr(line, object.'\c\s*=\s*new\s*\zs'.class_name_pattern.'\ze') + let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(classname_candidate, a:current_namespace, a:imports) + break + endif + + " in-file lookup for Class::getInstance() + if line =~# '^\s*'.object.'\s*=&\?\s*'.class_name_pattern.'\s*::\s*getInstance' && !object_is_array + let classname_candidate = matchstr(line, object.'\s*=&\?\s*\zs'.class_name_pattern.'\ze\s*::\s*getInstance') + let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(classname_candidate, a:current_namespace, a:imports) + break + endif + + " do in-file lookup for static method invocation of a built-in class, like: $d = DateTime::createFromFormat() + if line =~# '^\s*'.object.'\s*=&\?\s*'.class_name_pattern.'\s*::\s*$\?[a-zA-Z_0-9\x7f-\xff]\+' + let classname = matchstr(line, '^\s*'.object.'\s*=&\?\s*\zs'.class_name_pattern.'\ze\s*::') + if has_key(a:imports, classname) && a:imports[classname].kind == 'c' + let classname = a:imports[classname].name + endif + if has_key(g:php_builtin_classes, tolower(classname)) + let sub_methodstack = phpcomplete#GetMethodStack(matchstr(line, '^\s*'.object.'\s*=&\?\s*\s\+\zs.*')) + let [classname_candidate, class_candidate_namespace] = phpcomplete#GetCallChainReturnType(classname, '\', {}, sub_methodstack) + return classname_candidate + else + " try to get the class name from the static method's docblock + let [classname, namespace_for_class] = phpcomplete#ExpandClassName(classname, a:current_namespace, a:imports) + let sub_methodstack = phpcomplete#GetMethodStack(matchstr(line, '^\s*'.object.'\s*=&\?\s*\s\+\zs.*')) + let [classname_candidate, class_candidate_namespace] = phpcomplete#GetCallChainReturnType( + \ classname, + \ a:current_namespace, + \ a:imports, + \ sub_methodstack) + return (class_candidate_namespace == '\' || class_candidate_namespace == '') ? classname_candidate : class_candidate_namespace.'\'.classname_candidate + endif + endif + + " in-file lookup for typehinted function arguments + " - the function can have a name or be anonymous (e.g., function qux() { ... } vs. function () { ... }) + " - the type-hinted argument can be anywhere in the arguments list. + if line =~? 'function\(\s\+'.function_name_pattern.'\)\?\s*(.\{-}'.class_name_pattern.'\s\+'.object && !object_is_array + let f_args = matchstr(line, '\cfunction\(\s\+'.function_name_pattern.'\)\?\s*(\zs.\{-}\ze)') + let args = split(f_args, '\s*\zs,\ze\s*') + for arg in args + if arg =~# object.'\(,\|$\)' + let classname_candidate = matchstr(arg, '\s*\zs'.class_name_pattern.'\ze\s\+'.object) + let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(classname_candidate, a:current_namespace, a:imports) + break + endif + endfor + if classname_candidate != '' + break + endif + endif + + " if we see a function declaration, try loading the docblock for it and look for matching @params + if line =~? 'function\(\s\+'.function_name_pattern.'\)\?\s*(.\{-}'.object + let match_line = substitute(line, '\\', '\\\\', 'g') + let sccontent = getline(0, a:start_line - i) + let doc_str = phpcomplete#GetDocBlock(sccontent, match_line) + if doc_str != '' + let docblock = phpcomplete#ParseDocBlock(doc_str) + for param in docblock.params + if param.name =~? object + let classname_candidate = matchstr(param.type, class_name_pattern.'\(\[\]\)\?') + let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(classname_candidate, a:current_namespace, a:imports) + break + endif + endfor + if classname_candidate != '' + break + endif + endif + endif + + " assignment for the variable in question with a variable on the right hand side + if line =~# '^\s*'.object.'\s*=&\?\s*'.variable_name_pattern + let tailing_semicolon = match(line, ';\s*$') + let tailing_semicolon = tailing_semicolon != -1 ? tailing_semicolon : strlen(getline(a:start_line - i)) + let prev_context = phpcomplete#GetCurrentInstruction(a:start_line - i, tailing_semicolon - 1, b:phpbegin) + let prev_class = phpcomplete#GetClassName(a:start_line - i, prev_context, a:current_namespace, a:imports) + + if stridx(prev_class, '\') != -1 + let classname_parts = split(prev_class, '\\\+') + let classname_candidate = classname_parts[-1] + let class_candidate_namespace = join(classname_parts[0:-2], '\') + else + let classname_candidate = prev_class + let class_candidate_namespace = '\' + endif + break + endif + + " assignment for the variable in question with a function on the right hand side + if line =~# '^\s*'.object.'\s*=&\?\s*'.function_invocation_pattern + let tailing_semicolon = match(line, ';\s*$') + let tailing_semicolon = tailing_semicolon != -1 ? tailing_semicolon : strlen(getline(a:start_line - i)) + let prev_context = phpcomplete#GetCurrentInstruction(a:start_line - i, tailing_semicolon - 1, b:phpbegin) + + let function_name = matchstr(prev_context, '^'.function_invocation_pattern.'\ze') + let function_name = matchstr(function_name, '^\zs.\+\ze\s*($') " strip the trailing ( + let [function_name, function_namespace] = phpcomplete#ExpandClassName(function_name, a:current_namespace, a:imports) + + let function_file = phpcomplete#GetFunctionLocation(function_name, function_namespace) + + if function_file == 'VIMPHP_BUILTINFUNCTION' + " built in function, grab the return type from the info string + let return_type = matchstr(g:php_builtin_functions[function_name.'('], '\v\|\s+\zs.+$') + let classname_candidate = return_type + let class_candidate_namespace = '\' + break + elseif function_file != '' && filereadable(function_file) + let file_lines = readfile(function_file) + let docblock_str = phpcomplete#GetDocBlock(file_lines, 'function\s*&\?\<'.function_name.'\>') + let docblock = phpcomplete#ParseDocBlock(docblock_str) + if has_key(docblock.return, 'type') + let classname_candidate = docblock.return.type + let [class_candidate_namespace, function_imports] = phpcomplete#GetCurrentNameSpace(file_lines) + " try to expand the classname of the returned type with the context got from the function's source file + let [classname_candidate, unused] = phpcomplete#ExpandClassName(classname_candidate, class_candidate_namespace, function_imports) + break + endif + endif + endif + + " foreach with the variable in question + if line =~? 'foreach\s*(.\{-}\s\+'.object.'\s*)' + let sub_context = matchstr(line, 'foreach\s*(\s*\zs.\{-}\ze\s\+as') + let prev_class = phpcomplete#GetClassName(a:start_line - i, sub_context, a:current_namespace, a:imports) + + " the iterated expression should return an array type + if prev_class =~ '\[\]$' + let prev_class = matchstr(prev_class, '\v^[^[]+') + else + return + endif + + if stridx(prev_class, '\') != -1 + let classname_parts = split(prev_class, '\\\+') + let classname_candidate = classname_parts[-1] + let class_candidate_namespace = join(classname_parts[0:-2], '\') + else + let classname_candidate = prev_class + let class_candidate_namespace = '\' + endif + break + endif + + " catch clause with the variable in question + if line =~? 'catch\s*(\zs'.class_name_pattern.'\ze\s\+'.object + let classname = matchstr(line, 'catch\s*(\zs'.class_name_pattern.'\ze\s\+'.object) + if stridx(classname, '\') != -1 + let classname_parts = split(classname, '\\\+') + let classname_candidate = classname_parts[-1] + let class_candidate_namespace = join(classname_parts[0:-2], '\') + else + let classname_candidate = classname + let class_candidate_namespace = '\' + endif + break + endif + + let i += 1 + endfor " }}} + + if classname_candidate != '' + let [classname_candidate, class_candidate_namespace] = phpcomplete#GetCallChainReturnType(classname_candidate, class_candidate_namespace, class_candidate_imports, methodstack) + " return absolute classname, without leading \ + return (class_candidate_namespace == '\' || class_candidate_namespace == '') ? classname_candidate : class_candidate_namespace.'\'.classname_candidate + endif + + " OK, first way failed, now check tags file(s) + " This method is useless when local variables are not indexed by ctags and + " pretty inaccurate even if it is + if g:phpcomplete_search_tags_for_variables + let tags = phpcomplete#GetTaglist('^'.substitute(object, '^\$', '', '')) + if len(tags) == 0 + return + else + for tag in tags + if tag.kind ==? 'v' && tag.cmd =~? '=\s*new\s\+\zs'.class_name_pattern.'\ze' + let classname = matchstr(tag.cmd, '=\s*new\s\+\zs'.class_name_pattern.'\ze') + return classname + endif + endfor + endif + endif + endif +endfunction +" }}} + +function! phpcomplete#GetClassLocation(classname, namespace) " {{{ + " Check classname may be name of built in object + if has_key(g:php_builtin_classes, tolower(a:classname)) && (a:namespace == '' || a:namespace == '\') + return 'VIMPHP_BUILTINOBJECT' + endif + + if a:namespace == '' || a:namespace == '\' + let search_namespace = '\' + else + let search_namespace = tolower(a:namespace) + endif + let [current_namespace, imports] = phpcomplete#GetCurrentNameSpace(getline(0, line('.'))) + + " do in-file lookup for class definition + let i = 1 + while i < line('.') + let line = getline(line('.')-i) + if line =~? '^\s*\(abstract\s\+\|final\s\+\)*\s*class\s*'.a:classname.'\(\s\+\|$\)' && tolower(current_namespace) == search_namespace + return expand('%:p') + else + let i += 1 + continue + endif + endwhile + + " Get class location from tags + let no_namespace_candidate = '' + let tags = phpcomplete#GetTaglist('^'.a:classname.'$') + for tag in tags + if tag.kind == 'c' || tag.kind == 'i' + if !has_key(tag, 'namespace') + let no_namespace_candidate = tag.filename + else + if search_namespace == tolower(tag.namespace) + return tag.filename + endif + endif + endif + endfor + if no_namespace_candidate != '' + return no_namespace_candidate + endif + + return '' +endfunction +" }}} + +function! phpcomplete#GetFunctionLocation(function_name, namespace) " {{{ + " builtin functions doesn't need explicit \ in front of them even in namespaces, + " aliased built-in function names are not handled + if has_key(g:php_builtin_functions, a:function_name.'(') + return 'VIMPHP_BUILTINFUNCTION' + endif + + + " do in-file lookup for function definition + let i = 1 + let buffer_lines = getline(1, line('$')) + for line in buffer_lines + if line =~? '^\s*function\s\+&\?'.a:function_name.'\s*(' + return expand('%:p') + endif + endfor + + + if a:namespace == '' || a:namespace == '\' + let search_namespace = '\' + else + let search_namespace = tolower(a:namespace) + endif + let no_namespace_candidate = '' + let tags = phpcomplete#GetTaglist('\c^'.a:function_name.'$') + + for tag in tags + if tag.kind == 'f' + if !has_key(tag, 'namespace') + let no_namespace_candidate = tag.filename + else + if search_namespace == tolower(tag.namespace) + return tag.filename + endif + endif + endif + endfor + if no_namespace_candidate != '' + return no_namespace_candidate + endif + + return '' +endfunction +" }}} + +function! phpcomplete#GetCachedClassContents(classlocation, class_name) " {{{ + let full_file_path = fnamemodify(a:classlocation, ':p') + let cache_key = full_file_path.'#'.a:class_name.'#'.getftime(full_file_path) + + " try to read from the cache first + if has_key(s:cache_classstructures, cache_key) + let classcontents = s:cache_classstructures[cache_key] + " cached class contents can contain content from multiple files (superclasses) so we have to + " validate cached result's validness by the filemtimes used to create the cached value + let valid = 1 + for classstructure in classcontents + if getftime(classstructure.file) != classstructure.mtime + let valid = 0 + " we could break here, but the time required for checking probably worth + " the the memory we can free by checking every file in the cached hirearchy + call phpcomplete#ClearCachedClassContents(classstructure.file) + endif + endfor + + if valid + " cache hit, we found an entry for this file + class pair and every + " file in the response is also valid + return classcontents + else + " clear the outdated cached value from the cache store + call remove(s:cache_classstructures, cache_key) + call phpcomplete#ClearCachedClassContents(full_file_path) + + " fall trough for the read from files path + endif + else + call phpcomplete#ClearCachedClassContents(full_file_path) + endif + + " cache miss, fetch the content from the files itself + let classfile = readfile(a:classlocation) + let classcontents = phpcomplete#GetClassContentsStructure(full_file_path, classfile, a:class_name) + let s:cache_classstructures[cache_key] = classcontents + + return classcontents +endfunction " }}} + +function! phpcomplete#ClearCachedClassContents(full_file_path) " {{{ + for [cache_key, cached_value] in items(s:cache_classstructures) + if stridx(cache_key, a:full_file_path.'#') == 0 + call remove(s:cache_classstructures, cache_key) + endif + endfor +endfunction " }}} + +function! phpcomplete#GetClassContentsStructure(file_path, file_lines, class_name) " {{{ + " returns dictionary containing content, namespace and imports for the class and all parent classes. + " Example: + " [ + " { + " class: 'foo', + " content: '... class foo extends bar ... ', + " namespace: 'NS\Foo', + " imports : { ... }, + " file: '/foo.php', + " mtime: 42, + " }, + " { + " class: 'bar', + " content: '... class bar extends baz ... ', + " namespace: 'NS\Bar', + " imports : { ... } + " file: '/bar.php', + " mtime: 42, + " }, + " ... + " ] + " + let full_file_path = fnamemodify(a:file_path, ':p') + let class_name_pattern = '[a-zA-Z_\x7f-\xff\\][a-zA-Z_0-9\x7f-\xff\\]*' + let cfile = join(a:file_lines, "\n") + let result = [] + " We use new buffer and (later) normal! because + " this is the most efficient way. The other way + " is to go through the looong string looking for + " matching {} + + " remember the window we started at + let phpcomplete_original_window = winnr() + + silent! below 1new + silent! 0put =cfile + call search('\(class\|interface\)\_s\+'.a:class_name.'\(\>\|$\)') + let cfline = line('.') + call search('{') + let endline = line('.') + + let content = join(getline(cfline, endline), "\n") + " Catch extends + if content =~? 'extends' + let extends_class = matchstr(content, 'class\_s\+'.a:class_name.'\_s\+extends\_s\+\zs'.class_name_pattern.'\ze') + else + let extends_class = '' + endif + call searchpair('{', '', '}', 'W') + let classcontent = join(getline(cfline, line('.')), "\n") + silent! bw! % + let [current_namespace, imports] = phpcomplete#GetCurrentNameSpace(a:file_lines[0:cfline]) + " go back to original window + exe phpcomplete_original_window.'wincmd w' + call add(result, { + \ 'class': a:class_name, + \ 'content': classcontent, + \ 'namespace': current_namespace, + \ 'imports': imports, + \ 'file': full_file_path, + \ 'mtime': getftime(full_file_path), + \ }) + + if extends_class != '' + let [extends_class, namespace] = phpcomplete#ExpandClassName(extends_class, current_namespace, imports) + if namespace == '' + let namespace = '\' + endif + let classlocation = phpcomplete#GetClassLocation(extends_class, namespace) + if classlocation == "VIMPHP_BUILTINOBJECT" + let result += [phpcomplete#GenerateBuiltinClassStub(g:php_builtin_classes[tolower(extends_class)])] + elseif classlocation != '' && filereadable(classlocation) + let full_file_path = fnamemodify(classlocation, ':p') + let result += phpcomplete#GetClassContentsStructure(full_file_path, readfile(full_file_path), extends_class) + elseif tolower(current_namespace) == tolower(namespace) + " try to find the declaration in the same file. + let result += phpcomplete#GetClassContentsStructure(full_file_path, a:file_lines, extends_class) + endif + endif + + return result +endfunction +" }}} + +function! phpcomplete#GetClassContents(classlocation, class_name) " {{{ + let classcontents = phpcomplete#GetCachedClassContents(a:classlocation, a:class_name) + let result = [] + for classstructure in classcontents + call add(result, classstructure.content) + endfor + return join(result, "\n") +endfunction +" }}} + +function! phpcomplete#GenerateBuiltinClassStub(class_info) " {{{ + let re = 'class '.a:class_info['name']." {" + for [name, initializer] in items(a:class_info.constants) + let re .= "\n\tconst ".name." = ".initializer.";" + endfor + for [name, info] in items(a:class_info.properties) + let re .= "\n\t// @var $".name." ".info.type + let re .= "\n\tpublic $".name.";" + endfor + for [name, info] in items(a:class_info.static_properties) + let re .= "\n\t// @var ".name." ".info.type + let re .= "\n\tpublic static ".name." = ".info.initializer.";" + endfor + for [name, info] in items(a:class_info.methods) + if name =~ '^__' + continue + endif + let re .= "\n\t/**" + let re .= "\n\t * ".name + let re .= "\n\t *" + let re .= "\n\t * @return ".info.return_type + let re .= "\n\t */" + let re .= "\n\tpublic function ".name."(".info.signature."){" + let re .= "\n\t}" + endfor + for [name, info] in items(a:class_info.static_methods) + let re .= "\n\t/**" + let re .= "\n\t * ".name + let re .= "\n\t *" + let re .= "\n\t * @return ".info.return_type + let re .= "\n\t */" + let re .= "\n\tpublic static function ".name."(".info.signature."){" + let re .= "\n\t}" + endfor + let re .= "\n}" + + return { 'class': a:class_info['name'], + \ 'content': re, + \ 'namespace': '', + \ 'imports': {}, + \ 'file': 'VIMPHP_BUILTINOBJECT', + \ 'mtime': 0, + \ } +endfunction " }}} + +function! phpcomplete#GetDocBlock(sccontent, search) " {{{ + let i = 0 + let l = 0 + let comment_start = -1 + let comment_end = -1 + let sccontent_len = len(a:sccontent) + + while (i < sccontent_len) + let line = a:sccontent[i] + " search for a function declaration + if line =~? a:search + let l = i - 1 + " start backward serch for the comment block + while l != 0 + let line = a:sccontent[l] + " if comment end found save line position and end search + if line =~? '^\s*\*/' + let comment_end = l + break + " ... or the line doesn't blank (only whitespace or nothing) end search + elseif line !~? '^\s*$' + break + endif + let l -= 1 + endwhile + " no comment found + if comment_end == -1 + return '' + end + + while l != 0 + let line = a:sccontent[l] + if line =~? '^\s*/\*\*' + let comment_start = l + break + endif + let l -= 1 + endwhile + " no docblock comment start found + if comment_start == -1 + return '' + end + + let comment_start += 1 " we dont need the /** + let comment_end -= 1 " we dont need the */ + + " remove leading whitespace and '*'s + let docblock = join(map(copy(a:sccontent[comment_start :comment_end]), 'substitute(v:val, "^\\s*\\*\\s*", "", "")'), "\n") + return docblock + endif + let i += 1 + endwhile + return '' +endfunction +" }}} + +function! phpcomplete#ParseDocBlock(docblock) " {{{ + let res = { + \ 'description': '', + \ 'params': [], + \ 'return': {}, + \ 'throws': [], + \ 'var': {}, + \ } + + let res.description = substitute(matchstr(a:docblock, '\zs\_.\{-}\ze\(@var\|@param\|@return\|$\)'), '\(^\_s*\|\_s*$\)', '', 'g') + let docblock_lines = split(a:docblock, "\n") + + let param_lines = filter(copy(docblock_lines), 'v:val =~? "^@param"') + for param_line in param_lines + let parts = matchlist(param_line, '@param\s\+\(\S\+\)\s\+\(\S\+\)\s*\(.*\)') + if len(parts) > 0 + call add(res.params, { + \ 'line': parts[0], + \ 'type': phpcomplete#GetTypeFromDocBlockParam(get(parts, 1, '')), + \ 'name': get(parts, 2, ''), + \ 'description': get(parts, 3, '')}) + endif + endfor + + let return_line = filter(copy(docblock_lines), 'v:val =~? "^@return"') + if len(return_line) > 0 + let return_parts = matchlist(return_line[0], '@return\s\+\(\S\+\)\s*\(.*\)') + let res['return'] = { + \ 'line': return_parts[0], + \ 'type': phpcomplete#GetTypeFromDocBlockParam(get(return_parts, 1, '')), + \ 'description': get(return_parts, 2, '')} + endif + + let exception_lines = filter(copy(docblock_lines), 'v:val =~? "^\\(@throws\\|@exception\\)"') + for exception_line in exception_lines + let parts = matchlist(exception_line, '^\(@throws\|@exception\)\s\+\(\S\+\)\s*\(.*\)') + if len(parts) > 0 + call add(res.throws, { + \ 'line': parts[0], + \ 'type': phpcomplete#GetTypeFromDocBlockParam(get(parts, 2, '')), + \ 'description': get(parts, 3, '')}) + endif + endfor + + let var_line = filter(copy(docblock_lines), 'v:val =~? "^@var"') + if len(var_line) > 0 + let var_parts = matchlist(var_line[0], '@var\s\+\(\S\+\)\s*\(.*\)') + let res['var'] = { + \ 'line': var_parts[0], + \ 'type': phpcomplete#GetTypeFromDocBlockParam(get(var_parts, 1, '')), + \ 'description': get(var_parts, 2, '')} + endif + + return res +endfunction +" }}} + +function! phpcomplete#GetTypeFromDocBlockParam(docblock_type) " {{{ + if a:docblock_type !~ '|' + return a:docblock_type + endif + + let primitive_types = [ + \ 'string', 'float', 'double', 'int', + \ 'scalar', 'array', 'bool', 'void', 'mixed', + \ 'null', 'callable', 'resource', 'object'] + + " add array of primitives to the list too, like string[] + let primitive_types += map(copy(primitive_types), 'v:val."[]"') + let types = split(a:docblock_type, '|') + for type in types + if index(primitive_types, type) == -1 + return type + endif + endfor + + " only primitive types found, return the first one + return types[0] + +endfunction +" }}} + +function! phpcomplete#FormatDocBlock(info) " {{{ + let res = '' + if len(a:info.description) + let res .= "Description:\n".join(map(split(a:info['description'], "\n"), '"\t".v:val'), "\n")."\n" + endif + + if len(a:info.params) + let res .= "\nArguments:\n" + for arginfo in a:info.params + let res .= "\t".arginfo['name'].' '.arginfo['type'] + if len(arginfo.description) > 0 + let res .= ': '.arginfo['description'] + endif + let res .= "\n" + endfor + endif + + if has_key(a:info.return, 'type') + let res .= "\nReturn:\n\t".a:info['return']['type'] + if len(a:info.return.description) > 0 + let res .= ": ".a:info['return']['description'] + endif + let res .= "\n" + endif + + if len(a:info.throws) + let res .= "\nThrows:\n" + for excinfo in a:info.throws + let res .= "\t".excinfo['type'] + if len(excinfo['description']) > 0 + let res .= ": ".excinfo['description'] + endif + let res .= "\n" + endfor + endif + + if has_key(a:info.var, 'type') + let res .= "Type:\n\t".a:info['var']['type']."\n" + if len(a:info['var']['description']) > 0 + let res .= ': '.a:info['var']['description'] + endif + endif + + return res +endfunction! +" }}} + +function! phpcomplete#GetCurrentNameSpace(file_lines) " {{{ + let namespace_name_pattern = '[a-zA-Z_\x7f-\xff\\][a-zA-Z_0-9\x7f-\xff\\]*' + let file_lines = reverse(copy(a:file_lines)) + let i = 0 + let file_length = len(file_lines) + let imports = {} + + let current_namespace = '\' + + while i < file_length + let line = file_lines[i] + + if line =~? '^\s*namespace\s*'.namespace_name_pattern + let current_namespace = matchstr(line, '^\s*namespace\s*\zs'.namespace_name_pattern.'\ze') + break + endif + + if line =~? '^\s*use\>' + if line =~? ';' + let use_line = line + else + " try to find the next line containing ';' + let l = i + let search_line = line + let use_line = line + + " add lines from the file until theres no ';' in them + while search_line !~? ';' && l > 0 + " file lines are reversed so we need to go backwards + let l -= 1 + let search_line = file_lines[l] + let use_line .= ' '.substitute(search_line, '\(^\s\+\|\s\+$\)', '', 'g') + endwhile + endif + let use_expression = matchstr(use_line, '^\s*use\s\+\zs.\{-}\ze;') + let use_parts = map(split(use_expression, '\s*,\s*'), 'substitute(v:val, "\\s+", " ", "g")') + for part in use_parts + if part =~? '\s\+as\s\+' + let [object, name] = split(part, '\s\+as\s\+') + let object = substitute(object, '^\\', '', '') + let name = substitute(name, '^\\', '', '') + else + let object = part + let name = part + let object = substitute(object, '^\\', '', '') + let name = substitute(name, '^\\', '', '') + if name =~? '\\' + let name = matchstr(name, '\\\zs[^\\]\+\ze$') + endif + endif + " leading slash is not required use imports are always absolute + let imports[name] = {'name': object, 'kind': ''} + endfor + + " find kind flags from tags or built in methods for the objects we extracted + " they can be either classes, interfaces or namespaces, no other thing is importable in php + for [key, import] in items(imports) + " if theres a \ in the name we have it's definetly not a built in thing, look for tags + if import.name =~ '\\' + let patched_ctags_detected = 0 + let [classname, namespace_for_classes] = phpcomplete#ExpandClassName(import.name, '\', {}) + let namespace_name_candidate = substitute(import.name, '\\', '\\\\', 'g') + " can be a namespace name as is, or can be a tagname at the end with a namespace + let tags = phpcomplete#GetTaglist('^\('.namespace_name_candidate.'\|'.classname.'\)$') + if len(tags) > 0 + for tag in tags + " if there's a namespace with the name of the import + if tag.kind == 'n' && tag.name == import.name + call extend(import, tag) + let import['builtin'] = 0 + let patched_ctags_detected = 1 + break + endif + " if the name matches with the extracted classname and namespace + if (tag.kind == 'c' || tag.kind == 'i') && tag.name == classname + if has_key(tag, 'namespace') + let patched_ctags_detected = 1 + if tag.namespace == namespace_for_classes + call extend(import, tag) + let import['builtin'] = 0 + break + endif + elseif !exists('no_namespace_candidate') + " save the first namespacless match to be used if no better + " candidate found later on + let no_namespace_candidate = tag + endif + endif + endfor + " there were a namespacless class name match, if we think that the + " tags are not generated with patched ctags we will take it as a match + if exists('no_namespace_candidate') && !patched_ctags_detected + call extend(import, no_namespace_candidate) + let import['builtin'] = 0 + endif + else + " if no tags are found, extract the namespace from the name + let ns = matchstr(import.name, '\c\zs[a-zA-Z0-9\\]\+\ze\\' . name) + if len(ns) > 0 + let import['name'] = name + let import['namespace'] = ns + let import['builtin'] = 0 + endif + endif + else + " if no \ in the name, it can be a built in class + if has_key(g:php_builtin_classnames, tolower(import.name)) + let import['kind'] = 'c' + let import['builtin'] = 1 + elseif has_key(g:php_builtin_interfacenames, tolower(import.name)) + let import['kind'] = 'i' + let import['builtin'] = 1 + else + " or can be a tag with exactly matchign name + let tags = phpcomplete#GetTaglist('^'.import['name'].'$') + for tag in tags + " search for the first matchin namespace, class, interface with no namespace + if !has_key(tag, 'namespace') && (tag.kind == 'n' || tag.kind == 'c' || tag.kind == 'i') + call extend(import, tag) + let import['builtin'] = 0 + break + endif + endfor + endif + endif + endfor + endif + let i += 1 + endwhile + let sorted_imports = {} + for name in sort(keys(imports)) + let sorted_imports[name] = imports[name] + endfor + return [current_namespace, sorted_imports] +endfunction +" }}} + +function! phpcomplete#GetCurrentFunctionBoundaries() " {{{ + let old_cursor_pos = [line('.'), col('.')] + let current_line_no = old_cursor_pos[0] + let function_pattern = '\c\(.*\%#\)\@!\_^\s*\zs\(abstract\s\+\|final\s\+\|private\s\+\|protected\s\+\|public\s\+\|static\s\+\)*function\_.\{-}(\_.\{-})\_.\{-}{' + + let func_start_pos = searchpos(function_pattern, 'Wbc') + if func_start_pos == [0, 0] + call cursor(old_cursor_pos[0], old_cursor_pos[1]) + return 0 + endif + + " get the line where the function declaration actually started + call search('\cfunction\_.\{-}(\_.\{-})\_.\{-}{', 'Wce') + + " get the position of the function block's closing "}" + let func_end_pos = searchpairpos('{', '', '}', 'W') + if func_end_pos == [0, 0] + " there is a function start but no end found, assume that we are in a + " function but the user did not typed the closing "}" yet and the + " function runs to the end of the file + let func_end_pos = [line('$'), len(getline(line('$')))] + endif + + " Decho func_start_pos[0].' <= '.current_line_no.' && '.current_line_no.' <= '.func_end_pos[0] + if func_start_pos[0] <= current_line_no && current_line_no <= func_end_pos[0] + call cursor(old_cursor_pos[0], old_cursor_pos[1]) + return [func_start_pos, func_end_pos] + endif + + call cursor(old_cursor_pos[0], old_cursor_pos[1]) + return 0 +endfunction +" }}} + +function! phpcomplete#ExpandClassName(classname, current_namespace, imports) " {{{ + " if there's an imported class, just use that class's information + if has_key(a:imports, a:classname) && (a:imports[a:classname].kind == 'c' || a:imports[a:classname].kind == 'i') + let namespace = has_key(a:imports[a:classname], 'namespace') ? a:imports[a:classname].namespace : '' + return [a:imports[a:classname].name, namespace] + endif + + " try to find relative namespace in imports, imported names takes precedence over + " current namespace when resolving relative namespaced class names + if a:classname !~ '^\' && a:classname =~ '\\' + let classname_parts = split(a:classname, '\\\+') + if has_key(a:imports, classname_parts[0]) && a:imports[classname_parts[0]].kind == 'n' + let classname_parts[0] = a:imports[classname_parts[0]].name + let namespace = join(classname_parts[0:-2], '\') + let classname = classname_parts[-1] + return [classname, namespace] + endif + endif + + " no imported class or namespace matched, expand with the current namespace + let namespace = '' + let classname = a:classname + " if the classname have namespaces in in or we are in a namespace + if a:classname =~ '\\' || (a:current_namespace != '\' && a:current_namespace != '') + " add current namespace to the a:classname + if a:classname !~ '^\' + let classname = a:current_namespace.'\'.substitute(a:classname, '^\\', '', '') + else + " remove leading \, tag files doesn't have those + let classname = substitute(a:classname, '^\\', '', '') + endif + " split classname to classname and namespace + let classname_parts = split(classname, '\\\+') + if len(classname_parts) > 1 + let namespace = join(classname_parts[0:-2], '\') + let classname = classname_parts[-1] + endif + endif + return [classname, namespace] +endfunction +" }}} + +function! phpcomplete#LoadData() " {{{ +" Keywords/reserved words, all other special things +" Later it is possible to add some help to values, or type of defined variable +let g:php_keywords={'PHP_SELF':'','argv':'','argc':'','GATEWAY_INTERFACE':'','SERVER_ADDR':'','SERVER_NAME':'','SERVER_SOFTWARE':'','SERVER_PROTOCOL':'','REQUEST_METHOD':'','REQUEST_TIME':'','QUERY_STRING':'','DOCUMENT_ROOT':'','HTTP_ACCEPT':'','HTTP_ACCEPT_CHARSET':'','HTTP_ACCEPT_ENCODING':'','HTTP_ACCEPT_LANGUAGE':'','HTTP_CONNECTION':'','HTTP_POST':'','HTTP_REFERER':'','HTTP_USER_AGENT':'','HTTPS':'','REMOTE_ADDR':'','REMOTE_HOST':'','REMOTE_PORT':'','SCRIPT_FILENAME':'','SERVER_ADMIN':'','SERVER_PORT':'','SERVER_SIGNATURE':'','PATH_TRANSLATED':'','SCRIPT_NAME':'','REQUEST_URI':'','PHP_AUTH_DIGEST':'','PHP_AUTH_USER':'','PHP_AUTH_PW':'','AUTH_TYPE':'','and':'','or':'','xor':'','__FILE__':'','exception':'','__LINE__':'','as':'','break':'','case':'','class':'','const':'','continue':'','declare':'','default':'','do':'','echo':'','else':'','elseif':'','enddeclare':'','endfor':'','endforeach':'','endif':'','endswitch':'','endwhile':'','extends':'','for':'','foreach':'','function':'','global':'','if':'','new':'','static':'','switch':'','use':'','var':'','while':'','final':'','php_user_filter':'','interface':'','implements':'','public':'','private':'','protected':'','abstract':'','clone':'','try':'','catch':'','throw':'','cfunction':'','old_function':'','this':'','INI_USER': '','INI_PERDIR': '','INI_SYSTEM': '','INI_ALL': '','ABDAY_1': '','ABDAY_2': '','ABDAY_3': '','ABDAY_4': '','ABDAY_5': '','ABDAY_6': '','ABDAY_7': '','DAY_1': '','DAY_2': '','DAY_3': '','DAY_4': '','DAY_5': '','DAY_6': '','DAY_7': '','ABMON_1': '','ABMON_2': '','ABMON_3': '','ABMON_4': '','ABMON_5': '','ABMON_6': '','ABMON_7': '','ABMON_8': '','ABMON_9': '','ABMON_10': '','ABMON_11': '','ABMON_12': '','MON_1': '','MON_2': '','MON_3': '','MON_4': '','MON_5': '','MON_6': '','MON_7': '','MON_8': '','MON_9': '','MON_10': '','MON_11': '','MON_12': '','AM_STR': '','D_T_FMT': '','ALT_DIGITS': '',} +" One giant hash of all built-in function, class, interface and constant grouped by extension +let php_builtin = {'functions':{},'classes':{},'interfaces':{},'constants':{},} +let php_builtin['functions']['math']={'abs(':'mixed $number | number','acos(':'float $arg | float','acosh(':'float $arg | float','asin(':'float $arg | float','asinh(':'float $arg | float','atan(':'float $arg | float','atan2(':'float $y, float $x | float','atanh(':'float $arg | float','base_convert(':'string $number, int $frombase, int $tobase | string','bindec(':'string $binary_string | number','ceil(':'float $value | float','cos(':'float $arg | float','cosh(':'float $arg | float','decbin(':'int $number | string','dechex(':'int $number | string','decoct(':'int $number | string','deg2rad(':'float $number | float','exp(':'float $arg | float','expm1(':'float $arg | float','floor(':'float $value | float','fmod(':'float $x, float $y | float','getrandmax(':'void | int','hexdec(':'string $hex_string | number','hypot(':'float $x, float $y | float','is_finite(':'float $val | bool','is_infinite(':'float $val | bool','is_nan(':'float $val | bool','lcg_value(':'void | float','log(':'float $arg [, float $base = M_E] | float','log10(':'float $arg | float','log1p(':'float $number | float','max(':'array $values | mixed','min(':'array $values | mixed','mt_getrandmax(':'void | int','mt_rand(':'void | int','mt_srand(':'[ int $seed] | void','octdec(':'string $octal_string | number','pi(':'void | float','pow(':'number $base, number $exp | number','rad2deg(':'float $number | float','rand(':'void | int','round(':'float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP]] | float','sin(':'float $arg | float','sinh(':'float $arg | float','sqrt(':'float $arg | float','srand(':'[ int $seed] | void','tan(':'float $arg | float','tanh(':'float $arg | float',} +let php_builtin['functions']['strings']={'addcslashes(':'string $str, string $charlist | string','addslashes(':'string $str | string','bin2hex(':'string $str | string','chop(':'chop — Alias of rtrim()','chr(':'int $ascii | string','chunk_split(':'string $body [, int $chunklen = 76 [, string $end = "\r\n"]] | string','convert_cyr_string(':'string $str, string $from, string $to | string','convert_uudecode(':'string $data | string','convert_uuencode(':'string $data | string','count_chars(':'string $string [, int $mode = 0] | mixed','crc32(':'string $str | int','crypt(':'string $str [, string $salt] | string','echo(':'string $arg1 [, string $...] | void','explode(':'string $delimiter, string $string [, int $limit] | array','fprintf(':'resource $handle, string $format [, mixed $args [, mixed $...]] | int','get_html_translation_table(':'[ int $table = HTML_SPECIALCHARS [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ''UTF-8'']]] | array','hebrev(':'string $hebrew_text [, int $max_chars_per_line = 0] | string','hebrevc(':'string $hebrew_text [, int $max_chars_per_line = 0] | string','hex2bin(':'string $data | string','html_entity_decode(':'string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ''UTF-8'']] | string','htmlentities(':'string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ''UTF-8'' [, bool $double_encode = true]]] | string','htmlspecialchars_decode(':'string $string [, int $flags = ENT_COMPAT | ENT_HTML401] | string','htmlspecialchars(':'string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ''UTF-8'' [, bool $double_encode = true]]] | string','implode(':'string $glue, array $pieces | string','join(':'join — Alias of implode()','lcfirst(':'string $str | string','levenshtein(':'string $str1, string $str2 | int','localeconv(':'void | array','ltrim(':'string $str [, string $character_mask] | string','md5_file(':'string $filename [, bool $raw_output = false] | string','md5(':'string $str [, bool $raw_output = false] | string','metaphone(':'string $str [, int $phonemes = 0] | string','money_format(':'string $format, float $number | string','nl_langinfo(':'int $item | string','nl2br(':'string $string [, bool $is_xhtml = true] | string','number_format(':'float $number [, int $decimals = 0] | string','ord(':'string $string | int','parse_str(':'string $str [, array &$arr] | void','print(':'string $arg | int','printf(':'string $format [, mixed $args [, mixed $...]] | int','quoted_printable_decode(':'string $str | string','quoted_printable_encode(':'string $str | string','quotemeta(':'string $str | string','rtrim(':'string $str [, string $character_mask] | string','setlocale(':'int $category, string $locale [, string $...] | string','sha1_file(':'string $filename [, bool $raw_output = false] | string','sha1(':'string $str [, bool $raw_output = false] | string','similar_text(':'string $first, string $second [, float &$percent] | int','soundex(':'string $str | string','sprintf(':'string $format [, mixed $args [, mixed $...]] | string','sscanf(':'string $str, string $format [, mixed &$...] | mixed','str_getcsv(':'string $input [, string $delimiter = '','' [, string $enclosure = ''"'' [, string $escape = ''\\'']]] | array','str_ireplace(':'mixed $search, mixed $replace, mixed $subject [, int &$count] | mixed','str_pad(':'string $input, int $pad_length [, string $pad_string = " " [, int $pad_type = STR_PAD_RIGHT]] | string','str_repeat(':'string $input, int $multiplier | string','str_replace(':'mixed $search, mixed $replace, mixed $subject [, int &$count] | mixed','str_rot13(':'string $str | string','str_shuffle(':'string $str | string','str_split(':'string $string [, int $split_length = 1] | array','str_word_count(':'string $string [, int $format = 0 [, string $charlist]] | mixed','strcasecmp(':'string $str1, string $str2 | int','strchr(':'strchr — Alias of strstr()','strcmp(':'string $str1, string $str2 | int','strcoll(':'string $str1, string $str2 | int','strcspn(':'string $str1, string $str2 [, int $start [, int $length]] | int','strip_tags(':'string $str [, string $allowable_tags] | string','stripcslashes(':'string $str | string','stripos(':'string $haystack, string $needle [, int $offset = 0] | int','stripslashes(':'string $str | string','stristr(':'string $haystack, mixed $needle [, bool $before_needle = false] | string','strlen(':'string $string | int','strnatcasecmp(':'string $str1, string $str2 | int','strnatcmp(':'string $str1, string $str2 | int','strncasecmp(':'string $str1, string $str2, int $len | int','strncmp(':'string $str1, string $str2, int $len | int','strpbrk(':'string $haystack, string $char_list | string','strpos(':'string $haystack, mixed $needle [, int $offset = 0] | mixed','strrchr(':'string $haystack, mixed $needle | string','strrev(':'string $string | string','strripos(':'string $haystack, string $needle [, int $offset = 0] | int','strrpos(':'string $haystack, string $needle [, int $offset = 0] | int','strspn(':'string $subject, string $mask [, int $start [, int $length]] | int','strstr(':'string $haystack, mixed $needle [, bool $before_needle = false] | string','strtok(':'string $str, string $token | string','strtolower(':'string $str | string','strtoupper(':'string $string | string','strtr(':'string $str, string $from, string $to | string','substr_compare(':'string $main_str, string $str, int $offset [, int $length [, bool $case_insensitivity = false]] | int','substr_count(':'string $haystack, string $needle [, int $offset = 0 [, int $length]] | int','substr_replace(':'mixed $string, mixed $replacement, mixed $start [, mixed $length] | mixed','substr(':'string $string, int $start [, int $length] | string','trim(':'string $str [, string $character_mask = " \t\n\r\0\x0B"] | string','ucfirst(':'string $str | string','ucwords(':'string $str | string','vfprintf(':'resource $handle, string $format, array $args | int','vprintf(':'string $format, array $args | int','vsprintf(':'string $format, array $args | string','wordwrap(':'string $str [, int $width = 75 [, string $break = "\n" [, bool $cut = false]]] | string',} +let php_builtin['functions']['apache']={'apache_child_terminate(':'void | bool','apache_get_modules(':'void | array','apache_get_version(':'void | string','apache_getenv(':'string $variable [, bool $walk_to_top = false] | string','apache_lookup_uri(':'string $filename | object','apache_note(':'string $note_name [, string $note_value = ""] | string','apache_request_headers(':'void | array','apache_reset_timeout(':'void | bool','apache_response_headers(':'void | array','apache_setenv(':'string $variable, string $value [, bool $walk_to_top = false] | bool','getallheaders(':'void | array','virtual(':'string $filename | bool',} +let php_builtin['functions']['arrays']={'array_change_key_case(':'array $array [, int $case = CASE_LOWER] | array','array_chunk(':'array $array, int $size [, bool $preserve_keys = false] | array','array_column(':'array $array, mixed $column_key [, mixed $index_key = null] | array','array_combine(':'array $keys, array $values | array','array_count_values(':'array $array | array','array_diff_assoc(':'array $array1, array $array2 [, array $...] | array','array_diff_key(':'array $array1, array $array2 [, array $...] | array','array_diff_uassoc(':'array $array1, array $array2 [, array $... [, callable $key_compare_func]] | array','array_diff_ukey(':'array $array1, array $array2 [, array $... [, callable $key_compare_func]] | array','array_diff(':'array $array1, array $array2 [, array $...] | array','array_fill_keys(':'array $keys, mixed $value | array','array_fill(':'int $start_index, int $num, mixed $value | array','array_filter(':'array $array [, callable $callback] | array','array_flip(':'array $array | array','array_intersect_assoc(':'array $array1, array $array2 [, array $...] | array','array_intersect_key(':'array $array1, array $array2 [, array $...] | array','array_intersect_uassoc(':'array $array1, array $array2 [, array $... [, callable $key_compare_func]] | array','array_intersect_ukey(':'array $array1, array $array2 [, array $... [, callable $key_compare_func]] | array','array_intersect(':'array $array1, array $array2 [, array $...] | array','array_key_exists(':'mixed $key, array $array | bool','array_keys(':'array $array [, mixed $search_value [, bool $strict = false]] | array','array_map(':'callable $callback, array $array1 [, array $...] | array','array_merge_recursive(':'array $array1 [, array $...] | array','array_merge(':'array $array1 [, array $...] | array','array_multisort(':'array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $...]]] | bool','array_pad(':'array $array, int $size, mixed $value | array','array_pop(':'array &$array | mixed','array_product(':'array $array | number','array_push(':'array &$array, mixed $value1 [, mixed $...] | int','array_rand(':'array $array [, int $num = 1] | mixed','array_reduce(':'array $array, callable $callback [, mixed $initial = NULL] | mixed','array_replace_recursive(':'array $array1, array $array2 [, array $...] | array','array_replace(':'array $array1, array $array2 [, array $...] | array','array_reverse(':'array $array [, bool $preserve_keys = false] | array','array_search(':'mixed $needle, array $haystack [, bool $strict = false] | mixed','array_shift(':'array &$array | mixed','array_slice(':'array $array, int $offset [, int $length = NULL [, bool $preserve_keys = false]] | array','array_splice(':'array &$input, int $offset [, int $length [, mixed $replacement = array()]] | array','array_sum(':'array $array | number','array_udiff_assoc(':'array $array1, array $array2 [, array $... [, callable $value_compare_func]] | array','array_udiff_uassoc(':'array $array1, array $array2 [, array $... [, callable $value_compare_func [, callable $key_compare_func]]] | array','array_udiff(':'array $array1, array $array2 [, array $... [, callable $value_compare_func]] | array','array_uintersect_assoc(':'array $array1, array $array2 [, array $... [, callable $value_compare_func]] | array','array_uintersect_uassoc(':'array $array1, array $array2 [, array $... [, callable $value_compare_func [, callable $key_compare_func]]] | array','array_uintersect(':'array $array1, array $array2 [, array $... [, callable $value_compare_func]] | array','array_unique(':'array $array [, int $sort_flags = SORT_STRING] | array','array_unshift(':'array &$array, mixed $value1 [, mixed $...] | int','array_values(':'array $array | array','array_walk_recursive(':'array &$array, callable $callback [, mixed $userdata = NULL] | bool','array_walk(':'array &$array, callable $callback [, mixed $userdata = NULL] | bool','array(':'[ mixed $...] | array','arsort(':'array &$array [, int $sort_flags = SORT_REGULAR] | bool','asort(':'array &$array [, int $sort_flags = SORT_REGULAR] | bool','compact(':'mixed $varname1 [, mixed $...] | array','count(':'mixed $array_or_countable [, int $mode = COUNT_NORMAL] | int','current(':'array &$array | mixed','each(':'array &$array | array','end(':'array &$array | mixed','extract(':'array &$array [, int $flags = EXTR_OVERWRITE [, string $prefix = NULL]] | int','in_array(':'mixed $needle, array $haystack [, bool $strict = FALSE] | bool','key_exists(':'key_exists — Alias of array_key_exists()','key(':'array &$array | mixed','krsort(':'array &$array [, int $sort_flags = SORT_REGULAR] | bool','ksort(':'array &$array [, int $sort_flags = SORT_REGULAR] | bool','list(':'mixed $var1 [, mixed $...] | array','natcasesort(':'array &$array | bool','natsort(':'array &$array | bool','next(':'array &$array | mixed','pos(':'pos — Alias of current()','prev(':'array &$array | mixed','range(':'mixed $start, mixed $end [, number $step = 1] | array','reset(':'array &$array | mixed','rsort(':'array &$array [, int $sort_flags = SORT_REGULAR] | bool','shuffle(':'array &$array | bool','sizeof(':'sizeof — Alias of count()','sort(':'array &$array [, int $sort_flags = SORT_REGULAR] | bool','uasort(':'array &$array, callable $value_compare_func | bool','uksort(':'array &$array, callable $key_compare_func | bool','usort(':'array &$array, callable $value_compare_func | bool',} +let php_builtin['functions']['php_options_info']={'assert_options(':'int $what [, mixed $value] | mixed','assert(':'mixed $assertion [, string $description] | bool','cli_get_process_title(':'void | string','cli_set_process_title(':'string $title | bool','dl(':'string $library | bool','extension_loaded(':'string $name | bool','gc_collect_cycles(':'void | int','gc_disable(':'void | void','gc_enable(':'void | void','gc_enabled(':'void | bool','get_cfg_var(':'string $option | string','get_current_user(':'void | string','get_defined_constants(':'[ bool $categorize = false] | array','get_extension_funcs(':'string $module_name | array','get_include_path(':'void | string','get_included_files(':'void | array','get_loaded_extensions(':'[ bool $zend_extensions = false] | array','get_magic_quotes_gpc(':'void | bool','get_magic_quotes_runtime(':'void | bool','get_required_files(':'get_required_files — Alias of get_included_files()','getenv(':'string $varname | string','getlastmod(':'void | int','getmygid(':'void | int','getmyinode(':'void | int','getmypid(':'void | int','getmyuid(':'void | int','getopt(':'string $options [, array $longopts] | array','getrusage(':'[ int $who = 0] | array','ini_alter(':'ini_alter — Alias of ini_set()','ini_get_all(':'[ string $extension [, bool $details = true]] | array','ini_get(':'string $varname | string','ini_restore(':'string $varname | void','ini_set(':'string $varname, string $newvalue | string','magic_quotes_runtime(':'magic_quotes_runtime — Alias of set_magic_quotes_runtime()','memory_get_peak_usage(':'[ bool $real_usage = false] | int','memory_get_usage(':'[ bool $real_usage = false] | int','php_ini_loaded_file(':'void | string','php_ini_scanned_files(':'void | string','php_logo_guid(':'void | string','php_sapi_name(':'void | string','php_uname(':'[ string $mode = "a"] | string','phpcredits(':'[ int $flag = CREDITS_ALL] | bool','phpinfo(':'[ int $what = INFO_ALL] | bool','phpversion(':'[ string $extension] | string','putenv(':'string $setting | bool','restore_include_path(':'void | void','set_include_path(':'string $new_include_path | string','set_magic_quotes_runtime(':'bool $new_setting | bool','set_time_limit(':'int $seconds | void','sys_get_temp_dir(':'void | string','version_compare(':'string $version1, string $version2 [, string $operator] | mixed','zend_logo_guid(':'void | string','zend_thread_id(':'void | int','zend_version(':'void | string',} +let php_builtin['functions']['classes_objects']={'__autoload(':'string $class | void','call_user_method_array(':'string $method_name, object &$obj, array $params | mixed','call_user_method(':'string $method_name, object &$obj [, mixed $parameter [, mixed $...]] | mixed','class_alias(':'string $original, string $alias [, bool $autoload = TRUE] | bool','class_exists(':'string $class_name [, bool $autoload = true] | bool','get_called_class(':'void | string','get_class_methods(':'mixed $class_name | array','get_class_vars(':'string $class_name | array','get_class(':'[ object $object = NULL] | string','get_declared_classes(':'void | array','get_declared_interfaces(':'void | array','get_declared_traits(':'void | array','get_object_vars(':'object $object | array','get_parent_class(':'[ mixed $object] | string','interface_exists(':'string $interface_name [, bool $autoload = true] | bool','is_a(':'object $object, string $class_name [, bool $allow_string = FALSE] | bool','is_subclass_of(':'mixed $object, string $class_name [, bool $allow_string = TRUE] | bool','method_exists(':'mixed $object, string $method_name | bool','property_exists(':'mixed $class, string $property | bool','trait_exists(':'string $traitname [, bool $autoload] | bool',} +let php_builtin['functions']['urls']={'base64_decode(':'string $data [, bool $strict = false] | string','base64_encode(':'string $data | string','get_headers(':'string $url [, int $format = 0] | array','get_meta_tags(':'string $filename [, bool $use_include_path = false] | array','http_build_query(':'mixed $query_data [, string $numeric_prefix [, string $arg_separator [, int $enc_type = PHP_QUERY_RFC1738]]] | string','parse_url(':'string $url [, int $component = -1] | mixed','rawurldecode(':'string $str | string','rawurlencode(':'string $str | string','urldecode(':'string $str | string','urlencode(':'string $str | string',} +let php_builtin['functions']['filesystem']={'basename(':'string $path [, string $suffix] | string','chgrp(':'string $filename, mixed $group | bool','chmod(':'string $filename, int $mode | bool','chown(':'string $filename, mixed $user | bool','clearstatcache(':'[ bool $clear_realpath_cache = false [, string $filename]] | void','copy(':'string $source, string $dest [, resource $context] | bool','dirname(':'string $path | string','disk_free_space(':'string $directory | float','disk_total_space(':'string $directory | float','diskfreespace(':'diskfreespace — Alias of disk_free_space()','fclose(':'resource $handle | bool','feof(':'resource $handle | bool','fflush(':'resource $handle | bool','fgetc(':'resource $handle | string','fgetcsv(':'resource $handle [, int $length = 0 [, string $delimiter = '','' [, string $enclosure = ''"'' [, string $escape = ''\\'']]]] | array','fgets(':'resource $handle [, int $length] | string','fgetss(':'resource $handle [, int $length [, string $allowable_tags]] | string','file_exists(':'string $filename | bool','file_get_contents(':'string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen]]]] | string','file_put_contents(':'string $filename, mixed $data [, int $flags = 0 [, resource $context]] | int','file(':'string $filename [, int $flags = 0 [, resource $context]] | array','fileatime(':'string $filename | int','filectime(':'string $filename | int','filegroup(':'string $filename | int','fileinode(':'string $filename | int','filemtime(':'string $filename | int','fileowner(':'string $filename | int','fileperms(':'string $filename | int','filesize(':'string $filename | int','filetype(':'string $filename | string','flock(':'resource $handle, int $operation [, int &$wouldblock] | bool','fnmatch(':'string $pattern, string $string [, int $flags = 0] | bool','fopen(':'string $filename, string $mode [, bool $use_include_path = false [, resource $context]] | resource','fpassthru(':'resource $handle | int','fputcsv(':'resource $handle, array $fields [, string $delimiter = '','' [, string $enclosure = ''"'']] | int','fputs(':'fputs — Alias of fwrite()','fread(':'resource $handle, int $length | string','fscanf(':'resource $handle, string $format [, mixed &$...] | mixed','fseek(':'resource $handle, int $offset [, int $whence = SEEK_SET] | int','fstat(':'resource $handle | array','ftell(':'resource $handle | int','ftruncate(':'resource $handle, int $size | bool','fwrite(':'resource $handle, string $string [, int $length] | int','glob(':'string $pattern [, int $flags = 0] | array','is_dir(':'string $filename | bool','is_executable(':'string $filename | bool','is_file(':'string $filename | bool','is_link(':'string $filename | bool','is_readable(':'string $filename | bool','is_uploaded_file(':'string $filename | bool','is_writable(':'string $filename | bool','is_writeable(':'is_writeable — Alias of is_writable()','lchgrp(':'string $filename, mixed $group | bool','lchown(':'string $filename, mixed $user | bool','link(':'string $target, string $link | bool','linkinfo(':'string $path | int','lstat(':'string $filename | array','mkdir(':'string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context]]] | bool','move_uploaded_file(':'string $filename, string $destination | bool','parse_ini_file(':'string $filename [, bool $process_sections = false [, int $scanner_mode = INI_SCANNER_NORMAL]] | array','parse_ini_string(':'string $ini [, bool $process_sections = false [, int $scanner_mode = INI_SCANNER_NORMAL]] | array','pathinfo(':'string $path [, int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME] | mixed','pclose(':'resource $handle | int','popen(':'string $command, string $mode | resource','readfile(':'string $filename [, bool $use_include_path = false [, resource $context]] | int','readlink(':'string $path | string','realpath_cache_get(':'void | array','realpath_cache_size(':'void | int','realpath(':'string $path | string','rename(':'string $oldname, string $newname [, resource $context] | bool','rewind(':'resource $handle | bool','rmdir(':'string $dirname [, resource $context] | bool','set_file_buffer(':'set_file_buffer — Alias of stream_set_write_buffer()','stat(':'string $filename | array','symlink(':'string $target, string $link | bool','tempnam(':'string $dir, string $prefix | string','tmpfile(':'void | resource','touch(':'string $filename [, int $time = time() [, int $atime]] | bool','umask(':'[ int $mask] | int','unlink(':'string $filename [, resource $context] | bool',} +let php_builtin['functions']['variable_handling']={'boolval(':'mixed $var | boolean','debug_zval_dump(':'mixed $variable [, mixed $...] | void','doubleval(':'doubleval — Alias of floatval()','empty(':'mixed $var | bool','floatval(':'mixed $var | float','get_defined_vars(':'void | array','get_resource_type(':'resource $handle | string','gettype(':'mixed $var | string','import_request_variables(':'string $types [, string $prefix] | bool','intval(':'mixed $var [, int $base = 10] | int','is_array(':'mixed $var | bool','is_bool(':'mixed $var | bool','is_callable(':'callable $name [, bool $syntax_only = false [, string &$callable_name]] | bool','is_double(':'is_double — Alias of is_float()','is_float(':'mixed $var | bool','is_int(':'mixed $var | bool','is_integer(':'is_integer — Alias of is_int()','is_long(':'is_long — Alias of is_int()','is_null(':'mixed $var | bool','is_numeric(':'mixed $var | bool','is_object(':'mixed $var | bool','is_real(':'is_real — Alias of is_float()','is_resource(':'mixed $var | bool','is_scalar(':'mixed $var | bool','is_string(':'mixed $var | bool','isset(':'mixed $var [, mixed $...] | bool','print_r(':'mixed $expression [, bool $return = false] | mixed','serialize(':'mixed $value | string','settype(':'mixed &$var, string $type | bool','strval(':'mixed $var | string','unserialize(':'string $str | mixed','unset(':'mixed $var [, mixed $...] | void','var_dump(':'mixed $expression [, mixed $...] | void','var_export(':'mixed $expression [, bool $return = false] | mixed',} +let php_builtin['functions']['calendar']={'cal_days_in_month(':'int $calendar, int $month, int $year | int','cal_from_jd(':'int $jd, int $calendar | array','cal_info(':'[ int $calendar = -1] | array','cal_to_jd(':'int $calendar, int $month, int $day, int $year | int','easter_date(':'[ int $year] | int','easter_days(':'[ int $year [, int $method = CAL_EASTER_DEFAULT]] | int','frenchtojd(':'int $month, int $day, int $year | int','gregoriantojd(':'int $month, int $day, int $year | int','jddayofweek(':'int $julianday [, int $mode = CAL_DOW_DAYNO] | mixed','jdmonthname(':'int $julianday, int $mode | string','jdtofrench(':'int $juliandaycount | string','jdtogregorian(':'int $julianday | string','jdtojewish(':'int $juliandaycount [, bool $hebrew = false [, int $fl = 0]] | string','jdtojulian(':'int $julianday | string','jdtounix(':'int $jday | int','jewishtojd(':'int $month, int $day, int $year | int','juliantojd(':'int $month, int $day, int $year | int','unixtojd(':'[ int $timestamp = time()] | int',} +let php_builtin['functions']['function_handling']={'call_user_func_array(':'callable $callback, array $param_arr | mixed','call_user_func(':'callable $callback [, mixed $parameter [, mixed $...]] | mixed','create_function(':'string $args, string $code | string','forward_static_call_array(':'callable $function, array $parameters | mixed','forward_static_call(':'callable $function [, mixed $parameter [, mixed $...]] | mixed','func_get_arg(':'int $arg_num | mixed','func_get_args(':'void | array','func_num_args(':'void | int','function_exists(':'string $function_name | bool','get_defined_functions(':'void | array','register_shutdown_function(':'callable $callback [, mixed $parameter [, mixed $...]] | void','register_tick_function(':'callable $function [, mixed $arg [, mixed $...]] | bool','unregister_tick_function(':'string $function_name | void',} +let php_builtin['functions']['directories']={'chdir(':'string $directory | bool','chroot(':'string $directory | bool','closedir(':'[ resource $dir_handle] | void','dir(':'string $directory [, resource $context] | Directory','getcwd(':'void | string','opendir(':'string $path [, resource $context] | resource','readdir(':'[ resource $dir_handle] | string','rewinddir(':'[ resource $dir_handle] | void','scandir(':'string $directory [, int $sorting_order = SCANDIR_SORT_ASCENDING [, resource $context]] | array',} +let php_builtin['functions']['date_time']={'checkdate(':'int $month, int $day, int $year | bool','date_default_timezone_get(':'void | string','date_default_timezone_set(':'string $timezone_identifier | bool','date_parse_from_format(':'string $format, string $date | array','date_parse(':'string $date | array','date_sun_info(':'int $time, float $latitude, float $longitude | array','date_sunrise(':'int $timestamp [, int $format = SUNFUNCS_RET_STRING [, float $latitude = ini_get("date.default_latitude") [, float $longitude = ini_get("date.default_longitude") [, float $zenith = ini_get("date.sunrise_zenith") [, float $gmt_offset = 0]]]]] | mixed','date_sunset(':'int $timestamp [, int $format = SUNFUNCS_RET_STRING [, float $latitude = ini_get("date.default_latitude") [, float $longitude = ini_get("date.default_longitude") [, float $zenith = ini_get("date.sunset_zenith") [, float $gmt_offset = 0]]]]] | mixed','date(':'string $format [, int $timestamp = time()] | string','getdate(':'[ int $timestamp = time()] | array','gettimeofday(':'[ bool $return_float = false] | mixed','gmdate(':'string $format [, int $timestamp = time()] | string','gmmktime(':'[ int $hour = gmdate("H") [, int $minute = gmdate("i") [, int $second = gmdate("s") [, int $month = gmdate("n") [, int $day = gmdate("j") [, int $year = gmdate("Y") [, int $is_dst = -1]]]]]]] | int','gmstrftime(':'string $format [, int $timestamp = time()] | string','idate(':'string $format [, int $timestamp = time()] | int','localtime(':'[ int $timestamp = time() [, bool $is_associative = false]] | array','microtime(':'[ bool $get_as_float = false] | mixed','mktime(':'[ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1]]]]]]] | int','strftime(':'string $format [, int $timestamp = time()] | string','strptime(':'string $date, string $format | array','strtotime(':'string $time [, int $now = time()] | int','time(':'void | int','timezone_name_from_abbr(':'string $abbr [, int $gmtOffset = -1 [, int $isdst = -1]] | string','timezone_version_get(':'void | string',} +let php_builtin['functions']['network']={'checkdnsrr(':'string $host [, string $type = "MX"] | bool','closelog(':'void | bool','define_syslog_variables(':'void | void','dns_get_record(':'string $hostname [, int $type = DNS_ANY [, array &$authns [, array &$addtl [, bool &$raw = false]]]] | array','fsockopen(':'string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout")]]]] | resource','gethostbyaddr(':'string $ip_address | string','gethostbyname(':'string $hostname | string','gethostbynamel(':'string $hostname | array','gethostname(':'void | string','getmxrr(':'string $hostname, array &$mxhosts [, array &$weight] | bool','getprotobyname(':'string $name | int','getprotobynumber(':'int $number | string','getservbyname(':'string $service, string $protocol | int','getservbyport(':'int $port, string $protocol | string','header_register_callback(':'callable $callback | bool','header_remove(':'[ string $name] | void','header(':'string $string [, bool $replace = true [, int $http_response_code]] | void','headers_list(':'void | array','headers_sent(':'[ string &$file [, int &$line]] | bool','http_response_code(':'[ int $response_code] | int','inet_ntop(':'string $in_addr | string','inet_pton(':'string $address | string','ip2long(':'string $ip_address | int','long2ip(':'string $proper_address | string','openlog(':'string $ident, int $option, int $facility | bool','pfsockopen(':'string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout")]]]] | resource','setcookie(':'string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false]]]]]] | bool','setrawcookie(':'string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false]]]]]] | bool','socket_get_status(':'socket_get_status — Alias of stream_get_meta_data()','socket_set_blocking(':'socket_set_blocking — Alias of stream_set_blocking()','socket_set_timeout(':'socket_set_timeout — Alias of stream_set_timeout()','syslog(':'int $priority, string $message | bool',} +let php_builtin['functions']['spl']={'class_implements(':'mixed $class [, bool $autoload = true] | array','class_parents(':'mixed $class [, bool $autoload = true] | array','class_uses(':'mixed $class [, bool $autoload = true] | array','iterator_apply(':'Traversable $iterator, callable $function [, array $args] | int','iterator_count(':'Traversable $iterator | int','iterator_to_array(':'Traversable $iterator [, bool $use_keys = true] | array','spl_autoload_call(':'string $class_name | void','spl_autoload_extensions(':'[ string $file_extensions] | string','spl_autoload_functions(':'void | array','spl_autoload_register(':'[ callable $autoload_function [, bool $throw = true [, bool $prepend = false]]] | bool','spl_autoload_unregister(':'mixed $autoload_function | bool','spl_autoload(':'string $class_name [, string $file_extensions = spl_autoload_extensions()] | void','spl_classes(':'void | array','spl_object_hash(':'object $obj | string',} +let php_builtin['functions']['misc']={'connection_aborted(':'void | int','connection_status(':'void | int','connection_timeout(':'void | int','constant(':'string $name | mixed','define(':'string $name, mixed $value [, bool $case_insensitive = false] | bool','defined(':'string $name | bool','eval(':'string $code | mixed','exit(':'[ string $status] | void','get_browser(':'[ string $user_agent [, bool $return_array = false]] | mixed','__halt_compiler(':'void | void','highlight_file(':'string $filename [, bool $return = false] | mixed','highlight_string(':'string $str [, bool $return = false] | mixed','ignore_user_abort(':'[ string $value] | int','pack(':'string $format [, mixed $args [, mixed $...]] | string','php_check_syntax(':'string $filename [, string &$error_message] | bool','php_strip_whitespace(':'string $filename | string','show_source(':'show_source — Alias of highlight_file()','sleep(':'int $seconds | int','sys_getloadavg(':'void | array','time_nanosleep(':'int $seconds, int $nanoseconds | mixed','time_sleep_until(':'float $timestamp | bool','uniqid(':'[ string $prefix = "" [, bool $more_entropy = false]] | string','unpack(':'string $format, string $data | array','usleep(':'int $micro_seconds | void',} +let php_builtin['functions']['curl']={'curl_close(':'resource $ch | void','curl_copy_handle(':'resource $ch | resource','curl_errno(':'resource $ch | int','curl_error(':'resource $ch | string','curl_escape(':'resource $ch, string $str | string','curl_exec(':'resource $ch | mixed','curl_getinfo(':'resource $ch [, int $opt = 0] | mixed','curl_init(':'[ string $url = NULL] | resource','curl_multi_add_handle(':'resource $mh, resource $ch | int','curl_multi_close(':'resource $mh | void','curl_multi_exec(':'resource $mh, int &$still_running | int','curl_multi_getcontent(':'resource $ch | string','curl_multi_info_read(':'resource $mh [, int &$msgs_in_queue = NULL] | array','curl_multi_init(':'void | resource','curl_multi_remove_handle(':'resource $mh, resource $ch | int','curl_multi_select(':'resource $mh [, float $timeout = 1.0] | int','curl_multi_setopt(':'resource $mh, int $option, mixed $value | bool','curl_multi_strerror(':'int $errornum | string','curl_pause(':'resource $ch, int $bitmask | int','curl_reset(':'resource $ch | void','curl_setopt_array(':'resource $ch, array $options | bool','curl_setopt(':'resource $ch, int $option, mixed $value | bool','curl_share_close(':'resource $sh | void','curl_share_init(':'void | resource','curl_share_setopt(':'resource $sh, int $option, string $value | bool','curl_strerror(':'int $errornum | string','curl_unescape(':'resource $ch, string $str | string','curl_version(':'[ int $age = CURLVERSION_NOW] | array',} +let php_builtin['functions']['error_handling']={'debug_backtrace(':'[ int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT [, int $limit = 0]] | array','debug_print_backtrace(':'[ int $options = 0 [, int $limit = 0]] | void','error_get_last(':'void | array','error_log(':'string $message [, int $message_type = 0 [, string $destination [, string $extra_headers]]] | bool','error_reporting(':'[ int $level] | int','restore_error_handler(':'void | bool','restore_exception_handler(':'void | bool','set_error_handler(':'callable $error_handler [, int $error_types = E_ALL | E_STRICT] | mixed','set_exception_handler(':'callable $exception_handler | callable','trigger_error(':'string $error_msg [, int $error_type = E_USER_NOTICE] | bool',} +let php_builtin['functions']['dom']={'dom_import_simplexml(':'SimpleXMLElement $node | DOMElement',} +let php_builtin['functions']['program_execution']={'escapeshellarg(':'string $arg | string','escapeshellcmd(':'string $command | string','exec(':'string $command [, array &$output [, int &$return_var]] | string','passthru(':'string $command [, int &$return_var] | void','proc_close(':'resource $process | int','proc_get_status(':'resource $process | array','proc_nice(':'int $increment | bool','proc_open(':'string $cmd, array $descriptorspec, array &$pipes [, string $cwd [, array $env [, array $other_options]]] | resource','proc_terminate(':'resource $process [, int $signal = 15] | bool','shell_exec(':'string $cmd | string','system(':'string $command [, int &$return_var] | string',} +let php_builtin['functions']['mail']={'ezmlm_hash(':'string $addr | int','mail(':'string $to, string $subject, string $message [, string $additional_headers [, string $additional_parameters]] | bool',} +let php_builtin['functions']['fastcgi_process_manager']={'fastcgi_finish_request(':'void | boolean',} +let php_builtin['functions']['filter']={'filter_has_var(':'int $type, string $variable_name | bool','filter_id(':'string $filtername | int','filter_input_array(':'int $type [, mixed $definition [, bool $add_empty = true]] | mixed','filter_input(':'int $type, string $variable_name [, int $filter = FILTER_DEFAULT [, mixed $options]] | mixed','filter_list(':'void | array','filter_var_array(':'array $data [, mixed $definition [, bool $add_empty = true]] | mixed','filter_var(':'mixed $variable [, int $filter = FILTER_DEFAULT [, mixed $options]] | mixed',} +let php_builtin['functions']['fileinfo']={'finfo_buffer(':'resource $finfo [, string $string = NULL [, int $options = FILEINFO_NONE [, resource $context = NULL]]] | string','finfo_close(':'resource $finfo | bool','finfo_file(':'resource $finfo [, string $file_name = NULL [, int $options = FILEINFO_NONE [, resource $context = NULL]]] | string','finfo_open(':'[ int $options = FILEINFO_NONE [, string $magic_file = NULL]] | resource','finfo_set_flags(':'resource $finfo, int $options | bool','mime_content_type(':'string $filename | string',} +let php_builtin['functions']['output_control']={'flush(':'void | void','ob_clean(':'void | void','ob_end_clean(':'void | bool','ob_end_flush(':'void | bool','ob_flush(':'void | void','ob_get_clean(':'void | string','ob_get_contents(':'void | string','ob_get_flush(':'void | string','ob_get_length(':'void | int','ob_get_level(':'void | int','ob_get_status(':'[ bool $full_status = FALSE] | array','ob_gzhandler(':'string $buffer, int $mode | string','ob_implicit_flush(':'[ int $flag = true] | void','ob_list_handlers(':'void | array','ob_start(':'[ callable $output_callback = NULL [, int $chunk_size = 0 [, int $flags = PHP_OUTPUT_HANDLER_STDFLAGS]]] | bool','output_add_rewrite_var(':'string $name, string $value | bool','output_reset_rewrite_vars(':'void | bool',} +let php_builtin['functions']['gd']={'gd_info(':'void | array','getimagesize(':'string $filename [, array &$imageinfo] | array','getimagesizefromstring(':'string $imagedata [, array &$imageinfo] | array','image_type_to_extension(':'int $imagetype [, bool $include_dot = TRUE] | string','image_type_to_mime_type(':'int $imagetype | string','image2wbmp(':'resource $image [, string $filename [, int $threshold]] | bool','imageaffine(':'resource $image, array $affine [, array $clip] | resource','imageaffinematrixconcat(':'array $m1, array $m2 | array','imageaffinematrixget(':'int $type [, mixed $options] | array','imagealphablending(':'resource $image, bool $blendmode | bool','imageantialias(':'resource $image, bool $enabled | bool','imagearc(':'resource $image, int $cx, int $cy, int $width, int $height, int $start, int $end, int $color | bool','imagechar(':'resource $image, int $font, int $x, int $y, string $c, int $color | bool','imagecharup(':'resource $image, int $font, int $x, int $y, string $c, int $color | bool','imagecolorallocate(':'resource $image, int $red, int $green, int $blue | int','imagecolorallocatealpha(':'resource $image, int $red, int $green, int $blue, int $alpha | int','imagecolorat(':'resource $image, int $x, int $y | int','imagecolorclosest(':'resource $image, int $red, int $green, int $blue | int','imagecolorclosestalpha(':'resource $image, int $red, int $green, int $blue, int $alpha | int','imagecolorclosesthwb(':'resource $image, int $red, int $green, int $blue | int','imagecolordeallocate(':'resource $image, int $color | bool','imagecolorexact(':'resource $image, int $red, int $green, int $blue | int','imagecolorexactalpha(':'resource $image, int $red, int $green, int $blue, int $alpha | int','imagecolormatch(':'resource $image1, resource $image2 | bool','imagecolorresolve(':'resource $image, int $red, int $green, int $blue | int','imagecolorresolvealpha(':'resource $image, int $red, int $green, int $blue, int $alpha | int','imagecolorset(':'resource $image, int $index, int $red, int $green, int $blue [, int $alpha = 0] | void','imagecolorsforindex(':'resource $image, int $index | array','imagecolorstotal(':'resource $image | int','imagecolortransparent(':'resource $image [, int $color] | int','imageconvolution(':'resource $image, array $matrix, float $div, float $offset | bool','imagecopy(':'resource $dst_im, resource $src_im, int $dst_x, int $dst_y, int $src_x, int $src_y, int $src_w, int $src_h | bool','imagecopymerge(':'resource $dst_im, resource $src_im, int $dst_x, int $dst_y, int $src_x, int $src_y, int $src_w, int $src_h, int $pct | bool','imagecopymergegray(':'resource $dst_im, resource $src_im, int $dst_x, int $dst_y, int $src_x, int $src_y, int $src_w, int $src_h, int $pct | bool','imagecopyresampled(':'resource $dst_image, resource $src_image, int $dst_x, int $dst_y, int $src_x, int $src_y, int $dst_w, int $dst_h, int $src_w, int $src_h | bool','imagecopyresized(':'resource $dst_image, resource $src_image, int $dst_x, int $dst_y, int $src_x, int $src_y, int $dst_w, int $dst_h, int $src_w, int $src_h | bool','imagecreate(':'int $width, int $height | resource','imagecreatefromgd(':'string $filename | resource','imagecreatefromgd2(':'string $filename | resource','imagecreatefromgd2part(':'string $filename, int $srcX, int $srcY, int $width, int $height | resource','imagecreatefromgif(':'string $filename | resource','imagecreatefromjpeg(':'string $filename | resource','imagecreatefrompng(':'string $filename | resource','imagecreatefromstring(':'string $image | resource','imagecreatefromwbmp(':'string $filename | resource','imagecreatefromwebp(':'string $filename | resource','imagecreatefromxbm(':'string $filename | resource','imagecreatefromxpm(':'string $filename | resource','imagecreatetruecolor(':'int $width, int $height | resource','imagecrop(':'resource $image, array $rect | resource','imagecropauto(':'resource $image [, int $mode = -1 [, float $threshold = .5 [, int $color = -1]]] | resource','imagedashedline(':'resource $image, int $x1, int $y1, int $x2, int $y2, int $color | bool','imagedestroy(':'resource $image | bool','imageellipse(':'resource $image, int $cx, int $cy, int $width, int $height, int $color | bool','imagefill(':'resource $image, int $x, int $y, int $color | bool','imagefilledarc(':'resource $image, int $cx, int $cy, int $width, int $height, int $start, int $end, int $color, int $style | bool','imagefilledellipse(':'resource $image, int $cx, int $cy, int $width, int $height, int $color | bool','imagefilledpolygon(':'resource $image, array $points, int $num_points, int $color | bool','imagefilledrectangle(':'resource $image, int $x1, int $y1, int $x2, int $y2, int $color | bool','imagefilltoborder(':'resource $image, int $x, int $y, int $border, int $color | bool','imagefilter(':'resource $image, int $filtertype [, int $arg1 [, int $arg2 [, int $arg3 [, int $arg4]]]] | bool','imageflip(':'resource $image, int $mode | bool','imagefontheight(':'int $font | int','imagefontwidth(':'int $font | int','imageftbbox(':'float $size, float $angle, string $fontfile, string $text [, array $extrainfo] | array','imagefttext(':'resource $image, float $size, float $angle, int $x, int $y, int $color, string $fontfile, string $text [, array $extrainfo] | array','imagegammacorrect(':'resource $image, float $inputgamma, float $outputgamma | bool','imagegd(':'resource $image [, string $filename] | bool','imagegd2(':'resource $image [, string $filename [, int $chunk_size [, int $type = IMG_GD2_RAW]]] | bool','imagegif(':'resource $image [, string $filename] | bool','imagegrabscreen(':'void | resource','imagegrabwindow(':'int $window_handle [, int $client_area = 0] | resource','imageinterlace(':'resource $image [, int $interlace = 0] | int','imageistruecolor(':'resource $image | bool','imagejpeg(':'resource $image [, string $filename [, int $quality]] | bool','imagelayereffect(':'resource $image, int $effect | bool','imageline(':'resource $image, int $x1, int $y1, int $x2, int $y2, int $color | bool','imageloadfont(':'string $file | int','imagepalettecopy(':'resource $destination, resource $source | void','imagepalettetotruecolor(':'resource $src | bool','imagepng(':'resource $image [, string $filename [, int $quality [, int $filters]]] | bool','imagepolygon(':'resource $image, array $points, int $num_points, int $color | bool','imagepsbbox(':'string $text, resource $font, int $size | array','imagepsencodefont(':'resource $font_index, string $encodingfile | bool','imagepsextendfont(':'resource $font_index, float $extend | bool','imagepsfreefont(':'resource $font_index | bool','imagepsloadfont(':'string $filename | resource','imagepsslantfont(':'resource $font_index, float $slant | bool','imagepstext(':'resource $image, string $text, resource $font_index, int $size, int $foreground, int $background, int $x, int $y [, int $space = 0 [, int $tightness = 0 [, float $angle = 0.0 [, int $antialias_steps = 4]]]] | array','imagerectangle(':'resource $image, int $x1, int $y1, int $x2, int $y2, int $color | bool','imagerotate(':'resource $image, float $angle, int $bgd_color [, int $ignore_transparent = 0] | resource','imagesavealpha(':'resource $image, bool $saveflag | bool','imagescale(':'resource $image, int $new_width [, int $new_height = -1 [, int $mode = IMG_BILINEAR_FIXED]] | resource','imagesetbrush(':'resource $image, resource $brush | bool','imagesetinterpolation(':'resource $image [, int $method = IMG_BILINEAR_FIXED] | bool','imagesetpixel(':'resource $image, int $x, int $y, int $color | bool','imagesetstyle(':'resource $image, array $style | bool','imagesetthickness(':'resource $image, int $thickness | bool','imagesettile(':'resource $image, resource $tile | bool','imagestring(':'resource $image, int $font, int $x, int $y, string $string, int $color | bool','imagestringup(':'resource $image, int $font, int $x, int $y, string $string, int $color | bool','imagesx(':'resource $image | int','imagesy(':'resource $image | int','imagetruecolortopalette(':'resource $image, bool $dither, int $ncolors | bool','imagettfbbox(':'float $size, float $angle, string $fontfile, string $text | array','imagettftext(':'resource $image, float $size, float $angle, int $x, int $y, int $color, string $fontfile, string $text | array','imagetypes(':'void | int','imagewbmp(':'resource $image [, string $filename [, int $foreground]] | bool','imagewebp(':'resource $image, string $filename | bool','imagexbm(':'resource $image, string $filename [, int $foreground] | bool','iptcembed(':'string $iptcdata, string $jpeg_file_name [, int $spool] | mixed','iptcparse(':'string $iptcblock | array','jpeg2wbmp(':'string $jpegname, string $wbmpname, int $dest_height, int $dest_width, int $threshold | bool','png2wbmp(':'string $pngname, string $wbmpname, int $dest_height, int $dest_width, int $threshold | bool',} +let php_builtin['functions']['iconv']={'iconv_get_encoding(':'[ string $type = "all"] | mixed','iconv_mime_decode_headers(':'string $encoded_headers [, int $mode = 0 [, string $charset = ini_get("iconv.internal_encoding")]] | array','iconv_mime_decode(':'string $encoded_header [, int $mode = 0 [, string $charset = ini_get("iconv.internal_encoding")]] | string','iconv_mime_encode(':'string $field_name, string $field_value [, array $preferences = NULL] | string','iconv_set_encoding(':'string $type, string $charset | bool','iconv_strlen(':'string $str [, string $charset = ini_get("iconv.internal_encoding")] | int','iconv_strpos(':'string $haystack, string $needle [, int $offset = 0 [, string $charset = ini_get("iconv.internal_encoding")]] | int','iconv_strrpos(':'string $haystack, string $needle [, string $charset = ini_get("iconv.internal_encoding")] | int','iconv_substr(':'string $str, int $offset [, int $length = iconv_strlen($str, $charset) [, string $charset = ini_get("iconv.internal_encoding")]] | string','iconv(':'string $in_charset, string $out_charset, string $str | string','ob_iconv_handler(':'string $contents, int $status | string',} +let php_builtin['functions']['json']={'json_decode(':'string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0]]] | mixed','json_encode(':'mixed $value [, int $options = 0 [, int $depth = 512]] | string','json_last_error_msg(':'void | string','json_last_error(':'void | int',} +let php_builtin['functions']['libxml']={'libxml_clear_errors(':'void | void','libxml_disable_entity_loader(':'[ bool $disable = true] | bool','libxml_get_errors(':'void | array','libxml_get_last_error(':'void | LibXMLError','libxml_set_external_entity_loader(':'callable $resolver_function | void','libxml_set_streams_context(':'resource $streams_context | void','libxml_use_internal_errors(':'[ bool $use_errors = false] | bool',} +let php_builtin['functions']['multibyte_string']={'mb_check_encoding(':'[ string $var = NULL [, string $encoding = mb_internal_encoding()]] | bool','mb_convert_case(':'string $str, int $mode [, string $encoding = mb_internal_encoding()] | string','mb_convert_encoding(':'string $str, string $to_encoding [, mixed $from_encoding = mb_internal_encoding()] | string','mb_convert_kana(':'string $str [, string $option = "KV" [, string $encoding = mb_internal_encoding()]] | string','mb_convert_variables(':'string $to_encoding, mixed $from_encoding, mixed &$vars [, mixed &$...] | string','mb_decode_mimeheader(':'string $str | string','mb_decode_numericentity(':'string $str, array $convmap [, string $encoding = mb_internal_encoding()] | string','mb_detect_encoding(':'string $str [, mixed $encoding_list = mb_detect_order() [, bool $strict = false]] | string','mb_detect_order(':'[ mixed $encoding_list = mb_detect_order()] | mixed','mb_encode_mimeheader(':'string $str [, string $charset = mb_internal_encoding() [, string $transfer_encoding = "B" [, string $linefeed = "\r\n" [, int $indent = 0]]]] | string','mb_encode_numericentity(':'string $str, array $convmap [, string $encoding = mb_internal_encoding() [, bool $is_hex = FALSE]] | string','mb_encoding_aliases(':'string $encoding | array','mb_ereg_match(':'string $pattern, string $string [, string $option = "msr"] | bool','mb_ereg_replace_callback(':'string $pattern, callable $callback, string $string [, string $option = "msr"] | string','mb_ereg_replace(':'string $pattern, string $replacement, string $string [, string $option = "msr"] | string','mb_ereg_search_getpos(':'void | int','mb_ereg_search_getregs(':'void | array','mb_ereg_search_init(':'string $string [, string $pattern [, string $option = "msr"]] | bool','mb_ereg_search_pos(':'[ string $pattern [, string $option = "ms"]] | array','mb_ereg_search_regs(':'[ string $pattern [, string $option = "ms"]] | array','mb_ereg_search_setpos(':'int $position | bool','mb_ereg_search(':'[ string $pattern [, string $option = "ms"]] | bool','mb_ereg(':'string $pattern, string $string [, array $regs] | int','mb_eregi_replace(':'string $pattern, string $replace, string $string [, string $option = "msri"] | string','mb_eregi(':'string $pattern, string $string [, array $regs] | int','mb_get_info(':'[ string $type = "all"] | mixed','mb_http_input(':'[ string $type = ""] | mixed','mb_http_output(':'[ string $encoding = mb_http_output()] | mixed','mb_internal_encoding(':'[ string $encoding = mb_internal_encoding()] | mixed','mb_language(':'[ string $language = mb_language()] | mixed','mb_list_encodings(':'void | array','mb_output_handler(':'string $contents, int $status | string','mb_parse_str(':'string $encoded_string [, array &$result] | bool','mb_preferred_mime_name(':'string $encoding | string','mb_regex_encoding(':'[ string $encoding = mb_regex_encoding()] | mixed','mb_regex_set_options(':'[ string $options = mb_regex_set_options()] | string','mb_send_mail(':'string $to, string $subject, string $message [, string $additional_headers = NULL [, string $additional_parameter = NULL]] | bool','mb_split(':'string $pattern, string $string [, int $limit = -1] | array','mb_strcut(':'string $str, int $start [, int $length = NULL [, string $encoding = mb_internal_encoding()]] | string','mb_strimwidth(':'string $str, int $start, int $width [, string $trimmarker = "" [, string $encoding = mb_internal_encoding()]] | string','mb_stripos(':'string $haystack, string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding()]] | int','mb_stristr(':'string $haystack, string $needle [, bool $before_needle = false [, string $encoding = mb_internal_encoding()]] | string','mb_strlen(':'string $str [, string $encoding = mb_internal_encoding()] | mixed','mb_strpos(':'string $haystack, string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding()]] | int','mb_strrchr(':'string $haystack, string $needle [, bool $part = false [, string $encoding = mb_internal_encoding()]] | string','mb_strrichr(':'string $haystack, string $needle [, bool $part = false [, string $encoding = mb_internal_encoding()]] | string','mb_strripos(':'string $haystack, string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding()]] | int','mb_strrpos(':'string $haystack, string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding()]] | int','mb_strstr(':'string $haystack, string $needle [, bool $before_needle = false [, string $encoding = mb_internal_encoding()]] | string','mb_strtolower(':'string $str [, string $encoding = mb_internal_encoding()] | string','mb_strtoupper(':'string $str [, string $encoding = mb_internal_encoding()] | string','mb_strwidth(':'string $str [, string $encoding = mb_internal_encoding()] | int','mb_substitute_character(':'[ mixed $substrchar = mb_substitute_character()] | mixed','mb_substr_count(':'string $haystack, string $needle [, string $encoding = mb_internal_encoding()] | int','mb_substr(':'string $str, int $start [, int $length = NULL [, string $encoding = mb_internal_encoding()]] | string',} +let php_builtin['functions']['mssql']={'mssql_bind(':'resource $stmt, string $param_name, mixed &$var, int $type [, bool $is_output = false [, bool $is_null = false [, int $maxlen = -1]]] | bool','mssql_close(':'[ resource $link_identifier] | bool','mssql_connect(':'[ string $servername [, string $username [, string $password [, bool $new_link = false]]]] | resource','mssql_data_seek(':'resource $result_identifier, int $row_number | bool','mssql_execute(':'resource $stmt [, bool $skip_results = false] | mixed','mssql_fetch_array(':'resource $result [, int $result_type = MSSQL_BOTH] | array','mssql_fetch_assoc(':'resource $result_id | array','mssql_fetch_batch(':'resource $result | int','mssql_fetch_field(':'resource $result [, int $field_offset = -1] | object','mssql_fetch_object(':'resource $result | object','mssql_fetch_row(':'resource $result | array','mssql_field_length(':'resource $result [, int $offset = -1] | int','mssql_field_name(':'resource $result [, int $offset = -1] | string','mssql_field_seek(':'resource $result, int $field_offset | bool','mssql_field_type(':'resource $result [, int $offset = -1] | string','mssql_free_result(':'resource $result | bool','mssql_free_statement(':'resource $stmt | bool','mssql_get_last_message(':'void | string','mssql_guid_string(':'string $binary [, bool $short_format = false] | string','mssql_init(':'string $sp_name [, resource $link_identifier] | resource','mssql_min_error_severity(':'int $severity | void','mssql_min_message_severity(':'int $severity | void','mssql_next_result(':'resource $result_id | bool','mssql_num_fields(':'resource $result | int','mssql_num_rows(':'resource $result | int','mssql_pconnect(':'[ string $servername [, string $username [, string $password [, bool $new_link = false]]]] | resource','mssql_query(':'string $query [, resource $link_identifier [, int $batch_size = 0]] | mixed','mssql_result(':'resource $result, int $row, mixed $field | string','mssql_rows_affected(':'resource $link_identifier | int','mssql_select_db(':'string $database_name [, resource $link_identifier] | bool',} +let php_builtin['functions']['mysql']={'mysql_affected_rows(':'[ resource $link_identifier = NULL] | int','mysql_client_encoding(':'[ resource $link_identifier = NULL] | string','mysql_close(':'[ resource $link_identifier = NULL] | bool','mysql_connect(':'[ string $server = ini_get("mysql.default_host") [, string $username = ini_get("mysql.default_user") [, string $password = ini_get("mysql.default_password") [, bool $new_link = false [, int $client_flags = 0]]]]] | resource','mysql_create_db(':'string $database_name [, resource $link_identifier = NULL] | bool','mysql_data_seek(':'resource $result, int $row_number | bool','mysql_db_name(':'resource $result, int $row [, mixed $field = NULL] | string','mysql_db_query(':'string $database, string $query [, resource $link_identifier = NULL] | resource','mysql_drop_db(':'string $database_name [, resource $link_identifier = NULL] | bool','mysql_errno(':'[ resource $link_identifier = NULL] | int','mysql_error(':'[ resource $link_identifier = NULL] | string','mysql_escape_string(':'string $unescaped_string | string','mysql_fetch_array(':'resource $result [, int $result_type = MYSQL_BOTH] | array','mysql_fetch_assoc(':'resource $result | array','mysql_fetch_field(':'resource $result [, int $field_offset = 0] | object','mysql_fetch_lengths(':'resource $result | array','mysql_fetch_object(':'resource $result [, string $class_name [, array $params]] | object','mysql_fetch_row(':'resource $result | array','mysql_field_flags(':'resource $result, int $field_offset | string','mysql_field_len(':'resource $result, int $field_offset | int','mysql_field_name(':'resource $result, int $field_offset | string','mysql_field_seek(':'resource $result, int $field_offset | bool','mysql_field_table(':'resource $result, int $field_offset | string','mysql_field_type(':'resource $result, int $field_offset | string','mysql_free_result(':'resource $result | bool','mysql_get_client_info(':'void | string','mysql_get_host_info(':'[ resource $link_identifier = NULL] | string','mysql_get_proto_info(':'[ resource $link_identifier = NULL] | int','mysql_get_server_info(':'[ resource $link_identifier = NULL] | string','mysql_info(':'[ resource $link_identifier = NULL] | string','mysql_insert_id(':'[ resource $link_identifier = NULL] | int','mysql_list_dbs(':'[ resource $link_identifier = NULL] | resource','mysql_list_fields(':'string $database_name, string $table_name [, resource $link_identifier = NULL] | resource','mysql_list_processes(':'[ resource $link_identifier = NULL] | resource','mysql_list_tables(':'string $database [, resource $link_identifier = NULL] | resource','mysql_num_fields(':'resource $result | int','mysql_num_rows(':'resource $result | int','mysql_pconnect(':'[ string $server = ini_get("mysql.default_host") [, string $username = ini_get("mysql.default_user") [, string $password = ini_get("mysql.default_password") [, int $client_flags = 0]]]] | resource','mysql_ping(':'[ resource $link_identifier = NULL] | bool','mysql_query(':'string $query [, resource $link_identifier = NULL] | mixed','mysql_real_escape_string(':'string $unescaped_string [, resource $link_identifier = NULL] | string','mysql_result(':'resource $result, int $row [, mixed $field = 0] | string','mysql_select_db(':'string $database_name [, resource $link_identifier = NULL] | bool','mysql_set_charset(':'string $charset [, resource $link_identifier = NULL] | bool','mysql_stat(':'[ resource $link_identifier = NULL] | string','mysql_tablename(':'resource $result, int $i | string','mysql_thread_id(':'[ resource $link_identifier = NULL] | int','mysql_unbuffered_query(':'string $query [, resource $link_identifier = NULL] | resource',} +let php_builtin['functions']['mysqli']={'mysqli_disable_reads_from_master(':'mysqli $link | bool','mysqli_disable_rpl_parse(':'mysqli $link | bool','mysqli_enable_reads_from_master(':'mysqli $link | bool','mysqli_enable_rpl_parse(':'mysqli $link | bool','mysqli_get_cache_stats(':'void | array','mysqli_master_query(':'mysqli $link, string $query | bool','mysqli_rpl_parse_enabled(':'mysqli $link | int','mysqli_rpl_probe(':'mysqli $link | bool','mysqli_slave_query(':'mysqli $link, string $query | bool',} +let php_builtin['functions']['password_hashing']={'password_get_info(':'string $hash | array','password_hash(':'string $password, integer $algo [, array $options] | string','password_needs_rehash(':'string $hash, string $algo [, string $options] | boolean','password_verify(':'string $password, string $hash | boolean',} +let php_builtin['functions']['postgresql']={'pg_affected_rows(':'resource $result | int','pg_cancel_query(':'resource $connection | bool','pg_client_encoding(':'[ resource $connection] | string','pg_close(':'[ resource $connection] | bool','pg_connect(':'string $connection_string [, int $connect_type] | resource','pg_connection_busy(':'resource $connection | bool','pg_connection_reset(':'resource $connection | bool','pg_connection_status(':'resource $connection | int','pg_convert(':'resource $connection, string $table_name, array $assoc_array [, int $options = 0] | array','pg_copy_from(':'resource $connection, string $table_name, array $rows [, string $delimiter [, string $null_as]] | bool','pg_copy_to(':'resource $connection, string $table_name [, string $delimiter [, string $null_as]] | array','pg_dbname(':'[ resource $connection] | string','pg_delete(':'resource $connection, string $table_name, array $assoc_array [, int $options = PGSQL_DML_EXEC] | mixed','pg_end_copy(':'[ resource $connection] | bool','pg_escape_bytea(':'[ resource $connection [, string $data]] | string','pg_escape_identifier(':'[ resource $connection [, string $data]] | string','pg_escape_literal(':'[ resource $connection [, string $data]] | string','pg_escape_string(':'[ resource $connection [, string $data]] | string','pg_execute(':'[ resource $connection [, string $stmtname [, array $params]]] | resource','pg_fetch_all_columns(':'resource $result [, int $column = 0] | array','pg_fetch_all(':'resource $result | array','pg_fetch_array(':'resource $result [, int $row [, int $result_type = PGSQL_BOTH]] | array','pg_fetch_assoc(':'resource $result [, int $row] | array','pg_fetch_object(':'resource $result [, int $row [, int $result_type = PGSQL_ASSOC]] | object','pg_fetch_result(':'resource $result, int $row, mixed $field | string','pg_fetch_row(':'resource $result [, int $row] | array','pg_field_is_null(':'resource $result, int $row, mixed $field | int','pg_field_name(':'resource $result, int $field_number | string','pg_field_num(':'resource $result, string $field_name | int','pg_field_prtlen(':'resource $result, int $row_number, mixed $field_name_or_number | int','pg_field_size(':'resource $result, int $field_number | int','pg_field_table(':'resource $result, int $field_number [, bool $oid_only = false] | mixed','pg_field_type_oid(':'resource $result, int $field_number | int','pg_field_type(':'resource $result, int $field_number | string','pg_free_result(':'resource $result | bool','pg_get_notify(':'resource $connection [, int $result_type] | array','pg_get_pid(':'resource $connection | int','pg_get_result(':'[ resource $connection] | resource','pg_host(':'[ resource $connection] | string','pg_insert(':'resource $connection, string $table_name, array $assoc_array [, int $options = PGSQL_DML_EXEC] | mixed','pg_last_error(':'[ resource $connection] | string','pg_last_notice(':'resource $connection | string','pg_last_oid(':'resource $result | string','pg_lo_close(':'resource $large_object | bool','pg_lo_create(':'[ resource $connection [, mixed $object_id]] | int','pg_lo_export(':'[ resource $connection [, int $oid [, string $pathname]]] | bool','pg_lo_import(':'[ resource $connection [, string $pathname [, mixed $object_id]]] | int','pg_lo_open(':'resource $connection, int $oid, string $mode | resource','pg_lo_read_all(':'resource $large_object | int','pg_lo_read(':'resource $large_object [, int $len = 8192] | string','pg_lo_seek(':'resource $large_object, int $offset [, int $whence = PGSQL_SEEK_CUR] | bool','pg_lo_tell(':'resource $large_object | int','pg_lo_truncate(':'resource $large_object, int $size | bool','pg_lo_unlink(':'resource $connection, int $oid | bool','pg_lo_write(':'resource $large_object, string $data [, int $len] | int','pg_meta_data(':'resource $connection, string $table_name [, bool $extended] | array','pg_num_fields(':'resource $result | int','pg_num_rows(':'resource $result | int','pg_options(':'[ resource $connection] | string','pg_parameter_status(':'[ resource $connection [, string $param_name]] | string','pg_pconnect(':'string $connection_string [, int $connect_type] | resource','pg_ping(':'[ resource $connection] | bool','pg_port(':'[ resource $connection] | int','pg_prepare(':'[ resource $connection [, string $stmtname [, string $query]]] | resource','pg_put_line(':'[ resource $connection [, string $data]] | bool','pg_query_params(':'[ resource $connection [, string $query [, array $params]]] | resource','pg_query(':'[ resource $connection [, string $query]] | resource','pg_result_error_field(':'resource $result, int $fieldcode | string','pg_result_error(':'resource $result | string','pg_result_seek(':'resource $result, int $offset | bool','pg_result_status(':'resource $result [, int $type = PGSQL_STATUS_LONG] | mixed','pg_select(':'resource $connection, string $table_name, array $assoc_array [, int $options = PGSQL_DML_EXEC] | mixed','pg_send_execute(':'resource $connection, string $stmtname, array $params | bool','pg_send_prepare(':'resource $connection, string $stmtname, string $query | bool','pg_send_query_params(':'resource $connection, string $query, array $params | bool','pg_send_query(':'resource $connection, string $query | bool','pg_set_client_encoding(':'[ resource $connection [, string $encoding]] | int','pg_set_error_verbosity(':'[ resource $connection [, int $verbosity]] | int','pg_trace(':'string $pathname [, string $mode = "w" [, resource $connection]] | bool','pg_transaction_status(':'resource $connection | int','pg_tty(':'[ resource $connection] | string','pg_unescape_bytea(':'string $data | string','pg_untrace(':'[ resource $connection] | bool','pg_update(':'resource $connection, string $table_name, array $data, array $condition [, int $options = PGSQL_DML_EXEC] | mixed','pg_version(':'[ resource $connection] | array',} +let php_builtin['functions']['pcre']={'preg_filter(':'mixed $pattern, mixed $replacement, mixed $subject [, int $limit = -1 [, int &$count]] | mixed','preg_grep(':'string $pattern, array $input [, int $flags = 0] | array','preg_last_error(':'void | int','preg_match_all(':'string $pattern, string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0]]] | int','preg_match(':'string $pattern, string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0]]] | int','preg_quote(':'string $str [, string $delimiter = NULL] | string','preg_replace_callback(':'mixed $pattern, callable $callback, mixed $subject [, int $limit = -1 [, int &$count]] | mixed','preg_replace(':'mixed $pattern, mixed $replacement, mixed $subject [, int $limit = -1 [, int &$count]] | mixed','preg_split(':'string $pattern, string $subject [, int $limit = -1 [, int $flags = 0]] | array',} +let php_builtin['functions']['sessions']={'session_cache_expire(':'[ string $new_cache_expire] | int','session_cache_limiter(':'[ string $cache_limiter] | string','session_commit(':'session_commit — Alias of session_write_close()','session_decode(':'string $data | bool','session_destroy(':'void | bool','session_encode(':'void | string','session_get_cookie_params(':'void | array','session_id(':'[ string $id] | string','session_is_registered(':'string $name | bool','session_module_name(':'[ string $module] | string','session_name(':'[ string $name] | string','session_regenerate_id(':'[ bool $delete_old_session = false] | bool','session_register_shutdown(':'void | void','session_register(':'mixed $name [, mixed $...] | bool','session_save_path(':'[ string $path] | string','session_set_cookie_params(':'int $lifetime [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false]]]] | void','session_set_save_handler(':'callable $open, callable $close, callable $read, callable $write, callable $destroy, callable $gc | bool','session_start(':'void | bool','session_status(':'void | int','session_unregister(':'string $name | bool','session_unset(':'void | void','session_write_close(':'void | void',} +let php_builtin['functions']['streams']={'set_socket_blocking(':'set_socket_blocking — Alias of stream_set_blocking()','stream_bucket_append(':'resource $brigade, resource $bucket | void','stream_bucket_make_writeable(':'resource $brigade | object','stream_bucket_new(':'resource $stream, string $buffer | object','stream_bucket_prepend(':'resource $brigade, resource $bucket | void','stream_context_create(':'[ array $options [, array $params]] | resource','stream_context_get_default(':'[ array $options] | resource','stream_context_get_options(':'resource $stream_or_context | array','stream_context_get_params(':'resource $stream_or_context | array','stream_context_set_default(':'array $options | resource','stream_context_set_option(':'resource $stream_or_context, string $wrapper, string $option, mixed $value | bool','stream_context_set_params(':'resource $stream_or_context, array $params | bool','stream_copy_to_stream(':'resource $source, resource $dest [, int $maxlength = -1 [, int $offset = 0]] | int','stream_encoding(':'resource $stream [, string $encoding] | bool','stream_filter_append(':'resource $stream, string $filtername [, int $read_write [, mixed $params]] | resource','stream_filter_prepend(':'resource $stream, string $filtername [, int $read_write [, mixed $params]] | resource','stream_filter_register(':'string $filtername, string $classname | bool','stream_filter_remove(':'resource $stream_filter | bool','stream_get_contents(':'resource $handle [, int $maxlength = -1 [, int $offset = -1]] | string','stream_get_filters(':'void | array','stream_get_line(':'resource $handle, int $length [, string $ending] | string','stream_get_meta_data(':'resource $stream | array','stream_get_transports(':'void | array','stream_get_wrappers(':'void | array','stream_is_local(':'mixed $stream_or_url | bool','stream_notification_callback(':'int $notification_code, int $severity, string $message, int $message_code, int $bytes_transferred, int $bytes_max | void','stream_resolve_include_path(':'string $filename | string','stream_select(':'array &$read, array &$write, array &$except, int $tv_sec [, int $tv_usec = 0] | int','stream_set_blocking(':'resource $stream, int $mode | bool','stream_set_chunk_size(':'resource $fp, int $chunk_size | int','stream_set_read_buffer(':'resource $stream, int $buffer | int','stream_set_timeout(':'resource $stream, int $seconds [, int $microseconds = 0] | bool','stream_set_write_buffer(':'resource $stream, int $buffer | int','stream_socket_accept(':'resource $server_socket [, float $timeout = ini_get("default_socket_timeout") [, string &$peername]] | resource','stream_socket_client(':'string $remote_socket [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") [, int $flags = STREAM_CLIENT_CONNECT [, resource $context]]]]] | resource','stream_socket_enable_crypto(':'resource $stream, bool $enable [, int $crypto_type [, resource $session_stream]] | mixed','stream_socket_get_name(':'resource $handle, bool $want_peer | string','stream_socket_pair(':'int $domain, int $type, int $protocol | array','stream_socket_recvfrom(':'resource $socket, int $length [, int $flags = 0 [, string &$address]] | string','stream_socket_sendto(':'resource $socket, string $data [, int $flags = 0 [, string $address]] | int','stream_socket_server(':'string $local_socket [, int &$errno [, string &$errstr [, int $flags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN [, resource $context]]]] | resource','stream_socket_shutdown(':'resource $stream, int $how | bool','stream_supports_lock(':'resource $stream | bool','stream_wrapper_register(':'string $protocol, string $classname [, int $flags = 0] | bool','stream_wrapper_restore(':'string $protocol | bool','stream_wrapper_unregister(':'string $protocol | bool',} +let php_builtin['functions']['simplexml']={'simplexml_import_dom(':'DOMNode $node [, string $class_name = "SimpleXMLElement"] | SimpleXMLElement','simplexml_load_file(':'string $filename [, string $class_name = "SimpleXMLElement" [, int $options = 0 [, string $ns = "" [, bool $is_prefix = false]]]] | SimpleXMLElement','simplexml_load_string(':'string $data [, string $class_name = "SimpleXMLElement" [, int $options = 0 [, string $ns = "" [, bool $is_prefix = false]]]] | SimpleXMLElement',} +let php_builtin['functions']['xmlwriter']={'xmlwriter_end_attribute(':'resource $xmlwriter | bool','xmlwriter_end_cdata(':'resource $xmlwriter | bool','xmlwriter_end_comment(':'resource $xmlwriter | bool','xmlwriter_end_document(':'resource $xmlwriter | bool','xmlwriter_end_dtd_attlist(':'resource $xmlwriter | bool','xmlwriter_end_dtd_element(':'resource $xmlwriter | bool','xmlwriter_end_dtd_entity(':'resource $xmlwriter | bool','xmlwriter_end_dtd(':'resource $xmlwriter | bool','xmlwriter_end_element(':'resource $xmlwriter | bool','xmlwriter_end_pi(':'resource $xmlwriter | bool','xmlwriter_flush(':'resource $xmlwriter [, bool $empty = true] | mixed','xmlwriter_full_end_element(':'resource $xmlwriter | bool','xmlwriter_open_memory(':'void | resource','xmlwriter_open_uri(':'string $uri | resource','xmlwriter_output_memory(':'resource $xmlwriter [, bool $flush = true] | string','xmlwriter_set_indent_string(':'resource $xmlwriter, string $indentString | bool','xmlwriter_set_indent(':'resource $xmlwriter, bool $indent | bool','xmlwriter_start_attribute_ns(':'resource $xmlwriter, string $prefix, string $name, string $uri | bool','xmlwriter_start_attribute(':'resource $xmlwriter, string $name | bool','xmlwriter_start_cdata(':'resource $xmlwriter | bool','xmlwriter_start_comment(':'resource $xmlwriter | bool','xmlwriter_start_document(':'resource $xmlwriter [, string $version = 1.0 [, string $encoding = NULL [, string $standalone]]] | bool','xmlwriter_start_dtd_attlist(':'resource $xmlwriter, string $name | bool','xmlwriter_start_dtd_element(':'resource $xmlwriter, string $qualifiedName | bool','xmlwriter_start_dtd_entity(':'resource $xmlwriter, string $name, bool $isparam | bool','xmlwriter_start_dtd(':'resource $xmlwriter, string $qualifiedName [, string $publicId [, string $systemId]] | bool','xmlwriter_start_element_ns(':'resource $xmlwriter, string $prefix, string $name, string $uri | bool','xmlwriter_start_element(':'resource $xmlwriter, string $name | bool','xmlwriter_start_pi(':'resource $xmlwriter, string $target | bool','xmlwriter_text(':'resource $xmlwriter, string $content | bool','xmlwriter_write_attribute_ns(':'resource $xmlwriter, string $prefix, string $name, string $uri, string $content | bool','xmlwriter_write_attribute(':'resource $xmlwriter, string $name, string $value | bool','xmlwriter_write_cdata(':'resource $xmlwriter, string $content | bool','xmlwriter_write_comment(':'resource $xmlwriter, string $content | bool','xmlwriter_write_dtd_attlist(':'resource $xmlwriter, string $name, string $content | bool','xmlwriter_write_dtd_element(':'resource $xmlwriter, string $name, string $content | bool','xmlwriter_write_dtd_entity(':'resource $xmlwriter, string $name, string $content, bool $pe, string $pubid, string $sysid, string $ndataid | bool','xmlwriter_write_dtd(':'resource $xmlwriter, string $name [, string $publicId [, string $systemId [, string $subset]]] | bool','xmlwriter_write_element_ns(':'resource $xmlwriter, string $prefix, string $name, string $uri [, string $content] | bool','xmlwriter_write_element(':'resource $xmlwriter, string $name [, string $content] | bool','xmlwriter_write_pi(':'resource $xmlwriter, string $target, string $content | bool','xmlwriter_write_raw(':'resource $xmlwriter, string $content | bool',} +let php_builtin['functions']['zip']={'zip_close(':'resource $zip | void','zip_entry_close(':'resource $zip_entry | bool','zip_entry_compressedsize(':'resource $zip_entry | int','zip_entry_compressionmethod(':'resource $zip_entry | string','zip_entry_filesize(':'resource $zip_entry | int','zip_entry_name(':'resource $zip_entry | string','zip_entry_open(':'resource $zip, resource $zip_entry [, string $mode] | bool','zip_entry_read(':'resource $zip_entry [, int $length = 1024] | string','zip_open(':'string $filename | resource','zip_read(':'resource $zip | resource',} +let php_builtin['classes']['spl']={'appenditerator':{'name':'AppendIterator','methods':{'__construct':{'signature':'Traversable $iterator','return_type':''},'append':{'signature':'Iterator $iterator | void','return_type':'void'},'current':{'signature':'void | mixed','return_type':'mixed'},'getArrayIterator':{'signature':'void | void','return_type':'void'},'getInnerIterator':{'signature':'void | Traversable','return_type':'Traversable'},'getIteratorIndex':{'signature':'void | int','return_type':'int'},'key':{'signature':'void | scalar','return_type':'scalar'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'arrayiterator':{'name':'ArrayIterator','methods':{'append':{'signature':'mixed $value | void','return_type':'void'},'asort':{'signature':'void | void','return_type':'void'},'__construct':{'signature':'[ mixed $array = array() [, int $flags = 0]]','return_type':''},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'getArrayCopy':{'signature':'void | array','return_type':'array'},'getFlags':{'signature':'void | void','return_type':'void'},'key':{'signature':'void | mixed','return_type':'mixed'},'ksort':{'signature':'void | void','return_type':'void'},'natcasesort':{'signature':'void | void','return_type':'void'},'natsort':{'signature':'void | void','return_type':'void'},'next':{'signature':'void | void','return_type':'void'},'offsetExists':{'signature':'string $index | void','return_type':'void'},'offsetGet':{'signature':'string $index | mixed','return_type':'mixed'},'offsetSet':{'signature':'string $index, string $newval | void','return_type':'void'},'offsetUnset':{'signature':'string $index | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'seek':{'signature':'int $position | void','return_type':'void'},'serialize':{'signature':'void | string','return_type':'string'},'setFlags':{'signature':'string $flags | void','return_type':'void'},'uasort':{'signature':'string $cmp_function | void','return_type':'void'},'uksort':{'signature':'string $cmp_function | void','return_type':'void'},'unserialize':{'signature':'string $serialized | string','return_type':'string'},'valid':{'signature':'void | bool','return_type':'bool'},},},'arrayobject':{'name':'ArrayObject','constants':{'STD_PROP_LIST':'1','ARRAY_AS_PROPS':'2',},'methods':{'__construct':{'signature':'[ mixed $input = [] [, int $flags = 0 [, string $iterator_class = "ArrayIterator"]]]','return_type':''},'append':{'signature':'mixed $value | void','return_type':'void'},'asort':{'signature':'void | void','return_type':'void'},'count':{'signature':'void | int','return_type':'int'},'exchangeArray':{'signature':'mixed $input | array','return_type':'array'},'getArrayCopy':{'signature':'void | array','return_type':'array'},'getFlags':{'signature':'void | int','return_type':'int'},'getIterator':{'signature':'void | ArrayIterator','return_type':'ArrayIterator'},'getIteratorClass':{'signature':'void | string','return_type':'string'},'ksort':{'signature':'void | void','return_type':'void'},'natcasesort':{'signature':'void | void','return_type':'void'},'natsort':{'signature':'void | void','return_type':'void'},'offsetExists':{'signature':'mixed $index | bool','return_type':'bool'},'offsetGet':{'signature':'mixed $index | mixed','return_type':'mixed'},'offsetSet':{'signature':'mixed $index, mixed $newval | void','return_type':'void'},'offsetUnset':{'signature':'mixed $index | void','return_type':'void'},'serialize':{'signature':'void | void','return_type':'void'},'setFlags':{'signature':'int $flags | void','return_type':'void'},'setIteratorClass':{'signature':'string $iterator_class | void','return_type':'void'},'uasort':{'signature':'callable $cmp_function | void','return_type':'void'},'uksort':{'signature':'callable $cmp_function | void','return_type':'void'},'unserialize':{'signature':'string $serialized | void','return_type':'void'},},},'badfunctioncallexception':{'name':'BadFunctionCallException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'badmethodcallexception':{'name':'BadMethodCallException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'cachingiterator':{'name':'CachingIterator','constants':{'CALL_TOSTRING':'1','CATCH_GET_CHILD':'16','TOSTRING_USE_KEY':'2','TOSTRING_USE_CURRENT':'4','TOSTRING_USE_INNER':'8','FULL_CACHE':'256',},'methods':{'__construct':{'signature':'Iterator $iterator [, string $flags = self::CALL_TOSTRING]','return_type':''},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | void','return_type':'void'},'getCache':{'signature':'void | void','return_type':'void'},'getFlags':{'signature':'void | void','return_type':'void'},'getInnerIterator':{'signature':'void | Iterator','return_type':'Iterator'},'hasNext':{'signature':'void | void','return_type':'void'},'key':{'signature':'void | scalar','return_type':'scalar'},'next':{'signature':'void | void','return_type':'void'},'offsetExists':{'signature':'string $index | void','return_type':'void'},'offsetGet':{'signature':'string $index | void','return_type':'void'},'offsetSet':{'signature':'string $index, string $newval | void','return_type':'void'},'offsetUnset':{'signature':'string $index | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'setFlags':{'signature':'bitmask $flags | void','return_type':'void'},'__toString':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | void','return_type':'void'},},},'callbackfilteriterator':{'name':'CallbackFilterIterator','methods':{'__construct':{'signature':'Iterator $iterator','return_type':''},'accept':{'signature':'void | bool','return_type':'bool'},'current':{'signature':'void | mixed','return_type':'mixed'},'getInnerIterator':{'signature':'void | Iterator','return_type':'Iterator'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'directoryiterator':{'name':'DirectoryIterator','methods':{'__construct':{'signature':'string $path','return_type':''},'current':{'signature':'void | DirectoryIterator','return_type':'DirectoryIterator'},'getATime':{'signature':'void | int','return_type':'int'},'getBasename':{'signature':'[ string $suffix] | string','return_type':'string'},'getCTime':{'signature':'void | int','return_type':'int'},'getExtension':{'signature':'void | string','return_type':'string'},'getFilename':{'signature':'void | string','return_type':'string'},'getGroup':{'signature':'void | int','return_type':'int'},'getInode':{'signature':'void | int','return_type':'int'},'getMTime':{'signature':'void | int','return_type':'int'},'getOwner':{'signature':'void | int','return_type':'int'},'getPath':{'signature':'void | string','return_type':'string'},'getPathname':{'signature':'void | string','return_type':'string'},'getPerms':{'signature':'void | int','return_type':'int'},'getSize':{'signature':'void | int','return_type':'int'},'getType':{'signature':'void | string','return_type':'string'},'isDir':{'signature':'void | bool','return_type':'bool'},'isDot':{'signature':'void | bool','return_type':'bool'},'isExecutable':{'signature':'void | bool','return_type':'bool'},'isFile':{'signature':'void | bool','return_type':'bool'},'isLink':{'signature':'void | bool','return_type':'bool'},'isReadable':{'signature':'void | bool','return_type':'bool'},'isWritable':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | string','return_type':'string'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'seek':{'signature':'int $position | void','return_type':'void'},'__toString':{'signature':'void | string','return_type':'string'},'valid':{'signature':'void | bool','return_type':'bool'},},},'domainexception':{'name':'DomainException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'emptyiterator':{'name':'EmptyIterator','methods':{'current':{'signature':'void | void','return_type':'void'},'key':{'signature':'void | void','return_type':'void'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | void','return_type':'void'},},},'filesystemiterator':{'name':'FilesystemIterator','constants':{'CURRENT_AS_PATHNAME':'32','CURRENT_AS_FILEINFO':'0','CURRENT_AS_SELF':'16','CURRENT_MODE_MASK':'240','KEY_AS_PATHNAME':'0','KEY_AS_FILENAME':'256','FOLLOW_SYMLINKS':'512','KEY_MODE_MASK':'3840','NEW_CURRENT_AND_KEY':'256','SKIP_DOTS':'4096','UNIX_PATHS':'8192',},'methods':{'__construct':{'signature':'string $path [, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS]','return_type':''},'current':{'signature':'void | DirectoryIterator','return_type':'DirectoryIterator'},'getFlags':{'signature':'void | int','return_type':'int'},'key':{'signature':'void | string','return_type':'string'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'setFlags':{'signature':'[ int $flags] | void','return_type':'void'},'getATime':{'signature':'void | int','return_type':'int'},'getBasename':{'signature':'[ string $suffix] | string','return_type':'string'},'getCTime':{'signature':'void | int','return_type':'int'},'getExtension':{'signature':'void | string','return_type':'string'},'getFilename':{'signature':'void | string','return_type':'string'},'getGroup':{'signature':'void | int','return_type':'int'},'getInode':{'signature':'void | int','return_type':'int'},'getMTime':{'signature':'void | int','return_type':'int'},'getOwner':{'signature':'void | int','return_type':'int'},'getPath':{'signature':'void | string','return_type':'string'},'getPathname':{'signature':'void | string','return_type':'string'},'getPerms':{'signature':'void | int','return_type':'int'},'getSize':{'signature':'void | int','return_type':'int'},'getType':{'signature':'void | string','return_type':'string'},'isDir':{'signature':'void | bool','return_type':'bool'},'isDot':{'signature':'void | bool','return_type':'bool'},'isExecutable':{'signature':'void | bool','return_type':'bool'},'isFile':{'signature':'void | bool','return_type':'bool'},'isLink':{'signature':'void | bool','return_type':'bool'},'isReadable':{'signature':'void | bool','return_type':'bool'},'isWritable':{'signature':'void | bool','return_type':'bool'},'seek':{'signature':'int $position | void','return_type':'void'},'__toString':{'signature':'void | string','return_type':'string'},'valid':{'signature':'void | bool','return_type':'bool'},},},'filteriterator':{'name':'FilterIterator','methods':{'accept':{'signature':'void | bool','return_type':'bool'},'__construct':{'signature':'Iterator $iterator','return_type':''},'current':{'signature':'void | mixed','return_type':'mixed'},'getInnerIterator':{'signature':'void | Iterator','return_type':'Iterator'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'globiterator':{'name':'GlobIterator','methods':{'__construct':{'signature':'string $path [, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS]','return_type':''},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'getFlags':{'signature':'void | int','return_type':'int'},'key':{'signature':'void | string','return_type':'string'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'setFlags':{'signature':'[ int $flags] | void','return_type':'void'},},},'infiniteiterator':{'name':'InfiniteIterator','methods':{'__construct':{'signature':'Traversable $iterator','return_type':''},'next':{'signature':'void | void','return_type':'void'},'current':{'signature':'void | mixed','return_type':'mixed'},'getInnerIterator':{'signature':'void | Traversable','return_type':'Traversable'},'key':{'signature':'void | scalar','return_type':'scalar'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'invalidargumentexception':{'name':'InvalidArgumentException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'iteratoriterator':{'name':'IteratorIterator','methods':{'__construct':{'signature':'Traversable $iterator','return_type':''},'current':{'signature':'void | mixed','return_type':'mixed'},'getInnerIterator':{'signature':'void | Traversable','return_type':'Traversable'},'key':{'signature':'void | scalar','return_type':'scalar'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'lengthexception':{'name':'LengthException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'limititerator':{'name':'LimitIterator','methods':{'__construct':{'signature':'Iterator $iterator [, int $offset = 0 [, int $count = -1]]','return_type':''},'current':{'signature':'void | mixed','return_type':'mixed'},'getInnerIterator':{'signature':'void | Iterator','return_type':'Iterator'},'getPosition':{'signature':'void | int','return_type':'int'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'seek':{'signature':'int $position | int','return_type':'int'},'valid':{'signature':'void | bool','return_type':'bool'},},},'logicexception':{'name':'LogicException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'multipleiterator':{'name':'MultipleIterator','constants':{'MIT_NEED_ANY':'0','MIT_NEED_ALL':'1','MIT_KEYS_NUMERIC':'0','MIT_KEYS_ASSOC':'2',},'methods':{'__construct':{'signature':'[ int $flags = MultipleIterator::MIT_NEED_ALL|MultipleIterator::MIT_KEYS_NUMERIC]','return_type':''},'attachIterator':{'signature':'Iterator $iterator [, string $infos] | void','return_type':'void'},'containsIterator':{'signature':'Iterator $iterator | void','return_type':'void'},'countIterators':{'signature':'void | void','return_type':'void'},'current':{'signature':'void | array','return_type':'array'},'detachIterator':{'signature':'Iterator $iterator | void','return_type':'void'},'getFlags':{'signature':'void | void','return_type':'void'},'key':{'signature':'void | array','return_type':'array'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'setFlags':{'signature':'int $flags | void','return_type':'void'},'valid':{'signature':'void | void','return_type':'void'},},},'norewinditerator':{'name':'NoRewindIterator','methods':{'__construct':{'signature':'Traversable $iterator','return_type':''},'current':{'signature':'void | mixed','return_type':'mixed'},'getInnerIterator':{'signature':'void | Traversable','return_type':'Traversable'},'key':{'signature':'void | scalar','return_type':'scalar'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'outofboundsexception':{'name':'OutOfBoundsException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'outofrangeexception':{'name':'OutOfRangeException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'overflowexception':{'name':'OverflowException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'parentiterator':{'name':'ParentIterator','methods':{'accept':{'signature':'void | bool','return_type':'bool'},'__construct':{'signature':'RecursiveIterator $iterator','return_type':''},'getChildren':{'signature':'void | ParentIterator','return_type':'ParentIterator'},'hasChildren':{'signature':'void | bool','return_type':'bool'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},},},'rangeexception':{'name':'RangeException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'recursivearrayiterator':{'name':'RecursiveArrayIterator','methods':{'getChildren':{'signature':'void | RecursiveArrayIterator','return_type':'RecursiveArrayIterator'},'hasChildren':{'signature':'void | bool','return_type':'bool'},'append':{'signature':'mixed $value | void','return_type':'void'},'asort':{'signature':'void | void','return_type':'void'},'__construct':{'signature':'[ mixed $array = array() [, int $flags = 0]]','return_type':''},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'getArrayCopy':{'signature':'void | array','return_type':'array'},'getFlags':{'signature':'void | void','return_type':'void'},'key':{'signature':'void | mixed','return_type':'mixed'},'ksort':{'signature':'void | void','return_type':'void'},'natcasesort':{'signature':'void | void','return_type':'void'},'natsort':{'signature':'void | void','return_type':'void'},'next':{'signature':'void | void','return_type':'void'},'offsetExists':{'signature':'string $index | void','return_type':'void'},'offsetGet':{'signature':'string $index | mixed','return_type':'mixed'},'offsetSet':{'signature':'string $index, string $newval | void','return_type':'void'},'offsetUnset':{'signature':'string $index | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'seek':{'signature':'int $position | void','return_type':'void'},'serialize':{'signature':'void | string','return_type':'string'},'setFlags':{'signature':'string $flags | void','return_type':'void'},'uasort':{'signature':'string $cmp_function | void','return_type':'void'},'uksort':{'signature':'string $cmp_function | void','return_type':'void'},'unserialize':{'signature':'string $serialized | string','return_type':'string'},'valid':{'signature':'void | bool','return_type':'bool'},},},'recursivecachingiterator':{'name':'RecursiveCachingIterator','methods':{'__construct':{'signature':'Iterator $iterator [, string $flags = self::CALL_TOSTRING]','return_type':''},'getChildren':{'signature':'void | RecursiveCachingIterator','return_type':'RecursiveCachingIterator'},'hasChildren':{'signature':'void | bool','return_type':'bool'},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | void','return_type':'void'},'getCache':{'signature':'void | void','return_type':'void'},'getFlags':{'signature':'void | void','return_type':'void'},'getInnerIterator':{'signature':'void | Iterator','return_type':'Iterator'},'hasNext':{'signature':'void | void','return_type':'void'},'key':{'signature':'void | scalar','return_type':'scalar'},'next':{'signature':'void | void','return_type':'void'},'offsetExists':{'signature':'string $index | void','return_type':'void'},'offsetGet':{'signature':'string $index | void','return_type':'void'},'offsetSet':{'signature':'string $index, string $newval | void','return_type':'void'},'offsetUnset':{'signature':'string $index | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'setFlags':{'signature':'bitmask $flags | void','return_type':'void'},'__toString':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | void','return_type':'void'},},},'recursivecallbackfilteriterator':{'name':'RecursiveCallbackFilterIterator','methods':{'__construct':{'signature':'RecursiveIterator $iterator, string $callback','return_type':''},'getChildren':{'signature':'void | RecursiveCallbackFilterIterator','return_type':'RecursiveCallbackFilterIterator'},'hasChildren':{'signature':'void | void','return_type':'void'},'accept':{'signature':'void | string','return_type':'string'},},},'recursivedirectoryiterator':{'name':'RecursiveDirectoryIterator','methods':{'__construct':{'signature':'string $path [, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS]','return_type':''},'getChildren':{'signature':'void | mixed','return_type':'mixed'},'getSubPath':{'signature':'void | string','return_type':'string'},'getSubPathname':{'signature':'void | string','return_type':'string'},'hasChildren':{'signature':'[ bool $allow_links = false] | bool','return_type':'bool'},'key':{'signature':'void | string','return_type':'string'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'current':{'signature':'void | mixed','return_type':'mixed'},'getFlags':{'signature':'void | int','return_type':'int'},'setFlags':{'signature':'[ int $flags] | void','return_type':'void'},},},'recursivefilteriterator':{'name':'RecursiveFilterIterator','methods':{'__construct':{'signature':'Iterator $iterator','return_type':''},'getChildren':{'signature':'void | void','return_type':'void'},'hasChildren':{'signature':'void | void','return_type':'void'},'accept':{'signature':'void | bool','return_type':'bool'},'current':{'signature':'void | mixed','return_type':'mixed'},'getInnerIterator':{'signature':'void | Iterator','return_type':'Iterator'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'recursiveiteratoriterator':{'name':'RecursiveIteratorIterator','constants':{'LEAVES_ONLY':'0','SELF_FIRST':'1','CHILD_FIRST':'2','CATCH_GET_CHILD':'16',},'methods':{'beginChildren':{'signature':'void | void','return_type':'void'},'beginIteration':{'signature':'void | void','return_type':'void'},'callGetChildren':{'signature':'void | RecursiveIterator','return_type':'RecursiveIterator'},'callHasChildren':{'signature':'void | bool','return_type':'bool'},'__construct':{'signature':'Traversable $iterator [, int $mode = RecursiveIteratorIterator::LEAVES_ONLY [, int $flags = 0]]','return_type':''},'current':{'signature':'void | mixed','return_type':'mixed'},'endChildren':{'signature':'void | void','return_type':'void'},'endIteration':{'signature':'void | void','return_type':'void'},'getDepth':{'signature':'void | int','return_type':'int'},'getInnerIterator':{'signature':'void | Iterator','return_type':'Iterator'},'getMaxDepth':{'signature':'void | mixed','return_type':'mixed'},'getSubIterator':{'signature':'[ int $level] | RecursiveIterator','return_type':'RecursiveIterator'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'nextElement':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'setMaxDepth':{'signature':'[ string $max_depth = -1] | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'recursiveregexiterator':{'name':'RecursiveRegexIterator','methods':{'__construct':{'signature':'RecursiveIterator $iterator, string $regex [, int $mode = self::MATCH [, int $flags = 0 [, int $preg_flags = 0]]]','return_type':''},'getChildren':{'signature':'void | RecursiveIterator','return_type':'RecursiveIterator'},'hasChildren':{'signature':'void | bool','return_type':'bool'},'accept':{'signature':'void | bool','return_type':'bool'},'getFlags':{'signature':'void | int','return_type':'int'},'getMode':{'signature':'void | int','return_type':'int'},'getPregFlags':{'signature':'void | int','return_type':'int'},'getRegex':{'signature':'void | string','return_type':'string'},'setFlags':{'signature':'int $flags | void','return_type':'void'},'setMode':{'signature':'int $mode | void','return_type':'void'},'setPregFlags':{'signature':'int $preg_flags | void','return_type':'void'},},},'recursivetreeiterator':{'name':'RecursiveTreeIterator','constants':{'BYPASS_CURRENT':'4','BYPASS_KEY':'8','PREFIX_LEFT':'0','PREFIX_MID_HAS_NEXT':'1','PREFIX_MID_LAST':'2','PREFIX_END_HAS_NEXT':'3','PREFIX_END_LAST':'4','PREFIX_RIGHT':'5',},'methods':{'beginChildren':{'signature':'void | void','return_type':'void'},'beginIteration':{'signature':'void | void','return_type':'void'},'callGetChildren':{'signature':'void | RecursiveIterator','return_type':'RecursiveIterator'},'callHasChildren':{'signature':'void | bool','return_type':'bool'},'__construct':{'signature':'Traversable $iterator [, int $mode = RecursiveIteratorIterator::LEAVES_ONLY [, int $flags = 0]]','return_type':''},'current':{'signature':'void | mixed','return_type':'mixed'},'endChildren':{'signature':'void | void','return_type':'void'},'endIteration':{'signature':'void | void','return_type':'void'},'getEntry':{'signature':'void | string','return_type':'string'},'getPostfix':{'signature':'void | void','return_type':'void'},'getPrefix':{'signature':'void | string','return_type':'string'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'nextElement':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'setPrefixPart':{'signature':'int $part, string $value | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},'getDepth':{'signature':'void | int','return_type':'int'},'getInnerIterator':{'signature':'void | iterator','return_type':'iterator'},'getMaxDepth':{'signature':'void | mixed','return_type':'mixed'},'getSubIterator':{'signature':'[ int $level] | RecursiveIterator','return_type':'RecursiveIterator'},'setMaxDepth':{'signature':'[ string $max_depth = -1] | void','return_type':'void'},},},'regexiterator':{'name':'RegexIterator','constants':{'MATCH':'0','GET_MATCH':'1','ALL_MATCHES':'2','SPLIT':'3','REPLACE':'4','USE_KEY':'1',},'methods':{'__construct':{'signature':'Iterator $iterator','return_type':''},'accept':{'signature':'void | bool','return_type':'bool'},'getFlags':{'signature':'void | int','return_type':'int'},'getMode':{'signature':'void | int','return_type':'int'},'getPregFlags':{'signature':'void | int','return_type':'int'},'getRegex':{'signature':'void | string','return_type':'string'},'setFlags':{'signature':'int $flags | void','return_type':'void'},'setMode':{'signature':'int $mode | void','return_type':'void'},'setPregFlags':{'signature':'int $preg_flags | void','return_type':'void'},'current':{'signature':'void | mixed','return_type':'mixed'},'getInnerIterator':{'signature':'void | Iterator','return_type':'Iterator'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'runtimeexception':{'name':'RuntimeException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'spldoublylinkedlist':{'name':'SplDoublyLinkedList','methods':{'__construct':{'signature':'void','return_type':''},'bottom':{'signature':'void | mixed','return_type':'mixed'},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'getIteratorMode':{'signature':'void | int','return_type':'int'},'isEmpty':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'offsetExists':{'signature':'mixed $index | bool','return_type':'bool'},'offsetGet':{'signature':'mixed $index | mixed','return_type':'mixed'},'offsetSet':{'signature':'mixed $index, mixed $newval | void','return_type':'void'},'offsetUnset':{'signature':'mixed $index | void','return_type':'void'},'pop':{'signature':'void | mixed','return_type':'mixed'},'prev':{'signature':'void | void','return_type':'void'},'push':{'signature':'mixed $value | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'serialize':{'signature':'void | string','return_type':'string'},'setIteratorMode':{'signature':'int $mode | void','return_type':'void'},'shift':{'signature':'void | mixed','return_type':'mixed'},'top':{'signature':'void | mixed','return_type':'mixed'},'unserialize':{'signature':'string $serialized | void','return_type':'void'},'unshift':{'signature':'mixed $value | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'splfileinfo':{'name':'SplFileInfo','methods':{'__construct':{'signature':'string $file_name','return_type':''},'getATime':{'signature':'void | int','return_type':'int'},'getBasename':{'signature':'[ string $suffix] | string','return_type':'string'},'getCTime':{'signature':'void | int','return_type':'int'},'getExtension':{'signature':'void | string','return_type':'string'},'getFileInfo':{'signature':'[ string $class_name] | SplFileInfo','return_type':'SplFileInfo'},'getFilename':{'signature':'void | string','return_type':'string'},'getGroup':{'signature':'void | int','return_type':'int'},'getInode':{'signature':'void | int','return_type':'int'},'getLinkTarget':{'signature':'void | string','return_type':'string'},'getMTime':{'signature':'void | int','return_type':'int'},'getOwner':{'signature':'void | int','return_type':'int'},'getPath':{'signature':'void | string','return_type':'string'},'getPathInfo':{'signature':'[ string $class_name] | SplFileInfo','return_type':'SplFileInfo'},'getPathname':{'signature':'void | string','return_type':'string'},'getPerms':{'signature':'void | int','return_type':'int'},'getRealPath':{'signature':'void | string','return_type':'string'},'getSize':{'signature':'void | int','return_type':'int'},'getType':{'signature':'void | string','return_type':'string'},'isDir':{'signature':'void | bool','return_type':'bool'},'isExecutable':{'signature':'void | bool','return_type':'bool'},'isFile':{'signature':'void | bool','return_type':'bool'},'isLink':{'signature':'void | bool','return_type':'bool'},'isReadable':{'signature':'void | bool','return_type':'bool'},'isWritable':{'signature':'void | bool','return_type':'bool'},'openFile':{'signature':'[ string $open_mode = r [, bool $use_include_path = false [, resource $context = NULL]]] | SplFileObject','return_type':'SplFileObject'},'setFileClass':{'signature':'[ string $class_name] | void','return_type':'void'},'setInfoClass':{'signature':'[ string $class_name] | void','return_type':'void'},'__toString':{'signature':'void | void','return_type':'void'},},},'splfileobject':{'name':'SplFileObject','constants':{'DROP_NEW_LINE':'1','READ_AHEAD':'2','SKIP_EMPTY':'4','READ_CSV':'8',},'methods':{'__construct':{'signature':'string $file_name','return_type':''},'current':{'signature':'void | string|array','return_type':'string|array'},'eof':{'signature':'void | bool','return_type':'bool'},'fflush':{'signature':'void | bool','return_type':'bool'},'fgetc':{'signature':'void | string','return_type':'string'},'fgetcsv':{'signature':'[ string $delimiter = "," [, string $enclosure = "\"" [, string $escape = "\\"]]] | array','return_type':'array'},'fgets':{'signature':'void | string','return_type':'string'},'fgetss':{'signature':'[ string $allowable_tags] | string','return_type':'string'},'flock':{'signature':'int $operation [, int &$wouldblock] | bool','return_type':'bool'},'fpassthru':{'signature':'void | int','return_type':'int'},'fputcsv':{'signature':'array $fields [, string $delimiter = '','' [, string $enclosure = ''"'']] | int','return_type':'int'},'fscanf':{'signature':'string $format [, mixed &$...] | mixed','return_type':'mixed'},'fseek':{'signature':'int $offset [, int $whence = SEEK_SET] | int','return_type':'int'},'fstat':{'signature':'void | array','return_type':'array'},'ftell':{'signature':'void | int','return_type':'int'},'ftruncate':{'signature':'int $size | bool','return_type':'bool'},'fwrite':{'signature':'string $str [, int $length] | int','return_type':'int'},'getChildren':{'signature':'void | void','return_type':'void'},'getCsvControl':{'signature':'void | array','return_type':'array'},'getFlags':{'signature':'void | int','return_type':'int'},'getMaxLineLen':{'signature':'void | int','return_type':'int'},'hasChildren':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | int','return_type':'int'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'seek':{'signature':'int $line_pos | void','return_type':'void'},'setCsvControl':{'signature':'[ string $delimiter = "," [, string $enclosure = "\"" [, string $escape = "\\"]]] | void','return_type':'void'},'setFlags':{'signature':'int $flags | void','return_type':'void'},'setMaxLineLen':{'signature':'int $max_len | void','return_type':'void'},'__toString':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},'getATime':{'signature':'void | int','return_type':'int'},'getBasename':{'signature':'[ string $suffix] | string','return_type':'string'},'getCTime':{'signature':'void | int','return_type':'int'},'getExtension':{'signature':'void | string','return_type':'string'},'getFileInfo':{'signature':'[ string $class_name] | SplFileInfo','return_type':'SplFileInfo'},'getFilename':{'signature':'void | string','return_type':'string'},'getGroup':{'signature':'void | int','return_type':'int'},'getInode':{'signature':'void | int','return_type':'int'},'getLinkTarget':{'signature':'void | string','return_type':'string'},'getMTime':{'signature':'void | int','return_type':'int'},'getOwner':{'signature':'void | int','return_type':'int'},'getPath':{'signature':'void | string','return_type':'string'},'getPathInfo':{'signature':'[ string $class_name] | SplFileInfo','return_type':'SplFileInfo'},'getPathname':{'signature':'void | string','return_type':'string'},'getPerms':{'signature':'void | int','return_type':'int'},'getRealPath':{'signature':'void | string','return_type':'string'},'getSize':{'signature':'void | int','return_type':'int'},'getType':{'signature':'void | string','return_type':'string'},'isDir':{'signature':'void | bool','return_type':'bool'},'isExecutable':{'signature':'void | bool','return_type':'bool'},'isFile':{'signature':'void | bool','return_type':'bool'},'isLink':{'signature':'void | bool','return_type':'bool'},'isReadable':{'signature':'void | bool','return_type':'bool'},'isWritable':{'signature':'void | bool','return_type':'bool'},'openFile':{'signature':'[ string $open_mode = r [, bool $use_include_path = false [, resource $context = NULL]]] | SplFileObject','return_type':'SplFileObject'},'setFileClass':{'signature':'[ string $class_name] | void','return_type':'void'},'setInfoClass':{'signature':'[ string $class_name] | void','return_type':'void'},},},'splfixedarray':{'name':'SplFixedArray','methods':{'__construct':{'signature':'[ int $size = 0]','return_type':''},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'getSize':{'signature':'void | int','return_type':'int'},'key':{'signature':'void | int','return_type':'int'},'next':{'signature':'void | void','return_type':'void'},'offsetExists':{'signature':'int $index | bool','return_type':'bool'},'offsetGet':{'signature':'int $index | mixed','return_type':'mixed'},'offsetSet':{'signature':'int $index, mixed $newval | void','return_type':'void'},'offsetUnset':{'signature':'int $index | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'setSize':{'signature':'int $size | int','return_type':'int'},'toArray':{'signature':'void | array','return_type':'array'},'valid':{'signature':'void | bool','return_type':'bool'},'__wakeup':{'signature':'void | void','return_type':'void'},},'static_methods':{'fromArray':{'signature':'array $array [, bool $save_indexes = true] | SplFixedArray','return_type':'SplFixedArray'},},},'splheap':{'name':'SplHeap','methods':{'__construct':{'signature':'void','return_type':''},'compare':{'signature':'mixed $value1, mixed $value2 | int','return_type':'int'},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'extract':{'signature':'void | mixed','return_type':'mixed'},'insert':{'signature':'mixed $value | void','return_type':'void'},'isEmpty':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'recoverFromCorruption':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'top':{'signature':'void | mixed','return_type':'mixed'},'valid':{'signature':'void | bool','return_type':'bool'},},},'splmaxheap':{'name':'SplMaxHeap','methods':{'compare':{'signature':'mixed $value1, mixed $value2 | int','return_type':'int'},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'extract':{'signature':'void | mixed','return_type':'mixed'},'insert':{'signature':'mixed $value | void','return_type':'void'},'isEmpty':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'recoverFromCorruption':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'top':{'signature':'void | mixed','return_type':'mixed'},'valid':{'signature':'void | bool','return_type':'bool'},},},'splminheap':{'name':'SplMinHeap','methods':{'compare':{'signature':'mixed $value1, mixed $value2 | int','return_type':'int'},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'extract':{'signature':'void | mixed','return_type':'mixed'},'insert':{'signature':'mixed $value | void','return_type':'void'},'isEmpty':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'recoverFromCorruption':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'top':{'signature':'void | mixed','return_type':'mixed'},'valid':{'signature':'void | bool','return_type':'bool'},},},'splobjectstorage':{'name':'SplObjectStorage','methods':{'addAll':{'signature':'SplObjectStorage $storage | void','return_type':'void'},'attach':{'signature':'object $object [, mixed $data = NULL] | void','return_type':'void'},'contains':{'signature':'object $object | bool','return_type':'bool'},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | object','return_type':'object'},'detach':{'signature':'object $object | void','return_type':'void'},'getHash':{'signature':'object $object | string','return_type':'string'},'getInfo':{'signature':'void | mixed','return_type':'mixed'},'key':{'signature':'void | int','return_type':'int'},'next':{'signature':'void | void','return_type':'void'},'offsetExists':{'signature':'object $object | bool','return_type':'bool'},'offsetGet':{'signature':'object $object | mixed','return_type':'mixed'},'offsetSet':{'signature':'object $object [, mixed $data = NULL] | void','return_type':'void'},'offsetUnset':{'signature':'object $object | void','return_type':'void'},'removeAll':{'signature':'SplObjectStorage $storage | void','return_type':'void'},'removeAllExcept':{'signature':'SplObjectStorage $storage | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'serialize':{'signature':'void | string','return_type':'string'},'setInfo':{'signature':'mixed $data | void','return_type':'void'},'unserialize':{'signature':'string $serialized | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'splpriorityqueue':{'name':'SplPriorityQueue','methods':{'__construct':{'signature':'void','return_type':''},'compare':{'signature':'mixed $priority1, mixed $priority2 | int','return_type':'int'},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'extract':{'signature':'void | mixed','return_type':'mixed'},'insert':{'signature':'mixed $value, mixed $priority | void','return_type':'void'},'isEmpty':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'recoverFromCorruption':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'setExtractFlags':{'signature':'int $flags | void','return_type':'void'},'top':{'signature':'void | mixed','return_type':'mixed'},'valid':{'signature':'void | bool','return_type':'bool'},},},'splqueue':{'name':'SplQueue','methods':{'__construct':{'signature':'void','return_type':''},'dequeue':{'signature':'void | mixed','return_type':'mixed'},'enqueue':{'signature':'mixed $value | void','return_type':'void'},'setIteratorMode':{'signature':'int $mode | void','return_type':'void'},'bottom':{'signature':'void | mixed','return_type':'mixed'},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'getIteratorMode':{'signature':'void | int','return_type':'int'},'isEmpty':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'offsetExists':{'signature':'mixed $index | bool','return_type':'bool'},'offsetGet':{'signature':'mixed $index | mixed','return_type':'mixed'},'offsetSet':{'signature':'mixed $index, mixed $newval | void','return_type':'void'},'offsetUnset':{'signature':'mixed $index | void','return_type':'void'},'pop':{'signature':'void | mixed','return_type':'mixed'},'prev':{'signature':'void | void','return_type':'void'},'push':{'signature':'mixed $value | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'serialize':{'signature':'void | string','return_type':'string'},'shift':{'signature':'void | mixed','return_type':'mixed'},'top':{'signature':'void | mixed','return_type':'mixed'},'unserialize':{'signature':'string $serialized | void','return_type':'void'},'unshift':{'signature':'mixed $value | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'splstack':{'name':'SplStack','methods':{'__construct':{'signature':'void','return_type':''},'setIteratorMode':{'signature':'int $mode | void','return_type':'void'},'bottom':{'signature':'void | mixed','return_type':'mixed'},'count':{'signature':'void | int','return_type':'int'},'current':{'signature':'void | mixed','return_type':'mixed'},'getIteratorMode':{'signature':'void | int','return_type':'int'},'isEmpty':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'offsetExists':{'signature':'mixed $index | bool','return_type':'bool'},'offsetGet':{'signature':'mixed $index | mixed','return_type':'mixed'},'offsetSet':{'signature':'mixed $index, mixed $newval | void','return_type':'void'},'offsetUnset':{'signature':'mixed $index | void','return_type':'void'},'pop':{'signature':'void | mixed','return_type':'mixed'},'prev':{'signature':'void | void','return_type':'void'},'push':{'signature':'mixed $value | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'serialize':{'signature':'void | string','return_type':'string'},'shift':{'signature':'void | mixed','return_type':'mixed'},'top':{'signature':'void | mixed','return_type':'mixed'},'unserialize':{'signature':'string $serialized | void','return_type':'void'},'unshift':{'signature':'mixed $value | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'spltempfileobject':{'name':'SplTempFileObject','methods':{'__construct':{'signature':'string $filename [, string $open_mode = "r" [, bool $use_include_path = false [, resource $context]]]','return_type':''},'current':{'signature':'void | string|array','return_type':'string|array'},'eof':{'signature':'void | bool','return_type':'bool'},'fflush':{'signature':'void | bool','return_type':'bool'},'fgetc':{'signature':'void | string','return_type':'string'},'fgetcsv':{'signature':'[ string $delimiter = "," [, string $enclosure = "\"" [, string $escape = "\\"]]] | array','return_type':'array'},'fgets':{'signature':'void | string','return_type':'string'},'fgetss':{'signature':'[ string $allowable_tags] | string','return_type':'string'},'flock':{'signature':'int $operation [, int &$wouldblock] | bool','return_type':'bool'},'fpassthru':{'signature':'void | int','return_type':'int'},'fputcsv':{'signature':'array $fields [, string $delimiter = '','' [, string $enclosure = ''"'']] | int','return_type':'int'},'fscanf':{'signature':'string $format [, mixed &$...] | mixed','return_type':'mixed'},'fseek':{'signature':'int $offset [, int $whence = SEEK_SET] | int','return_type':'int'},'fstat':{'signature':'void | array','return_type':'array'},'ftell':{'signature':'void | int','return_type':'int'},'ftruncate':{'signature':'int $size | bool','return_type':'bool'},'fwrite':{'signature':'string $str [, int $length] | int','return_type':'int'},'getChildren':{'signature':'void | void','return_type':'void'},'getCsvControl':{'signature':'void | array','return_type':'array'},'getFlags':{'signature':'void | int','return_type':'int'},'getMaxLineLen':{'signature':'void | int','return_type':'int'},'hasChildren':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | int','return_type':'int'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'seek':{'signature':'int $line_pos | void','return_type':'void'},'setCsvControl':{'signature':'[ string $delimiter = "," [, string $enclosure = "\"" [, string $escape = "\\"]]] | void','return_type':'void'},'setFlags':{'signature':'int $flags | void','return_type':'void'},'setMaxLineLen':{'signature':'int $max_len | void','return_type':'void'},'__toString':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},},},'underflowexception':{'name':'UnderflowException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'unexpectedvalueexception':{'name':'UnexpectedValueException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},} +let php_builtin['classes']['predefined_interfaces_and_classes']={'closure':{'name':'Closure','methods':{'__construct':{'signature':'void','return_type':''},'bindTo':{'signature':'object $newthis [, mixed $newscope = ''static''] | Closure','return_type':'Closure'},},'static_methods':{'bind':{'signature':'Closure $closure, object $newthis [, mixed $newscope = ''static''] | Closure','return_type':'Closure'},},},'generator':{'name':'Generator','methods':{'current':{'signature':'void | mixed','return_type':'mixed'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'send':{'signature':'mixed $value | mixed','return_type':'mixed'},'throw':{'signature':'Exception $exception | mixed','return_type':'mixed'},'valid':{'signature':'void | bool','return_type':'bool'},'__wakeup':{'signature':'void | void','return_type':'void'},},},} +let php_builtin['classes']['curl']={'curlfile':{'name':'CURLFile','properties': {'name':{'initializer':'','type':''},'mime':{'initializer':'','type':''},'postname':{'initializer':'','type':''},},'methods':{'__construct':{'signature':'string $filename [, string $mimetype [, string $postname]]','return_type':''},'getFilename':{'signature':'void | string','return_type':'string'},'getMimeType':{'signature':'void | string','return_type':'string'},'getPostFilename':{'signature':'void | string','return_type':'string'},'setMimeType':{'signature':'string $mime | void','return_type':'void'},'setPostFilename':{'signature':'string $postname | void','return_type':'void'},'__wakeup':{'signature':'void | void','return_type':'void'},},},} +let php_builtin['classes']['date_time']={'dateinterval':{'name':'DateInterval','properties': {'y':{'initializer':'','type':'integer'},'m':{'initializer':'','type':'integer'},'d':{'initializer':'','type':'integer'},'h':{'initializer':'','type':'integer'},'i':{'initializer':'','type':'integer'},'s':{'initializer':'','type':'integer'},'invert':{'initializer':'','type':'integer'},'days':{'initializer':'','type':'mixed'},},'methods':{'__construct':{'signature':'string $interval_spec','return_type':''},'format':{'signature':'string $format | string','return_type':'string'},},'static_methods':{'createFromDateString':{'signature':'string $time | DateInterval','return_type':'DateInterval'},},},'dateperiod':{'name':'DatePeriod','constants':{'EXCLUDE_START_DATE':'1',},'methods':{'__construct':{'signature':'string $isostr [, int $options]','return_type':''},},},'datetime':{'name':'DateTime','constants':{'ATOM':'"Y-m-d\TH:i:sP"','COOKIE':'"l, d-M-y H:i:s T"','ISO8601':'"Y-m-d\TH:i:sO"','RFC822':'"D, d M y H:i:s O"','RFC850':'"l, d-M-y H:i:s T"','RFC1036':'"D, d M y H:i:s O"','RFC1123':'"D, d M Y H:i:s O"','RFC2822':'"D, d M Y H:i:s O"','RFC3339':'"Y-m-d\TH:i:sP"','RSS':'"D, d M Y H:i:s O"','W3C':'"Y-m-d\TH:i:sP"',},'methods':{'__construct':{'signature':'[ string $time = "now" [, DateTimeZone $timezone = NULL]]','return_type':''},'add':{'signature':'DateInterval $interval | DateTime','return_type':'DateTime'},'modify':{'signature':'string $modify | DateTime','return_type':'DateTime'},'setDate':{'signature':'int $year, int $month, int $day | DateTime','return_type':'DateTime'},'setISODate':{'signature':'int $year, int $week [, int $day = 1] | DateTime','return_type':'DateTime'},'setTime':{'signature':'int $hour, int $minute [, int $second = 0] | DateTime','return_type':'DateTime'},'setTimestamp':{'signature':'int $unixtimestamp | DateTime','return_type':'DateTime'},'setTimezone':{'signature':'DateTimeZone $timezone | DateTime','return_type':'DateTime'},'sub':{'signature':'DateInterval $interval | DateTime','return_type':'DateTime'},'diff':{'signature':'DateTimeInterface $datetime2 [, bool $absolute = false] | DateInterval','return_type':'DateInterval'},'format':{'signature':'string $format | string','return_type':'string'},'getOffset':{'signature':'void | int','return_type':'int'},'getTimestamp':{'signature':'void | int','return_type':'int'},'getTimezone':{'signature':'void | DateTimeZone','return_type':'DateTimeZone'},'__wakeup':{'signature':'void','return_type':''},},'static_methods':{'createFromFormat':{'signature':'string $format, string $time [, DateTimeZone $timezone] | DateTime','return_type':'DateTime'},'getLastErrors':{'signature':'void | array','return_type':'array'},'__set_state':{'signature':'array $array | DateTime','return_type':'DateTime'},},},'datetimeimmutable':{'name':'DateTimeImmutable','methods':{'__construct':{'signature':'[ string $time = "now" [, DateTimeZone $timezone = NULL]]','return_type':''},'add':{'signature':'DateInterval $interval | DateTimeImmutable','return_type':'DateTimeImmutable'},'modify':{'signature':'string $modify | DateTimeImmutable','return_type':'DateTimeImmutable'},'setDate':{'signature':'int $year, int $month, int $day | DateTimeImmutable','return_type':'DateTimeImmutable'},'setISODate':{'signature':'int $year, int $week [, int $day = 1] | DateTimeImmutable','return_type':'DateTimeImmutable'},'setTime':{'signature':'int $hour, int $minute [, int $second = 0] | DateTimeImmutable','return_type':'DateTimeImmutable'},'setTimestamp':{'signature':'int $unixtimestamp | DateTimeImmutable','return_type':'DateTimeImmutable'},'setTimezone':{'signature':'DateTimeZone $timezone | DateTimeImmutable','return_type':'DateTimeImmutable'},'sub':{'signature':'DateInterval $interval | DateTimeImmutable','return_type':'DateTimeImmutable'},'diff':{'signature':'DateTimeInterface $datetime2 [, bool $absolute = false] | DateInterval','return_type':'DateInterval'},'format':{'signature':'string $format | string','return_type':'string'},'getOffset':{'signature':'void | int','return_type':'int'},'getTimestamp':{'signature':'void | int','return_type':'int'},'getTimezone':{'signature':'void | DateTimeZone','return_type':'DateTimeZone'},'__wakeup':{'signature':'void','return_type':''},},'static_methods':{'createFromFormat':{'signature':'string $format, string $time [, DateTimeZone $timezone] | DateTimeImmutable','return_type':'DateTimeImmutable'},'getLastErrors':{'signature':'void | array','return_type':'array'},'__set_state':{'signature':'array $array | DateTimeImmutable','return_type':'DateTimeImmutable'},},},'datetimezone':{'name':'DateTimeZone','constants':{'AFRICA':'1','AMERICA':'2','ANTARCTICA':'4','ARCTIC':'8','ASIA':'16','ATLANTIC':'32','AUSTRALIA':'64','EUROPE':'128','INDIAN':'256','PACIFIC':'512','UTC':'1024','ALL':'2047','ALL_WITH_BC':'4095','PER_COUNTRY':'4096',},'methods':{'__construct':{'signature':'string $timezone','return_type':''},'getLocation':{'signature':'void | array','return_type':'array'},'getName':{'signature':'void | string','return_type':'string'},'getOffset':{'signature':'DateTime $datetime | int','return_type':'int'},'getTransitions':{'signature':'[ int $timestamp_begin [, int $timestamp_end]] | array','return_type':'array'},},'static_methods':{'listAbbreviations':{'signature':'void | array','return_type':'array'},'listIdentifiers':{'signature':'[ int $what = DateTimeZone::ALL [, string $country = NULL]] | array','return_type':'array'},},},} +let php_builtin['classes']['directories']={'directory':{'name':'Directory','properties': {'path':{'initializer':'','type':'string'},'handle':{'initializer':'','type':'resource'},},'methods':{'close':{'signature':'[ resource $dir_handle] | void','return_type':'void'},'read':{'signature':'[ resource $dir_handle] | string','return_type':'string'},'rewind':{'signature':'[ resource $dir_handle] | void','return_type':'void'},},},} +let php_builtin['classes']['dom']={'domattr':{'name':'DOMAttr','properties': {'name':{'initializer':'','type':'string'},'ownerElement':{'initializer':'','type':'DOMElement'},'schemaTypeInfo':{'initializer':'','type':'bool'},'specified':{'initializer':'','type':'bool'},'value':{'initializer':'','type':'string'},},'methods':{'__construct':{'signature':'string $name [, string $value]','return_type':''},'isId':{'signature':'void | bool','return_type':'bool'},'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domcdatasection':{'name':'DOMCdataSection','methods':{'__construct':{'signature':'string $value','return_type':''},'isWhitespaceInElementContent':{'signature':'void | bool','return_type':'bool'},'splitText':{'signature':'int $offset | DOMText','return_type':'DOMText'},},},'domcharacterdata':{'name':'DOMCharacterData','properties': {'data':{'initializer':'','type':'string'},'length':{'initializer':'','type':'int'},},'methods':{'appendData':{'signature':'string $data | void','return_type':'void'},'deleteData':{'signature':'int $offset, int $count | void','return_type':'void'},'insertData':{'signature':'int $offset, string $data | void','return_type':'void'},'replaceData':{'signature':'int $offset, int $count, string $data | void','return_type':'void'},'substringData':{'signature':'int $offset, int $count | string','return_type':'string'},'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domcomment':{'name':'DOMComment','methods':{'__construct':{'signature':'[ string $value]','return_type':''},'appendData':{'signature':'string $data | void','return_type':'void'},'deleteData':{'signature':'int $offset, int $count | void','return_type':'void'},'insertData':{'signature':'int $offset, string $data | void','return_type':'void'},'replaceData':{'signature':'int $offset, int $count, string $data | void','return_type':'void'},'substringData':{'signature':'int $offset, int $count | string','return_type':'string'},'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domdocument':{'name':'DOMDocument','properties': {'actualEncoding':{'initializer':'','type':'string'},'config':{'initializer':'','type':'DOMConfiguration'},'doctype':{'initializer':'','type':'DOMDocumentType'},'documentElement':{'initializer':'','type':'DOMElement'},'documentURI':{'initializer':'','type':'string'},'encoding':{'initializer':'','type':'string'},'formatOutput':{'initializer':'','type':'bool'},'implementation':{'initializer':'','type':'DOMImplementation'},'preserveWhiteSpace':{'initializer':'true','type':'bool'},'recover':{'initializer':'','type':'bool'},'resolveExternals':{'initializer':'','type':'bool'},'standalone':{'initializer':'','type':'bool'},'strictErrorChecking':{'initializer':'true','type':'bool'},'substituteEntities':{'initializer':'','type':'bool'},'validateOnParse':{'initializer':'false','type':'bool'},'version':{'initializer':'','type':'string'},'xmlEncoding':{'initializer':'','type':'string'},'xmlStandalone':{'initializer':'','type':'bool'},'xmlVersion':{'initializer':'','type':'string'},},'methods':{'__construct':{'signature':'[ string $version [, string $encoding]]','return_type':''},'createAttribute':{'signature':'string $name | DOMAttr','return_type':'DOMAttr'},'createAttributeNS':{'signature':'string $namespaceURI, string $qualifiedName | DOMAttr','return_type':'DOMAttr'},'createCDATASection':{'signature':'string $data | DOMCDATASection','return_type':'DOMCDATASection'},'createComment':{'signature':'string $data | DOMComment','return_type':'DOMComment'},'createDocumentFragment':{'signature':'void | DOMDocumentFragment','return_type':'DOMDocumentFragment'},'createElement':{'signature':'string $name [, string $value] | DOMElement','return_type':'DOMElement'},'createElementNS':{'signature':'string $namespaceURI, string $qualifiedName [, string $value] | DOMElement','return_type':'DOMElement'},'createEntityReference':{'signature':'string $name | DOMEntityReference','return_type':'DOMEntityReference'},'createProcessingInstruction':{'signature':'string $target [, string $data] | DOMProcessingInstruction','return_type':'DOMProcessingInstruction'},'createTextNode':{'signature':'string $content | DOMText','return_type':'DOMText'},'getElementById':{'signature':'string $elementId | DOMElement','return_type':'DOMElement'},'getElementsByTagName':{'signature':'string $name | DOMNodeList','return_type':'DOMNodeList'},'getElementsByTagNameNS':{'signature':'string $namespaceURI, string $localName | DOMNodeList','return_type':'DOMNodeList'},'importNode':{'signature':'DOMNode $importedNode [, bool $deep] | DOMNode','return_type':'DOMNode'},'load':{'signature':'string $filename [, int $options = 0] | mixed','return_type':'mixed'},'loadHTML':{'signature':'string $source [, int $options = 0] | bool','return_type':'bool'},'loadHTMLFile':{'signature':'string $filename [, int $options = 0] | bool','return_type':'bool'},'loadXML':{'signature':'string $source [, int $options = 0] | mixed','return_type':'mixed'},'normalizeDocument':{'signature':'void | void','return_type':'void'},'registerNodeClass':{'signature':'string $baseclass, string $extendedclass | bool','return_type':'bool'},'relaxNGValidate':{'signature':'string $filename | bool','return_type':'bool'},'relaxNGValidateSource':{'signature':'string $source | bool','return_type':'bool'},'save':{'signature':'string $filename [, int $options] | int','return_type':'int'},'saveHTML':{'signature':'[ DOMNode $node = NULL] | string','return_type':'string'},'saveHTMLFile':{'signature':'string $filename | int','return_type':'int'},'saveXML':{'signature':'[ DOMNode $node [, int $options]] | string','return_type':'string'},'schemaValidate':{'signature':'string $filename [, int $flags] | bool','return_type':'bool'},'schemaValidateSource':{'signature':'string $source [, int $flags] | bool','return_type':'bool'},'validate':{'signature':'void | bool','return_type':'bool'},'xinclude':{'signature':'[ int $options] | int','return_type':'int'},'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domdocumentfragment':{'name':'DOMDocumentFragment','methods':{'appendXML':{'signature':'string $data | bool','return_type':'bool'},'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domdocumenttype':{'name':'DOMDocumentType','properties': {'publicId':{'initializer':'','type':'string'},'systemId':{'initializer':'','type':'string'},'name':{'initializer':'','type':'string'},'entities':{'initializer':'','type':'DOMNamedNodeMap'},'notations':{'initializer':'','type':'DOMNamedNodeMap'},'internalSubset':{'initializer':'','type':'string'},},'methods':{'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domelement':{'name':'DOMElement','properties': {'schemaTypeInfo':{'initializer':'','type':'bool'},'tagName':{'initializer':'','type':'string'},},'methods':{'__construct':{'signature':'string $name [, string $value [, string $namespaceURI]]','return_type':''},'getAttribute':{'signature':'string $name | string','return_type':'string'},'getAttributeNode':{'signature':'string $name | DOMAttr','return_type':'DOMAttr'},'getAttributeNodeNS':{'signature':'string $namespaceURI, string $localName | DOMAttr','return_type':'DOMAttr'},'getAttributeNS':{'signature':'string $namespaceURI, string $localName | string','return_type':'string'},'getElementsByTagName':{'signature':'string $name | DOMNodeList','return_type':'DOMNodeList'},'getElementsByTagNameNS':{'signature':'string $namespaceURI, string $localName | DOMNodeList','return_type':'DOMNodeList'},'hasAttribute':{'signature':'string $name | bool','return_type':'bool'},'hasAttributeNS':{'signature':'string $namespaceURI, string $localName | bool','return_type':'bool'},'removeAttribute':{'signature':'string $name | bool','return_type':'bool'},'removeAttributeNode':{'signature':'DOMAttr $oldnode | bool','return_type':'bool'},'removeAttributeNS':{'signature':'string $namespaceURI, string $localName | bool','return_type':'bool'},'setAttribute':{'signature':'string $name, string $value | DOMAttr','return_type':'DOMAttr'},'setAttributeNode':{'signature':'DOMAttr $attr | DOMAttr','return_type':'DOMAttr'},'setAttributeNodeNS':{'signature':'DOMAttr $attr | DOMAttr','return_type':'DOMAttr'},'setAttributeNS':{'signature':'string $namespaceURI, string $qualifiedName, string $value | void','return_type':'void'},'setIdAttribute':{'signature':'string $name, bool $isId | void','return_type':'void'},'setIdAttributeNode':{'signature':'DOMAttr $attr, bool $isId | void','return_type':'void'},'setIdAttributeNS':{'signature':'string $namespaceURI, string $localName, bool $isId | void','return_type':'void'},'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domentity':{'name':'DOMEntity','properties': {'publicId':{'initializer':'','type':'string'},'systemId':{'initializer':'','type':'string'},'notationName':{'initializer':'','type':'string'},'actualEncoding':{'initializer':'','type':'string'},'encoding':{'initializer':'','type':'string'},'version':{'initializer':'','type':'string'},},'methods':{'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domentityreference':{'name':'DOMEntityReference','methods':{'__construct':{'signature':'string $name','return_type':''},'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domexception':{'name':'DOMException','properties': {'code':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'domimplementation':{'name':'DOMImplementation','methods':{'__construct':{'signature':'void','return_type':''},'createDocument':{'signature':'[ string $namespaceURI = NULL [, string $qualifiedName = NULL [, DOMDocumentType $doctype = NULL]]] | DOMDocument','return_type':'DOMDocument'},'createDocumentType':{'signature':'[ string $qualifiedName = NULL [, string $publicId = NULL [, string $systemId = NULL]]] | DOMDocumentType','return_type':'DOMDocumentType'},'hasFeature':{'signature':'string $feature, string $version | bool','return_type':'bool'},},},'domnamednodemap':{'name':'DOMNamedNodeMap','properties': {'length':{'initializer':'','type':'int'},},'methods':{'getNamedItem':{'signature':'string $name | DOMNode','return_type':'DOMNode'},'getNamedItemNS':{'signature':'string $namespaceURI, string $localName | DOMNode','return_type':'DOMNode'},'item':{'signature':'int $index | DOMNode','return_type':'DOMNode'},},},'domnode':{'name':'DOMNode','properties': {'nodeName':{'initializer':'','type':'string'},'nodeValue':{'initializer':'','type':'string'},'nodeType':{'initializer':'','type':'int'},'parentNode':{'initializer':'','type':'DOMNode'},'childNodes':{'initializer':'','type':'DOMNodeList'},'firstChild':{'initializer':'','type':'DOMNode'},'lastChild':{'initializer':'','type':'DOMNode'},'previousSibling':{'initializer':'','type':'DOMNode'},'nextSibling':{'initializer':'','type':'DOMNode'},'attributes':{'initializer':'','type':'DOMNamedNodeMap'},'ownerDocument':{'initializer':'','type':'DOMDocument'},'namespaceURI':{'initializer':'','type':'string'},'prefix':{'initializer':'','type':'string'},'localName':{'initializer':'','type':'string'},'baseURI':{'initializer':'','type':'string'},'textContent':{'initializer':'','type':'string'},},'methods':{'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domnodelist':{'name':'DOMNodeList','properties': {'length':{'initializer':'','type':'int'},},'methods':{'item':{'signature':'int $index | DOMNode','return_type':'DOMNode'},},},'domnotation':{'name':'DOMNotation','properties': {'publicId':{'initializer':'','type':'string'},'systemId':{'initializer':'','type':'string'},},'methods':{'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domprocessinginstruction':{'name':'DOMProcessingInstruction','properties': {'target':{'initializer':'','type':'string'},'data':{'initializer':'','type':'string'},},'methods':{'__construct':{'signature':'string $name [, string $value]','return_type':''},'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domtext':{'name':'DOMText','properties': {'wholeText':{'initializer':'','type':'string'},},'methods':{'__construct':{'signature':'[ string $value]','return_type':''},'isWhitespaceInElementContent':{'signature':'void | bool','return_type':'bool'},'splitText':{'signature':'int $offset | DOMText','return_type':'DOMText'},'appendChild':{'signature':'DOMNode $newnode | DOMNode','return_type':'DOMNode'},'C14N':{'signature':'[ bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | string','return_type':'string'},'C14NFile':{'signature':'string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes]]]] | int','return_type':'int'},'cloneNode':{'signature':'[ bool $deep] | DOMNode','return_type':'DOMNode'},'getLineNo':{'signature':'void | int','return_type':'int'},'getNodePath':{'signature':'void | string','return_type':'string'},'hasAttributes':{'signature':'void | bool','return_type':'bool'},'hasChildNodes':{'signature':'void | bool','return_type':'bool'},'insertBefore':{'signature':'DOMNode $newnode [, DOMNode $refnode] | DOMNode','return_type':'DOMNode'},'isDefaultNamespace':{'signature':'string $namespaceURI | bool','return_type':'bool'},'isSameNode':{'signature':'DOMNode $node | bool','return_type':'bool'},'isSupported':{'signature':'string $feature, string $version | bool','return_type':'bool'},'lookupNamespaceURI':{'signature':'string $prefix | string','return_type':'string'},'lookupPrefix':{'signature':'string $namespaceURI | string','return_type':'string'},'normalize':{'signature':'void | void','return_type':'void'},'removeChild':{'signature':'DOMNode $oldnode | DOMNode','return_type':'DOMNode'},'replaceChild':{'signature':'DOMNode $newnode, DOMNode $oldnode | DOMNode','return_type':'DOMNode'},},},'domxpath':{'name':'DOMXPath','properties': {'document':{'initializer':'','type':'DOMDocument'},},'methods':{'__construct':{'signature':'DOMDocument $doc','return_type':''},'evaluate':{'signature':'string $expression [, DOMNode $contextnode [, bool $registerNodeNS = true]] | mixed','return_type':'mixed'},'query':{'signature':'string $expression [, DOMNode $contextnode [, bool $registerNodeNS = true]] | DOMNodeList','return_type':'DOMNodeList'},'registerNamespace':{'signature':'string $prefix, string $namespaceURI | bool','return_type':'bool'},'registerPhpFunctions':{'signature':'[ mixed $restrict] | void','return_type':'void'},},},} +let php_builtin['classes']['predefined_exceptions']={'errorexception':{'name':'ErrorException','properties': {'severity':{'initializer':'','type':'int'},'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'__construct':{'signature':'[ string $message = "" [, int $code = 0 [, int $severity = 1 [, string $filename = __FILE__ [, int $lineno = __LINE__ [, Exception $previous = NULL]]]]]]','return_type':''},'getSeverity':{'signature':'void | int','return_type':'int'},'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'exception':{'name':'Exception','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'__construct':{'signature':'[ string $message = "" [, int $code = 0 [, Exception $previous = NULL]]]','return_type':''},'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},} +let php_builtin['classes']['libxml']={'libxmlerror':{'name':'libXMLError','properties': {'level':{'initializer':'','type':'int'},'code':{'initializer':'','type':'int'},'column':{'initializer':'','type':'int'},'message':{'initializer':'','type':'string'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},},} +let php_builtin['classes']['mysqli']={'mysqli_driver':{'name':'mysqli_driver','properties': {'client_info':{'initializer':'','type':'string'},'client_version':{'initializer':'','type':'string'},'driver_version':{'initializer':'','type':'string'},'embedded':{'initializer':'','type':'string'},'reconnect':{'initializer':'','type':'bool'},'report_mode':{'initializer':'','type':'int'},},'methods':{'embedded_server_end':{'signature':'void | void','return_type':'void'},'embedded_server_start':{'signature':'bool $start, array $arguments, array $groups | bool','return_type':'bool'},},},'mysqli_result':{'name':'mysqli_result','properties': {'current_field':{'initializer':'','type':'int'},'field_count':{'initializer':'','type':'int'},'lengths':{'initializer':'','type':'array'},'num_rows':{'initializer':'','type':'int'},},'methods':{'data_seek':{'signature':'int $offset | bool','return_type':'bool'},'fetch_all':{'signature':'[ int $resulttype = MYSQLI_NUM] | mixed','return_type':'mixed'},'fetch_array':{'signature':'[ int $resulttype = MYSQLI_BOTH] | mixed','return_type':'mixed'},'fetch_assoc':{'signature':'void | array','return_type':'array'},'fetch_field_direct':{'signature':'int $fieldnr | object','return_type':'object'},'fetch_field':{'signature':'void | object','return_type':'object'},'fetch_fields':{'signature':'void | array','return_type':'array'},'fetch_object':{'signature':'[ string $class_name [, array $params]] | object','return_type':'object'},'fetch_row':{'signature':'void | mixed','return_type':'mixed'},'field_seek':{'signature':'int $fieldnr | bool','return_type':'bool'},'free':{'signature':'void | void','return_type':'void'},},},'mysqli_sql_exception':{'name':'mysqli_sql_exception','properties': {'sqlstate':{'initializer':'','type':'string'},'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},},'mysqli_stmt':{'name':'mysqli_stmt','properties': {'affected_rows':{'initializer':'','type':'int'},'errno':{'initializer':'','type':'int'},'error_list':{'initializer':'','type':'array'},'error':{'initializer':'','type':'string'},'field_count':{'initializer':'','type':'int'},'insert_id':{'initializer':'','type':'int'},'num_rows':{'initializer':'','type':'int'},'param_count':{'initializer':'','type':'int'},'sqlstate':{'initializer':'','type':'string'},},'methods':{'attr_get':{'signature':'int $attr | int','return_type':'int'},'attr_set':{'signature':'int $attr, int $mode | bool','return_type':'bool'},'bind_param':{'signature':'string $types, mixed &$var1 [, mixed &$...] | bool','return_type':'bool'},'bind_result':{'signature':'mixed &$var1 [, mixed &$...] | bool','return_type':'bool'},'close':{'signature':'void | bool','return_type':'bool'},'data_seek':{'signature':'int $offset | void','return_type':'void'},'execute':{'signature':'void | bool','return_type':'bool'},'fetch':{'signature':'void | bool','return_type':'bool'},'free_result':{'signature':'void | void','return_type':'void'},'get_result':{'signature':'void | mysqli_result','return_type':'mysqli_result'},'get_warnings':{'signature':'mysqli_stmt $stmt | object','return_type':'object'},'prepare':{'signature':'string $query | mixed','return_type':'mixed'},'reset':{'signature':'void | bool','return_type':'bool'},'result_metadata':{'signature':'void | mysqli_result','return_type':'mysqli_result'},'send_long_data':{'signature':'int $param_nr, string $data | bool','return_type':'bool'},'store_result':{'signature':'void | bool','return_type':'bool'},},},'mysqli_warning':{'name':'mysqli_warning','properties': {'message':{'initializer':'','type':''},'sqlstate':{'initializer':'','type':''},'errno':{'initializer':'','type':''},},'methods':{'__construct':{'signature':'void','return_type':''},'next':{'signature':'void | void','return_type':'void'},},},'mysqli':{'name':'mysqli','properties': {'affected_rows':{'initializer':'','type':'int'},'client_info':{'initializer':'','type':'string'},'client_version':{'initializer':'','type':'int'},'connect_errno':{'initializer':'','type':'string'},'connect_error':{'initializer':'','type':'string'},'errno':{'initializer':'','type':'int'},'error_list':{'initializer':'','type':'array'},'error':{'initializer':'','type':'string'},'field_count':{'initializer':'','type':'int'},'host_info':{'initializer':'','type':'string'},'protocol_version':{'initializer':'','type':'string'},'server_info':{'initializer':'','type':'string'},'server_version':{'initializer':'','type':'int'},'info':{'initializer':'','type':'string'},'insert_id':{'initializer':'','type':'mixed'},'sqlstate':{'initializer':'','type':'string'},'thread_id':{'initializer':'','type':'int'},'warning_count':{'initializer':'','type':'int'},},'methods':{'__construct':{'signature':'[ string $host = ini_get("mysqli.default_host") [, string $username = ini_get("mysqli.default_user") [, string $passwd = ini_get("mysqli.default_pw") [, string $dbname = "" [, int $port = ini_get("mysqli.default_port") [, string $socket = ini_get("mysqli.default_socket")]]]]]]','return_type':''},'autocommit':{'signature':'bool $mode | bool','return_type':'bool'},'change_user':{'signature':'string $user, string $password, string $database | bool','return_type':'bool'},'character_set_name':{'signature':'void | string','return_type':'string'},'close':{'signature':'void | bool','return_type':'bool'},'commit':{'signature':'[ int $flags [, string $name]] | bool','return_type':'bool'},'debug':{'signature':'string $message | bool','return_type':'bool'},'dump_debug_info':{'signature':'void | bool','return_type':'bool'},'get_charset':{'signature':'void | object','return_type':'object'},'get_client_info':{'signature':'void | string','return_type':'string'},'get_connection_stats':{'signature':'void | bool','return_type':'bool'},'get_warnings':{'signature':'void | mysqli_warning','return_type':'mysqli_warning'},'init':{'signature':'void | mysqli','return_type':'mysqli'},'kill':{'signature':'int $processid | bool','return_type':'bool'},'more_results':{'signature':'void | bool','return_type':'bool'},'multi_query':{'signature':'string $query | bool','return_type':'bool'},'next_result':{'signature':'void | bool','return_type':'bool'},'options':{'signature':'int $option, mixed $value | bool','return_type':'bool'},'ping':{'signature':'void | bool','return_type':'bool'},'prepare':{'signature':'string $query | mysqli_stmt','return_type':'mysqli_stmt'},'query':{'signature':'string $query [, int $resultmode = MYSQLI_STORE_RESULT] | mixed','return_type':'mixed'},'real_connect':{'signature':'[ string $host [, string $username [, string $passwd [, string $dbname [, int $port [, string $socket [, int $flags]]]]]]] | bool','return_type':'bool'},'escape_string':{'signature':'string $escapestr | string','return_type':'string'},'real_query':{'signature':'string $query | bool','return_type':'bool'},'reap_async_query':{'signature':'void | mysqli_result','return_type':'mysqli_result'},'refresh':{'signature':'int $options | bool','return_type':'bool'},'rollback':{'signature':'[ int $flags [, string $name]] | bool','return_type':'bool'},'rpl_query_type':{'signature':'string $query | int','return_type':'int'},'select_db':{'signature':'string $dbname | bool','return_type':'bool'},'send_query':{'signature':'string $query | bool','return_type':'bool'},'set_charset':{'signature':'string $charset | bool','return_type':'bool'},'set_local_infile_handler':{'signature':'mysqli $link, callable $read_func | bool','return_type':'bool'},'ssl_set':{'signature':'string $key, string $cert, string $ca, string $capath, string $cipher | bool','return_type':'bool'},'stat':{'signature':'void | string','return_type':'string'},'stmt_init':{'signature':'void | mysqli_stmt','return_type':'mysqli_stmt'},'store_result':{'signature':'void | mysqli_result','return_type':'mysqli_result'},'use_result':{'signature':'void | mysqli_result','return_type':'mysqli_result'},},'static_methods':{'poll':{'signature':'array &$read, array &$error, array &$reject, int $sec [, int $usec] | int','return_type':'int'},},},} +let php_builtin['classes']['pdo']={'pdo':{'name':'PDO','constants':{'FETCH_ORI_ABS':'','ATTR_PERSISTENT':'','CLASS_CONSTANT':'','ATTR_DEFAULT_FETCH_MODE':'','FETCH_PROPS_LATE':'','FETCH_KEY_PAIR':'','FB_ATTR_DATE_FORMAT':'','FB_ATTR_TIME_FORMAT':'','FB_ATTR_TIMESTAMP_FORMAT':'','MYSQL_ATTR_READ_DEFAULT_FILE':'','MYSQL_ATTR_READ_DEFAULT_GROUP':'','ATTR_AUTOCOMMIT':'','FOURD_ATTR_CHARSET':'','FOURD_ATTR_PREFERRED_IMAGE_TYPES':'','PARAM_LOB':'','PARAM_BOOL':'','PARAM_NULL':'','PARAM_INT':'','PARAM_STR':'','PARAM_STMT':'','PARAM_INPUT_OUTPUT':'','FETCH_LAZY':'','FETCH_ASSOC':'','FETCH_NAMED':'','FETCH_NUM':'','FETCH_BOTH':'','FETCH_OBJ':'','FETCH_BOUND':'','FETCH_COLUMN':'','FETCH_CLASS':'','FETCH_INTO':'','FETCH_FUNC':'','FETCH_GROUP':'','FETCH_UNIQUE':'','FETCH_CLASSTYPE':'','FETCH_SERIALIZE':'','ATTR_PREFETCH':'','ATTR_TIMEOUT':'','ATTR_ERRMODE':'','ATTR_SERVER_VERSION':'','ATTR_CLIENT_VERSION':'','ATTR_SERVER_INFO':'','ATTR_CONNECTION_STATUS':'','ATTR_CASE':'','ATTR_CURSOR_NAME':'','ATTR_CURSOR':'','CURSOR_FWDONLY':'','CURSOR_SCROLL':'','ATTR_DRIVER_NAME':'','ATTR_ORACLE_NULLS':'','ATTR_STATEMENT_CLASS':'','ATTR_FETCH_CATALOG_NAMES':'','ATTR_FETCH_TABLE_NAMES':'','ATTR_STRINGIFY_FETCHES':'','ATTR_MAX_COLUMN_LEN':'','ATTR_EMULATE_PREPARES':'','ERRMODE_SILENT':'','ERRMODE_WARNING':'','ERRMODE_EXCEPTION':'','CASE_NATURAL':'','CASE_LOWER':'','CASE_UPPER':'','NULL_NATURAL':'','NULL_EMPTY_STRING':'','NULL_TO_STRING':'','FETCH_ORI_NEXT':'','FETCH_ORI_PRIOR':'','FETCH_ORI_FIRST':'','FETCH_ORI_LAST':'','FETCH_ORI_REL':'','ERR_NONE':'','PARAM_EVT_ALLOC':'','PARAM_EVT_FREE':'','PARAM_EVT_EXEC_PRE':'','PARAM_EVT_EXEC_POST':'','PARAM_EVT_FETCH_PRE':'','PARAM_EVT_FETCH_POST':'','PARAM_EVT_NORMALIZE':'','MYSQL_ATTR_INIT_COMMAND':'','MYSQL_ATTR_USE_BUFFERED_QUERY':'','MYSQL_ATTR_LOCAL_INFILE':'','MYSQL_ATTR_MAX_BUFFER_SIZE':'','MYSQL_ATTR_DIRECT_QUERY':'','MYSQL_ATTR_FOUND_ROWS':'','MYSQL_ATTR_IGNORE_SPACE':'','MYSQL_ATTR_COMPRESS':'','MYSQL_ATTR_SSL_CA':'','MYSQL_ATTR_SSL_CAPATH':'','MYSQL_ATTR_SSL_CERT':'','MYSQL_ATTR_SSL_CIPHER':'','MYSQL_ATTR_SSL_KEY':'','SQLSRV_TXN_READ_UNCOMMITTED':'','SQLSRV_TXN_READ_COMMITTED':'','SQLSRV_TXN_REPEATABLE_READ':'','SQLSRV_TXN_SNAPSHOT':'','SQLSRV_TXN_SERIALIZABLE':'','SQLSRV_ENCODING_BINARY':'','SQLSRV_ENCODING_SYSTEM':'','SQLSRV_ENCODING_UTF8':'','SQLSRV_ENCODING_DEFAULT':'','SQLSRV_ATTR_QUERY_TIMEOUT':'','SQLSRV_ATTR_DIRECT_QUERY':'',},'methods':{'__construct':{'signature':'string $dsn [, string $username [, string $password [, array $driver_options]]]','return_type':''},'beginTransaction':{'signature':'void | bool','return_type':'bool'},'commit':{'signature':'void | bool','return_type':'bool'},'errorCode':{'signature':'void | mixed','return_type':'mixed'},'errorInfo':{'signature':'void | array','return_type':'array'},'exec':{'signature':'string $statement | int','return_type':'int'},'getAttribute':{'signature':'int $attribute | mixed','return_type':'mixed'},'inTransaction':{'signature':'void | bool','return_type':'bool'},'lastInsertId':{'signature':'[ string $name = NULL] | string','return_type':'string'},'prepare':{'signature':'string $statement [, array $driver_options = array()] | PDOStatement','return_type':'PDOStatement'},'query':{'signature':'string $statement | PDOStatement','return_type':'PDOStatement'},'quote':{'signature':'string $string [, int $parameter_type = PDO::PARAM_STR] | string','return_type':'string'},'rollBack':{'signature':'void | bool','return_type':'bool'},'setAttribute':{'signature':'int $attribute, mixed $value | bool','return_type':'bool'},},'static_methods':{'getAvailableDrivers':{'signature':'void | array','return_type':'array'},},},'pdoexception':{'name':'PDOException','properties': {'errorInfo':{'initializer':'','type':'array'},'code':{'initializer':'','type':'int'},'message':{'initializer':'','type':'string'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'pdostatement':{'name':'PDOStatement','properties': {'queryString':{'initializer':'','type':'string'},},'methods':{'bindColumn':{'signature':'mixed $column, mixed &$param [, int $type [, int $maxlen [, mixed $driverdata]]] | bool','return_type':'bool'},'bindParam':{'signature':'mixed $parameter, mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options]]] | bool','return_type':'bool'},'bindValue':{'signature':'mixed $parameter, mixed $value [, int $data_type = PDO::PARAM_STR] | bool','return_type':'bool'},'closeCursor':{'signature':'void | bool','return_type':'bool'},'columnCount':{'signature':'void | int','return_type':'int'},'debugDumpParams':{'signature':'void | void','return_type':'void'},'errorCode':{'signature':'void | string','return_type':'string'},'errorInfo':{'signature':'void | array','return_type':'array'},'execute':{'signature':'[ array $input_parameters] | bool','return_type':'bool'},'fetch':{'signature':'[ int $fetch_style [, int $cursor_orientation = PDO::FETCH_ORI_NEXT [, int $cursor_offset = 0]]] | mixed','return_type':'mixed'},'fetchAll':{'signature':'[ int $fetch_style [, mixed $fetch_argument [, array $ctor_args = array()]]] | array','return_type':'array'},'fetchColumn':{'signature':'[ int $column_number = 0] | string','return_type':'string'},'fetchObject':{'signature':'[ string $class_name = "stdClass" [, array $ctor_args]] | mixed','return_type':'mixed'},'getAttribute':{'signature':'int $attribute | mixed','return_type':'mixed'},'getColumnMeta':{'signature':'int $column | array','return_type':'array'},'nextRowset':{'signature':'void | bool','return_type':'bool'},'rowCount':{'signature':'void | int','return_type':'int'},'setAttribute':{'signature':'int $attribute, mixed $value | bool','return_type':'bool'},'setFetchMode':{'signature':'int $mode | bool','return_type':'bool'},},},} +let php_builtin['classes']['phar']={'phar':{'name':'Phar','methods':{'addEmptyDir':{'signature':'string $dirname | void','return_type':'void'},'addFile':{'signature':'string $file [, string $localname] | void','return_type':'void'},'addFromString':{'signature':'string $localname, string $contents | void','return_type':'void'},'buildFromDirectory':{'signature':'string $base_dir [, string $regex] | array','return_type':'array'},'buildFromIterator':{'signature':'Iterator $iter [, string $base_directory] | array','return_type':'array'},'compress':{'signature':'int $compression [, string $extension] | object','return_type':'object'},'compressAllFilesBZIP2':{'signature':'void | bool','return_type':'bool'},'compressAllFilesGZ':{'signature':'void | bool','return_type':'bool'},'compressFiles':{'signature':'int $compression | void','return_type':'void'},'__construct':{'signature':'string $fname [, int $flags [, string $alias]]','return_type':''},'convertToData':{'signature':'[ int $format = 9021976 [, int $compression = 9021976 [, string $extension]]] | PharData','return_type':'PharData'},'convertToExecutable':{'signature':'[ int $format = 9021976 [, int $compression = 9021976 [, string $extension]]] | Phar','return_type':'Phar'},'copy':{'signature':'string $oldfile, string $newfile | bool','return_type':'bool'},'count':{'signature':'void | int','return_type':'int'},'decompress':{'signature':'[ string $extension] | object','return_type':'object'},'decompressFiles':{'signature':'void | bool','return_type':'bool'},'delMetadata':{'signature':'void | bool','return_type':'bool'},'delete':{'signature':'string $entry | bool','return_type':'bool'},'extractTo':{'signature':'string $pathto [, string|array $files [, bool $overwrite = false]] | bool','return_type':'bool'},'getMetadata':{'signature':'void | mixed','return_type':'mixed'},'getModified':{'signature':'void | bool','return_type':'bool'},'getSignature':{'signature':'void | array','return_type':'array'},'getStub':{'signature':'void | string','return_type':'string'},'getVersion':{'signature':'void | string','return_type':'string'},'hasMetadata':{'signature':'void | bool','return_type':'bool'},'isBuffering':{'signature':'void | bool','return_type':'bool'},'isCompressed':{'signature':'void | mixed','return_type':'mixed'},'isFileFormat':{'signature':'int $format | bool','return_type':'bool'},'isWritable':{'signature':'void | bool','return_type':'bool'},'offsetExists':{'signature':'string $offset | bool','return_type':'bool'},'offsetGet':{'signature':'string $offset | int','return_type':'int'},'offsetSet':{'signature':'string $offset, string $value | void','return_type':'void'},'offsetUnset':{'signature':'string $offset | bool','return_type':'bool'},'setAlias':{'signature':'string $alias | bool','return_type':'bool'},'setDefaultStub':{'signature':'[ string $index [, string $webindex]] | bool','return_type':'bool'},'setMetadata':{'signature':'mixed $metadata | void','return_type':'void'},'setSignatureAlgorithm':{'signature':'int $sigtype [, string $privatekey] | void','return_type':'void'},'setStub':{'signature':'string $stub [, int $len = -1] | bool','return_type':'bool'},'startBuffering':{'signature':'void | void','return_type':'void'},'stopBuffering':{'signature':'void | void','return_type':'void'},'uncompressAllFiles':{'signature':'void | bool','return_type':'bool'},},'static_methods':{'apiVersion':{'signature':'void | string','return_type':'string'},'canCompress':{'signature':'[ int $type = 0] | bool','return_type':'bool'},'canWrite':{'signature':'void | bool','return_type':'bool'},'createDefaultStub':{'signature':'[ string $indexfile [, string $webindexfile]] | string','return_type':'string'},'getSupportedCompression':{'signature':'void | array','return_type':'array'},'getSupportedSignatures':{'signature':'void | array','return_type':'array'},'interceptFileFuncs':{'signature':'void | void','return_type':'void'},'isValidPharFilename':{'signature':'string $filename [, bool $executable = true] | bool','return_type':'bool'},'loadPhar':{'signature':'string $filename [, string $alias] | bool','return_type':'bool'},'mapPhar':{'signature':'[ string $alias [, int $dataoffset = 0]] | bool','return_type':'bool'},'mount':{'signature':'string $pharpath, string $externalpath | void','return_type':'void'},'mungServer':{'signature':'array $munglist | void','return_type':'void'},'running':{'signature':'[ bool $retphar = true] | string','return_type':'string'},'unlinkArchive':{'signature':'string $archive | bool','return_type':'bool'},'webPhar':{'signature':'[ string $alias [, string $index = "index.php" [, string $f404 [, array $mimetypes [, callable $rewrites]]]]] | void','return_type':'void'},},},'phardata':{'name':'PharData','methods':{'addEmptyDir':{'signature':'string $dirname | void','return_type':'void'},'addFile':{'signature':'string $file [, string $localname] | void','return_type':'void'},'addFromString':{'signature':'string $localname, string $contents | void','return_type':'void'},'buildFromDirectory':{'signature':'string $base_dir [, string $regex] | array','return_type':'array'},'buildFromIterator':{'signature':'Iterator $iter [, string $base_directory] | array','return_type':'array'},'compress':{'signature':'int $compression [, string $extension] | object','return_type':'object'},'compressFiles':{'signature':'int $compression | void','return_type':'void'},'__construct':{'signature':'string $fname [, int $flags [, string $alias]]','return_type':''},'convertToData':{'signature':'[ int $format = 9021976 [, int $compression = 9021976 [, string $extension]]] | PharData','return_type':'PharData'},'convertToExecutable':{'signature':'[ int $format = 9021976 [, int $compression = 9021976 [, string $extension]]] | Phar','return_type':'Phar'},'copy':{'signature':'string $oldfile, string $newfile | bool','return_type':'bool'},'decompress':{'signature':'[ string $extension] | object','return_type':'object'},'decompressFiles':{'signature':'void | bool','return_type':'bool'},'delMetadata':{'signature':'void | bool','return_type':'bool'},'delete':{'signature':'string $entry | bool','return_type':'bool'},'extractTo':{'signature':'string $pathto [, string|array $files [, bool $overwrite = false]] | bool','return_type':'bool'},'isWritable':{'signature':'void | bool','return_type':'bool'},'offsetSet':{'signature':'string $offset, string $value | void','return_type':'void'},'offsetUnset':{'signature':'string $offset | bool','return_type':'bool'},'setAlias':{'signature':'string $alias | bool','return_type':'bool'},'setDefaultStub':{'signature':'[ string $index [, string $webindex]] | bool','return_type':'bool'},'setMetadata':{'signature':'mixed $metadata | void','return_type':'void'},'setSignatureAlgorithm':{'signature':'int $sigtype [, string $privatekey] | void','return_type':'void'},'setStub':{'signature':'string $stub [, int $len = -1] | bool','return_type':'bool'},'compressAllFilesBZIP2':{'signature':'void | bool','return_type':'bool'},'compressAllFilesGZ':{'signature':'void | bool','return_type':'bool'},'count':{'signature':'void | int','return_type':'int'},'getMetadata':{'signature':'void | mixed','return_type':'mixed'},'getModified':{'signature':'void | bool','return_type':'bool'},'getSignature':{'signature':'void | array','return_type':'array'},'getStub':{'signature':'void | string','return_type':'string'},'getVersion':{'signature':'void | string','return_type':'string'},'hasMetadata':{'signature':'void | bool','return_type':'bool'},'isBuffering':{'signature':'void | bool','return_type':'bool'},'isCompressed':{'signature':'void | mixed','return_type':'mixed'},'isFileFormat':{'signature':'int $format | bool','return_type':'bool'},'offsetExists':{'signature':'string $offset | bool','return_type':'bool'},'offsetGet':{'signature':'string $offset | int','return_type':'int'},'startBuffering':{'signature':'void | void','return_type':'void'},'stopBuffering':{'signature':'void | void','return_type':'void'},'uncompressAllFiles':{'signature':'void | bool','return_type':'bool'},},'static_methods':{'apiVersion':{'signature':'void | string','return_type':'string'},'canCompress':{'signature':'[ int $type = 0] | bool','return_type':'bool'},'canWrite':{'signature':'void | bool','return_type':'bool'},'createDefaultStub':{'signature':'[ string $indexfile [, string $webindexfile]] | string','return_type':'string'},'getSupportedCompression':{'signature':'void | array','return_type':'array'},'getSupportedSignatures':{'signature':'void | array','return_type':'array'},'interceptFileFuncs':{'signature':'void | void','return_type':'void'},'isValidPharFilename':{'signature':'string $filename [, bool $executable = true] | bool','return_type':'bool'},'loadPhar':{'signature':'string $filename [, string $alias] | bool','return_type':'bool'},'mapPhar':{'signature':'[ string $alias [, int $dataoffset = 0]] | bool','return_type':'bool'},'mount':{'signature':'string $pharpath, string $externalpath | void','return_type':'void'},'mungServer':{'signature':'array $munglist | void','return_type':'void'},'running':{'signature':'[ bool $retphar = true] | string','return_type':'string'},'unlinkArchive':{'signature':'string $archive | bool','return_type':'bool'},'webPhar':{'signature':'[ string $alias [, string $index = "index.php" [, string $f404 [, array $mimetypes [, callable $rewrites]]]]] | void','return_type':'void'},},},'pharexception':{'name':'PharException','properties': {'message':{'initializer':'','type':'string'},'code':{'initializer':'','type':'int'},'file':{'initializer':'','type':'string'},'line':{'initializer':'','type':'int'},},'methods':{'getMessage':{'signature':'void | string','return_type':'string'},'getPrevious':{'signature':'void | Exception','return_type':'Exception'},'getCode':{'signature':'void | mixed','return_type':'mixed'},'getFile':{'signature':'void | string','return_type':'string'},'getLine':{'signature':'void | int','return_type':'int'},'getTrace':{'signature':'void | array','return_type':'array'},'getTraceAsString':{'signature':'void | string','return_type':'string'},'__toString':{'signature':'void | string','return_type':'string'},'__clone':{'signature':'void | void','return_type':'void'},},},'pharfileinfo':{'name':'PharFileInfo','methods':{'chmod':{'signature':'int $permissions | void','return_type':'void'},'compress':{'signature':'int $compression | bool','return_type':'bool'},'__construct':{'signature':'string $entry','return_type':''},'decompress':{'signature':'void | bool','return_type':'bool'},'delMetadata':{'signature':'void | bool','return_type':'bool'},'getCRC32':{'signature':'void | int','return_type':'int'},'getCompressedSize':{'signature':'void | int','return_type':'int'},'getMetadata':{'signature':'void | mixed','return_type':'mixed'},'getPharFlags':{'signature':'void | int','return_type':'int'},'hasMetadata':{'signature':'void | bool','return_type':'bool'},'isCRCChecked':{'signature':'void | bool','return_type':'bool'},'isCompressed':{'signature':'[ int $compression_type = 9021976] | bool','return_type':'bool'},'isCompressedBZIP2':{'signature':'void | bool','return_type':'bool'},'isCompressedGZ':{'signature':'void | bool','return_type':'bool'},'setCompressedBZIP2':{'signature':'void | bool','return_type':'bool'},'setCompressedGZ':{'signature':'void | bool','return_type':'bool'},'setMetadata':{'signature':'mixed $metadata | void','return_type':'void'},'setUncompressed':{'signature':'void | bool','return_type':'bool'},},},} +let php_builtin['classes']['streams']={'php_user_filter':{'name':'php_user_filter','properties': {'filtername':{'initializer':'','type':''},'params':{'initializer':'','type':''},},'methods':{'filter':{'signature':'resource $in, resource $out, int &$consumed, bool $closing | int','return_type':'int'},'onClose':{'signature':'void | void','return_type':'void'},'onCreate':{'signature':'void | bool','return_type':'bool'},},},} +let php_builtin['classes']['sessions']={'sessionhandler':{'name':'SessionHandler','methods':{'close':{'signature':'void | bool','return_type':'bool'},'destroy':{'signature':'string $session_id | bool','return_type':'bool'},'gc':{'signature':'int $maxlifetime | bool','return_type':'bool'},'open':{'signature':'string $save_path, string $session_id | bool','return_type':'bool'},'read':{'signature':'string $session_id | string','return_type':'string'},'write':{'signature':'string $session_id, string $session_data | bool','return_type':'bool'},},},'sessionhandlerinterface':{'name':'SessionHandlerInterface','methods':{'close':{'signature':'void | bool','return_type':'bool'},'destroy':{'signature':'string $session_id | bool','return_type':'bool'},'gc':{'signature':'string $maxlifetime | bool','return_type':'bool'},'open':{'signature':'string $save_path, string $name | bool','return_type':'bool'},'read':{'signature':'string $session_id | string','return_type':'string'},'write':{'signature':'string $session_id, string $session_data | bool','return_type':'bool'},},},} +let php_builtin['classes']['simplexml']={'simplexmlelement':{'name':'SimpleXMLElement','methods':{'__construct':{'signature':'string $data [, int $options = 0 [, bool $data_is_url = false [, string $ns = "" [, bool $is_prefix = false]]]]','return_type':''},'addAttribute':{'signature':'string $name [, string $value [, string $namespace]] | void','return_type':'void'},'addChild':{'signature':'string $name [, string $value [, string $namespace]] | SimpleXMLElement','return_type':'SimpleXMLElement'},'asXML':{'signature':'[ string $filename] | mixed','return_type':'mixed'},'attributes':{'signature':'[ string $ns = NULL [, bool $is_prefix = false]] | SimpleXMLElement','return_type':'SimpleXMLElement'},'children':{'signature':'[ string $ns [, bool $is_prefix = false]] | SimpleXMLElement','return_type':'SimpleXMLElement'},'count':{'signature':'void | int','return_type':'int'},'getDocNamespaces':{'signature':'[ bool $recursive = false [, bool $from_root = true]] | array','return_type':'array'},'getName':{'signature':'void | string','return_type':'string'},'getNamespaces':{'signature':'[ bool $recursive = false] | array','return_type':'array'},'registerXPathNamespace':{'signature':'string $prefix, string $ns | bool','return_type':'bool'},'__toString':{'signature':'void | string','return_type':'string'},'xpath':{'signature':'string $path | array','return_type':'array'},},},'simplexmliterator':{'name':'SimpleXMLIterator','methods':{'current':{'signature':'void | mixed','return_type':'mixed'},'getChildren':{'signature':'void | SimpleXMLIterator','return_type':'SimpleXMLIterator'},'hasChildren':{'signature':'void | bool','return_type':'bool'},'key':{'signature':'void | mixed','return_type':'mixed'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | bool','return_type':'bool'},'__construct':{'signature':'string $data [, int $options = 0 [, bool $data_is_url = false [, string $ns = "" [, bool $is_prefix = false]]]]','return_type':''},'addAttribute':{'signature':'string $name [, string $value [, string $namespace]] | void','return_type':'void'},'addChild':{'signature':'string $name [, string $value [, string $namespace]] | SimpleXMLElement','return_type':'SimpleXMLElement'},'asXML':{'signature':'[ string $filename] | mixed','return_type':'mixed'},'attributes':{'signature':'[ string $ns = NULL [, bool $is_prefix = false]] | SimpleXMLElement','return_type':'SimpleXMLElement'},'children':{'signature':'[ string $ns [, bool $is_prefix = false]] | SimpleXMLElement','return_type':'SimpleXMLElement'},'count':{'signature':'void | int','return_type':'int'},'getDocNamespaces':{'signature':'[ bool $recursive = false [, bool $from_root = true]] | array','return_type':'array'},'getName':{'signature':'void | string','return_type':'string'},'getNamespaces':{'signature':'[ bool $recursive = false] | array','return_type':'array'},'registerXPathNamespace':{'signature':'string $prefix, string $ns | bool','return_type':'bool'},'__toString':{'signature':'void | string','return_type':'string'},'xpath':{'signature':'string $path | array','return_type':'array'},},},} +let php_builtin['classes']['spl_types']={'splbool':{'name':'SplBool','constants':{'__default':'false','false':'false','true':'true',},'methods':{'getConstList':{'signature':'[ bool $include_default = false] | array','return_type':'array'},},},'splenum':{'name':'SplEnum','constants':{'__default':'null',},'methods':{'getConstList':{'signature':'[ bool $include_default = false] | array','return_type':'array'},'__construct':{'signature':'[ mixed $initial_value [, bool $strict]]','return_type':''},},},'splfloat':{'name':'SplFloat','constants':{'__default':'0',},'methods':{'__construct':{'signature':'[ mixed $initial_value [, bool $strict]]','return_type':''},},},'splint':{'name':'SplInt','constants':{'__default':'0',},'methods':{'__construct':{'signature':'[ mixed $initial_value [, bool $strict]]','return_type':''},},},'splstring':{'name':'SplString','constants':{'__default':'0',},'methods':{'__construct':{'signature':'[ mixed $initial_value [, bool $strict]]','return_type':''},},},'spltype':{'name':'SplType','constants':{'__default':'null',},'methods':{'__construct':{'signature':'[ mixed $initial_value [, bool $strict]]','return_type':''},},},} +let php_builtin['classes']['xmlreader']={'xmlreader':{'name':'XMLReader','constants':{'NONE':'0','ELEMENT':'1','ATTRIBUTE':'2','TEXT':'3','CDATA':'4','ENTITY_REF':'5','ENTITY':'6','PI':'7','COMMENT':'8','DOC':'9','DOC_TYPE':'10','DOC_FRAGMENT':'11','NOTATION':'12','WHITESPACE':'13','SIGNIFICANT_WHITESPACE':'14','END_ELEMENT':'15','END_ENTITY':'16','XML_DECLARATION':'17','LOADDTD':'1','DEFAULTATTRS':'2','VALIDATE':'3','SUBST_ENTITIES':'4',},'properties': {'attributeCount':{'initializer':'','type':'int'},'baseURI':{'initializer':'','type':'string'},'depth':{'initializer':'','type':'int'},'hasAttributes':{'initializer':'','type':'bool'},'hasValue':{'initializer':'','type':'bool'},'isDefault':{'initializer':'','type':'bool'},'isEmptyElement':{'initializer':'','type':'bool'},'localName':{'initializer':'','type':'string'},'name':{'initializer':'','type':'string'},'namespaceURI':{'initializer':'','type':'string'},'nodeType':{'initializer':'','type':'int'},'prefix':{'initializer':'','type':'string'},'value':{'initializer':'','type':'string'},'xmlLang':{'initializer':'','type':'string'},},'methods':{'close':{'signature':'void | bool','return_type':'bool'},'expand':{'signature':'[ DOMNode $basenode] | DOMNode','return_type':'DOMNode'},'getAttribute':{'signature':'string $name | string','return_type':'string'},'getAttributeNo':{'signature':'int $index | string','return_type':'string'},'getAttributeNs':{'signature':'string $localName, string $namespaceURI | string','return_type':'string'},'getParserProperty':{'signature':'int $property | bool','return_type':'bool'},'isValid':{'signature':'void | bool','return_type':'bool'},'lookupNamespace':{'signature':'string $prefix | bool','return_type':'bool'},'moveToAttribute':{'signature':'string $name | bool','return_type':'bool'},'moveToAttributeNo':{'signature':'int $index | bool','return_type':'bool'},'moveToAttributeNs':{'signature':'string $localName, string $namespaceURI | bool','return_type':'bool'},'moveToElement':{'signature':'void | bool','return_type':'bool'},'moveToFirstAttribute':{'signature':'void | bool','return_type':'bool'},'moveToNextAttribute':{'signature':'void | bool','return_type':'bool'},'next':{'signature':'[ string $localname] | bool','return_type':'bool'},'open':{'signature':'string $URI [, string $encoding [, int $options = 0]] | bool','return_type':'bool'},'read':{'signature':'void | bool','return_type':'bool'},'readInnerXML':{'signature':'void | string','return_type':'string'},'readOuterXML':{'signature':'void | string','return_type':'string'},'readString':{'signature':'void | string','return_type':'string'},'setParserProperty':{'signature':'int $property, bool $value | bool','return_type':'bool'},'setRelaxNGSchema':{'signature':'string $filename | bool','return_type':'bool'},'setRelaxNGSchemaSource':{'signature':'string $source | bool','return_type':'bool'},'setSchema':{'signature':'string $filename | bool','return_type':'bool'},'xml':{'signature':'string $source [, string $encoding [, int $options = 0]] | bool','return_type':'bool'},},},} +let php_builtin['classes']['xmlwriter'] = {'xmlwriter':{'name':'XMLWriter','methods':{'endAttribute':{'signature':'void | bool','return_type':'bool'},'endCData':{'signature':'void | bool','return_type':'bool'},'endComment':{'signature':'void | bool','return_type':'bool'},'endDocument':{'signature':'void | bool','return_type':'bool'},'endDTDAttlist':{'signature':'void | bool','return_type':'bool'},'endDTDElement':{'signature':'void | bool','return_type':'bool'},'endDTDEntity':{'signature':'void | bool','return_type':'bool'},'endDTD':{'signature':'void | bool','return_type':'bool'},'endElement':{'signature':'void | bool','return_type':'bool'},'endPI':{'signature':'void | bool','return_type':'bool'},'flush':{'signature':'[bool $empty = true] | bool','return_type':'bool'},'fullEndElement':{'signature':'void | bool','return_type':'bool'},'openMemory':{'signature':'void | bool','return_type':'bool'},'openURI':{'signature':'string $uri | bool','return_type':'bool'},'outputMemory':{'signature':'[bool $flush = true] | bool','return_type':'bool'},'setIndentString':{'signature':'string $indentString | bool','return_type':'bool'},'setIndent':{'signature':'bool $indent | bool','return_type':'bool'},'startAttributeNS':{'signature':'string $prefix, string $name, string $uri | bool','return_type':'bool'},'startAttribute':{'signature':'string $name | bool','return_type':'bool'},'startCData':{'signature':'void | bool','return_type':'bool'},'startComment':{'signature':'void | bool','return_type':'bool'},'startDocument':{'signature':'[string $version = 1.0 [, string $encoding = NULL [, string $standalone ]]] | bool','return_type':'bool'},'startDTDAttlist':{'signature':'string $name | bool','return_type':'bool'},'startDTDElement':{'signature':'string $qualifiedName | bool','return_type':'bool'},'startDTDEntity':{'signature':'string $name, bool $isparam | bool','return_type':'bool'},'startDTD':{'signature':'string $qualifiedName [, string $publicId [, string $systemId ]] | bool','return_type':'bool'},'startElementNS':{'signature':'string $prefix, string $name, string $uri | bool','return_type':'bool'},'startElement':{'signature':'string $name | bool','return_type':'bool'},'startPI':{'signature':'string $target | bool','return_type':'bool'},'text':{'signature':'string $content | bool','return_type':'bool'},'writeAttributeNS':{'signature':'string $prefix, string $name, string $uri, string $content | bool','return_type':'bool'},'writeAttribute':{'signature':'string $name, string $value | bool','return_type':'bool'},'writeCData':{'signature':'string $content | bool','return_type':'bool'},'writeComment':{'signature':'string $content | bool','return_type':'bool'},'writeDTDAttlist':{'signature':'string $name, string $content | bool','return_type':'bool'},'writeDTDElement':{'signature':'string $name, string $content | bool','return_type':'bool'},'writeDTDEntity':{'signature':'string $name, string $content, bool $pe, string $pubid, string $sysid, string $ndataid | bool','return_type':'bool'},'writeDTD':{'signature':'string $name [, string $publicId [, string $systemId [, string $subset ]]] | bool','return_type':'bool'},'writeElementNS':{'signature':'string $prefix, string $name, string $uri [, string $content ] | bool','return_type':'bool'},'writeElement':{'signature':'string $name [, string $content ] | bool','return_type':'bool'},'writePI':{'signature':'string $target, string $content | bool','return_type':'bool'},'writeRaw':{'signature':'string $content | bool','return_type':'bool'},},},} +let php_builtin['classes']['zip']={'ziparchive':{'name':'ZipArchive','properties': {'status':{'initializer':'','type':'int'},'statusSys':{'initializer':'','type':'int'},'numFiles':{'initializer':'','type':'int'},'filename':{'initializer':'','type':'string'},'comment':{'initializer':'','type':'string'},},'methods':{'addEmptyDir':{'signature':'string $dirname | bool','return_type':'bool'},'addFile':{'signature':'string $filename [, string $localname = NULL [, int $start = 0 [, int $length = 0]]] | bool','return_type':'bool'},'addFromString':{'signature':'string $localname, string $contents | bool','return_type':'bool'},'addGlob':{'signature':'string $pattern [, int $flags = 0 [, array $options = array()]] | bool','return_type':'bool'},'addPattern':{'signature':'string $pattern [, string $path = ''.'' [, array $options = array()]] | bool','return_type':'bool'},'close':{'signature':'void | bool','return_type':'bool'},'deleteIndex':{'signature':'int $index | bool','return_type':'bool'},'deleteName':{'signature':'string $name | bool','return_type':'bool'},'extractTo':{'signature':'string $destination [, mixed $entries] | bool','return_type':'bool'},'getArchiveComment':{'signature':'[ int $flags] | string','return_type':'string'},'getCommentIndex':{'signature':'int $index [, int $flags] | string','return_type':'string'},'getCommentName':{'signature':'string $name [, int $flags] | string','return_type':'string'},'getFromIndex':{'signature':'int $index [, int $length = 0 [, int $flags]] | string','return_type':'string'},'getFromName':{'signature':'string $name [, int $length = 0 [, int $flags]] | string','return_type':'string'},'getNameIndex':{'signature':'int $index [, int $flags] | string','return_type':'string'},'getStatusString':{'signature':'void | string','return_type':'string'},'getStream':{'signature':'string $name | resource','return_type':'resource'},'locateName':{'signature':'string $name [, int $flags] | int','return_type':'int'},'open':{'signature':'string $filename [, int $flags] | mixed','return_type':'mixed'},'renameIndex':{'signature':'int $index, string $newname | bool','return_type':'bool'},'renameName':{'signature':'string $name, string $newname | bool','return_type':'bool'},'setArchiveComment':{'signature':'string $comment | bool','return_type':'bool'},'setCommentIndex':{'signature':'int $index, string $comment | bool','return_type':'bool'},'setCommentName':{'signature':'string $name, string $comment | bool','return_type':'bool'},'statIndex':{'signature':'int $index [, int $flags] | array','return_type':'array'},'statName':{'signature':'string $name [, int $flags] | array','return_type':'array'},'unchangeAll':{'signature':'void | bool','return_type':'bool'},'unchangeArchive':{'signature':'void | bool','return_type':'bool'},'unchangeIndex':{'signature':'int $index | bool','return_type':'bool'},'unchangeName':{'signature':'string $name | bool','return_type':'bool'},},},} +let php_builtin['interfaces']['predefined_interfaces_and_classes']={'arrayaccess':{'name':'ArrayAccess','methods':{'offsetExists':{'signature':'mixed $offset | boolean','return_type':'boolean'},'offsetGet':{'signature':'mixed $offset | mixed','return_type':'mixed'},'offsetSet':{'signature':'mixed $offset, mixed $value | void','return_type':'void'},'offsetUnset':{'signature':'mixed $offset | void','return_type':'void'},},},'iterator':{'name':'Iterator','methods':{'current':{'signature':'void | mixed','return_type':'mixed'},'key':{'signature':'void | scalar','return_type':'scalar'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | boolean','return_type':'boolean'},},},'iteratoraggregate':{'name':'IteratorAggregate','methods':{'getIterator':{'signature':'void | Traversable','return_type':'Traversable'},},},'serializable':{'name':'Serializable','methods':{'serialize':{'signature':'void | string','return_type':'string'},'unserialize':{'signature':'string $serialized | void','return_type':'void'},},},'traversable':{'name':'Traversable',},} +let php_builtin['interfaces']['spl']={'countable':{'name':'Countable','methods':{'count':{'signature':'void | int','return_type':'int'},},},'outeriterator':{'name':'OuterIterator','methods':{'getInnerIterator':{'signature':'void | Iterator','return_type':'Iterator'},'current':{'signature':'void | mixed','return_type':'mixed'},'key':{'signature':'void | scalar','return_type':'scalar'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | boolean','return_type':'boolean'},},},'recursiveiterator':{'name':'RecursiveIterator','methods':{'getChildren':{'signature':'void | RecursiveIterator','return_type':'RecursiveIterator'},'hasChildren':{'signature':'void | bool','return_type':'bool'},'current':{'signature':'void | mixed','return_type':'mixed'},'key':{'signature':'void | scalar','return_type':'scalar'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | boolean','return_type':'boolean'},},},'seekableiterator':{'name':'SeekableIterator','methods':{'seek':{'signature':'int $position | void','return_type':'void'},'current':{'signature':'void | mixed','return_type':'mixed'},'key':{'signature':'void | scalar','return_type':'scalar'},'next':{'signature':'void | void','return_type':'void'},'rewind':{'signature':'void | void','return_type':'void'},'valid':{'signature':'void | boolean','return_type':'boolean'},},},'splobserver':{'name':'SplObserver','methods':{'update':{'signature':'SplSubject $subject | void','return_type':'void'},},},'splsubject':{'name':'SplSubject','methods':{'attach':{'signature':'SplObserver $observer | void','return_type':'void'},'detach':{'signature':'SplObserver $observer | void','return_type':'void'},'notify':{'signature':'void | void','return_type':'void'},},},} +let php_builtin['interfaces']['date_time']={'datetimeinterface':{'name':'DateTimeInterface','methods':{'diff':{'signature':'DateTimeInterface $datetime2 [, bool $absolute = false] | DateInterval','return_type':'DateInterval'},'format':{'signature':'string $format | string','return_type':'string'},'getOffset':{'signature':'void | int','return_type':'int'},'getTimestamp':{'signature':'void | int','return_type':'int'},'getTimezone':{'signature':'void | DateTimeZone','return_type':'DateTimeZone'},'__wakeup':{'signature':'void','return_type':''},},},} +let php_builtin['interfaces']['json']={'jsonserializable':{'name':'JsonSerializable','methods':{'jsonSerialize':{'signature':'void | mixed','return_type':'mixed'},},},} +let php_builtin['constants']['common']={'TRUE':'','FALSE':'','NULL':'','E_NOTICE':'','E_DEPRECATED':'','E_RECOVERABLE_ERROR':'','E_ALL':'','E_STRICT':'','E_WARNING':'','E_ERROR':'','E_PARSE':'','E_CORE_ERROR':'','E_CORE_WARNING':'','E_COMPILE_ERROR':'','E_COMPILE_WARNING':'','E_USER_ERROR':'','E_USER_WARNING':'','E_USER_NOTICE':'','E_USER_DEPRECATED':'','__COMPILER_HALT_OFFSET__':'','__FILE__':'','__LINE__':'','__DIR__':'','__FUNCTION__':'','__CLASS__':'','__TRAIT__':'','__METHOD__':'','__NAMESPACE__':'',} +let php_builtin['constants']['arrays']={'CASE_LOWER':'','CASE_UPPER':'','SORT_ASC':'','SORT_DESC':'','SORT_REGULAR':'','SORT_NUMERIC':'','SORT_STRING':'','SORT_LOCALE_STRING':'','SORT_NATURAL':'','SORT_FLAG_CASE':'','COUNT_NORMAL':'','COUNT_RECURSIVE':'','EXTR_OVERWRITE':'','EXTR_SKIP':'','EXTR_PREFIX_SAME':'','EXTR_PREFIX_ALL':'','EXTR_PREFIX_INVALID':'','EXTR_PREFIX_IF_EXISTS':'','EXTR_IF_EXISTS':'','EXTR_REFS':'',} +let php_builtin['constants']['calendar']={'CAL_GREGORIAN':'','CAL_JULIAN':'','CAL_JEWISH':'','CAL_FRENCH':'','CAL_NUM_CALS':'','CAL_DOW_DAYNO':'','CAL_DOW_SHORT':'','CAL_DOW_LONG':'','CAL_MONTH_GREGORIAN_SHORT':'','CAL_MONTH_GREGORIAN_LONG':'','CAL_MONTH_JULIAN_SHORT':'','CAL_MONTH_JULIAN_LONG':'','CAL_MONTH_JEWISH':'','CAL_MONTH_FRENCH':'','CAL_EASTER_DEFAULT':'','CAL_EASTER_ROMAN':'','CAL_EASTER_ALWAYS_GREGORIAN':'','CAL_EASTER_ALWAYS_JULIAN':'','CAL_JEWISH_ADD_ALAFIM_GERESH':'','CAL_JEWISH_ADD_ALAFIM':'','CAL_JEWISH_ADD_GERESHAYIM':'',} +let php_builtin['constants']['curl']={'CURLOPT_POSTFIELDS':'','CURLOPT_CAINFO':'','CURLOPT_AUTOREFERER':'','CURLOPT_COOKIESESSION':'','CURLOPT_DNS_USE_GLOBAL_CACHE':'','CURLOPT_DNS_CACHE_TIMEOUT':'','CURLOPT_FTP_SSL':'','CURLFTPSSL_TRY':'','CURLFTPSSL_ALL':'','CURLFTPSSL_CONTROL':'','CURLFTPSSL_NONE':'','CURLOPT_PRIVATE':'','CURLOPT_FTPSSLAUTH':'','CURLOPT_PORT':'','CURLOPT_FILE':'','CURLOPT_INFILE':'','CURLOPT_INFILESIZE':'','CURLOPT_URL':'','CURLOPT_PROXY':'','CURLOPT_VERBOSE':'','CURLOPT_HEADER':'','CURLOPT_HTTPHEADER':'','CURLOPT_NOPROGRESS':'','CURLOPT_NOBODY':'','CURLOPT_FAILONERROR':'','CURLOPT_UPLOAD':'','CURLOPT_POST':'','CURLOPT_FTPLISTONLY':'','CURLOPT_FTPAPPEND':'','CURLOPT_FTP_CREATE_MISSING_DIRS':'','CURLOPT_NETRC':'','CURLOPT_FOLLOWLOCATION':'','CURLOPT_FTPASCII':'','CURLOPT_PUT':'','CURLOPT_MUTE':'','CURLOPT_USERPWD':'','CURLOPT_PROXYUSERPWD':'','CURLOPT_RANGE':'','CURLOPT_TIMEOUT':'','CURLOPT_TIMEOUT_MS':'','CURLOPT_TCP_NODELAY':'','CURLOPT_PROGRESSFUNCTION':'','CURLOPT_REFERER':'','CURLOPT_USERAGENT':'','CURLOPT_FTPPORT':'','CURLOPT_FTP_USE_EPSV':'','CURLOPT_LOW_SPEED_LIMIT':'','CURLOPT_LOW_SPEED_TIME':'','CURLOPT_RESUME_FROM':'','CURLOPT_COOKIE':'','CURLOPT_SSLCERT':'','CURLOPT_SSLCERTPASSWD':'','CURLOPT_WRITEHEADER':'','CURLOPT_SSL_VERIFYHOST':'','CURLOPT_COOKIEFILE':'','CURLOPT_SSLVERSION':'','CURLOPT_TIMECONDITION':'','CURLOPT_TIMEVALUE':'','CURLOPT_CUSTOMREQUEST':'','CURLOPT_STDERR':'','CURLOPT_TRANSFERTEXT':'','CURLOPT_RETURNTRANSFER':'','CURLOPT_QUOTE':'','CURLOPT_POSTQUOTE':'','CURLOPT_INTERFACE':'','CURLOPT_KRB4LEVEL':'','CURLOPT_HTTPPROXYTUNNEL':'','CURLOPT_FILETIME':'','CURLOPT_WRITEFUNCTION':'','CURLOPT_READFUNCTION':'','CURLOPT_PASSWDFUNCTION':'','CURLOPT_HEADERFUNCTION':'','CURLOPT_MAXREDIRS':'','CURLOPT_MAXCONNECTS':'','CURLOPT_CLOSEPOLICY':'','CURLOPT_FRESH_CONNECT':'','CURLOPT_FORBID_REUSE':'','CURLOPT_RANDOM_FILE':'','CURLOPT_EGDSOCKET':'','CURLOPT_CONNECTTIMEOUT':'','CURLOPT_CONNECTTIMEOUT_MS':'','CURLOPT_SSL_VERIFYPEER':'','CURLOPT_CAPATH':'','CURLOPT_COOKIEJAR':'','CURLOPT_SSL_CIPHER_LIST':'','CURLOPT_BINARYTRANSFER':'','CURLOPT_NOSIGNAL':'','CURLOPT_PROXYTYPE':'','CURLOPT_BUFFERSIZE':'','CURLOPT_HTTPGET':'','CURLOPT_HTTP_VERSION':'','CURLOPT_SSLKEY':'','CURLOPT_SSLKEYTYPE':'','CURLOPT_SSLKEYPASSWD':'','CURLOPT_SSLENGINE':'','CURLOPT_SSLENGINE_DEFAULT':'','CURLOPT_SSLCERTTYPE':'','CURLOPT_CRLF':'','CURLOPT_ENCODING':'','CURLOPT_PROXYPORT':'','CURLOPT_UNRESTRICTED_AUTH':'','CURLOPT_FTP_USE_EPRT':'','CURLOPT_HTTP200ALIASES':'','CURLOPT_HTTPAUTH':'','CURLAUTH_BASIC':'','CURLAUTH_DIGEST':'','CURLAUTH_GSSNEGOTIATE':'','CURLAUTH_NTLM':'','CURLAUTH_ANY':'','CURLAUTH_ANYSAFE':'','CURLOPT_PROXYAUTH':'','CURLOPT_MAX_RECV_SPEED_LARGE':'','CURLOPT_MAX_SEND_SPEED_LARGE':'','CURLCLOSEPOLICY_LEAST_RECENTLY_USED':'','CURLCLOSEPOLICY_LEAST_TRAFFIC':'','CURLCLOSEPOLICY_SLOWEST':'','CURLCLOSEPOLICY_CALLBACK':'','CURLCLOSEPOLICY_OLDEST':'','CURLINFO_PRIVATE':'','CURLINFO_EFFECTIVE_URL':'','CURLINFO_HTTP_CODE':'','CURLINFO_HEADER_OUT':'','CURLINFO_HEADER_SIZE':'','CURLINFO_REQUEST_SIZE':'','CURLINFO_TOTAL_TIME':'','CURLINFO_NAMELOOKUP_TIME':'','CURLINFO_CONNECT_TIME':'','CURLINFO_PRETRANSFER_TIME':'','CURLINFO_SIZE_UPLOAD':'','CURLINFO_SIZE_DOWNLOAD':'','CURLINFO_SPEED_DOWNLOAD':'','CURLINFO_SPEED_UPLOAD':'','CURLINFO_FILETIME':'','CURLINFO_SSL_VERIFYRESULT':'','CURLINFO_CONTENT_LENGTH_DOWNLOAD':'','CURLINFO_CONTENT_LENGTH_UPLOAD':'','CURLINFO_STARTTRANSFER_TIME':'','CURLINFO_CONTENT_TYPE':'','CURLINFO_REDIRECT_TIME':'','CURLINFO_REDIRECT_COUNT':'','CURL_TIMECOND_IFMODSINCE':'','CURL_TIMECOND_IFUNMODSINCE':'','CURL_TIMECOND_LASTMOD':'','CURL_VERSION_IPV6':'','CURL_VERSION_KERBEROS4':'','CURL_VERSION_SSL':'','CURL_VERSION_LIBZ':'','CURLVERSION_NOW':'','CURLE_OK':'','CURLE_UNSUPPORTED_PROTOCOL':'','CURLE_FAILED_INIT':'','CURLE_URL_MALFORMAT':'','CURLE_URL_MALFORMAT_USER':'','CURLE_COULDNT_RESOLVE_PROXY':'','CURLE_COULDNT_RESOLVE_HOST':'','CURLE_COULDNT_CONNECT':'','CURLE_FTP_WEIRD_SERVER_REPLY':'','CURLE_FTP_ACCESS_DENIED':'','CURLE_FTP_USER_PASSWORD_INCORRECT':'','CURLE_FTP_WEIRD_PASS_REPLY':'','CURLE_FTP_WEIRD_USER_REPLY':'','CURLE_FTP_WEIRD_PASV_REPLY':'','CURLE_FTP_WEIRD_227_FORMAT':'','CURLE_FTP_CANT_GET_HOST':'','CURLE_FTP_CANT_RECONNECT':'','CURLE_FTP_COULDNT_SET_BINARY':'','CURLE_PARTIAL_FILE':'','CURLE_FTP_COULDNT_RETR_FILE':'','CURLE_FTP_WRITE_ERROR':'','CURLE_FTP_QUOTE_ERROR':'','CURLE_HTTP_NOT_FOUND':'','CURLE_WRITE_ERROR':'','CURLE_MALFORMAT_USER':'','CURLE_FTP_COULDNT_STOR_FILE':'','CURLE_READ_ERROR':'','CURLE_OUT_OF_MEMORY':'','CURLE_OPERATION_TIMEOUTED':'','CURLE_FTP_COULDNT_SET_ASCII':'','CURLE_FTP_PORT_FAILED':'','CURLE_FTP_COULDNT_USE_REST':'','CURLE_FTP_COULDNT_GET_SIZE':'','CURLE_HTTP_RANGE_ERROR':'','CURLE_HTTP_POST_ERROR':'','CURLE_SSL_CONNECT_ERROR':'','CURLE_FTP_BAD_DOWNLOAD_RESUME':'','CURLE_FILE_COULDNT_READ_FILE':'','CURLE_LDAP_CANNOT_BIND':'','CURLE_LDAP_SEARCH_FAILED':'','CURLE_LIBRARY_NOT_FOUND':'','CURLE_FUNCTION_NOT_FOUND':'','CURLE_ABORTED_BY_CALLBACK':'','CURLE_BAD_FUNCTION_ARGUMENT':'','CURLE_BAD_CALLING_ORDER':'','CURLE_HTTP_PORT_FAILED':'','CURLE_BAD_PASSWORD_ENTERED':'','CURLE_TOO_MANY_REDIRECTS':'','CURLE_UNKNOWN_TELNET_OPTION':'','CURLE_TELNET_OPTION_SYNTAX':'','CURLE_OBSOLETE':'','CURLE_SSL_PEER_CERTIFICATE':'','CURLE_GOT_NOTHING':'','CURLE_SSL_ENGINE_NOTFOUND':'','CURLE_SSL_ENGINE_SETFAILED':'','CURLE_SEND_ERROR':'','CURLE_RECV_ERROR':'','CURLE_SHARE_IN_USE':'','CURLE_SSL_CERTPROBLEM':'','CURLE_SSL_CIPHER':'','CURLE_SSL_CACERT':'','CURLE_BAD_CONTENT_ENCODING':'','CURLE_LDAP_INVALID_URL':'','CURLE_FILESIZE_EXCEEDED':'','CURLE_FTP_SSL_FAILED':'','CURLFTPAUTH_DEFAULT':'','CURLFTPAUTH_SSL':'','CURLFTPAUTH_TLS':'','CURLPROXY_HTTP':'','CURLPROXY_SOCKS5':'','CURL_NETRC_OPTIONAL':'','CURL_NETRC_IGNORED':'','CURL_NETRC_REQUIRED':'','CURL_HTTP_VERSION_NONE':'','CURL_HTTP_VERSION_1_0':'','CURL_HTTP_VERSION_1_1':'','CURLM_CALL_MULTI_PERFORM':'','CURLM_OK':'','CURLM_BAD_HANDLE':'','CURLM_BAD_EASY_HANDLE':'','CURLM_OUT_OF_MEMORY':'','CURLM_INTERNAL_ERROR':'','CURLMSG_DONE':'','CURLOPT_KEYPASSWD':'','CURLOPT_SSH_AUTH_TYPES':'','CURLOPT_SSH_HOST_PUBLIC_KEY_MD5':'','CURLOPT_SSH_PRIVATE_KEYFILE':'','CURLOPT_SSH_PUBLIC_KEYFILE':'','CURLMOPT_PIPELINING':'','CURLMOPT_MAXCONNECTS':'','CURLSSH_AUTH_ANY':'','CURLSSH_AUTH_DEFAULT':'','CURLSSH_AUTH_HOST':'','CURLSSH_AUTH_KEYBOARD':'','CURLSSH_AUTH_NONE':'','CURLSSH_AUTH_PASSWORD':'','CURLSSH_AUTH_PUBLICKEY':'','CURL_WRAPPERS_ENABLED':'','CURLPAUSE_ALL':'','CURLPAUSE_CONT':'','CURLPAUSE_RECV':'','CURLPAUSE_RECV_CONT':'','CURLPAUSE_SEND':'','CURLPAUSE_SEND_CONT':'','CURLM_XXX':'','CURLOPT_CERTINFO':'','CURLOPT_CONNECT_ONLY':'','CURLINFO_':'','CURLOPT_PROTOCOLS':'','CURLOPT_REDIR_PROTOCOLS':'','CURLOPT_IPRESOLVE':'','CURL_IPRESOLVE_WHATEVER':'','CURL_IPRESOLVE_V4':'','CURL_IPRESOLVE_V6':'','CURLOPT_SHARE':'','CURLSHOPT_SHARE':'','CURLSHOPT_UNSHARE':'','CURL_LOCK_DATA_COOKIE':'','CURL_LOCK_DATA_DNS':'','CURL_LOCK_DATA_SSL_SESSION':'',} +let php_builtin['constants']['date_time']={'DATE_ATOM':'','DATE_COOKIE':'','DATE_ISO8601':'','DATE_RFC822':'','DATE_RFC850':'','DATE_RFC1036':'','DATE_RFC1123':'','DATE_RFC2822':'','DATE_RFC3339':'','DATE_RSS':'','DATE_W3C':'','SUNFUNCS_RET_TIMESTAMP':'','SUNFUNCS_RET_STRING':'','SUNFUNCS_RET_DOUBLE':'','LC_TIME':'',} +let php_builtin['constants']['libxml']={'LIBXML_ERR_WARNING':'','LIBXML_ERR_ERROR':'','LIBXML_ERR_FATAL':'','LIBXML_NONET':'','LIBXML_COMPACT':'','LIBXML_DTDATTR':'','LIBXML_DTDLOAD':'','LIBXML_DTDVALID':'','LIBXML_HTML_NOIMPLIED':'','LIBXML_HTML_NODEFDTD':'','LIBXML_NOBLANKS':'','LIBXML_NOCDATA':'','LIBXML_NOEMPTYTAG':'','LIBXML_NOENT':'','LIBXML_NOERROR':'','LIBXML_NOWARNING':'','LIBXML_NOXMLDECL':'','LIBXML_NSCLEAN':'','LIBXML_PARSEHUGE':'','LIBXML_PEDANTIC':'','LIBXML_XINCLUDE':'','LIBXML_ERR_NONE':'','LIBXML_VERSION':'','LIBXML_DOTTED_VERSION':'','LIBXML_SCHEMA_CREATE':'',} +let php_builtin['constants']['mysqli']={'MYSQLI_REPORT_OFF':'','MYSQLI_REPORT_ALL':'','MYSQLI_REPORT_STRICT':'','MYSQLI_REPORT_ERROR':'','MYSQLI_REPORT_INDEX':'','MYSQLI_ASSOC':'','MYSQLI_NUM':'','MYSQLI_BOTH':'','PHP_INT_MAX':'','MYSQLI_READ_DEFAULT_GROUP':'','MYSQLI_READ_DEFAULT_FILE':'','MYSQLI_OPT_CONNECT_TIMEOUT':'','MYSQLI_OPT_LOCAL_INFILE':'','MYSQLI_INIT_COMMAND':'','MYSQLI_CLIENT_SSL':'','MYSQLI_CLIENT_COMPRESS':'','MYSQLI_CLIENT_INTERACTIVE':'','MYSQLI_CLIENT_IGNORE_SPACE':'','MYSQLI_CLIENT_NO_SCHEMA':'','MYSQLI_CLIENT_MULTI_QUERIES':'','MYSQLI_STORE_RESULT':'','MYSQLI_USE_RESULT':'','MYSQLI_NOT_NULL_FLAG':'','MYSQLI_PRI_KEY_FLAG':'','MYSQLI_UNIQUE_KEY_FLAG':'','MYSQLI_MULTIPLE_KEY_FLAG':'','MYSQLI_BLOB_FLAG':'','MYSQLI_UNSIGNED_FLAG':'','MYSQLI_ZEROFILL_FLAG':'','MYSQLI_AUTO_INCREMENT_FLAG':'','MYSQLI_TIMESTAMP_FLAG':'','MYSQLI_SET_FLAG':'','MYSQLI_NUM_FLAG':'','MYSQLI_PART_KEY_FLAG':'','MYSQLI_GROUP_FLAG':'','MYSQLI_TYPE_DECIMAL':'','MYSQLI_TYPE_NEWDECIMAL':'','MYSQLI_TYPE_BIT':'','MYSQLI_TYPE_TINY':'','MYSQLI_TYPE_SHORT':'','MYSQLI_TYPE_LONG':'','MYSQLI_TYPE_FLOAT':'','MYSQLI_TYPE_DOUBLE':'','MYSQLI_TYPE_NULL':'','MYSQLI_TYPE_TIMESTAMP':'','MYSQLI_TYPE_LONGLONG':'','MYSQLI_TYPE_INT24':'','MYSQLI_TYPE_DATE':'','MYSQLI_TYPE_TIME':'','MYSQLI_TYPE_DATETIME':'','MYSQLI_TYPE_YEAR':'','MYSQLI_TYPE_NEWDATE':'','MYSQLI_TYPE_INTERVAL':'','MYSQLI_TYPE_ENUM':'','MYSQLI_TYPE_SET':'','MYSQLI_TYPE_TINY_BLOB':'','MYSQLI_TYPE_MEDIUM_BLOB':'','MYSQLI_TYPE_LONG_BLOB':'','MYSQLI_TYPE_BLOB':'','MYSQLI_TYPE_VAR_STRING':'','MYSQLI_TYPE_STRING':'','MYSQLI_TYPE_CHAR':'','MYSQLI_TYPE_GEOMETRY':'','MYSQLI_NEED_DATA':'','MYSQLI_NO_DATA':'','MYSQLI_DATA_TRUNCATED':'','MYSQLI_ENUM_FLAG':'','MYSQLI_BINARY_FLAG':'','MYSQLI_CURSOR_TYPE_FOR_UPDATE':'','MYSQLI_CURSOR_TYPE_NO_CURSOR':'','MYSQLI_CURSOR_TYPE_READ_ONLY':'','MYSQLI_CURSOR_TYPE_SCROLLABLE':'','MYSQLI_STMT_ATTR_CURSOR_TYPE':'','MYSQLI_STMT_ATTR_PREFETCH_ROWS':'','MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH':'','MYSQLI_SET_CHARSET_NAME':'','MYSQLI_DEBUG_TRACE_ENABLED':'','MYSQLI_SERVER_QUERY_NO_GOOD_INDEX_USED':'','MYSQLI_SERVER_QUERY_NO_INDEX_USED':'','MYSQLI_REFRESH_GRANT':'','MYSQLI_REFRESH_LOG':'','MYSQLI_REFRESH_TABLES':'','MYSQLI_REFRESH_HOSTS':'','MYSQLI_REFRESH_STATUS':'','MYSQLI_REFRESH_THREADS':'','MYSQLI_REFRESH_SLAVE':'','MYSQLI_REFRESH_MASTER':'','MYSQLI_TRANS_COR_AND_CHAIN':'','MYSQLI_TRANS_COR_AND_NO_CHAIN':'','MYSQLI_TRANS_COR_RELEASE':'','MYSQLI_TRANS_COR_NO_RELEASE':'','MYSQL_READ_DEFAULT_FILE':'','MYSQLI_SERVER_PUBLIC_KEY':'','MYSQLI_NO_CHANGE_USER_ON_PCONNECT':'','MYSQLI_ASYNC':'','MYSQLI_OPT_INT_AND_FLOAT_NATIVE':'','MYSQLI_CLIENT_FOUND_ROWS':'','MULTI_STATEMENT':'','MYSQLI_RPL_MASTER':'','MYSQLI_RPL_SLAVE':'','MYSQLI_RPL_ADMIN':'',} +let php_builtin['constants']['spl']={'READ_AHEAD':'','MIT_NEED_ALL':'','MIT_KEYS_ASSOC':'','CALL_TOSTRING':'','CATCH_GET_CHILD':'','RIT_LEAVES_ONLY':'','LOCK_SH':'','LOCK_EX':'','LOCK_UN':'','LOCK_NB':'','SEEK_SET':'','SEEK_CUR':'','SEEK_END':'','PHP_INT_MAX':'',} +let php_builtin['constants']['unknow']={'PHP_INI_ALL':'','PHP_INI_PERDIR':'','PHP_INI_SYSTEM':'','PHP_INI_USER':'','COUNTER_FLAG_PERSIST':'','COUNTER_FLAG_SAVE':'','COUNTER_FLAG_NO_OVERWRITE':'','COUNTER_META_NAME':'','COUNTER_META_IS_PERISTENT':'','COUNTER_RESET_NEVER':'','COUNTER_RESET_PER_LOAD':'','COUNTER_RESET_PER_REQUEST':'','PDO_PLACEHOLDER_NAMED':'','PDO_PLACEHOLDER_POSITIONAL':'','PDO_PLACEHOLDER_NONE':'','PDO_CASE_NATURAL':'','PDO_CASE_UPPER':'','PDO_CASE_LOWER':'','PDO_ATTR_CASE':'','PHP_COUNTER_API':'','PHPAPI':'','COMPILE_DL_COUNTER':'','ZEND_GET_MODULE':'','HAVE_COUNTER':'','COUNTER_G':'','TSRMLS_DC':'','TSRMLS_FETCH':'','STANDARD_MODULE_HEADER':'','STANDARD_MODULE_HEADER_EX':'','STANDARD_MODULE_PROPERTIES':'','STANDARD_MODULE_PROPERTIES_EX':'','ZEND_MODULE_API_NO':'','ZEND_DEBUG':'','USING_ZTS':'','NO_VERSION_YET':'','NO_MODULE_GLOBALS':'','PHP_MODULE_GLOBALS':'','IGNORE_PATH':'','USE_PATH':'','IGNORE_URL':'','IGNORE_URL_WIN':'','ENFORCE_SAFE_MODE':'','REPORT_ERRORS':'','STREAM_MUST_SEEK':'','STREAM_WILL_CAST':'',} +let php_builtin['constants']['directories']={'DIRECTORY_SEPARATOR':'','PATH_SEPARATOR':'','SCANDIR_SORT_ASCENDING':'','SCANDIR_SORT_DESCENDING':'','SCANDIR_SORT_NONE':'',} +let php_builtin['constants']['dom']={'XML_ELEMENT_NODE':'','XML_ATTRIBUTE_NODE':'','XML_TEXT_NODE':'','XML_CDATA_SECTION_NODE':'','XML_ENTITY_REF_NODE':'','XML_ENTITY_NODE':'','XML_PI_NODE':'','XML_COMMENT_NODE':'','XML_DOCUMENT_NODE':'','XML_DOCUMENT_TYPE_NODE':'','XML_DOCUMENT_FRAG_NODE':'','XML_NOTATION_NODE':'','XML_HTML_DOCUMENT_NODE':'','XML_DTD_NODE':'','XML_ELEMENT_DECL_NODE':'','XML_ATTRIBUTE_DECL_NODE':'','XML_ENTITY_DECL_NODE':'','XML_NAMESPACE_DECL_NODE':'','XML_ATTRIBUTE_CDATA':'','XML_ATTRIBUTE_ID':'','XML_ATTRIBUTE_IDREF':'','XML_ATTRIBUTE_IDREFS':'','XML_ATTRIBUTE_ENTITY':'','XML_ATTRIBUTE_NMTOKEN':'','XML_ATTRIBUTE_NMTOKENS':'','XML_ATTRIBUTE_ENUMERATION':'','XML_ATTRIBUTE_NOTATION':'','DOM_PHP_ERR':'','DOM_INDEX_SIZE_ERR':'','DOMSTRING_SIZE_ERR':'','DOM_HIERARCHY_REQUEST_ERR':'','DOM_WRONG_DOCUMENT_ERR':'','DOM_INVALID_CHARACTER_ERR':'','DOM_NO_DATA_ALLOWED_ERR':'','DOM_NO_MODIFICATION_ALLOWED_ERR':'','DOM_NOT_FOUND_ERR':'','DOM_NOT_SUPPORTED_ERR':'','DOM_INUSE_ATTRIBUTE_ERR':'','DOM_INVALID_STATE_ERR':'','DOM_SYNTAX_ERR':'','DOM_INVALID_MODIFICATION_ERR':'','DOM_NAMESPACE_ERR':'','DOM_INVALID_ACCESS_ERR':'','DOM_VALIDATION_ERR':'','DOM_NOT_FOUND_ERROR':'','DOM_NOT_FOUND':'',} +let php_builtin['constants']['command_line_usage']={'PHP_SAPI':'','STDIN':'','STDOUT':'','STDERR':'',} +let php_builtin['constants']['handling_file_uploads']={'UPLOAD_ERR_OK':'','UPLOAD_ERR_INI_SIZE':'','UPLOAD_ERR_FORM_SIZE':'','UPLOAD_ERR_PARTIAL':'','UPLOAD_ERR_NO_FILE':'','UPLOAD_ERR_NO_TMP_DIR':'','UPLOAD_ERR_CANT_WRITE':'','UPLOAD_ERR_EXTENSION':'',} +let php_builtin['constants']['fileinfo']={'FILEINFO_NONE':'','FILEINFO_SYMLINK':'','FILEINFO_MIME_TYPE':'','FILEINFO_MIME_ENCODING':'','FILEINFO_MIME':'','FILEINFO_COMPRESS':'','FILEINFO_DEVICES':'','FILEINFO_CONTINUE':'','FILEINFO_PRESERVE_ATIME':'','FILEINFO_RAW':'',} +let php_builtin['constants']['filesystem']={'SEEK_SET':'','SEEK_CUR':'','SEEK_END':'','LOCK_SH':'','LOCK_EX':'','LOCK_UN':'','LOCK_NB':'','GLOB_BRACE':'','GLOB_ONLYDIR':'','GLOB_MARK':'','GLOB_NOSORT':'','GLOB_NOCHECK':'','GLOB_NOESCAPE':'','GLOB_AVAILABLE_FLAGS':'','PATHINFO_DIRNAME':'','PATHINFO_BASENAME':'','PATHINFO_EXTENSION':'','PATHINFO_FILENAME':'','FILE_USE_INCLUDE_PATH':'','FILE_NO_DEFAULT_CONTEXT':'','FILE_APPEND':'','FILE_IGNORE_NEW_LINES':'','FILE_SKIP_EMPTY_LINES':'','FILE_BINARY':'','FILE_TEXT':'','INI_SCANNER_NORMAL':'','INI_SCANNER_RAW':'','FNM_NOESCAPE':'','FNM_PATHNAME':'','FNM_PERIOD':'','FNM_CASEFOLD':'','GLOB_ERR':'',} +let php_builtin['constants']['filter']={'FILTER_FLAG_NO_ENCODE_QUOTES':'','INPUT_POST':'','INPUT_GET':'','INPUT_COOKIE':'','INPUT_ENV':'','INPUT_SERVER':'','INPUT_SESSION':'','INPUT_REQUEST':'','FILTER_FLAG_NONE':'','FILTER_REQUIRE_SCALAR':'','FILTER_REQUIRE_ARRAY':'','FILTER_FORCE_ARRAY':'','FILTER_NULL_ON_FAILURE':'','FILTER_VALIDATE_INT':'','FILTER_VALIDATE_BOOLEAN':'','FILTER_VALIDATE_FLOAT':'','FILTER_VALIDATE_REGEXP':'','FILTER_VALIDATE_URL':'','FILTER_VALIDATE_EMAIL':'','FILTER_VALIDATE_IP':'','FILTER_DEFAULT':'','FILTER_UNSAFE_RAW':'','FILTER_SANITIZE_STRING':'','FILTER_SANITIZE_STRIPPED':'','FILTER_SANITIZE_ENCODED':'','FILTER_SANITIZE_SPECIAL_CHARS':'','FILTER_SANITIZE_EMAIL':'','FILTER_SANITIZE_URL':'','FILTER_SANITIZE_NUMBER_INT':'','FILTER_SANITIZE_NUMBER_FLOAT':'','FILTER_SANITIZE_MAGIC_QUOTES':'','FILTER_CALLBACK':'','FILTER_FLAG_ALLOW_OCTAL':'','FILTER_FLAG_ALLOW_HEX':'','FILTER_FLAG_STRIP_LOW':'','FILTER_FLAG_STRIP_HIGH':'','FILTER_FLAG_ENCODE_LOW':'','FILTER_FLAG_ENCODE_HIGH':'','FILTER_FLAG_ENCODE_AMP':'','FILTER_FLAG_EMPTY_STRING_NULL':'','FILTER_FLAG_ALLOW_FRACTION':'','FILTER_FLAG_ALLOW_THOUSAND':'','FILTER_FLAG_ALLOW_SCIENTIFIC':'','FILTER_FLAG_PATH_REQUIRED':'','FILTER_FLAG_QUERY_REQUIRED':'','FILTER_FLAG_IPV4':'','FILTER_FLAG_IPV6':'','FILTER_FLAG_NO_RES_RANGE':'','FILTER_FLAG_NO_PRIV_RANGE':'','FILTER_SANITIZE_RAW':'','FILTER_SANITIZE_FULL_SPECIAL_CHARS':'','ENT_QUOTES':'',} +let php_builtin['constants']['php_options_info']={'ASSERT_CALLBACK':'','RUSAGE_CHILDREN':'','PHP_SAPI':'','PHP_OS':'','CREDITS_DOCS':'','CREDITS_GENERAL':'','CREDITS_GROUP':'','CREDITS_MODULES':'','CREDITS_FULLPAGE':'','PHP_VERSION_ID':'','PHP_VERSION':'','PATH_SEPARATOR':'','CREDITS_SAPI':'','CREDITS_QA':'','CREDITS_ALL':'','INFO_GENERAL':'','INFO_CREDITS':'','INFO_CONFIGURATION':'','INFO_MODULES':'','INFO_ENVIRONMENT':'','INFO_VARIABLES':'','INFO_LICENSE':'','INFO_ALL':'','ASSERT_ACTIVE':'','ASSERT_BAIL':'','ASSERT_WARNING':'','ASSERT_QUIET_EVAL':'','PHP_WINDOWS_VERSION_MAJOR':'','PHP_WINDOWS_VERSION_MINOR':'','PHP_WINDOWS_VERSION_BUILD':'','PHP_WINDOWS_VERSION_PLATFORM':'','PHP_WINDOWS_VERSION_SP_MAJOR':'','PHP_WINDOWS_VERSION_SP_MINOR':'','PHP_WINDOWS_VERSION_SUITEMASK':'','PHP_WINDOWS_VERSION_PRODUCTTYPE':'','PHP_WINDOWS_NT_DOMAIN_CONTROLLER':'','PHP_WINDOWS_NT_SERVER':'','PHP_WINDOWS_NT_WORKSTATION':'',} +let php_builtin['constants']['strings']={'CRYPT_SALT_LENGTH':'','CRYPT_STD_DES':'','CRYPT_EXT_DES':'','CRYPT_MD5':'','CRYPT_BLOWFISH':'','CRYPT_SHA256':'','CRYPT_SHA512':'','HTML_ENTITIES':'','HTML_SPECIALCHARS':'','ENT_COMPAT':'','ENT_QUOTES':'','ENT_NOQUOTES':'','ENT_HTML401':'','ENT_XML1':'','ENT_XHTML':'','ENT_HTML5':'','ENT_IGNORE':'','ENT_SUBSTITUTE':'','ENT_DISALLOWED':'','CHAR_MAX':'','LC_MONETARY':'','AM_STR':'','PM_STR':'','D_T_FMT':'','D_FMT':'','T_FMT':'','T_FMT_AMPM':'','ERA':'','ERA_YEAR':'','ERA_D_T_FMT':'','ERA_D_FMT':'','ERA_T_FMT':'','INT_CURR_SYMBOL':'','CURRENCY_SYMBOL':'','CRNCYSTR':'','MON_DECIMAL_POINT':'','MON_THOUSANDS_SEP':'','MON_GROUPING':'','POSITIVE_SIGN':'','NEGATIVE_SIGN':'','INT_FRAC_DIGITS':'','FRAC_DIGITS':'','P_CS_PRECEDES':'','P_SEP_BY_SPACE':'','N_CS_PRECEDES':'','N_SEP_BY_SPACE':'','P_SIGN_POSN':'','N_SIGN_POSN':'','DECIMAL_POINT':'','RADIXCHAR':'','THOUSANDS_SEP':'','THOUSEP':'','GROUPING':'','YESEXPR':'','NOEXPR':'','YESSTR':'','NOSTR':'','CODESET':'','LC_ALL':'','LC_COLLATE':'','LC_CTYPE':'','LC_NUMERIC':'','LC_TIME':'','LC_MESSAGES':'','PHP_INT_MAX':'','STR_PAD_RIGHT':'','STR_PAD_LEFT':'','STR_PAD_BOTH':'',} +let php_builtin['constants']['error_handling']={'DEBUG_BACKTRACE_PROVIDE_OBJECT':'','DEBUG_BACKTRACE_IGNORE_ARGS':'',} +let php_builtin['constants']['math']={'PHP_INT_MAX':'','M_PI':'','PHP_ROUND_HALF_UP':'','PHP_ROUND_HALF_DOWN':'','PHP_ROUND_HALF_EVEN':'','PHP_ROUND_HALF_ODD':'','M_E':'','M_LOG2E':'','M_LOG10E':'','M_LN2':'','M_LN10':'','M_PI_2':'','M_PI_4':'','M_1_PI':'','M_2_PI':'','M_SQRTPI':'','M_2_SQRTPI':'','M_SQRT2':'','M_SQRT3':'','M_SQRT1_2':'','M_LNPI':'','M_EULER':'','NAN':'','INF':'',} +let php_builtin['constants']['network']={'LOG_EMERG':'','LOG_ALERT':'','LOG_CRIT':'','LOG_ERR':'','LOG_WARNING':'','LOG_NOTICE':'','LOG_INFO':'','LOG_DEBUG':'','LOG_KERN':'','LOG_USER':'','LOG_MAIL':'','LOG_DAEMON':'','LOG_AUTH':'','LOG_SYSLOG':'','LOG_LPR':'','LOG_NEWS':'','LOG_CRON':'','LOG_AUTHPRIV':'','LOG_LOCAL0':'','LOG_LOCAL1':'','LOG_LOCAL2':'','LOG_LOCAL3':'','LOG_LOCAL4':'','LOG_LOCAL5':'','LOG_LOCAL6':'','LOG_LOCAL7':'','LOG_PID':'','LOG_CONS':'','LOG_ODELAY':'','LOG_NDELAY':'','LOG_NOWAIT':'','LOG_PERROR':'','DNS_A':'','DNS_CNAME':'','DNS_HINFO':'','DNS_MX':'','DNS_NS':'','DNS_PTR':'','DNS_SOA':'','DNS_TXT':'','DNS_AAAA':'','DNS_SRV':'','DNS_NAPTR':'','DNS_A6':'','DNS_ALL':'','DNS_ANY':'','SID':'','LOG_UUCP':'',} +let php_builtin['constants']['urls']={'PHP_QUERY_RFC1738':'','PHP_QUERY_RFC3986':'','PHP_URL_SCHEME':'','PHP_URL_HOST':'','PHP_URL_PORT':'','PHP_URL_USER':'','PHP_URL_PASS':'','PHP_URL_PATH':'','PHP_URL_QUERY':'','PHP_URL_FRAGMENT':'',} +let php_builtin['constants']['gd']={'IMAGETYPE_GIF':'','IMAGETYPE_JPEG':'','IMAGETYPE_PNG':'','IMAGETYPE_SWF':'','IMAGETYPE_PSD':'','IMAGETYPE_BMP':'','IMAGETYPE_TIFF_II':'','IMAGETYPE_TIFF_MM':'','IMAGETYPE_JPC':'','IMAGETYPE_JP2':'','IMAGETYPE_JPX':'','IMAGETYPE_JB2':'','IMAGETYPE_SWC':'','IMAGETYPE_IFF':'','IMAGETYPE_WBMP':'','IMAGETYPE_XBM':'','IMAGETYPE_ICO':'','IMG_CROP_THRESHOLD':'','IMG_ARC_PIE':'','IMG_ARC_CHORD':'','IMG_ARC_NOFILL':'','IMG_ARC_EDGED':'','IMG_FILTER_NEGATE':'','IMG_FILTER_GRAYSCALE':'','IMG_FILTER_BRIGHTNESS':'','IMG_FILTER_CONTRAST':'','IMG_FILTER_COLORIZE':'','IMG_FILTER_EDGEDETECT':'','IMG_FILTER_EMBOSS':'','IMG_FILTER_GAUSSIAN_BLUR':'','IMG_FILTER_SELECTIVE_BLUR':'','IMG_FILTER_MEAN_REMOVAL':'','IMG_FILTER_SMOOTH':'','IMG_FILTER_PIXELATE':'','IMG_FLIP_HORIZONTAL':'','IMG_FLIP_VERTICAL':'','IMG_FLIP_BOTH':'','IMG_GD2_RAW':'','IMG_GD2_COMPRESSED':'','IMG_EFFECT_REPLACE':'','IMG_EFFECT_ALPHABLEND':'','IMG_EFFECT_NORMAL':'','IMG_EFFECT_OVERLAY':'','PNG_NO_FILTER':'','PNG_ALL_FILTERS':'','IMG_NEAREST_NEIGHBOUR':'','IMG_BILINEAR_FIXED':'','IMG_BICUBIC':'','IMG_BICUBIC_FIXED':'','IMG_COLOR_BRUSHED':'','IMG_COLOR_STYLEDBRUSHED':'','IMG_BELL':'','IMG_BESSEL':'','IMG_BLACKMAN':'','IMG_BOX':'','IMG_BSPLINE':'','IMG_CATMULLROM':'','IMG_GAUSSIAN':'','IMG_GENERALIZED_CUBIC':'','IMG_HERMITE':'','IMG_HAMMING':'','IMG_HANNING':'','IMG_MITCHELL':'','IMG_POWER':'','IMG_QUADRATIC':'','IMG_SINC':'','IMG_WEIGHTED4':'','IMG_TRIANGLE':'','IMG_COLOR_STYLED':'','IMG_COLOR_TRANSPARENT':'','IMG_COLOR_TILED':'','IMG_GIF':'','IMG_JPG':'','IMG_PNG':'','IMG_WBMP':'','IMG_XPM':'','GD_VERSION':'','GD_MAJOR_VERSION':'','GD_MINOR_VERSION':'','GD_RELEASE_VERSION':'','GD_EXTRA_VERSION':'','GD_BUNDLED':'','IMG_JPEG':'','IMG_ARC_ROUNDED':'','IMAGETYPE_JPEG2000':'','PNG_FILTER_NONE':'','PNG_FILTER_SUB':'','PNG_FILTER_UP':'','PNG_FILTER_AVG':'','PNG_FILTER_PAETH':'',} +let php_builtin['constants']['json']={'JSON_BIGINT_AS_STRING':'','JSON_HEX_QUOT':'','JSON_HEX_TAG':'','JSON_HEX_AMP':'','JSON_HEX_APOS':'','JSON_NUMERIC_CHECK':'','JSON_PRETTY_PRINT':'','JSON_UNESCAPED_SLASHES':'','JSON_FORCE_OBJECT':'','JSON_UNESCAPED_UNICODE':'','JSON_ERROR_NONE':'','JSON_ERROR_DEPTH':'','JSON_ERROR_STATE_MISMATCH':'','JSON_ERROR_CTRL_CHAR':'','JSON_ERROR_SYNTAX':'','JSON_ERROR_UTF8':'','JSON_ERROR_RECURSION':'','JSON_ERROR_INF_OR_NAN':'','NAN':'','INF':'','JSON_ERROR_UNSUPPORTED_TYPE':'','JSON_PARTIAL_OUTPUT_ON_ERROR':'',} +let php_builtin['constants']['multibyte_string']={'MB_CASE_UPPER':'','MB_CASE_LOWER':'','MB_CASE_TITLE':'','MB_OVERLOAD_MAIL':'','MB_OVERLOAD_STRING':'','MB_OVERLOAD_REGEX':'',} +let php_builtin['constants']['mssql']={'SQLTEXT':'','SQLVARCHAR':'','SQLCHAR':'','SQLINT1':'','SQLINT2':'','SQLINT4':'','SQLBIT':'','SQLFLT4':'','SQLFLT8':'','SQLFLTN':'','MSSQL_ASSOC':'','MSSQL_NUM':'','MSSQL_BOTH':'',} +let php_builtin['constants']['mysql']={'MYSQL_CLIENT_SSL':'','MYSQL_CLIENT_COMPRESS':'','MYSQL_CLIENT_IGNORE_SPACE':'','MYSQL_CLIENT_INTERACTIVE':'','MYSQL_ASSOC':'','MYSQL_NUM':'','MYSQL_BOTH':'','MYSQL_PORT':'',} +let php_builtin['constants']['output_control']={'PHP_OUTPUT_HANDLER_STDFLAGS':'','PHP_OUTPUT_HANDLER_CLEANABLE':'','PHP_OUTPUT_HANDLER_FLUSHABLE':'','PHP_OUTPUT_HANDLER_REMOVABLE':'','PHP_OUTPUT_HANDLER_START':'','PHP_OUTPUT_HANDLER_WRITE':'','PHP_OUTPUT_HANDLER_FLUSH':'','PHP_OUTPUT_HANDLER_CLEAN':'','PHP_OUTPUT_HANDLER_FINAL':'','PHP_OUTPUT_HANDLER_CONT':'','PHP_OUTPUT_HANDLER_END':'',} +let php_builtin['constants']['password_hashing']={'PASSWORD_DEFAULT':'','PASSWORD_BCRYPT':'','CRYPT_BLOWFISH':'',} +let php_builtin['constants']['postgresql']={'PGSQL_CONNECT_FORCE_NEW':'','PGSQL_CONNECTION_OK':'','PGSQL_CONNECTION_BAD':'','PGSQL_CONV_IGNORE_DEFAULT':'','PGSQL_CONV_FORCE_NULL':'','PGSQL_CONV_IGNORE_NOT_NULL':'','PGSQL_DML_NO_CONV':'','PGSQL_DML_ESCAPE':'','PGSQL_DML_EXEC':'','PGSQL_DML_ASYNC':'','PGSQL_DML_STRING':'','PGSQL_ASSOC':'','PGSQL_NUM':'','PGSQL_BOTH':'','PGSQL_CONV_OPTS':'','INV_READ':'','INV_WRITE':'','INV_ARCHIVE':'','PGSQL_SEEK_SET':'','PGSQL_SEEK_CUR':'','PGSQL_SEEK_END':'','PGSQL_DIAG_SEVERITY':'','PGSQL_DIAG_SQLSTATE':'','PGSQL_DIAG_MESSAGE_PRIMARY':'','PGSQL_DIAG_MESSAGE_DETAIL':'','PGSQL_DIAG_MESSAGE_HINT':'','PGSQL_DIAG_STATEMENT_POSITION':'','PGSQL_DIAG_INTERNAL_POSITION':'','PGSQL_DIAG_INTERNAL_QUERY':'','PGSQL_DIAG_CONTEXT':'','PGSQL_DIAG_SOURCE_FILE':'','PGSQL_DIAG_SOURCE_LINE':'','PGSQL_DIAG_SOURCE_FUNCTION':'','PGSQL_STATUS_LONG':'','PGSQL_STATUS_STRING':'','PGSQL_EMPTY_QUERY':'','PGSQL_COMMAND_OK':'','PGSQL_TUPLES_OK':'','PGSQL_COPY_OUT':'','PGSQL_COPY_IN':'','PGSQL_BAD_RESPONSE':'','PGSQL_NONFATAL_ERROR':'','PGSQL_FATAL_ERROR':'','PGSQL_ERRORS_TERSE':'','PGSQL_ERRORS_DEFAULT':'','PGSQL_ERRORS_VERBOSE':'','PGSQL_TRANSACTION_IDLE':'','PGSQL_TRANSACTION_ACTIVE':'','PGSQL_TRANSACTION_INTRANS':'','PGSQL_TRANSACTION_INERROR':'','PGSQL_TRANSACTION_UNKNOWN':'','PG_DIAG_STATEMENT_POSITION':'','PG_DIAG_INTERNAL_QUERY':'',} +let php_builtin['constants']['pcre']={'PREG_GREP_INVERT':'','PREG_NO_ERROR':'','PREG_INTERNAL_ERROR':'','PREG_BACKTRACK_LIMIT_ERROR':'','PREG_RECURSION_LIMIT_ERROR':'','PREG_BAD_UTF8_ERROR':'','PREG_BAD_UTF8_OFFSET_ERROR':'','PREG_PATTERN_ORDER':'','PREG_SET_ORDER':'','PREG_OFFSET_CAPTURE':'','PREG_SPLIT_NO_EMPTY':'','PREG_SPLIT_DELIM_CAPTURE':'','PREG_SPLIT_OFFSET_CAPTURE':'','PCRE_VERSION':'',} +let php_builtin['constants']['program_execution']={'STDIN':'',} +let php_builtin['constants']['sessions']={'SID':'','PHP_SESSION_DISABLED':'','PHP_SESSION_NONE':'','PHP_SESSION_ACTIVE':'','UPLOAD_ERR_EXTENSION':'',} +let php_builtin['constants']['variable_handling']={'PHP_INT_MAX':'',} +let php_builtin['constants']['misc']={'WAIT_IO_COMPLETION':'','CONNECTION_ABORTED':'','CONNECTION_NORMAL':'','CONNECTION_TIMEOUT':'',} +let php_builtin['constants']['streams']={'STREAM_FILTER_READ':'','STREAM_FILTER_WRITE':'','STREAM_FILTER_ALL':'','PHP_INT_MAX':'','STREAM_CLIENT_CONNECT':'','STREAM_CLIENT_ASYNC_CONNECT':'','STREAM_CLIENT_PERSISTENT':'','STREAM_CRYPTO_METHOD_TLS_CLIENT':'','STREAM_CRYPTO_METHOD_TLS_SERVER':'','STREAM_PF_INET':'','STREAM_PF_INET6':'','STREAM_PF_UNIX':'','STREAM_SOCK_DGRAM':'','STREAM_SOCK_RAW':'','STREAM_SOCK_RDM':'','STREAM_SOCK_SEQPACKET':'','STREAM_SOCK_STREAM':'','STREAM_IPPROTO_ICMP':'','STREAM_IPPROTO_IP':'','STREAM_IPPROTO_RAW':'','STREAM_IPPROTO_TCP':'','STREAM_IPPROTO_UDP':'','STREAM_OOB':'','STREAM_PEEK':'','AF_INET':'','STREAM_SERVER_BIND':'','STREAM_SHUT_RD':'','STREAM_SHUT_WR':'','STREAM_SHUT_RDWR':'','STREAM_IS_URL':'','PSFS_PASS_ON':'','PSFS_FEED_ME':'','PSFS_ERR_FATAL':'','PSFS_FLAG_NORMAL':'','PSFS_FLAG_FLUSH_INC':'','PSFS_FLAG_FLUSH_CLOSE':'','STREAM_USE_PATH':'','STREAM_REPORT_ERRORS':'','STREAM_SERVER_LISTEN':'','STREAM_NOTIFY_RESOLVE':'','STREAM_NOTIFY_CONNECT':'','STREAM_NOTIFY_AUTH_REQUIRED':'','STREAM_NOTIFY_SEVERITY_ERR':'','STREAM_NOTIFY_MIME_TYPE_IS':'','STREAM_NOTIFY_FILE_SIZE_IS':'','STREAM_NOTIFY_REDIRECTED':'','STREAM_NOTIFY_PROGRESS':'','STREAM_NOTIFY_COMPLETED':'','STREAM_NOTIFY_FAILURE':'','STREAM_NOTIFY_AUTH_RESULT':'','STREAM_NOTIFY_SEVERITY_INFO':'','STREAM_NOTIFY_SEVERITY_WARN':'','STREAM_CAST_FOR_SELECT':'','STREAM_CAST_AS_STREAM':'','STREAM_META_TOUCH':'','STREAM_META_OWNER':'','STREAM_META_OWNER_NAME':'','STREAM_META_GROUP':'','STREAM_META_GROUP_NAME':'','STREAM_META_ACCESS':'','STREAM_MKDIR_RECURSIVE':'','LOCK_EX':'','LOCK_UN':'','LOCK_SH':'','LOCK_NB':'','SEEK_SET':'','SEEK_CUR':'','SEEK_END':'','STREAM_OPTION_BLOCKING':'','STREAM_OPTION_READ_TIMEOUT':'','STREAM_OPTION_WRITE_BUFFER':'','STREAM_BUFFER_NONE':'','STREAM_BUFFER_FULL':'',} +let php_builtin['constants']['iconv']={'ICONV_IMPL':'','ICONV_VERSION':'','ICONV_MIME_DECODE_STRICT':'','ICONV_MIME_DECODE_CONTINUE_ON_ERROR':'',} +let php_builtin['constants']['phpini_directives']={'PATH_SEPARATOR':'','PHP_INI_SYSTEM':'',} +let php_builtin['constants']['types']={'NAN':'','PHP_INT_SIZE':'','PHP_INT_MAX':'',} +let php_builtin['constants']['pdo']={'PDO_PARAM_BOOL':'',} +let php_builtin['constants']['list_of_reserved_words']={'PHP_VERSION':'','PHP_MAJOR_VERSION':'','PHP_MINOR_VERSION':'','PHP_RELEASE_VERSION':'','PHP_VERSION_ID':'','PHP_EXTRA_VERSION':'','PHP_ZTS':'','PHP_DEBUG':'','PHP_MAXPATHLEN':'','PHP_OS':'','PHP_SAPI':'','PHP_EOL':'','PHP_INT_MAX':'','PHP_INT_SIZE':'','DEFAULT_INCLUDE_PATH':'','PEAR_INSTALL_DIR':'','PEAR_EXTENSION_DIR':'','PHP_EXTENSION_DIR':'','PHP_PREFIX':'','PHP_BINDIR':'','PHP_BINARY':'','PHP_MANDIR':'','PHP_LIBDIR':'','PHP_DATADIR':'','PHP_SYSCONFDIR':'','PHP_LOCALSTATEDIR':'','PHP_CONFIG_FILE_PATH':'','PHP_CONFIG_FILE_SCAN_DIR':'','PHP_SHLIB_SUFFIX':'',} +let php_builtin['constants']['php_type_comparison_tables']={'NAN':'',} + +" Built in functions +let g:php_builtin_functions = {} +for [ext, data] in items(php_builtin['functions']) + call extend(g:php_builtin_functions, data) +endfor + +" Built in classs +let g:php_builtin_classes = {} +for [ext, data] in items(php_builtin['classes']) + call extend(g:php_builtin_classes, data) +endfor + +" Built in interfaces +let g:php_builtin_interfaces = {} +for [ext, data] in items(php_builtin['interfaces']) + call extend(g:php_builtin_interfaces, data) +endfor + +" Built in constants +let g:php_constants = {} +for [ext, data] in items(php_builtin['constants']) + call extend(g:php_constants, data) +endfor + +" When the classname not found or found but the tags dosen't contain that +" class we will try to complate any method of any builtin class. To speed up +" that lookup we compile a 'ClassName::MethodName':'info' dictionary from the +" builtin class informations +let g:php_builtin_object_functions = {} + +" When completing for 'everyting imaginable' (no class context, not a +" variable) we need a list of built-in classes in a format of {'classname':''} +" for performance reasons we precompile this too +let g:php_builtin_classnames = {} + +" In order to reduce file size, empty keys are omitted from class structures. +" To make the structure of in-memory hashes normalized we will add them in runtime +let required_class_hash_keys = ['constants', 'properties', 'static_properties', 'methods', 'static_methods'] + +for [classname, class_info] in items(g:php_builtin_classes) + for property_name in required_class_hash_keys + if !has_key(class_info, property_name) + let class_info[property_name] = {} + endif + endfor + + let g:php_builtin_classnames[classname] = '' + for [method_name, method_info] in items(class_info.methods) + let g:php_builtin_object_functions[classname.'::'.method_name.'('] = method_info.signature + endfor + for [method_name, method_info] in items(class_info.static_methods) + let g:php_builtin_object_functions[classname.'::'.method_name.'('] = method_info.signature + endfor +endfor + +let g:php_builtin_interfacenames = {} +for [interfacename, info] in items(g:php_builtin_interfaces) + for property_name in required_class_hash_keys + if !has_key(class_info, property_name) + let class_info[property_name] = {} + endif + endfor + + let g:php_builtin_interfacenames[interfacename] = '' + for [method_name, method_info] in items(class_info.methods) + let g:php_builtin_object_functions[interfacename.'::'.method_name.'('] = method_info.signature + endfor + for [method_name, method_info] in items(class_info.static_methods) + let g:php_builtin_object_functions[interfacename.'::'.method_name.'('] = method_info.signature + endfor +endfor + + +" Add control structures (they are outside regular pattern of PHP functions) +let php_control = { + \ 'include(': 'string filename | resource', + \ 'include_once(': 'string filename | resource', + \ 'require(': 'string filename | resource', \ 'require_once(': 'string filename | resource', \ } call extend(g:php_builtin_functions, php_control) + + +" Built-in variables " {{{ +let g:php_builtin_vars ={ + \ '$GLOBALS':'', + \ '$_SERVER':'', + \ '$_GET':'', + \ '$_POST':'', + \ '$_COOKIE':'', + \ '$_FILES':'', + \ '$_ENV':'', + \ '$_REQUEST':'', + \ '$_SESSION':'', + \ '$HTTP_SERVER_VARS':'', + \ '$HTTP_ENV_VARS':'', + \ '$HTTP_COOKIE_VARS':'', + \ '$HTTP_GET_VARS':'', + \ '$HTTP_POST_VARS':'', + \ '$HTTP_POST_FILES':'', + \ '$HTTP_SESSION_VARS':'', + \ '$php_errormsg':'', + \ '$this':'', + \ } +" }}} endfunction " }}} -" vim:set foldmethod=marker: + +" vim: foldmethod=marker:noexpandtab:ts=8:sts=4 diff -Naur vim74.orig/runtime/colors/README.txt vim74/runtime/colors/README.txt --- vim74.orig/runtime/colors/README.txt 2010-05-15 11:03:31.000000000 +0000 +++ vim74/runtime/colors/README.txt 2014-09-27 01:00:29.300512378 +0000 @@ -36,6 +36,14 @@ removed in your color scheme. Use something like "gui=NONE" to remove the attributes. +In case you want to set 'background' depending on the colorscheme selected, +this autocmd might be useful: + autocmd SourcePre */colors/blue_sky.vim set background=dark +Replace "blue_sky" with the name of the colorscheme. + +In case you want to tweak a colorscheme after it was loaded, check out that +ColorScheme autocmd event. + To see which highlight group is used where, find the help for "highlight-groups" and "group-name". diff -Naur vim74.orig/runtime/colors/delek.vim vim74/runtime/colors/delek.vim --- vim74.orig/runtime/colors/delek.vim 2010-05-15 11:03:31.000000000 +0000 +++ vim74/runtime/colors/delek.vim 2014-09-27 01:00:29.307179028 +0000 @@ -1,10 +1,10 @@ " Vim color file -" Maintainer: David Schweikert -" Last Change: 2006 Apr 30 +" Maintainer: David Schweikert +" Last Change: 2014 Mar 19 hi clear -let colors_name = "delek" +let g:colors_name = "delek" " Normal should come first hi Normal guifg=Black guibg=White @@ -28,7 +28,11 @@ hi Pmenu guibg=LightBlue hi PmenuSel ctermfg=White ctermbg=DarkBlue guifg=White guibg=DarkBlue hi Question ctermfg=DarkGreen gui=bold guifg=SeaGreen -hi Search ctermfg=NONE ctermbg=Yellow guibg=Yellow guifg=NONE +if &background == "light" + hi Search ctermfg=NONE ctermbg=Yellow guibg=Yellow guifg=NONE +else + hi Search ctermfg=Black ctermbg=Yellow guibg=Yellow guifg=Black +endif hi SpecialKey ctermfg=DarkBlue guifg=Blue hi StatusLine cterm=bold ctermbg=blue ctermfg=yellow guibg=gold guifg=blue hi StatusLineNC cterm=bold ctermbg=blue ctermfg=black guibg=gold guifg=blue diff -Naur vim74.orig/runtime/colors/industry.vim vim74/runtime/colors/industry.vim --- vim74.orig/runtime/colors/industry.vim 1970-01-01 00:00:00.000000000 +0000 +++ vim74/runtime/colors/industry.vim 2014-09-27 01:00:29.320512328 +0000 @@ -0,0 +1,40 @@ +" Vim color file +" Maintainer: Shian Lee +" Last Change: 2014 Mar 6 (for vim 7.4) +" Remark: "industry" stands for 'industrial' color scheme. In industrial +" HMI (Human-Machine-Interface) programming, using a standard color +" scheme is mandatory in many cases (in traffic-lights for example): +" LIGHT_RED is 'Warning' +" LIGHT_YELLOW is 'Attention' +" LIGHT_GREEN is 'Normal' +" LIGHT_MAGENTA is 'Warning-Attention' (light RED-YELLOW) +" LIGHT_CYAN is 'Attention-Normal' (light YELLOW-GREEN). +" BLACK is Dark-High-Contrast Background for maximum safety. +" BLUE is Shade of BLACK (not supposed to get attention). +" +" Industrial color scheme is by nature clear, safe and productive. +" Yet, depends on the file type's syntax, it might appear incorrect. + +" Reset to dark background, then reset everything to defaults: +set background=dark +highlight clear +if exists("syntax_on") + syntax reset +endif + +let colors_name = "industry" + +" First set Normal to regular white on black text colors: +hi Normal ctermfg=LightGray ctermbg=Black guifg=#dddddd guibg=Black + +" Syntax highlighting (other color-groups using default, see :help group-name): +hi Comment cterm=NONE ctermfg=DarkCyan gui=NONE guifg=#00aaaa +hi Constant cterm=NONE ctermfg=LightCyan gui=NONE guifg=#00ffff +hi Identifier cterm=NONE ctermfg=LightMagenta gui=NONE guifg=#ff00ff +hi Function cterm=NONE ctermfg=LightGreen gui=NONE guifg=#00ff00 +hi Statement cterm=NONE ctermfg=White gui=bold guifg=#ffffff +hi PreProc cterm=NONE ctermfg=Yellow gui=NONE guifg=#ffff00 +hi Type cterm=NONE ctermfg=LightGreen gui=bold guifg=#00ff00 +hi Special cterm=NONE ctermfg=LightRed gui=NONE guifg=#ff0000 +hi Delimiter cterm=NONE ctermfg=Yellow gui=NONE guifg=#ffff00 + diff -Naur vim74.orig/runtime/compiler/gcc.vim vim74/runtime/compiler/gcc.vim --- vim74.orig/runtime/compiler/gcc.vim 2011-12-15 20:20:22.000000000 +0000 +++ vim74/runtime/compiler/gcc.vim 2014-09-27 01:00:29.367178879 +0000 @@ -25,10 +25,10 @@ \%f:%l:\ %tarning:\ %m, \%f:%l:\ %m, \\"%f\"\\,\ line\ %l%*\\D%c%*[^\ ]\ %m, - \%D%*\\a[%*\\d]:\ Entering\ directory\ `%f', - \%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f', - \%D%*\\a:\ Entering\ directory\ `%f', - \%X%*\\a:\ Leaving\ directory\ `%f', + \%D%*\\a[%*\\d]:\ Entering\ directory\ [`']%f', + \%X%*\\a[%*\\d]:\ Leaving\ directory\ [`']%f', + \%D%*\\a:\ Entering\ directory\ [`']%f', + \%X%*\\a:\ Leaving\ directory\ [`']%f', \%DMaking\ %*\\a\ in\ %f if exists('g:compiler_gcc_ignore_unmatched_lines') diff -Naur vim74.orig/runtime/compiler/go.vim vim74/runtime/compiler/go.vim --- vim74.orig/runtime/compiler/go.vim 1970-01-01 00:00:00.000000000 +0000 +++ vim74/runtime/compiler/go.vim 2014-09-27 01:00:29.370512204 +0000 @@ -0,0 +1,29 @@ +" Vim compiler file +" Compiler: Go +" Maintainer: David Barnett (https://github.com/google/vim-ft-go) +" Last Change: 2014 Aug 16 + +if exists('current_compiler') + finish +endif +let current_compiler = 'go' + +if exists(':CompilerSet') != 2 + command -nargs=* CompilerSet setlocal +endif + +let s:save_cpo = &cpo +set cpo-=C + +CompilerSet makeprg=go\ build +CompilerSet errorformat= + \%-G#\ %.%#, + \%A%f:%l:%c:\ %m, + \%A%f:%l:\ %m, + \%C%*\\s%m, + \%-G%.%# + +let &cpo = s:save_cpo +unlet s:save_cpo + +" vim: sw=2 sts=2 et diff -Naur vim74.orig/runtime/doc/autocmd.txt vim74/runtime/doc/autocmd.txt --- vim74.orig/runtime/doc/autocmd.txt 2013-08-10 11:24:52.000000000 +0000 +++ vim74/runtime/doc/autocmd.txt 2014-09-27 01:00:29.440512029 +0000 @@ -1,4 +1,4 @@ -*autocmd.txt* For Vim version 7.4. Last change: 2013 Aug 04 +*autocmd.txt* For Vim version 7.4. Last change: 2014 Aug 22 VIM REFERENCE MANUAL by Bram Moolenaar @@ -278,6 +278,7 @@ |ShellCmdPost| after executing a shell command |ShellFilterPost| after filtering with a shell command +|CmdUndefined| a user command is used but it isn't defined |FuncUndefined| a user function is used but it isn't defined |SpellFileMissing| a spell file is used but it can't be found |SourcePre| before sourcing a Vim script @@ -304,6 +305,9 @@ |InsertCharPre| when a character was typed in Insert mode, before inserting it +|TextChanged| after a change was made to the text in Normal mode +|TextChangedI| after a change was made to the text in Insert mode + |ColorScheme| after loading a color scheme |RemoteReply| a reply from a server Vim was received @@ -462,6 +466,16 @@ *BufWritePost* BufWritePost After writing the whole buffer to a file (should undo the commands for BufWritePre). + *CmdUndefined* +CmdUndefined When a user command is used but it isn't + defined. Useful for defining a command only + when it's used. The pattern is matched + against the command name. Both and + are set to the name of the command. + NOTE: Autocompletion won't work until the + command is defined. An alternative is to + always define the user command and have it + invoke an autoloaded function. See |autoload|. *CmdwinEnter* CmdwinEnter After entering the command-line window. Useful for setting options specifically for @@ -480,6 +494,12 @@ |cmdwin-char| *ColorScheme* ColorScheme After loading a color scheme. |:colorscheme| + The pattern is matched against the + colorscheme name. can be used for the + name of the actual file where this option was + set, and for the new colorscheme + name. + *CompleteDone* CompleteDone After Insert mode completion is done. Either @@ -553,11 +573,15 @@ It is not allowed to change to another buffer here. You can reload the buffer but not edit another one. + *E881* + If the number of lines changes saving for undo + may fail and the change will be aborted. *FileChangedShell* FileChangedShell When Vim notices that the modification time of a file has changed since editing started. Also when the file attributes of the file - change. |timestamp| + change or when the size of the file changes. + |timestamp| Mostly triggered after executing a shell command, but also with a |:checktime| command or when Gvim regains input focus. @@ -657,6 +681,8 @@ when it's used. The pattern is matched against the function name. Both and are set to the name of the function. + NOTE: When writing Vim scripts a better + alternative is to use an autoloaded function. See |autoload-functions|. *GUIEnter* GUIEnter After starting the GUI successfully, and after @@ -731,7 +757,7 @@ command is run, before jumping to the first location. For |:cfile| and |:lfile| commands it is run after error file is read and before - moving to the first error. + moving to the first error. See |QuickFixCmdPost-example|. *QuitPre* QuitPre When using `:quit`, `:wq` or `:qall`, before diff -Naur vim74.orig/runtime/doc/change.txt vim74/runtime/doc/change.txt --- vim74.orig/runtime/doc/change.txt 2013-08-10 11:24:52.000000000 +0000 +++ vim74/runtime/doc/change.txt 2014-09-27 01:00:29.450512004 +0000 @@ -1,4 +1,4 @@ -*change.txt* For Vim version 7.4. Last change: 2013 Jul 17 +*change.txt* For Vim version 7.4. Last change: 2014 Jun 26 VIM REFERENCE MANUAL by Bram Moolenaar @@ -156,6 +156,9 @@ The 'B' and 'M' flags in 'formatoptions' change the behavior for inserting spaces before and after a multi-byte character |fo-table|. +The '[ mark is set at the end of the first line that was joined, '] at the end +of the resulting line. + ============================================================================== 2. Delete and insert *delete-insert* *replacing* @@ -475,8 +478,8 @@ 'shiftwidth'. If the 'smartindent' option is on, or 'cindent' is on and 'cinkeys' contains -'#', shift right does not affect lines starting with '#' (these are supposed -to be C preprocessor lines that must stay in column 1). +'#' with a zero value, shift right does not affect lines starting with '#' +(these are supposed to be C preprocessor lines that must stay in column 1). When the 'expandtab' option is off (this is the default) Vim uses s as much as possible to make the indent. You can use ">><<" to replace an indent @@ -824,7 +827,7 @@ < Substitute with an expression *sub-replace-expression* - *sub-replace-\=* + *sub-replace-\=* *s/\=* When the substitute string starts with "\=" the remainder is interpreted as an expression. This does not work recursively: a |substitute()| function inside the expression cannot use "\=" for the substitute string. @@ -1069,6 +1072,11 @@ replace and use "0p . You can repeat this as many times as you like, the unnamed register will be changed each time. +When you use a blockwise Visual mode command and yank only a single line into +a register, a paste on a visual selected area will paste that single line on +each of the selected lines (thus replacing the blockwise selected region by a +block of the pasted line). + *blockwise-register* If you use a blockwise Visual mode command to get the text into the register, the block of text will be inserted before ("P") or after ("p") the cursor @@ -1126,6 +1134,8 @@ made for the delete operator with these movement commands: |%|, |(|, |)|, |`|, |/|, |?|, |n|, |N|, |{| and |}|. Register "1 is always used then (this is Vi compatible). The "- register is used as well if the delete is within a line. +Note that these characters may be mapped. E.g. |%| is mapped by the matchit +plugin. With each successive deletion or change, Vim shifts the previous contents of register 1 into register 2, 2 into 3, and so forth, losing the previous contents of register 9. @@ -1640,7 +1650,7 @@ 7. Sorting text *sorting* Vim has a sorting function and a sorting command. The sorting function can be -found here: |sort()|. +found here: |sort()|, |uniq()|. *:sor* *:sort* :[range]sor[t][!] [i][u][r][n][x][o] [/{pattern}/] @@ -1707,8 +1717,8 @@ quite useless. The details about sorting depend on the library function used. There is no -guarantee that sorting is "stable" or obeys the current locale. You will have -to try it out. +guarantee that sorting obeys the current locale. You will have to try it out. +Vim does do a "stable" sort. The sorting can be interrupted, but if you interrupt it too late in the process you may end up with duplicated lines. This also depends on the system diff -Naur vim74.orig/runtime/doc/cmdline.txt vim74/runtime/doc/cmdline.txt --- vim74.orig/runtime/doc/cmdline.txt 2013-08-10 11:24:52.000000000 +0000 +++ vim74/runtime/doc/cmdline.txt 2014-09-27 01:00:29.453845329 +0000 @@ -1,4 +1,4 @@ -*cmdline.txt* For Vim version 7.4. Last change: 2013 Mar 16 +*cmdline.txt* For Vim version 7.4. Last change: 2014 Sep 06 VIM REFERENCE MANUAL by Bram Moolenaar @@ -56,7 +56,7 @@ These are completely separate. Each history can only be accessed when entering the same type of line. Use the 'history' option to set the number of lines that are remembered -(default: 20). +(default: 50). Notes: - When you enter a command-line that is exactly the same as an older one, the old one is removed (to avoid repeated commands moving older commands out of @@ -356,6 +356,10 @@ List the recent five entries from all histories: > :history all -5, +:keepp[atterns] {command} *:keepp* *:keeppatterns* + Execute {command}, without adding anything to the search + history + ============================================================================== 2. Command-line completion *cmdline-completion* @@ -754,6 +758,7 @@ function expand() |expand()|. % Is replaced with the current file name. *:_%* *c_%* # Is replaced with the alternate file name. *:_#* *c_#* + This is remembered for every window. #n (where n is a number) is replaced with *:_#0* *:_#n* the file name of buffer n. "#0" is the same as "#". *c_#n* ## Is replaced with all names in the argument list *:_##* *c_##* @@ -819,8 +824,8 @@ the start of the function. *filename-modifiers* - *:_%:* *::8* *::p* *::.* *::~* *::h* *::t* *::r* *::e* *::s* *::gs* - *%:8* *%:p* *%:.* *%:~* *%:h* *%:t* *%:r* *%:e* *%:s* *%:gs* +*:_%:* *::8* *::p* *::.* *::~* *::h* *::t* *::r* *::e* *::s* *::gs* *::S* + *%:8* *%:p* *%:.* *%:~* *%:h* *%:t* *%:r* *%:e* *%:s* *%:gs* *%:S* The file name modifiers can be used after "%", "#", "#n", "", "", "" or "". They are also used with the |fnamemodify()| function. These are not available when Vim has been compiled without the |+modify_fname| @@ -875,6 +880,10 @@ :gs?pat?sub? Substitute all occurrences of "pat" with "sub". Otherwise this works like ":s". + :S Escape special characters for use with a shell command (see + |shellescape()|). Must be the last one. Examples: > + :!dir :S + :call system('chmod +w -- ' . expand('%:S')) Examples, when the file name is "src/version.c", current dir "/home/mool/vim": > @@ -1075,6 +1084,9 @@ statusline of the command-line window itself and the statusline above it. Thus you can resize the command-line window, but not others. +The |getcmdwintype()| function returns the type of the command-line being +edited as described in |cmdwin-char|. + AUTOCOMMANDS diff -Naur vim74.orig/runtime/doc/develop.txt vim74/runtime/doc/develop.txt --- vim74.orig/runtime/doc/develop.txt 2013-08-10 11:24:52.000000000 +0000 +++ vim74/runtime/doc/develop.txt 2014-09-27 01:00:29.463845304 +0000 @@ -1,4 +1,4 @@ -*develop.txt* For Vim version 7.4. Last change: 2013 Apr 27 +*develop.txt* For Vim version 7.4. Last change: 2014 Mar 27 VIM REFERENCE MANUAL by Bram Moolenaar @@ -19,7 +19,6 @@ Vim is open source software. Everybody is encouraged to contribute to help improving Vim. For sending patches a context diff "diff -c" is preferred. -Also see http://www.vim.org/tips/tip.php?tip_id=618. Also see http://vim.wikia.com/wiki/How_to_make_and_submit_a_patch. ============================================================================== diff -Naur vim74.orig/runtime/doc/diff.txt vim74/runtime/doc/diff.txt --- vim74.orig/runtime/doc/diff.txt 2013-08-10 11:24:52.000000000 +0000 +++ vim74/runtime/doc/diff.txt 2014-09-27 01:00:29.463845304 +0000 @@ -1,4 +1,4 @@ -*diff.txt* For Vim version 7.4. Last change: 2013 Jul 07 +*diff.txt* For Vim version 7.4. Last change: 2014 May 20 VIM REFERENCE MANUAL by Bram Moolenaar @@ -95,7 +95,7 @@ :difft[his] Make the current window part of the diff windows. This sets the options like for "vimdiff". -:diffp[atch] {patchfile} *E816* *:diffp* *:diffpatch* +:diffp[atch] {patchfile} *E816* *:diffp* *:diffpatch* Use the current buffer, patch it with the diff found in {patchfile} and open a buffer on the result. The options are set as for "vimdiff". @@ -123,10 +123,14 @@ file for a moment and come back to the same file and be in diff mode again. *:diffo* *:diffoff* -:diffo[ff] Switch off diff mode for the current window. +:diffo[ff] Switch off diff mode for the current window. Resets related + options also when 'diff' was not set. :diffo[ff]! Switch off diff mode for the current window and in all windows - in the current tab page where 'diff' is set. + in the current tab page where 'diff' is set. Resetting + related options only happens in a window that has 'diff' set, + if the current window does not have 'diff' set then no options + in it are changed. The ":diffoff" command resets the relevant options to the values they had when using |:diffsplit|, |:diffpatch| , |:diffthis|. or starting Vim in diff mode. diff -Naur vim74.orig/runtime/doc/digraph.txt vim74/runtime/doc/digraph.txt --- vim74.orig/runtime/doc/digraph.txt 2013-08-10 11:24:52.000000000 +0000 +++ vim74/runtime/doc/digraph.txt 2014-09-27 01:00:29.467178629 +0000 @@ -1,4 +1,4 @@ -*digraph.txt* For Vim version 7.4. Last change: 2011 Jan 15 +*digraph.txt* For Vim version 7.4. Last change: 2014 Jun 19 VIM REFERENCE MANUAL by Bram Moolenaar @@ -147,7 +147,7 @@ Two 2 Hook Nine 9 Horn - Equals = Cyrillic + Equals = Cyrillic (= used as second char) Asterisk * Greek Percent sign % Greek/Cyrillic special Plus + smalls: Arabic, capitals: Hebrew @@ -170,6 +170,11 @@ used for the euro sign, while both of them are the character 164, 0xa4. For compatibility with zsh Eu can also be used for the euro sign. +ROUBLE + +The rouble sign was added in 2014 as 0x20bd. Vim supports the digraphs =R and +=P for this. Note that R= and P= are other characters. + *digraph-table* char digraph hex dec official name ~ ^@ NU 0x00 0 NULL (NUL) @@ -966,6 +971,8 @@ ₧ Pt 20A7 8359 PESETA SIGN â‚© W= 20A9 8361 WON SIGN € Eu 20AC 8364 EURO SIGN +₽ =R 20BD 8381 ROUBLE SIGN +₽ =P 20BD 8381 ROUBLE SIGN ℃ oC 2103 8451 DEGREE CELSIUS â„… co 2105 8453 CARE OF ℉ oF 2109 8457 DEGREE FAHRENHEIT @@ -1077,7 +1084,7 @@ ⊥ -T 22A5 8869 UP TACK â‹… .P 22C5 8901 DOT OPERATOR â‹® :3 22EE 8942 VERTICAL ELLIPSIS -⋯ .3 22EF 8943 MIDLINE HORIZONTAL ELLIPSIS +⋯ .3 22EF 8943 MIDLINE HORIZONTAL ELLIPSIS ⌂ Eh 2302 8962 HOUSE ⌈ <7 2308 8968 LEFT CEILING ⌉ >7 2309 8969 RIGHT CEILING diff -Naur vim74.orig/runtime/doc/editing.txt vim74/runtime/doc/editing.txt --- vim74.orig/runtime/doc/editing.txt 2013-08-10 11:24:53.000000000 +0000 +++ vim74/runtime/doc/editing.txt 2014-09-27 01:00:29.473845279 +0000 @@ -1,4 +1,4 @@ -*editing.txt* For Vim version 7.4. Last change: 2013 Aug 03 +*editing.txt* For Vim version 7.4. Last change: 2014 Sep 19 VIM REFERENCE MANUAL by Bram Moolenaar @@ -38,6 +38,7 @@ file name. It can be used with "#" on the command line |:_#| and you can use the |CTRL-^| command to toggle between the current and the alternate file. However, the alternate file name is not changed when |:keepalt| is used. +An alternate file name is remembered for each window. *:keepalt* *:keepa* :keepalt {cmd} Execute {cmd} while keeping the current alternate file @@ -608,7 +609,10 @@ {not in Vi} :[count]arga[dd] {name} .. *:arga* *:argadd* *E479* - Add the {name}s to the argument list. +:[count]arga[dd] + Add the {name}s to the argument list. When {name} is + omitted at the current buffer name to the argument + list. If [count] is omitted, the {name}s are added just after the current entry in the argument list. Otherwise they are added after the [count]'th file. @@ -1361,11 +1365,21 @@ {only available when compiled with the |+cryptv| feature} *E833* The text in the swap file and the undo file is also encrypted. *E843* +However, this is done block-by-block and may reduce the time needed to crack a +password. You can disable the swap file, but then a crash will cause you to +lose your work. The undo file can be disabled without much disadvantage. > + :set noundofile + :noswapfile edit secrets Note: The text in memory is not encrypted. A system administrator may be able to see your text while you are editing it. When filtering text with -":!filter" or using ":w !command" the text is not encrypted, this may reveal -it to others. The 'viminfo' file is not encrypted. +":!filter" or using ":w !command" the text is also not encrypted, this may +reveal it to others. The 'viminfo' file is not encrypted. + +You could do this to edit very secret text: > + :set noundofile viminfo= + :noswapfile edit secrets.txt +Keep in mind that without a swap file you risk loosing your work in a crash. WARNING: If you make a typo when entering the key and then write the file and exit, the text will be lost! @@ -1392,18 +1406,25 @@ :set key= You can use the 'cryptmethod' option to select the type of encryption, use one -of these two: > - :setlocal cm=zip " weak method, backwards compatible - :setlocal cm=blowfish " strong method +of these: > + :setlocal cm=zip " weak method, backwards compatible + :setlocal cm=blowfish " method with flaws + :setlocal cm=blowfish2 " medium strong method + Do this before writing the file. When reading an encrypted file it will be set automatically to the method used when that file was written. You can change 'cryptmethod' before writing that file to change the method. + To set the default method, used for new files, use one of these in your |vimrc| file: > set cm=zip - set cm=blowfish + set cm=blowfish2 +Use the first one if you need to be compatible with Vim 7.2 and older. Using +"blowfish2" is highly recommended if you can use a Vim version that supports +it. + The message given for reading and writing a file will show "[crypted]" when -using zip, "[blowfish]" when using blowfish. +using zip, "[blowfish]" when using blowfish, etc. When writing an undo file, the same key and method will be used for the text in the undo file. |persistent-undo|. @@ -1438,7 +1459,7 @@ 0 string VimCrypt~ Vim encrypted file >9 string 01 - "zip" cryptmethod >9 string 02 - "blowfish" cryptmethod - + >9 string 03 - "blowfish2" cryptmethod Notes: - Encryption is not possible when doing conversion with 'charconvert'. @@ -1462,20 +1483,25 @@ - Pkzip uses the same encryption as 'cryptmethod' "zip", and US Govt has no objection to its export. Pkzip's public file APPNOTE.TXT describes this algorithm in detail. +- The implmentation of 'cryptmethod' "blowfish" has a flaw. It is possible to + crack the first 64 bytes of a file and in some circumstances more of the + file. Use of it is not recommended, but it's still the strongest method + supported by Vim 7.3 and 7.4. The "zip" method is even weaker. - Vim originates from the Netherlands. That is where the sources come from. Thus the encryption code is not exported from the USA. ============================================================================== 10. Timestamps *timestamp* *timestamps* -Vim remembers the modification timestamp of a file when you begin editing it. -This is used to avoid that you have two different versions of the same file -(without you knowing this). - -After a shell command is run (|:!cmd| |suspend| |:read!| |K|) timestamps are -compared for all buffers in a window. Vim will run any associated -|FileChangedShell| autocommands or display a warning for any files that have -changed. In the GUI this happens when Vim regains input focus. +Vim remembers the modification timestamp, mode and size of a file when you +begin editing it. This is used to avoid that you have two different versions +of the same file (without you knowing this). + +After a shell command is run (|:!cmd| |suspend| |:read!| |K|) timestamps, +file modes and file sizes are compared for all buffers in a window. Vim will +run any associated |FileChangedShell| autocommands or display a warning for +any files that have changed. In the GUI this happens when Vim regains input +focus. *E321* *E462* If you want to automatically reload a file when it has been changed outside of diff -Naur vim74.orig/runtime/doc/eval.txt vim74/runtime/doc/eval.txt --- vim74.orig/runtime/doc/eval.txt 2013-08-10 11:24:53.000000000 +0000 +++ vim74/runtime/doc/eval.txt 2014-09-27 01:00:29.490511904 +0000 @@ -1,4 +1,4 @@ -*eval.txt* For Vim version 7.4. Last change: 2013 Aug 03 +*eval.txt* For Vim version 7.4. Last change: 2014 Sep 09 VIM REFERENCE MANUAL by Bram Moolenaar @@ -123,6 +123,7 @@ :echo Fn() < *E704* *E705* *E707* A Funcref variable must start with a capital, "s:", "w:", "t:" or "b:". You +can use "g:" but the following name must still start with a capital. You cannot have both a Funcref variable and a function with the same name. A special case is defining a function and directly assigning its Funcref to a @@ -147,7 +148,7 @@ 1.3 Lists ~ - *List* *Lists* *E686* + *list* *List* *Lists* *E686* A List is an ordered sequence of items. An item can be of any type. Items can be accessed by their index number. Items can be added and removed at any position in the sequence. @@ -326,6 +327,7 @@ Changing the order of items in a list: > :call sort(list) " sort a list alphabetically :call reverse(list) " reverse the order of items + :call uniq(sort(list)) " sort and remove duplicates For loop ~ @@ -392,7 +394,7 @@ 1.4 Dictionaries ~ - *Dictionaries* *Dictionary* + *dict* *Dictionaries* *Dictionary* A Dictionary is an associative array: Each entry has a key and a value. The entry can be located with the key. The entries are stored without a specific ordering. @@ -1003,7 +1005,7 @@ -string *expr-string* *E114* +string *string* *expr-string* *E114* ------ "string" string constant *expr-quote* @@ -1100,9 +1102,9 @@ the environment variables known inside the current Vim session. If that fails, a shell will be used to expand the variable. This can be slow, but it does expand all variables that the shell knows about. Example: > - :echo $version - :echo expand("$version") -The first one probably doesn't echo anything, the second echoes the $version + :echo $shell + :echo expand("$shell") +The first one probably doesn't echo anything, the second echoes the $shell variable (if your shell supports it). @@ -1142,7 +1144,7 @@ |local-variable| l: Local to a function. |script-variable| s: Local to a |:source|'ed Vim script. |function-argument| a: Function argument (only inside a function). -|vim-variable| v: Global, predefined by Vim. +|vim-variable| v: Global, predefined by Vim. The scope name by itself can be used as a |Dictionary|. For example, to delete all script-local variables: > @@ -1454,6 +1456,13 @@ v:foldstart Used for 'foldtext': first line of closed fold. Read-only in the |sandbox|. |fold-foldtext| + *v:hlsearch* *hlsearch-variable* +v:hlsearch Variable that determines whether search highlighting is on. + Makes sense only if 'hlsearch' is enabled which requires + |+extra_search|. Setting this variable to zero acts the like + |:nohlsearch| command, setting it to one acts like > + let &hlsearch = &hlsearch +< *v:insertmode* *insertmode-variable* v:insertmode Used for the |InsertEnter| and |InsertChange| autocommand events. Values: @@ -1511,6 +1520,7 @@ startup. These are the files that Vim remembers marks for. The length of the List is limited by the ' argument of the 'viminfo' option (default is 100). + When the |viminfo| file is not used the List is empty. Also see |:oldfiles| and |c_#<|. The List can be modified, but this has no effect on what is stored in the |viminfo| file later. If you use values other @@ -1548,6 +1558,16 @@ |evim| etc., or any other name you might symlink to Vim. Read-only. + *v:progpath* *progpath-variable* +v:progpath Contains the command with which Vim was invoked, including the + path. Useful if you want to message a Vim server using a + |--remote-expr|. + To get the full path use: > + echo exepath(v:progpath) +< NOTE: This does not work when the command is a relative path + and the current directory has changed. + Read-only. + *v:register* *register-variable* v:register The name of the register in effect for the current normal mode command (regardless of whether that command actually used a @@ -1662,7 +1682,7 @@ is 501. Read-only. "version" also works, for backwards compatibility. Use |has()| to check if a certain patch was included, e.g.: > - if has("patch123") + if has("patch-7.4.123") < Note that patch numbers are specific to the version, thus both version 5.0 and 5.1 may have a patch 123, but these are completely different. @@ -1696,6 +1716,8 @@ append( {lnum}, {list}) Number append lines {list} below line {lnum} argc() Number number of files in the argument list argidx() Number current index in the argument list +arglistid( [{winnr}, [ {tabnr}]]) + Number argument list id argv( {nr}) String {nr} entry of the argument list argv( ) List the argument list asin( {expr}) Float arc sine of {expr} @@ -1712,6 +1734,7 @@ bufwinnr( {expr}) Number window number of buffer {expr} byte2line( {byte}) Number line number at byte count {byte} byteidx( {expr}, {nr}) Number byte index of {nr}'th char in {expr} +byteidxcomp( {expr}, {nr}) Number byte index of {nr}'th char in {expr} call( {func}, {arglist} [, {dict}]) any call {func} with arguments {arglist} ceil( {expr}) Float round {expr} up @@ -1735,7 +1758,7 @@ cursor( {lnum}, {col} [, {coladd}]) Number move cursor to {lnum}, {col}, {coladd} cursor( {list}) Number move cursor to position in {list} -deepcopy( {expr}) any make a full copy of {expr} +deepcopy( {expr} [, {noref}]) any make a full copy of {expr} delete( {fname}) Number delete file {fname} did_filetype() Number TRUE if FileType autocommand event used diff_filler( {lnum}) Number diff filler lines about {lnum} @@ -1745,6 +1768,7 @@ eval( {string}) any evaluate {string} into its value eventhandler( ) Number TRUE if inside an event handler executable( {expr}) Number 1 if executable {expr} exists +exepath( {expr}) String full path of the command {expr} exists( {expr}) Number TRUE if {expr} exists extend( {expr1}, {expr2} [, {expr3}]) List/Dict insert items of {expr2} into {expr1} @@ -1783,11 +1807,13 @@ getcharmod( ) Number modifiers for the last typed character getcmdline() String return the current command-line getcmdpos() Number return cursor position in command-line -getcmdtype() String return the current command-line type +getcmdtype() String return current command-line type +getcmdwintype() String return current command-line window type +getcurpos() List position of the cursor getcwd() String the current working directory +getfontname( [{name}]) String name of font being used getfperm( {fname}) String file permissions of file {fname} getfsize( {fname}) Number size in bytes of file {fname} -getfontname( [{name}]) String name of font being used getftime( {fname}) Number last modification time of file getftype( {fname}) String description of type of file {fname} getline( {lnum}) String line {lnum} of current buffer @@ -1797,7 +1823,8 @@ getpid() Number process ID of Vim getpos( {expr}) List position of cursor, mark, etc. getqflist() List list of quickfix items -getreg( [{regname} [, 1]]) String contents of register +getreg( [{regname} [, 1 [, {list}]]]) + String or List contents of register getregtype( [{regname}]) String type of register gettabvar( {nr}, {varname} [, {def}]) any variable {varname} in tab {nr} or {def} @@ -1809,7 +1836,7 @@ any variable {varname} in window {nr} glob( {expr} [, {nosuf} [, {list}]]) any expand file wildcards in {expr} -globpath( {path}, {expr} [, {flag}]) +globpath( {path}, {expr} [, {nosuf} [, {list}]]) String do glob({expr}) for all dirs in {path} has( {feature}) Number TRUE if feature {feature} supported has_key( {dict}, {key}) Number TRUE if {dict} has entry {key} @@ -1861,6 +1888,8 @@ Number position where {pat} matches in {expr} matchadd( {group}, {pattern}[, {priority}[, {id}]]) Number highlight {pattern} with {group} +matchaddpos( {group}, {list}[, {priority}[, {id}]]) + Number highlight positions with {group} matcharg( {nr}) List arguments of |:match| matchdelete( {id}) Number delete match identified by {id} matchend( {expr}, {pat}[, {start}[, {count}]]) @@ -1968,7 +1997,8 @@ Number last index of {needle} in {haystack} strtrans( {expr}) String translate string to make it printable strwidth( {expr}) Number display cell length of the String {expr} -submatch( {nr}) String specific match in ":s" or substitute() +submatch( {nr}[, {list}]) String or List + specific match in ":s" or substitute() substitute( {expr}, {pat}, {sub}, {flags}) String all {pat} in {expr} replaced with {sub} synID( {lnum}, {col}, {trans}) Number syntax ID at {lnum} and {col} @@ -1978,6 +2008,7 @@ synconcealed( {lnum}, {col}) List info about concealing synstack( {lnum}, {col}) List stack of syntax IDs at {lnum} and {col} system( {expr} [, {input}]) String output of shell command/filter {expr} +systemlist( {expr} [, {input}]) List output of shell command/filter {expr} tabpagebuflist( [{arg}]) List list of buffer numbers in tab page tabpagenr( [{arg}]) Number number of current or last tab page tabpagewinnr( {tabarg}[, {arg}]) @@ -1995,6 +2026,8 @@ type( {name}) Number type of variable {name} undofile( {name}) String undo file name for {name} undotree() List undo file tree +uniq( {list} [, {func} [, {dict}]]) + List remove adjacent duplicates from a list values( {dict}) List values in {dict} virtcol( {expr}) Number screen column of cursor or mark visualmode( [expr]) String last visual mode used @@ -2076,6 +2109,18 @@ argidx() The result is the current index in the argument list. 0 is the first file. argc() - 1 is the last one. See |arglist|. + *arglistid()* +arglistid([{winnr}, [ {tabnr} ]]) + Return the argument list ID. This is a number which + identifies the argument list being used. Zero is used for the + global argument list. See |arglist|. + Return -1 if the arguments are invalid. + + Without arguments use the current window. + With {winnr} only use this window in the current tab page. + With {winnr} and {tabnr} use the window in the specified tab + page. + *argv()* argv([{nr}]) The result is the {nr}th file in the argument list of the current window. See |arglist|. "argv(0)" is the first one. @@ -2260,7 +2305,10 @@ {expr}. Use zero for the first character, it returns zero. This function is only useful when there are multibyte characters, otherwise the returned value is equal to {nr}. - Composing characters are counted as a separate character. + Composing characters are not counted separately, their byte + length is added to the preceding base character. See + |byteidxcomp()| below for counting composing characters + separately. Example : > echo matchstr(str, ".", byteidx(str, 3)) < will display the fourth character. Another way to do the @@ -2269,7 +2317,20 @@ echo strpart(s, 0, byteidx(s, 1)) < If there are less than {nr} characters -1 is returned. If there are exactly {nr} characters the length of the string - is returned. + in bytes is returned. + +byteidxcomp({expr}, {nr}) *byteidxcomp()* + Like byteidx(), except that a composing character is counted + as a separate character. Example: > + let s = 'e' . nr2char(0x301) + echo byteidx(s, 1) + echo byteidxcomp(s, 1) + echo byteidxcomp(s, 2) +< The first and third echo result in 3 ('e' plus composing + character is 3 bytes), the second echo results in 1 ('e' is + one byte). + Only works different from byteidx() when 'encoding' is set to + a Unicode encoding. call({func}, {arglist} [, {dict}]) *call()* *E699* Call function {func} with the items in |List| {arglist} as @@ -2544,9 +2605,14 @@ cursor({list}) Positions the cursor at the column (byte count) {col} in the line {lnum}. The first column is one. + When there is one argument {list} this is used as a |List| - with two or three items {lnum}, {col} and {off}. This is like - the return value of |getpos()|, but without the first item. + with two, three or four item: + [{lnum}, {col}, {off}] + [{lnum}, {col}, {off}, {curswant}] + This is like the return value of |getpos()| or |getcurpos()|, + but without the first item. + Does not change the jumplist. If {lnum} is greater than the number of lines in the buffer, the cursor will be positioned at the last line in the buffer. @@ -2555,6 +2621,8 @@ the cursor will be positioned at the last character in the line. If {col} is zero, the cursor will stay in the current column. + If {curswant} is given it is used to set the preferred column + for vertical movement. Otherwise {col} is used. When 'virtualedit' is used {off} specifies the offset in screen columns from the start of the character. E.g., a position within a or after the last character. @@ -2671,6 +2739,15 @@ 0 does not exist -1 not implemented on this system +exepath({expr}) *exepath()* + If {expr} is an executable and is either an absolute path, a + relative path or found in $PATH, return the full path. + Note that the current directory is used when {expr} starts + with "./", which may be a problem for Vim: > + echo exepath(v:progpath) +< If {expr} cannot be found in $PATH or is not executable then + an empty string is returned. + *exists()* exists({expr}) The result is a Number, which is non-zero if {expr} is defined, zero otherwise. The {expr} argument is a string, @@ -2683,7 +2760,8 @@ string) *funcname built-in function (see |functions|) or user defined function (see - |user-functions|). + |user-functions|). Also works for a + variable that is a Funcref. varname internal variable (see |internal-variables|). Also works for |curly-braces-names|, |Dictionary| @@ -2789,7 +2867,7 @@ autocmd file name autocmd buffer number (as a String!) autocmd matched name - sourced script file name + sourced script file or function name sourced script file line number word under the cursor WORD under the cursor @@ -2835,7 +2913,8 @@ < Expand() can also be used to expand variables and environment variables that are only known in a shell. But this can be - slow, because a shell must be started. See |expr-env-expand|. + slow, because a shell may be used to do the expansion. See + |expr-env-expand|. The expanded variable is still handled like a list of file names. When an environment variable cannot be expanded, it is left unchanged. Thus ":echo expand('$FOOBAR')" results in @@ -3175,7 +3254,7 @@ If [expr] is 1, only check if a character is available, it is not consumed. Return zero if no character available. - Without {expr} and when {expr} is 0 a whole character or + Without [expr] and when [expr] is 0 a whole character or special key is returned. If it is an 8-bit character, the result is a number. Use nr2char() to convert it to a String. Otherwise a String is returned with the encoded character. @@ -3185,7 +3264,11 @@ String when a modifier (shift, control, alt) was used that is not included in the character. - When {expr} is 1 only the first byte is returned. For a + When [expr] is 0 and Esc is typed, there will be a short delay + while Vim waits to see if this is the start of an escape + sequence. + + When [expr] is 1 only the first byte is returned. For a one-byte character it is the character itself as a number. Use nr2char() to convert it to a String. @@ -3263,11 +3346,28 @@ ? backward search command @ |input()| command - |:insert| or |:append| command + = |i_CTRL-R_=| Only works when editing the command line, thus requires use of |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping. Returns an empty string otherwise. Also see |getcmdpos()|, |setcmdpos()| and |getcmdline()|. +getcmdwintype() *getcmdwintype()* + Return the current |command-line-window| type. Possible return + values are the same as |getcmdtype()|. Returns an empty string + when not in the command-line window. + + *getcurpos()* +getcurpos() Get the position of the cursor. This is like getpos('.'), but + includes an extra item in the list: + [bufnum, lnum, col, off, curswant] + The "curswant" number is the preferred column when moving the + cursor vertically. + This can be used to save and restore the cursor position: > + let save_cursor = getcurpos() + MoveTheCursorAround + call setpos('.', save_cursor) +< *getcwd()* getcwd() The result is a String, which is the name of the current working directory. @@ -3389,6 +3489,34 @@ 'pattern': 'FIXME', 'priority': 10, 'id': 2}] > :unlet m < + *getpid()* +getpid() Return a Number which is the process ID of the Vim process. + On Unix and MS-Windows this is a unique number, until Vim + exits. On MS-DOS it's always zero. + + *getpos()* +getpos({expr}) Get the position for {expr}. For possible values of {expr} + see |line()|. For getting the cursor position see + |getcurpos()|. + The result is a |List| with four numbers: + [bufnum, lnum, col, off] + "bufnum" is zero, unless a mark like '0 or 'A is used, then it + is the buffer number of the mark. + "lnum" and "col" are the position in the buffer. The first + column is 1. + The "off" number is zero, unless 'virtualedit' is used. Then + it is the offset in screen columns from the start of the + character. E.g., a position within a or after the last + character. + Note that for '< and '> Visual mode matters: when it is "V" + (visual line mode) the column of '< is zero and the column of + '> is a large number. + This can be used to save and restore the position of a mark: > + let save_a_mark = getpos("'a") + ... + call setpos(''a', save_a_mark +< Also see |getcurpos()| and |setpos()|. + getqflist() *getqflist()* Returns a list with all the current quickfix errors. Each @@ -3417,7 +3545,7 @@ :endfor -getreg([{regname} [, 1]]) *getreg()* +getreg([{regname} [, 1 [, {list}]]]) *getreg()* The result is a String, which is the contents of register {regname}. Example: > :let cliptext = getreg('*') @@ -3426,6 +3554,11 @@ getreg('=', 1) returns the expression itself, so that it can be restored with |setreg()|. For other registers the extra argument is ignored, thus you can always give it. + If {list} is present and non-zero result type is changed to + |List|. Each list item is one text line. Use it if you care + about zero bytes possibly present inside register: without + third argument both NLs and zero bytes are represented as NLs + (see |NL-used-for-Nul|). If {regname} is not specified, |v:register| is used. @@ -3435,7 +3568,7 @@ "v" for |characterwise| text "V" for |linewise| text "{width}" for |blockwise-visual| text - 0 for an empty or unknown register + "" for an empty or unknown register is one character with value 0x16. If {regname} is not specified, |v:register| is used. @@ -3443,6 +3576,8 @@ Get the value of a tab-local variable {varname} in tab page {tabnr}. |t:var| Tabs are numbered starting with one. + When {varname} is empty a dictionary with all tab-local + variables is returned. Note that the name without "t:" must be used. When the tab or variable doesn't exist {def} or an empty string is returned, there is no error message. @@ -3513,11 +3648,12 @@ See |expand()| for expanding special Vim variables. See |system()| for getting the raw output of an external command. -globpath({path}, {expr} [, {flag}]) *globpath()* +globpath({path}, {expr} [, {nosuf} [, {list}]]) *globpath()* Perform glob() on all directories in {path} and concatenate the results. Example: > :echo globpath(&rtp, "syntax/c.vim") -< {path} is a comma-separated list of directory names. Each +< + {path} is a comma-separated list of directory names. Each directory name is prepended to {expr} and expanded like with |glob()|. A path separator is inserted when needed. To add a comma inside a directory name escape it with a @@ -3525,11 +3661,19 @@ trailing backslash, remove it if you put a comma after it. If the expansion fails for one of the directories, there is no error message. - Unless the optional {flag} argument is given and is non-zero, + + Unless the optional {nosuf} argument is given and is non-zero, the 'suffixes' and 'wildignore' options apply: Names matching one of the patterns in 'wildignore' will be skipped and 'suffixes' affect the ordering of matches. + When {list} is present and it is non-zero the result is a List + with all matching files. The advantage of using a List is, you + also get filenames containing newlines correctly. Otherwise + the result is a String and when there are several matches, + they are separated by characters. Example: > + :echo globpath(&rtp, "syntax/c.vim", 0, 1) +< The "**" item can be used to search in a directory tree. For example, to find all "README.txt" files in the directories in 'runtimepath' and below: > @@ -4109,6 +4253,8 @@ (|mapmode-ic|) "sid" The script local ID, used for mappings (||). + "nowait" Do not wait for other, longer mappings. + (|:map-|). The mappings local to the current buffer are checked first, then the global mappings. @@ -4210,6 +4356,9 @@ "match"). It will be highlighted with {group}. Returns an identification number (ID), which can be used to delete the match using |matchdelete()|. + Matching is case sensitive and magic, unless case sensitivity + or magicness are explicitly overridden in {pattern}. The + 'magic', 'smartcase' and 'ignorecase' options are not used. The optional {priority} argument assigns a priority to the match. A match with a high priority will have its @@ -4243,6 +4392,41 @@ available from |getmatches()|. All matches can be deleted in one operation by |clearmatches()|. +matchaddpos({group}, {pos}[, {priority}[, {id}]]) *matchaddpos()* + Same as |matchadd()|, but requires a list of positions {pos} + instead of a pattern. This command is faster than |matchadd()| + because it does not require to handle regular expressions and + sets buffer line boundaries to redraw screen. It is supposed + to be used when fast match additions and deletions are + required, for example to highlight matching parentheses. + + The list {pos} can contain one of these items: + - A number. This whole line will be highlighted. The first + line has number 1. + - A list with one number, e.g., [23]. The whole line with this + number will be highlighted. + - A list with two numbers, e.g., [23, 11]. The first number is + the line number, the second one is the column number (first + column is 1, the value must correspond to the byte index as + |col()| would return). The character at this position will + be highlighted. + - A list with three numbers, e.g., [23, 11, 3]. As above, but + the third number gives the length of the highlight in bytes. + + The maximum number of positions is 8. + + Example: > + :highlight MyGroup ctermbg=green guibg=green + :let m = matchaddpos("MyGroup", [[23, 24], 34]) +< Deletion of the pattern: > + :call matchdelete(m) + +< Matches added by |matchaddpos()| are returned by + |getmatches()| with an entry "pos1", "pos2", etc., with the + value a list like the {pos} item. + These matches cannot be set via |setmatches()|, however they + can still be deleted by |clearmatches()|. + matcharg({nr}) *matcharg()* Selects the {nr} match item, as set with a |:match|, |:2match| or |:3match| command. @@ -4401,30 +4585,6 @@ characters. nr2char(0) is a real NUL and terminates the string, thus results in an empty string. - *getpid()* -getpid() Return a Number which is the process ID of the Vim process. - On Unix and MS-Windows this is a unique number, until Vim - exits. On MS-DOS it's always zero. - - *getpos()* -getpos({expr}) Get the position for {expr}. For possible values of {expr} - see |line()|. - The result is a |List| with four numbers: - [bufnum, lnum, col, off] - "bufnum" is zero, unless a mark like '0 or 'A is used, then it - is the buffer number of the mark. - "lnum" and "col" are the position in the buffer. The first - column is 1. - The "off" number is zero, unless 'virtualedit' is used. Then - it is the offset in screen columns from the start of the - character. E.g., a position within a or after the last - character. - This can be used to save and restore the cursor position: > - let save_cursor = getpos(".") - MoveTheCursorAround - call setpos('.', save_cursor) -< Also see |setpos()|. - or({expr}, {expr}) *or()* Bitwise OR on the two arguments. The arguments are converted to a number. A List, Dict or Float argument causes an error. @@ -5223,8 +5383,9 @@ . the cursor 'x mark x - {list} must be a |List| with four numbers: + {list} must be a |List| with four or five numbers: [bufnum, lnum, col, off] + [bufnum, lnum, col, off, curswant] "bufnum" is the buffer number. Zero can be used for the current buffer. Setting the cursor is only possible for @@ -5242,13 +5403,26 @@ character. E.g., a position within a or after the last character. + The "curswant" number is only used when setting the cursor + position. It sets the preferred column for when moving the + cursor vertically. When the "curswant" number is missing the + preferred column is not set. When it is present and setting a + mark position it is not used. + + Note that for '< and '> changing the line number may result in + the marks to be effectively be swapped, so that '< is always + before '>. + Returns 0 when the position could be set, -1 otherwise. An error message is given if {expr} is invalid. - Also see |getpos()| + Also see |getpos()| and |getcurpos()|. This does not restore the preferred column for moving - vertically. See |winrestview()| for that. + vertically; if you set the cursor position with this, |j| and + |k| motions will jump to previous columns! Use |cursor()| to + also set the preferred column. Also see the "curswant" key in + |winrestview()|. setqflist({list} [, {action}]) *setqflist()* @@ -5300,6 +5474,8 @@ *setreg()* setreg({regname}, {value} [,{options}]) Set the register {regname} to {value}. + {value} may be any value returned by |getreg()|, including + a |List|. If {options} contains "a" or {regname} is upper case, then the value is appended. {options} can also contain a register type specification: @@ -5312,10 +5488,15 @@ in the longest line (counting a as 1 character). If {options} contains no register settings, then the default - is to use character mode unless {value} ends in a . - Setting the '=' register is not possible, but you can use > - :let @= = var_expr -< Returns zero for success, non-zero for failure. + is to use character mode unless {value} ends in a for + string {value} and linewise mode for list {value}. Blockwise + mode is never selected automatically. + Returns zero for success, non-zero for failure. + + *E883* + Note: you may not use |List| containing more than one item to + set search and expression registers. Lists containing no + items act like empty strings. Examples: > :call setreg(v:register, @*) @@ -5323,8 +5504,11 @@ :call setreg('a', "1\n2\n3", 'b5') < This example shows using the functions to save and restore a - register. > - :let var_a = getreg('a', 1) + register (note: you may not reliably restore register value + without using the third argument to |getreg()| as without it + newlines are represented as newlines AND Nul bytes are + represented as newlines as well, see |NL-used-for-Nul|). > + :let var_a = getreg('a', 1, 1) :let var_amode = getregtype('a') .... :call setreg('a', var_a, var_amode) @@ -5390,6 +5574,7 @@ < This results in a directory listing for the file under the cursor. Example of use with |system()|: > :call system("chmod +w -- " . shellescape(expand("%"))) +< See also |::S|. shiftwidth() *shiftwidth()* @@ -5449,20 +5634,40 @@ sort({list} [, {func} [, {dict}]]) *sort()* *E702* - Sort the items in {list} in-place. Returns {list}. If you - want a list to remain unmodified make a copy first: > + Sort the items in {list} in-place. Returns {list}. + + If you want a list to remain unmodified make a copy first: > :let sortedlist = sort(copy(mylist)) -< Uses the string representation of each item to sort on. - Numbers sort after Strings, |Lists| after Numbers. - For sorting text in the current buffer use |:sort|. - When {func} is given and it is one then case is ignored. - {dict} is for functions with the "dict" attribute. It will be - used to set the local variable "self". |Dictionary-function| + +< When {func} is omitted, is empty or zero, then sort() uses the + string representation of each item to sort on. Numbers sort + after Strings, |Lists| after Numbers. For sorting text in the + current buffer use |:sort|. + + When {func} is given and it is '1' or 'i' then case is + ignored. + + When {func} is given and it is 'n' then all items will be + sorted numerical (Implementation detail: This uses the + strtod() function to parse numbers, Strings, Lists, Dicts and + Funcrefs will be considered as being 0). + When {func} is a |Funcref| or a function name, this function is called to compare items. The function is invoked with two items as argument and must return zero if they are equal, 1 or bigger if the first one sorts after the second one, -1 or smaller if the first one sorts before the second one. + + {dict} is for functions with the "dict" attribute. It will be + used to set the local variable "self". |Dictionary-function| + + The sort is stable, items which compare equal (as number or as + string) will keep their relative position. E.g., when sorting + on numbers, text strings will sort next to each other, in the + same order as they were originally. + + Also see |uniq()|. + Example: > func MyCompare(i1, i2) return a:i1 == a:i2 ? 0 : a:i1 > a:i2 ? 1 : -1 @@ -5604,7 +5809,7 @@ strdisplaywidth({expr}[, {col}]) *strdisplaywidth()* The result is a Number, which is the number of display cells - String {expr} occupies on the screen. + String {expr} occupies on the screen when it starts a {col}. When {col} is omitted zero is used. Otherwise it is the screen column where to start. This matters for Tab characters. @@ -5729,12 +5934,23 @@ Ambiguous, this function's return value depends on 'ambiwidth'. Also see |strlen()|, |strdisplaywidth()| and |strchars()|. -submatch({nr}) *submatch()* +submatch({nr}[, {list}]) *submatch()* Only for an expression in a |:substitute| command or substitute() function. Returns the {nr}'th submatch of the matched text. When {nr} is 0 the whole matched text is returned. + Note that a NL in the string can stand for a line break of a + multi-line match or a NUL character in the text. Also see |sub-replace-expression|. + + If {list} is present and non-zero then submatch() returns + a list of strings, similar to |getline()| with two arguments. + NL characters in the text represent NUL characters in the + text. + Only returns more than one item for |:substitute|, inside + |substitute()| this list will always contain one or zero + items, since there are no real line breaks. + Example: > :s/\d\+/\=submatch(0) + 1/ < This finds the first number in the line and adds one to it. @@ -5867,19 +6083,35 @@ valid positions. system({expr} [, {input}]) *system()* *E677* - Get the output of the shell command {expr}. - When {input} is given, this string is written to a file and - passed as stdin to the command. The string is written as-is, - you need to take care of using the correct line separators - yourself. Pipes are not used. - Note: Use |shellescape()| to escape special characters in a - command argument. Newlines in {expr} may cause the command to - fail. The characters in 'shellquote' and 'shellxquote' may - also cause trouble. + Get the output of the shell command {expr} as a string. See + |systemlist()| to get the output as a List. + + When {input} is given and is a string this string is written + to a file and passed as stdin to the command. The string is + written as-is, you need to take care of using the correct line + separators yourself. + If {input} is given and is a |List| it is written to the file + in a way |writefile()| does with {binary} set to "b" (i.e. + with a newline between each list item with newlines inside + list items converted to NULs). + Pipes are not used. + + When prepended by |:silent| the shell will not be set to + cooked mode. This is meant to be used for commands that do + not need the user to type. It avoids stray characters showing + up on the screen which require |CTRL-L| to remove. > + :silent let f = system('ls *.vim') +< + Note: Use |shellescape()| or |::S| with |expand()| or + |fnamemodify()| to escape special characters in a command + argument. Newlines in {expr} may cause the command to fail. + The characters in 'shellquote' and 'shellxquote' may also + cause trouble. This is not to be used for interactive commands. The result is a String. Example: > :let files = system("ls " . shellescape(expand('%:h'))) + :let files = system('ls ' . expand('%:h:S')) < To make the result more system-independent, the shell output is filtered to replace with for Macintosh, and @@ -5906,6 +6138,16 @@ Use |:checktime| to force a check. +systemlist({expr} [, {input}]) *systemlist()* + Same as |system()|, but returns a |List| with lines (parts of + output separated by NL) with NULs transformed into NLs. Output + is the same as |readfile()| will output with {binary} argument + set to "b". + + Returns an empty string on error, so be careful not to run + into |E706|. + + tabpagebuflist([{arg}]) *tabpagebuflist()* The result is a |List|, where each item is the number of the buffer associated with each window in the current tab page. @@ -5928,7 +6170,7 @@ The number can be used with the |:tab| command. -tabpagewinnr({tabarg}, [{arg}]) *tabpagewinnr()* +tabpagewinnr({tabarg} [, {arg}]) *tabpagewinnr()* Like |winnr()| but for tab page {tabarg}. {tabarg} specifies the number of tab page to be used. {arg} is used like with |winnr()|: @@ -6128,6 +6370,14 @@ blocks. Each item may again have an "alt" item. +uniq({list} [, {func} [, {dict}]]) *uniq()* *E882* + Remove second and succeeding copies of repeated adjacent + {list} items in-place. Returns {list}. If you want a list + to remain unmodified make a copy first: > + :let newlist = uniq(copy(mylist)) +< The default compare function uses the string representation of + each item. For the use of {func} and {dict} see |sort()|. + values({dict}) *values()* Return a |List| with all the values of {dict}. The |List| is in arbitrary order. @@ -6257,6 +6507,16 @@ winrestview({dict}) Uses the |Dictionary| returned by |winsaveview()| to restore the view of the current window. + Note: The {dict} does not have to contain all values, that are + returned by |winsaveview()|. If values are missing, those + settings won't be restored. So you can use: > + :call winrestview({'curswant': 4}) +< + This will only set the curswant value (the column the cursor + wants to move on vertical movements) of the cursor to column 5 + (yes, that is 5), while all other settings will remain the + same. This is useful, if you set the cursor position manually. + If you have changed the values the result is unpredictable. If the window size changed the result won't be the same. @@ -6268,10 +6528,12 @@ buffer and you want to go back to the original view. This does not save fold information. Use the 'foldenable' option to temporarily switch off folding, so that folds are - not opened when moving around. + not opened when moving around. This may have side effects. The return value includes: lnum cursor line number - col cursor column + col cursor column (Note: the first column + zero, as opposed to what getpos() + returns) coladd cursor column offset for 'virtualedit' curswant column for vertical movement topline first line in the window @@ -6322,7 +6584,7 @@ *feature-list* -There are three types of features: +There are four types of features: 1. Features that are only supported when they have been enabled when Vim was compiled |+feature-list|. Example: > :if has("cindent") @@ -6330,13 +6592,24 @@ Example: > :if has("gui_running") < *has-patch* -3. Included patches. First check |v:version| for the version of Vim. - Then the "patch123" feature means that patch 123 has been included for - this version. Example (checking version 6.2.148 or later): > +3. Included patches. The "patch123" feature means that patch 123 has been + included. Note that this form does not check the version of Vim, you need + to inspect |v:version| for that. + Example (checking version 6.2.148 or later): > :if v:version > 602 || v:version == 602 && has("patch148") -< Note that it's possible for patch 147 to be omitted even though 148 is +< Note that it's possible for patch 147 to be omitted even though 148 is + included. + +4. Beyond a certain version or at a certain version and including a specific + patch. The "patch-7.4.237" feature means that the Vim version is 7.5 or + later, or it is version 7.4 and patch 237 was included. + Note that this only works for patch 7.4.237 and later, before that you + need to use the example above that checks v:version. Example: > + :if has("patch-7.4.248") +< Note that it's possible for patch 147 to be omitted even though 148 is included. +acl Compiled with |ACL| support. all_builtin_terms Compiled with all builtin terminals enabled. amiga Amiga version of Vim. arabic Compiled with Arabic support |Arabic|. @@ -6365,6 +6638,7 @@ dialog_gui Compiled with GUI dialog support. diff Compiled with |vimdiff| and 'diff' support. digraphs Compiled with support for digraphs. +directx Compiled with support for Direct-X and 'renderoptions'. dnd Compiled with support for the "~ register |quote_~|. dos16 16 bits DOS version of Vim. dos32 32 bits DOS (DJGPP) version of Vim. @@ -6407,8 +6681,8 @@ keymap Compiled with 'keymap' support. langmap Compiled with 'langmap' support. libcall Compiled with |libcall()| support. -linebreak Compiled with 'linebreak', 'breakat' and 'showbreak' - support. +linebreak Compiled with 'linebreak', 'breakat', 'showbreak' and + 'breakindent' support. lispindent Compiled with support for lisp indenting. listcmds Compiled with commands for the buffer list |:files| and the argument list |arglist|. @@ -6503,7 +6777,9 @@ writebackup Compiled with 'writebackup' default on. xfontset Compiled with X fontset support |xfontset|. xim Compiled with X input method support |xim|. -xpm_w32 Compiled with pixmap support for Win32. +xpm Compiled with pixmap support. +xpm_w32 Compiled with pixmap support for Win32. (Only for + backward compatibility. Use "xpm" instead.) xsmp Compiled with X session management support. xsmp_interact Compiled with interactive X session management support. xterm_clipboard Compiled with support for xterm clipboard. @@ -6553,6 +6829,8 @@ and autocommands defined in the script. It is also possible to call the function from a mapping defined in the script, but then || must be used instead of "s:" when the mapping is expanded outside of the script. +There are only script-local functions, no buffer-local or window-local +functions. *:fu* *:function* *E128* *E129* *E123* :fu[nction] List all functions and their arguments. @@ -6576,11 +6854,15 @@ < See |:verbose-cmd| for more information. - *E124* *E125* *E853* + *E124* *E125* *E853* *E884* :fu[nction][!] {name}([arguments]) [range] [abort] [dict] Define a new function by the name {name}. The name must be made of alphanumeric characters and '_', and - must start with a capital or "s:" (see above). + must start with a capital or "s:" (see above). Note + that using "b:" or "g:" is not allowed. (since patch + 7.4.260 E884 is given if the function name has a colon + in the name, e.g. for "foo:bar()". Before that patch + no error was given). {name} can also be a |Dictionary| entry that is a |Funcref|: > @@ -6599,7 +6881,7 @@ For the {arguments} see |function-argument|. - *a:firstline* *a:lastline* + *:func-range* *a:firstline* *a:lastline* When the [range] argument is added, the function is expected to take care of a range itself. The range is passed as "a:firstline" and "a:lastline". If [range] @@ -6608,10 +6890,10 @@ of each line. See |function-range-example|. The cursor is still moved to the first line of the range, as is the case with all Ex commands. - + *:func-abort* When the [abort] argument is added, the function will abort as soon as an error is detected. - + *:func-dict* When the [dict] argument is added, the function must be invoked through an entry in a |Dictionary|. The local variable "self" will then be set to the @@ -7273,6 +7555,8 @@ {pattern}, so long as it does not have a special meaning (e.g., '|' or '"') and doesn't occur inside {pattern}. + Information about the exception is available in + |v:exception|. Also see |throw-variables|. NOTE: It is not reliable to ":catch" the TEXT of an error message because it may vary in different locales. @@ -7416,13 +7700,22 @@ for Vim commands, |shellescape()| for |:!| commands. Examples: > :execute "e " . fnameescape(filename) - :execute "!ls " . shellescape(expand('%:h'), 1) + :execute "!ls " . shellescape(filename, 1) < Note: The executed string may be any command-line, but - you cannot start or end a "while", "for" or "if" - command. Thus this is illegal: > - :execute 'while i > 5' - :execute 'echo "test" | break' + starting or ending "if", "while" and "for" does not + always work, because when commands are skipped the + ":execute" is not evaluated and Vim loses track of + where blocks start and end. Also "break" and + "continue" should not be inside ":execute". + This example does not work, because the ":execute" is + not evaluated and Vim does not see the "while", and + gives an error for finding an ":endwhile": > + :if 0 + : execute 'while i > 5' + : echo "test" + : endwhile + :endif < It is allowed to have a "while" or "if" command completely in the executed string: > diff -Naur vim74.orig/runtime/doc/filetype.txt vim74/runtime/doc/filetype.txt --- vim74.orig/runtime/doc/filetype.txt 2013-08-10 11:24:53.000000000 +0000 +++ vim74/runtime/doc/filetype.txt 2014-09-27 01:00:29.513845179 +0000 @@ -1,4 +1,4 @@ -*filetype.txt* For Vim version 7.4. Last change: 2013 May 25 +*filetype.txt* For Vim version 7.4. Last change: 2013 Dec 15 VIM REFERENCE MANUAL by Bram Moolenaar @@ -447,23 +447,25 @@ %% insert a single '%' character %d insert the date from above %u insert the user from above + %p insert result of b:changelog_entry_prefix %c where to position cursor when done - The default is "%d %u\n\n\t* %c\n\n", which produces + The default is "%d %u\n\n\t* %p%c\n\n", which produces something like (| is where cursor will be, unless at the start of the line where it denotes the beginning of the line) > |2003-01-14 Full Name | - | * | + | * prefix| < g:changelog_new_entry_format The format used when creating a new entry. The following table describes special tokens in the string: + %p insert result of b:changelog_entry_prefix %c where to position cursor when done The default is "\t*%c", which produces something similar to > - | * | + | * prefix| < g:changelog_date_entry_search The search pattern to use when searching for a diff -Naur vim74.orig/runtime/doc/fold.txt vim74/runtime/doc/fold.txt --- vim74.orig/runtime/doc/fold.txt 2013-08-10 11:24:53.000000000 +0000 +++ vim74/runtime/doc/fold.txt 2014-09-27 01:00:29.517178504 +0000 @@ -1,4 +1,4 @@ -*fold.txt* For Vim version 7.4. Last change: 2010 May 13 +*fold.txt* For Vim version 7.4. Last change: 2013 Dec 04 VIM REFERENCE MANUAL by Bram Moolenaar @@ -285,9 +285,10 @@ *zd* *E351* zd Delete one fold at the cursor. When the cursor is on a folded line, that fold is deleted. Nested folds are moved one level - up. In Visual mode all folds (partially) in the selected area - are deleted. Careful: This easily deletes more folds than you - expect and there is no undo. + up. In Visual mode one level of all folds (partially) in the + selected area are deleted. + Careful: This easily deletes more folds than you expect and + there is no undo for manual folding. This only works when 'foldmethod' is "manual" or "marker". Also see |fold-delete-marker|. diff -Naur vim74.orig/runtime/doc/gui.txt vim74/runtime/doc/gui.txt --- vim74.orig/runtime/doc/gui.txt 2013-08-10 11:24:53.000000000 +0000 +++ vim74/runtime/doc/gui.txt 2014-09-27 01:00:29.523845154 +0000 @@ -1,4 +1,4 @@ -*gui.txt* For Vim version 7.4. Last change: 2013 Jun 12 +*gui.txt* For Vim version 7.4. Last change: 2014 Mar 08 VIM REFERENCE MANUAL by Bram Moolenaar @@ -133,6 +133,7 @@ :winp[os] Display current position of the top left corner of the GUI vim window in pixels. Does not work in all versions. + Also see |getwinposx()| and |getwinposy()|. :winp[os] {X} {Y} *E466* Put the GUI vim window at the given {X} and {Y} coordinates. @@ -151,8 +152,11 @@ option. If you are running the X Window System, you can get information about the -window Vim is running in with this command: > +window Vim is running in with these commands: > :!xwininfo -id $WINDOWID + :!xprop -id $WINDOWID + :execute '!xwininfo -id ' . v:windowid + :execute '!xprop -id ' . v:windowid < *gui-IME* *iBus* Input methods for international characters in X that rely on the XIM diff -Naur vim74.orig/runtime/doc/gui_x11.txt vim74/runtime/doc/gui_x11.txt --- vim74.orig/runtime/doc/gui_x11.txt 2013-08-10 11:24:54.000000000 +0000 +++ vim74/runtime/doc/gui_x11.txt 2014-09-27 01:00:29.530511804 +0000 @@ -1,4 +1,4 @@ -*gui_x11.txt* For Vim version 7.4. Last change: 2011 Sep 14 +*gui_x11.txt* For Vim version 7.4. Last change: 2014 Mar 08 VIM REFERENCE MANUAL by Bram Moolenaar @@ -442,7 +442,7 @@ *gui-x11-kde* There is no KDE version of Vim. There has been some work on a port using the Qt toolkit, but it never worked properly and it has been abandoned. Work -continues on Yzis: www.yzis.org. +continues on Yzis: https://github.com/chrizel/Yzis. ============================================================================== 8. Compiling *gui-x11-compiling* diff -Naur vim74.orig/runtime/doc/helphelp.txt vim74/runtime/doc/helphelp.txt --- vim74.orig/runtime/doc/helphelp.txt 2013-08-10 11:24:54.000000000 +0000 +++ vim74/runtime/doc/helphelp.txt 2014-09-27 01:00:29.547178429 +0000 @@ -1,4 +1,4 @@ -*helphelp.txt* For Vim version 7.4. Last change: 2012 Nov 28 +*helphelp.txt* For Vim version 7.4. Last change: 2014 Sep 19 VIM REFERENCE MANUAL by Bram Moolenaar @@ -96,6 +96,9 @@ find a tag in a file with the same language as the current file. See |help-translated|. + *:helpc* *:helpclose* +:helpc[lose] Close one help window, if there is one. + *:helpg* *:helpgrep* :helpg[rep] {pattern}[@xx] Search all help text files and make a list of lines diff -Naur vim74.orig/runtime/doc/if_lua.txt vim74/runtime/doc/if_lua.txt --- vim74.orig/runtime/doc/if_lua.txt 2013-08-10 11:24:55.000000000 +0000 +++ vim74/runtime/doc/if_lua.txt 2014-09-27 01:00:29.553845079 +0000 @@ -1,4 +1,4 @@ -*if_lua.txt* For Vim version 7.4. Last change: 2012 Jun 29 +*if_lua.txt* For Vim version 7.4. Last change: 2013 Sep 04 VIM REFERENCE MANUAL by Luis Carvalho @@ -135,7 +135,7 @@ < vim.funcref({name}) Returns a Funcref to function {name} (see |Funcref|). It is equivalent to Vim's - "function". + "function". NOT IMPLEMENTED YET vim.buffer([arg]) If "arg" is a number, returns buffer with number "arg" in the buffer list or, if "arg" diff -Naur vim74.orig/runtime/doc/if_perl.txt vim74/runtime/doc/if_perl.txt --- vim74.orig/runtime/doc/if_perl.txt 2013-08-10 11:24:55.000000000 +0000 +++ vim74/runtime/doc/if_perl.txt 2014-09-27 01:00:29.560511729 +0000 @@ -1,4 +1,4 @@ -*if_perl.txt* For Vim version 7.4. Last change: 2012 Oct 25 +*if_perl.txt* For Vim version 7.4. Last change: 2013 Oct 05 VIM REFERENCE MANUAL by Sven Verdoolaege diff -Naur vim74.orig/runtime/doc/if_pyth.txt vim74/runtime/doc/if_pyth.txt --- vim74.orig/runtime/doc/if_pyth.txt 2013-08-10 11:24:55.000000000 +0000 +++ vim74/runtime/doc/if_pyth.txt 2014-09-27 01:00:29.563845054 +0000 @@ -1,4 +1,4 @@ -*if_pyth.txt* For Vim version 7.4. Last change: 2013 Jul 10 +*if_pyth.txt* For Vim version 7.4. Last change: 2014 Jul 23 VIM REFERENCE MANUAL by Paul Moore @@ -28,7 +28,7 @@ ============================================================================== 1. Commands *python-commands* - *:python* *:py* *E205* *E263* *E264* + *:python* *:py* *E263* *E264* *E887* :[range]py[thon] {stmt} Execute Python statement {stmt}. A simple check if the `:python` command is working: > diff -Naur vim74.orig/runtime/doc/indent.txt vim74/runtime/doc/indent.txt --- vim74.orig/runtime/doc/indent.txt 2013-08-10 11:24:56.000000000 +0000 +++ vim74/runtime/doc/indent.txt 2014-09-27 01:00:29.573845029 +0000 @@ -1,4 +1,4 @@ -*indent.txt* For Vim version 7.4. Last change: 2013 Aug 03 +*indent.txt* For Vim version 7.4. Last change: 2014 Apr 23 VIM REFERENCE MANUAL by Bram Moolenaar @@ -545,10 +545,12 @@ (default 70 lines). *cino-#* - #N When N is non-zero recognize shell/Perl comments, starting with - '#'. Default N is zero: don't recognize '#' comments. Note - that lines starting with # will still be seen as preprocessor - lines. + #N When N is non-zero recognize shell/Perl comments starting with + '#', do not recognize preprocessor lines; allow right-shifting + lines that start with "#". + When N is zero (default): don't recognize '#' comments, do + recognize preprocessor lines; right-shifting lines that start + with "#" does not work. The defaults, spelled out in full, are: @@ -556,7 +558,7 @@ c3,C0,/0,(2s,us,U0,w0,W0,k0,m0,j0,J0,)20,*70,#0 Vim puts a line in column 1 if: -- It starts with '#' (preprocessor directives), if 'cinkeys' contains '#'. +- It starts with '#' (preprocessor directives), if 'cinkeys' contains '#0'. - It starts with a label (a keyword followed by ':', other than "case" and "default") and 'cinoptions' does not contain an 'L' entry with a positive value. @@ -581,8 +583,8 @@ Clojure indentation differs somewhat from traditional Lisps, due in part to the use of square and curly brackets, and otherwise by community convention. -These conventions are not always universally followed, so the Clojure indent -script offers a few configurable options, listed below. +These conventions are not universally followed, so the Clojure indent script +offers a few configurable options, listed below. If the current vim does not include searchpairpos(), the indent script falls back to normal 'lisp' indenting, and the following options are ignored. @@ -596,7 +598,6 @@ " Default let g:clojure_maxlines = 100 < - *g:clojure_fuzzy_indent* *g:clojure_fuzzy_indent_patterns* *g:clojure_fuzzy_indent_blacklist* @@ -650,7 +651,6 @@ let g:clojure_special_indent_words = \ 'deftype,defrecord,reify,proxy,extend-type,extend-protocol,letfn' < - *g:clojure_align_multiline_strings* Align subsequent lines in multiline strings to the column after the opening @@ -675,7 +675,28 @@ " Default let g:clojure_align_multiline_strings = 0 < + *g:clojure_align_subforms* +By default, parenthesized compound forms that look like function calls and +whose head subform is on its own line have subsequent subforms indented by +two spaces relative to the opening paren: +> + (foo + bar + baz) +< +Setting this option changes this behavior so that all subforms are aligned to +the same column, emulating the default behavior of clojure-mode.el: +> + (foo + bar + baz) +< +This option is off by default. +> + " Default + let g:clojure_align_subforms = 0 +< FORTRAN *ft-fortran-indent* @@ -791,7 +812,7 @@ PHP indenting can be altered in several ways by modifying the values of some global variables: - *php-comment* + *php-comment* *PHP_autoformatcomment* To not enable auto-formating of comments by default (if you want to use your own 'formatoptions'): > :let g:PHP_autoformatcomment = 0 @@ -800,6 +821,7 @@ added, see |fo-table| for more information. ------------- + *PHP_outdentSLComments* To add extra indentation to single-line comments: > :let g:PHP_outdentSLComments = N @@ -811,6 +833,7 @@ /* Comment */ ------------- + *PHP_default_indenting* To add extra indentation to every PHP lines with N being the number of 'shiftwidth' to add: > :let g:PHP_default_indenting = N @@ -830,14 +853,18 @@ (Notice the extra indentation between the PHP container markers and the code) ------------- -To indent PHP tags as the surrounding code: > - :let g:PHP_outdentphpescape = 0 + *PHP_outdentphpescape* +To indent PHP escape tags as the surrounding non-PHP code (only affects the +PHP escape tags): > +:let g:PHP_outdentphpescape = 0 ------------- + *PHP_removeCRwhenUnix* To automatically remove '\r' characters when the 'fileformat' is set to Unix: > :let g:PHP_removeCRwhenUnix = 1 ------------- + *PHP_BracesAtCodeLevel* To indent braces at the same level than the code they contain: > :let g:PHP_BracesAtCodeLevel = 1 @@ -856,6 +883,7 @@ optimizations won't be available. ------------- + *PHP_vintage_case_default_indent* To indent 'case:' and 'default:' statements in switch() blocks: > :let g:PHP_vintage_case_default_indent = 1 diff -Naur vim74.orig/runtime/doc/index.txt vim74/runtime/doc/index.txt --- vim74.orig/runtime/doc/index.txt 2013-08-10 11:24:56.000000000 +0000 +++ vim74/runtime/doc/index.txt 2014-09-27 01:00:29.577178354 +0000 @@ -1,4 +1,4 @@ -*index.txt* For Vim version 7.4. Last change: 2013 Jul 17 +*index.txt* For Vim version 7.4. Last change: 2014 Sep 19 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1124,8 +1124,8 @@ |:cNfile| :cNf[ile] go to last error in previous file |:cabbrev| :ca[bbrev] like ":abbreviate" but for Command-line mode |:cabclear| :cabc[lear] clear all abbreviations for Command-line mode -|:caddbuffer| :caddb[uffer] add errors from buffer -|:caddexpr| :cad[dexpr] add errors from expr +|:caddbuffer| :cad[dbuffer] add errors from buffer +|:caddexpr| :cadde[xpr] add errors from expr |:caddfile| :caddf[ile] add error message to current quickfix list |:call| :cal[l] call a function |:catch| :cat[ch] part of a :try command @@ -1191,12 +1191,12 @@ |:digraphs| :dig[raphs] show or enter digraphs |:display| :di[splay] display registers |:djump| :dj[ump] jump to #define -|:dl| :dl short for |:delete| -|:dl| :del[ete]l short for |:delete| +|:dl| :dl short for |:delete| with the 'l' flag +|:dl| :del[ete]l short for |:delete| with the 'l' flag |:dlist| :dli[st] list #defines |:doautocmd| :do[autocmd] apply autocommands to current buffer |:doautoall| :doautoa[ll] apply autocommands for all loaded buffers -|:dp| :d[elete]p short for |:delete| +|:dp| :d[elete]p short for |:delete| with the 'p' flag |:drop| :dr[op] jump to window editing file or edit file in current window |:dsearch| :ds[earch] list one #define @@ -1244,6 +1244,7 @@ |:gvim| :gv[im] start the GUI |:hardcopy| :ha[rdcopy] send text to the printer |:help| :h[elp] open a help window +|:helpclose| :helpc[lose] close one help window |:helpfind| :helpf[ind] dialog to open a help window |:helpgrep| :helpg[rep] like ":grep" but searches help files |:helptags| :helpt[ags] generate help tags for a directory @@ -1275,6 +1276,7 @@ |:keepalt| :keepa[lt] following command keeps the alternate file |:keepmarks| :kee[pmarks] following command keeps marks where they are |:keepjumps| :keepj[umps] following command keeps jumplist and marks +|:keeppatterns| :keepp[atterns] following command keeps search pattern history |:lNext| :lN[ext] go to previous entry in location list |:lNfile| :lNf[ile] go to last entry in previous file |:list| :l[ist] print lines @@ -1360,13 +1362,14 @@ |:nmenu| :nme[nu] add menu for Normal mode |:nnoremap| :nn[oremap] like ":noremap" but for Normal mode |:nnoremenu| :nnoreme[nu] like ":noremenu" but for Normal mode -|:noautocmd| :noa[utocmd] following command don't trigger autocommands +|:noautocmd| :noa[utocmd] following commands don't trigger autocommands |:noremap| :no[remap] enter a mapping that will not be remapped |:nohlsearch| :noh[lsearch] suspend 'hlsearch' highlighting |:noreabbrev| :norea[bbrev] enter an abbreviation that will not be remapped |:noremenu| :noreme[nu] enter a menu that will not be remapped |:normal| :norm[al] execute Normal mode commands +|:noswapfile| :nos[wapfile] following commands don't create a swap file |:number| :nu[mber] print lines with line number |:nunmap| :nun[map] like ":unmap" but for Normal mode |:nunmenu| :nunme[nu] remove menu for Normal mode diff -Naur vim74.orig/runtime/doc/insert.txt vim74/runtime/doc/insert.txt --- vim74.orig/runtime/doc/insert.txt 2013-08-10 11:24:56.000000000 +0000 +++ vim74/runtime/doc/insert.txt 2014-09-27 01:00:29.583845004 +0000 @@ -1,4 +1,4 @@ -*insert.txt* For Vim version 7.4. Last change: 2013 Jul 12 +*insert.txt* For Vim version 7.4. Last change: 2014 Aug 04 VIM REFERENCE MANUAL by Bram Moolenaar @@ -51,6 +51,8 @@ abbreviation. Note: If your key is hard to hit on your keyboard, train yourself to use CTRL-[. + If Esc doesn't work and you are using a Mac, try CTRL-Esc. + Or disable Listening under Accessibility preferences. *i_CTRL-C* CTRL-C Quit insert mode, go back to Normal mode. Do not check for abbreviations. Does not trigger the |InsertLeave| autocommand @@ -1302,7 +1304,7 @@ XHTML *ft-xhtml-omni* CTRL-X CTRL-O provides completion of various elements of (X)HTML files. It is -designed to support writing of XHTML 1.0 Strict files but will also works for +designed to support writing of XHTML 1.0 Strict files but will also work for other versions of HTML. Features: - after "<" complete tag name depending on context (no div suggestion inside diff -Naur vim74.orig/runtime/doc/intro.txt vim74/runtime/doc/intro.txt --- vim74.orig/runtime/doc/intro.txt 2013-08-10 11:24:56.000000000 +0000 +++ vim74/runtime/doc/intro.txt 2014-09-27 01:00:29.587178329 +0000 @@ -1,4 +1,4 @@ -*intro.txt* For Vim version 7.4. Last change: 2013 Jun 17 +*intro.txt* For Vim version 7.4. Last change: 2014 May 24 VIM REFERENCE MANUAL by Bram Moolenaar @@ -136,9 +136,10 @@ Bug reports: *bugs* *bug-reports* *bugreport.vim* Send bug reports to: Vim Developers -This is a maillist, many people will see the message. If you don't want that, -e.g. because it is a security issue, send it to , this only goes -to the Vim maintainer (that's Bram). +This is a maillist, you need to become a member first and many people will see +the message. If you don't want that, e.g. because it is a security issue, +send it to , this only goes to the Vim maintainer (that's Bram). + Please be brief; all the time that is spent on answering mail is subtracted from the time that is spent on improving Vim! Always give a reproducible example and try to find out which settings or other things influence the diff -Naur vim74.orig/runtime/doc/map.txt vim74/runtime/doc/map.txt --- vim74.orig/runtime/doc/map.txt 2013-08-10 11:24:56.000000000 +0000 +++ vim74/runtime/doc/map.txt 2014-09-27 01:00:29.593844979 +0000 @@ -1,4 +1,4 @@ -*map.txt* For Vim version 7.4. Last change: 2013 Aug 03 +*map.txt* For Vim version 7.4. Last change: 2014 Jun 02 VIM REFERENCE MANUAL by Bram Moolenaar @@ -60,17 +60,17 @@ {rhs}, is then further scanned for mappings. This allows for nested and recursive use of mappings. - -:no[remap] {lhs} {rhs} |mapmode-nvo| *:no* *:noremap* -:nn[oremap] {lhs} {rhs} |mapmode-n| *:nn* *:nnoremap* -:vn[oremap] {lhs} {rhs} |mapmode-v| *:vn* *:vnoremap* -:xn[oremap] {lhs} {rhs} |mapmode-x| *:xn* *:xnoremap* -:snor[emap] {lhs} {rhs} |mapmode-s| *:snor* *:snoremap* -:ono[remap] {lhs} {rhs} |mapmode-o| *:ono* *:onoremap* -:no[remap]! {lhs} {rhs} |mapmode-ic| *:no!* *:noremap!* -:ino[remap] {lhs} {rhs} |mapmode-i| *:ino* *:inoremap* -:ln[oremap] {lhs} {rhs} |mapmode-l| *:ln* *:lnoremap* -:cno[remap] {lhs} {rhs} |mapmode-c| *:cno* *:cnoremap* + *:nore* *:norem* +:no[remap] {lhs} {rhs} |mapmode-nvo| *:no* *:noremap* *:nor* +:nn[oremap] {lhs} {rhs} |mapmode-n| *:nn* *:nnoremap* +:vn[oremap] {lhs} {rhs} |mapmode-v| *:vn* *:vnoremap* +:xn[oremap] {lhs} {rhs} |mapmode-x| *:xn* *:xnoremap* +:snor[emap] {lhs} {rhs} |mapmode-s| *:snor* *:snoremap* +:ono[remap] {lhs} {rhs} |mapmode-o| *:ono* *:onoremap* +:no[remap]! {lhs} {rhs} |mapmode-ic| *:no!* *:noremap!* +:ino[remap] {lhs} {rhs} |mapmode-i| *:ino* *:inoremap* +:ln[oremap] {lhs} {rhs} |mapmode-l| *:ln* *:lnoremap* +:cno[remap] {lhs} {rhs} |mapmode-c| *:cno* *:cnoremap* Map the key sequence {lhs} to {rhs} for the modes where the map command applies. Disallow mapping of {rhs}, to avoid nested and recursive mappings. Often @@ -306,9 +306,21 @@ to type a count with a zero. *map-overview* *map-modes* -Overview of which map command works in which mode: +Overview of which map command works in which mode. More details below. + COMMANDS MODES ~ +:map :noremap :unmap Normal, Visual, Select, Operator-pending +:nmap :nnoremap :nunmap Normal +:vmap :vnoremap :vunmap Visual and Select +:smap :snoremap :sunmap Select +:xmap :xnoremap :xunmap Visual +:omap :onoremap :ounmap Operator-pending +:map! :noremap! :unmap! Insert and Command-line +:imap :inoremap :iunmap Insert +:lmap :lnoremap :lunmap Insert, Command-line, Lang-Arg +:cmap :cnoremap :cunmap Command-line + - commands: modes: ~ + COMMANDS MODES ~ Normal Visual+Select Operator-pending ~ :map :noremap :unmap :mapclear yes yes yes :nmap :nnoremap :nunmap :nmapclear yes - - @@ -324,7 +336,7 @@ better to explicitly use :xmap and :smap for printable characters. Or use :sunmap after defining the mapping. - commands: modes: ~ + COMMANDS MODES ~ Visual Select ~ :vmap :vnoremap :vunmap :vmapclear yes yes :xmap :xnoremap :xunmap :xmapclear yes - @@ -333,7 +345,7 @@ *mapmode-ic* *mapmode-i* *mapmode-c* *mapmode-l* Some commands work both in Insert mode and Command-line mode, some not: - commands: modes: ~ + COMMANDS MODES ~ Insert Command-line Lang-Arg ~ :map! :noremap! :unmap! :mapclear! yes yes - :imap :inoremap :iunmap :imapclear yes - - @@ -380,7 +392,7 @@ The simplest way to load a set of related language mappings is by using the 'keymap' option. See |45.5|. In Insert mode and in Command-line mode the mappings can be disabled with -the CTRL-^ command |i_CTRL-^| |c_CTRL-^| These commands change the value of +the CTRL-^ command |i_CTRL-^| |c_CTRL-^|. These commands change the value of the 'iminsert' option. When starting to enter a normal command line (not a search pattern) the mappings are disabled until a CTRL-^ is typed. The state last used is remembered for Insert mode and Search patterns separately. The @@ -593,7 +605,7 @@ When you have a mapping that contains an Ex command, you need to put a line terminator after it to have it executed. The use of is recommended for this (see |<>|). Example: > - :map _ls :!ls -l %:echo "the end" + :map _ls :!ls -l %:S:echo "the end" To avoid mapping of the characters you type in insert or Command-line mode, type a CTRL-V first. The mapping in Insert mode is disabled if the 'paste' @@ -816,12 +828,10 @@ let &selection = "inclusive" let reg_save = @@ - if a:0 " Invoked from Visual mode, use '< and '> marks. - silent exe "normal! `<" . a:type . "`>y" + if a:0 " Invoked from Visual mode, use gv command. + silent exe "normal! gvy" elseif a:type == 'line' silent exe "normal! '[V']y" - elseif a:type == 'block' - silent exe "normal! `[\`]y" else silent exe "normal! `[v`]y" endif @@ -1359,6 +1369,8 @@ In the cases of the -count and -register attributes, if the optional argument is supplied, it is removed from the argument list and is available to the replacement text separately. +Note that these arguments can be abbreviated, but that is a deprecated +feature. Use the full name for new scripts. Replacement text diff -Naur vim74.orig/runtime/doc/motion.txt vim74/runtime/doc/motion.txt --- vim74.orig/runtime/doc/motion.txt 2013-08-10 11:24:57.000000000 +0000 +++ vim74/runtime/doc/motion.txt 2014-09-27 01:00:29.607178279 +0000 @@ -1,4 +1,4 @@ -*motion.txt* For Vim version 7.4. Last change: 2013 Jul 17 +*motion.txt* For Vim version 7.4. Last change: 2014 Feb 11 VIM REFERENCE MANUAL by Bram Moolenaar @@ -343,7 +343,7 @@ See also 'startofline' option. {not in Vi} :[range]go[to] [count] *:go* *:goto* *go* -[count]go Go to {count} byte in the buffer. Default [count] is +[count]go Go to [count] byte in the buffer. Default [count] is one, start of the file. When giving [range], the last number in it used as the byte count. End-of-line characters are counted depending on the current diff -Naur vim74.orig/runtime/doc/options.txt vim74/runtime/doc/options.txt --- vim74.orig/runtime/doc/options.txt 2013-08-10 11:24:57.000000000 +0000 +++ vim74/runtime/doc/options.txt 2014-09-27 01:00:29.623844904 +0000 @@ -1,4 +1,4 @@ -*options.txt* For Vim version 7.4. Last change: 2013 Jul 09 +*options.txt* For Vim version 7.4. Last change: 2014 Sep 09 VIM REFERENCE MANUAL by Bram Moolenaar @@ -921,7 +921,7 @@ *'backupcopy'* *'bkc'* 'backupcopy' 'bkc' string (Vi default for Unix: "yes", otherwise: "auto") - global + global or local to buffer |global-local| {not in Vi} When writing a file and a backup is made, this option tells how it's done. This is a comma separated list of words. @@ -987,7 +987,7 @@ *'backupdir'* *'bdir'* 'backupdir' 'bdir' string (default for Amiga: ".,t:", - for MS-DOS and Win32: ".,c:/tmp,c:/temp" + for MS-DOS and Win32: ".,$TEMP,c:/tmp,c:/temp" for Unix: ".,~/tmp,~/") global {not in Vi} @@ -1200,6 +1200,38 @@ break if 'linebreak' is on. Only works for ASCII and also for 8-bit characters when 'encoding' is an 8-bit encoding. + *'breakindent'* *'bri'* +'breakindent' 'bri' boolean (default off) + local to window + {not in Vi} + {not available when compiled without the |+linebreak| + feature} + Every wrapped line will continue visually indented (same amount of + space as the beginning of that line), thus preserving horizontal blocks + of text. + + *'breakindentopt'* *'briopt'* +'breakindentopt' 'briopt' string (default empty) + local to window + {not in Vi} + {not available when compiled without the |+linebreak| + feature} + Settings for 'breakindent'. It can consist of the following optional + items and must be separated by a comma: + min:{n} Minimum text width that will be kept after + applying 'breakindent', even if the resulting + text should normally be narrower. This prevents + text indented almost to the right window border + occupying lot of vertical space when broken. + shift:{n} After applying 'breakindent', the wrapped line's + beginning will be shifted by the given number of + characters. It permits dynamic French paragraph + indentation (negative) or emphasizing the line + continuation (positive). + sbr Display the 'showbreak' value before applying the + additional indent. + The default value for min is 20 and shift is 0. + *'browsedir'* *'bsdir'* 'browsedir' 'bsdir' string (default: "last") global @@ -1884,8 +1916,8 @@ global {not in Vi} A sequence of single character flags. When a character is present - this indicates vi-compatible behavior. This is used for things where - not being vi-compatible is mostly or sometimes preferred. + this indicates Vi-compatible behavior. This is used for things where + not being Vi-compatible is mostly or sometimes preferred. 'cpoptions' stands for "compatible-options". Commas can be added for readability. To avoid problems with flags that are added in the future, use the @@ -2197,10 +2229,18 @@ zip PkZip compatible method. A weak kind of encryption. Backwards compatible with Vim 7.2 and older. *blowfish* - blowfish Blowfish method. Strong encryption. Requires Vim 7.3 - or later, files can NOT be read by Vim 7.2 and older. - This adds a "seed" to the file, every time you write - the file the encrypted bytes will be different. + blowfish Blowfish method. Medium strong encryption but it has + an implementation flaw. Requires Vim 7.3 or later, + files can NOT be read by Vim 7.2 and older. This adds + a "seed" to the file, every time you write the file + the encrypted bytes will be different. + *blowfish2* + blowfish2 Blowfish method. Medium strong encryption. Requires + Vim 7.4.399 or later, files can NOT be read by Vim 7.3 + and older. This adds a "seed" to the file, every time + you write the file the encrypted bytes will be + different. The whole undo file is encrypted, not just + the pieces of text. When reading an encrypted file 'cryptmethod' will be set automatically to the detected method of the file being read. Thus if you write it @@ -2477,7 +2517,7 @@ *'directory'* *'dir'* 'directory' 'dir' string (default for Amiga: ".,t:", - for MS-DOS and Win32: ".,c:\tmp,c:\temp" + for MS-DOS and Win32: ".,$TEMP,c:\tmp,c:\temp" for Unix: ".,~/tmp,/var/tmp,/tmp") global List of directory names for the swap file, separated with commas. @@ -3329,7 +3369,7 @@ NOTE: This option is reset when 'compatible' is set. *'grepformat'* *'gfm'* -'grepformat' 'gfm' string (default "%f:%l%m,%f %l%m") +'grepformat' 'gfm' string (default "%f:%l:%m,%f:%l%m,%f %l%m") global {not in Vi} Format to recognize for the ":grep" command output. @@ -3920,12 +3960,13 @@ NOTE: This option is reset when 'compatible' is set. *'history'* *'hi'* -'history' 'hi' number (Vim default: 20, Vi default: 0) +'history' 'hi' number (Vim default: 50, Vi default: 0) global {not in Vi} A history of ":" commands, and a history of previous search patterns - are remembered. This option decides how many entries may be stored in + is remembered. This option decides how many entries may be stored in each of these histories (see |cmdline-editing|). + The maximum value is 10000. NOTE: This option is set to the Vi default value when 'compatible' is set and to the Vim default value when 'compatible' is reset. @@ -4492,6 +4533,8 @@ be able to execute Normal mode commands. This is the opposite of the 'keymap' option, where characters are mapped in Insert mode. + This option cannot be set from a |modeline| or in the |sandbox|, for + security reasons. Example (for Greek, in UTF-8): *greek* > :set langmap=ΑA,Î’B,ΨC,ΔD,ΕE,ΦF,ΓG,ΗH,ΙI,ΞJ,ΚK,ΛL,ÎœM,ÎN,ΟO,ΠP,QQ,ΡR,ΣS,ΤT,ΘU,ΩV,WW,ΧX,Î¥Y,ΖZ,αa,βb,ψc,δd,εe,φf,γg,ηh,ιi,ξj,κk,λl,μm,νn,οo,Ï€p,qq,Ïr,σs,Ï„t,θu,ωv,Ï‚w,χx,Ï…y,ζz @@ -4572,12 +4615,13 @@ {not in Vi} {not available when compiled without the |+linebreak| feature} - If on Vim will wrap long lines at a character in 'breakat' rather + If on, Vim will wrap long lines at a character in 'breakat' rather than at the last character that fits on the screen. Unlike 'wrapmargin' and 'textwidth', this does not insert s in the file, - it only affects the way the file is displayed, not its contents. The - value of 'showbreak' is used to put in front of wrapped lines. - This option is not used when the 'wrap' option is off or 'list' is on. + it only affects the way the file is displayed, not its contents. + If 'breakindent' is set, line is visually indented. Then, the value + of 'showbreak' is used to put in front of wrapped lines. This option + is not used when the 'wrap' option is off. Note that characters after an are mostly not displayed with the right amount of white space. @@ -4629,7 +4673,7 @@ *'lispwords'* *'lw'* 'lispwords' 'lw' string (default is very long) - global + global or local to buffer |global-local| {not in Vi} {not available when compiled without the |+lispindent| feature} @@ -4757,8 +4801,9 @@ global or local to buffer |global-local| {not in Vi} Program to use for the ":make" command. See |:make_makeprg|. - This option may contain '%' and '#' characters, which are expanded to - the current and alternate file name. |:_%| |:_#| + This option may contain '%' and '#' characters (see |:_%| and |:_#|), + which are expanded to the current and alternate file name. Use |::S| + to escape file names in case they contain special characters. Environment variables are expanded |:set_env|. See |option-backslash| about including spaces and backslashes. Note that a '|' must be escaped twice: once for ":set" and once for @@ -5332,7 +5377,7 @@ Expression which is evaluated to apply a patch to a file and generate the resulting new version of the file. See |diff-patchexpr|. - *'patchmode'* *'pm'* *E206* + *'patchmode'* *'pm'* *E205* *E206* 'patchmode' 'pm' string (default "") global {not in Vi} @@ -5613,6 +5658,77 @@ this option at the default "on". Only switch it off when working with old Vi scripts. + *'renderoptions'* *'rop'* +'renderoptions' 'rop' string (default: empty) + global + {not in Vi} + {only available when compiled with GUI and DIRECTX on + MS-Windows} + Select a text renderer and set its options. The options depend on the + renderer. + + Syntax: > + set rop=type:{renderer}(,{name}:{value})* +< + Currently, only one optional renderer is available. + + render behavior ~ + directx Vim will draw text using DirectX (DirectWrite). It makes + drawn glyphs more beautiful than default GDI. + It requires 'encoding' is "utf-8", and only works on + MS-Windows Vista or newer version. + + Options: + name meaning type value ~ + gamma gamma float 1.0 - 2.2 (maybe) + contrast enhancedContrast float (unknown) + level clearTypeLevel float (unknown) + geom pixelGeometry int 0 - 2 (see below) + renmode renderingMode int 0 - 6 (see below) + taamode textAntialiasMode int 0 - 3 (see below) + + See this URL for detail: + http://msdn.microsoft.com/en-us/library/dd368190.aspx + + For geom: structure of a device pixel. + 0 - DWRITE_PIXEL_GEOMETRY_FLAT + 1 - DWRITE_PIXEL_GEOMETRY_RGB + 2 - DWRITE_PIXEL_GEOMETRY_BGR + + See this URL for detail: + http://msdn.microsoft.com/en-us/library/dd368114.aspx + + For renmode: method of rendering glyphs. + 0 - DWRITE_RENDERING_MODE_DEFAULT + 1 - DWRITE_RENDERING_MODE_ALIASED + 2 - DWRITE_RENDERING_MODE_GDI_CLASSIC + 3 - DWRITE_RENDERING_MODE_GDI_NATURAL + 4 - DWRITE_RENDERING_MODE_NATURAL + 5 - DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC + 6 - DWRITE_RENDERING_MODE_OUTLINE + + See this URL for detail: + http://msdn.microsoft.com/en-us/library/dd368118.aspx + + For taamode: antialiasing mode used for drawing text. + 0 - D2D1_TEXT_ANTIALIAS_MODE_DEFAULT + 1 - D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE + 2 - D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE + 3 - D2D1_TEXT_ANTIALIAS_MODE_ALIASED + + See this URL for detail: + http://msdn.microsoft.com/en-us/library/dd368170.aspx + + Example: > + set encoding=utf-8 + set gfn=Ricty_Diminished:h12:cSHIFTJIS + set rop=type:directx +< + If select a raster font (Courier, Terminal or FixedSys) to + 'guifont', it fallbacks to be drawn by GDI automatically. + + Other render types are currently not supported. + *'report'* 'report' number (default 2) global @@ -6251,6 +6367,9 @@ A don't give the "ATTENTION" message when an existing swap file is found. I don't give the intro message when starting Vim |:intro|. + c don't give |ins-completion-menu| messages. For example, + "-- XXX completion (YYY)", "match 1 of 2", "The only match", + "Pattern not found", "Back at original", etc. This gives you the opportunity to avoid that a change between buffers requires you to hit , but still gives as useful a message as @@ -6555,6 +6674,9 @@ region by listing them: "en_us,en_ca" supports both US and Canadian English, but not words specific for Australia, New Zealand or Great Britain. + If the name "cjk" is included East Asian characters are excluded from + spell checking. This is useful when editing text that also has Asian + words. *E757* As a special case the name of a .spl file can be given as-is. The first "_xx" in the name is removed and used as the region name @@ -6615,6 +6737,10 @@ top of the suggestion list with the internal methods. Lines without a slash are ignored, use this for comments. + The word in the second column must be correct, + otherwise it will not be used. Add the word to an + ".add" file if it is currently flagged as a spelling + mistake. The file is used for all languages. expr:{expr} Evaluate expression {expr}. Use a function to avoid @@ -6878,6 +7004,8 @@ immediately deleted. When 'swapfile' is set, and 'updatecount' is non-zero, a swap file is immediately created. Also see |swap-file| and |'swapsync'|. + If you want to open a new buffer without creating a swap file for it, + use the |:noswapfile| modifier. This option is used together with 'bufhidden' and 'buftype' to specify special kinds of buffers. See |special-buffers|. @@ -7498,8 +7626,8 @@ "s" = button state "c" = column plus 33 "r" = row plus 33 - This only works up to 223 columns! See "dec" for a - solution. + This only works up to 223 columns! See "dec", + "urxvt", and "sgr" for solutions. xterm2 Works like "xterm", but with the xterm reporting the mouse position while the mouse is dragged. This works much faster and more precise. Your xterm must at @@ -7521,29 +7649,35 @@ pterm QNX pterm mouse handling. *urxvt-mouse* urxvt Mouse handling for the urxvt (rxvt-unicode) terminal. + The mouse works only if the terminal supports this + encoding style, but it does not have 223 columns limit + unlike "xterm" or "xterm2". *sgr-mouse* sgr Mouse handling for the terminal that emits SGR-styled - mouse reporting. Works with xterm version 277 or - later. + mouse reporting. The mouse works even in columns + beyond 223. This option is backward compatible with + "xterm2" because it can also decode "xterm2" style + mouse codes. The mouse handling must be enabled at compile time |+mouse_xterm| - |+mouse_dec| |+mouse_netterm|. + |+mouse_dec| |+mouse_netterm| |+mouse_jsbterm| |+mouse_urxvt| + |+mouse_sgr|. Only "xterm"(2) is really recognized. NetTerm mouse codes are always recognized, if enabled at compile time. DEC terminal mouse codes are recognized if enabled at compile time, and 'ttymouse' is not - "xterm" (because the xterm and dec mouse codes conflict). + "xterm", "xterm2", "urxvt" or "sgr" (because dec mouse codes conflict + with them). This option is automatically set to "xterm", when the 'term' option is - set to a name that starts with "xterm", and 'ttymouse' is not "xterm" - or "xterm2" already. The main use of this option is to set it to - "xterm", when the terminal name doesn't start with "xterm", but it can - handle xterm mouse codes. - The "sgr" value will be set if the xterm version is 277 or later. + set to a name that starts with "xterm", "mlterm", or "screen", and + 'ttymouse' is not set already. + Additionally, if vim is compiled with the |+termresponse| feature and + |t_RV| is set to the escape sequence to request the xterm version + number, more intelligent detection process runs. The "xterm2" value will be set if the xterm version is reported to be - 95 or higher. This only works when compiled with the |+termresponse| - feature and if |t_RV| is set to the escape sequence to request the - xterm version number. Otherwise "xterm2" must be set explicitly. - If you do not want 'ttymouse' to be set to "xterm2" automatically, set - t_RV to an empty string: > + from 95 to 276. The "sgr" value will be set if the xterm version is + 277 or highter. + If you do not want 'ttymouse' to be set to "xterm2" or "sgr" + automatically, set t_RV to an empty string: > :set t_RV= < *'ttyscroll'* *'tsl'* @@ -7594,7 +7728,7 @@ *'undolevels'* *'ul'* 'undolevels' 'ul' number (default 100, 1000 for Unix, VMS, Win32 and OS/2) - global + global or local to buffer |global-local| {not in Vi} Maximum number of changes that can be undone. Since undo information is kept in memory, higher numbers will cause more memory to be used @@ -7605,8 +7739,9 @@ < But you can also get Vi compatibility by including the 'u' flag in 'cpoptions', and still be able to use CTRL-R to repeat undo. Also see |undo-two-ways|. - Set to a negative number for no undo at all: > - set ul=-1 + Set to -1 for no undo at all. You might want to do this only for the + current buffer: > + setlocal ul=-1 < This helps when you run out of memory for a single change. Also see |clear-undo|. @@ -7715,6 +7850,7 @@ fold options options options and mappings local to a window or buffer (not global values for local options) + localoptions same as "options" slash backslashes in file names replaced with forward slashes unix with Unix end-of-line format (single ), even when diff -Naur vim74.orig/runtime/doc/os_vms.txt vim74/runtime/doc/os_vms.txt --- vim74.orig/runtime/doc/os_vms.txt 2013-08-10 11:24:59.000000000 +0000 +++ vim74/runtime/doc/os_vms.txt 2014-09-27 01:00:29.650511504 +0000 @@ -1,4 +1,4 @@ -*os_vms.txt* For Vim version 7.4. Last change: 2011 Aug 14 +*os_vms.txt* For Vim version 7.4. Last change: 2014 Aug 29 VIM REFERENCE MANUAL @@ -24,7 +24,7 @@ 1. Getting started *vms-started* -Vim (Vi IMproved) is a vi-compatible text editor that runs on nearly every +Vim (Vi IMproved) is a Vi-compatible text editor that runs on nearly every operating system known to humanity. Now use Vim on OpenVMS too, in character or X/Motif environment. It is fully featured and absolutely compatible with Vim on other operating systems. @@ -764,6 +764,22 @@ 9. VMS related changes *vms-changes* +Version 7.4 +- Undo: VMS can not handle more than one dot in the filenames use "dir/name" -> "dir/_un_name" + add _un_ at the beginning to keep the extension +- correct swap file name wildcard handling +- handle iconv usage correctly +- do not optimize on vax - otherwise it hangs compiling crypto files +- fileio.c fix the comment +- correct RealWaitForChar +- after 7.4-119 use different functions lib$cvtf_to_internal_time because Alpha and VAX have + G_FLOAT but IA64 uses IEEE float otherwise Vim crashes +- guard against crashes that are caused by mixed filenames +- [TESTDIR]make_vms.mms changed to see the output files +- Improve tests, update known issues +- minor compiler warnings fixed +- CTAGS 5.8 +regex included + Version 7.3 - CTAGS 5.8 included - VMS compile warnings fixed - floating-point overflow warning corrected on VAX diff -Naur vim74.orig/runtime/doc/os_win32.txt vim74/runtime/doc/os_win32.txt --- vim74.orig/runtime/doc/os_win32.txt 2013-08-10 11:24:59.000000000 +0000 +++ vim74/runtime/doc/os_win32.txt 2014-09-27 01:00:29.653844829 +0000 @@ -1,4 +1,4 @@ -*os_win32.txt* For Vim version 7.4. Last change: 2012 May 18 +*os_win32.txt* For Vim version 7.4. Last change: 2014 Aug 29 VIM REFERENCE MANUAL by George Reilly @@ -93,7 +93,7 @@ $PATH *win32-PATH* The directory of the Vim executable is appended to $PATH. This is mostly to -make "!xxd' work, as it is in the Tools menu. And it also means that when +make "!xxd" work, as it is in the Tools menu. And it also means that when executable() returns 1 the executable can actually be executed. ============================================================================== @@ -334,7 +334,7 @@ :!start /min ctags -R . < When it has finished you should see file named "tags" in your current directory. You should notice the window title blinking on your taskbar. - This is more noticable for commands that take longer. + This is more noticeable for commands that take longer. Now delete the "tags" file and run this command: > :!start /b ctags -R . < You should have the same "tags" file, but this time there will be no diff -Naur vim74.orig/runtime/doc/pattern.txt vim74/runtime/doc/pattern.txt --- vim74.orig/runtime/doc/pattern.txt 2013-08-10 11:24:59.000000000 +0000 +++ vim74/runtime/doc/pattern.txt 2014-09-27 01:00:29.657178154 +0000 @@ -1,4 +1,4 @@ -*pattern.txt* For Vim version 7.4. Last change: 2013 Jul 06 +*pattern.txt* For Vim version 7.4. Last change: 2014 Sep 06 VIM REFERENCE MANUAL by Bram Moolenaar @@ -192,10 +192,10 @@ An example of how to search for matches with a pattern and change the match with another word: > /foo find "foo" - c//e change until end of match + c//e change until end of match bar type replacement // go to start of next match - c//e change until end of match + c//e change until end of match beep type another replacement etc. < @@ -545,6 +545,7 @@ |/\%u| \%u \%u match specified multibyte character (eg \%u20ac) |/\%U| \%U \%U match specified large multibyte character (eg \%U12345678) +|/\%C| \%C \%C match any composing characters Example matches ~ \<\I\i* or @@ -705,11 +706,18 @@ But to limit the time needed, only the line where what follows matches is searched, and one line before that (if there is one). This should be sufficient to match most things and not be too slow. - The part of the pattern after "\@<=" and "\@ /\(.\{-}\zsFab\)\{3} < Finds the third occurrence of "Fab". + This cannot be followed by a multi. *E888* {not in Vi} {not available when compiled without the |+syntax| feature} */\ze* \ze Matches at any position, and sets the end of the match there: The @@ -829,6 +838,7 @@ branch is used. Example: "end\ze\(if\|for\)" matches the "end" in "endif" and "endfor". + This cannot be followed by a multi. |E888| {not in Vi} {not available when compiled without the |+syntax| feature} */\%^* *start-of-file* @@ -1207,12 +1217,18 @@ 8. Composing characters *patterns-composing* */\Z* -When "\Z" appears anywhere in the pattern, composing characters are ignored. -Thus only the base characters need to match, the composing characters may be -different and the number of composing characters may differ. Only relevant -when 'encoding' is "utf-8". +When "\Z" appears anywhere in the pattern, all composing characters are +ignored. Thus only the base characters need to match, the composing +characters may be different and the number of composing characters may differ. +Only relevant when 'encoding' is "utf-8". Exception: If the pattern starts with one or more composing characters, these must match. + */\%C* +Use "\%C" to skip any composing characters. For example, the pattern "a" does +not match in "caÌ€t" (where the a has the composing character 0x0300), but +"a\%C" does. Note that this does not match "cát" (where the á is character +0xe1, it does not have a compositing character). It does match "cat" (where +the a is just an a). When a composing character appears at the start of the pattern of after an item that doesn't include the composing character, a match is found at any @@ -1325,7 +1341,7 @@ patterns defined by both |matchadd()| and |:match|. Highlighting matches using |:match| are limited to three - matches (aside from |:match|, |:2match| and |:3match|are + matches (aside from |:match|, |:2match| and |:3match| are available). |matchadd()| does not have this limitation and in addition makes it possible to prioritize matches. diff -Naur vim74.orig/runtime/doc/pi_getscript.txt vim74/runtime/doc/pi_getscript.txt --- vim74.orig/runtime/doc/pi_getscript.txt 2013-08-10 11:24:59.000000000 +0000 +++ vim74/runtime/doc/pi_getscript.txt 2014-09-27 01:00:29.660511479 +0000 @@ -1,4 +1,4 @@ -*pi_getscript.txt* For Vim version 7.4. Last change: 2012 Apr 07 +*pi_getscript.txt* For Vim version 7.0. Last change: 2013 Nov 29 > GETSCRIPT REFERENCE MANUAL by Charles E. Campbell < @@ -385,6 +385,10 @@ ============================================================================== 9. GetLatestVimScripts History *getscript-history* *glvs-hist* {{{1 +v36 Apr 22, 2013 : * (glts) suggested use of plugin/**/*.vim instead of + plugin/*.vim in globpath() call. + * (Andy Wokula) got warning message when setting + g:loaded_getscriptPlugin v35 Apr 07, 2012 : * (MengHuan Yu) pointed out that the script url has changed (somewhat). However, it doesn't work, and the original one does (under Linux). I'll make it diff -Naur vim74.orig/runtime/doc/pi_netrw.txt vim74/runtime/doc/pi_netrw.txt --- vim74.orig/runtime/doc/pi_netrw.txt 2013-08-10 11:24:59.000000000 +0000 +++ vim74/runtime/doc/pi_netrw.txt 2014-09-27 01:00:29.673844779 +0000 @@ -1,4 +1,4 @@ -*pi_netrw.txt* For Vim version 7.4. Last change: 2013 May 18 +*pi_netrw.txt* For Vim version 7.4. Last change: 2014 May 13 ------------------------------------------------ NETRW REFERENCE MANUAL by Charles E. Campbell @@ -6,7 +6,7 @@ Author: Charles E. Campbell (remove NOSPAM from Campbell's email first) -Copyright: Copyright (C) 1999-2013 Charles E Campbell *netrw-copyright* +Copyright: Copyright (C) 1999-2014 Charles E Campbell *netrw-copyright* The VIM LICENSE applies to the files in this package, including netrw.vim, pi_netrw.txt, netrwFileHandlers.vim, netrwSettings.vim, and syntax/netrw.vim. Like anything else that's free, netrw.vim and its @@ -49,6 +49,7 @@ Quick Reference: Commands...........................|netrw-browse-cmds| Bookmarking A Directory.............................|netrw-mb| Browsing............................................|netrw-cr| + Squeezing the Current Tree-Listing Directory......|:netrw-s-cr| Browsing With A Horizontally Split Window...........|netrw-o| Browsing With A New Tab.............................|netrw-t| Browsing With A Vertically Split Window.............|netrw-v| @@ -172,7 +173,7 @@ next section, |netrw-externapp|, on how to use these external applications with netrw and vim. -PREVENTING LOADING *netrw-noload* +PREVENTING LOADING *netrw-noload* If you want to use plugins, but for some reason don't wish to use netrw, then you need to avoid loading both the plugin and the autoload portions of netrw. @@ -183,7 +184,7 @@ < ============================================================================== -3. Netrw Reference *netrw-ref* {{{1 +3. Netrw Reference *netrw-ref* {{{1 Netrw supports several protocols in addition to scp and ftp as mentioned in |netrw-start|. These include dav, fetch, http,... well, just look @@ -192,21 +193,22 @@ EXTERNAL APPLICATIONS AND PROTOCOLS *netrw-externapp* {{{2 - Protocol Variable Default Value - -------- ---------------- ------------- - dav: *g:netrw_dav_cmd* = "cadaver" if cadaver is executable - dav: g:netrw_dav_cmd = "curl -o" elseif curl is available - fetch: *g:netrw_fetch_cmd* = "fetch -o" if fetch is available - ftp: *g:netrw_ftp_cmd* = "ftp" - http: *g:netrw_http_cmd* = "elinks" if elinks is available - http: g:netrw_http_cmd = "links" elseif links is available - http: g:netrw_http_cmd = "curl" elseif curl is available - http: g:netrw_http_cmd = "wget" elseif wget is available - http: g:netrw_http_cmd = "fetch" elseif fetch is available - rcp: *g:netrw_rcp_cmd* = "rcp" - rsync: *g:netrw_rsync_cmd* = "rsync -a" - scp: *g:netrw_scp_cmd* = "scp -q" - sftp: *g:netrw_sftp_cmd* = "sftp" + Protocol Variable Default Value + -------- ---------------- ------------- + dav: *g:netrw_dav_cmd* = "cadaver" if cadaver is executable + dav: g:netrw_dav_cmd = "curl -o" elseif curl is available + fetch: *g:netrw_fetch_cmd* = "fetch -o" if fetch is available + ftp: *g:netrw_ftp_cmd* = "ftp" + http: *g:netrw_http_cmd* = "elinks" if elinks is available + http: g:netrw_http_cmd = "links" elseif links is available + http: g:netrw_http_cmd = "curl" elseif curl is available + http: g:netrw_http_cmd = "wget" elseif wget is available + http: g:netrw_http_cmd = "fetch" elseif fetch is available + http: *g:netrw_http_put_cmd* = "curl -T" + rcp: *g:netrw_rcp_cmd* = "rcp" + rsync: *g:netrw_rsync_cmd* = "rsync -a" + scp: *g:netrw_scp_cmd* = "scp -q" + sftp: *g:netrw_sftp_cmd* = "sftp" *g:netrw_http_xcmd* : the option string for http://... protocols are specified via this variable and may be independently overridden. By @@ -223,6 +225,9 @@ let g:netrw_http_xcmd= "-dump >" < in your .vimrc. + g:netrw_http_put_cmd: this option specifies both the executable and + any needed options. This command does a PUT operation to the url. + READING *netrw-read* *netrw-nread* {{{2 @@ -286,7 +291,7 @@ :Nsource "scp://[user@]machine[[:#]port]/path" uses scp :Nsource "sftp://[user@]machine/path" uses sftp -DIRECTORY LISTING *netrw-trailingslash* *netrw-dirlist* {{{2 +DIRECTORY LISTING *netrw-trailingslash* *netrw-dirlist* {{{2 One may browse a directory to get a listing by simply attempting to edit the directory: > @@ -343,9 +348,9 @@ *g:netrw_bufsettings* the settings that netrw buffers have (default) noma nomod nonu nowrap ro nobl - *g:netrw_chgwin* specifies a window number where file edits will take - place. (also see |netrw-C|) - (default) not defined + *g:netrw_chgwin* specifies a window number where subsequent file edits + will take place. (also see |netrw-C|) + (default) -1 *g:Netrw_funcref* specifies a function (or functions) to be called when netrw edits a file. The file is first edited, and @@ -366,9 +371,9 @@ value of this variable to see if the alternate ftp method works for your setup. - *g:netrw_ftp_options* Chosen by default, these options are supposed to turn - interactive prompting off and to restrain ftp from - attempting auto-login upon initial connection. + *g:netrw_ftp_options* Chosen by default, these options are supposed to + turn interactive prompting off and to restrain ftp + from attempting auto-login upon initial connection. However, it appears that not all ftp implementations support this (ex. ncftp). ="-i -n" @@ -399,8 +404,8 @@ *g:netrw_preview* =0 (default) preview window shown in a horizontally split window =1 preview window shown in a vertically split window. - Also affects the "previous window" (see |netrw-P|) in - the same way. + Also affects the "previous window" (see |netrw-P|) + in the same way. *g:netrw_scpport* = "-P" : option to use to set port for scp *g:netrw_sshport* = "-p" : option to use to set port for ssh @@ -538,15 +543,17 @@ starts. You may use this feature to enter a user and password for one site: > userid password -< *netrw-windows-netrc* *netrw-windows-s* -If |g:netrw_ftp_cmd| contains -s:[path/]MACHINE, then (on Windows machines only) -netrw will substitute the current machine name requested for ftp connections -for MACHINE. Hence one can have multiple machine.ftp files containing login -and password for ftp. Example: > +< *netrw-windows-netrc* *netrw-windows-s* +If |g:netrw_ftp_cmd| contains -s:[path/]MACHINE, then (on Windows machines +only) netrw will substitute the current machine name requested for ftp +connections for MACHINE. Hence one can have multiple machine.ftp files +containing login and password for ftp. Example: > let g:netrw_ftp_cmd= 'c:\Windows\System32\ftp -s:C:\Users\Myself\MACHINE' vim ftp://myhost.somewhere.net/ + will use a file > + C:\Users\Myself\myhost.ftp < Often, ftp will need to query the user for the userid and password. @@ -676,7 +683,7 @@ < ============================================================================== -6. Transparent Remote File Editing *netrw-transparent* {{{1 +6. Transparent Remote File Editing *netrw-transparent* {{{1 Transparent file transfers occur whenever a regular file read or write (invoked via an |:autocmd| for |BufReadCmd|, |BufWriteCmd|, or |SourceCmd| @@ -750,7 +757,7 @@ ============================================================================== -8. Variables and Options *netrw-var* *netrw-settings* {{{1 +8. Variables and Options *netrw-var* *netrw-settings* {{{1 (also see: |netrw-options| |netrw-variables| |netrw-protocol| |netrw-browser-settings| |netrw-browser-options| ) @@ -790,7 +797,7 @@ =1 use default method to do ftp > ----------------------------------------------------------------------- < - *netrw-internal-variables* + *netrw-internal-variables* The script will also make use of the following variables internally, albeit temporarily. > @@ -816,8 +823,7 @@ ------------------------ Option Type Setting Meaning --------- -------- -------------- --------------------------- -< - netrw_ftp variable =doesn't exist userid set by "user userid" +< netrw_ftp variable =doesn't exist userid set by "user userid" =0 userid set by "user userid" =1 userid set by "userid" NetReadFixup function =doesn't exist no change @@ -825,17 +831,18 @@ read via ftp automatically transformed however they wish by NetReadFixup() - g:netrw_dav_cmd variable ="cadaver" if cadaver is executable - g:netrw_dav_cmd variable ="curl -o" elseif curl is executable - g:netrw_fetch_cmd variable ="fetch -o" if fetch is available - g:netrw_ftp_cmd variable ="ftp" - g:netrw_http_cmd variable ="fetch -o" if fetch is available - g:netrw_http_cmd variable ="wget -O" else if wget is available - g:netrw_list_cmd variable ="ssh USEPORT HOSTNAME ls -Fa" - g:netrw_rcp_cmd variable ="rcp" - g:netrw_rsync_cmd variable ="rsync -a" - g:netrw_scp_cmd variable ="scp -q" - g:netrw_sftp_cmd variable ="sftp" > + g:netrw_dav_cmd var ="cadaver" if cadaver is executable + g:netrw_dav_cmd var ="curl -o" elseif curl is executable + g:netrw_fetch_cmd var ="fetch -o" if fetch is available + g:netrw_ftp_cmd var ="ftp" + g:netrw_http_cmd var ="fetch -o" if fetch is available + g:netrw_http_cmd var ="wget -O" else if wget is available + g:netrw_http_put_cmd var ="curl -T" + g:netrw_list_cmd var ="ssh USEPORT HOSTNAME ls -Fa" + g:netrw_rcp_cmd var ="rcp" + g:netrw_rsync_cmd var ="rsync -a" + g:netrw_scp_cmd var ="scp -q" + g:netrw_sftp_cmd var ="sftp" > ------------------------------------------------------------------------- < *netrw-ftp* @@ -1037,8 +1044,8 @@ Netrw will attempt to remove the file/directory |netrw-del| - Makes Netrw go up one directory |netrw--| a Toggles between normal display, |netrw-a| - hiding (suppress display of files matching g:netrw_list_hide) - showing (display only files which match g:netrw_list_hide) + hiding (suppress display of files matching g:netrw_list_hide) + showing (display only files which match g:netrw_list_hide) c Make browsing directory the current directory |netrw-c| C Setting the editing window |netrw-C| d Make a directory |netrw-d| @@ -1063,7 +1070,7 @@ mx Apply arbitrary shell command to marked files |netrw-mx| mz Compress/decompress marked files |netrw-mz| o Enter the file/directory under the cursor in a new |netrw-o| - browser window. A horizontal split is used. + browser window. A horizontal split is used. O Obtain a file specified by cursor |netrw-O| p Preview the file |netrw-p| P Browse in the previously used window |netrw-P| @@ -1077,7 +1084,7 @@ u Change to recently-visited directory |netrw-u| U Change to subsequently-visited directory |netrw-U| v Enter the file/directory under the cursor in a new |netrw-v| - browser window. A vertical split is used. + browser window. A vertical split is used. x View file with an associated program |netrw-x| X Execute filename under cursor via |system()| |netrw-X| @@ -1091,22 +1098,26 @@ (gvim only) delete file/directory using word under mouse <2-leftmouse> (gvim only) when: - * in a netrw-selected file, AND - * |g:netrw_retmap| == 1 AND - * the user doesn't already have a <2-leftmouse> + * in a netrw-selected file, AND + * |g:netrw_retmap| == 1 AND + * the user doesn't already have a <2-leftmouse> mapping defined before netrw is autoloaded, then a double clicked leftmouse button will return to the netrw browser window. See |g:netrw_retmap|. - (gvim only) like mf, will mark files + (gvim only) like mf, will mark files. Dragging + the shifted leftmouse will mark multiple files. + (see |netrw-mf|) (to disable mouse buttons while browsing: |g:netrw_mousemaps|) *netrw-quickcom* *netrw-quickcoms* QUICK REFERENCE: COMMANDS *netrw-explore-cmds* *netrw-browse-cmds* {{{2 - :NetrwClean[!] ...........................................|netrw-clean| - :NetrwSettings ...........................................|netrw-settings| + :NetrwClean[!]............................................|netrw-clean| + :NetrwSettings............................................|netrw-settings| + :Ntree....................................................|netrw-ntree| :Explore[!] [dir] Explore directory of current file......|netrw-explore| :Hexplore[!] [dir] Horizontal Split & Explore.............|netrw-explore| + :Lexplore [dir] Left Explorer Toggle...................|netrw-explore| :Nexplore[!] [dir] Vertical Split & Explore...............|netrw-explore| :Pexplore[!] [dir] Vertical Split & Explore...............|netrw-explore| :Rexplore Return to Explorer.....................|netrw-explore| @@ -1171,6 +1182,12 @@ always refresh directory listing buffers by pressing ctrl-L (see |netrw-ctrl-l|). + *:netrw-s-cr* + Squeezing the Current Tree-Listing Directory~ + When the tree listing style is enabled (see |netrw-i|) and one is using + gvim, then the mapping may be used to squeeze (close) the + directory currently containing the cursor. + Related topics: |netrw-o| |netrw-p| |netrw-P| |netrw-t| |netrw-v| Associated setting variables: |g:netrw_browse_split| |g:netrw_fastbrowse| @@ -1219,9 +1236,7 @@ There is only one tree listing buffer; using "v" on a displayed subdirectory will split the screen, but the same buffer will be shown twice. -Associated setting variable: |g:netrw_altv| |g:netrw_winsize| - -Related Actions |netrw-cr| |netrw-o| |netrw-t| |netrw-v| +Related Actions: |netrw-cr| |netrw-o| |netrw-t| |netrw-v| Associated setting variables: |g:netrw_altv| control right/left splitting |g:netrw_winsize| control initial sizing @@ -1243,11 +1258,12 @@ filenames; when using that format, netrw won't be able to recognize or use filenames which have two or more contiguous spaces embedded in the name or any trailing spaces. The thin listing format will, however, work with such files. -This listing format is the most compact. +The wide listing format is the most compact. The tree listing format has a top directory followed by files and directories -preceded by a "|". One may open and close directories by pressing the -key while atop the directory name. +preceded by one or more "|"s, which indicate the directory depth. One may +open and close directories by pressing the key while atop the directory +name. One may make a preferred listing style your default; see |g:netrw_liststyle|. As an example, by putting the following line in your .vimrc, > @@ -1321,6 +1337,17 @@ slots. +CHANGING TREE TOP *netrw-ntree* *:Ntree* + +One may specify a new tree top for tree listings using > + + :Ntree [dirname] + +Without a "dirname", the current line is used (and any leading depth +information is elided). +With a "dirname", the specified directory name is used. + + NETRW CLEAN *netrw-clean* *:NetrwClean* With :NetrwClean one may easily remove netrw from one's home directory; @@ -1436,8 +1463,16 @@ Marked files (and empty directories) will be deleted; again, you'll be asked to confirm the deletion before it actually takes place. +A further approach is to delete files which match a pattern. + + * use :MF pattern (see |netrw-:MF|); then press "D". + + * use mr (see |netrw-mr|) which will prompt you for pattern. + This will cause the matching files to be marked. Then, + press "D". + The |g:netrw_rm_cmd|, |g:netrw_rmf_cmd|, and |g:netrw_rmdir_cmd| variables are -used to control the attempts to remove files and directories. The +used to control the attempts to remove remote files and directories. The g:netrw_rm_cmd is used with files, and its default value is: g:netrw_rm_cmd: ssh HOSTNAME rm @@ -1445,12 +1480,12 @@ The g:netrw_rmdir_cmd variable is used to support the removal of directories. Its default value is: - g:netrw_rmdir_cmd: ssh HOSTNAME rmdir + |g:netrw_rmdir_cmd|: ssh HOSTNAME rmdir If removing a directory fails with g:netrw_rmdir_cmd, netrw then will attempt to remove it again using the g:netrw_rmf_cmd variable. Its default value is: - g:netrw_rmf_cmd: ssh HOSTNAME rm -f + |g:netrw_rmf_cmd|: ssh HOSTNAME rm -f Related topics: |netrw-d| Associated setting variable: |g:netrw_localrmdir| |g:netrw_rm_cmd| @@ -1458,35 +1493,52 @@ *netrw-explore* *netrw-hexplore* *netrw-nexplore* *netrw-pexplore* -*netrw-rexplore* *netrw-sexplore* *netrw-texplore* *netrw-vexplore* +*netrw-rexplore* *netrw-sexplore* *netrw-texplore* *netrw-vexplore* *netrw-lexplore* DIRECTORY EXPLORATION COMMANDS {{{2 :[N]Explore[!] [dir]... Explore directory of current file *:Explore* :[N]Hexplore[!] [dir]... Horizontal Split & Explore *:Hexplore* - :Rexplore ... Return to Explorer *:Rexplore* + :Rexplore ... Return to/from Explorer *:Rexplore* :[N]Sexplore[!] [dir]... Split&Explore current file's directory *:Sexplore* :Texplore [dir]... Tab & Explore *:Texplore* :[N]Vexplore[!] [dir]... Vertical Split & Explore *:Vexplore* + :Lexplore [dir]... Left Explorer Toggle *:Lexplore* Used with :Explore **/pattern : (also see |netrw-starstar|) :Nexplore............. go to next matching file *:Nexplore* :Pexplore............. go to previous matching file *:Pexplore* + *netrw-:Explore* :Explore will open the local-directory browser on the current file's directory (or on directory [dir] if specified). The window will be split only if the file has been modified, otherwise the browsing window will take over that window. Normally the splitting is taken horizontally. + Also see: |netrw-:Rexplore| :Explore! is like :Explore, but will use vertical splitting. + *netrw-:Lexplore* +:Lexplore [dir] toggles an Explorer window on the left hand side + of the current tab It will open a netrw window on the current + directory if [dir] is omitted; a :Lexplore [dir] will show + the specified directory in the left-hand side browser display + no matter from which window the command is issued. By default, + :Lexplore will change an uninitialized |g:netrw_chgwin| to 2; + edits will thus be preferentially made in window#2. + Also see: |netrw-C|| |g:netrw_chgwin| |g:netrw_winsize| + |netrw-p| |netrw-P|| |g:netrw_browse_split| + *netrw-:Sexplore* :Sexplore will always split the window before invoking the local-directory browser. As with Explore, the splitting is normally done horizontally. :Sexplore! [dir] is like :Sexplore, but the splitting will be done vertically. + *netrw-:Hexplore* :Hexplore [dir] does an :Explore with |:belowright| horizontal splitting. :Hexplore! [dir] does an :Explore with |:aboveleft| horizontal splitting. + *netrw-:Vexplore* :Vexplore [dir] does an :Explore with |:leftabove| vertical splitting. :Vexplore! [dir] does an :Explore with |:rightbelow| vertical splitting. -:Texplore [dir] does a tabnew before generating the browser window + *netrw-:Texplore* +:Texplore [dir] does a |:tabnew| before generating the browser window By default, these commands use the current file's directory. However, one may explicitly provide a directory (path) to use. @@ -1498,12 +1550,25 @@ user, is used to control the quantity of rows and/or columns new explorer windows should have. -:Rexplore This command is a little different from the others. When one - edits a file, for example by pressing when atop a file in - a netrw browser window, :Rexplore will return the display to - that of the last netrw browser window. It is a command version - of the <2-leftmouse> map (which is only available under gvim and - cooperative terms). + *netrw-:Rexplore* +:Rexplore This command is a little different from the others as it doesn't + necessarily open an Explorer window. + + Return to Explorer~ + When one edits a file, for example by pressing when the + cursor is atop a file in a netrw browser window, :Rexplore will + return the display to that of the last netrw browser display + in that window. + + Return from Explorer~ + Conversely, when one is editing a directory, issuing a :Rexplore + will return to editing the file that was last edited in that + window. + + The <2-leftmouse> map (which is only available under gvim and + cooperative terms) does the same as :Rexplore. + +Also see: |g:netrw_alto| |g:netrw_altv| |g:netrw_winsize| *netrw-star* *netrw-starpat* *netrw-starstar* *netrw-starstarpat* @@ -1547,11 +1612,12 @@ The status line will show, on the right hand side of the status line, a message like "Match 3 of 20". -Associated setting variables: |g:netrw_keepdir| |g:netrw_browse_split| - |g:netrw_fastbrowse| |g:netrw_ftp_browse_reject| - |g:netrw_ftp_list_cmd| |g:netrw_ftp_sizelist_cmd| - |g:netrw_ftp_timelist_cmd| |g:netrw_list_cmd| - |g:netrw_liststyle| +Associated setting variables: + |g:netrw_keepdir| |g:netrw_browse_split| + |g:netrw_fastbrowse| |g:netrw_ftp_browse_reject| + |g:netrw_ftp_list_cmd| |g:netrw_ftp_sizelist_cmd| + |g:netrw_ftp_timelist_cmd| |g:netrw_list_cmd| + |g:netrw_liststyle| DISPLAYING INFORMATION ABOUT FILE *netrw-qf* {{{2 @@ -1641,10 +1707,10 @@ Netrw will use the command in |g:netrw_list_cmd| to perform the directory listing operation after changing HOSTNAME to the host specified by the -user-provided url. By default netrw provides the command as: +user-prpvided url. By default netrw provides the command as: > ssh HOSTNAME ls -FLa - +< where the HOSTNAME becomes the [user@]hostname as requested by the attempt to read. Naturally, the user may override this command with whatever is preferred. The NetList function which implements remote browsing @@ -1696,9 +1762,36 @@ to toggle between hiding files which begin with a period (dot) and not hiding them. -Associated setting variable: |g:netrw_list_hide| |g:netrw_hide| +Associated setting variables: |g:netrw_list_hide| |g:netrw_hide| Associated topics: |netrw-a| |netrw-ctrl-h| |netrw-mh| + *netrw-gitignore* +Netrw provides a helper function 'netrw_gitignore#Hide()' that, when used with +|g:netrw_list_hide| automatically hides all git-ignored files. + +'netrw_gitignore#Hide' searches for patterns in the following files: + './.gitignore' + './.git/info/exclude' + global gitignore file: `git config --global core.excludesfile` + system gitignore file: `git config --system core.excludesfile` + +Files that do not exist, are ignored. +Git-ignore patterns are taken from existing files, and converted to patterns for +hiding files. For example, if you had '*.log' in your '.gitignore' file, it +would be converted to '.*\.log'. + +To use this function, simply assign it's output to |g:netrw_list_hide| option. + + Example: let g:netrw_list_hide= netrw_gitignore#Hide() + Git-ignored files are hidden in Netrw. + + Example: let g:netrw_list_hide= netrw_gitignore#Hide('my_gitignore_file') + Function can take additional files with git-ignore patterns. + + Example: g:netrw_list_hide= netrw_gitignore#Hide() . '.*\.swp$' + Combining 'netrw_gitignore#Hide' with custom patterns. + + IMPROVING BROWSING *netrw-listhack* *netrw-ssh-hack* {{{2 Especially with the remote directory browser, constantly entering the password @@ -1778,6 +1871,15 @@ http://sial.org/howto/openssh/publickey-auth/ + Ssh hints: + + Thomer Gil has provided a hint on how to speed up netrw+ssh: + http://thomer.com/howtos/netrw_ssh.html + + Alex Young has several hints on speeding ssh up: + http://usevim.com/2012/03/16/editing-remote-files/ + + LISTING BOOKMARKS AND HISTORY *netrw-qb* *netrw-listbookmark* {{{2 Pressing "qb" (query bookmarks) will list both the bookmarked directories and @@ -1800,8 +1902,8 @@ a file or a directory) will be detected, reported on, and ignored. Related topics: |netrw-D| -Associated setting variables: |g:netrw_localmkdir| |g:netrw_mkdir_cmd| - |g:netrw_remote_mkdir| +Associated setting variables: |g:netrw_localmkdir| |g:netrw_mkdir_cmd| + |g:netrw_remote_mkdir| |netrw-%| MAKING THE BROWSING DIRECTORY THE CURRENT DIRECTORY *netrw-c* {{{2 @@ -1821,12 +1923,29 @@ Associated setting variable: |g:netrw_keepdir| -MARKING FILES *netrw-mf* {{{2 +MARKING FILES *netrw-:MF* *netrw-mf* {{{2 (also see |netrw-mr|) -One may mark files with the cursor atop a filename and then pressing "mf". -With gvim, one may also mark files with . The following netrw -maps make use of marked files: +Netrw has several ways of marking files: + + * One may mark files with the cursor atop a filename and + then pressing "mf". + + * With gvim, in addition one may mark files with + . (see |netrw-mouse|) + + * One may use the :MF command, which takes a list of + files (for local directories, the list may include + wildcards -- see |glob()|) > + + :MF *.c +< + * Note that :MF uses || to break the line + at spaces. + + * Mark files based upon the quickfix list (|netrw-qF|) + +The following netrw maps make use of marked files: |netrw-a| Hide marked files/directories |netrw-D| Delete marked files/directories @@ -1835,13 +1954,12 @@ |netrw-me| Edit marked files |netrw-mF| Unmark marked files |netrw-mg| Apply vimgrep to marked files - |netrw-mm| Move marked files + |netrw-mm| Move marked files to target |netrw-mp| Print marked files |netrw-mt| Set target for |netrw-mm| and |netrw-mc| |netrw-mT| Generate tags using marked files |netrw-mx| Apply shell command to marked files |netrw-mz| Compress/Decompress marked files - |netrw-qF| Mark files using quickfix list |netrw-O| Obtain marked files |netrw-R| Rename marked files @@ -1860,6 +1978,10 @@ < into $HOME/.vim/after/syntax/netrw.vim . +If the mouse is enabled and works with your vim, you may use to +mark one or more files. You may mark multiple files by dragging the shifted +leftmouse. (see |netrw-mouse|) + *markfilelist* *global_markfilelist* *local_markfilelist* All marked files are entered onto the global marked file list; there is only one such list. In addition, every netrw buffer also has its own local marked @@ -1868,6 +1990,12 @@ commands which operate on marked files use one or the other of the marked file lists. +Known Problem: if one is using tree mode (|g:netrw_liststyle|) and several +directories have files with the same name, then marking such a file will +result in all such files being highlighted as if they were all marked. The +|markfilelist|, however, will only have the selected file in it. This problem +is unlikely to be fixed. + UNMARKING FILES *netrw-mF* {{{2 (also see |netrw-mf|) @@ -2025,6 +2153,10 @@ * However, if the cursor is atop a directory name, then that directory is used for the copy/move-to target + * One may use the :MT [directory] command to set the target *netrw-:MT* + This command uses ||, so spaces in the directory name are + permitted without escaping. + There is only one copy/move-to target per vim session; ie. the target is a script variable (see |s:var|) and is shared between all netrw windows (in an instance of vim). @@ -2055,9 +2187,9 @@ in my <.vimrc>. When a remote set of files are tagged, the resulting tags file is "obtained"; -ie. a copy is transferred to the local system's directory. The local tags +ie. a copy is transferred to the local system's directory. The now local tags file is then modified so that one may use it through the network. The -modification is concerns the names of the files in the tags; each filename is +modification made concerns the names of the files in the tags; each filename is preceded by the netrw-compatible url used to obtain it. When one subsequently uses one of the go to tag actions (|tags|), the url will be used by netrw to edit the desired file and go to the tag. @@ -2066,34 +2198,38 @@ MARKED FILES: TARGET DIRECTORY USING BOOKMARKS *netrw-Tb* {{{2 -Sets the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|). +Sets the marked file copy/move-to target. The |netrw-qb| map will give you a list of bookmarks (and history). One may choose one of the bookmarks to become your marked file target by using [count]Tb (default count: 1). Related topics: + Copying files to target............................|netrw-mc| Listing Bookmarks and History......................|netrw-qb| Marked Files: Setting The Target Directory.........|netrw-mt| Marked Files: Target Directory Using History.......|netrw-Th| Marking Files......................................|netrw-mf| Marking Files by Regular Expression................|netrw-mr| + Moving files to target.............................|netrw-mm| MARKED FILES: TARGET DIRECTORY USING HISTORY *netrw-Th* {{{2 -Sets the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|). +Sets the marked file copy/move-to target. The |netrw-qb| map will give you a list of history (and bookmarks). One may choose one of the history entries to become your marked file target by using [count]Th (default count: 0; ie. the current directory). Related topics: + Copying files to target............................|netrw-mc| Listing Bookmarks and History......................|netrw-qb| Marked Files: Setting The Target Directory.........|netrw-mt| Marked Files: Target Directory Using Bookmarks.....|netrw-Tb| Marking Files......................................|netrw-mf| Marking Files by Regular Expression................|netrw-mr| + Moving files to target.............................|netrw-mm| MARKED FILES: UNMARKING *netrw-mu* {{{2 @@ -2114,7 +2250,15 @@ --- ----------- Var Explanation --- ----------- -< *g:netrw_alto* change from above splitting to below splitting +< *g:netrw_altfile* some like |CTRL-^| to return to the last + edited file. Choose that by setting this + parameter to 1. + Others like |CTRL-^| to return to the + netrw browsing buffer. Choose that by setting + this parameter to 0. + default: =0 + + *g:netrw_alto* change from above splitting to below splitting by setting this variable (see |netrw-o|) default: =&sb (see |'sb'|) @@ -2142,6 +2286,10 @@ to get vertical splitting instead of horizontal splitting. + Related topics: + |netrw-cr| |netrw-C| + |g:netrw_alto| |g:netrw_altv| + *g:netrw_browsex_viewer* specify user's preference for a viewer: > "kfmclient exec" "gnome-open" @@ -2205,6 +2353,7 @@ *g:netrw_dynamic_maxfilenamelen* =32: enables dynamic determination of |g:netrw_maxfilenamelen|, which affects local file long listing. + *g:netrw_errorlvl* =0: error levels greater than or equal to this are permitted to be displayed 0: notes @@ -2212,7 +2361,7 @@ 2: errors *g:netrw_fastbrowse* =0: slow speed directory browsing; - never re-uses directory listings, + never re-uses directory listings; always obtains directory listings. =1: medium speed directory browsing; re-use directory listings only @@ -2235,6 +2384,11 @@ trading off accuracy (ie. up-to-date listing) versus speed. + *g:netrw_ffkeep* (default: doesn't exist) + If this variable exists and is zero, then + netrw will not do a save and restore for + |'fileformat'|. + *g:netrw_fname_escape* =' ?&;%' Used on filenames before remote reading/writing @@ -2303,10 +2457,19 @@ stamp information and file size) = 2: wide listing (multiple files in columns) = 3: tree style listing + *g:netrw_list_hide* comma separated pattern list for hiding files Patterns are regular expressions (see |regexp|) - Example: let g:netrw_list_hide= '.*\.swp$' - default: "" + There's some special support for git-ignore + files: you may add the output from the helper + function 'netrw_gitignore#Hide() automatically + hiding all gitignored files. + For more details see |netrw-gitignore|. + + Examples: + let g:netrw_list_hide= '.*\.swp$' + let g:netrw_list_hide= netrw_gitignore#Hide().'.*\.swp$' + default: "" *g:netrw_localcopycmd* ="cp" Linux/Unix/MacOS/Cygwin ="copy" Windows @@ -2348,7 +2511,7 @@ evaluation will be suppressed (see |'ballooneval'|) - *g:netrw_remote_mkdir* command for making a local directory + *g:netrw_remote_mkdir* command for making a remote directory via ftp (also see |g:netrw_mkdir_cmd|) default: "mkdir" @@ -2371,13 +2534,13 @@ default: =0 - *g:netrw_rm_cmd* command for removing files + *g:netrw_rm_cmd* command for removing remote files default: "ssh USEPORT HOSTNAME rm" - *g:netrw_rmdir_cmd* command for removing directories + *g:netrw_rmdir_cmd* command for removing remote directories default: "ssh USEPORT HOSTNAME rmdir" - *g:netrw_rmf_cmd* command for removing softlinks + *g:netrw_rmf_cmd* command for removing remote softlinks default: "ssh USEPORT HOSTNAME rm -f" *g:netrw_sort_by* sort by "name", "time", or "size" @@ -2396,7 +2559,7 @@ *g:netrw_sort_sequence* when sorting by name, first sort by the comma-separated pattern sequence. Note that - the filigree added to indicate filetypes + any filigree added to indicate filetypes should be accounted for in your pattern. default: '[\/]$,*,\.bak$,\.o$,\.h$, \.info$,\.swp$,\.obj$' @@ -2412,7 +2575,7 @@ netrwMakefile: [mM]akefile *.mak netrwObj : *.o *.obj netrwTags : tags ANmenu ANtags - netrwTilde : *~ + netrwTilde : * netrwTmp : tmp* *tmp These syntax highlighting groups are linked @@ -2421,8 +2584,27 @@ one may put lines like > hi link netrwCompress Visual < into one's <.vimrc> to use one's own - preferences. - + preferences. Alternatively, one may + put such specifications into + .vim/after/syntax/netrw.vim. + + As an example, I myself use a dark-background + colorscheme with the following in + .vim/after/syntax/netrw.vim: > + + hi netrwCompress term=NONE cterm=NONE gui=NONE ctermfg=10 guifg=green ctermbg=0 guibg=black + hi netrwData term=NONE cterm=NONE gui=NONE ctermfg=9 guifg=blue ctermbg=0 guibg=black + hi netrwHdr term=NONE cterm=NONE,italic gui=NONE guifg=SeaGreen1 + hi netrwLex term=NONE cterm=NONE,italic gui=NONE guifg=SeaGreen1 + hi netrwYacc term=NONE cterm=NONE,italic gui=NONE guifg=SeaGreen1 + hi netrwLib term=NONE cterm=NONE gui=NONE ctermfg=14 guifg=yellow + hi netrwObj term=NONE cterm=NONE gui=NONE ctermfg=12 guifg=red + hi netrwTilde term=NONE cterm=NONE gui=NONE ctermfg=12 guifg=red + hi netrwTmp term=NONE cterm=NONE gui=NONE ctermfg=12 guifg=red + hi netrwTags term=NONE cterm=NONE gui=NONE ctermfg=12 guifg=red + hi netrwDoc term=NONE cterm=NONE gui=NONE ctermfg=220 ctermbg=27 guifg=yellow2 guibg=Blue3 + hi netrwSymLink term=NONE cterm=NONE gui=NONE ctermfg=220 ctermbg=27 guifg=grey60 +< *g:netrw_ssh_browse_reject* ssh can sometimes produce unwanted lines, messages, banners, and whatnot that one doesn't want masquerading as "directories" and "files". @@ -2457,6 +2639,7 @@ ml_get errors, try putting let g:netrw_use_noswf= 0 in your .vimrc. + default: 1 *g:netrw_winsize* specify initial size of new windows made with "o" (see |netrw-o|), "v" (see |netrw-v|), @@ -2467,6 +2650,9 @@ If g:netrw_winsize is less than zero, then the absolute value of g:netrw_winsize lines or columns will be used for the new window. + If g:netrw_winsize is zero, then a normal + split will be made (ie. |'equalalways'| will + take effect, for example). default: 50 (for 50%) *g:netrw_xstrlen* Controls how netrw computes string lengths, @@ -2496,7 +2682,7 @@ options to something that's compatible with netrw's needs, and then restoring them. However, the autochdir option: > :set acd -is problematical. Autochdir sets the current directory to that containing the +is problematic. Autochdir sets the current directory to that containing the file you edit; this apparently also applies to directories. In other words, autochdir sets the current directory to that containing the "file" (even if that "file" is itself a directory). @@ -2547,9 +2733,11 @@ *netrw-createfile* OPEN A NEW FILE IN NETRW'S CURRENT DIRECTORY *netrw-%* -To open a file in netrw's current directory, press "%". This map will -query the user for a new filename; an empty file by that name will be -placed in the netrw's current directory (ie. b:netrw_curdir). +To open a new file in netrw's current directory, press "%". This map +will query the user for a new filename; an empty file by that name will +be placed in the netrw's current directory (ie. b:netrw_curdir). + +Related topics: |netrw-d| PREVIEW WINDOW *netrw-p* *netrw-preview* {{{2 @@ -2573,6 +2761,9 @@ will use only 30% of the columns available; the rest of the window is used for the preview window. +Also see: |g:netrw_chgwin| |netrw-P| + + PREVIOUS WINDOW *netrw-P* *netrw-prvwin* {{{2 To edit a file or directory in the previously used (last accessed) window (see @@ -2592,6 +2783,8 @@ |g:netrw_preview| control horizontal vs vertical splitting |g:netrw_winsize| control initial sizing +Also see: |g:netrw_chgwin| |netrw-p| + REFRESHING THE LISTING *netrw-ctrl-l* *netrw-ctrl_l* {{{2 @@ -2629,6 +2822,7 @@ Note that moving files is a dangerous operation; copies are safer. That's because a "move" for remote files is actually a copy + delete -- and if the copy fails and the delete does not, you may lose the file. + Use at your own risk. The g:netrw_rename_cmd variable is used to implement renaming. By default its value is: @@ -2655,7 +2849,16 @@ g:netrw_chgwin to the selected window number. Subsequent selection of a file to edit (|netrw-cr|) will use that window. -Related topics: |netrw-cr| + * C by itself, will select the current window for editing via + |netrw-cr| + + * [count]C the count will be used as the window number to be used + for editing via |netrw-cr|. +Using > + let g:netrw_chgwin= -1 +will restore the default editing behavior (ie. use the current window). + +Related topics: |netrw-cr| |g:netrw_browse_split| Associated setting variables: |g:netrw_chgwin| @@ -2742,7 +2945,7 @@ (taken from an answer provided by Wu Yongwei on the vim mailing list) - I now see the problem. You code page is not 936, right? Vim + I now see the problem. Your code page is not 936, right? Vim seems only able to open files with names that are valid in the current code page, as are many other applications that do not use the Unicode version of Windows APIs. This is an OS-related @@ -2943,6 +3146,15 @@ all netrw's mouse mappings, not just the one. (see |g:netrw_mousemaps|) + *netrw-p16* + P16. When editing remote files (ex. :e ftp://hostname/path/file), + under Windows I get an |E303| message complaining that its unable + to open a swap file. + + (romainl) It looks like you are starting Vim from a protected + directory. Start if from your $HOME or another writable + directory. + ============================================================================== 11. Debugging Netrw Itself *netrw-debug* {{{1 @@ -2950,9 +3162,6 @@ > /usr/local/share/vim/vim7x/plugin/netrwPlugin.vim /usr/local/share/vim/vim7x/autoload/netrw.vim -< -or- > - /usr/local/share/vim/vim6x/plugin/netrwPlugin.vim - /usr/local/share/vim/vim6x/autoload/netrw.vim < which is loaded automatically at startup (assuming :set nocp). @@ -2962,9 +3171,7 @@ or http://vim.sourceforge.net/scripts/script.php?script_id=120 - It now comes as a "vimball"; if you're using vim 7.0 or earlier, - you'll need to update vimball, too. See - http://www.drchip.org/astronaut/vim/index.html#VIMBALL + Decho.vim is provided as a "vimball"; see |vimball-intro|. 2. Edit the file by typing: > @@ -2988,15 +3195,153 @@ read/write your file over the network in a separate tab. To save the file, use > + :tabnext :set bt= :w! DBG -< Please send that information to 's maintainer, > + +< Furthermore, it'd be helpful if you would type > + :Dsep +< where is the command you're about to type next, + thereby making it easier to associate which part of the + debugging trace is due to which command. + + Please send that information to 's maintainer along + with the o/s you're using and vim version you're using + (see |:version|) > NdrOchip at ScampbellPfamily.AbizM - NOSPAM < ============================================================================== 12. History *netrw-history* {{{1 + v152: Apr 08, 2014 * uses the |'noswapfile'| option (requires + vim 7.4 with patch 213) + * (Enno Nagel) turn |'rnu'| off in netrw + buffers. + * (Quinn Strahl) suggested that netrw + allow regular window splitting to occur, + thereby allowing |'equalalways'| to take + effect. + * (qingtian zhao) normally, netrw will + save and restore the |'fileformat'|; + however, sometimes that isn't wanted + Apr 14, 2014 * whenever netrw marks a buffer as ro, + it will also mark it as nomod. + Apr 16, 2014 * sftp protocol now supported by + netrw#Obtain(); this means that one + may use "mc" to copy a remote file + to a local file using sftp, and that + the |netrw-O| command can obtain remote + files via sftp. + * added [count]C support (see |netrw-C|) + Apr 18, 2014 * when |g:netrw_chgwin| is one more than + the last window, then vertically split + the last window and use it as the + chgwin window. + May 09, 2014 * SavePosn was "saving filename under cursor" + from a non-netrw window when using :Rex. + v151: Jan 22, 2014 * extended :Rexplore to return to buffer + prior to Explore or editing a directory + * (Ken Takata) netrw gave error when + clipboard was disabled. Sol'n: Placed + several if has("clipboard") tests in. + * Fixed ftp://X@Y@Z// problem; X@Y now + part of user id, and only Z is part of + hostname. + * (A Loumiotis) reported that completion + using a directory name containing spaces + did not work. Fixed with a retry in + netrw#Explore() which removes the + backslashes vim inserted. + Feb 26, 2014 * :Rexplore now records the current file + using w:netrw_rexfile when returning via + |:Rexplore| + Mar 08, 2014 * (David Kotchan) provided some patches + allowing netrw to work properly with + windows shares. + * Multiple one-liner help messages available + by pressing while atop the "Quick + Help" line + * worked on ShellCmdPost, FocusGained event + handling. + * |:Lexplore| path: will be used to update + a left-side netrw browsing directory. + Mar 12, 2014 * |:netrw-s-cr|: use to close + tree directory implemented + Mar 13, 2014 * (Tony Mechylynck) reported that using + the browser with ftp on a directory, + and selecting a gzipped txt file, that + an E19 occurred (which was issued by + gzip.vim). Fixed. + Mar 14, 2014 * Implemented :MF and :MT (see |netrw-:MF| + and |netrw-:MT|, respectively) + Mar 17, 2014 * |:Ntree| [dir] wasn't working properly; fixed + Mar 18, 2014 * Changed all uses of set to setl + Mar 18, 2014 * Commented the netrw_btkeep line in + s:NetrwOptionSave(); the effect is that + netrw buffers will remain as |'bt'|=nofile. + This should prevent swapfiles being created + for netrw buffers. + Mar 20, 2014 * Changed all uses of lcd to use s:NetrwLcd() + instead. Consistent error handling results + and it also handles Window's shares + * Fixed |netrw-d| command when applied with ftp + * https: support included for netrw#NetRead() + v150: Jul 12, 2013 * removed a "keepalt" to allow ":e #" to + return to the netrw directory listing + Jul 13, 2013 * (Jonas Diemer) suggested changing + a to . + Jul 21, 2013 * (Yuri Kanivetsky) reported that netrw's + use of mkdir did not produce directories + following the user's umask. + Aug 27, 2013 * introduced |g:netrw_altfile| option + Sep 05, 2013 * s:Strlen() now uses |strdisplaywidth()| + when available, by default + Sep 12, 2013 * (Selyano Baldo) reported that netrw wasn't + opening some directories properly from the + command line. + Nov 09, 2013 * |:Lexplore| introduced + * (Ondrej Platek) reported an issue with + netrw's trees (P15). Fixed. + * (Jorge Solis) reported that "t" in + tree mode caused netrw to forget its + line position. + Dec 05, 2013 * Added file marking + (see |netrw-mf|) + Dec 05, 2013 * (Yasuhiro Matsumoto) Explore should use + strlen() instead s:Strlen() when handling + multibyte chars with strpart() + (ie. strpart() is byte oriented, not + display-width oriented). + Dec 09, 2013 * (Ken Takata) Provided a patch; File sizes + and a portion of timestamps were wrongly + highlighted with the directory color when + setting `:let g:netrw_liststyle=1` on Windows. + * (Paul Domaskis) noted that sometimes + cursorline was activating in non-netrw + windows. All but one setting of cursorline + was done via setl; there was one that was + overlooked. Fixed. + Dec 24, 2013 * (esquifit) asked that netrw allow the + /cygdrive prefix be a user-alterable + parameter. + Jan 02, 2014 * Fixed a problem with netrw-based ballon + evaluation (ie. netrw#NetrwBaloonHelp() + not having been loaded error messages) + Jan 03, 2014 * Fixed a problem with tree listings + * New command installed: |:Ntree| + Jan 06, 2014 * (Ivan Brennan) reported a problem with + |netrw-P|. Fixed. + Jan 06, 2014 * Fixed a problem with |netrw-P| when the + modified file was to be abandoned. + Jan 15, 2014 * (Matteo Cavalleri) reported that when the + banner is suppressed and tree listing is + used, a blank line was left at the top of + the display. Fixed. + Jan 20, 2014 * (Gideon Go) reported that, in tree listing + style, with a previous window open, that + the wrong directory was being used to open + a file. Fixed. (P21) v149: Apr 18, 2013 * in wide listing format, now have maps for w and b to move to next/previous file Apr 26, 2013 * one may now copy files in the same @@ -3009,7 +3354,8 @@ May 01, 2013 * :Explore ftp://... wasn't working. Fixed. May 02, 2013 * introduced |g:netrw_bannerbackslash| as requested by Paul Domaskis. - May 18, 2013 * More fixes for windows (not cygwin) + Jul 03, 2013 * Explore now avoids splitting when a buffer + will be hidden. v148: Apr 16, 2013 * changed Netrw's Style menu to allow direct choice of listing style, hiding style, and sorting style diff -Naur vim74.orig/runtime/doc/pi_vimball.txt vim74/runtime/doc/pi_vimball.txt --- vim74.orig/runtime/doc/pi_vimball.txt 2013-08-10 11:25:00.000000000 +0000 +++ vim74/runtime/doc/pi_vimball.txt 2014-09-27 01:00:29.683844754 +0000 @@ -188,7 +188,7 @@ * Changed silent! to sil! (shorter) * Safed |'swf'| setting (during vimball extraction, its now turned off) - 32 : May 19, 2010 * (Christian Brabrandt) :so someplugin.vba and + 32 : May 19, 2010 * (Christian Brabandt) :so someplugin.vba and :so someplugin.vba.gz (and the other supported compression types) now works * (Jan Steffens) added support for xz compression diff -Naur vim74.orig/runtime/doc/quickfix.txt vim74/runtime/doc/quickfix.txt --- vim74.orig/runtime/doc/quickfix.txt 2013-08-10 11:25:00.000000000 +0000 +++ vim74/runtime/doc/quickfix.txt 2014-09-27 01:00:29.693844729 +0000 @@ -1,4 +1,4 @@ -*quickfix.txt* For Vim version 7.4. Last change: 2013 Aug 03 +*quickfix.txt* For Vim version 7.4. Last change: 2014 Mar 27 VIM REFERENCE MANUAL by Bram Moolenaar @@ -202,8 +202,8 @@ the current window is used instead of the quickfix list. - *:caddb* *:caddbuffer* -:caddb[uffer] [bufnr] Read the error list from the current buffer and add + *:cad* *:caddbuffer* +:cad[dbuffer] [bufnr] Read the error list from the current buffer and add the errors to the current quickfix list. If a quickfix list is not present, then a new list is created. Otherwise, same as ":cbuffer". @@ -240,8 +240,8 @@ :lgete[xpr] {expr} Same as |:cgetexpr|, except the location list for the current window is used instead of the quickfix list. - *:cad* *:caddexpr* -:cad[dexpr] {expr} Evaluate {expr} and add the resulting lines to the + *:cadde* *:caddexpr* +:cadde[xpr] {expr} Evaluate {expr} and add the resulting lines to the current quickfix list. If a quickfix list is not present, then a new list is created. The current cursor position will not be changed. See |:cexpr| for @@ -304,18 +304,23 @@ *:cope* *:copen* *w:quickfix_title* :cope[n] [height] Open a window to show the current list of errors. + When [height] is given, the window becomes that high - (if there is room). Otherwise the window is made ten - lines high. - The window will contain a special buffer, with - 'buftype' equal to "quickfix". Don't change this! + (if there is room). When [height] is omitted the + window is made ten lines high. + If there already is a quickfix window, it will be made the current window. It is not possible to open a - second quickfix window. The window will have the - w:quickfix_title variable set which will indicate the - command that produced the quickfix list. This can be - used to compose a custom status line if the value of - 'statusline' is adjusted properly. + second quickfix window. If [height] is given the + existing window will be resized to it. + + The window will contain a special buffer, with + 'buftype' equal to "quickfix". Don't change this! + The window will have the w:quickfix_title variable set + which will indicate the command that produced the + quickfix list. This can be used to compose a custom + status line if the value of 'statusline' is adjusted + properly. *:lop* *:lopen* :lop[en] [height] Open a window to show the location list for the @@ -838,7 +843,7 @@ The alltests.py script seems to be used quite often, that's all. Useful values for the 'makeprg' options therefore are: setlocal makeprg=./alltests.py " Run a testsuite - setlocal makeprg=python % " Run a single testcase + setlocal makeprg=python\ %:S " Run a single testcase Also see http://vim.sourceforge.net/tip_view.php?tip_id=280. @@ -1332,7 +1337,7 @@ Here is an alternative from Michael F. Lamb for Unix that filters the errors first: > :setl errorformat=%Z%f:%l:\ %m,%A%p^,%-G%*[^sl]%.%# - :setl makeprg=javac\ %\ 2>&1\ \\\|\ vim-javac-filter + :setl makeprg=javac\ %:S\ 2>&1\ \\\|\ vim-javac-filter You need to put the following in "vim-javac-filter" somewhere in your path (e.g., in ~/bin) and make it executable: > diff -Naur vim74.orig/runtime/doc/quickref.txt vim74/runtime/doc/quickref.txt --- vim74.orig/runtime/doc/quickref.txt 2013-08-10 11:25:00.000000000 +0000 +++ vim74/runtime/doc/quickref.txt 2014-09-27 01:00:29.697178054 +0000 @@ -1,4 +1,4 @@ -*quickref.txt* For Vim version 7.4. Last change: 2013 Jun 29 +*quickref.txt* For Vim version 7.4. Last change: 2014 Aug 06 VIM REFERENCE MANUAL by Bram Moolenaar @@ -624,6 +624,8 @@ 'bioskey' 'biosk' MS-DOS: use bios calls for input characters 'bomb' prepend a Byte Order Mark to the file 'breakat' 'brk' characters that may cause a line break +'breakindent' 'bri' wrapped line repeats indent +'breakindentopt' 'briopt' settings for 'breakindent' 'browsedir' 'bsdir' which directory to start browsing in 'bufhidden' 'bh' what to do when buffer is no longer in window 'buflisted' 'bl' whether the buffer shows up in the buffer list @@ -829,6 +831,7 @@ 'regexpengine' 're' default regexp engine to use 'relativenumber' 'rnu' show relative line number in front of each line 'remap' allow mappings to work recursively +'renderoptions' 'rop' options for text rendering on Windows 'report' threshold for reporting nr. of lines changed 'restorescreen' 'rs' Win32: restore screen when exiting 'revins' 'ri' inserting characters will work backwards diff -Naur vim74.orig/runtime/doc/recover.txt vim74/runtime/doc/recover.txt --- vim74.orig/runtime/doc/recover.txt 2013-08-10 11:25:00.000000000 +0000 +++ vim74/runtime/doc/recover.txt 2014-09-27 01:00:29.700511379 +0000 @@ -1,4 +1,4 @@ -*recover.txt* For Vim version 7.4. Last change: 2010 Jul 20 +*recover.txt* For Vim version 7.4. Last change: 2014 Mar 27 VIM REFERENCE MANUAL by Bram Moolenaar @@ -81,7 +81,14 @@ 'maxmemtot'. And when making a change to a read-only file, the swap file is created anyway. -The 'swapfile' option can be reset to avoid creating a swapfile. +The 'swapfile' option can be reset to avoid creating a swapfile. And the +|:noswapfile| modifier can be used to not create a swapfile for a new buffer. + +:nos[wapfile] {command} *:nos* *:noswapfile* + Execute {command}. If it contains a command that loads a new + buffer, it will be loaded without creating a swapfile and the + 'swapfile' option will be reset. If a buffer already had a + swapfile it is not removed and 'swapfile' is not reset. Detecting an existing swap file ~ diff -Naur vim74.orig/runtime/doc/repeat.txt vim74/runtime/doc/repeat.txt --- vim74.orig/runtime/doc/repeat.txt 2013-08-10 11:25:00.000000000 +0000 +++ vim74/runtime/doc/repeat.txt 2014-09-27 01:00:29.707178029 +0000 @@ -1,4 +1,4 @@ -*repeat.txt* For Vim version 7.4. Last change: 2013 Jul 25 +*repeat.txt* For Vim version 7.4. Last change: 2014 Mar 25 VIM REFERENCE MANUAL by Bram Moolenaar @@ -26,10 +26,14 @@ Simple changes can be repeated with the "." command. Without a count, the count of the last change is used. If you enter a count, it will replace the -last one. If the last change included a specification of a numbered register, -the register number will be incremented. See |redo-register| for an example -how to use this. Note that when repeating a command that used a Visual -selection, the same SIZE of area is used, see |visual-repeat|. +last one. |v:count| and |v:count1| will be set. + +If the last change included a specification of a numbered register, the +register number will be incremented. See |redo-register| for an example how +to use this. + +Note that when repeating a command that used a Visual selection, the same SIZE +of area is used, see |visual-repeat|. *@:* @: Repeat last command-line [count] times. @@ -584,6 +588,12 @@ For profiling syntax highlighting see |:syntime|. +For example, to profile the one_script.vim script file: > + :profile start /tmp/one_script_profile + :profile file one_script.vim + :source one_script.vim + :exit + :prof[ile] start {fname} *:prof* *:profile* *E750* Start profiling, write the output in {fname} upon exit. @@ -608,8 +618,10 @@ This only profiles the script itself, not the functions defined in it. When the [!] is added then all functions defined in the script - will also be profiled. But only if the script is loaded after - this command. + will also be profiled. + Note that profiling only starts when the script is loaded + after this command. A :profile command in the script itself + won't work. :profd[el] ... *:profd* *:profdel* diff -Naur vim74.orig/runtime/doc/sign.txt vim74/runtime/doc/sign.txt --- vim74.orig/runtime/doc/sign.txt 2013-08-10 11:25:01.000000000 +0000 +++ vim74/runtime/doc/sign.txt 2014-09-27 01:00:29.713844679 +0000 @@ -1,4 +1,4 @@ -*sign.txt* For Vim version 7.4. Last change: 2012 Jul 10 +*sign.txt* For Vim version 7.4. Last change: 2014 May 07 VIM REFERENCE MANUAL by Gordon Prieur @@ -137,6 +137,7 @@ :sign place {id} line={lnum} name={name} buffer={nr} Same, but use buffer {nr}. + *E885* :sign place {id} name={name} file={fname} Change the placed sign {id} in file {fname} to use the defined sign {name}. See remark above about {fname} |:sign-fname|. @@ -173,7 +174,7 @@ Remove the placed sign at the cursor position. -LISTING PLACED SIGNS +LISTING PLACED SIGNS *:sign-place-list* :sign place file={fname} List signs placed in file {fname}. diff -Naur vim74.orig/runtime/doc/spell.txt vim74/runtime/doc/spell.txt --- vim74.orig/runtime/doc/spell.txt 2013-08-10 11:25:01.000000000 +0000 +++ vim74/runtime/doc/spell.txt 2014-09-27 01:00:29.720511329 +0000 @@ -1,4 +1,4 @@ -*spell.txt* For Vim version 7.4. Last change: 2013 Jul 17 +*spell.txt* For Vim version 7.4. Last change: 2014 Sep 19 VIM REFERENCE MANUAL by Bram Moolenaar @@ -269,6 +269,13 @@ latin1 yi transliterated Yiddish utf-8 yi-tr transliterated Yiddish + *spell-cjk* +Chinese, Japanese and other East Asian characters are normally marked as +errors, because spell checking of these characters is not supported. If +'spelllang' includes "cjk", these characters are not marked as errors. This +is useful when editing text with spell checking while some Asian words are +present. + SPELL FILES *spell-load* @@ -932,9 +939,10 @@ If you get an E763 warning that the word tables differ you need to update your ".spl" spell files. If you downloaded the files, get the latest version of -all spell files you use. Otherwise generate the .spl file again with -|:mkspell|. If you still get errors check the FOL, LOW and UPP lines in the -used .aff files. +all spell files you use. If you are only using one, e.g., German, then also +download the recent English spell files. Otherwise generate the .spl file +again with |:mkspell|. If you still get errors check the FOL, LOW and UPP +lines in the used .aff files. The XX.ascii.spl spell file generated with the "-ascii" argument will not contain the table with characters, so that it can be combine with spell files @@ -1050,6 +1058,9 @@ SFX F 0 in [^i]n # Spion > Spionin ~ SFX F 0 nen in # Bauerin > Bauerinnen ~ +However, to avoid lots of errors in affix files written for Myspell, you can +add the IGNOREEXTRA flag. + Apparently Myspell allows an affix name to appear more than once. Since this might also be a mistake, Vim checks for an extra "S". The affix files for Myspell that use this feature apparently have this flag. Example: @@ -1103,6 +1114,14 @@ - CIRCUMFIX, as explained just below. +IGNOREEXTRA *spell-IGNOREEXTRA* + +Normally Vim gives an error for an extra field that does not start with '#'. +This avoids errors going unnoticed. However, some files created for Myspell +or Hunspell may contain many entries with an extra field. Use the IGNOREEXTRA +flag to avoid lots of errors. + + CIRCUMFIX *spell-CIRCUMFIX* The CIRCUMFIX flag means a prefix and suffix must be added at the same time. diff -Naur vim74.orig/runtime/doc/starting.txt vim74/runtime/doc/starting.txt --- vim74.orig/runtime/doc/starting.txt 2013-08-10 11:25:01.000000000 +0000 +++ vim74/runtime/doc/starting.txt 2014-09-27 01:00:29.727177979 +0000 @@ -1,4 +1,4 @@ -*starting.txt* For Vim version 7.4. Last change: 2013 Jul 20 +*starting.txt* For Vim version 7.4. Last change: 2014 Jul 09 VIM REFERENCE MANUAL by Bram Moolenaar @@ -167,7 +167,10 @@ *-+/* +/{pat} The cursor will be positioned on the first line containing "pat" in the first file being edited (see |pattern| for the - available search patterns). + available search patterns). The search starts at the cursor + position, which can be the first line or the cursor position + last used from |viminfo|. To force a search from the first + line use "+1 +/pat". +{command} *-+c* *-c* -c {command} {command} will be executed after the first file has been @@ -1276,8 +1279,10 @@ When [!] is included an existing file is overwritten. When [file] is omitted or is a number from 1 to 9, a name is generated and 'viewdir' prepended. When the - last directory name in 'viewdir' does not exist, this - directory is created. + last path part of 'viewdir' does not exist, this + directory is created. E.g., when 'viewdir' is + "$VIM/vimfiles/view" then "view" is created in + "$VIM/vimfiles". An existing file is always overwritten then. Use |:loadview| to load this view again. When [file] is the name of a file ('viewdir' is not @@ -1501,7 +1506,7 @@ already set (registers, marks, |v:oldfiles|, etc.) will be overwritten {not in Vi} - *:wv* *:wviminfo* *E137* *E138* *E574* + *:wv* *:wviminfo* *E137* *E138* *E574* *E886* :wv[iminfo][!] [file] Write to viminfo file [file] (default: see above). The information in the file is first read in to make a merge between old and new info. When [!] is used, diff -Naur vim74.orig/runtime/doc/syntax.txt vim74/runtime/doc/syntax.txt --- vim74.orig/runtime/doc/syntax.txt 2013-08-10 11:25:01.000000000 +0000 +++ vim74/runtime/doc/syntax.txt 2014-09-27 01:00:29.737177954 +0000 @@ -1,4 +1,4 @@ -*syntax.txt* For Vim version 7.4. Last change: 2013 Jul 05 +*syntax.txt* For Vim version 7.4. Last change: 2014 Sep 09 VIM REFERENCE MANUAL by Bram Moolenaar @@ -501,7 +501,7 @@ takes the form of L123 for single-buffer HTML pages, or W2L123 for diff-view pages, and is used to jump to a specific line (in a specific window of a diff view). Javascript is inserted to open any closed dynamic folds -(|g:html_dynamic_folds|) containing the specificed line before jumping. The +(|g:html_dynamic_folds|) containing the specified line before jumping. The javascript also allows omitting the window ID in the url, and the leading L. For example: > @@ -1022,6 +1022,21 @@ This works immediately. +CLOJURE *ft-clojure-syntax* + +Setting *g:clojure_fold* enables folding Clojure code via the syntax engine. +Any list, vector, or map that extends over more than one line can be folded +using the standard Vim |fold-commands|. + +Please note that this option does not work with scripts that redefine the +bracket syntax regions, such as rainbow-parentheses plugins. + +This option is off by default. +> + " Default + let g:clojure_fold = 0 +< + COBOL *cobol.vim* *ft-cobol-syntax* COBOL highlighting has different needs for legacy code than it does for fresh @@ -1281,6 +1296,32 @@ to your startup file. +EUPHORIA *euphoria3.vim* *euphoria4.vim* *ft-euphoria-syntax* + +Two syntax highlighting files exists for Euphoria. One for Euphoria +version 3.1.1, which is the default syntax highlighting file, and one for +Euphoria version 4.0.5 or later. + +Euphoria version 3.1.1 (http://www.rapideuphoria.com/) is still necessary +for developing applications for the DOS platform, which Euphoria version 4 +(http://www.openeuphoria.org/) does not support. + +The following file extensions are auto-detected as Euphoria file type: + + *.e, *.eu, *.ew, *.ex, *.exu, *.exw + *.E, *.EU, *.EW, *.EX, *.EXU, *.EXW + +To select syntax highlighting file for Euphoria, as well as for +auto-detecting the *.e and *.E file extensions as Euphoria file type, +add the following line to your startup file: > + + :let filetype_euphoria="euphoria3" + + or + + :let filetype_euphoria="euphoria4" + + ERLANG *erlang.vim* *ft-erlang-syntax* Erlang is a functional programming language developed by Ericsson. Files with @@ -1647,7 +1688,7 @@ HTML comments are rather special (see an HTML reference document for the details), and the syntax coloring scheme will highlight all errors. However, if you prefer to use the wrong style (starts with ) you can define > +ends with -->) you can define > :let html_wrong_comments=1 JavaScript and Visual Basic embedded inside HTML documents are highlighted as @@ -1918,7 +1959,7 @@ There are several implementations for LPC, we intend to support most widely used ones. Here the default LPC syntax is for MudOS series, for MudOS v22 and before, you should turn off the sensible modifiers, and this will also -asserts the new efuns after v22 to be invalid, don't set this variable when +assert the new efuns after v22 to be invalid, don't set this variable when you are using the latest version of MudOS: > :let lpc_pre_v22 = 1 @@ -2238,7 +2279,7 @@ :let perl_include_pod = 0 -The reduce the complexity of parsing (and increase performance) you can switch +To reduce the complexity of parsing (and increase performance) you can switch off two elements in the parsing of variable names and contents. > To handle package references in variable and function names not differently @@ -2934,6 +2975,7 @@ Tex: Taking Advantage of Conceal Mode |tex-conceal| Tex: Selective Conceal Mode |g:tex_conceal| Tex: Controlling iskeyword |g:tex_isk| + Tex: Fine Subscript and Superscript Control |tex-supersub| *tex-folding* *g:tex_fold_enabled* Tex: Want Syntax Folding? ~ @@ -3027,6 +3069,7 @@ < As an example, let g:tex_fast= "M" will allow math-associated highlighting but suppress all the other region-based syntax highlighting. +(also see: |g:tex_conceal| and |tex-supersub|) *tex-morecommands* *tex-package* Tex: Want To Highlight More Commands? ~ @@ -3128,6 +3171,28 @@ * If g:tex_isk exists, then it will be used for the local 'iskeyword' * Else the local 'iskeyword' will be set to 48-57,a-z,A-Z,192-255 + *tex-supersub* *g:tex_superscripts* *g:tex_subscripts* + Tex: Fine Subscript and Superscript Control~ + + See |tex-conceal| for how to enable concealed character replacement. + + See |g:tex_conceal| for selectively concealing accents, bold/italic, + math, Greek, and superscripts/subscripts. + + One may exert fine control over which superscripts and subscripts one + wants syntax-based concealment for (see |:syn-cchar|). Since not all + fonts support all characters, one may override the + concealed-replacement lists; by default these lists are given by: > + + let g:tex_superscripts= "[0-9a-zA-W.,:;+-<>/()=]" + let g:tex_subscripts= "[0-9aehijklmnoprstuvx,+-/().]" +< + For example, I use Luxi Mono Bold; it doesn't support subscript + characters for "hklmnpst", so I put > + let g:tex_subscripts= "[0-9aeijoruvx,+-/().]" +< in ~/.vim/ftplugin/tex/tex.vim in order to avoid having inscrutable + utf-8 glyphs appear. + TF *tf.vim* *ft-tf-syntax* @@ -3156,18 +3221,16 @@ embedded script highlighting they wish to have. > g:vimsyn_embed == 0 : don't embed any scripts - g:vimsyn_embed =~ 'm' : embed mzscheme (but only if vim supports it) - g:vimsyn_embed =~ 'p' : embed perl (but only if vim supports it) - g:vimsyn_embed =~ 'P' : embed python (but only if vim supports it) - g:vimsyn_embed =~ 'r' : embed ruby (but only if vim supports it) - g:vimsyn_embed =~ 't' : embed tcl (but only if vim supports it) -< -By default, g:vimsyn_embed is "mpPr"; ie. syntax/vim.vim will support -highlighting mzscheme, perl, python, and ruby by default. Vim's has("tcl") -test appears to hang vim when tcl is not truly available. Thus, by default, -tcl is not supported for embedding (but those of you who like tcl embedded in -their vim syntax highlighting can simply include it in the g:vimembedscript -option). + g:vimsyn_embed =~ 'm' : support embedded mzscheme + g:vimsyn_embed =~ 'p' : support embedded perl + g:vimsyn_embed =~ 'P' : support embedded python + g:vimsyn_embed =~ 'r' : support embedded ruby + g:vimsyn_embed =~ 't' : support embedded tcl +< +By default, g:vimsyn_embed is a string supporting interpreters that your vim +itself supports. Concatenate multiple characters to support multiple types +of embedded interpreters; ie. g:vimsyn_embed= "mp" supports embedded mzscheme +and embedded perl. *g:vimsyn_folding* Some folding is now supported with syntax/vim.vim: > diff -Naur vim74.orig/runtime/doc/tags vim74/runtime/doc/tags --- vim74.orig/runtime/doc/tags 2013-08-10 12:23:34.000000000 +0000 +++ vim74/runtime/doc/tags 2014-09-27 01:00:29.750511254 +0000 @@ -12,6 +12,7 @@ % motion.txt /*%* %:. cmdline.txt /*%:.* %:8 cmdline.txt /*%:8* +%:S cmdline.txt /*%:S* %:e cmdline.txt /*%:e* %:gs cmdline.txt /*%:gs* %:h cmdline.txt /*%:h* @@ -90,6 +91,10 @@ 'bl' options.txt /*'bl'* 'bomb' options.txt /*'bomb'* 'breakat' options.txt /*'breakat'* +'breakindent' options.txt /*'breakindent'* +'breakindentopt' options.txt /*'breakindentopt'* +'bri' options.txt /*'bri'* +'briopt' options.txt /*'briopt'* 'brk' options.txt /*'brk'* 'browsedir' options.txt /*'browsedir'* 'bs' options.txt /*'bs'* @@ -751,6 +756,7 @@ 'regexpengine' options.txt /*'regexpengine'* 'relativenumber' options.txt /*'relativenumber'* 'remap' options.txt /*'remap'* +'renderoptions' options.txt /*'renderoptions'* 'report' options.txt /*'report'* 'restorescreen' options.txt /*'restorescreen'* 'revins' options.txt /*'revins'* @@ -761,6 +767,7 @@ 'rlc' options.txt /*'rlc'* 'rnu' options.txt /*'rnu'* 'ro' options.txt /*'ro'* +'rop' options.txt /*'rop'* 'rs' options.txt /*'rs'* 'rtp' options.txt /*'rtp'* 'ru' options.txt /*'ru'* @@ -1140,6 +1147,7 @@ +GUI_Photon various.txt /*+GUI_Photon* +GUI_neXtaw various.txt /*+GUI_neXtaw* +X11 various.txt /*+X11* ++acl various.txt /*+acl* +arabic various.txt /*+arabic* +autocmd various.txt /*+autocmd* +balloon_eval various.txt /*+balloon_eval* @@ -1165,6 +1173,7 @@ +dialog_gui various.txt /*+dialog_gui* +diff various.txt /*+diff* +digraphs various.txt /*+digraphs* ++directx various.txt /*+directx* +dnd various.txt /*+dnd* +emacs_tags various.txt /*+emacs_tags* +eval various.txt /*+eval* @@ -1199,6 +1208,7 @@ +mouse various.txt /*+mouse* +mouse_dec various.txt /*+mouse_dec* +mouse_gpm various.txt /*+mouse_gpm* ++mouse_jsbterm various.txt /*+mouse_jsbterm* +mouse_netterm various.txt /*+mouse_netterm* +mouse_pterm various.txt /*+mouse_pterm* +mouse_sgr various.txt /*+mouse_sgr* @@ -1262,6 +1272,7 @@ +writebackup various.txt /*+writebackup* +xfontset various.txt /*+xfontset* +xim various.txt /*+xim* ++xpm various.txt /*+xpm* +xpm_w32 various.txt /*+xpm_w32* +xsmp various.txt /*+xsmp* +xsmp_interact various.txt /*+xsmp_interact* @@ -1412,6 +1423,7 @@ /\%>c pattern.txt /*\/\\%>c* /\%>l pattern.txt /*\/\\%>l* /\%>v pattern.txt /*\/\\%>v* +/\%C pattern.txt /*\/\\%C* /\%U pattern.txt /*\/\\%U* /\%V pattern.txt /*\/\\%V* /\%[] pattern.txt /*\/\\%[]* @@ -1786,6 +1798,7 @@ :3match pattern.txt /*:3match* ::. cmdline.txt /*::.* ::8 cmdline.txt /*::8* +::S cmdline.txt /*::S* ::e cmdline.txt /*::e* ::gs cmdline.txt /*::gs* ::h cmdline.txt /*::h* @@ -1825,6 +1838,7 @@ :GnatPretty ft_ada.txt /*:GnatPretty* :GnatTags ft_ada.txt /*:GnatTags* :Hexplore pi_netrw.txt /*:Hexplore* +:Lexplore pi_netrw.txt /*:Lexplore* :Man filetype.txt /*:Man* :MkVimball pi_vimball.txt /*:MkVimball* :N editing.txt /*:N* @@ -1836,6 +1850,7 @@ :Nread pi_netrw.txt /*:Nread* :Ns pi_netrw.txt /*:Ns* :Nsource pi_netrw.txt /*:Nsource* +:Ntree pi_netrw.txt /*:Ntree* :Nw pi_netrw.txt /*:Nw* :Nwrite pi_netrw.txt /*:Nwrite* :P various.txt /*:P* @@ -1967,8 +1982,8 @@ :cabc map.txt /*:cabc* :cabclear map.txt /*:cabclear* :cad quickfix.txt /*:cad* -:caddb quickfix.txt /*:caddb* :caddbuffer quickfix.txt /*:caddbuffer* +:cadde quickfix.txt /*:cadde* :caddexpr quickfix.txt /*:caddexpr* :caddf quickfix.txt /*:caddf* :caddfile quickfix.txt /*:caddfile* @@ -2212,6 +2227,9 @@ :foldopen fold.txt /*:foldopen* :for eval.txt /*:for* :fu eval.txt /*:fu* +:func-abort eval.txt /*:func-abort* +:func-dict eval.txt /*:func-dict* +:func-range eval.txt /*:func-range* :function eval.txt /*:function* :function-verbose eval.txt /*:function-verbose* :g repeat.txt /*:g* @@ -2230,6 +2248,8 @@ :ha print.txt /*:ha* :hardcopy print.txt /*:hardcopy* :help helphelp.txt /*:help* +:helpc helphelp.txt /*:helpc* +:helpclose helphelp.txt /*:helpclose* :helpf helphelp.txt /*:helpf* :helpfind helphelp.txt /*:helpfind* :helpg helphelp.txt /*:helpg* @@ -2298,6 +2318,8 @@ :keepj motion.txt /*:keepj* :keepjumps motion.txt /*:keepjumps* :keepmarks motion.txt /*:keepmarks* +:keepp cmdline.txt /*:keepp* +:keeppatterns cmdline.txt /*:keeppatterns* :l various.txt /*:l* :lN quickfix.txt /*:lN* :lNext quickfix.txt /*:lNext* @@ -2489,6 +2511,7 @@ :nbkey netbeans.txt /*:nbkey* :nbstart netbeans.txt /*:nbstart* :ne editing.txt /*:ne* +:netrw-s-cr pi_netrw.txt /*:netrw-s-cr* :new windows.txt /*:new* :next editing.txt /*:next* :next_f editing.txt /*:next_f* @@ -2509,8 +2532,11 @@ :noautocmd autocmd.txt /*:noautocmd* :noh pattern.txt /*:noh* :nohlsearch pattern.txt /*:nohlsearch* +:nor map.txt /*:nor* +:nore map.txt /*:nore* :norea map.txt /*:norea* :noreabbrev map.txt /*:noreabbrev* +:norem map.txt /*:norem* :noremap map.txt /*:noremap* :noremap! map.txt /*:noremap!* :noreme gui.txt /*:noreme* @@ -2518,6 +2544,8 @@ :norm various.txt /*:norm* :normal various.txt /*:normal* :normal-range various.txt /*:normal-range* +:nos recover.txt /*:nos* +:noswapfile recover.txt /*:noswapfile* :nu various.txt /*:nu* :number various.txt /*:number* :nun map.txt /*:nun* @@ -2738,6 +2766,7 @@ :sign-jump sign.txt /*:sign-jump* :sign-list sign.txt /*:sign-list* :sign-place sign.txt /*:sign-place* +:sign-place-list sign.txt /*:sign-place-list* :sign-undefine sign.txt /*:sign-undefine* :sign-unplace sign.txt /*:sign-unplace* :sil various.txt /*:sil* @@ -3427,6 +3456,7 @@ CTRL-{char} intro.txt /*CTRL-{char}* Chinese mbyte.txt /*Chinese* Cmd-event autocmd.txt /*Cmd-event* +CmdUndefined autocmd.txt /*CmdUndefined* Cmdline cmdline.txt /*Cmdline* Cmdline-mode cmdline.txt /*Cmdline-mode* CmdwinEnter autocmd.txt /*CmdwinEnter* @@ -3568,7 +3598,7 @@ E202 options.txt /*E202* E203 autocmd.txt /*E203* E204 autocmd.txt /*E204* -E205 if_pyth.txt /*E205* +E205 options.txt /*E205* E206 options.txt /*E206* E207 editing.txt /*E207* E208 message.txt /*E208* @@ -4294,6 +4324,14 @@ E879 syntax.txt /*E879* E88 windows.txt /*E88* E880 if_pyth.txt /*E880* +E881 autocmd.txt /*E881* +E882 eval.txt /*E882* +E883 eval.txt /*E883* +E884 eval.txt /*E884* +E885 sign.txt /*E885* +E886 starting.txt /*E886* +E887 if_pyth.txt /*E887* +E888 pattern.txt /*E888* E89 message.txt /*E89* E90 message.txt /*E90* E91 options.txt /*E91* @@ -4423,6 +4461,13 @@ OverTheSpot mbyte.txt /*OverTheSpot* P change.txt /*P* PATHEXT eval.txt /*PATHEXT* +PHP_BracesAtCodeLevel indent.txt /*PHP_BracesAtCodeLevel* +PHP_autoformatcomment indent.txt /*PHP_autoformatcomment* +PHP_default_indenting indent.txt /*PHP_default_indenting* +PHP_outdentSLComments indent.txt /*PHP_outdentSLComments* +PHP_outdentphpescape indent.txt /*PHP_outdentphpescape* +PHP_removeCRwhenUnix indent.txt /*PHP_removeCRwhenUnix* +PHP_vintage_case_default_indent indent.txt /*PHP_vintage_case_default_indent* Pattern pattern.txt /*Pattern* Perl if_perl.txt /*Perl* Posix intro.txt /*Posix* @@ -4766,6 +4811,7 @@ arglist editing.txt /*arglist* arglist-position editing.txt /*arglist-position* arglist-quit usr_07.txt /*arglist-quit* +arglistid() eval.txt /*arglistid()* argument-list editing.txt /*argument-list* argv() eval.txt /*argv()* as motion.txt /*as* @@ -4863,6 +4909,7 @@ blockwise-register change.txt /*blockwise-register* blockwise-visual visual.txt /*blockwise-visual* blowfish options.txt /*blowfish* +blowfish2 options.txt /*blowfish2* bold syntax.txt /*bold* bom-bytes mbyte.txt /*bom-bytes* book intro.txt /*book* @@ -4900,6 +4947,7 @@ byte-count editing.txt /*byte-count* byte2line() eval.txt /*byte2line()* byteidx() eval.txt /*byteidx()* +byteidxcomp() eval.txt /*byteidxcomp()* bzip2 pi_gzip.txt /*bzip2* c change.txt /*c* c.vim syntax.txt /*c.vim* @@ -5350,6 +5398,7 @@ dialog gui_w32.txt /*dialog* dialogs-added version5.txt /*dialogs-added* dib motion.txt /*dib* +dict eval.txt /*dict* dict-functions usr_41.txt /*dict-functions* dict-identity eval.txt /*dict-identity* dict-modification eval.txt /*dict-modification* @@ -5458,6 +5507,8 @@ escape intro.txt /*escape* escape() eval.txt /*escape()* escape-bar version4.txt /*escape-bar* +euphoria3.vim syntax.txt /*euphoria3.vim* +euphoria4.vim syntax.txt /*euphoria4.vim* eval eval.txt /*eval* eval() eval.txt /*eval()* eval-examples eval.txt /*eval-examples* @@ -5492,6 +5543,7 @@ exclusive-linewise motion.txt /*exclusive-linewise* executable() eval.txt /*executable()* execute-menus gui.txt /*execute-menus* +exepath() eval.txt /*exepath()* exim starting.txt /*exim* exists() eval.txt /*exists()* exp() eval.txt /*exp()* @@ -5708,6 +5760,7 @@ ft-changelog-syntax syntax.txt /*ft-changelog-syntax* ft-chill-syntax syntax.txt /*ft-chill-syntax* ft-clojure-indent indent.txt /*ft-clojure-indent* +ft-clojure-syntax syntax.txt /*ft-clojure-syntax* ft-cobol-syntax syntax.txt /*ft-cobol-syntax* ft-coldfusion-syntax syntax.txt /*ft-coldfusion-syntax* ft-cpp-syntax syntax.txt /*ft-cpp-syntax* @@ -5724,6 +5777,7 @@ ft-dtd-syntax syntax.txt /*ft-dtd-syntax* ft-eiffel-syntax syntax.txt /*ft-eiffel-syntax* ft-erlang-syntax syntax.txt /*ft-erlang-syntax* +ft-euphoria-syntax syntax.txt /*ft-euphoria-syntax* ft-flexwiki-syntax syntax.txt /*ft-flexwiki-syntax* ft-form-syntax syntax.txt /*ft-form-syntax* ft-fortran-indent indent.txt /*ft-fortran-indent* @@ -5876,6 +5930,8 @@ g:ada_with_gnat_project_files ft_ada.txt /*g:ada_with_gnat_project_files* g:ada_withuse_ordinary ft_ada.txt /*g:ada_withuse_ordinary* g:clojure_align_multiline_strings indent.txt /*g:clojure_align_multiline_strings* +g:clojure_align_subforms indent.txt /*g:clojure_align_subforms* +g:clojure_fold syntax.txt /*g:clojure_fold* g:clojure_fuzzy_indent indent.txt /*g:clojure_fuzzy_indent* g:clojure_fuzzy_indent_blacklist indent.txt /*g:clojure_fuzzy_indent_blacklist* g:clojure_fuzzy_indent_patterns indent.txt /*g:clojure_fuzzy_indent_patterns* @@ -5924,6 +5980,7 @@ g:html_use_encoding syntax.txt /*g:html_use_encoding* g:html_use_xhtml syntax.txt /*g:html_use_xhtml* g:html_whole_filler syntax.txt /*g:html_whole_filler* +g:netrw_altfile pi_netrw.txt /*g:netrw_altfile* g:netrw_alto pi_netrw.txt /*g:netrw_alto* g:netrw_altv pi_netrw.txt /*g:netrw_altv* g:netrw_banner pi_netrw.txt /*g:netrw_banner* @@ -5944,6 +6001,7 @@ g:netrw_errorlvl pi_netrw.txt /*g:netrw_errorlvl* g:netrw_fastbrowse pi_netrw.txt /*g:netrw_fastbrowse* g:netrw_fetch_cmd pi_netrw.txt /*g:netrw_fetch_cmd* +g:netrw_ffkeep pi_netrw.txt /*g:netrw_ffkeep* g:netrw_fname_escape pi_netrw.txt /*g:netrw_fname_escape* g:netrw_ftp pi_netrw.txt /*g:netrw_ftp* g:netrw_ftp_browse_reject pi_netrw.txt /*g:netrw_ftp_browse_reject* @@ -5958,6 +6016,7 @@ g:netrw_hide pi_netrw.txt /*g:netrw_hide* g:netrw_home pi_netrw.txt /*g:netrw_home* g:netrw_http_cmd pi_netrw.txt /*g:netrw_http_cmd* +g:netrw_http_put_cmd pi_netrw.txt /*g:netrw_http_put_cmd* g:netrw_http_xcmd pi_netrw.txt /*g:netrw_http_xcmd* g:netrw_ignorenetrc pi_netrw.txt /*g:netrw_ignorenetrc* g:netrw_keepdir pi_netrw.txt /*g:netrw_keepdir* @@ -6024,6 +6083,8 @@ g:tex_no_error syntax.txt /*g:tex_no_error* g:tex_nospell syntax.txt /*g:tex_nospell* g:tex_stylish syntax.txt /*g:tex_stylish* +g:tex_subscripts syntax.txt /*g:tex_subscripts* +g:tex_superscripts syntax.txt /*g:tex_superscripts* g:tex_verbspell syntax.txt /*g:tex_verbspell* g:var eval.txt /*g:var* g:vimball_home pi_vimball.txt /*g:vimball_home* @@ -6087,6 +6148,8 @@ getcmdline() eval.txt /*getcmdline()* getcmdpos() eval.txt /*getcmdpos()* getcmdtype() eval.txt /*getcmdtype()* +getcmdwintype() eval.txt /*getcmdwintype()* +getcurpos() eval.txt /*getcurpos()* getcwd() eval.txt /*getcwd()* getfontname() eval.txt /*getfontname()* getfperm() eval.txt /*getfperm()* @@ -6358,6 +6421,7 @@ hl-WildMenu syntax.txt /*hl-WildMenu* hlID() eval.txt /*hlID()* hlexists() eval.txt /*hlexists()* +hlsearch-variable eval.txt /*hlsearch-variable* holy-grail index.txt /*holy-grail* home intro.txt /*home* home-replace editing.txt /*home-replace* @@ -6669,6 +6733,7 @@ linewise-visual visual.txt /*linewise-visual* lisp.vim syntax.txt /*lisp.vim* lispindent() eval.txt /*lispindent()* +list eval.txt /*list* list-functions usr_41.txt /*list-functions* list-identity eval.txt /*list-identity* list-index eval.txt /*list-index* @@ -6780,6 +6845,7 @@ match-highlight pattern.txt /*match-highlight* match-parens tips.txt /*match-parens* matchadd() eval.txt /*matchadd()* +matchaddpos() eval.txt /*matchaddpos()* matcharg() eval.txt /*matcharg()* matchdelete() eval.txt /*matchdelete()* matchend() eval.txt /*matchend()* @@ -6921,6 +6987,15 @@ netrw pi_netrw.txt /*netrw* netrw-% pi_netrw.txt /*netrw-%* netrw-- pi_netrw.txt /*netrw--* +netrw-:Explore pi_netrw.txt /*netrw-:Explore* +netrw-:Hexplore pi_netrw.txt /*netrw-:Hexplore* +netrw-:Lexplore pi_netrw.txt /*netrw-:Lexplore* +netrw-:MF pi_netrw.txt /*netrw-:MF* +netrw-:MT pi_netrw.txt /*netrw-:MT* +netrw-:Rexplore pi_netrw.txt /*netrw-:Rexplore* +netrw-:Sexplore pi_netrw.txt /*netrw-:Sexplore* +netrw-:Texplore pi_netrw.txt /*netrw-:Texplore* +netrw-:Vexplore pi_netrw.txt /*netrw-:Vexplore* netrw-C pi_netrw.txt /*netrw-C* netrw-D pi_netrw.txt /*netrw-D* netrw-O pi_netrw.txt /*netrw-O* @@ -6978,6 +7053,7 @@ netrw-getftype pi_netrw.txt /*netrw-getftype* netrw-gf pi_netrw.txt /*netrw-gf* netrw-gh pi_netrw.txt /*netrw-gh* +netrw-gitignore pi_netrw.txt /*netrw-gitignore* netrw-gp pi_netrw.txt /*netrw-gp* netrw-gx pi_netrw.txt /*netrw-gx* netrw-handler pi_netrw.txt /*netrw-handler* @@ -6992,6 +7068,7 @@ netrw-internal-variables pi_netrw.txt /*netrw-internal-variables* netrw-intro-browse pi_netrw.txt /*netrw-intro-browse* netrw-leftmouse pi_netrw.txt /*netrw-leftmouse* +netrw-lexplore pi_netrw.txt /*netrw-lexplore* netrw-list pi_netrw.txt /*netrw-list* netrw-listbookmark pi_netrw.txt /*netrw-listbookmark* netrw-listhack pi_netrw.txt /*netrw-listhack* @@ -7022,6 +7099,7 @@ netrw-nexplore pi_netrw.txt /*netrw-nexplore* netrw-noload pi_netrw.txt /*netrw-noload* netrw-nread pi_netrw.txt /*netrw-nread* +netrw-ntree pi_netrw.txt /*netrw-ntree* netrw-nwrite pi_netrw.txt /*netrw-nwrite* netrw-o pi_netrw.txt /*netrw-o* netrw-options pi_netrw.txt /*netrw-options* @@ -7033,6 +7111,7 @@ netrw-p13 pi_netrw.txt /*netrw-p13* netrw-p14 pi_netrw.txt /*netrw-p14* netrw-p15 pi_netrw.txt /*netrw-p15* +netrw-p16 pi_netrw.txt /*netrw-p16* netrw-p2 pi_netrw.txt /*netrw-p2* netrw-p3 pi_netrw.txt /*netrw-p3* netrw-p4 pi_netrw.txt /*netrw-p4* @@ -7374,6 +7453,7 @@ profiling repeat.txt /*profiling* profiling-variable eval.txt /*profiling-variable* progname-variable eval.txt /*progname-variable* +progpath-variable eval.txt /*progpath-variable* progress.vim syntax.txt /*progress.vim* pronounce intro.txt /*pronounce* psql ft_sql.txt /*psql* @@ -7577,6 +7657,7 @@ s/\3 change.txt /*s\/\\3* s/\9 change.txt /*s\/\\9* s/\ change.txt /*s\/\\* +s/\= change.txt /*s\/\\=* s/\E change.txt /*s\/\\E* s/\L change.txt /*s\/\\L* s/\U change.txt /*s\/\\U* @@ -7746,6 +7827,7 @@ spell-FOL spell.txt /*spell-FOL* spell-FORBIDDENWORD spell.txt /*spell-FORBIDDENWORD* spell-HOME spell.txt /*spell-HOME* +spell-IGNOREEXTRA spell.txt /*spell-IGNOREEXTRA* spell-KEEPCASE spell.txt /*spell-KEEPCASE* spell-KEY spell.txt /*spell-KEY* spell-LANG spell.txt /*spell-LANG* @@ -7787,6 +7869,7 @@ spell-affix-mbyte spell.txt /*spell-affix-mbyte* spell-affix-not-supported spell.txt /*spell-affix-not-supported* spell-affix-vim spell.txt /*spell-affix-vim* +spell-cjk spell.txt /*spell-cjk* spell-compound spell.txt /*spell-compound* spell-dic-format spell.txt /*spell-dic-format* spell-double-scoring spell.txt /*spell-double-scoring* @@ -7872,6 +7955,7 @@ strdisplaywidth() eval.txt /*strdisplaywidth()* strftime() eval.txt /*strftime()* stridx() eval.txt /*stridx()* +string eval.txt /*string* string() eval.txt /*string()* string-functions usr_41.txt /*string-functions* string-match eval.txt /*string-match* @@ -7936,6 +8020,7 @@ system() eval.txt /*system()* system-functions usr_41.txt /*system-functions* system-vimrc starting.txt /*system-vimrc* +systemlist() eval.txt /*systemlist()* s~ change.txt /*s~* t motion.txt /*t* t: eval.txt /*t:* @@ -8220,6 +8305,7 @@ tex-slow syntax.txt /*tex-slow* tex-stopzone syntax.txt /*tex-stopzone* tex-style syntax.txt /*tex-style* +tex-supersub syntax.txt /*tex-supersub* tex-sync syntax.txt /*tex-sync* tex-verb syntax.txt /*tex-verb* tex.vim syntax.txt /*tex.vim* @@ -8280,6 +8366,7 @@ undofile() eval.txt /*undofile()* undotree() eval.txt /*undotree()* unicode mbyte.txt /*unicode* +uniq() eval.txt /*uniq()* unix os_unix.txt /*unix* unlisted-buffer windows.txt /*unlisted-buffer* up-down-motions motion.txt /*up-down-motions* @@ -8364,6 +8451,7 @@ v:foldend eval.txt /*v:foldend* v:foldlevel eval.txt /*v:foldlevel* v:foldstart eval.txt /*v:foldstart* +v:hlsearch eval.txt /*v:hlsearch* v:insertmode eval.txt /*v:insertmode* v:key eval.txt /*v:key* v:lang eval.txt /*v:lang* @@ -8377,6 +8465,7 @@ v:prevcount eval.txt /*v:prevcount* v:profiling eval.txt /*v:profiling* v:progname eval.txt /*v:progname* +v:progpath eval.txt /*v:progpath* v:register eval.txt /*v:register* v:scrollstart eval.txt /*v:scrollstart* v:searchforward eval.txt /*v:searchforward* diff -Naur vim74.orig/runtime/doc/tagsrch.txt vim74/runtime/doc/tagsrch.txt --- vim74.orig/runtime/doc/tagsrch.txt 2013-08-10 11:25:02.000000000 +0000 +++ vim74/runtime/doc/tagsrch.txt 2014-09-27 01:00:29.757177904 +0000 @@ -1,4 +1,4 @@ -*tagsrch.txt* For Vim version 7.4. Last change: 2013 Jul 28 +*tagsrch.txt* For Vim version 7.4. Last change: 2013 Oct 01 VIM REFERENCE MANUAL by Bram Moolenaar @@ -771,11 +771,11 @@ *:dli* *:dlist* :[range]dli[st][!] [/]string[/] - Like "[D" and "]D", but search in [range] lines + Like `[D` and `]D`, but search in [range] lines (default: whole file). See |:search-args| for [/] and [!]. {not in Vi} - Note that ":dl" works like ":delete" with the "l" - register. + Note that `:dl` works like `:delete` with the "l" + flag, not `:dlist`. *[_CTRL-D* [ CTRL-D Jump to the first macro definition that contains the diff -Naur vim74.orig/runtime/doc/term.txt vim74/runtime/doc/term.txt --- vim74.orig/runtime/doc/term.txt 2013-08-10 11:25:02.000000000 +0000 +++ vim74/runtime/doc/term.txt 2014-09-27 01:00:29.760511229 +0000 @@ -1,4 +1,4 @@ -*term.txt* For Vim version 7.4. Last change: 2013 Mar 13 +*term.txt* For Vim version 7.4. Last change: 2014 May 13 VIM REFERENCE MANUAL by Bram Moolenaar @@ -666,8 +666,8 @@ *xterm-copy-paste* NOTE: In some (older) xterms, it's not possible to move the cursor past column -95. This is an xterm problem, not Vim's. Get a newer xterm |color-xterm|. -Now the limit is 223 columns. +95 or 223. This is an xterm problem, not Vim's. Get a newer xterm +|color-xterm|. Also see |'ttymouse'|. Copy/paste in xterm with (current mode NOT included in 'mouse'): 1. Press left mouse button on first letter of text, move mouse pointer to last diff -Naur vim74.orig/runtime/doc/todo.txt vim74/runtime/doc/todo.txt --- vim74.orig/runtime/doc/todo.txt 2013-08-10 11:25:02.000000000 +0000 +++ vim74/runtime/doc/todo.txt 2014-09-27 01:00:29.783844504 +0000 @@ -1,4 +1,4 @@ -*todo.txt* For Vim version 7.4. Last change: 2013 Aug 10 +*todo.txt* For Vim version 7.4. Last change: 2014 Sep 19 VIM REFERENCE MANUAL by Bram Moolenaar @@ -34,38 +34,295 @@ *known-bugs* -------------------- Known bugs and current work ----------------------- +Regexp problems: +- Bug with pattern: '\vblock (\d+)\.\n.*\d+%(\1)@ and \?. (Brett Stahlman, 2013 Dec 21) Remark from Marcin Szamotulski + Remark from Brett 2014 Jan 6 and 7. +- Bug when using \>. (Ramel, 2014 Feb 2) (Aaron Bohannon, 2014 Feb 13) +- NFA regexp doesn't handle \%\)\@<=.*\%(<\/\(\w\+\)>\)\@=" matching text inside HTML tags. + +Still using freed memory after using setloclist(). (lcd, 2014 Jul 23) +More info Jul 24. Not clear why. + +Patch to make getregtype() return the right size for non-linux systems. +(Yasuhiro Matsumoto, 2014 Jul 8) +Breaks test_eval. Inefficient, can we only compute y_width when needed? + +Problem that a previous silent ":throw" causes a following try/catch not to +work. (ZyX, 2013 Sep 28) + +Patch to avoid problems with encoding conversion with diff.vim. +(Yasuhiro Matsumoto, 2014 Sep 1. +Depends on current language, language of file can be different. + +Patch for C/C++ syntax string handling. (Brian Bi, 2014 Sep 13) + +When using a visual selection of multiple words and doing CTRL-W_] it jumps to +the tag matching the word under the cursor, not the selected text. +(Patrick hemmer) +Patch by Christian, 2014 Aug 8. + +Completion for :buf does not use 'wildignorecase'. (Akshay H, 2014 May 31) + +'backupcopy' should be global-local, so that some files can be written in a +different way. Patch by Christian, 2014 Sep 17. + +Patch to handle list with some items locked. (ZyX, 2014 Aug 17) +Prefer the second solution. + +Issue 252. Patch by Christian, 2014 Aug 26. + +":cd C:\Windows\System32\drivers\etc*" does not work, even though the +directory exists. (Sergio Gallelli, 2013 Dec 29) + +Patch by Marcin Szamotulski to add count to :close (2014 Aug 10, update Aug +14, Aug 30) + Make ":1close" close the first window. + Make ":+1close" close the next window. + Make ":-1close" close the previous window. +Doesn't look right, asked for updates. + +Patch to add a special key name for K_CURSORHOLD. (Hirohito Higashi, 2014 Aug +10) + +The entries added by matchaddpos() are returned by getmatches() but can't be +set with setmatches(). (lcd47, 2014 Jun 29) + +Problem using ":try" inside ":execute". (ZyX, 2013 Sep 15) + Python: ":py raw_input('prompt')" doesn't work. (Manu Hack) -Patch to add "acl" and "xpm" as a feature. (Ken Takata, 2013 Jul 8) +Value returned by virtcol() changes depending on how lines wrap. This is +inconsistent with the documentation. + +MS-Windows: Crash opening very long file name starting with "\\". +(Christian Brock, 2012 Jun 29) + +ml_updatechunk() is slow when retrying for another encoding. (John Little, +2014 Sep 11) + +Syntax highlighting slow (hangs) in SASS file. (Niek Bosch, 2013 Aug 21) + +Patch to allow for a different icon on MS-Windows. (Yasuhiro Matsumoto, 2014 +Sep 7). + +Adding "~" to 'cdpath' doesn't work for completion? (Davido, 2013 Aug 19) + +Patch to make closed folds line up. (Charles Campbell, 2014 Sep 12) + +"hi link" does not respect groups with GUI settings only. (Mark Lodato, 2014 +Jun 8) + +No error for missing endwhile. (ZyX, 2014 Mar 20) + +start_global_changes() plus end_global_changes() causes problem for +clip_unnamed_plus. (Jason Pleau, 2014 Sep 12) + +Patch to add :arglocal and :arglists. (Marcin Szamotulski, 2014 Aug 6) + +PHP syntax is extremely slow. (Anhad Jai Singh, 2014 Jan 19) + +Spell files use a latin single quote. Unicode also has another single quote: +0x2019. (Ron Aaron, 2014 Apr 4) +New OpenOffice spell files support this with ICONV. But they are not +compatible with Vim spell files. The old files can no longer be downloaded. + +Win32: patch to use 64 bit stat() if possible. (Ken Takata, 2014 May 12) +More tests May 14. Update May 29. Update Aug 10. + +The garbage collector may use too much stack. Make set_ref_in_item() +iterative instead of recursive. Test program by Marc Weber (2013 Dec 10) +Patch by Ben Fritz, 2014 Jun 22. +Related: Vim hangs when freeing a lot of objects. Patch by Yasuhiro +Matsumoto, 2014 Aug 26. + +Idea: For a window in the middle (has window above and below it), use +right-mouse-drag on the status line to move a window up/down without changing +its height? It's like dragging the status bar above it at the same time. + +Can we make ":unlet $VAR" use unsetenv() to delete the env var? +What for systems that don't have unsetenv()? + +This does not give an error: (Andre Sihera, 2014 Mar 21) + vim -u NONE 1 2 3 -c 'bufdo if 1 | echo 1' +This neither: (ZyX) + vim -u NONE 1 2 3 -c 'bufdo while 1 | echo 1' + +'viewdir' default on MS-Windows is not a good choice, it's a system directory. +Change 'viewdir' to "$HOME/vimfiles/view" and use 'viewdiralt' to also read +from? + +Problem with upwards search on Windows (works OK on Linux). (Brett Stahlman, +2014 Jun 8) + +Include a plugin manager with Vim? Neobundle seems to be the best currently. +Long message about this from ZyX, 2014 Mar 23. And following replies. +Also see http://vim-wiki.mawercer.de/wiki/topic/vim%20plugin%20managment.html +User view: +- Support multiple sources, basically any http:// URL. Be able to look into + the files before deciding to install. +- Be able to try out a plugin and remove it again with (almost) no traces. +- Each plugin needs a "manifest" file that has the version, dependencies + (including Vim version and features), conflicts, list of files, etc. + Updater uses that to decide what/how to update. + Dependencies can use a URL for specific versions, or short name for scripts + on vim.org. +- Once a plugin is installed it remembers where it came from, updater checks + there. Can manually update when really needed. +- Must be possible to install for one user. Also system wide? +- Can edit plugin config with Vim. Can temporarily disable a plugin. +- Run the update manually, find latest version and install. +- Be able to download without special tools, must work for 95% of users. +Implementation: +- Avoid the 'runtimepath' getting long. Need some other way to keep each + plugin separate. +- When installing or updating, first figure out what needs to be done. This + may involve recursively fetching manifest files for dependencies. Then show + the user what's going to change and ask for OK. +- Scripts on Vim.org must be able to consist of several files. Is zip format + sufficient? Upload the manifest? Or refer to a site that has the manifest? +- Best is to fetch individual files or use a Vimball. Reduces dependency on + tools that might be missing and allows inspection of the files before + installing. +Out of scope: +- Overview of plugins, ratings, comments, etc. That's another world. +- Development work on plugins (although diff with distributed version would be + useful). + +Setting the spell file in a session only reads the local additions, not the +normal spell file. (Enno Nagel, 2014 Mar 29) + +CTRL-] in Visual mode uses the selected text as a tag. This does not work +when preceded with CTRL-W. (Patrick Hemmer, 2014 Jun 28) + +When typing the first character of a command, e.g. "f", then using a menu, the +menu item doesn't work. Clear typeahead when using a menu? + +Editing an ascii file as ucs-2 or ucs-4 causes display errors. +(ZyX, 2014 Mar 30) + +":Next 1 some-arg" does not complain about trailing argument. Also for +various other commands. (ZyX, 2014 Mar 30) + +patch to skip sort if no line matches the expression. +(Christian Brabandt, 2014 Jun 25) + +Patch to add sortuniq(). (Cade Forester, 2014 Mar 19) +Or add uniq() instead? Patch by lcd47, but it has problems. + +Patch to support sorting on floating point number. (Alex Jakushev, 2010 Oct +30) + +Patch to support expression argument to sort() instead of a function name. +Yasuhiro Matsumoto, 2013 May 31. +Or should we add a more general mechanism, like a lambda() function? +Patch by Yasuhiro Matsumoto, 2014 Sep 16. + +VMS: Select() doesn't work properly, typing ESC may hang Vim. Use sys$qiow +instead. (Samuel Ferencik, 2013 Sep 28) + +Patch for XDG base directory support. (Jean François Bignolles, 2014 Mar 4) +Remark on the docs. Should not be a compile time feature. But then what? + +Completion of ":e" is ":earlier", should be ":edit". Complete to the matching +command instead of doing this alphabetically. (Mikel Jorgensen) + +Patch to add v:completed_item. (Shougo Matsu, 2013 Nov 29). + +Patch to get MSVC version in a nicer way. (Ken Takata, 2014 Jul 24) + +Patch to make test 100 work on MS-Windows. (Taro Muraoka, 2013 Dec 12) + +Patch to define macros for hardcoded values. (Elias Diem, 2013 Dec 14) -Patch to make has() check for Vim version and patch at the same time. -(Marc Weber, 2013 Jun 7) +Perl: support for Activestate perl 5.18: Issue 170. Several syntax file match "^\s*" which may get underlined if that's in the highlight group. Add a "\zs" after it? +Patch to fix temp directories for Windows, so that it works without tweaking. +Issue 28. + Go through more coverity reports. -"gUgn" cannot be repeated, while "dgn" can. +Patch to add ":undorecover", get as much text out of the undo file as +possible. (Christian Brabandt, 2014 Mar 12, update Aug 22) + +Include Haiku port? (Adrien Destugues, Siarzhuk Zharski, 2013 Oct 24) + +Updated spec ftplugin. (MatÄ›j Cepl, 2013 Oct 16) + +Patch to right-align signs. (James Kolb (email james), 2013 Sep 23) + +Patch to handle integer overflow. (Aaron Burrow, 2013 Dec 12) + +With "$" in 'cpoptions' the popup menu isn't fully drawn. (Matti Niemenmaa, +2013 Sep 5) + +Patch to add "ntab" item in 'listchars' to repeat first character. (Nathaniel +Braun, pragm, 2013 Oct 13) A better solution 2014 Mar 5. -Several Win32 functions are not using Unicode. -Patches to fix this. (Ken Takata, 2013 Aug 9) +Undo message is not always properly displayed. Patch by Ken Takata, 2013 oct +3. Doesn't work properly according to Yukihiro Nakadaira. /[b-a] gives error E16, should probably be E769. -Discussion about canonicalization of Hebrew. (Ron Aaron, 2011 April 10) +7 Windows XP: When using "ClearType" for text smoothing, a column of yellow + pixels remains when typing spaces in front of a "D" ('guifont' set to + "lucida_console:h8"). +Patch by Thomas Tuegel, also for GTK, 2013 Nov 24 + +:help gives example for z?, but it does not work. m? and t? do work. + +Python: Extended funcrefs: use func_T* structure in place of char_u* function +names. +(ZyX, 2013 Jul 15, update Sep 22, 24, 28; Update 2013 Dec 15, 2014 Jan 6) +Also fixes Bug: E685 error for func_unref(). (ZyX, 2010 Aug 5) -Patch to make external commands work with multi-byte characters on Win32 when -'encoding' differs from the active codepage. (Yasuhiro Matsumoto, 2013 Aug 5) +Patch to add funcref to Lua. (Luis Carvalho, 2013 Sep 4) +With tests: Sep 5. + +Patch to fix that on suckless Terminal mousewheel up does not work. +(Ralph Eastwood, 2013 Nov 25) + +Discussion about canonicalization of Hebrew. (Ron Aaron, 2011 April 10) Checking runtime scripts: Thilo Six, 2012 Jun 6. +When evaluating expression in backticks, autoload doesn't work. +(Andy Wokula, 2013 Dec 14) + +Using ifoobar can slow down Vim. Patch by Christian Brabandt, 2013 +Dec 13. + Fold can't be opened after ":move". (Ein Brown) Patch from Christian Brabandt doesn't fix it completely. +Patch from Christian Brabandt to preserve upper case marks when wiping out a +buffer. (2013 Dec 9) + +Patch for drag&drop reordering of GUI tab pages reordering. +(Ken Takata, 2013 Nov 22, second one, also by Masamichi Abe) + +":sign-jump" uses first window in buffer instead of current window. +Patch by James McCoy, 2013 Nov 22. + GTK: problem with 'L' in 'guioptions' changing the window width. (Aaron Cornelius, 2012 Feb 6) +Patch to add option that tells whether small deletes go into the numbered +registers. (Aryeh Leib Taurog, 2013 Nov 18) + Javascript file where indent gets stuck on: GalaxyMaster, 2012 May 3. The BufUnload event is triggered when re-using the empty buffer. @@ -76,6 +333,10 @@ - The word that was selected (empty if abandoned complete) - Type of completion: tag, omnifunc, user func. +Patch to allow more types in remote_expr(). (Lech Lorens, 2014 Jan 5) +Doesn't work for string in list. Other way to pass all types of variables +reliably? + Using ":call foo#d.f()" doesn't autoload the "foo.vim" file. That is, calling a dictionary function on an autoloaded dict. Works OK for echo, just not for ":call" and ":call call()". (Ted, 2011 Mar @@ -83,17 +344,19 @@ Patch by Christian Brabandt, 2013 Mar 23. Not 100% sure this is the right solution. -Win32: When a directory name contains an exclamation mark, completion doesn't -complete the contents of the directory. No escaping for the "!"? (Jan -Stocker, 2012 Jan 5) - -Patch to support expression argument to sort() instead of a function name. -Yasuhiro Matsumoto, 2013 May 31. -Or should we add a more general mechanism, like lambda functions? - Problem caused by patch 7.3.638: window->open does not update window correctly. Issue 91. +Patch to add {lhs} to :mapclear: clear all maps starting with {lhs}. +(Christian Brabandt, 2013 Dec 9) + +Exception caused by argument of return is not caught by try/catch. +(David Barnett, 2013 Nov 19) + +8 'backupdir' and 'directory' should use $TMPDIR, $TMP and/or $TEMP when + defined. +Issue 28. + Patch to fix that 'cedit' is recognized after :normal. (Christian Brabandt, 2013 Mar 19, later message) @@ -108,6 +371,8 @@ Bug with 'cursorline' in diff mode. Line being scrolled into view gets highlighted as the cursor line. (Alessandro Ivaldi, 2013 Jun 4) +Two highlighting bugs. (ZyX, 2013 Aug 18) + Patch to add the bufferlist() function. (Yegappan Lakshmanan, 2013 May 5) May 17: with winlist() and tabpagelist(). May 19: with local variables. @@ -119,10 +384,13 @@ Patch from Christian Brabandt to make the "buffer" argument for ":sign place" optional. (2013 Jul 12) +Dialog is too big on Linux too. (David Fishburn, 2013 Sep 2) + Patch to allow setting w:quickfix_title via setqflist() and setloclist() functions. (Christian Brabandt, 2013 May 8, update May 21) Patch to add getlocstack() / setlocstack(). (Christian Brabandt, 2013 May 14) Second one. Update May 22. +Update by Daniel Hahler, 2014 Jul 4, Aug 14. Patch to make fold updates much faster. (Christian Brabandt, 2012 Dec) @@ -137,9 +405,6 @@ Bug: findfile("any", "file:///tmp;") does not work. -v:register is not directly reset to " after a delete command that specifies a -register. It is reset after the next command. (Steve Vermeulen, 2013 Mar 16) - 'ff' is wrong for one-line file without EOL. (Issue 77) Patch to set antialiasing style on Windows. (Ondrej Balaz, 2013 Mar 14) @@ -149,11 +414,19 @@ process that is running. It might actually be some other program, e.g. after a reboot. -MS-Windows: Crash opening very long file name starting with "\\". -(Christian Brock, 2012 Jun 29) +Patch to have text objects defined by arbitrary single characters. (Daniel +Thau, 2013 Nov 20, 2014 Jan 29, 2014 Jan 31) +Ben Fritz: problem with 'selection' set to "exclusive". +Updated to current Vim, not quite right yet. (Ben Fritz, 2014 Mar 27) + +Patch to select the next or previous text object if there isn't one under the +cursor. (Daniel Thau, 2013 Nov 20) patch to add "combine" flag to syntax commands. (so8res, 2012 Dec 6) +Bug caused by patch 7.3.1288? Issue 183. +I can't reproduce it. + Syntax update problem in one buffer opened in two windows, bottom window is not correctly updated. (Paul Harris, 2012 Feb 27) @@ -167,8 +440,10 @@ Patch to add functions for signs. (Christian Brabandt, 2013 Jan 27) -Patch to use directX to draw text on Windows. Adds the 'renderoptions' -option. (Taro Muraoka, 2013 Jan 25, update 2013 Apr 3, May 14) +Do we need some way (option) to show the sign column even when there are no +signs? Patch by Christian Brabandt, 2013 Aug 22. + +Patch to remove flicker from popup menu. (Yasuhiro Matsumoto, 2013 Aug 15) Patch to add 'completeselect' option. Specifies how to select a candidate in insert completion. (Shougo, 2013 May 29) @@ -182,9 +457,6 @@ Win32: The Python interface only works with one version of Python, selected at compile time. Can this be made to work with version 2.1 and 2.2 dynamically? -Python: Extended funcrefs: use func_T* structure in place of char_u* function -names. (ZyX, 2013 Jul 15 and later) - Python: Be able to define a Python function that can be called directly from Vim script. Requires converting the arguments and return value, like with vim.bindeval(). @@ -205,9 +477,6 @@ Add a check for b:no_match_paren in Highlight_matching_Pair() (Marcin Szamotulski, 2012 Nov 8) -Crash in autocmd that unloads buffers in a BufUnload event. (Andrew Pimlott, -2012 Aug 11) Disallow :new when BufUnload is being handled? - Issue 72: 'autochdir' causes problems for :vimgrep. Session file creation: 'autochdir' causes trouble. Keep it off until after @@ -240,10 +509,6 @@ Help for 'b:undo_indent'. (Thilo Six, 2012 May 28) Also question if examples are correct. -It should be possible to make globpath() return a list instead of a string, -like with glob(). (Greg Novack, 2012 Nov 2) -Patch by Adnan Zafar, 2013 Jul 15. - The input map for CTRL-O in mswin.vim causes problems after CTRL-X CTRL-O. Suggestion for another map. (Philip Mat, 2012 Jun 18) But use "gi" instead of "a". Or use CTRL-\ CTRL-O. @@ -251,13 +516,12 @@ Patch to support user name completion on MS-Windows. (Yasuhiro Matsumoto, 2012 Aug 16) -Have an option for spell checking to not mark any Chinese, Japanese or other -double-width characters as error. Or perhaps all characters above 256. -(Bill Sun) Helps a lot for mixed Asian and latin text. - When there are no command line arguments ":next" and ":argu" give E163, which is confusing. Should say "the argument list is empty". +xterm supports escape sequences to mark a paste operation. Need to be +enabled. (Bruno Sutic, 2014 Jul 11) How to know the terminal supports this? + URXVT: - will get stuck if byte sequence does not contain the expected semicolon. - Use urxvt mouse support also in xterm. Explanations: @@ -272,27 +536,23 @@ Patch to list user digraphs. (Christian Brabandt, 2012 Apr 14) +Patch to add digraph() function. (Christian Brabandt, 2013 Aug 22, update Aug +24) + Patch for input method status. (Hirohito Higashi, 2012 Apr 18) +Update Vim app icon (for Gnome). (Jakub Steiner, 2013 Dec 6) + Patch to use .png icons for the toolbar on MS-Windows. (Martin Gieseking, 2013 Apr 18) Patch for has('unnamedplus') docs. (Tony Mechelynck, 2011 Sep 27) And one for gui_x11.txt. -- Patch for 'breakindent' option: repeat indent for wrapped line. (Vaclav - Smilauer, 2004 Sep 13, fix Oct 31, update 2007 May 30) - Version for latest MacVim: Tobia Conforto, 2009 Nov 23 - More recent version: https://retracile.net/wiki/VimBreakIndent - Posted to vim-dev by Taylor Hedberg, 2011 Nov 25 - Update by Taylor Hedberg, 2013 May 30. - ":cd" doesn't work when current directory path contains "**". finddir() has the same problem. (Yukihiro Nakadaira, 2012 Jan 10) Requires a rewrite of the file_file_in_path code. -Problem with l: dictionary being locked in a function. (ZyX, 2011 Jul 21) - Should use has("browsefilter") in ftplugins. Requires patch 7.3.593. Update for vim2html.pl. (Tyru, 2013 Feb 22) @@ -374,8 +634,6 @@ Setting $HOME on MS-Windows is not very well documented. Suggestion by Ben Fritz (2011 Oct 27). -Bug: E685 error for func_unref(). (ZyX, 2010 Aug 5) - Bug: Windows 7 64 bit system freezes when 'clipboard' set to "unnamed" and doing ":g/test/d". Putting every delete on the clipboard? (Robert Chan, 2011 Jun 17) @@ -396,10 +654,11 @@ Changes to manpage plugin. (Elias Toivanen, 2011 Jul 25) Patch to make "z=" work when 'spell' is off. Does this have nasty side -effects? (Christian Brabandt, 2012 Aug 5) +effects? (Christian Brabandt, 2012 Aug 5, Update 2013 Aug 12) Would also need to do this for spellbadword() and spellsuggest(). -Patch for variable tabstops. +Patch for variable tabstops. On github (Christian Brabandt, 2014 May 15) +Update Aug 16 (email). On 64 bit MS-Windows "long" is only 32 bits, but we sometimes need to store a 64 bits value. Change all number options to use nropt_T and define it to the @@ -419,6 +678,8 @@ When setqflist() uses a filename that triggers a BufReadCmd autocommand Vim doesn't jump to the correct line with :cfirst. (ZyX, 2011 Sep 18) +Behavior of i" and a" text objects isn't logical. (Ben Fritz, 2013 Nov 19) + 7 Make "ga" show the digraph for a character, if it exists. Patch from Christian Brabandt, 2011 Aug 19. @@ -439,9 +700,6 @@ "0g@$" puts '] on last byte of multi-byte. (ZyX, 2011 Jan 22) -Patch to support sorting on floating point number. (Alex Jakushev, 2010 Oct -30) - Patch to addd TextDeletePost and TextYankPost events. (Philippe Vaucher, 2011 May 24) Update May 26. @@ -456,6 +714,9 @@ number, but it is in the sign column. Doesn't look right. (ZyX 2011 Jun 5) Patch by Christian Brabandt, 2011 Jun 5. Introduces new problems. +Add jump() function. (Marcin Szamotulski, 2013 Aug 29) +Is this needed? CTRL-O and CTRL-I do the same, just more difficult to use. + 8 Add a command to jump to the next character highlighted with "Error". Patch by Christian Brabandt, uses ]e [e ]t and [t. 2011 Aug 9. @@ -524,9 +785,6 @@ Patch to add FoldedLineNr highlighting: different highlighting for the line number of a closed fold. (eXerigumo Clanjor, 2013 Jul 15) -Does not work with NFA regexp engine: -- \%u, \%x, \%o, \%d followed by a composing character - Regexp engine performance: - Profiling: ./vim -u NONE -s ~/vim/test/ruby.vim @@ -556,7 +814,7 @@ the system encoding (usually utf-8). Patch to add GUI colors to the terminal, when it supports it. (ZyX, 2013 Jan -26) +26, update 2013 Dec 14) Problem producing tags file when hebrew.frx is present. It has a BOM. Results in E670. (Tony Mechelynck, 2010 May 2) @@ -571,11 +829,6 @@ file names unique, also support this for 'backupdir'. (Mikolaj Machowski) Patch by Christian Brabandt, 2010 Oct 21. -getpos()/setpos() don't include curswant. getpos() could return a fifth -element. setpos() could accept an optional fifth element. -Patch by Christian Brabandt, 2010 Sep 6. Check that new argument is optional -and that it's documented. - With "tw=55 fo+=a" typing space before ) doesn't work well. (Scott Mcdermott, 2010 Oct 24) @@ -595,9 +848,6 @@ checked to be in a comment. Implement FM_SKIPCOMM flag of findmatchlimit(). Issue 46. -When 'paste' is changed with 'pastetoggle', the ruler doesn't reflect this -right away. (Samuel Ferencik, 2010 Dec 7) - Mac with X11: clipboard doesn't work properly. (Raf, 2010 Aug 16) Using CompilerSet doesn't record where an option was set from. E.g., in the @@ -620,8 +870,6 @@ When 'lines' is 25 and 'scrolloff' is 12, "j" scrolls zero or two lines instead of one. (Constantin Pan, 2010 Sep 10) -Crash in setqflist(). (Benoit Mortgat, 2010 Nov 18) - Gui menu edit/paste in block mode insert only inserts in one line (Bjorn Winckler, 2011 May 11) Requires a map mode for Insert mode started from blockwise Visual mode. @@ -629,10 +877,6 @@ Writing nested List and Dict in viminfo gives error message and can't be read back. (Yukihiro Nakadaira, 2010 Nov 13) -Can 'undolevels' be a buffer-local option? Helps for making big changes in -one file only, set 'ul' to -1 only for that buffer. -Patch by Christian Brabandt, 2010 Dec 17. Needs test. - Problem with cursor in the wrong column. (SungHyun Nam, 2010 Mar 11) Additional info by Dominique Pelle. (also on 2010 Apr 10) @@ -759,6 +1003,7 @@ Patch to add farsi handling to arabic.c (Ali Gholami Rudi, 2009 May 2) Added test, updates, June 23. +Updated for 7.4: http://litcave.rudi.ir/farsi_vim.diff Patch to add "focusonly" to 'scrollopt', so that scrollbind also applies in window that doesn't have focus. (Jonathon Mah, 2009 Jan 12) @@ -838,8 +1083,6 @@ Win32 GUI: last message from startup doesn't show up when there is an echoerr command. (Cyril Slobin, 2009 Mar 13) -Win32: use different args for SearchPath()? (Yasuhiro Matsumoto, 2009 Jan 30) - Win32: completion of file name ":e c:\!test" results in ":e c:\\!test", which does not work. (Nieko Maatjes, 2009 Jan 8, Ingo Karkat, 2009 Jan 22) @@ -856,7 +1099,12 @@ Using ~ works OK on 'a' with composing char, but not on 0x0418 with composing char 0x0301. (Tony Mechelynck, 2009 Mar 4) -A function on a dictionary is not profiled. (Zyx, 2010 Dec 25) +Searching for composing char works, but not when inside []. (ZyX, Benjamin R. +Haskell, 2010 Aug 24) + +This does not work yet: "a\(%C\)" (get composing characters into a submatch). + +A function on a dictionary is not profiled. (ZyX, 2010 Dec 25) Inconsistent: starting with $LANG set to es_ES.utf-8 gives Spanish messages, even though locale is not supported. But ":lang messages @@ -885,7 +1133,7 @@ Completion for ":buf" doesn't work properly on Win32 when 'shellslash' is off. (Henrik Ohman, 2009, Jan 29) -shellescape() depends on 'shellshash' for quoting. That doesn't work when +shellescape() depends on 'shellslash' for quoting. That doesn't work when 'shellslash' is set but using cmd.exe. (Ben Fritz) Use a different option or let it depend on whether 'shell' looks like a unix-like shell? @@ -918,8 +1166,6 @@ Add v:motion_force. (Kana Natsuno, 2008 Dec 6) Maybe call it v:motiontype. -Runtime files for Clojure. (Toralf Wittner, 2008 Jun 25) - MS-Windows: editing the first, empty buffer, 'ffs' set to "unix,dos", ":enew" doesn't set 'ff' to "unix". (Ben Fritz, 2008 Dec 5) Reusing the old buffer probably causes this. @@ -928,7 +1174,7 @@ 2009 Jan 16) Patch to support strikethrough next to bold and italic. (Christian Brabandt, -2013 Jul 30) +2013 Jul 30) Update from Ken Takata, 2013 Oct 12. Document that default font in Athena can be set with resources: XtDefaultFont: "9x15" @@ -942,6 +1188,7 @@ ":pedit %" with a BufReadPre autocommand causes the cursor to move to the first line. (Ingo Karkat, 2008 Jul 1) Ian Kelling is working on this. +Similar problem with ":e". (Marc Montu, 2014 Apr 22) Wildmenu not deleted: "gvim -u NONE", ":set nocp wildmenu cmdheight=3 laststatus=2", CTRL-D CTRL-H CTRL-H CTRL-H. (A.Politz, 2008 April 1) @@ -1085,9 +1332,6 @@ result in no matches. Convert chars to lower case? (Erik Wognsen, 2009 Apr 16) -Searching for composing char works, but not when inside []. (ZyX, Benjamin R. -Haskell, 2010 Aug 24) - Fail to edit file after failed register access. Error flag remains set? (Lech Lorens, 2010 Aug 30) @@ -1122,10 +1366,6 @@ C syntax: {} inside () causes following {} to be highlighted as error. (Michalis Giannakidis, 2006 Jun 1) -Can't easily close the help window, like ":pc" closes the preview window and -":ccl" closes the quickfix window. Add ":hclose". (Chris Gaal) -Patch for :helpclose, Christian Brabandt, 2010 Sep 6. - When 'diffopt' has "context:0" a single deleted line causes two folds to merge and mess up syncing. (Austin Jennings, 2008 Jan 31) @@ -1199,8 +1439,8 @@ Additional info: When using the |wildcards| ** globing, vim hangs indefinitely on lots of directories. The |file-searching| globing, like in ":set path=/**" does not hang as often as with globing with |wildcards|, like -in ":1find /**/file". This is for a files that unix "find" can find very -quick. Merging the 2 kinds of globing might make this an easier fix. (Ian +in ":1find /**/file". This is for files that unix "find" can find very +quickly. Merging the 2 kinds of globing might make this an easier fix. (Ian Kelling, 2008 July 4) When the file name has parenthesis, e.g., "foo (bar).txt", ":!ls '%'" has the @@ -1289,6 +1529,7 @@ Win64: Seek error in swap file for a very big file (3 Gbyte). Check storing pointer in long and seek offset in 64 bit var. +Patches from Ken Takata might help (2014 Apr 17) Win32: patch for fullscreen mode. (Liushaolin, 2008 April 17) @@ -1296,14 +1537,17 @@ Depends on 'shellslash', 'shellquote' and 'shellxquote', but shellescape() only takes 'shellslash' into account. -Pressing the 'pastetoggle' key doesn't update the statusline. (Jan Christoph -Ebersbach, 2008 Feb 1) - Menu item that does "xxd -r" doesn't work when 'fileencoding' is utf-16. Check for this and use iconv? (Edward L. Fox, 2007 Sep 12) -Does the conversion in the other direction work when 'filenecodings' is set +Does the conversion in the other direction work when 'fileencodings' is set properly? +Add a few features to xxd. (Vadim Vygonets, 2013 Nov 11) +Patches: 2013 Nov 19 +1: Add -e: little endian hexdump +2: Add -o: add offset to displayed position +3: Change displayed file position width to 8 chars + Cursor displayed in the wrong position when using 'numberwidth'. (James Vega, 2007 Jun 21) @@ -1459,6 +1703,9 @@ tree stops unexpectedly when using ":cd " and entering a directory that doesn't contain other directories. +Default for 'background' is wrong when using xterm with 256 colors. +Table with estimates from Matteo Cavalleri, 2014 Jan 10. + Setting 'background' resets the Normal background color: highlight Normal ctermbg=DarkGray set background=dark @@ -1647,6 +1894,10 @@ Patch to support horizontal scroll wheel in GTK. Untested. (Bjorn Winckler, 2010 Jun 30) +Add an option for a minimal text length before inserting a line break for +'textwidth'. Avoids very short lines when a very long word follows. +(Kartik Agaram) + At next release: - Build a huge version by default. @@ -1685,7 +1936,7 @@ - testdir/Make_dos_sh.mak for running tests with MingW. (Bill Mccarthy, 2008 Sep 13) - Patch for adding "space" item in 'listchars'. (Jérémie Roquet, 2009 Oct 29, - Docs patch Oct 30) + Docs patch Oct 30, update David Burgin (glts) 2013 Aug 24) - Replace ccomplete.vim by cppcomplete.vim from www.vim.org? script 1520 by Vissale Neang. (Martin Stubenschrott) Asked Vissale to make the scripts more friendly for the Vim distribution. @@ -1715,7 +1966,7 @@ How does this work? Missing comments. 8 Add a few more command names to the menus. Patch from Jiri Brezina (28 feb 2002). Will mess the translations... -7 ATTENTION dialog choices are more logical when "Delete it' appears +7 ATTENTION dialog choices are more logical when "Delete it" appears before "Quit". Patch by Robert Webb, 2004 May 3. - Include flipcase patch: ~/vim/patches/wall.flipcase2 ? Make it work for multi-byte characters. @@ -1864,8 +2115,6 @@ Win32 GUI known bugs: - Win32: tearoff menu window should have a scrollbar when it's taller than the screen. -8 non-ASCII font names don't work. Need to convert from 'encoding' and use - the wide functions. 8 On Windows 98 the unicows library is needed to support functions with UCS2 file names. Can we load unicows.dll dynamically? 8 The -P argument doesn't work very well with many MDI applications. @@ -1873,9 +2122,6 @@ Tutorial: http://win32assembly.online.fr/tut32.html 8 In eval.c, io.h is included when MSWIN32 is defined. Shouldn't this be WIN32? Or can including io.h be moved to vim.h? (Dan Sharp) -7 Windows XP: When using "ClearType" for text smoothing, a column of yellow - pixels remains when typing spaces in front of a "D" ('guifont' set to - "lucida_console:h8"). 6 Win32 GUI: With "-u NONE -U NONE" and doing "CTRL-W v" "CTRL-W o", the ":" of ":only" is highlighted like the cursor. (Lipelis) 8 When 'encoding' is "utf-8", should use 'guifont' for both normal and wide @@ -1887,9 +2133,6 @@ 8 Use another default for 'termencoding': the active codepage. Means that when 'encoding' is changed typing characters still works properly. Alternative: use the Unicode functions to obtain typed characters. -8 Win32: Multi-byte characters are not displayed, even though the same font - in Notepad can display them. (Srinath Avadhanula) Try with the - UTF-8-demo.txt page with Andale Mono. 7 The cursor color indicating IME mode doesn't work properly. (Shizhu Pan, 2004 May 9) 8 Win32: When clicking on the gvim title bar, which gives it focus, produces @@ -2272,8 +2515,6 @@ character. (Yasuhiro Matsumoto) It should return 1 when used on a tail byte, like for utf-8. Store second byte of double-byte in ScreenLines2[] (like for DBCS_JPNU) and put a zero in the second byte (like for UTF-8). -8 'backupdir' and 'directory' should use $TMPDIR, $TMP and/or $TEMP when - defined. 7 Inside a function with "perl < @@ -249,8 +249,9 @@ detect if an undo file is no longer synchronized with the file it was written for (with a hash of the file contents) and ignore it when the file was changed after the undo file was written, to prevent corruption. An undo file is also -ignored if its owner differs from the owner of the edited file. Set 'verbose' -to get a message about that when opening a file. +ignored if its owner differs from the owner of the edited file, except when +the owner of the undo file is the current user. Set 'verbose' to get a +message about that when opening a file. Undo files are normally saved in the same directory as the file. This can be changed with the 'undodir' option. diff -Naur vim74.orig/runtime/doc/usr_04.txt vim74/runtime/doc/usr_04.txt --- vim74.orig/runtime/doc/usr_04.txt 2013-08-10 11:25:03.000000000 +0000 +++ vim74/runtime/doc/usr_04.txt 2014-09-27 01:00:29.800511129 +0000 @@ -1,4 +1,4 @@ -*usr_04.txt* For Vim version 7.4. Last change: 2008 Sep 06 +*usr_04.txt* For Vim version 7.4. Last change: 2014 Aug 29 VIM USER MANUAL - by Bram Moolenaar @@ -186,7 +186,7 @@ /four find the first string "four" cwfive change the word to "five" n find the next "four" - . repeat the change to "five' + . repeat the change to "five" n find the next "four" . repeat the change etc. diff -Naur vim74.orig/runtime/doc/usr_08.txt vim74/runtime/doc/usr_08.txt --- vim74.orig/runtime/doc/usr_08.txt 2013-08-10 11:25:03.000000000 +0000 +++ vim74/runtime/doc/usr_08.txt 2014-09-27 01:00:29.813844429 +0000 @@ -1,4 +1,4 @@ -*usr_08.txt* For Vim version 7.4. Last change: 2006 Jul 18 +*usr_08.txt* For Vim version 7.4. Last change: 2014 Jul 06 VIM USER MANUAL - by Bram Moolenaar @@ -532,7 +532,7 @@ You now have two tab pages. The first one has a window for "thisfile" and the second one a window for "thatfile". It's like two pages that are on top of -eachother, with a tab sticking out of each page showing the file name. +each other, with a tab sticking out of each page showing the file name. Now use the mouse to click on "thisfile" in the top line. The result is diff -Naur vim74.orig/runtime/doc/usr_25.txt vim74/runtime/doc/usr_25.txt --- vim74.orig/runtime/doc/usr_25.txt 2013-08-10 11:25:05.000000000 +0000 +++ vim74/runtime/doc/usr_25.txt 2014-09-27 01:00:29.837177704 +0000 @@ -86,7 +86,7 @@ v4jgq -"v" to start Visual mode, "4j' to move to the end of the paragraph and then +"v" to start Visual mode, "4j" to move to the end of the paragraph and then the "gq" operator. The result is: 1 2 3 diff -Naur vim74.orig/runtime/doc/usr_30.txt vim74/runtime/doc/usr_30.txt --- vim74.orig/runtime/doc/usr_30.txt 2013-08-10 11:25:05.000000000 +0000 +++ vim74/runtime/doc/usr_30.txt 2014-09-27 01:00:29.850511004 +0000 @@ -128,7 +128,7 @@ You can include special Vim keywords in the command specification. The % character expands to the name of the current file. So if you execute the command: > - :set makeprg=make\ % + :set makeprg=make\ %:S When you are editing main.c, then ":make" executes the following command: > @@ -137,7 +137,7 @@ This is not too useful, so you will refine the command a little and use the :r (root) modifier: > - :set makeprg=make\ %:r.o + :set makeprg=make\ %:r:S.o Now the command executed is as follows: > diff -Naur vim74.orig/runtime/doc/usr_40.txt vim74/runtime/doc/usr_40.txt --- vim74.orig/runtime/doc/usr_40.txt 2013-08-10 11:25:05.000000000 +0000 +++ vim74/runtime/doc/usr_40.txt 2014-09-27 01:00:29.857177654 +0000 @@ -209,7 +209,7 @@ separates the two commands. This also means that a | character can't be used inside a map command. To include one, use (five characters). Example: > - :map :write !checkin % + :map :write !checkin %:S The same problem applies to the ":unmap" command, with the addition that you have to watch out for trailing white space. These two commands are different: diff -Naur vim74.orig/runtime/doc/usr_41.txt vim74/runtime/doc/usr_41.txt --- vim74.orig/runtime/doc/usr_41.txt 2013-08-10 11:25:05.000000000 +0000 +++ vim74/runtime/doc/usr_41.txt 2014-09-27 01:00:29.860510979 +0000 @@ -1,4 +1,4 @@ -*usr_41.txt* For Vim version 7.4. Last change: 2013 Feb 20 +*usr_41.txt* For Vim version 7.4. Last change: 2014 Aug 16 VIM USER MANUAL - by Bram Moolenaar @@ -595,13 +595,17 @@ matchlist() like matchstr() and also return submatches stridx() first index of a short string in a long string strridx() last index of a short string in a long string - strlen() length of a string + strlen() length of a string in bytes + strchars() length of a string in characters + strwidth() size of string when displayed + strdisplaywidth() size of string when displayed, deals with tabs substitute() substitute a pattern match with a string submatch() get a specific match in ":s" and substitute() strpart() get part of a string expand() expand special keywords iconv() convert text from one encoding to another byteidx() byte index of a character in a string + byteidxcomp() like byteidx() but count composing characters repeat() repeat a string multiple times eval() evaluate a string expression @@ -619,6 +623,7 @@ map() change each List item sort() sort a List reverse() reverse the order of a List + uniq() remove copies of repeated adjacent items split() split a String into a List join() join List items into a String range() return a List with a sequence of numbers @@ -656,6 +661,9 @@ ceil() round up floor() round down trunc() remove value after decimal point + fmod() remainder of division + exp() exponential + log() natural logarithm (logarithm to base e) log10() logarithm to base 10 pow() value of x to the exponent y sqrt() square root @@ -675,6 +683,7 @@ invert() bitwise invert or() bitwise OR xor() bitwise XOR + sha256() SHA-256 hash Variables: *var-functions* type() type of a variable @@ -697,11 +706,16 @@ wincol() window column number of the cursor winline() window line number of the cursor cursor() position the cursor at a line/column + screencol() get screen column of the cursor + screenrow() get screen row of the cursor + getcurpos() get position of the cursor getpos() get position of cursor, mark, etc. setpos() set position of cursor, mark, etc. byte2line() get line number at a specific byte count line2byte() byte count at a specific line diff_filler() get the number of filler lines above a line + screenattr() get attribute at a screen line/row + screenchar() get character code at a screen line/row Working with text in the current buffer: *text-functions* getline() get a line or list of lines from the buffer @@ -729,6 +743,7 @@ pathshorten() shorten directory names in a path simplify() simplify a path without changing its meaning executable() check if an executable program exists + exepath() full path of an executable program filereadable() check if a file can be read filewritable() check if a file can be written to getfperm() get the permissions of a file @@ -741,7 +756,8 @@ mkdir() create a new directory delete() delete a file rename() rename a file - system() get the result of a shell command + system() get the result of a shell command as a string + systemlist() get the result of a shell command as a list hostname() name of the system readfile() read a file into a List of lines writefile() write a List of lines into a file @@ -757,6 +773,7 @@ Buffers, windows and the argument list: argc() number of entries in the argument list argidx() current position in the argument list + arglistid() get id of the argument list argv() get one entry from the argument list bufexists() check if a buffer exists buflisted() check if a buffer exists and is listed @@ -776,6 +793,7 @@ getcmdpos() get position of the cursor in the command line setcmdpos() set position of the cursor in the command line getcmdtype() return the current command-line type + getcmdwintype() return the current command-line window type Quickfix and location lists: *quickfix-functions* getqflist() list of quickfix errors @@ -810,6 +828,7 @@ synconcealed() get info about concealing diff_hlID() get highlight ID for diff mode at a position matchadd() define a pattern to highlight (a "match") + matchaddpos() define a list of positions to highlight matcharg() get info about |:match| arguments matchdelete() delete a match defined by |matchadd()| or a |:match| command @@ -883,14 +902,22 @@ libcall() call a function in an external library libcallnr() idem, returning a number + undofile() get the name of the undo file + undotree() return the state of the undo tree + getreg() get contents of a register getregtype() get type of a register setreg() set contents and type of a register + shiftwidth() effective value of 'shiftwidth' + taglist() get list of matching tags tagfiles() get a list of tags files + luaeval() evaluate Lua expression mzeval() evaluate |MzScheme| expression + py3eval() evaluate Python expression (|+python3|) + pyeval() evaluate Python expression (|+python|) ============================================================================== *41.7* Defining a function diff -Naur vim74.orig/runtime/doc/usr_42.txt vim74/runtime/doc/usr_42.txt --- vim74.orig/runtime/doc/usr_42.txt 2013-08-10 11:25:05.000000000 +0000 +++ vim74/runtime/doc/usr_42.txt 2014-09-27 01:00:29.863844304 +0000 @@ -311,7 +311,7 @@ item with a bitmap. For example, define a new toolbar item with: > :tmenu ToolBar.Compile Compile the current file - :amenu ToolBar.Compile :!cc % -o %:r + :amenu ToolBar.Compile :!cc %:S -o %:r:S Now you need to create the icon. For MS-Windows it must be in bitmap format, with the name "Compile.bmp". For Unix XPM format is used, the file name is diff -Naur vim74.orig/runtime/doc/usr_45.txt vim74/runtime/doc/usr_45.txt --- vim74.orig/runtime/doc/usr_45.txt 2013-08-10 11:25:06.000000000 +0000 +++ vim74/runtime/doc/usr_45.txt 2014-09-27 01:00:29.870510954 +0000 @@ -328,8 +328,8 @@ *45.5* Entering language text Computer keyboards don't have much more than a hundred keys. Some languages -have thousands of characters, Unicode has ten thousands. So how do you type -these characters? +have thousands of characters, Unicode has over hundred thousand. So how do +you type these characters? First of all, when you don't use too many of the special characters, you can use digraphs. This was already explained in |24.9|. When you use a language that uses many more characters than keys on your diff -Naur vim74.orig/runtime/doc/various.txt vim74/runtime/doc/various.txt --- vim74.orig/runtime/doc/various.txt 2013-08-10 11:25:06.000000000 +0000 +++ vim74/runtime/doc/various.txt 2014-09-27 01:00:29.877177604 +0000 @@ -1,4 +1,4 @@ -*various.txt* For Vim version 7.4. Last change: 2013 May 18 +*various.txt* For Vim version 7.4. Last change: 2014 Aug 06 VIM REFERENCE MANUAL by Bram Moolenaar @@ -234,25 +234,41 @@ *:!cmd* *:!* *E34* :!{cmd} Execute {cmd} with the shell. See also the 'shell' and 'shelltype' option. + Any '!' in {cmd} is replaced with the previous external command (see also 'cpoptions'). But not when there is a backslash before the '!', then that backslash is removed. Example: ":!ls" followed by ":!echo ! \! \\!" executes "echo ls ! \!". - After the command has been executed, the timestamp of - the current file is checked |timestamp|. + A '|' in {cmd} is passed to the shell, you cannot use it to append a Vim command. See |:bar|. + + If {cmd} contains "%" it is expanded to the current + file name. Special characters are not escaped, use + quotes to avoid their special meaning: > + :!ls "%" +< If the file name contains a "$" single quotes might + work better (but a single quote causes trouble): > + :!ls '%' +< This should always work, but it's more typing: > + :exe "!ls " . shellescape(expand("%")) +< A newline character ends {cmd}, what follows is interpreted as a following ":" command. However, if there is a backslash before the newline it is removed and {cmd} continues. It doesn't matter how many backslashes are before the newline, only one is removed. + On Unix the command normally runs in a non-interactive shell. If you want an interactive shell to be used (to use aliases) set 'shellcmdflag' to "-ic". For Win32 also see |:!start|. + + After the command has been executed, the timestamp and + size of the current file is checked |timestamp|. + Vim redraws the screen after the command is finished, because it may have printed any text. This requires a hit-enter prompt, so that you can read any messages. @@ -291,6 +307,7 @@ in the normal, big and huge versions of Vim. *+feature-list* + *+acl* |ACL| support included *+ARP* Amiga only: ARP support included B *+arabic* |Arabic| language support N *+autocmd* |:autocmd|, automatic commands @@ -320,6 +337,7 @@ N *+dialog_con_gui* Support for |:confirm| with GUI and console dialog. N *+diff* |vimdiff| and 'diff' N *+digraphs* |digraphs| *E196* +m *+directx* Win32 GUI only: DirectX and |'renderoptions'| *+dnd* Support for DnD into the "~ register |quote_~|. B *+emacs_tags* |emacs-tags| files N *+eval* expression evaluation |eval.txt| @@ -362,6 +380,7 @@ N *+mouseshape* |'mouseshape'| B *+mouse_dec* Unix only: Dec terminal mouse handling |dec-mouse| N *+mouse_gpm* Unix only: Linux console mouse handling |gpm-mouse| +N *+mouse_jsbterm* JSB mouse handling |jsbterm-mouse| B *+mouse_netterm* Unix only: netterm mouse handling |netterm-mouse| N *+mouse_pterm* QNX only: pterm mouse handling |qnx-terminal| N *+mouse_sysmouse* Unix only: *BSD console mouse handling |sysmouse| @@ -417,7 +436,7 @@ N *+viminfo* |'viminfo'| N *+vertsplit* Vertically split windows |:vsplit| N *+virtualedit* |'virtualedit'| -S *+visual* Visual mode |Visual-mode| +S *+visual* Visual mode |Visual-mode| Always enabled since 7.4.200. N *+visualextra* extra Visual mode commands |blockwise-operators| N *+vreplace* |gR| and |gr| N *+wildignore* |'wildignore'| @@ -426,6 +445,7 @@ m *+writebackup* |'writebackup'| is default on m *+xim* X input method |xim| *+xfontset* X fontset support |xfontset| + *+xpm* pixmap support m *+xpm_w32* Win32 GUI only: pixmap support |w32-xpm-support| *+xsmp* XSMP (X session management) support *+xsmp_interact* interactive XSMP (X session management) support diff -Naur vim74.orig/runtime/doc/version5.txt vim74/runtime/doc/version5.txt --- vim74.orig/runtime/doc/version5.txt 2013-08-10 11:25:07.000000000 +0000 +++ vim74/runtime/doc/version5.txt 2014-09-27 01:00:29.890510904 +0000 @@ -2020,7 +2020,7 @@ The Win32, Athena and Motif GUI bring up a file requester if the user asks to ":browse" for the ":e", ":w", ":r", ":so", ":redirect" and -":mkexrc/vimrc/vsess" commands. ::browse e /foo/bar" opens the requester in +":mkexrc/vimrc/vsess" commands. ":browse e /foo/bar" opens the requester in the /foo/bar directory, so you can have nice mapping rhs's like ":browse so $vim/macros". If no initial dir specified for ":browse e", can be compiled to either begin in the current directory, or that of the current buffer. (Negri diff -Naur vim74.orig/runtime/doc/version6.txt vim74/runtime/doc/version6.txt --- vim74.orig/runtime/doc/version6.txt 2013-08-10 11:25:07.000000000 +0000 +++ vim74/runtime/doc/version6.txt 2014-09-27 01:00:29.903844204 +0000 @@ -1,4 +1,4 @@ -*version6.txt* For Vim version 7.4. Last change: 2013 Jul 28 +*version6.txt* For Vim version 7.4. Last change: 2014 Aug 29 VIM REFERENCE MANUAL by Bram Moolenaar @@ -7816,7 +7816,7 @@ Patch 6.1.212 Problem: When Vim was started with "-R" ":new" creates a buffer 'noreadonly' while ":enew" has 'readonly' set. (Preben Guldberg) -Solution: Don't set 'readonly in a new empty buffer for ":enew". +Solution: Don't set 'readonly' in a new empty buffer for ":enew". Files: src/ex_docmd.c Patch 6.1.213 diff -Naur vim74.orig/runtime/doc/version7.txt vim74/runtime/doc/version7.txt --- vim74.orig/runtime/doc/version7.txt 2013-08-10 12:23:06.000000000 +0000 +++ vim74/runtime/doc/version7.txt 2014-09-27 01:00:29.927177479 +0000 @@ -1,4 +1,4 @@ -*version7.txt* For Vim version 7.4. Last change: 2013 Aug 10 +*version7.txt* For Vim version 7.4. Last change: 2014 Aug 29 VIM REFERENCE MANUAL by Bram Moolenaar @@ -942,6 +942,7 @@ |tagfiles()| List with tags file names |taglist()| get list of matching tags (Yegappan Lakshmanan) |tr()| translate characters (Ron Aaron) +|uniq()| remove copies of repeated adjacent list items |values()| get List of Dictionary values |winnr()| takes an argument: what window to use |winrestview()| restore the view of the current window @@ -1625,10 +1626,10 @@ When running the tests and one of them fails to produce "test.out" the following tests are still executed. This helps when running out of memory. -When compiling with EXITFREE defined and the ccmalloc library it is possible -to detect memory leaks. Some memory will always reported as leaked, such as -allocated by X11 library functions and the memory allocated in alloc_cmdbuff() -to store the ":quit" command. +When compiling with EXITFREE defined and the ccmalloc library, it is possible +to detect memory leaks. Some memory will always be reported as leaked, such +as allocated by X11 library functions and the memory allocated in +alloc_cmdbuff() to store the ":quit" command. Moved the code for printing to src/hardcopy.c. @@ -2037,8 +2038,8 @@ Avoid that $LANG is used for the menus when LC_MESSAGES is "en_US". -Added backslashes before dashes in the vim.1 manual page to make the appear as -real dashes. (Pierr Habouzit) +Added backslashes before dashes in the vim.1 manual page to make them appear +as real dashes. (Pierr Habouzit) Where "gq" left the cursor depended on the value of 'formatprg'. Now "gq" always leaves the cursor at the last line of the formatted text. @@ -2048,7 +2049,7 @@ compressed. Skip setting 'filetype' for compressed files until they have been decompressed. Required for patterns that end in a "*". -Starting with an argument "+cmd" or "-S script" causes the cursor the be moved +Starting with an argument "+cmd" or "-S script" causes the cursor to be moved to the first line. That breaks a BufReadPost autocommand that uses g`". Don't move the cursor if it's somewhere past the first line. @@ -2395,7 +2396,7 @@ actually are bold. Speeds up displaying considerably. When only highlighting changes and the text is scrolled at the same time -everything is redraw instead of using a scroll and updating the changed text. +everything is redrawn instead of using a scroll and updating the changed text. E.g., when using ":match" to highlight a paren that the cursor landed on. Added SOME_VALID: Redraw the whole window but also try to scroll to minimize redrawing. @@ -6484,7 +6485,7 @@ Problem: Win64: Edit with Vim context menu isn't installed correctly. Compiler warnings and a few other things. Solution: Add [ and ] to entry of class name. Use UINT_PTR instead of UINT. - And a fixes for the other things. (George V. Reilly) + And fixes for other things. (George V. Reilly) Files: src/GvimExt/Makefile, src/dosinst.c, src/if_ole.cpp, src/if_ole.h, src/if_ole.idl, src/INSTALLpc.txt, src/Make_mvc.mak, src/os_win32.c, @@ -7188,7 +7189,7 @@ --------------- Support for Blowfish encryption. Added the 'cryptmethod' option. -Mostly by Moshin Ahmed. +Mostly by Mohsin Ahmed. Also encrypt the text in the swap file and the undo file. @@ -10293,7 +10294,7 @@ Added special |expand()| argument that expands to the current line number. - Made it possible to force |char2nr()| always give unicode codepoints + Made it possible to force |char2nr()| to always give unicode codepoints regardless of current encoding. (Yasuhiro Matsumoto) Made it possible for functions generating file list generate |List| @@ -15782,7 +15783,7 @@ src/testdir/test87.ok Patch 7.3.944 -Problem: External program receives the termrespone. +Problem: External program receives the termresponse. Solution: Insert a delay and discard input. (Hayaki Saito) Files: src/term.c diff -Naur vim74.orig/runtime/doc/vi_diff.txt vim74/runtime/doc/vi_diff.txt --- vim74.orig/runtime/doc/vi_diff.txt 2013-08-10 11:25:07.000000000 +0000 +++ vim74/runtime/doc/vi_diff.txt 2014-09-27 01:00:29.933844129 +0000 @@ -1,4 +1,4 @@ -*vi_diff.txt* For Vim version 7.4. Last change: 2012 Aug 08 +*vi_diff.txt* For Vim version 7.4. Last change: 2013 Aug 22 VIM REFERENCE MANUAL by Bram Moolenaar @@ -150,7 +150,7 @@ Multi level undo. |undo| 'u' goes backward in time, 'CTRL-R' goes forward again. Set option 'undolevels' to the number of changes to be remembered (default 1000). - Set 'undolevels' to 0 for a vi-compatible one level undo. Set it to + Set 'undolevels' to 0 for a Vi-compatible one level undo. Set it to -1 for no undo at all. When all changes in a buffer have been undone, the buffer is not considered changed anymore. You can exit it with :q, without . @@ -540,7 +540,7 @@ Added :wnext command. Same as ":write" followed by ":next". The ":w!" command always writes, also when the file is write protected. In Vi -you would have to do ":!chmod +w %" and ":set noro". +you would have to do ":!chmod +w %:S" and ":set noro". When 'tildeop' has been set, "~" is an operator (must be followed by a movement command). diff -Naur vim74.orig/runtime/doc/visual.txt vim74/runtime/doc/visual.txt --- vim74.orig/runtime/doc/visual.txt 2013-08-10 11:25:08.000000000 +0000 +++ vim74/runtime/doc/visual.txt 2014-09-27 01:00:30.013843929 +0000 @@ -1,4 +1,4 @@ -*visual.txt* For Vim version 7.4. Last change: 2012 Aug 15 +*visual.txt* For Vim version 7.4. Last change: 2014 Mar 23 VIM REFERENCE MANUAL by Bram Moolenaar @@ -22,7 +22,7 @@ {Vi has no Visual mode, the name "visual" is used for Normal mode, to distinguish it from Ex mode} -{not available when the |+visual| feature was disabled when compiling} +{Since Vim 7.4.200 the |+visual| feature is always included} ============================================================================== 1. Using Visual mode *visual-use* @@ -75,7 +75,11 @@ *V* *linewise-visual* [count]V Start Visual mode linewise. - With [count] select that many lines. + With [count] select the same number of lines as used + for the last Visual operation, but at the current + cursor position, multiplied by [count]. When there + was no previous Visual operation [count] lines are + selected. *CTRL-V* *blockwise-visual* [count]CTRL-V Start Visual mode blockwise. Note: Under Windows diff -Naur vim74.orig/runtime/doc/windows.txt vim74/runtime/doc/windows.txt --- vim74.orig/runtime/doc/windows.txt 2013-08-10 11:25:08.000000000 +0000 +++ vim74/runtime/doc/windows.txt 2014-09-27 01:00:30.017177254 +0000 @@ -1,4 +1,4 @@ -*windows.txt* For Vim version 7.4. Last change: 2012 Nov 15 +*windows.txt* For Vim version 7.4. Last change: 2014 Mar 25 VIM REFERENCE MANUAL by Bram Moolenaar @@ -132,13 +132,20 @@ CTRL-W s *CTRL-W_s* CTRL-W S *CTRL-W_S* CTRL-W CTRL-S *CTRL-W_CTRL-S* -:[N]sp[lit] [++opt] [+cmd] *:sp* *:split* +:[N]sp[lit] [++opt] [+cmd] [file] *:sp* *:split* Split current window in two. The result is two viewports on - the same file. Make new window N high (default is to use half - the height of the current window). Reduces the current window - height to create room (and others, if the 'equalalways' option - is set, 'eadirection' isn't "hor", and one of them is higher - than the current or the new window). + the same file. + + Make the new window N high (default is to use half the height + of the current window). Reduces the current window height to + create room (and others, if the 'equalalways' option is set, + 'eadirection' isn't "hor", and one of them is higher than the + current or the new window). + + If [file] is given it will be edited in the new window. If it + is not loaded in any buffer, it will be read. Else the new + window will use the already loaded buffer. + Note: CTRL-S does not work on all terminals and might block further input, use CTRL-Q to get going again. Also see |++opt| and |+cmd|. @@ -1035,36 +1042,41 @@ a number). Insert a backslash before a space in a buffer name. -:[N]b[uffer][!] [N] *:b* *:bu* *:buf* *:buffer* *E86* +:[N]b[uffer][!] [+cmd] [N] *:b* *:bu* *:buf* *:buffer* *E86* Edit buffer [N] from the buffer list. If [N] is not given, the current buffer remains being edited. See |:buffer-!| for [!]. This will also edit a buffer that is not in the buffer list, without setting the 'buflisted' flag. + Also see ||+cmd|. -:[N]b[uffer][!] {bufname} +:[N]b[uffer][!] [+cmd] {bufname} Edit buffer for {bufname} from the buffer list. See |:buffer-!| for [!]. This will also edit a buffer that is not in the buffer list, without setting the 'buflisted' flag. + Also see ||+cmd|. -:[N]sb[uffer] [N] *:sb* *:sbuffer* +:[N]sb[uffer] [+cmd] [N] *:sb* *:sbuffer* Split window and edit buffer [N] from the buffer list. If [N] is not given, the current buffer is edited. Respects the "useopen" setting of 'switchbuf' when splitting. This will also edit a buffer that is not in the buffer list, without setting the 'buflisted' flag. + Also see ||+cmd|. -:[N]sb[uffer] {bufname} +:[N]sb[uffer] [+cmd] {bufname} Split window and edit buffer for {bufname} from the buffer list. This will also edit a buffer that is not in the buffer list, without setting the 'buflisted' flag. Note: If what you want to do is split the buffer, make a copy under another name, you can do it this way: > :w foobar | sp # +< Also see ||+cmd|. -:[N]bn[ext][!] [N] *:bn* *:bnext* *E87* +:[N]bn[ext][!] [+cmd] [N] *:bn* *:bnext* *E87* Go to [N]th next buffer in buffer list. [N] defaults to one. Wraps around the end of the buffer list. See |:buffer-!| for [!]. + Also see ||+cmd|. If you are in a help buffer, this takes you to the next help buffer (if there is one). Similarly, if you are in a normal (non-help) buffer, this takes you to the next normal buffer. @@ -1072,55 +1084,61 @@ the way when you're browsing code/text buffers. The next three commands also work like this. + *:sbn* *:sbnext* -:[N]sbn[ext] [N] +:[N]sbn[ext] [+cmd] [N] Split window and go to [N]th next buffer in buffer list. Wraps around the end of the buffer list. Uses 'switchbuf' + Also see ||+cmd|. -:[N]bN[ext][!] [N] *:bN* *:bNext* *:bp* *:bprevious* *E88* -:[N]bp[revious][!] [N] +:[N]bN[ext][!] [+cmd] [N] *:bN* *:bNext* *:bp* *:bprevious* *E88* +:[N]bp[revious][!] [+cmd] [N] Go to [N]th previous buffer in buffer list. [N] defaults to one. Wraps around the start of the buffer list. See |:buffer-!| for [!] and 'switchbuf'. + Also see ||+cmd|. -:[N]sbN[ext] [N] *:sbN* *:sbNext* *:sbp* *:sbprevious* -:[N]sbp[revious] [N] +:[N]sbN[ext] [+cmd] [N] *:sbN* *:sbNext* *:sbp* *:sbprevious* +:[N]sbp[revious] [+cmd] [N] Split window and go to [N]th previous buffer in buffer list. Wraps around the start of the buffer list. Uses 'switchbuf'. + Also see ||+cmd|. - *:br* *:brewind* -:br[ewind][!] Go to first buffer in buffer list. If the buffer list is +:br[ewind][!] [+cmd] *:br* *:brewind* + Go to first buffer in buffer list. If the buffer list is empty, go to the first unlisted buffer. See |:buffer-!| for [!]. - *:bf* *:bfirst* -:bf[irst] Same as ":brewind". +:bf[irst] [+cmd] *:bf* *:bfirst* + Same as |:brewind|. + Also see |+cmd|. - *:sbr* *:sbrewind* -:sbr[ewind] Split window and go to first buffer in buffer list. If the +:sbr[ewind] [+cmd] *:sbr* *:sbrewind* + Split window and go to first buffer in buffer list. If the buffer list is empty, go to the first unlisted buffer. Respects the 'switchbuf' option. + Also see |+cmd|. - *:sbf* *:sbfirst* -:sbf[irst] Same as ":sbrewind". +:sbf[irst] [+cmd] *:sbf* *:sbfirst* + Same as ":sbrewind". - *:bl* *:blast* -:bl[ast][!] Go to last buffer in buffer list. If the buffer list is +:bl[ast][!] [+cmd] *:bl* *:blast* + Go to last buffer in buffer list. If the buffer list is empty, go to the last unlisted buffer. See |:buffer-!| for [!]. - *:sbl* *:sblast* -:sbl[ast] Split window and go to last buffer in buffer list. If the +:sbl[ast] [+cmd] *:sbl* *:sblast* + Split window and go to last buffer in buffer list. If the buffer list is empty, go to the last unlisted buffer. Respects 'switchbuf' option. -:[N]bm[odified][!] [N] *:bm* *:bmodified* *E84* +:[N]bm[odified][!] [+cmd] [N] *:bm* *:bmodified* *E84* Go to [N]th next modified buffer. Note: this command also finds unlisted buffers. If there is no modified buffer the command fails. -:[N]sbm[odified] [N] *:sbm* *:sbmodified* +:[N]sbm[odified] [+cmd] [N] *:sbm* *:sbmodified* Split window and go to [N]th next modified buffer. Respects 'switchbuf' option. Note: this command also finds buffers not in the buffer list. diff -Naur vim74.orig/runtime/filetype.vim vim74/runtime/filetype.vim --- vim74.orig/runtime/filetype.vim 2013-08-03 15:50:05.000000000 +0000 +++ vim74/runtime/filetype.vim 2014-09-27 01:00:30.053843829 +0000 @@ -1,7 +1,7 @@ " Vim support file to detect file types " " Maintainer: Bram Moolenaar -" Last Change: 2013 Aug 03 +" Last Change: 2014 Sep 05 " Listen very carefully, I will say this only once if exists("did_load_filetypes") @@ -106,6 +106,9 @@ " Ant au BufNewFile,BufRead build.xml setf ant +" Arduino +au BufNewFile,BufRead *.ino,*.pde setf arduino + " Apache style config file au BufNewFile,BufRead proftpd.conf* call s:StarSetf('apachestyle') @@ -129,7 +132,7 @@ au BufNewFile,BufRead *.aml setf aml " APT config file -au BufNewFile,BufRead apt.conf setf aptconf +au BufNewFile,BufRead apt.conf setf aptconf au BufNewFile,BufRead */.aptitude/config setf aptconf au BufNewFile,BufRead */etc/apt/apt.conf.d/{[-_[:alnum:]]\+,[-_.[:alnum:]]\+.conf} setf aptconf @@ -527,6 +530,9 @@ " CUDA Cumpute Unified Device Architecture au BufNewFile,BufRead *.cu setf cuda +" Dockerfile +au BufNewFile,BufRead Dockerfile setf dockerfile + " WildPackets EtherPeek Decoder au BufNewFile,BufRead *.dcd setf dcd @@ -536,6 +542,20 @@ " Eterm au BufNewFile,BufRead *Eterm/*.cfg setf eterm +" Euphoria 3 or 4 +au BufNewFile,BufRead *.eu,*.ew,*.ex,*.exu,*.exw call s:EuphoriaCheck() +if has("fname_case") + au BufNewFile,BufRead *.EU,*.EW,*.EX,*.EXU,*.EXW call s:EuphoriaCheck() +endif + +func! s:EuphoriaCheck() + if exists('g:filetype_euphoria') + exe 'setf ' . g:filetype_euphoria + else + setf euphoria3 + endif +endfunc + " Lynx config files au BufNewFile,BufRead lynx.cfg setf lynx @@ -656,22 +676,26 @@ " Embedix Component Description au BufNewFile,BufRead *.ecd setf ecd -" Eiffel or Specman +" Eiffel or Specman or Euphoria au BufNewFile,BufRead *.e,*.E call s:FTe() " Elinks configuration au BufNewFile,BufRead */etc/elinks.conf,*/.elinks/elinks.conf setf elinks func! s:FTe() - let n = 1 - while n < 100 && n < line("$") - if getline(n) =~ "^\\s*\\(<'\\|'>\\)\\s*$" - setf specman - return - endif - let n = n + 1 - endwhile - setf eiffel + if exists('g:filetype_euphoria') + exe 'setf ' . g:filetype_euphoria + else + let n = 1 + while n < 100 && n < line("$") + if getline(n) =~ "^\\s*\\(<'\\|'>\\)\\s*$" + setf specman + return + endif + let n = n + 1 + endwhile + setf eiffel + endif endfunc " ERicsson LANGuage; Yaws is erlang too @@ -790,6 +814,9 @@ " Gnuplot scripts au BufNewFile,BufRead *.gpi setf gnuplot +" Go (Google) +au BufNewFile,BufRead *.go setf go + " GrADS scripts au BufNewFile,BufRead *.gs setf grads @@ -843,7 +870,7 @@ setf xhtml return endif - if getline(n) =~ '{%\s*\(extends\|block\)\>' + if getline(n) =~ '{%\s*\(extends\|block\|load\)\>' setf htmldjango return endif @@ -952,6 +979,9 @@ " Inno Setup au BufNewFile,BufRead *.iss setf iss +" J +au BufNewFile,BufRead *.ijs setf j + " JAL au BufNewFile,BufRead *.jal,*.JAL setf jal @@ -965,7 +995,7 @@ au BufNewFile,BufRead *.jj,*.jjt setf javacc " JavaScript, ECMAScript -au BufNewFile,BufRead *.js,*.javascript,*.es,*.jsx,*.json setf javascript +au BufNewFile,BufRead *.js,*.javascript,*.es,*.jsx setf javascript " Java Server Pages au BufNewFile,BufRead *.jsp setf jsp @@ -983,12 +1013,18 @@ " Jovial au BufNewFile,BufRead *.jov,*.j73,*.jovial setf jovial +" JSON +au BufNewFile,BufRead *.json,*.jsonp setf json + " Kixtart au BufNewFile,BufRead *.kix setf kix " Kimwitu[++] au BufNewFile,BufRead *.k setf kwt +" Kivy +au BufNewFile,BufRead *.kv setf kivy + " KDE script au BufNewFile,BufRead *.ks setf kscript @@ -1014,7 +1050,7 @@ au BufNewFile,BufRead *.ld setf ld " Lex -au BufNewFile,BufRead *.lex,*.l setf lex +au BufNewFile,BufRead *.lex,*.l,*.lxx,*.l++ setf lex " Libao au BufNewFile,BufRead */etc/libao.conf,*/.libao setf libao @@ -1068,6 +1104,9 @@ " Lua au BufNewFile,BufRead *.lua setf lua +" Luarocks +au BufNewFile,BufRead *.rockspec setf lua + " Linden Scripting Language (Second Life) au BufNewFile,BufRead *.lsl setf lsl @@ -1115,7 +1154,7 @@ au BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,*.mdwn,README.md setf markdown " Mason -au BufNewFile,BufRead *.mason,*.mhtml setf mason +au BufNewFile,BufRead *.mason,*.mhtml,*.comp setf mason " Matlab or Objective C au BufNewFile,BufRead *.m call s:FTm() @@ -1169,6 +1208,9 @@ " MGL au BufNewFile,BufRead *.mgl setf mgl +" MIX - Knuth assembly +au BufNewFile,BufRead *.mix,*.mixal setf mix + " MMIX or VMS makefile au BufNewFile,BufRead *.mms call s:FTmms() @@ -1619,6 +1661,20 @@ au BufNewFile,BufRead *.rnw,*.snw setf rnoweb endif +" R Markdown file +if has("fname_case") + au BufNewFile,BufRead *.Rmd,*.rmd,*.Smd,*.smd setf rmd +else + au BufNewFile,BufRead *.rmd,*.smd setf rmd +endif + +" R reStructuredText file +if has("fname_case") + au BufNewFile,BufRead *.Rrst,*.rrst,*.Srst,*.srst setf rrst +else + au BufNewFile,BufRead *.rrst,*.srst setf rrst +endif + " Rexx, Rebol or R au BufNewFile,BufRead *.r,*.R call s:FTr() @@ -2058,14 +2114,15 @@ " SVG (Scalable Vector Graphics) au BufNewFile,BufRead *.svg setf svg -" If the file has an extension of 't' and is in a directory 't' then it is -" almost certainly a Perl test file. +" If the file has an extension of 't' and is in a directory 't' or 'xt' then +" it is almost certainly a Perl test file. " If the first line starts with '#' and contains 'perl' it's probably a Perl " file. " (Slow test) If a file contains a 'use' statement then it is almost certainly " a Perl file. func! s:FTperl() - if expand("%:e") == 't' && expand("%:p:h:t") == 't' + let dirname = expand("%:p:h:t") + if expand("%:e") == 't' && (dirname == 't' || dirname == 'xt') setf perl return 1 endif @@ -2092,7 +2149,7 @@ " Task au BufRead,BufNewFile {pending,completed,undo}.data setf taskdata -au BufRead,BufNewFile *.task setf taskedit +au BufRead,BufNewFile *.task setf taskedit " Tcl (JACL too) au BufNewFile,BufRead *.tcl,*.tk,*.itcl,*.itk,*.jacl setf tcl @@ -2217,12 +2274,12 @@ au BufNewFile,BufRead */etc/updatedb.conf setf updatedb " Upstart (init(8)) config files -au BufNewFile,BufRead */usr/share/upstart/*.conf setf upstart -au BufNewFile,BufRead */usr/share/upstart/*.override setf upstart +au BufNewFile,BufRead */usr/share/upstart/*.conf setf upstart +au BufNewFile,BufRead */usr/share/upstart/*.override setf upstart au BufNewFile,BufRead */etc/init/*.conf,*/etc/init/*.override setf upstart au BufNewFile,BufRead */.init/*.conf,*/.init/*.override setf upstart -au BufNewFile,BufRead */.config/upstart/*.conf setf upstart -au BufNewFile,BufRead */.config/upstart/*.override setf upstart +au BufNewFile,BufRead */.config/upstart/*.conf setf upstart +au BufNewFile,BufRead */.config/upstart/*.override setf upstart " Vera au BufNewFile,BufRead *.vr,*.vri,*.vrh setf vera @@ -2233,6 +2290,9 @@ " Verilog-AMS HDL au BufNewFile,BufRead *.va,*.vams setf verilogams +" SystemVerilog +au BufNewFile,BufRead *.sv,*.svh setf systemverilog + " VHDL au BufNewFile,BufRead *.hdl,*.vhd,*.vhdl,*.vbe,*.vst setf vhdl au BufNewFile,BufRead *.vhdl_[0-9]* call s:StarSetf('vhdl') @@ -2263,6 +2323,9 @@ " VRML V1.0c au BufNewFile,BufRead *.wrl setf vrml +" Vroom (vim testing and executable documentation) +au BufNewFile,BufRead *.vroom setf vroom + " Webmacro au BufNewFile,BufRead *.wm setf webmacro @@ -2405,7 +2468,7 @@ au BufNewFile,BufRead *.xsl,*.xslt setf xslt " Yacc -au BufNewFile,BufRead *.yy setf yacc +au BufNewFile,BufRead *.yy,*.yxx,*.y++ setf yacc " Yacc or racc au BufNewFile,BufRead *.y call s:FTy() @@ -2630,7 +2693,7 @@ " Plain text files, needs to be far down to not override others. This avoids " the "conf" type being used if there is a line starting with '#'. -au BufNewFile,BufRead *.txt,*.text setf text +au BufNewFile,BufRead *.txt,*.text,README setf text " Use the filetype detect plugins. They may overrule any of the previously diff -Naur vim74.orig/runtime/ftplugin/changelog.vim vim74/runtime/ftplugin/changelog.vim --- vim74.orig/runtime/ftplugin/changelog.vim 2012-08-23 20:47:22.000000000 +0000 +++ vim74/runtime/ftplugin/changelog.vim 2014-09-27 01:00:30.093843729 +0000 @@ -1,7 +1,7 @@ " Vim filetype plugin file " Language: generic Changelog file " Maintainer: Nikolai Weibull -" Latest Revision: 2012-08-23 +" Latest Revision: 2014-01-10 " Variables: " g:changelog_timeformat (deprecated: use g:changelog_dateformat instead) - " description: the timeformat used in ChangeLog entries. @@ -122,12 +122,12 @@ " Format used for new date entries. if !exists('g:changelog_new_date_format') - let g:changelog_new_date_format = "%d %u\n\n\t* %c\n\n" + let g:changelog_new_date_format = "%d %u\n\n\t* %p%c\n\n" endif " Format used for new entries to current date entry. if !exists('g:changelog_new_entry_format') - let g:changelog_new_entry_format = "\t* %c" + let g:changelog_new_entry_format = "\t* %p%c" endif " Regular expression used to find a given date entry. @@ -143,16 +143,16 @@ " Substitutes specific items in new date-entry formats and search strings. " Can be done with substitute of course, but unclean, and need \@! then. - function! s:substitute_items(str, date, user) + function! s:substitute_items(str, date, user, prefix) let str = a:str - let middles = {'%': '%', 'd': a:date, 'u': a:user, 'c': '{cursor}'} + let middles = {'%': '%', 'd': a:date, 'u': a:user, 'p': a:prefix, 'c': '{cursor}'} let i = stridx(str, '%') while i != -1 let inc = 0 if has_key(middles, str[i + 1]) let mid = middles[str[i + 1]] let str = strpart(str, 0, i) . mid . strpart(str, i + 2) - let inc = strlen(mid) + let inc = strlen(mid) - 1 endif let i = stridx(str, '%', i + 1 + inc) endwhile @@ -171,7 +171,7 @@ endfunction " Internal function to create a new entry in the ChangeLog. - function! s:new_changelog_entry() + function! s:new_changelog_entry(prefix) " Deal with 'paste' option. let save_paste = &paste let &paste = 1 @@ -179,7 +179,7 @@ " Look for an entry for today by our user. let date = strftime(g:changelog_dateformat) let search = s:substitute_items(g:changelog_date_entry_search, date, - \ s:username()) + \ s:username(), a:prefix) if search(search) > 0 " Ok, now we look for the end of the date entry, and add an entry. call cursor(nextnonblank(line('.') + 1), 1) @@ -188,7 +188,7 @@ else let p = line('.') endif - let ls = split(s:substitute_items(g:changelog_new_entry_format, '', ''), + let ls = split(s:substitute_items(g:changelog_new_entry_format, '', '', a:prefix), \ '\n') call append(p, ls) call cursor(p + 1, 1) @@ -198,7 +198,7 @@ " No entry today, so create a date-user header and insert an entry. let todays_entry = s:substitute_items(g:changelog_new_date_format, - \ date, s:username()) + \ date, s:username(), a:prefix) " Make sure we have a cursor positioning. if stridx(todays_entry, '{cursor}') == -1 let todays_entry = todays_entry . '{cursor}' @@ -206,7 +206,7 @@ " Now do the work. call append(0, split(todays_entry, '\n')) - + " Remove empty lines at end of file. if remove_empty $-/^\s*$/-1,$delete @@ -223,8 +223,8 @@ endfunction if exists(":NewChangelogEntry") != 2 - noremap o :call new_changelog_entry() - command! -nargs=0 NewChangelogEntry call s:new_changelog_entry() + noremap o :call new_changelog_entry('') + command! -nargs=0 NewChangelogEntry call s:new_changelog_entry('') endif let b:undo_ftplugin = "setl com< fo< et< ai<" @@ -277,10 +277,7 @@ if exists('b:changelog_entry_prefix') let prefix = call(b:changelog_entry_prefix, []) else - let prefix = substitute(strpart(expand('%:p'), strlen(path)), '^/\+', "", "") . ':' - endif - if !empty(prefix) - let prefix = ' ' . prefix + let prefix = substitute(strpart(expand('%:p'), strlen(path)), '^/\+', "", "") endif let buf = bufnr(changelog) diff -Naur vim74.orig/runtime/ftplugin/clojure.vim vim74/runtime/ftplugin/clojure.vim --- vim74.orig/runtime/ftplugin/clojure.vim 2013-02-06 14:35:23.000000000 +0000 +++ vim74/runtime/ftplugin/clojure.vim 2014-09-27 01:00:30.097177054 +0000 @@ -1,44 +1,60 @@ " Vim filetype plugin file -" Language: Clojure -" Author: Meikel Brandmeyer +" Language: Clojure +" Author: Meikel Brandmeyer " -" Maintainer: Sung Pae -" URL: https://github.com/guns/vim-clojure-static -" License: Same as Vim -" Last Change: 30 January 2013 +" Maintainer: Sung Pae +" URL: https://github.com/guns/vim-clojure-static +" License: Same as Vim +" Last Change: 27 March 2014 -" Only do this when not done yet for this buffer if exists("b:did_ftplugin") - finish + finish endif let b:did_ftplugin = 1 let s:cpo_save = &cpo set cpo&vim -let b:undo_ftplugin = 'setlocal define< formatoptions< comments< commentstring<' +let b:undo_ftplugin = 'setlocal iskeyword< define< formatoptions< comments< commentstring< lispwords<' + +setlocal iskeyword+=?,-,*,!,+,/,=,<,>,.,:,$ " There will be false positives, but this is better than missing the whole set " of user-defined def* definitions. setlocal define=\\v[(/]def(ault)@!\\S* -" Remove 't' from 'formatoptions' to avoid auto-wrapping code. The '+=croql' -" is standard ftplugin boilerplate, although it is arguably intrusive. -setlocal formatoptions-=t formatoptions+=croql +" Remove 't' from 'formatoptions' to avoid auto-wrapping code. +setlocal formatoptions-=t " Lisp comments are routinely nested (e.g. ;;; SECTION HEADING) setlocal comments=n:; setlocal commentstring=;\ %s +" Specially indented symbols from clojure.core and clojure.test. +" +" Clojure symbols are indented in the defn style when they: +" +" * Define vars and anonymous functions +" * Create new lexical scopes or scopes with altered environments +" * Create conditional branches from a predicate function or value +" +" The arglists for these functions are generally in the form of [x & body]; +" Functions that accept a flat list of forms do not treat the first argument +" specially and hence are not indented specially. +" +" -*- LISPWORDS -*- +" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-010/clj/src/vim_clojure_static/generate.clj +setlocal lispwords=as->,binding,bound-fn,case,catch,cond->,cond->>,condp,def,definline,definterface,defmacro,defmethod,defmulti,defn,defn-,defonce,defprotocol,defrecord,defstruct,deftest,deftest-,deftype,doseq,dotimes,doto,extend,extend-protocol,extend-type,fn,for,if,if-let,if-not,if-some,let,letfn,locking,loop,ns,proxy,reify,set-test,testing,when,when-first,when-let,when-not,when-some,while,with-bindings,with-in-str,with-local-vars,with-open,with-precision,with-redefs,with-redefs-fn,with-test + " Provide insert mode completions for special forms and clojure.core. As " 'omnifunc' is set by popular Clojure REPL client plugins, we also set " 'completefunc' so that the user has some form of completion available when " 'omnifunc' is set and no REPL connection exists. for s:setting in ['omnifunc', 'completefunc'] - if exists('&' . s:setting) && empty(eval('&' . s:setting)) - execute 'setlocal ' . s:setting . '=clojurecomplete#Complete' - let b:undo_ftplugin .= ' | setlocal ' . s:setting . '<' - endif + if exists('&' . s:setting) && empty(eval('&' . s:setting)) + execute 'setlocal ' . s:setting . '=clojurecomplete#Complete' + let b:undo_ftplugin .= ' | setlocal ' . s:setting . '<' + endif endfor " Take all directories of the CLOJURE_SOURCE_DIRS environment variable @@ -46,34 +62,34 @@ " " This is a legacy option for VimClojure users. if exists('$CLOJURE_SOURCE_DIRS') - for s:dir in split($CLOJURE_SOURCE_DIRS, (has("win32") || has("win64")) ? ';' : ':') - let s:dir = fnameescape(s:dir) - " Whitespace escaping for Windows - let s:dir = substitute(s:dir, '\', '\\\\', 'g') - let s:dir = substitute(s:dir, '\ ', '\\ ', 'g') - execute "setlocal path+=" . s:dir . "/**" - endfor - let b:undo_ftplugin .= ' | setlocal path<' + for s:dir in split($CLOJURE_SOURCE_DIRS, (has("win32") || has("win64")) ? ';' : ':') + let s:dir = fnameescape(s:dir) + " Whitespace escaping for Windows + let s:dir = substitute(s:dir, '\', '\\\\', 'g') + let s:dir = substitute(s:dir, '\ ', '\\ ', 'g') + execute "setlocal path+=" . s:dir . "/**" + endfor + let b:undo_ftplugin .= ' | setlocal path<' endif " Skip brackets in ignored syntax regions when using the % command if exists('loaded_matchit') - let b:match_words = &matchpairs - let b:match_skip = 's:comment\|string\|regex\|character' - let b:undo_ftplugin .= ' | unlet! b:match_words b:match_skip' + let b:match_words = &matchpairs + let b:match_skip = 's:comment\|string\|regex\|character' + let b:undo_ftplugin .= ' | unlet! b:match_words b:match_skip' endif " Win32 can filter files in the browse dialog if has("gui_win32") && !exists("b:browsefilter") - let b:browsefilter = "Clojure Source Files (*.clj)\t*.clj\n" . - \ "ClojureScript Source Files (*.cljs)\t*.cljs\n" . - \ "Java Source Files (*.java)\t*.java\n" . - \ "All Files (*.*)\t*.*\n" - let b:undo_ftplugin .= ' | unlet! b:browsefilter' + let b:browsefilter = "Clojure Source Files (*.clj)\t*.clj\n" . + \ "ClojureScript Source Files (*.cljs)\t*.cljs\n" . + \ "Java Source Files (*.java)\t*.java\n" . + \ "All Files (*.*)\t*.*\n" + let b:undo_ftplugin .= ' | unlet! b:browsefilter' endif let &cpo = s:cpo_save unlet! s:cpo_save s:setting s:dir -" vim:sts=4 sw=4 et: +" vim:sts=8:sw=8:ts=8:noet diff -Naur vim74.orig/runtime/ftplugin/cobol.vim vim74/runtime/ftplugin/cobol.vim --- vim74.orig/runtime/ftplugin/cobol.vim 2010-05-15 11:04:03.000000000 +0000 +++ vim74/runtime/ftplugin/cobol.vim 2014-09-27 01:00:30.100510379 +0000 @@ -1,7 +1,7 @@ " Vim filetype plugin file " Language: cobol " Author: Tim Pope -" $Id: cobol.vim,v 1.1 2007/05/05 17:24:38 vimboss Exp $ +" Last Update: By ZyX: use shiftwidth() " Insert mode mappings: " Normal mode mappings: < > << >> [[ ]] [] ][ @@ -113,7 +113,7 @@ function! s:increase(...) let lnum = '.' - let sw = &shiftwidth + let sw = shiftwidth() let i = a:0 ? a:1 : indent(lnum) if i >= 11 return sw - (i - 11) % sw @@ -128,7 +128,7 @@ function! s:decrease(...) let lnum = '.' - let sw = &shiftwidth + let sw = shiftwidth() let i = indent(a:0 ? a:1 : lnum) if i >= 11 + sw return 1 + (i + 12) % sw @@ -147,7 +147,7 @@ let head = strpart(getline('.'),0,7) let tail = strpart(getline('.'),7) let indent = match(tail,'[^ ]') - let sw = &shiftwidth + let sw = shiftwidth() let shift = a:shift if shift > 0 if indent < 4 @@ -221,7 +221,8 @@ function! s:Tab() if (strpart(getline('.'),0,col('.')-1) =~ '^\s*$' && &sta) return s:IncreaseIndent() - elseif &sts == &sw && &sts != 8 && &et + " &softtabstop < 0: &softtabstop follows &shiftwidth + elseif (&sts < 0 || &sts == shiftwidth()) && &sts != 8 && &et return s:repeat(" ",s:increase(col('.')-1)) else return "\" diff -Naur vim74.orig/runtime/ftplugin/debchangelog.vim vim74/runtime/ftplugin/debchangelog.vim --- vim74.orig/runtime/ftplugin/debchangelog.vim 2012-02-04 19:59:23.000000000 +0000 +++ vim74/runtime/ftplugin/debchangelog.vim 2014-09-27 01:00:30.123843654 +0000 @@ -3,7 +3,7 @@ " Maintainer: Debian Vim Maintainers " Former Maintainers: Michael Piefel " Stefano Zacchiroli -" Last Change: 2012-01-31 +" Last Change: 2014-01-31 " License: Vim License " URL: http://hg.debian.org/hg/pkg-vim/vim/file/unstable/runtime/ftplugin/debchangelog.vim @@ -152,7 +152,7 @@ endfunction function Distribution(dist) - call setline(1, substitute(getline(1), ") [[:lower:] ]*;", ") " . a:dist . ";", "")) + call setline(1, substitute(getline(1), ') *\%(UNRELEASED\|\l\+\);', ") " . a:dist . ";", "")) endfunction function Urgency(urg) diff -Naur vim74.orig/runtime/ftplugin/dockerfile.vim vim74/runtime/ftplugin/dockerfile.vim --- vim74.orig/runtime/ftplugin/dockerfile.vim 1970-01-01 00:00:00.000000000 +0000 +++ vim74/runtime/ftplugin/dockerfile.vim 2014-09-27 01:00:30.140510279 +0000 @@ -0,0 +1,16 @@ +" Vim filetype plugin +" Language: Dockerfile +" Maintainer: Honza Pokorny +" Last Change: 2014 Aug 29 + +" Only do this when not done yet for this buffer +if exists("b:did_ftplugin") + finish +endif + +" Don't load another plugin for this buffer +let b:did_ftplugin = 1 + +let b:undo_ftplugin = "setl commentstring<" + +setlocal commentstring=#\ %s diff -Naur vim74.orig/runtime/ftplugin/fortran.vim vim74/runtime/ftplugin/fortran.vim --- vim74.orig/runtime/ftplugin/fortran.vim 2012-04-18 07:32:40.000000000 +0000 +++ vim74/runtime/ftplugin/fortran.vim 2014-09-27 01:00:30.160510229 +0000 @@ -1,12 +1,12 @@ " Vim settings file " Language: Fortran 2008 (and older: Fortran 2003, 95, 90, 77, 66) -" Version: 0.48 -" Last Change: 2012 Apr. 18 -" Maintainer: Ajit J. Thakkar ; +" Version: 0.49 +" Last Change: 2013 Oct. 01 +" Maintainer: Ajit J. Thakkar ; " Usage: Do :help fortran-plugin from Vim " Credits: -" Useful suggestions were made by Stefano Zacchiroli, Hendrik Merx, and Ben -" Fritz. +" Useful suggestions were made by Stefano Zacchiroli, Hendrik Merx, Ben +" Fritz, and David Barnett. " Only do these settings when not done yet for this buffer if exists("b:did_ftplugin") @@ -64,8 +64,8 @@ " setlocal tw=73 else setlocal comments=:! - " Free format allows a textwidth of 132 for code but 80 is more usual - setlocal tw=80 + " Free format allows a textwidth of 132 + setlocal tw=132 endif " Set commentstring for foldmethod=marker @@ -76,8 +76,8 @@ setlocal expandtab endif -" Set 'formatoptions' to break comment and text lines but allow long lines -setlocal fo+=tcql +" Set 'formatoptions' to break text lines +setlocal fo+=t setlocal include=^\\c#\\=\\s*include\\s\\+ setlocal suffixesadd+=.f08,.f03,.f95,.f90,.for,.f,.F,.f77,.ftn,.fpp @@ -114,7 +114,7 @@ \ "All Files (*.*)\t*.*\n" endif -let b:undo_ftplugin = "setl fo< com< tw< cms< et< inc<" +let b:undo_ftplugin = "setl fo< com< tw< cms< et< inc< sua<" \ . "| unlet! b:match_ignorecase b:match_words b:browsefilter" let &cpoptions=s:cposet diff -Naur vim74.orig/runtime/ftplugin/go.vim vim74/runtime/ftplugin/go.vim --- vim74.orig/runtime/ftplugin/go.vim 1970-01-01 00:00:00.000000000 +0000 +++ vim74/runtime/ftplugin/go.vim 2014-09-27 01:00:30.173843529 +0000 @@ -0,0 +1,18 @@ +" Vim filetype plugin file +" Language: Go +" Maintainer: David Barnett (https://github.com/google/vim-ft-go) +" Last Change: 2014 Aug 16 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal formatoptions-=t + +setlocal comments=s1:/*,mb:*,ex:*/,:// +setlocal commentstring=//\ %s + +let b:undo_ftplugin = 'setl fo< com< cms<' + +" vim: sw=2 sts=2 et diff -Naur vim74.orig/runtime/ftplugin/html.vim vim74/runtime/ftplugin/html.vim --- vim74.orig/runtime/ftplugin/html.vim 2012-03-11 13:50:46.000000000 +0000 +++ vim74/runtime/ftplugin/html.vim 2014-09-27 01:00:30.197176804 +0000 @@ -20,49 +20,9 @@ setlocal formatoptions-=t formatoptions+=croql endif - if exists('&omnifunc') - " Distinguish between HTML versions - " To use with other HTML versions add another - " elseif condition to match proper DOCTYPE - setlocal omnifunc=htmlcomplete#CompleteTags - - if &filetype == 'xhtml' - let b:html_omni_flavor = 'xhtml10s' - else - let b:html_omni_flavor = 'html401t' - endif - let i = 1 - let line = "" - while i < 10 && i < line("$") - let line = getline(i) - if line =~ '' - let b:html_omni_flavor = 'html40' - endif - if line =~ '\' - let b:html_omni_flavor .= 't' - elseif line =~ '\' - let b:html_omni_flavor .= 'f' - else - let b:html_omni_flavor .= 's' - endif - endif - endif + setlocal omnifunc=htmlcomplete#CompleteTags + call htmlcomplete#DetectOmniFlavor() endif " HTML: thanks to Johannes Zellner and Benji Fisher. diff -Naur vim74.orig/runtime/ftplugin/j.vim vim74/runtime/ftplugin/j.vim --- vim74.orig/runtime/ftplugin/j.vim 1970-01-01 00:00:00.000000000 +0000 +++ vim74/runtime/ftplugin/j.vim 2014-09-27 01:00:30.210510104 +0000 @@ -0,0 +1,75 @@ +" Vim filetype plugin +" Language: J +" Maintainer: David Bürgin <676c7473@gmail.com> +" URL: https://github.com/glts/vim-j +" Last Change: 2014-04-05 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +let s:save_cpo = &cpo +set cpo&vim + +setlocal iskeyword=48-57,A-Z,_,a-z +setlocal comments=:NB. +setlocal commentstring=NB.\ %s +setlocal formatoptions-=t +setlocal shiftwidth=2 softtabstop=2 expandtab +setlocal matchpairs=(:) + +let b:undo_ftplugin = 'setlocal matchpairs< expandtab< softtabstop< shiftwidth< formatoptions< commentstring< comments< iskeyword<' + +" Section movement with ]] ][ [[ []. The start/end patterns below are amended +" inside the function in order to avoid matching on the current cursor line. +let s:sectionstart = '.\{-}\<\%([0-4]\|13\|noun\|adverb\|conjunction\|verb\|monad\|dyad\)\s\+\%(:\s*0\|def\s\+0\|define\)\>.*' +let s:sectionend = '\s*)\s*' + +function! s:SearchSection(end, backwards, visualmode) abort + if a:visualmode !=# '' + normal! gv + endif + let flags = a:backwards ? 'bsW' : 'sW' + if a:end + call search('^' . s:sectionend . (a:backwards ? '\n\_.\{-}\%#' : '$'), flags) + else + call search('^' . s:sectionstart . (a:backwards ? '\n\_.\{-}\%#' : '$'), flags) + endif +endfunction + +noremap