Make XML plugin play better with Beauty plugin
Submitted by Friday, 29 February, 2008 - 14:25
on
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.
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.