Cool, thanks for explanations.
BracketHighlighter2 BETA Branch
I kinda found another bug!
So, letâs say we have this snippet:
<?php for ( $i=0; $i < 5; $i++ ) { ?>
<?php } ?>
The bug is that { and } doesnât highlight correctly (only as invalid), although if I press ctrl+m (to jump to pair bracket) will jump correctly.
This is not related to my custom settings of the plugin (i removed everything and act the same).
[quote=âiamntzâ]I kinda found another bug!
So, letâs say we have this snippet:
<?php for ( $i=0; $i < 5; $i++ ) { ?>
<?php } ?>
The bug is that { and } doesnât highlight correctly (only as invalid), although if I press ctrl+m (to jump to pair bracket) will jump correctly.
This is not related to my custom settings of the plugin (i removed everything and act the same).[/quote]
Mine highlights â{â and â}â as invalid (which I would expect, since â{â and â}â are not matched between the â<?php ?>â tags, it breaks the valid match rules). And cannot jump between the â{}â brackets either because they are invalid. This is the case for ctrl+m and BH2s jump between brackets method for me as well. ctrl+m uses ST2s algorithm. BH2 uses its own. I provide example keymaps to use BH2âs version.
Now Ctrl+m was able to match PHP angles in the last PHP group, but not in the first. BH2âs match did not match either. BH2 is very consistent when using its algorithm. ST2 seems like it is not.
Are you able to post more code? Because I could not reproduce what you described with just what you posed above. As you can see my description seems different than yours.
There is no need for more code because it seems that everything that match follow this pattern (more or less) doesnât work:
< { >
< }>
I made a short movie here:
(http://img.iamntz.com/jing/2012-11-04_1918.swf)
with settings off (including those PHP tags):
(http://img.iamntz.com/jing/2012-11-04_1924.swf)
(also, at the end of the movie i enabled my settings & tried to use other brackets)
Green is ok, red is invalid. Pink is⌠i have no clue what (or why) is pink in that context!
Pink is invalid syntax (sytax highlighter; not plugin related).
I am still confused. If I showed you this, I think we would both agree the curly should not be matched because what you really have is two broken curly pairs. This is invalid bracket pairs.:
({)(})
This should match fine:
({})({})
What you are showing me is the equivalent is it not?
<?php { ?><?php } ?>
or
<{><}>
Everything is generalized in BH2. It starts matching pairs and resolving them until it comes to the closest one surrounding the cursor. Isnât this what it is doing? You just have (by the generalized algorithms view) dangling curly brackets between valid angle brackets.
Now what you are wanting is some special case for PHP (which makes sense), but keep in mind BH1 couldnât resolve these issues either, and ST2 doesnât resolve them well either (if at all). HTML tags donât have this issue because they are a special case. In HTML, we just find the surrounding angles (which will always be a valid match if the tag is formatted correctly), and if they are part of a tag, we search the buffer for tags only (this is why it doesnât get confused resolving other brackets in between). But this is done with a special post_match BH plugin.
Here is another case that BH2 cannot resolve (C/C++ code). Which opening curly should it match to the closing?:
#if (SOME_SWITCH)
if (some_condition) {
#else
if (some_other_condition) {
#endif
dosomething();
}
There are some cases that BH is not going to be able handle very well. And the amount of code to tackle these issues can be quite a bit. Now PHP might be able to be resolved much easier than the C problem. I wonât touch the C problem at all. But maybe in the future I can come up with a PHP solution (maybe).
Now in regards to ctrl+m finding different brackets than BH, this is because ST2 uses a different algorithm than BH2. I can make the âjump between bracketsâ BH command work more like ctrl+m, but it will still be using BH2âs algorithm to match brackets. Currently BH2 has two separate âjump between bracketsâ commands. One jumps left, the other jumps right. ST2 just toggles between the two.
[quote]This is invalid bracket pairs.
({)(})
[/quote]
Agree, but there are some languages (PHP, probably coldfusion) that are using this kind of stuff (loops, conditions) mixed with html code.
This make the plugin or the editor less awesome? Hell no! Is just a thing that would be nice to have. If is too much trouble, let it go, focus on more important stuff, i will survive.
Btw, as a totally non-related thing, i just realized that most used addons to sublime are: Soda theme, BH and emmet/zen.
I agree. Better PHP support would really be nice to have. It is one of those things that I have stored in the back of my mind to hopefully resolve some time. Sadly it is not on the top of my list. I really have only two maybe three things left I need to get knocked out. As you can see by the recent lull I have been taking a little break after the non-stop BH code-athon. I needed to step away from it for a little. Especially since it seems pretty stable, I felt okay about that. I have been side tracked by a couple of side projects.
The last things I have on my list are:
- A reasonable way to swap brackets (specifically swap out what gets highlighted with something else), with some functionality similar to wrapping (definable regions to highlight, and definable tabstops)
- Possibly a way to define a sub bracket search to only be searched of a scope (someone made a request to search php strings for HTML tags and I am looking into allowing certain non-scope brackets to be defined that are only searched for inside scope-brackets - such as strings).
- xeno-byâs request to have a high visibility mode
// dreaming mode: on
Donât know if you ever saw xcode bracket highlight, but when cursor touch a bracket, both brackets will kinda⌠jump (you can see it in action here). Sure, Xcode is dumb and will only do this then stop highlight at all (unless you touch again brackets), which kinda sucks.
Also, when you hover the bracket on the gutter, will sort of fade out the content of the outer brackets (here).
Not a big Xcode fan (in fact i hate it) but i think itâs the nicest thing that anyone can [size=50]steal[/size] pay tribute to (because, we all know, apple never steals, they only pay tributes!)
Iâm pretty sure that these are some limitation of ST, thatâs why i used dream mode
// dreaming mode: off
[quote=âiamntzâ]// dreaming mode: on
Donât know if you ever saw xcode bracket highlight, but when cursor touch a bracket, both brackets will kinda⌠jump (you can see it in action here). Sure, Xcode is dumb and will only do this then stop highlight at all (unless you touch again brackets), which kinda sucks.
Also, when you hover the bracket on the gutter, will sort of fade out the content of the outer brackets (here).
Not a big Xcode fan (in fact i hate it) but i think itâs the nicest thing that anyone can [size=50]steal[/size] pay tribute to (because, we all know, apple never steals, they only pay tributes!)
Iâm pretty sure that these are some limitation of ST, thatâs why i used dream mode
// dreaming mode: off[/quote]
There are a lot of things I would love to do if the API would let me. Sadly it wonât let me do everything I would like.
The second demo is essentially what xeno-by wants. I canât do it like that though (regions sizes are limited by actual code text, so no perfect boxes, just text regions, and it kills syntax highlighting when with the region overlaid; also, canât trigger on hover events, so must make a toggle keybinding etc.). But if you really want to briefly use a high visibility mode, I can see how it would be useful which is why I have it on my list.
Update:
-Added high visibility mode (a mode that can be toggled to make bracket extent clearly visible). Essentially it just highlights the entire bracket block. It isnât meant to be run all the time, mainly just for times where you really need to see the extent of the the bracket block very clearly.
An example done in different styles.
High visibility mode uses one highlight style for all brackets, but it inherits the brackets icons, and can optionally inherit the color as well.
The other update is one that will affect your settings file. I changed the find_in_sub_search in the bracket definitions to be a string variable instead of a boolean. So do this to all of the bracket definitions in your User settings file if they have this setting:
[pre=#151515] // Change this
âfind_in_sub_searchâ: true,
// To this
"find_in_sub_search": "true",[/pre]
Now find_in_sub_search can be set to âtrueâ, âfalseâ, âonlyâ.
BracketHighlighter is officially bumped to BETA status. There should be no more settings format changes now that this is in BETA.
The last and only feature on my list is the bracket swapping.
Having recently started writing Clojure in Sublime, Iâd like to thank you for this plugin
Clojure, eh? I can see why this would be helpful . Glad I could help make your task a little easier.
Added Bracket Swapping plugin support. Also changed some things in the wrapping plugin and bracket plugin loading.
First:
If you have custom wrapping settings you need to be aware of wrapping definition changes. I made the insert_style setting an array of strings opposed to string. This allows me to consolidate redundant settings info. So now if you define only one insert style, it will automatically be applied. If the definition as more than one, it will prompt you to pick one of the styles. This way, only one bracket entry appears in the menu, and then when you select it, you will be prompted for how you wish to apply the wrapping only if there are multiple options.
Old way:
{"name": "HTML/XML Tag", "brackets": "<${BH_SEL:NAME}>", "</${BH_SEL:NAME}>"]},
{"name": "HTML/XML Tag - Block", "brackets": "<${BH_SEL:NAME}>", "</${BH_SEL:NAME}>"], "insert_style": "block"},
{"name": "HTML/XML Tag - Block Indent", "brackets": "<${BH_SEL:NAME}>", "</${BH_SEL:NAME}>"], "insert_style": "indent_block"}
New way:
{"name": "HTML/XML Tag", "brackets": "<${BH_SEL:NAME}>", "</${BH_SEL:NAME}>"], "insert_style": "inline", "block", "indent_block"]}
So if you have custom wrapping settings, change all of your insert_style settings to an array, even if you are defining only one entry.
Second:
When you update your branch, you should probably restart ST2 because I changed the modules that import the bracket plugins. It may act strange or even stop working until you restart.
Third:
Swapping should be pretty straight forward. It leverages the bracket remove and bracket wrapping plugin to apply bracket swapping. You can check out the swapping definitions in bh_swapping.sublime-settings. Swapping definitions are defined exactly like wrapping definitions, but insert_style will be ignored. Swapping does an inline bracket remove followed by an inline wrapping.
That is it. Now it is time to start doing all the documentation. All planned features are in. As always, you can report bugs etc. here or on Github.
Once I get all the documentation done, and I am certain there are no major bugs, I will be prepping for the official release.
Iâm looking for any plugin to match if / endif foreach / endforeach. Just installed BracketHighlighter from control panel but it doesnât work.
I see many posts in this thread with promising settings like this:
{
"name": "php_keywords",
"open": "^\\s*\\b(if|foreach|while)\\b(?=.*:$)",
"close": "^\\s*\\b(endif\\b|endforeach\\b|endwhile(?=;$))",
"icon": "dot",
"color": "brackethighlighter.tag",
"style": "underline",
"language_filter": "whitelist",
"scope_exclude": "string", "comment"],
"language_list": "HTML", "HTML 5", "XML", "PHP", "HTML+CFML", "ColdFusion", "ColdFusionCFC"],
"plugin_library": "User.phpkeywords",
"enabled": true
},
âŚbut please tell me, where I should put this settings??? I can find no info about it. Settings file BracketHighlighter.sublime-settings have another formatting style.
Cant find it here too github.com/facelessuser/BracketHighlighter
No info in readme file
The default install of BracketHighlighter doesnât do the custom stuff, that branch is still in beta. Did you install the Beta BH2 branch? Or whatever Package Control installed for you (the master/default branch)?
You the can see this thread here for upgrading in Package Control github.com/facelessuser/Bracket ⌠r/tree/BH2. Package Control was having some weird upgrade issues for a bit when you define your own branch, but hopefully it is fixed now.
Just installed BH2 from Github⌠but still dont know where can I configure IF/ENDIF FOR/ENDFOR matching?