jEdit Community - Resources for users of the jEdit Text Editor
Make XML plugin play better with Beauty plugin
Submitted by xhq on Friday, 29 February, 2008 - 14:25
Hi,

I installed XML plugin and it automatically installed Beauty plugin. I tried to use beauty to use XML:XMLIntender to format an XML file but just found they can not work well together. Here is the mail I sent the other day. I post it here in hope some one can notice it.

The problem:

When invoked from Beauty plugin, incorrect IndentAmount could be used. For example, in the buffer optios, I set "Tab width" to 8 and "Indent width" to 8 and uncheck "Soft (emulated with spaces) tabs", the result IndentAmount would be 8 tabs!

I checked the code of both Beaty and XML. It seems the XML code needs to be improved. Here is the details:

In XML/xml//indent/XmlBeautifier.java, the main line reads:

return XmlIndenterPlugin.indent(text, getIndentWidth(), !getUseSoftTabs());

But the same indent() api is used in the following way, in XML/xml/indent/XmlIndenterPlugin.java, public static void indentXml( View view ):

String resultString = XmlIndenterPlugin.indent( inputString, indentAmount, indentWithTabs );

where indentAmount is calculated using:

private static int getIndentAmount( boolean indentWithTabs, Buffer buffer ) {
if ( indentWithTabs ) {
return buffer.getIndentSize() / buffer.getTabSize();
}
else {
return buffer.getIndentSize();
}
}

So, I think the same logic used in getIndentAmount() should be applied in XmlBeautifier. It might be worth adding a new static method to XmlIndenterPlugin:

public static int getIndentAmount(int indentSize, int tabSize, boolean indentWithTabs) {
if ( indentWithTabs ) {
return indentSize/ tabSize;
}
else {
return indentSize;
}
}

and refactor the original one as:

private static int getIndentAmount( boolean indentWithTabs, Buffer buffer ) {
return getIndentAmount(buffer.getIndentSize(), buffer.getTabSize(), indentWithTabs);
}

Then the line in XmlBeautifier will be:

int indentAmount = XmlIndenterPlugin.getIndentAmount(getIndentWidth(), getTabWidth(), !getUseSoftTabs());
return XmlIndenterPlugin.indent(text, indentAmount , !getUseSoftTabs());

I think this will work, but have not test it though.
User login
Browse archives
« April 2024  
MoTuWeThFrSaSu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
Poll
Are you interested in language packs for jEdit?
Yes, and I could help maintain translations
26%
Yes, I'd like to have translations
32%
Indifferent
35%
No, that'd be bad (please comment)
7%
Total votes: 1093
Syndication
file   ver   dls
German Localization light   4.4.2.1   82348
Context Free Art (*.cfdg)   0.31   46055
JBuilder scheme   .001   18495
BBEdit scheme   1.0   18116
ColdFusion scheme   1.0   18024
R Edit Mode - extensive version   0.1   17473
Advanced HTML edit mode   1.0   16206
Matlab Edit Mode   1.0   16068
jEdit XP icons   1.0   15229
XP icons for jEdit   1.1   14293