From: <ez...@us...> - 2006-07-15 03:18:37
|
Revision: 332 Author: ezust Date: 2006-07-14 20:18:31 -0700 (Fri, 14 Jul 2006) ViewCVS: http://svn.sourceforge.net/jedit/?rev=332&view=rev Log Message: ----------- Modified Paths: -------------- plugins/XML/trunk/XML.props plugins/XML/trunk/actions.xml plugins/XML/trunk/build.xml plugins/XML/trunk/csssidekick/CssSideKickParser.java plugins/XML/trunk/csssidekick/CssSideKickPlugin.java plugins/XML/trunk/services.xml plugins/XML/trunk/users-guide.xml Added Paths: ----------- plugins/XML/trunk/csssidekick/ plugins/XML/trunk/xml/completion/css-complete.xml Modified: plugins/XML/trunk/XML.props =================================================================== --- plugins/XML/trunk/XML.props 2006-07-05 17:49:32 UTC (rev 331) +++ plugins/XML/trunk/XML.props 2006-07-15 03:18:31 UTC (rev 332) @@ -2,7 +2,7 @@ plugin.xml.XmlPlugin.activate=defer plugin.xml.XmlPlugin.name=XML plugin.xml.XmlPlugin.author=Slava Pestov, Alan Ezust -plugin.xml.XmlPlugin.version=1.0.1 +plugin.xml.XmlPlugin.version=1.1 plugin.xml.XmlPlugin.docs=index.html plugin.xml.XmlPlugin.depend.0=jedit 04.03.05.00 @@ -25,6 +25,10 @@ - \ xml-clear-cache \ xml-reload-catalogs + - \ + csssidekick-reload-completion-config \ + csssidekick-insert-relative-path + xml-match-tag.label=Go to Matching Tag xml-insert.label=XML Insert xml-edit-tag.label=Edit Tag at Caret... @@ -37,8 +41,10 @@ xml-reload-catalogs.label=Reload Catalogs # Option panes -plugin.xml.XmlPlugin.option-group=xml.catalogs xml.general +plugin.xml.XmlPlugin.option-group=xml.general csssidekick.option-pane xml.catalogs +# {{{ XML options + options.xml.catalogs.label=Catalogs options.xml.catalogs.code=new xml.options.CatalogsOptionPane(); options.xml.catalogs.caption=Catalog files to import: @@ -68,6 +74,7 @@ sidekick.parser.xml.label=XML mode.xml.sidekick.parser=xml mode.xsl.sidekick.parser=xml +mode.css.sidekick.parser=css # Show attributes in XML tree? # 0: none; 1: id only; 2: all @@ -107,6 +114,8 @@ xml.completion.glob.2.key=build-*.xml xml.completion.glob.2.value=jeditresource:/XML.jar!/xml/completion/ant-complete.xml +xml.completion.glob.3.key=*.css +xml.completion.glob.3.value=jeditresource:/XML.jar!/xml/completion/css-complete.xml xml.completion.namespace.0.key=http://www.w3.org/1999/XMLSchema xml.completion.namespace.0.value=jeditresource:/XML.jar!/xml/completion/xsd-complete.xml @@ -126,6 +135,8 @@ xml.completion.namespace.5.key=http://www.w3.org/1999/XSL/Format xml.completion.namespace.5.value=jeditresource:/XML.jar!/xml/completion/fo-complete.xml + + mode.asp.xml.completion-info=jeditresource:/XML.jar!/xml/completion/html-complete.xml mode.coldfusion.xml.completion-info=jeditresource:/XML.jar!/xml/completion/html-complete.xml mode.html.xml.completion-info=jeditresource:/XML.jar!/xml/completion/html-complete.xml @@ -177,3 +188,41 @@ \n\ If you want resources to be downloaded every time without prompting,\n\ disable the resource cache in the XML plugin options. + +# }}} +# {{{ CSS Options +options.csssidekick.option-pane.label=CSS SideKick +options.csssidekick.option-pane.code=new csssidekick.CssSideKickOptionPane(); + +# actions labels +csssidekick-reload-completion-config.label=Reload completion config +csssidekick-insert-relative-path.label=Insert relative path + +# sidekick +sidekick.parser.CssSidekick.label=CssSideKick +mode.css.sidekick.parser=CssSidekick + + +# errors +csssidekick.config-io-error.title=CssSideKick: completion config IO error +csssidekick.config-io-error.message={0} + +csssidekick.config-xml-error.title=CssSideKick: completion config XML error +csssidekick.config-xml-error.message={0} + + +# options +options.csssidekick.completion-config.title=XML file containing competion config +options.csssidekick.completion-config=css-complete.xml + +options.csssidekick.quote.title=Use single quotes instead of double +options.csssidekick.quote=' + +options.csssidekick.colon.title=Insert colon when property is completed +options.csssidekick.colon=true + +options.csssidekick.space-after-colon.title=Insert space after colon when property is completed +options.csssidekick.space-after-colon=true + + +# }}} Modified: plugins/XML/trunk/actions.xml =================================================================== --- plugins/XML/trunk/actions.xml 2006-07-05 17:49:32 UTC (rev 331) +++ plugins/XML/trunk/actions.xml 2006-07-15 03:18:31 UTC (rev 332) @@ -1,6 +1,17 @@ <?xml version="1.0"?> <!DOCTYPE ACTIONS SYSTEM "actions.dtd"> <ACTIONS> + <ACTION NAME="csssidekick-reload-completion-config"> + <CODE> + csssidekick.CssSideKickCompletion.initialize(); + </CODE> + </ACTION> + <ACTION NAME="csssidekick-insert-relative-path"> + <CODE> + csssidekick.Utils.insertRelativePathToBuffer(); + </CODE> + </ACTION> + <!-- commands invoked by user input --> <ACTION NAME="xml-insert-closing-tag"> <CODE> Modified: plugins/XML/trunk/build.xml =================================================================== --- plugins/XML/trunk/build.xml 2006-07-05 17:49:32 UTC (rev 331) +++ plugins/XML/trunk/build.xml 2006-07-15 03:18:31 UTC (rev 332) @@ -21,7 +21,7 @@ <import file="${build.support}/plugin-build.xml" /> - <property name="javadoc.packagenames" value="xml.*" /> + <property name="javadoc.packagenames" value="xml.*, csssidekick.*" /> <property name="compiler.source" value="1.4" /> <property name="compiler.target" value="1.4" /> Copied: plugins/XML/trunk/csssidekick (from rev 331, plugins/CssSideKick/csssidekick) Modified: plugins/XML/trunk/csssidekick/CssSideKickParser.java =================================================================== --- plugins/CssSideKick/csssidekick/CssSideKickParser.java 2006-07-05 17:49:32 UTC (rev 331) +++ plugins/XML/trunk/csssidekick/CssSideKickParser.java 2006-07-15 03:18:31 UTC (rev 332) @@ -44,7 +44,7 @@ //{{{ CssSideKickParser constructor public CssSideKickParser() { - super("CssSideKickParser"); + super("css"); } //}}} //{{{ parse() method Modified: plugins/XML/trunk/csssidekick/CssSideKickPlugin.java =================================================================== --- plugins/CssSideKick/csssidekick/CssSideKickPlugin.java 2006-07-05 17:49:32 UTC (rev 331) +++ plugins/XML/trunk/csssidekick/CssSideKickPlugin.java 2006-07-15 03:18:31 UTC (rev 332) @@ -21,13 +21,8 @@ package csssidekick; -import org.gjt.sp.jedit.EditPlugin; - - -public class CssSideKickPlugin extends EditPlugin { +public class CssSideKickPlugin { public static final String NAME = "csssidekick"; public static final String OPTION_PREFIX = "options.csssidekick."; - public void start(){super.start();} - public void stop(){} } Modified: plugins/XML/trunk/services.xml =================================================================== --- plugins/XML/trunk/services.xml 2006-07-05 17:49:32 UTC (rev 331) +++ plugins/XML/trunk/services.xml 2006-07-15 03:18:31 UTC (rev 332) @@ -3,6 +3,9 @@ <!DOCTYPE SERVICES SYSTEM "services.dtd"> <SERVICES> + <SERVICE NAME="css" CLASS="sidekick.SideKickParser"> + new csssidekick.CssSideKickParser(); + </SERVICE> <SERVICE CLASS="sidekick.SideKickParser" NAME="xml"> new xml.parser.SAXParserImpl(); </SERVICE> Modified: plugins/XML/trunk/users-guide.xml =================================================================== --- plugins/XML/trunk/users-guide.xml 2006-07-05 17:49:32 UTC (rev 331) +++ plugins/XML/trunk/users-guide.xml 2006-07-15 03:18:31 UTC (rev 332) @@ -4,7 +4,7 @@ <!-- (C) 2005, 2006 Alan Ezust --> <!-- Look ma, no DTD! --> <book xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation='http://www.docbook.org/xsd/4.4/docbook.xsd'> + xsi:noNamespaceSchemaLocation='http://www.docbook.org/xsd/4.4/docbook.xsd' > <title>XML plugin user's guide</title> <bookinfo> @@ -12,6 +12,7 @@ <authorgroup> <author><firstname>Slava</firstname><surname>Pestov</surname></author> <author><firstname>Alan</firstname><surname>Ezust</surname></author> + <author><firstname>Jakub</firstname><surname>Rozto?il</surname></author> </authorgroup> <legalnotice><title>Legal Notice</title> @@ -556,6 +557,13 @@ <appendix id="changes"> <title>Change log</title> <itemizedlist> + <listitem><para><emphasis role="bold">Version 1.0</emphasis> Requires jEdit 4.3pre5, Java 1.4, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. + <itemizedlist> + <listitem><para> Incorporated CssSideKick ( ) </para></listitem> + </itemizedlist> + </para> + </listitem> + <listitem><para><emphasis role="bold">Version 1.0</emphasis> Requires jEdit 4.3pre5, Java 1.4, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. <itemizedlist> <listitem><para> Match tag also matches brackets. </para></listitem> Added: plugins/XML/trunk/xml/completion/css-complete.xml =================================================================== --- plugins/XML/trunk/xml/completion/css-complete.xml (rev 0) +++ plugins/XML/trunk/xml/completion/css-complete.xml 2006-07-15 03:18:31 UTC (rev 332) @@ -0,0 +1,661 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE cssCompletion [ + <!ELEMENT cssCompletion (units,valueSets, properties)> + <!ELEMENT units (unit+)> + <!ELEMENT unit (#PCDATA)> + <!ELEMENT properties (property+)> + <!ELEMENT valueSets (valueSet*)> + <!ELEMENT valueSet (value+)> + <!ELEMENT property ((include*, value*)+)> + <!ELEMENT value (#PCDATA)> + <!ELEMENT include EMPTY> + <!ATTLIST include name IDREF #REQUIRED> + <!ATTLIST property name ID #REQUIRED> + <!ATTLIST valueSet name ID #REQUIRED> +]> +<cssCompletion> + <units> + <unit>%</unit> + <unit>cm</unit> + <unit>em</unit> + <unit>ex</unit> + <unit>in</unit> + <unit>mm</unit> + <unit>pc</unit> + <unit>pt</unit> + <unit>px</unit> + </units> + <valueSets> + + <valueSet name="color-values"> + <value>maroon</value> + <value>red</value> + <value>orange</value> + <value>yellow</value> + <value>olive</value> + <value>purple</value> + <value>fuchsia</value> + <value>white</value> + <value>lime</value> + <value>green</value> + <value>navy</value> + <value>blue</value> + <value>aqua</value> + <value>teal</value> + <value>black</value> + <value>silver</value> + <value>gray</value> + <value>transparent</value> + </valueSet> + + <!-- BORDERS --> + <valueSet name="border-style-values"> + <value>none</value> + <value>hidden</value> + <value>dotted</value> + <value>dashed</value> + <value>solid</value> + <value>double</value> + <value>groove</value> + <value>ridge</value> + <value>inset</value> + <value>outset</value> + </valueSet> + <valueSet name="border-width-values"> + <value>thin</value> + <value>medium</value> + <value>thick</value> + </valueSet> + + <!-- BACKGROUNDS --> + <valueSet name="background-position-values"> + <value>center</value> + <value>bottom</value> + <value>left</value> + <value>right</value> + <value>top</value> + </valueSet> + <valueSet name="background-attachment-values"> + <value>scroll</value> + <value>fixed</value> + </valueSet> + <valueSet name="background-repeat-values"> + <value>repeat</value> + <value>repeat-x</value> + <value>repeat-y</value> + <value>no-repeat</value> + </valueSet> + <valueSet name="background-image-values"> + <value>url</value> + <value>none</value> + </valueSet> + + <!-- FONTS --> + <valueSet name="font-family-generic"> + <value>cursive</value> + <value>fantasy</value> + <value>monospace</value> + <value>sans-serif</value> + <value>serif</value> + </valueSet> + <valueSet name="font-size-keywords"> + <value>xx-small</value> + <value>x-small</value> + <value>small</value> + <value>medium</value> + <value>large</value> + <value>x-large</value> + <value>xx-large</value> + <value>larger</value> + <value>smaller</value> + </valueSet> + <valueSet name="font-weight-values"> + <value>normal</value> + <value>bold</value> + <value>bolder</value> + <value>lighter</value> + <value>100</value> + <value>200</value> + <value>300</value> + <value>400</value> + <value>500</value> + <value>600</value> + <value>700</value> + <value>800</value> + <value>900</value> + </valueSet> + <valueSet name="font-style-values"> + <value>normal</value> + <value>italic</value> + <value>oblique</value> + <value>inherit</value> + </valueSet> + <valueSet name="font-variant-values"> + <value>normal</value> + <value>small-caps</value> + </valueSet> + <valueSet name="line-height-values"> + <value>normal</value> + </valueSet> + + <!-- LISTS --> + <valueSet name="list-style-image-values"> + <value>url</value> + <value>none</value> + </valueSet> + <valueSet name="list-style-position-values"> + <value>inside</value> + <value>outside</value> + </valueSet> + <valueSet name="list-style-type-values"> + <value>disc</value> + <value>circle</value> + <value>square</value> + <value>decimal</value> + <value>decimal-leading-zero</value> + <value>lower-roman</value> + <value>upper-roman</value> + <value>lower-greek</value> + <value>lower-latin</value> + <value>upper-latin</value> + <value>armenian</value> + <value>georgian</value> + <value>lower-alpha</value> + <value>upper-alpha</value> + <value>none</value> + </valueSet> + + <!-- PRINT --> + <valueSet name="page-break-common"> + <value>avoid</value> + <value>auto</value> + <value>inherit</value> + </valueSet> + <valueSet name="page-break-other"> + <value>always</value> + <value>left</value> + <value>right</value> + </valueSet> + <!-- PADDING + MARGIN --> + <valueSet name="margin-values"> + <value>auto</value> + <value>inherit</value> + </valueSet> + + </valueSets> + <properties> + <property name="background"> + <include name="background-position-values" /> + <include name="background-attachment-values" /> + <include name="background-image-values" /> + <include name="background-repeat-values" /> + <include name="color-values" /> + <value>inherit</value> + </property> + <property name="background-attachment"> + <include name="background-attachment-values" /> + <value>inherit</value> + </property> + <property name="background-color"> + <include name="color-values" /> + <value>inherit</value> + </property> + <property name="background-image"> + <include name="background-image-values" /> + <value>inherit</value> + </property> + <property name="background-position"> + <include name="background-position-values" /> + <value>inherit</value> + </property> + <property name="background-repeat"> + <include name="background-repeat-values" /> + <value>inherit</value> + </property> + <property name="border-collapse"> + <value>collapse</value> + <value>separate</value> + <value>inherit</value> + </property> + <property name="border-color"> + <include name="color-values" /> + </property> + <property name="border-spacing"> + <value>inherit</value> + </property> + <property name="border-style"> + <include name="border-style-values" /> + <value>inherit</value> + </property> + <property name="border-top"> + <include name="border-style-values" /> + <include name="border-width-values" /> + <include name="color-values" /> + <value>inherit</value> + </property> + <property name="border-right"> + <include name="border-style-values" /> + <include name="border-width-values" /> + <include name="color-values" /> + <value>inherit</value> + </property> + <property name="border-bottom"> + <include name="border-style-values" /> + <include name="border-width-values" /> + <include name="color-values" /> + <value>inherit</value> + </property> + <property name="border-left"> + <include name="border-style-values" /> + <include name="border-width-values" /> + <include name="color-values" /> + <value>inherit</value> + </property> + <property name="border-top-color"> + <include name="color-values" /> + </property> + <property name="border-right-color"> + <include name="color-values" /> + </property> + <property name="border-bottom-color"> + <include name="color-values" /> + </property> + <property name="border-left-color"> + <include name="color-values" /> + </property> + + <property name="border-top-style"> + <include name="border-style-values" /> + <value>inherit</value> + </property> + <property name="border-right-style"> + <include name="border-style-values" /> + <value>inherit</value> + </property> + <property name="border-bottom-style"> + <include name="border-style-values" /> + <value>inherit</value> + </property> + <property name="border-left-style"> + <include name="border-style-values" /> + <value>inherit</value> + </property> + + <property name="border-top-width"> + <include name="border-width-values" /> + <value>inherit</value> + </property> + <property name="border-right-width"> + <include name="border-width-values" /> + <value>inherit</value> + </property> + <property name="border-bottom-width"> + <include name="border-width-values" /> + <value>inherit</value> + </property> + <property name="border-left-width"> + <include name="border-width-values" /> + <value>inherit</value> + </property> + + <property name="border-width"> + <include name="border-width-values" /> + <value>inherit</value> + </property> + <property name="border"> + <include name="border-style-values" /> + <include name="border-width-values" /> + <include name="color-values" /> + <value>inherit</value> + </property> + <property name="bottom"> + <value>auto</value> + <value>inherit</value> + </property> + <property name="caption-side"> + <value>top</value> + <value>bottom</value> + <value>inherit</value> + </property> + <property name="clear"> + <value>both</value> + <value>left</value> + <value>none</value> + <value>right</value> + <value>inherit</value> + </property> + <property name="clip"> + <value>auto</value> + <value>shape</value> + <value>inherit</value> + </property> + <property name="color"> + <include name="color-values" /> + <value>inherit</value> + </property> + <property name="content"> + <value>normal</value> + <value>none</value> + <value>url</value> + <value>counter</value> + <value>attr</value> + <value>open-quote</value> + <value>close-quote</value> + <value>no-open-quote</value> + <value>no-close-quote</value> + <value>inherit</value> + </property> + <property name="counter-increment"> + <value>inherit</value> + </property> + <property name="counter-reset"> + <value>inherit</value> + </property> + <property name="cursor"> + <value>url</value> + <value>auto</value> + <value>crosshair</value> + <value>default</value> + <value>pointer</value> + <value>move</value> + <value>e-resize</value> + <value>ne-resize</value> + <value>nw-resize</value> + <value>n-resize</value> + <value>se-resize</value> + <value>sw-resize</value> + <value>s-resize</value> + <value>w-resize</value> + <value>text</value> + <value>wait</value> + <value>help</value> + <value>progress</value> + <value>inherit</value> + </property> + <property name="direction"> + <value>ltr</value> + <value>rtl</value> + <value>inherit</value> + </property> + <property name="display"> + <value>inline</value> + <value>block</value> + <value>list-item</value> + <value>run-in</value> + <value>inline-block</value> + <value>table</value> + <value>inline-table</value> + <value>table-row-group</value> + <value>table-header-group</value> + <value>table-footer-group</value> + <value>table-row</value> + <value>table-column-group</value> + <value>table-column</value> + <value>table-cell</value> + <value>table-caption</value> + <value>none</value> + <value>inherit</value> + </property> + <property name="empty-cells"> + <value>show</value> + <value>hide</value> + <value>inherit</value> + </property> + <property name="float"> + <value>left</value> + <value>right</value> + <value>none</value> + <value>inherit</value> + </property> + <property name="font"> + <include name="font-size-keywords" /> + <include name="font-weight-values" /> + <include name="font-style-values" /> + <include name="font-variant-values" /> + <include name="line-height-values" /> + <value>font-family</value> + + <value>caption</value> + <value>icon</value> + <value>menu</value> + <value>message-box</value> + <value>small-caption</value> + <value>status-bar</value> + <value>inherit</value> + </property> + <property name="font-family"> + <include name="font-family-generic" /> + <value>family-name</value> + <value>inherit</value> + </property> + <property name="font-size"> + <include name="font-size-keywords" /> + <value>inherit</value> + </property> + <property name="font-style"> + <include name="font-style-values" /> + </property> + <property name="font-variant"> + <include name="font-variant-values" /> + <value>inherit</value> + </property> + <property name="font-weight"> + <include name="font-weight-values" /> + <value>inherit</value> + </property> + <property name="height"> + <value>auto</value> + <value>inherit</value> + </property> + <property name="left"> + <value>auto</value> + <value>inherit</value> + </property> + <property name="letter-spacing"> + <value>normal</value> + <value>inherit</value> + </property> + <property name="line-height"> + <include name="line-height-values" /> + <value>inherit</value> + </property> + <property name="list-style-image"> + <include name="list-style-image-values" /> + <value>inherit</value> + </property> + <property name="list-style-position"> + <include name="list-style-position-values" /> + <value>inherit</value> + </property> + <property name="list-style-type"> + <include name="list-style-type-values" /> + <value>inherit</value> + </property> + <property name="list-style"> + <include name="list-style-type-values" /> + <include name="list-style-position-values" /> + <include name="list-style-image-values" /> + <value>inherit</value> + </property> + <property name="margin"> + <include name="margin-values" /> + </property> + <property name="margin-top"> + <include name="margin-values" /> + </property> + <property name="margin-right"> + <include name="margin-values" /> + </property> + <property name="margin-bottom"> + <include name="margin-values" /> + </property> + <property name="margin-left"> + <include name="margin-values" /> + </property> + <property name="max-height"> + <value>none</value> + <value>inherit</value> + </property> + <property name="max-width"> + <value>none</value> + <value>inherit</value> + </property> + <property name="min-height"> + <value>inherit</value> + </property> + <property name="min-width"> + <value>inherit</value> + </property> + <property name="orphans"> + <value>inherit</value> + </property> + <property name="outline-color"> + <include name="color-values" /> + </property> + <property name="outline-style"> + <include name="border-style-values" /> + <value>inherit</value> + </property> + <property name="outline-width"> + <include name="border-width-values" /> + <value>inherit</value> + </property> + <property name="outline"> + <include name="color-values" /> + <include name="border-style-values" /> + <include name="border-width-values" /> + <value>inherit</value> + </property> + <property name="overflow"> + <value>visible</value> + <value>hidden</value> + <value>scroll</value> + <value>auto</value> + <value>inherit</value> + </property> + <property name="padding"> + <value>inherit</value> + </property> + <property name="padding-top"> + <value>inherit</value> + </property> + <property name="padding-right"> + <value>inherit</value> + </property> + <property name="padding-bottom"> + <value>inherit</value> + </property> + <property name="padding-left"> + <value>inherit</value> + </property> + <property name="page-break-after"> + <include name="page-break-common" /> + <include name="page-break-other" /> + </property> + <property name="page-break-before"> + <include name="page-break-common" /> + <include name="page-break-other" /> + </property> + <property name="page-break-inside"> + <include name="page-break-common" /> + </property> + <property name="position"> + <value>static</value> + <value>relative</value> + <value>absolute</value> + <value>fixed</value> + <value>inherit</value> + </property> + <property name="quotes"> + <value>none</value> + <value>inherit</value> + </property> + <property name="right"> + <value>auto</value> + <value>inherit</value> + </property> + <property name="table-layout"> + <value>auto</value> + <value>fixed</value> + <value>inherit</value> + </property> + <property name="text-align"> + <value>left</value> + <value>right</value> + <value>center</value> + <value>justify</value> + <value>inherit</value> + </property> + <property name="text-decoration"> + <value>none</value> + <value>underline</value> + <value>overline</value> + <value>line-through</value> + <value>blink</value> + <value>inherit</value> + </property> + <property name="text-indent"> + <value>inherit</value> + </property> + <property name="text-transform"> + <value>capitalize</value> + <value>uppercase</value> + <value>lowercase</value> + <value>none</value> + <value>inherit</value> + </property> + <property name="top"> + <value>auto</value> + <value>inherit</value> + </property> + <property name="unicode-bidi"> + <value>normal</value> + <value>embed</value> + <value>bidi-override</value> + <value>inherit</value> + </property> + <property name="vertical-align"> + <value>baseline</value> + <value>sub</value> + <value>super</value> + <value>top</value> + <value>text-top</value> + <value>middle</value> + <value>bottom</value> + <value>text-bottom</value> + <value>percentage</value> + <value>inherit</value> + </property> + <property name="visibility"> + <value>visible</value> + <value>hidden</value> + <value>collapse</value> + <value>inherit</value> + </property> + <property name="white-space"> + <value>normal</value> + <value>pre</value> + <value>nowrap</value> + <value>pre-wrap</value> + <value>pre-line</value> + <value>inherit</value> + </property> + <property name="widows"> + <value>integer</value> + <value>inherit</value> + </property> + <property name="width"> + <value>percentage</value> + <value>auto</value> + <value>inherit</value> + </property> + <property name="word-spacing"> + <value>normal</value> + <value>inherit</value> + </property> + <property name="z-index"> + <value>auto</value> + <value>inherit</value> + </property> + </properties> +</cssCompletion> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2006-07-15 03:44:45
|
Revision: 333 Author: ezust Date: 2006-07-14 20:44:36 -0700 (Fri, 14 Jul 2006) ViewCVS: http://svn.sourceforge.net/jedit/?rev=333&view=rev Log Message: ----------- Moved HTMLSidekick into XML Modified Paths: -------------- plugins/XML/trunk/XML.props plugins/XML/trunk/actions.xml plugins/XML/trunk/build.xml plugins/XML/trunk/services.xml Added Paths: ----------- plugins/XML/trunk/docs/ plugins/XML/trunk/docs/htmlsidekick.html plugins/XML/trunk/docs/users-guide.xml plugins/XML/trunk/sidekick/ Removed Paths: ------------- plugins/XML/trunk/users-guide.xml Modified: plugins/XML/trunk/XML.props =================================================================== --- plugins/XML/trunk/XML.props 2006-07-15 03:18:31 UTC (rev 332) +++ plugins/XML/trunk/XML.props 2006-07-15 03:44:36 UTC (rev 333) @@ -226,3 +226,40 @@ # }}} +# {{{ HTMLSideKick props + +# popup menu +sidekick-tree.html.menu=htmlsidekick-showall htmlsidekick-expandall +htmlsidekick-showall.label=Show All +htmlsidekick-expandall.label=Expand All + + +# action labels +htmlsidekick-gotodockable.label=Go to structure browser +htmlsidekick-match-tag.label=Go to Matching Tag + + +# registration with SideKick as a mode parser +sidekick.parser.html.label=html +mode.html.sidekick.parser=html +mode.jsp.sidekick.parser=html + +# Global Plugin Options +plugin.sidekick.html.HtmlSideKickPlugin.option-pane=sidekick.html +options.sidekick.html.label=HtmlSideKick +options.sidekick.html.code=new sidekick.html.HtmlOptionPane() +options.sidekick.html.panel_label=HtmlSideKick Settings + +# option labels: +options.sidekick.html.showAttributes.label=Show Attributes +options.sidekick.html.showTagAttributes.label=Tag Attributes +options.sidekick.html.showCoreAttributes.label=Core Attributes +options.sidekick.html.showLangAttributes.label=Language Attributes +options.sidekick.html.showScriptAttributes.label=Script Attributes +options.sidekick.html.showBrackets.label=Show tags with < and > +options.sidekick.html.showAllElements.label=Show All HTML Tags +options.sidekick.html.showBlockElements.label=Show Block HTML Tags only +options.sidekick.html.showJspElements.label=Show JSP Tags + + +# }}} Modified: plugins/XML/trunk/actions.xml =================================================================== --- plugins/XML/trunk/actions.xml 2006-07-15 03:18:31 UTC (rev 332) +++ plugins/XML/trunk/actions.xml 2006-07-15 03:44:36 UTC (rev 333) @@ -11,6 +11,11 @@ csssidekick.Utils.insertRelativePathToBuffer(); </CODE> </ACTION> + <ACTION NAME="htmlsidekick-showall" NO_REPEAT="TRUE"> + <CODE> + sidekick.html.HtmlSideKickPlugin.toggleShowAll(view); + </CODE> + </ACTION> <!-- commands invoked by user input --> <ACTION NAME="xml-insert-closing-tag"> Modified: plugins/XML/trunk/build.xml =================================================================== --- plugins/XML/trunk/build.xml 2006-07-15 03:18:31 UTC (rev 332) +++ plugins/XML/trunk/build.xml 2006-07-15 03:44:36 UTC (rev 333) @@ -15,7 +15,7 @@ <project name="XML" default="jar" basedir="."> <property file="../build.properties"/> - <property name="user-doc.xml" location = "users-guide.xml"/> + <property name="build.support" value="../../build-support" /> @@ -28,11 +28,10 @@ <property name="build.dir" value="build"/> <property name="install.dir" value="../"/> - <selector id="extraFiles"> + <selector id="packageFiles"> <or> - <filename name="*.xml" /> - <filename name="*.props" /> + <filename name="docs/*.html" /> <filename name="xml/**/*.xml" /> <filename name="xml/**/catalog" /> <filename name="xml/**/*.xsd" /> @@ -40,8 +39,6 @@ <filename name="xml/**/*.mod" /> <filename name="xml/**/*.png" /> <filename name="xml/**/*.dtd" /> - <filename name="*LICENSE*" /> - <filename name="*README*" /> </or> </selector> Copied: plugins/XML/trunk/docs/htmlsidekick.html (from rev 331, plugins/HtmlSideKick/trunk/src/docs/index.html) =================================================================== --- plugins/XML/trunk/docs/htmlsidekick.html (rev 0) +++ plugins/XML/trunk/docs/htmlsidekick.html 2006-07-15 03:44:36 UTC (rev 333) @@ -0,0 +1,130 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd"> +<html> + + <head> + <title>HtmlSideKick</title> + </head> + + <body bgcolor="#FFFFFF"> + <table bgcolor="#CCCCFF" summary="Header" cellspacing="0" border="0" width="100%" cols="2" /> + <tr width="100%"> + <td valign="TOP"><strong><font size="+2">HtmlSideKick</font></strong></td> + <td valign="TOP" align="RIGHT"> + <font size="-1"> + <p><strong>Version @@build.num@@ (@@tstamp@@)</strong> + <p><strong>Author: Dale Anson</strong> + <p>based on an HTML grammar for javacc by Brian Goetz, Quiotix</font> + </td> + </tr> + </table> + <table summary="Introduction" border=0 cellspacing=0 cellpadding=3 width="100%"> + <tr align=CENTER width="100%"> + <td bgcolor="#7FB2FF" width="100%"> + <strong><font color="#FFFFFF" size="+1"><a name=intro>Introduction</a></font></strong> + </td> + </tr> + </table> + <p> + Suggestions welcome, please contact <tt>jed...@li...</tt>. </p> + + <p> + This plugin parses HTML and JSP files and presents a tree view of the file to aid in navigation. In addition, it provides completion popups for elements, entities and attributes, and automatic insertion or completion of close-tags. </p> + + <p> + While designed specifically for HTML and JSP files, this plugin does a pretty good job of displaying ASP, ColdFusion, VRML, PHP, SGML, and Velocity files. Needless to say, it works with XML files too. You can elect to use this plugin for those edit modes by going to Plugins -> Plugin Options... -> SideKick -> Parsers, then selecting "<tt>html</tt>" for those edit modes. </p> + + <h3>Completion</h3> + + <p> From the XML plugin, the HtmlSideKick supports completion for elements and attributes. The completion info provided is not based on the DOCTYPE at the top, but rather extracted from a "completion info" file which is included with the XML plugin. The DOCTYPE is ignored by the HtmlSideKick. Also keep in mind, XML plugin does not like attributes unless they are in quotes, so it may pop up completions in inappropriate places if your use of quotes is not XML-compliant. </p> + + <h3> Validation </h3> + + <p> HtmlSideKick provides no validation. + The XML plugin provides full validation based on any DTD or XML Schema. The "loosest" HTML grammar recognized by the XML parser is this: </p> + + <pre><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd"> + </pre> + +<p> + <table summary="Settings" border="0" cellspacing="0" cellpadding="3" width="100%"> + <tr align="CENTER" width="100%"> + <td bgcolor="#7FB2FF" width="100%"> + <strong><font color="#FFFFFF" size="+1"> + <a name="intro"> Settings</a></font></strong> + </td> + </tr> + </table> + <p> This plugin is an extension of both the <a href="jeditresource:/SideKick.jar!/index.html">SideKick</a> and the + <a href="jeditresource:/XML.jar!/index.html">XML</a> plugins. This means that common options for this plugin are specified in the SideKick plugin options. Additional completion options, such as finishing the close-tag when you type <tt></</tt>, or providing element/attribute popups based on an XML DTD or schema, are specified in the XML plugin's general options. </p> + + <p> + The settings for HtmlSideKick are found at Plugins -> Plugin Options... -> HtmlSideKick. + <h3>Showing Tag Attributes</h3> + There are 4 settings that affect the display of tag attributes: + <ol> + <li><b>Show Tag Attributes</b> When checked, all non-standard attributes (if any) for the tag will be displayed. + <li><b>Show Core Attributes</b> When checked, the standard core html tag attributes (if any) will be displayed. + The core attributes are: "id", "class", "style", and "title". + <li><b>Show Language Attributes</b> When checked, the standard attributes (if any) for internationalization will be displayed. + The language attributes are: "lang" and "dir". + <li><b>Show Script Attributes</b> When checked, the standard attributes (if any) for scripting will be displayed. + The scripting attributes are: "onclick", "ondblclick", "onmousedown", "onmouseup", "onmouseover", + "onmousemove", "onmouseout", "onkeypress", "onkeydown", and "onkeyup". + </ol> + + Regardless of these settings, a full listing of the tag attributes, sorted alphabetically, can be seen by moving the + mouse pointer over the tag display in the tree. + + <h3>Showing Brackets</h3> + Display of < and > can be turned on or off by use of the <b>Show tags with < and ></b> checkbox. + + <h3>Showing Tags</h3> + There are 3 settings that affect the display of tags themselves: + <ol> + <li><b>Show All HTML Tags</b> When selected, all html tags will be displayed. + <li><b>Show Block HTML Tags only</b> When selected, only those html tags that are a "block", that is, + there is both a start tag and an end tag, will be displayed. + <li><b>Show JSP Tags</b> When checked, JSP tags will be displayed. + </ol> + + <table summary="Future plans" border=0 cellspacing=0 cellpadding=3 width="100%"> + <tr align=CENTER width="100%"> + <td bgcolor="#7FB2FF" width="100%"> + <strong><font color="#FFFFFF" size="+1"><a name="future"> Future Plans</a></font></strong> + </td> + </tr> + </table> + + <ul> + <li> Full W3C validation based on DTD. </li> + </ul> + + <table summary="History" border=0 cellspacing=0 cellpadding=3 width="100%"> + <tr align=CENTER width="100%"> + <td bgcolor="#7FB2FF" width="100%"> + <strong><font color="#FFFFFF" size="+1"><a name=history>History</a></font></strong> + </td> + </tr> + </table> + + <ul> + <li> + <b> Version 0.5</b> requires JDK 1.4, jEdit 4.3pre5, SideKick 0.6, XML 1.0, XercesPlugin 2.8 + <ul> + <li> Updated for XML 1.0's XmlParsedData API.</li> + </ul> + </li> + + <li> <b>Version 0.4</b> requires JDK 1.4, jEdit 4.3pre3, SideKick 0.6, XML 0.18, XercesPlugin 2.8 + <ul> + <li> Bugfix release </li> + <li> Extends from XmlParser (in the XML plugin) and now supports element tag, closing, and attribute completions, from HTML and JSP modes. (Alan Ezust). </li> + </ul> + </li> + </ul> + </div> + + + </body> +</html> + Copied: plugins/XML/trunk/docs/users-guide.xml (from rev 332, plugins/XML/trunk/users-guide.xml) =================================================================== --- plugins/XML/trunk/docs/users-guide.xml (rev 0) +++ plugins/XML/trunk/docs/users-guide.xml 2006-07-15 03:44:36 UTC (rev 333) @@ -0,0 +1,735 @@ +<!-- jEdit buffer-local properties: --> +<!-- :indentSize=1:noTabs=true:folding=sidekick: --> +<!-- (C) 2001, 2003 Slava Pestov --> +<!-- (C) 2005, 2006 Alan Ezust --> +<!-- Look ma, no DTD! --> +<book xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation='http://www.docbook.org/xsd/4.4/docbook.xsd' > + <title>XML plugin user's guide</title> + + <bookinfo> + + <authorgroup> + <author><firstname>Slava</firstname><surname>Pestov</surname></author> + <author><firstname>Dale</firstname><surname>Anson</surname></author> + <author><firstname>Alan</firstname><surname>Ezust</surname></author> + <author><firstname>Jakub</firstname><surname>Roztocil</surname></author> + + </authorgroup> + + <legalnotice><title>Legal Notice</title> + <para> + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.1 or + any later version published by the Free Software Foundation; with no + <quote>Invariant Sections</quote>, <quote>Front-Cover Texts</quote> or + <quote>Back-Cover Texts</quote>, each as defined in the license. A copy of + the license can be found in the file <filename>COPYING.DOC.txt</filename> + included with jEdit. + </para> + + <para> + The XML plugin itself is released under the GNU General Public License. + A copy of the GPL can be found in the jEdit online help. + </para> + </legalnotice> +</bookinfo> + +<chapter id="intro"><title>Introduction</title> + + <para> + This documentation assumes at least basic knowlege of HTML and XML. + </para> + + <para> + This version of the XML plugin for jEdit combines the <ulink url="docs/htmlsidekick.html">HtmlSideKick</ulink> by Dale Anson and the CssSideKick by Jakub Roztocil, providing a total of three distinct Sidekick parsers. The features combined make it a complete editing solution for XML, HTML, JSP, and CSS files. Here are its features: + </para> + + <itemizedlist> + <listitem><para>On-the-fly validation of XML files</para></listitem> + <listitem><para>Tag and entity completion popups</para></listitem> + <listitem><para>Display of the element tree in a dockable window</para></listitem> + <listitem><para>Matching tag highlighting</para></listitem> + <listitem><para>One click insertion of tags and entities</para></listitem> + <listitem><para>Graphical editing of tags and attributes</para></listitem> + <listitem><para>A number of miscellaneous commands</para></listitem> + </itemizedlist> + + <para> + Note that to provide some of its functionality, the XML plugin relies on the SideKick plugin. See the SideKick plugin documentation for details. + </para> + +</chapter> + +<chapter id="validation"><title>Validation</title> + + <para> + XML files are validated against their DTD or XSD schema. If no schema can be loaded, only minimal error checking will be performed. No validation of any kind is performed for HTML files, but XHTML files can be validated using their regular schema. + </para> + + <para> + Any errors found while parsing XML are handled by the + <application>ErrorList</application> plugin; in other words, they are highlighted + in the text area, and shown in the + <guimenu>Plugins</guimenu>><guisubmenu>Error + List</guisubmenu>><guimenuitem>Error List</guimenuitem> window. See the + documentation for the <application>ErrorList</application> plugin for details. + </para> + + <para> + DTDs (document type definitions) and XSDs (w3c XML Schemas) are two different standards + for defining XML Schemas, to describe which elements and entities are allowed within a specific context. + In order to implement completion or validation, the XML plugin needs to be able to load a schema. A few file types for which no schema is available are supported using built-in completion information included with the plugin. + </para> + + <sect1 id="customizing-validation"><title>Customizing validation</title> + + <para> + Validation can be disabled on a global basis in the <guibutton>XML</guibutton>><guibutton>General</guibutton> pane of the <guimenu>Plugins</guimenu>><guimenuitem>Plugin Options</guimenuitem> dialog box. It can also be disabled on a per-buffer basis by inserting the following in the first of last 10 lines of the buffer: + </para> + <programlisting>:xml.validate=false:</programlisting> +</sect1> +<sect1 id="child-documents"> +<title> Child Documents </title> + <para> + When editing an XML file which is included in another file, it can be desirable for validation to always start at the root file, and not at each included file. For example, you might be writing a user manual using DocBook, with each chapter split into its own XML file. This can be achieved by inserting the following in the first or last 10 lines of each child file: + </para> + <programlisting>:xml.root=<replaceable>relative or absolute path of root document</replaceable></programlisting> + + <para> + Note that even if this property is specified, the <guimenuitem>Structure Browser</guimenuitem> window only shows elements defined in the current buffer. However, when validating an included file, validation errors will be reported for all files included from the root file. + </para> + </sect1> + + <sect1 id="builtin-completion-info"><title>Built-in completion information</title> + + <para> + The XML plugin supports element and entity completion for the following file types using completion information built in to the plugin: + </para> + + <itemizedlist> + + <listitem><para>HTML files </para></listitem> + + <listitem><para>XSL stylesheets (xsl) </para></listitem> + <listitem><para>XSD XML schema definitions </para></listitem> + <listitem><para><filename>build.xml</filename> - Ant build files </para></listitem> + </itemizedlist> + </sect1> + + <sect1 id="dtds-schemas"><title>DTDs and schemas</title> + <para> + DTDs, or document type definitions, are an older standard but are still widely + used. Buffers which have an associated DTD are validated for errors, and + completion popups are shown for elements, attributes, and entities. + DTDs are specified by including markup like the following near the start + of an XML file: + </para> + <programlisting><![CDATA[<?xml version="1.0"?> + <!DOCTYPE PUBLIC "]]><replaceable>public ID</replaceable>" "<replaceable>system ID</replaceable>" + </programlisting> + <para> + Or alternatively: + </para> + <programlisting><![CDATA[<?xml version="1.0"?> + <!DOCTYPE SYSTEM "]]><replaceable>system ID</replaceable>" + </programlisting> + + <para> + XML schemas perform a similar function to DTDs, however they are a newer + standard and support some features that DTDs do not, like namespaces. + Buffers which have an associated schema are validated for errors, and + completion popups are shown for elements and entities. + </para> + <para> + Schemas are specified with a + <markup>http://www.w3.org/2001/XMLSchema-instance</markup> namespace in the document's root element: + </para> + <programlisting><![CDATA[<personnel + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation='personal.xsd'>]]></programlisting> + <para> + Or if the target schema has an associated namespace: + </para> + <programlisting><![CDATA[<dictionary xmlns="http://www.xml-cml.org/schema/stmml" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.xml-cml.org/schema/stmml ../schema/stmml.xsd + http://www.xml-cml.org/schema/cml2/core ../schema/cmlCore.xsd">]]></programlisting> + <para> + In all cases, the XML parser will first look for the specified system or + public ID in the plugin's built-in catalog, along with any + catalog files specified in the + <guibutton>XML</guibutton>><guibutton>Catalogs</guibutton> pane + of the <guimenu>Utilities</guimenu>><guimenuitem>Global Options</guimenuitem> + dialog box. + </para> + <para> + Catalog files must either be in OASIS OPEN or XML catalog format. These two formats + are documented below. + </para> + + <para> + If the DTD or XSD cannot be located in the catalogs, the plugin will ask if it should be downloaded and cached for future use in the <filename>dtds</filename> + subdirectory of the jEdit settings directory. + </para> + <para> + The download cache can be cleared using the + <guimenu>Plugins</guimenu>><guisubmenu>XML</guisubmenu>><guimenuitem>Clear + DTD Cache</guimenuitem> command. + </para> + </sect1> + <sect1 id="built-in-dtds"><title>Built-in DTDs</title> + + <para> + The XML plugin catalogs the following DTDs which are included with jEdit itself, or the XML plugin. + </para> + + <itemizedlist> + <listitem><para>DTDs declared by jEdit: <filename>actions.dtd</filename>, + <filename>catalog.dtd</filename>, + <filename>dockables.dtd</filename>, + <filename>perspective.dtd</filename>, + <filename>plugins.dtd</filename>, + <filename>recent.dtd</filename>, + <filename>registers.dtd</filename>, + <filename>services.dt</filename>, + <filename>xmode.dtd</filename>.</para></listitem> + <listitem><para>A few plugin DTDs: <filename>commando.dtd</filename> (Console + plugin), <filename>sqlServerType.dtd</filename> (SQL plugin).</para></listitem> + <listitem><para>XHTML 1.0 and XHTML 1.1 DTDs, referenced using one of the + following public IDs:</para> + <itemizedlist> + <listitem><para><literal>-//W3C//DTD XHTML 1.0 Frameset//EN</literal></para></listitem> + <listitem><para><literal>-//W3C//DTD XHTML 1.0 Strict//EN</literal></para></listitem> + <listitem><para><literal>-//W3C//DTD XHTML 1.0 Transitional//EN</literal></para></listitem> + <listitem><para><literal>-//W3C//DTD XHTML 1.1//EN</literal></para></listitem> + </itemizedlist> + </listitem> + <listitem><para>DocBook 4.2 DTDs, referenced with the + <literal>-//OASIS//DTD DocBook XML V4.2//EN</literal> public ID. + </para></listitem> + + </itemizedlist> + <para> For example, these doctypes are recognized by the XML plugin, and when they are used, tell the XML plugin to load a built-in DTD, and provide you with completion popups for elements and attributes. + </para> + + <programlisting> +<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "docbookx.dtd"> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "xhtml11-flat.dtd"> + </programlisting> + + </sect1> + + <sect1 id="oasis-catalog-format"><title>OASIS OPEN catalog format</title> + <para> + Each line in an OASIS OPEN catalog file must look like one of the following: + </para> + <itemizedlist> + <listitem><para><literal>-- <replaceable>comment</replaceable></literal> + - comments are ignored.</para></listitem> + <listitem><para><literal>SYSTEM "<replaceable>system ID</replaceable>" + "<replaceable>new system ID</replaceable>"</literal> - maps the first system ID + to the second.</para></listitem> + <listitem><para><literal>PUBLIC "<replaceable>public ID</replaceable>" + "<replaceable>new system ID</replaceable>"</literal> - maps the public ID + to the system ID.</para></listitem> + <!-- <listitem><para><literal>OVERRIDE <replaceable>YES or NO</replaceable></literal> + - if <literal><replaceable>YES</replaceable></literal>, then </para></listitem> --> + </itemizedlist> + </sect1> + + <sect1 id="oasis-xml-catalog-format"><title>OASIS XML catalog format</title> + <para> + Catalog files in the OASIS XML catalog format are themselves XML files, and must have the following <markup>DOCTYPE</markup> declaration: + </para> + <programlisting><![CDATA[<!DOCTYPE PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "oasis-catalog.dtd"]]></programlisting> + <para> + The XML plugin bundles the above DTD so you can use the completion features to construct an OASIS XML catalog. + </para> + </sect1> + +</chapter> + +<chapter id="insert"><title>The XML insert window</title> + + <para> + <guimenu>Plugins</guimenu>><guisubmenu>XML</guisubmenu>><guimenuitem>XML + Insert</guimenuitem> displays the XML insert window. This window is floating by + default, but it can be docked + into the view in the <guibutton>Docking</guibutton> pane of the + <guimenuitem>Global Options</guimenuitem> dialog box. + </para> + + <para> + This window lists elements that may be inserted at the caret position, + all declared entities, and all IDs (element attributes + with a value type of <property>ID</property>). + </para> + + <para> + Clicking an element in the list with the left mouse button + will insert it into the buffer and show + the <guimenuitem>Edit Tag</guimenuitem> dialog box for specifying attributes. + See <xref linkend="edit-tag" /> for information about the + <guimenuitem>Edit Tag</guimenuitem> dialog box. Clicking an element + with the right mouse button will insert it in the text area, but the + <guimenuitem>Edit Tag</guimenuitem> dialog box will not be shown. + </para> + + <para> + Clicking an entity will insert it into the buffer. + </para> + + <para> + Clicking an ID with the left mouse button will insert it into the buffer; + clicking with the right mouse button will move the caret to the element + that declares it. + </para> + + <para> + If text is selected, each selection is wrapped in a pair of opening and + closing tags. This is a very powerful feature; you can select any number + of text chunks, and surround them with tags, all sharing a common set of + attributes. + </para> + +</chapter> + +<chapter id="completion"><title>Tag and entity completion</title> + + <para> + If the less-than symbol (<quote><</quote>) is typed and no other key + is pressed within a + specified delay (half a second by default), a tag list popup will be + shown. Note that only tags which are the parent element is + allowed to contain are listed. The arrow keys can be used to select a tag; + if you start + typing a tag name, only tags whose names begin with the already-entered + text will be shown. + </para> + + <para> + Pressing <keycap>Space</keycap> or <keycap>></keycap> will insert + the currently selected + tag into the buffer. Pressing <keycap>Enter</keycap> will insert + the tag and show the <guimenuitem>Edit Tag</guimenuitem> dialog box; + see <xref linkend="edit-tag" />. + </para> + + <para> + Entity completion works in a similar manner; typing + <keycap>&</keycap> will show an entity list popup. Pressing + <keycap>Space</keycap>, <keycap>Enter</keycap> or <keycap>;</keycap> + will insert the currently selected entity into the buffer. + </para> + + <para> + Typing <quote></</quote> will automatically close + the last open tag. + </para> + + <para> + Another convenience feature that is disabled by default inserts a + closing tag when you finish typing an opening tag. + </para> + + <para> + These features can be enabled, disabled and configured in the + <guibutton>SideKick</guibutton> and + <guibutton>XML</guibutton>><guibutton>General</guibutton> panes + of the <guimenu>Utilities</guimenu>><guimenuitem>Global Options</guimenuitem> + dialog box. + </para> + +</chapter> + +<chapter id="edit-tag"><title>The edit tag dialog box</title> + + <para> + The <guimenuitem>Edit Tag</guimenuitem> dialog box can be opened in any of these ways: + </para> + + <itemizedlist> + <listitem><para>Invoking + <guimenu>Plugins</guimenu>><guisubmenu>XML</guisubmenu>><guimenuitem>Edit + Tag at Caret</guimenuitem>. + </para></listitem> + <listitem><para>Double-clicking a tag in the text area while holding down + <keycap>Control</keycap>.</para></listitem> + <listitem><para> Hitting return in the completion dialog, if the option is set from the XML General Options. </para></listitem> + <listitem><para> Clicking on an element from the XML Insert dockable. </para></listitem> + </itemizedlist> + + <para> + The dialog box lists all declared attributes for the current tag in a + table. The columns of the table are as follows: + </para> + + <itemizedlist> + <listitem><formalpara><title>Set</title><para>A check box that controls + if the attribute is specified or not. Required attributes are always + specified.</para></formalpara></listitem> + + <listitem><formalpara><title>Name</title><para>The name of the + attribute.</para></formalpara></listitem> + + <listitem><formalpara><title>Type</title><para>This will either be + <quote>text</quote> or <quote>choice</quote>. If the attribute is + required, <quote>required</quote> will be + appended.</para></formalpara></listitem> + + <listitem><formalpara><title>Value</title><para>For + <quote>text</quote> attributes, this is a text field. + For <quote>choice</quote> attributes, this is a combo + box. Depending on the schema, some attributes might define a default value.</para></formalpara> + + <para> + Note that special characters entered in the text field are + automatically converted to entities if necessary. + </para></listitem> + </itemizedlist> + + <para> + The <guilabel>Preview</guilabel> text field shows what the tag will look + like with all currently-specified attributes. Clicking + <guibutton>OK</guibutton> will insert the tag into the buffer. + </para> + +</chapter> + +<chapter id="misc-commands"><title>Miscellaneous features</title> + + <para> + If the caret is positioned on a tag, the corresponding opening or closing + tag will be highlighted in the text area. You can disable this feature, + or change the tag highlight color in the + <guibutton>XML</guibutton>><guibutton>General</guibutton> pane + of the <guimenu>Utilities</guimenu>><guimenuitem>Global Options</guimenuitem> + dialog box. + </para> + + <para> + <guimenu>Plugins</guimenu>><guisubmenu>XML</guisubmenu>><guimenuitem>Go + to Matching Tag</guimenuitem> moves the caret to the corresponding opening or + closing tag. + </para> + + <para> + <guimenu>Plugins</guimenu>><guisubmenu>XML</guisubmenu>><guimenuitem>Close + Last Open Tag</guimenuitem> inserts a closing tag for the last opened tag. + </para> + + <para> + <guimenu>Plugins</guimenu>><guisubmenu>XML</guisubmenu>><guimenuitem>Remove + All Tags</guimenuitem> removes all tags from the current buffer, leaving + only text. + </para> + + <para> + <guimenu>Plugins</guimenu>><guisubmenu>XML</guisubmenu>><guimenuitem>Split + Tag</guimenuitem> splits the current tag at the cursor, and creates a new tag at the same + level. This is useful when editing HTML, DocBook or similar documents, for inserting + many <literal><p></literal> or <literal><para></literal> tags. + This command tries + to match the current indenting style. + </para> + + <para> + <guimenu>Plugins</guimenu>><guisubmenu>XML</guisubmenu>><guimenuitem>Characters + to Entities</guimenuitem> converts special characters to entities in the + current selection. + </para> + + <para> + <guimenu>Plugins</guimenu>><guisubmenu>XML</guisubmenu>><guimenuitem>Entities + to Characters</guimenuitem> converts entities to characters in the + current selection. + </para> + +</chapter> + +<chapter id="other-plugins"><title>Using the XML parser in other plugins</title> + + <para> + The XML plugin uses the Xerces XML parser, included in the + <ulink url="jeditresource:/XercesPlugin.jar!/docs/index.html">Xerces Plugin</ulink>. If you are developing your own plugin that needs to handle XML, you might prefer to use the XercesPlugin, which is more recent than the version of Xerces included in the JDK. + </para> + + <para> + If you would like to use the Xerces parser from your own plugin, you will first need to change your plugin's license if it is licensed under the GPL. + The GPL is not compatible with the Xerces license. + </para> + + <para> + The XML plugin itself is licensed under a modified GPL; this will + probably be sufficient for your plugin. Here is the text of the license, + embedded in each source file of the XML plugin: + </para> + + <blockquote><para> + The XML plugin is licensed under the GNU General Public License, with + the following exception: + </para> + + <para> + Permission is granted to link this code with software released under + the Apache license version 1.1, for example used by the Xerces XML + parser package. + </para></blockquote> + + <para> + You will also need to add a dependency for the XercesPlugin in your plugin's + property file: + </para> + + <programlisting>plugin.MyPlugin.depend.<replaceable>n</replaceable>=plugin xerces.XercesPlugin 2.8.0</programlisting> + + <para> + Note that you must replace <replaceable>n</replaceable> with the + appropriate number, as dependency properties must have consecutive numbers. + </para> + + <para> + That's all there is to it; you can now use the Xerces parser in your plugin. + Xerces includes its own implementations of the JAXP, SAX2 and DOM3 APIs, so + integrating existing code should be relatively easy. + </para> + + <para> + It is also possible to call the XML plugin's entity resolver method to resolve public and system IDs. This method is in the <classname>xml.CatalogManager</classname> + class: + </para> + + <funcsynopsis> + <funcprototype> + <funcdef>public void <function>resolve</function></funcdef> + <paramdef>String <parameter>current</parameter></paramdef> + <paramdef>String <parameter>publicId</parameter></paramdef> + <paramdef>String <parameter>systemId</parameter></paramdef> + </funcprototype> + </funcsynopsis> + +</chapter> + +<appendix id="problems"><title>Resolving Dependency Problems </title> + +<para> The Xml plugin depends on <ulink url="jeditresource:/SideKick.jar!/index.html">SideKick</ulink> and the <ulink url="jeditresource:/XercesPlugin.jar!/docs/index.html">XercesPlugin</ulink>. </para> + + <note><title> Installing Xerces Parsers </title> + <para> + Xerces is one of those libraries that you will find in many different places. You probably have at least 3 other versions already installed on your hard drive: one is included in every full install of <literal>ant</literal> (which is included in every Java IDE these days), another comes with JDK 1.4 and later. Further, older versions of the XML plugin included Xerces directly. It is recommended you double-check that older versions are removed. If you are having additional problems, some people have recommended that you install the newer Xerces in an endorsed directory, such as <literal>jre/lib/ext</literal>, so it <emphasis>overrides</emphasis> the older version in the JDK. See <ulink url="http://marc.theaimsgroup.com/?l=xerces-j-dev&m=108309409502115&w=2"> + this message</ulink> on the xerces-j mailing list for more details. </para> + </note> + <note> + <title> Which version of xerces do I have? </title> + <para> + It's easy to figure out because the filenames changed. + </para> + + <formalpara><title>Jars for Xerces 2.6-7</title> + <para> <literal>resolver, xml-apis, xercesImpl</literal>. + </para> + </formalpara> + + <formalpara><title> Jars for Xerces 2.3-5</title> + <para> + (unsupported) <literal>xml-commons-resolver, xmlParserApis, xercesImpl</literal>. + </para> + </formalpara> + </note> + <note> <title> Can't load SideKickParser </title> + <para> + If you ever encounter the error when loading the + <literal>SideKickParser</literal>, be sure that the java property <literal>jedit.home</literal> is set. The <literal>ServiceManager</literal> uses this property to find other jar files. You can pass a <literal>-Djedit.home=/path/to/jedit</literal> as a parameter to the <literal>java</literal> command in the <literal>jedit</literal> startup script. </para> + </note> + +</appendix> +<appendix id="changes"> +<title>Change log</title> <itemizedlist> + + <listitem><para><emphasis role="bold">Version 1.0</emphasis> Requires jEdit 4.3pre5, Java 1.4, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. + <itemizedlist> + <listitem><para> Incorporated CssSideKick ( ) </para></listitem> + </itemizedlist> + </para> + </listitem> + + <listitem><para><emphasis role="bold">Version 1.0</emphasis> Requires jEdit 4.3pre5, Java 1.4, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. + <itemizedlist> + <listitem><para> Match tag also matches brackets. </para></listitem> + <listitem><para> Added separate caching option for CatalogManager, clarified some of the options. (ezust)</para> </listitem> + <listitem><para> Error messages from files in the catalog manager are now being reported from the correct local pathname. (ezust) </para></listitem> + <listitem><para> Added option to popup (or not) edit tag dialog after completion. </para></listitem> + <listitem> <para> Bug # 1511997 - Abstract elements defined in xsd (e.g. list.class, para.class from docbook xsd) are now handled properly in completions and element lists. (Alan Ezust) </para></listitem> + <listitem> <para> Patch # 1511588 - Fixed xml insert (will69/ezust). </para> </listitem> + <listitem> <para> XSD completion info fixes #1511612 (will69) </para> </listitem> + <listitem> <para> + Removed registration of SAXParserFactory. This should help avoid clashing with other plugins that use SAXParserFactory. </para></listitem> + <listitem> <para> Removed use of gnu.regexp in favor of java.util.regex. </para></listitem> + </itemizedlist> + </para></listitem> + + <listitem><para><emphasis role="bold">Version 0.18</emphasis> Requires jedit 4.3pre3, Java 1.4, ErrorList 1.3.1, SideKick 0.3 and XercesPlugin 2.8.0. + <itemizedlist> + <listitem> <para> Debugged goto matching tag action. Deselects current selection before doing its thing. (Alan Ezust) </para> </listitem> + <listitem> <para> Some refactoring to help HtmlSideKick with + completion. (Alan Ezust) </para></listitem> + </itemizedlist> + + </para> + </listitem> + + + + <listitem><para><emphasis role="bold">Version 0.17</emphasis> Requires jedit 4.3pre3, Java 1.4, ErrorList 1.3.1, SideKick 0.3 and XercesPlugin 2.8.0. + + <itemizedlist> + <listitem> <para> Attribute completion works now. (Alan Ezust) </para> </listitem> + </itemizedlist> + + </para></listitem> + + <listitem><para><emphasis role="bold">Version 0.16</emphasis> Requires jedit 4.3pre3, Java 1.4, ErrorList 1.3.1, SideKick 0.3 and XercesPlugin 2.8.0. + + <itemizedlist> + <listitem> <para> Generates ant completion xml as part of build process </para> </listitem> + <listitem> <para> Removed Xerces from this plugin and added a dependency on XercesPlugin 2.8.0. </para></listitem> + <listitem> <para> Removed htmlparser from this plugin, since the HtmlSideKick does a better job of parsing HTML.</para> </listitem> + </itemizedlist> + + </para></listitem> + + <listitem><para><emphasis role="bold">Version 0.15</emphasis> Patched for jEdit43pre2, still requires ErrorList plugin 1.3.1, SideKick 0.3 and Xerces 2.6 or later. </para> + <para><emphasis role="bold"> Tested with Xerces 2.7.1 </emphasis> </para> + +</listitem> + + <listitem><para><emphasis role="bold">Version 0.14</emphasis> requires + jEdit 4.2pre9, SideKick plugin 0.3, and ErrorList plugin 1.3.1.</para> + + <itemizedlist> + <listitem><para>The <guimenuitem>XML Insert</guimenuitem> window does not let you insert tags in the middle of existing tags (Jason Rosenberg).</para></listitem> + <listitem><para>XML:FO completion (Lars Trieloff).</para></listitem> + <listitem><para>Updated to Xerces 2.6.2.</para></listitem> + </itemizedlist> + </listitem> + + <listitem><para><emphasis role="bold">Version 0.13</emphasis> requires + jEdit 4.2pre5, SideKick plugin 0.3, and ErrorList plugin 1.3.1.</para> + + <itemizedlist> + <listitem><para>We now use the HTML parser from <ulink url="htmlparser.sf.net">htmlparser.sf.net</ulink> instead of the extremely moronic Swing HTML parser (Will Sargent).</para></listitem> + <listitem><para>JHTML completion (Will Sargent).</para></listitem> + <listitem><para>The element completion code now tries to preserve case when editing HTML files.</para></listitem> + <listitem><para>Changing a catalog from within jEdit will automatically reload it.</para></listitem> + <listitem><para>Validation was only working for schemas, not DTDs.</para></listitem> + <listitem><para>Fixed <classname>NullPointerException</classname> when closing <guimenuitem>Plugin Options</guimenuitem> dialog box.</para></listitem> + <listitem><para>Macros can now be recorded while the XML plugin's completion features are enabled.</para></listitem> + <listitem><para>Updated Ant <filename>build.xml</filename> completion to match ANt 1.6 beta 2.</para></listitem> + <listitem><para>Now includes DocBook V4.2 XML DTD.</para></listitem> + </itemizedlist> + </listitem> + + <listitem><para><emphasis role="bold">Version 0.12</emphasis> requires + jEdit 4.2pre3, SideKick plugin 0.3, and ErrorList plugin 1.3.</para> + + <itemizedlist> + <listitem><para>Updated for jEdit 4.2 plugin API. + </para></listitem> + <listitem><para>Updated to use SideKick 0.3 code completion improvements. + </para></listitem> + <listitem><para>Includes the new Apache XML commons catalog resolver code + instead of the outdated <classname>com.arbortext.catalog</classname> package. + This brings improved support for OASIS and XML catalogs. + </para></listitem> + <listitem><para>Now uses jEdit 4.2 structure matching API to paint tag highlight, so you will see a tag scope indicator in the gutter just like with brackets. + </para></listitem> + </itemizedlist> + </listitem> + + <listitem><para><emphasis role="bold">Version 0.11.1</emphasis> requires + jEdit 4.1pre11, SideKick plugin 0.2, and ErrorList plugin 1.2.</para> + + <itemizedlist> + <listitem><para>Fatal errors now stop parsing. This fixes an infinite loop + with a malformed DTD.</para></listitem> + <listitem><para>Validation would still be performed, even if the option was + switched off.</para></listitem> + <listitem><para>Fixed a problem where the structure tree would be empty on + Windows.</para></listitem> + <listitem><para>Added an option to insert a space before the <quote>/></quote> + in stand-alone tags. In other words, instead of completing like so:</para> + <programlisting><![CDATA[<xref linkend="foo"/>]]></programlisting> + <para>You get this:</para> + <programlisting><![CDATA[<xref linkend="foo" />]]></programlisting></listitem> + <listitem><para><guimenuitem>XML Insert</guimenuitem> window was rather + counter-intuitive with regards to inserting closing tags. Now it always + inserts a closing tag, no matter what.</para></listitem> + </itemizedlist> + </listitem> + + <listitem><para><emphasis role="bold">Version 0.11</emphasis> requires + jEdit 4.1pre11, SideKick plugin 0.1, and ErrorList plugin 1.2.</para> + + <itemizedlist> + <listitem><para>The XML plugin now relies on the new SideKick plugin to + present the structure view. The main user-visible change is that a number + of commands have moved to the SideKick plugin, which is now a required + dependency. Other plugins can make use of SideKick to present a structure + tree along and code completion popups. + </para></listitem> + <listitem><para>Improved handling of external entities; if an external + entity is opened in a buffer, the contents of the buffer are parsed instead + of the entity file on disk. + </para> + <para> + Also, external entities can specify an + <literal>xml.root</literal> buffer-local property pointing to the top-level + file that includes them; this causes the parser to always parse the top-level + file (which eventually parses the entity), instead of the entity itself. + This allows code completion and validation to be performed + using the <literal><![CDATA[<!DOCTYPE>]]></literal> + specified in the top-level file. + </para></listitem> + <listitem><para>Schema completion popups now only show the elements that + can be inserted at the caret position. + </para></listitem> + <listitem><para>Schema completion with namespaces did not always work. + </para></listitem> + <listitem><para>Schema completion lists did not contain elements declared + inside complex types. + </para></listitem> + <listitem><para>Schemas containing <literal><![CDATA[<xsd:import>]]></literal> + should be handled better. + </para></listitem> + <listitem><para>If completion popups were disabled, the plugin would beep + when <keycap><</keycap> or <keycap>&</keycap> was pressed, very annoying. + </para></listitem> + <listitem><para>The option to insert a closing tag as soon as an opening tag + was typed was broken. + </para></listitem> + <listitem><para>Attempting to fix problem with some JVMs where a + <keycap>Backspace</keycap> in the completion popup would delete two + characters. + </para></listitem> + <listitem><para>Fixed stack overflow with some XML schemas (like DocBook). + </para></listitem> + <listitem><para><guimenuitem>Clear DTD Cache</guimenuitem> command now + named <guimenuitem>Clear Resource Cache</guimenuitem>. It deletes downloaded + files now, instead of just removing references to them from the cache map. + </para></listitem> + <listitem><para>Closing the <guimenuitem>Global Options</guimenuitem> dialog + box with an XML file open would cause problems with the resource cache. + </para></listitem> + <listitem><para>XHTML files could be mis-detected as HTML, instead of XML. + </para></listitem> + <listitem><para>Xerces 2.3.0 now included. + </para></listitem> + </itemizedlist> + + </listitem> + </itemizedlist> + +</appendix> + +</book> Modified: plugins/XML/trunk/services.xml =================================================================== --- plugins/XML/trunk/services.xml 2006-07-15 03:18:31 UTC (rev 332) +++ plugins/XML/trunk/services.xml 2006-07-15 03:44:36 UTC (rev 333) @@ -3,7 +3,11 @@ <!DOCTYPE SERVICES SYSTEM "services.dtd"> <SERVICES> - <SERVICE NAME="css" CLASS="sidekick.SideKickParser"> + <SERVICE CLASS="sidekick.SideKickParser" NAME="html"> + new sidekick.html.HtmlParser(); + </SERVICE> + + <SERVICE CLASS="sidekick.SideKickParser" NAME="css" > new csssidekick.CssSideKickParser(); </SERVICE> <SERVICE CLASS="sidekick.SideKickParser" NAME="xml"> Copied: plugins/XML/trunk/sidekick (from rev 331, plugins/HtmlSideKick/trunk/src/sidekick) Deleted: plugins/XML/trunk/users-guide.xml =================================================================== --- plugins/XML/trunk/users-guide.xml 2006-07-15 03:18:31 UTC (rev 332) +++ plugins/XML/trunk/users-guide.xml 2006-07-15 03:44:36 UTC (rev 333) @@ -1,745 +0,0 @@ -<!-- jEdit buffer-local properties: --> -<!-- :indentSize=1:noTabs=true:folding=sidekick: --> -<!-- (C) 2001, 2003 Slava Pestov --> -<!-- (C) 2005, 2006 Alan Ezust --> -<!-- Look ma, no DTD! --> -<book xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation='http://www.docbook.org/xsd/4.4/docbook.xsd' > - <title>XML plugin user's guide</title> - - <bookinfo> - - <authorgroup> - <author><firstname>Slava</firstname><surname>Pestov</surname></author> - <author><firstname>Alan</firstname><surname>Ezust</surname></author> - <author><firstname>Jakub</firstname><surname>Rozto?il</surname></author> - </authorgroup> - - <legalnotice><title>Legal Notice</title> - <para> - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.1 or - any later version published by the Free Software Foundation; with no - <quote>Invariant Sections</quote>, <quote>Front-Cover Texts</quote> or - <quote>Back-Cover Texts</quote>, each as defined in the license. A copy of - the license can be found in the file <filename>COPYING.DOC.txt</filename> - included with jEdit. - </para> - - <para> - The XML plugin itself is released under the GNU General Public License. - A copy of the GPL can be found in the jEdit online help. - </para> - <para> </para> - <para> - The XML plugin uses two libaries from the Apache Software - Foundation: the Xerces XML parser, and the XML commons catalog package. - These libraries are released under the <ulink url="Apache.LICENSE.txt">Apache Software Foundation License</ulink>. - </para> - </legalnotice> -</bookinfo> - -<chapter id="intro"><title>Introduction</title> - - <para> - This documentation assumes at least basic knowlege of HTML and XML. - </para> - - <para> - The XML plugin provides a number of features that make editing XML and - HTML files easier: - </para> - - <itemizedlist> - <listitem><para>On-the-fly validation of XML files</para></listitem> - <listitem><para>Tag and entity completion popups</para></listitem> - <listitem><para>Display of the element tree in a dockable window</para></listitem> - <listitem><para>Matching tag highlighting</para></listitem> - <listitem><para>One click insertion of tags and entities</para></listitem> - <listitem><para>Graphical editing of tags and attributes</para></listitem> - <listitem><para>A number of miscellaneous commands</para></listitem> - </itemizedlist> - - <para> - Note that to provide some of its functionality, the XML plugin relies on the - SideKick plugin. See the SideKick plugin documentation for details. - </para> - - - -</chapter> - -<chapter id="validation"><title>Validation</title> - - <para> - XML files are validated against their DTD or XSD schema. If no schema can be loaded, - only minimal error checking will be performed. - No validation of any kind is performed for HTML files, but XHTML files can be validated using their regular DTDs. - </para> - - <para> - Any errors found while parsing XML are handled by the - <application>ErrorList</application> plugin; in other words, they are highlighted - in the text area, and shown in the - <guimenu>Plugins</guimenu>><guisubmenu>Error - List</guisubmenu>><guimenuitem>Error List</guimenuitem> window. See the - documentation for the <application>ErrorList</application> plugin for details. - </para> - - <para> - DTDs (document type definitions) and XSDs (w3c XML Schemas) are two different standards - for defining XML Schemas, to describe which elements and entities are allowed within a specific context. - In order to implement completion or validation, the XML plugin needs to be able to load a schema. A few file types for which no schema is available are supported using built-in completion information included with the plugin. - </para> - - <sect1 id="customizing-validation"><title>Customizing validation</title> - - <para> - Validation can be disabled on a global basis in the <guibutton>XML</guibutton>><guibutton>General</guibutton> pane of the <guimenu>Plugins</guimenu>><guimenuitem>Plugin Options</guimenuitem> dialog box. It can also be disabled on a per-buffer basis by inserting the following in the first of last 10 lines of the buffer: - </para> - <programlisting>:xml.validate=false:</programlisting> -</sect1> -<sect1 id="child-documents"> -<title> Child Documents </title> - <para> - When editing an XML file which is included in another file, it can be desirable for validation to always start at the root file, and not at each included file. For example, you might be writing a user manual using DocBook, with each chapter split into its own XML file. This can be achieved by inserting the following in the first or last 10 lines of each child file: - </para> - <programlisting>:xml.root=<replaceable>relative or absolute path of root document</replaceable></programlisting> - - <para> - Note that even if this property is specified, the <guimenuitem>Structure Browser</guimenuitem> window only shows elements defined in the current buffer. However, when validating an included file, validation errors will be reported for all files included from the root file. - </para> - </sect1> - - <sect1 id="builtin-completion-info"><title>Built-in completion information</title> - - <para> - The XML plugin supports element and entity completion for the following file types using completion information built in to the plugin: - </para> - - <itemizedlist> - - <listitem><para>HTML files </para></listitem> - - <listitem><para>XSL stylesheets (xsl) </para></listitem> - <listitem><para>XSD XML schema definitions </para></listitem> - <listitem><para><filename>build.xml</filename> - Ant build files </para></listitem> - </itemizedlist> - </sect1> - - <sect1 id="dtds-schemas"><title>DTDs and schemas</title> - <para> - DTDs, or document type definitions, are an older standard but are still widely - used. Buffers which have an associated DTD are validated for errors, and - completion popups are shown for elements, attributes, and entities. - DTDs are specified by including markup like the following near the start - of an XML file: - </para> - <programlisting><![CDATA[<?xml version="1.0"?> - <!DOCTYPE PUBLIC "]]><replaceable>public ID</replaceable>" "<replaceable>system ID</replaceable>" - </programlisting> - <para> - Or alternatively: - </para> - <programlisting><![CDATA[<?xml version="1.0"?> - <!DOCTYPE SYSTEM "]]><replaceable>system ID</replaceable>" - </programlisting> - - <para> - XML schemas perform a similar function to DTDs, however they are a newer - standard and support some features that DTDs do not, like namespaces. - Buffers which have an associated schema are validated for errors, and - completion popups are shown for elements and entities. - </para> - <para> - Schemas are specified with a - <markup>http://www.w3.org/2001/XMLSchema-instance</markup> namespace in the document's root element: - </para> - <programlisting><![CDATA[<personnel - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation='personal.xsd'>]]></programlisting> - <para> - Or if the target schema has an associated namespace: - </para> - <programlisting><![CDATA[<dictionary xmlns="http://www.xml-cml.org/schema/stmml" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.xml-cml.org/schema/stmml ../schema/stmml.xsd - http://www.xml-cml.org/schema/cml2/core ../schema/cmlCore.xsd">]]></programlisting> - <para> - In all cases, the XML parser will first look for the specified system or - public ID in the plugin's built-in catalog, along with any - catalog files specified in the - <guibutton>XML</guibutton>><guibutton>Catalogs</guibutton> pane - of the <guimenu>Utilities</guimenu>><guimenuitem>Global Options</guimenuitem> - dialog box. - </para> - <para> - Catalog files must either be in OASIS OPEN or XML catalog format. These two formats - are documented below. - </para> - - <para> - If the DTD or XSD cannot be located in the catalogs, the plugin will ask if it should be downloaded and cached for future use in the <filename>dtds</filename> - subdirectory of the jEdit settings directory. - </para> - <para> - The download cache can be cleared using the - <guimenu>Plugins</guimenu>><guisubmenu>XML</guisubmenu>><guimenuitem>Clear - DTD Cache</guimenuitem> command. - </para> - </sect1> - <sect1 id="built-in-dtds"><title>Built-in DTDs</title> - - <para> - The XML plugin catalogs the following DTDs which are included with jEdit itself, or the XML plugin. - </para> - - <itemizedlist> - <listitem><para>DTDs declared by jEdit: <filename>actions.dtd</filename>, - <filename>catalog.dtd</filename>, - <filename>dockables.dtd</filename>, - <filename>perspective.dtd</filename>, - <filename>plugins.dtd</filename>, - <filename>recent.dtd</filename>, - <filename>registers.dtd</filename>, - <filename>services.dt</filename>, - <filename>xmode.dtd</filename>.</para></listitem> - <listitem><para>A few plugin DTDs: <filename>commando.dtd</filename> (Console - plugin), <filename>sqlServerType.dtd</filename> (SQL plugin).</para></listitem> - <listitem><para>XHTML 1.0 and XHTML 1.1 DTDs, referenced using one of the - following public IDs:</para> - <itemizedlist> - <listitem><para><literal>-//W3C//DTD XHTML 1.0 Frameset//EN</literal></para></listitem> - <listitem><para><literal>-//W3C//DTD XHTML 1.0 Strict//EN</literal></para></listitem> - <listitem><para><literal>-//W3C//DTD XHTML 1.0 Transitional//EN</literal></para></listitem> - <listitem><para><literal>-//W3C//DTD XHTML 1.1//EN</literal></para></listitem> - </itemizedlist> - </listitem> - <listitem><para>DocBook 4.2 DTDs, referenced with the - <literal>-//OASIS//DTD DocBook XML V4.2//EN</literal> public ID. - </para></listitem> - - </itemizedlist> - <para> For example, these doctypes are recognized by the XML plugin, and when they are used, tell the XML plugin to load a built-in DTD, and provide you with completion popups for elements and attributes. - </para> - - <programlisting> -<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "docbookx.dtd"> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "xhtml11-flat.dtd"> - </programlisting> - - </sect1> - - <sect1 id="oasis-catalog-format"><title>OASIS OPEN catalog format</title> - <para> - Each line in an OASIS OPEN catalog file must look like one of the following: - </para> - <itemizedlist> - <listitem><para><literal>-- <replaceable>comment</replaceable></literal> - - comments are ignored.</para></listitem> - <listitem><para><literal>SYSTEM "<replaceable>system ID</replaceable>" - "<replaceable>new system ID</replaceable>"</literal> - maps the first system ID - to the second.</para></listitem> - <listitem><para><literal>PUBLIC "<replaceable>public ID</replaceable>" - "<replaceable>new system ID</replaceable>"</literal> - maps the public ID - to the system ID.</para></listitem> - <!-- <listitem><para><literal>OVERRIDE <replaceable>YES or NO</replaceable></literal> - - if <literal><replaceable>YES</replaceable></literal>, then </para></listitem> --> - </itemizedlist> - </sect1> - - <sect1 id="oasis-xml-catalog-format"><title>OASIS XML catalog format</title> - <para> - Catalog files in the OASIS XML catalog format are themselves XML files, and must have the following <markup>DOCTYPE</markup> declaration: - </para> - <programlisting><![CDATA[<!DOCTYPE PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "oasis-catalog.dtd"]]></programlisting> - <para> - The XML plugin bundles the above DTD so you can use the completion features to construct an OASIS XML catalog. - </para> - </sect1> - -</chapter> - -<chapter id="insert"><title>The XML insert window</title> - - <para> - <guimenu>Plugins</guimenu>><guisubmenu>XML</guisubmenu>><guimenuitem>XML - Insert</guimenuitem> displays the XML insert window. This window is floating by - default, but it can be docked - into the view in the <guibutton>Docking</guibutton> pane of the - <guimenuitem>Global Options</guimenuitem> dialog box. - </para> - - <para> - This window lists elements that may be inserted at the caret position, - all declared entities, and all IDs (element attributes - with a value type of <property>ID</property>). - </para> - - <para> - Clicking an element in the list with the left mouse button - will insert it into the buffer and show - the <guimenuitem>Edit Tag</guimenuitem> dialog box for specifying attributes. - See <xref linkend="edit-tag" /> for information about the - <guimenuitem>Edit Tag</guimenuitem> dialog box. Clicking an element - with the right mouse button will insert it in the text area, but the - <guimenuitem>Edit Tag</guimenuitem> dialog box will not be shown. - </para> - - <para> - Clicking an entity will insert it into the buffer. - </para> - - <para> - Clicking an ID with the left mouse button will insert it into the buffer; - clicking with the right mouse button will move the caret to the element - that declares it. - </para> - - <para> - If text is selected, each selection is wrapped in a pair of opening and - closing tags. This is a very powerful feature; you can select any number - of text chunks, and surround them with tags, all sharing a common set of - attributes. - </para> - -</chapter> - -<chapter id="completion"><title>Tag and entity completion</title> - - <para> - If the less-than symbol (<quote><</quote>) is typed and no other key - is pressed within a - specified delay (half a second by default), a tag list popup will be - shown. Note that only tags which are the parent element is - allowed to contain are listed. The arrow keys can be used to select a tag; - if you start - typing a tag name, only tags whose names begin with the already-entered - text will be shown. - </para> - - <para> - Pressing <keycap>Space</keycap> or <keycap>></keycap> will insert - the currently selected - tag into the buffer. Pressing <keycap>Enter</keycap> will insert - the tag and sh... [truncated message content] |
From: <ez...@us...> - 2006-07-15 03:54:21
|
Revision: 334 Author: ezust Date: 2006-07-14 20:54:17 -0700 (Fri, 14 Jul 2006) ViewCVS: http://svn.sourceforge.net/jedit/?rev=334&view=rev Log Message: ----------- Added htmlsidekick, and moved csssidekick around a bit. wow, svn mv is fun! Modified Paths: -------------- plugins/XML/trunk/XML.props plugins/XML/trunk/build.xml plugins/XML/trunk/docs/users-guide.xml plugins/XML/trunk/sidekick/css/CompletionRequest.java plugins/XML/trunk/sidekick/css/CssSideKickCompletion.java plugins/XML/trunk/sidekick/css/CssSideKickOptionPane.java plugins/XML/trunk/sidekick/css/CssSideKickParser.java plugins/XML/trunk/sidekick/css/CssSideKickPlugin.java plugins/XML/trunk/sidekick/css/Utils.java Added Paths: ----------- plugins/XML/trunk/sidekick/css/ Removed Paths: ------------- plugins/XML/trunk/csssidekick/ Modified: plugins/XML/trunk/XML.props =================================================================== --- plugins/XML/trunk/XML.props 2006-07-15 03:44:36 UTC (rev 333) +++ plugins/XML/trunk/XML.props 2006-07-15 03:54:17 UTC (rev 334) @@ -1,8 +1,8 @@ # Plugin properties plugin.xml.XmlPlugin.activate=defer plugin.xml.XmlPlugin.name=XML -plugin.xml.XmlPlugin.author=Slava Pestov, Alan Ezust -plugin.xml.XmlPlugin.version=1.1 +plugin.xml.XmlPlugin.author=Slava Pestov, Alan Ezust, Dale Anson, Jakub Roztocil +plugin.xml.XmlPlugin.version=2.0 plugin.xml.XmlPlugin.docs=index.html plugin.xml.XmlPlugin.depend.0=jedit 04.03.05.00 @@ -27,7 +27,7 @@ xml-reload-catalogs - \ csssidekick-reload-completion-config \ - csssidekick-insert-relative-path + csssidekick-insert-relative-path xml-match-tag.label=Go to Matching Tag xml-insert.label=XML Insert Modified: plugins/XML/trunk/build.xml =================================================================== --- plugins/XML/trunk/build.xml 2006-07-15 03:44:36 UTC (rev 333) +++ plugins/XML/trunk/build.xml 2006-07-15 03:54:17 UTC (rev 334) @@ -18,12 +18,13 @@ <property name="build.support" value="../../build-support" /> + + <property name="compiler.source" value="1.5" /> + <property name="compiler.target" value="1.5" /> <import file="${build.support}/plugin-build.xml" /> - <property name="javadoc.packagenames" value="xml.*, csssidekick.*" /> - <property name="compiler.source" value="1.4" /> - <property name="compiler.target" value="1.4" /> + <property name="javadoc.packagenames" value="xml.*, sidekick.*" /> <property name="build.dir" value="build"/> <property name="install.dir" value="../"/> Modified: plugins/XML/trunk/docs/users-guide.xml =================================================================== --- plugins/XML/trunk/docs/users-guide.xml 2006-07-15 03:44:36 UTC (rev 333) +++ plugins/XML/trunk/docs/users-guide.xml 2006-07-15 03:54:17 UTC (rev 334) @@ -547,9 +547,9 @@ <appendix id="changes"> <title>Change log</title> <itemizedlist> - <listitem><para><emphasis role="bold">Version 1.0</emphasis> Requires jEdit 4.3pre5, Java 1.4, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. + <listitem><para><emphasis role="bold">Version 1.1</emphasis> Requires jEdit 4.3pre5, Java 1.4, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. <itemizedlist> - <listitem><para> Incorporated CssSideKick ( ) </para></listitem> + <listitem><para> Html and XML are together again, and this time, CssSideKick makes three! </para></listitem> </itemizedlist> </para> </listitem> Copied: plugins/XML/trunk/sidekick/css (from rev 333, plugins/XML/trunk/csssidekick) Modified: plugins/XML/trunk/sidekick/css/CompletionRequest.java =================================================================== --- plugins/XML/trunk/csssidekick/CompletionRequest.java 2006-07-15 03:44:36 UTC (rev 333) +++ plugins/XML/trunk/sidekick/css/CompletionRequest.java 2006-07-15 03:54:17 UTC (rev 334) @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -package csssidekick; +package sidekick.css; //{{{ Imports Modified: plugins/XML/trunk/sidekick/css/CssSideKickCompletion.java =================================================================== --- plugins/XML/trunk/csssidekick/CssSideKickCompletion.java 2006-07-15 03:44:36 UTC (rev 333) +++ plugins/XML/trunk/sidekick/css/CssSideKickCompletion.java 2006-07-15 03:54:17 UTC (rev 334) @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -package csssidekick; +package sidekick.css; //{{{ Imports import java.io.*; Modified: plugins/XML/trunk/sidekick/css/CssSideKickOptionPane.java =================================================================== --- plugins/XML/trunk/csssidekick/CssSideKickOptionPane.java 2006-07-15 03:44:36 UTC (rev 333) +++ plugins/XML/trunk/sidekick/css/CssSideKickOptionPane.java 2006-07-15 03:54:17 UTC (rev 334) @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -package csssidekick; +package sidekick.css; //{{{ Imports import javax.swing.JCheckBox; Modified: plugins/XML/trunk/sidekick/css/CssSideKickParser.java =================================================================== --- plugins/XML/trunk/csssidekick/CssSideKickParser.java 2006-07-15 03:44:36 UTC (rev 333) +++ plugins/XML/trunk/sidekick/css/CssSideKickParser.java 2006-07-15 03:54:17 UTC (rev 334) @@ -20,7 +20,7 @@ */ -package csssidekick; +package sidekick.css; //{{{ Imports import errorlist.*; Modified: plugins/XML/trunk/sidekick/css/CssSideKickPlugin.java =================================================================== --- plugins/XML/trunk/csssidekick/CssSideKickPlugin.java 2006-07-15 03:44:36 UTC (rev 333) +++ plugins/XML/trunk/sidekick/css/CssSideKickPlugin.java 2006-07-15 03:54:17 UTC (rev 334) @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -package csssidekick; +package sidekick.css; public class CssSideKickPlugin { public static final String NAME = "csssidekick"; Modified: plugins/XML/trunk/sidekick/css/Utils.java =================================================================== --- plugins/XML/trunk/csssidekick/Utils.java 2006-07-15 03:44:36 UTC (rev 333) +++ plugins/XML/trunk/sidekick/css/Utils.java 2006-07-15 03:54:17 UTC (rev 334) @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -package csssidekick; +package sidekick.css; //{{{ Imports import org.gjt.sp.jedit.*; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2006-07-15 04:17:37
|
Revision: 335 Author: ezust Date: 2006-07-14 21:17:33 -0700 (Fri, 14 Jul 2006) ViewCVS: http://svn.sourceforge.net/jedit/?rev=335&view=rev Log Message: ----------- Option Panes are all visible... Modified Paths: -------------- plugins/XML/trunk/XML.props plugins/XML/trunk/build.xml plugins/XML/trunk/services.xml plugins/XML/trunk/sidekick/html/HtmlSideKickPlugin.java Modified: plugins/XML/trunk/XML.props =================================================================== --- plugins/XML/trunk/XML.props 2006-07-15 03:54:17 UTC (rev 334) +++ plugins/XML/trunk/XML.props 2006-07-15 04:17:33 UTC (rev 335) @@ -41,8 +41,13 @@ xml-reload-catalogs.label=Reload Catalogs # Option panes -plugin.xml.XmlPlugin.option-group=xml.general csssidekick.option-pane xml.catalogs +plugin.xml.XmlPlugin.option-group=xml.general sidekick.html sidekick.css xml.catalogs +# {{ HTML option pane +options.sidekick.html.label=Html +options.sidekick.html.code=new sidekick.html.HtmlOptionPane() +# }}} + # {{{ XML options options.xml.catalogs.label=Catalogs @@ -191,8 +196,8 @@ # }}} # {{{ CSS Options -options.csssidekick.option-pane.label=CSS SideKick -options.csssidekick.option-pane.code=new csssidekick.CssSideKickOptionPane(); +options.sidekick.css.label=CSS SideKick +options.sidekick.css.code=new sidekick.css.CssSideKickOptionPane(); # actions labels csssidekick-reload-completion-config.label=Reload completion config @@ -244,12 +249,6 @@ mode.html.sidekick.parser=html mode.jsp.sidekick.parser=html -# Global Plugin Options -plugin.sidekick.html.HtmlSideKickPlugin.option-pane=sidekick.html -options.sidekick.html.label=HtmlSideKick -options.sidekick.html.code=new sidekick.html.HtmlOptionPane() -options.sidekick.html.panel_label=HtmlSideKick Settings - # option labels: options.sidekick.html.showAttributes.label=Show Attributes options.sidekick.html.showTagAttributes.label=Tag Attributes Modified: plugins/XML/trunk/build.xml =================================================================== --- plugins/XML/trunk/build.xml 2006-07-15 03:54:17 UTC (rev 334) +++ plugins/XML/trunk/build.xml 2006-07-15 04:17:33 UTC (rev 335) @@ -68,13 +68,6 @@ <target name="dist" depends="docs, jar" description="The whole shebang" /> - <target name="clean"> - <delete dir="${build.dir}"/> - <delete> - <fileset dir="." includes="**/*~" defaultexcludes="no"/> - <fileset dir="." includes="**/*.html" defaultexcludes="no"/> - </delete> - </target> <!-- Generate tags using 'ctags' program from ctags.sourceforge.net --> <target name="tags"> Modified: plugins/XML/trunk/services.xml =================================================================== --- plugins/XML/trunk/services.xml 2006-07-15 03:54:17 UTC (rev 334) +++ plugins/XML/trunk/services.xml 2006-07-15 04:17:33 UTC (rev 335) @@ -8,7 +8,7 @@ </SERVICE> <SERVICE CLASS="sidekick.SideKickParser" NAME="css" > - new csssidekick.CssSideKickParser(); + new sidekick.css.CssSideKickParser(); </SERVICE> <SERVICE CLASS="sidekick.SideKickParser" NAME="xml"> new xml.parser.SAXParserImpl(); Modified: plugins/XML/trunk/sidekick/html/HtmlSideKickPlugin.java =================================================================== --- plugins/XML/trunk/sidekick/html/HtmlSideKickPlugin.java 2006-07-15 03:54:17 UTC (rev 334) +++ plugins/XML/trunk/sidekick/html/HtmlSideKickPlugin.java 2006-07-15 04:17:33 UTC (rev 335) @@ -27,14 +27,7 @@ */ package sidekick.html; -import java.util.HashMap; - -import org.gjt.sp.jedit.*; -import org.gjt.sp.jedit.gui.DockableWindowManager; -import sidekick.enhanced.SourceTree; - -public class HtmlSideKickPlugin extends EditPlugin { +public class HtmlSideKickPlugin { public final static String NAME = "sidekick.html"; - } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2006-07-30 17:48:43
|
Revision: 6465 Author: ezust Date: 2006-07-30 10:48:32 -0700 (Sun, 30 Jul 2006) ViewCVS: http://svn.sourceforge.net/jedit/?rev=6465&view=rev Log Message: ----------- Added XMLIndenter. Modified Paths: -------------- plugins/XML/trunk/XML.props plugins/XML/trunk/actions.xml plugins/XML/trunk/build.xml plugins/XML/trunk/docs/htmlsidekick.html plugins/XML/trunk/docs/users-guide.xml plugins/XML/trunk/services.xml Added Paths: ----------- plugins/XML/trunk/xml/indent/IndentingTransformer.java plugins/XML/trunk/xml/indent/IndentingTransformerImpl.java plugins/XML/trunk/xml/indent/PreserveWhitespaceOptionsPane.java plugins/XML/trunk/xml/indent/XmlBeautifier.java plugins/XML/trunk/xml/indent/XmlIndenterPlugin.java Removed Paths: ------------- plugins/XML/trunk/xml/indent/xmlindenter/IndentingTransformer.java plugins/XML/trunk/xml/indent/xmlindenter/IndentingTransformerImpl.java plugins/XML/trunk/xml/indent/xmlindenter/PreserveWhitespaceOptionsPane.java plugins/XML/trunk/xml/indent/xmlindenter/XmlBeautifier.java plugins/XML/trunk/xml/indent/xmlindenter/XmlIndenterPlugin.java Modified: plugins/XML/trunk/XML.props =================================================================== --- plugins/XML/trunk/XML.props 2006-07-30 17:24:15 UTC (rev 6464) +++ plugins/XML/trunk/XML.props 2006-07-30 17:48:32 UTC (rev 6465) @@ -1,7 +1,7 @@ # Plugin properties plugin.xml.XmlPlugin.activate=defer plugin.xml.XmlPlugin.name=XML -plugin.xml.XmlPlugin.author=Slava Pestov, Alan Ezust, Dale Anson, Jakub Roztocil, Martin Raspe +plugin.xml.XmlPlugin.author=Slava Pestov, Dale Anson, Alan Ezust, Rob McKinnon, Martin Raspe, Jakub Roztocil plugin.xml.XmlPlugin.version=2.0.3 plugin.xml.XmlPlugin.docs=index.html @@ -10,7 +10,10 @@ plugin.xml.XmlPlugin.depend.2=plugin errorlist.ErrorListPlugin 1.4 plugin.xml.XmlPlugin.depend.3=plugin sidekick.SideKickPlugin 0.6.4 plugin.xml.XmlPlugin.depend.5=jdk 1.5 +plugin.xml.XmlPlugin.depend.6=plugin beauty.BeautyPlugin 0.1 + # Menu bar stuff + plugin.xml.XmlPlugin.menu=sidekick-tree \ xml-match-tag \ - \ @@ -22,6 +25,7 @@ - \ xml-chars-to-entities \ xml-entities-to-chars \ + xmlindenter.indent \ - \ csssidekick-insert-relative-path \ - \ @@ -29,6 +33,10 @@ csssidekick-reload-completion-config \ xml-reload-catalogs +# Indent action +xmlindenter.indent.message.failure=Indenting failed to complete. +xmlindenter.indent.label=Indent XML + xml-match-tag.label=Go to Matching Tag or Bracket xml-insert.label=XML Insert xml-edit-tag.label=Edit Tag at Caret... @@ -41,7 +49,7 @@ xml-reload-catalogs.label=Reload Catalogs # Option panes -plugin.xml.XmlPlugin.option-group=xml.general sidekick.html sidekick.css xml.catalogs +plugin.xml.XmlPlugin.option-group=xml.general xmlindenter sidekick.html sidekick.css xml.catalogs # {{ HTML option pane options.sidekick.html.label=HTML @@ -277,3 +285,15 @@ # }}} # }}} + + +options.xmlindenter.label=XML Indenter +options.xmlindenter.code=new xml.indent.PreserveWhitespaceOptionsPane(); +options.xmlindenter.caption=Preserve whitespace for these elements: +options.xmlindenter.add=Add +options.xmlindenter.remove=Remove +options.xmlindenter.dialog.title=Add element +options.xmlindenter.dialog.message=Enter qualified element name: + +# register modes for Beauty +mode.xml.beauty.beautifier=XmlIndenter Modified: plugins/XML/trunk/actions.xml =================================================================== --- plugins/XML/trunk/actions.xml 2006-07-30 17:24:15 UTC (rev 6464) +++ plugins/XML/trunk/actions.xml 2006-07-30 17:48:32 UTC (rev 6465) @@ -1,6 +1,9 @@ <?xml version="1.0"?> <!DOCTYPE ACTIONS SYSTEM "actions.dtd"> <ACTIONS> + <ACTION NAME="xmlindenter.indent"> + <CODE>xml.indent.XmlIndenterPlugin.indentXml(view);</CODE> + </ACTION> <ACTION NAME="csssidekick-reload-completion-config"> <CODE> sidekick.css.CssSideKickCompletion.initialize(); Modified: plugins/XML/trunk/build.xml =================================================================== --- plugins/XML/trunk/build.xml 2006-07-30 17:24:15 UTC (rev 6464) +++ plugins/XML/trunk/build.xml 2006-07-30 17:48:32 UTC (rev 6465) @@ -48,6 +48,7 @@ <pathelement location="${install.dir}/xml-apis.jar"/> <pathelement location="${jedit.install.dir}/jedit.jar"/> <pathelement location="${install.dir}/ErrorList.jar"/> + <pathelement location="${install.dir}/Beauty.jar"/> <pathelement location="${install.dir}/SideKick.jar"/> <pathelement location="${install.dir}/xercesImpl.jar"/> <pathelement location="${install.dir}/resolver.jar"/> Modified: plugins/XML/trunk/docs/htmlsidekick.html =================================================================== --- plugins/XML/trunk/docs/htmlsidekick.html 2006-07-30 17:24:15 UTC (rev 6464) +++ plugins/XML/trunk/docs/htmlsidekick.html 2006-07-30 17:48:32 UTC (rev 6465) @@ -2,21 +2,32 @@ <html> <head> <title>HtmlSideKick</title> + <style type="text/css"> + .author { + font-weight: strong; + font-size: -1; + }; + .smaller { + font-size: -1; + }; + </style> + </head> <body bgcolor="#FFFFFF"> - <table bgcolor="#CCCCFF" summary="Header" cellspacing="0" border="0" width="100%" cols="2" > - <tr width="100%"> - <td valign="TOP"><strong><font size="+2">HtmlSideKick</font></strong></td> - <td valign="TOP" align="RIGHT"> - <font size="-1"> - <p><strong>Author: Dale Anson</strong> </p> - <p>based on an HTML grammar for javacc by Brian Goetz, Quiotix </p></font> + + + <table bgcolor="#CCCCFF" summary="Header" cellspacing="0" border="0" width="100%" > + <tr> + <td valign="top"><strong><font size="+2">HtmlSideKick</font></strong></td> + <td valign="top" align="right"> + <p class="author">Author: Dale Anson </p> + <p class="smaller">based on an HTML grammar for javacc by Brian Goetz, Quiotix </p> </td> </tr> </table> <table summary="Introduction" border="0" cellspacing="0" cellpadding="3" width="100%"> - <tr align="CENTER" width="100%"> + <tr align="center" > <td bgcolor="#7FB2FF" width="100%"> <strong><font color="#FFFFFF" size="+1"><a name="intro">Introduction</a></font></strong> </td> @@ -33,21 +44,19 @@ <h3>Completion</h3> - - - <p> From the XML plugin, the HtmlSideKick supports completion for elements and attributes. The completion info provided is not based on the DOCTYPE at the top, but rather extracted from a "completion info" file which is included with the XML plugin. The DOCTYPE is ignored by the HtmlSideKick. Also keep in mind, XML plugin does not like attributes unless they are in quotes, so it may pop up completions in inappropriate places if your use of quotes is not XML-compliant. </p> + <p> The HtmlSideKick supports completion for elements and attributes. The completion info provided is not based on the DOCTYPE at the top, but rather based on an HTML "completion info" file which is included with the XML plugin. The DOCTYPE is ignored by the HtmlSideKick.</p> + <p> If you are editing non-XML-compliant HTML, keep in mind that XML plugin provides completion, and does not like attributes unless they are in quotes, so it may pop up completions in inappropriate places if your use of quotes is not XML-compliant. </p> <h3> Validation </h3> - <p> HtmlSideKick provides no validation. - The XML plugin provides full validation based on any DTD or XML Schema. The "loosest" HTML grammar recognized by the XML parser is this: </p> + <p> HtmlSideKick provides no validation. If you switch to the XML parser, you can get full validation based on any DTD or XML Schema. The "loosest" HTML grammar recognized by the XML parser is this: </p> <pre><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd"> </pre> -<p> + <table summary="Settings" border="0" cellspacing="0" cellpadding="3" width="100%"> - <tr align="CENTER" width="100%"> + <tr align="center"> <td bgcolor="#7FB2FF" width="100%"> <strong><font color="#FFFFFF" size="+1"> <a name="intro"> Settings</a></font></strong> @@ -58,7 +67,7 @@ <a href="jeditresource:/XML.jar!/index.html">XML</a> plugins. This means that common options for this plugin are specified in the SideKick plugin options. Additional completion options, such as finishing the close-tag when you type <tt></</tt>, or providing element/attribute popups based on an XML DTD or schema, are specified in the XML plugin's general options. </p> <p> - The settings for HtmlSideKick are found at Plugins -> Plugin Options... -> HtmlSideKick. + The settings for HtmlSideKick are found at Plugins -> Plugin Options... -> HtmlSideKick. </p> <h3>Showing Tag Attributes</h3> There are 4 settings that affect the display of tag attributes: <ol> @@ -89,8 +98,8 @@ <li><b>Show JSP Tags</b> When checked, JSP tags will be displayed. </li> </ol> - <table summary="Future plans" border=0 cellspacing=0 cellpadding=3 width="100%"> - <tr align=CENTER width="100%"> + <table summary="Future plans" border="0" cellspacing="0" cellpadding="3" width="100%"> + <tr align="center"> <td bgcolor="#7FB2FF" width="100%"> <strong><font color="#FFFFFF" size="+1"><a name="future"> Future Plans</a></font></strong> </td> @@ -101,10 +110,10 @@ <li> Full W3C validation based on DTD. </li> </ul> - <table summary="History" border=0 cellspacing=0 cellpadding=3 width="100%"> - <tr align=CENTER width="100%"> + <table summary="History" border="0" cellspacing="0" cellpadding="3" width="100%"> + <tr align="center" > <td bgcolor="#7FB2FF" width="100%"> - <strong><font color="#FFFFFF" size="+1"><a name=history>History</a></font></strong> + <strong><font color="#FFFFFF" size="+1"><a name="history">History</a></font></strong> </td> </tr> </table> @@ -120,8 +129,8 @@ </ul> </li> </ul> - </div> + </body> </html> Modified: plugins/XML/trunk/docs/users-guide.xml =================================================================== --- plugins/XML/trunk/docs/users-guide.xml 2006-07-30 17:24:15 UTC (rev 6464) +++ plugins/XML/trunk/docs/users-guide.xml 2006-07-30 17:48:32 UTC (rev 6465) @@ -509,6 +509,156 @@ </chapter> + <chapter id="xmlindenter"> + <title>XML Indenter</title> + <para> + The Xml Indenter plugin allows you to indent the XML contents of the current open buffer. + You can invoke the "Indent XML" action via + a keyboard shortcut or toolbar icon; this can be configured from + "Utilities->Global Options->jEdit->Shortcuts" or + "Utilities->Global Options->jEdit->Tool Bar" respectively. + </para> + <para> + The indent width amount and whether to use soft (emulated with spaces) tabs + can be configured in the buffer options: + "Utilities->Buffer Options". + </para> + <para> + The following improvements should eventually be made to the Indent XML feature: + <itemizedlist> + <listitem><para> + Correctly support different line separator encodings. + </para> + </listitem> + </itemizedlist> + </para> + + <section id="whitespace"> + <title>Configuring whitespace preservation options</title> + <para> + You can configure elements whose enclosing text nodes should have whitespace + preserved by going to: + "Plugins->Plugin Options->XML Indenter". + </para> + <para> + On the options pane click the add button and in the dialog enter the qualified name + of an element whose whitespace should be preserved. + </para> + <para> + A qualified name consists of the element name plus any namespace prefix if there + is one. For example the XML Indenter comes preconfigured with whitespace preservation + for elements named xsl:text, text and tspan. + </para> + <para> + You can remove elements from the list by selecting them + and clicking the remove button. + </para> + </section> + + <section id="xmlindenter-contributors"> + <title>Contributors</title> + + <para>Robert McKinnon <email>rob...@us...</email> + created the plugin, formerly as part of the XSLT plugin.</para> + + <para>Robert Fletcher + contributed code to fix bugs related to tabs in the XML.</para> + + </section> + + + <section id="xmlindenter-feedback"> + <title>Feedback</title> + + <para>The preferred way to send bug reports is to use the + <ulink url="http://sourceforge.net/tracker/?atid=100588&group_id=588&func=browse">Sourceforge Bug Tracker</ulink>. + </para> + + <para>Feature requests should be posted to the jEdit users mailing-list + <email>jed...@li...</email>. + </para> + + <para>Development questions should be posted to the jEdit development mailing-list + <email>jed...@li...</email>. + </para> + </section> + + <appendix id="xmlindenter-changelog"> + <title>Change log</title> + <para> + <emphasis role="bold">From 0.3 to 0.3.2</emphasis> + <itemizedlist> + <listitem> + <para>A space before the /> in an empty element is kept, e.g. <br /> remains unchanged.</para> + </listitem> + <listitem> + <para>If the first attribute is on a new line it stays on a new line.</para> + </listitem> + <listitem> + <para>If an attribute is on a new line but the next one isn't then the next one will not be placed on a new line.</para> + </listitem> + <listitem><para>Requires >=jEdit 4.2 and >=XML plugin 0.12</para></listitem> + </itemizedlist> + </para> + <para> + <emphasis role="bold">From 0.2 to 0.3</emphasis> + <itemizedlist> + <listitem> + <para>Added options pane where user can configure a list of elements + whose enclosing text nodes should have whitespace preserved.</para> + </listitem> + <listitem> + <para>Attributes that start on a new line will stay on a new line + after indenting. They will be indented two levels deeper that the + element start tag.</para> + </listitem> + <listitem> + <para>Fixed bug where line breaks and tab characters were being + removed without being replaced with a single space character.</para> + </listitem> + <listitem> + <para>Fixed bug where attribute values in single quotes were being + replaced with attribute values in double quotes, regardless of whether + the attribute value contained double quotes.</para> + </listitem> + <listitem><para>Requires >=jEdit 4.2 and >=XML plugin 0.12</para></listitem> + </itemizedlist> + </para> + <para> + <emphasis role="bold">From 0.1.2 to 0.2</emphasis> + <itemizedlist> + <listitem> + <para>Ported plugin to jEdit 4.2 Plugin API.</para> + </listitem> + <listitem> + <para>Fixed bug that occurred when attributes are separated by + line separater characters instead of space characters.</para> + </listitem> + <listitem><para>Requires >=jEdit 4.2 and >=XML plugin 0.12</para></listitem> + </itemizedlist> + </para> + <para> + <emphasis role="bold">Moved from XSLT 0.4.1 plugin to XML Indenter 0.1.2 plugin</emphasis> + <itemizedlist> + <listitem> + <para>Fixed various indenting bugs. + Fixed bug that added new lines when indenting files containing CDATA. + Fixed indenting bugs that occurred when '<' and line separator + characters are in attribute values. + No longer remove empty whitespace from xsl:text elements when indenting. + Comments no longer moved to new lines. + Fixed empty element repeating '/' bug. + </para> + </listitem> + <listitem><para>Requires >=jEdit 4.1 and >=XML plugin 0.11.1</para></listitem> + </itemizedlist> + </para> + </appendix> + +</chapter> + + + <appendix id="problems"><title>Resolving Dependency Problems </title> <para> The Xml plugin depends on <ulink url="jeditresource:/SideKick.jar!/index.html">SideKick</ulink> and the <ulink url="jeditresource:/XercesPlugin.jar!/docs/index.html">XercesPlugin</ulink>. </para> @@ -549,6 +699,7 @@ Requires jEdit 4.3pre5, Java 1.5, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. <itemizedlist> <listitem><para> Fixed bug with error messages from files in samba shares. </para></listitem> + <listitem><para> Merged XmlIndenter plugin with XML plugin. </para></listitem> </itemizedlist> </para></listitem> Modified: plugins/XML/trunk/services.xml =================================================================== --- plugins/XML/trunk/services.xml 2006-07-30 17:24:15 UTC (rev 6464) +++ plugins/XML/trunk/services.xml 2006-07-30 17:48:32 UTC (rev 6465) @@ -16,6 +16,10 @@ <SERVICE CLASS="sidekick.SideKickParser" NAME="javascript"> new sidekick.javascript.JavaScriptParser(); </SERVICE> + <SERVICE CLASS="beauty.beautifiers.Beautifier" NAME="xml:XmlIndenter"> + new xml.indent.XmlBeautifier(); + </SERVICE> + <!-- Newer version not working yet <SERVICE CLASS="sidekick.SideKickParser" NAME="xml"> new xml.parser.XercesParserImpl(); Copied: plugins/XML/trunk/xml/indent/IndentingTransformer.java (from rev 6464, plugins/XML/trunk/xml/indent/xmlindenter/IndentingTransformer.java) =================================================================== --- plugins/XML/trunk/xml/indent/IndentingTransformer.java (rev 0) +++ plugins/XML/trunk/xml/indent/IndentingTransformer.java 2006-07-30 17:48:32 UTC (rev 6465) @@ -0,0 +1,539 @@ +/* +* AbstractIndentingTransformer.java - Indents XML elements, by adding whitespace where appropriate. +* +* Copyright (c) 2002, 2003 Robert McKinnon +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* email: rob...@us... +*/ + +package xml.indent; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; +import org.xml.sax.ext.DeclHandler; +import org.xml.sax.helpers.AttributesImpl; + +import javax.xml.transform.sax.TransformerHandler; +import java.io.IOException; +import java.io.Writer; +import java.util.regex.*; + + +/** + * Indents elements, by adding whitespace where appropriate. + * Does not remove blank lines between nodes. + * Does not remove new lines within text nodes. + * Puts element tags immediately following mixed content text on the same line as the text. + * + * @author Robert McKinnon - rob...@us... + */ +public abstract class IndentingTransformer implements TransformerHandler, DeclHandler { + + private static final String ON_NEW_LINE = "onNewLine"; + + /** buffer to hold character data */ + private Writer writer; + + private String xml; + private char[] chars; + private boolean okToContinue = true; + private boolean isClosingTag = false; + private boolean isEmptyElement = false; + private boolean isDocType = false; + + public void characters( char ch[], int start, int length ) throws SAXException { + try { + if ( isDocType ) { + isDocType = false; + } + else { + writer.write( ch, start, length ); + } + } + catch ( IOException e ) { + throw new SAXException( e ); + } + } + + + public void comment( char ch[], int start, int length ) throws SAXException { + try { + writer.write( "<!--" ); + writer.write( ch, start, length ); + writer.write( "-->" ); + } + catch ( IOException e ) { + throw new SAXException( e ); + } + } + + + public void processingInstruction( String target, String data ) throws SAXException { + try { + writer.write( "<?" ); + writer.write( target ); + writer.write( " " ); + writer.write( data ); + writer.write( "?>" ); + } + catch ( IOException e ) { + throw new SAXException( e ); + } + } + + + public void endElement( String namespaceURI, String localName, String qName ) throws SAXException { + try { + if ( isClosingTag ) { + writer.write( "</" ); + writer.write( qName ); + writer.write( ">" ); + isClosingTag = false; + } + } + catch ( IOException e ) { + throw new SAXException( e ); + } + } + + + public void startElement( String namespaceURI, String localName, String qName, Attributes atts ) + throws SAXException { + + try { + writer.write( "<" ); + + boolean spaceAtEnd = qName.charAt( qName.length() - 1 ) == ' '; + if ( spaceAtEnd ) { + writer.write( qName.substring( 0, qName.length() - 1 ) ); + } + else { + writer.write( qName ); + } + + for ( int i = 0; i < atts.getLength(); i++ ) { + String attributeQName = atts.getQName( i ); + String attributeValue = atts.getValue( i ); + boolean onNewLine = ( atts.getType( i ) == ON_NEW_LINE ); + + boolean containsDoubleQuote = ( attributeValue.indexOf( '"' ) != -1 ); + char quote = containsDoubleQuote ? '\'' : '\"'; + + if ( onNewLine ) { + indent( 2 ); + } + else { + writer.write( ' ' ); + } + + writer.write( attributeQName ); + writer.write( '=' ); + writer.write( quote ); + writer.write( attributeValue ); + writer.write( quote ); + } + + if ( isEmptyElement ) { + if ( spaceAtEnd ) { + writer.write( " />" ); // to cater for <br /> elements + } + else { + writer.write( "/>" ); + } + } + else { + writer.write( ">" ); + } + } + catch ( IOException e ) { + throw new SAXException( e ); + } + + } + + protected abstract void indent( int levelAdjustment ) throws SAXException; + + protected String indentXml( final String xmlString, final Writer outputWriter ) throws IOException, SAXException { + this.okToContinue = true; + this.isClosingTag = false; + this.isEmptyElement = false; + this.isDocType = false; + this.writer = outputWriter; + this.xml = xmlString; + this.chars = xml.toCharArray(); + + int start = 0; + int end = 0; + + while ( okToContinue ) { + end = xml.indexOf( '<', start ); + writeTextPrecedingLessThan( start, end ); + + if ( okToContinue ) { + start = end; + + if ( xml.startsWith( "<!--", start ) ) { + end = writeComment( start ); + + } + else if ( xml.startsWith( "<?", start ) ) { + end = writeXmlDeclarationOrProcessingInstruction( start ); + + } + else if ( xml.startsWith( "<!", start ) ) { + if ( xml.startsWith( "<![CDATA[", start ) ) { + end = writeCData( start ); + } + else { + end = writeDocType( start ); + } + } + else if ( xml.startsWith( "</", start ) ) { + end = writeClosingTag( start ); + + } + else if ( Character.isWhitespace( chars[ start + 1 ] ) ) { + throw new SAXException( "The content of elements must consist of well-formed character data or markup." ); + + } + else { + end = writeElement( start ); + } + + start = end; + } + } + + return outputWriter.toString(); + } + + + private int writeCData( int start ) throws IOException, SAXException { + int end = xml.indexOf( "]]>", start ); + writeRemaining( start, end ); + if ( okToContinue ) { + startCDATA(); + end = end + 3; + writer.write( xml, start, end - start ); + endCDATA(); + } + + return end; + } + + + private int writeElement( int start ) throws IOException, SAXException { + int end = getStartTagEnd( start ); + writeRemaining( start, end ); + + if ( okToContinue ) { + int offset = 1; + while ( Character.isWhitespace( chars[ end - offset ] ) ) { + offset++; + } + isEmptyElement = ( chars[ end - offset ] == '/' ); + + if ( isEmptyElement ) { + end = end - offset; + } + + AttributesImpl attributes = new AttributesImpl(); + String elementName = getElementNameAndPopulateAttributes( start, end, attributes ); + + if ( isEmptyElement && chars[ end - 1 ] == ' ' ) { + elementName += ' '; // to cater for <br /> elements + } + + startElement( "", "", elementName, attributes ); + + if ( isEmptyElement ) { + endElement( "", "", elementName ); + end = end + offset + 1; + isEmptyElement = false; + } + else { + end = end + 1; + } + } + + return end; + } + + + /** + * Ignores '>' characters that are inside of attribute values. + */ + private int getStartTagEnd( int start ) { + int end = -1; + int index = start; + + while ( index < chars.length && end == -1 ) { + char aChar = chars[ index ]; + index++; + + if ( aChar == '\"' ) { + while ( chars[ index ] != '\"' ) { + index++; + } + index++; + } + else if ( aChar == '\'' ) { + while ( chars[ index ] != '\'' ) { + index++; + } + index++; + // } else if(aChar == '/') { + // while(chars[index] != '>') { + // index++; + // } + } + else if ( aChar == '>' ) { + end = index - 1; + // end = index; + } + } + return end; + } + + + Pattern p = Pattern.compile( "([<].*?)\\s", Pattern.DOTALL ); + private String getElementNameAndPopulateAttributes( int start, int end, AttributesImpl attributes ) throws SAXException { + // element name ends at _first_ white space char + int nameEnd = -1; + Matcher m = p.matcher(xml.substring(start, end)); + boolean found = m.find(); + if (found) { + nameEnd = start + m.end(); + } + else { + nameEnd = xml.indexOf( ' ', start ); + + if ( nameEnd == -1 || nameEnd > end ) { + nameEnd = xml.indexOf( '\n', start ); + } + + if ( nameEnd == -1 || nameEnd > end ) { + nameEnd = xml.indexOf( '\r', start ); + } + } + if ( nameEnd == -1 || nameEnd > end ) { + nameEnd = end; + } + else if ( nameEnd + 1 != end ) { + while ( Character.isWhitespace( chars[ nameEnd - 1 ] ) ) { + nameEnd--; // want to check if char at nameEnd is a new line char + } + char[] elementChars = xml.substring( nameEnd, end ).toCharArray(); + populateAttributes( elementChars, attributes ); + } + + StringBuffer elementName = new StringBuffer(); + int index = start + 1; + + while ( !Character.isWhitespace( chars[ index ] ) && chars[ index ] != '>' && chars[ index ] != '/' ) { + elementName.append( chars[ index++ ] ); + } + + return elementName.toString(); + } + + + private void populateAttributes( char[] chars, AttributesImpl attributes ) throws SAXException { + StringBuffer qName = new StringBuffer(); + StringBuffer value = new StringBuffer(); + boolean isLastSpace = false; + char quote = '\"'; + int i = 0; + boolean attributeOnNewLine; + + while ( i < chars.length ) { + attributeOnNewLine = false; + qName.setLength( 0 ); + value.setLength( 0 ); + + while ( i < chars.length && Character.isWhitespace( chars[ i ] ) ) { + if ( chars[ i ] == '\r' || chars[ i ] == '\n' ) { + attributeOnNewLine = true; + } + i++; + } + + if ( i < chars.length ) { + while ( i < chars.length && chars[ i ] != '=' ) { + qName.append( chars[ i ] ); + i++; + } + i++; // get past equals + + while ( i < chars.length && Character.isWhitespace( chars[ i ] ) ) { + i++; // get past whitespace before first quote + } + + if ( i < chars.length ) { + if ( chars[ i ] != '\"' && chars[ i ] != '\'' ) { + throw new SAXException( "value for attribute " + qName.toString().trim() + " must be in quotes" ); + } + else { + quote = chars[ i ]; + i++; // get past first quote + } + } + + while ( i < chars.length && chars[ i ] != quote ) { + if ( Character.isWhitespace( chars[ i ] ) ) { + if ( !isLastSpace ) { + if ( chars[ i ] == '\f' || chars[ i ] == '\n' || chars[ i ] == '\r' || chars[ i ] == '\t' || chars[ i ] == ' ' ) { + value.append( ' ' ); + } + isLastSpace = true; + } + else { + // don't add consecutive space + } + } + else { + value.append( chars[ i ] ); + isLastSpace = false; + } + + i++; + } + + i++; // get past quote + + String type = attributeOnNewLine ? ON_NEW_LINE : ""; + attributes.addAttribute( "", "", qName.toString().trim(), type, value.toString() ); + } + } + } + + + private int writeClosingTag( int start ) throws IOException, SAXException { + int end = xml.indexOf( '>', start ); + writeRemaining( start, end ); + + if ( okToContinue ) { + isClosingTag = true; + endElement( "", "", xml.substring( start + 2, end ).trim() ); + end = end + 1; + } + return end; + } + + + private int writeDocType( int start ) throws IOException { + int end = xml.indexOf( '>', start ); + int bracketStart = xml.indexOf( '[', start ); + + if ( bracketStart != -1 && bracketStart < end ) { + int bracketEnd = xml.indexOf( ']', bracketStart ); + end = xml.indexOf( '>', bracketEnd ); + } + + writeRemaining( start, end ); + + if ( okToContinue ) { + end = end + 1; + writer.write( "\n" ); + int length = end - start; + writer.write( xml, start, length ); + isDocType = true; + } + + return end; + } + + + private int writeXmlDeclarationOrProcessingInstruction( int start ) throws IOException, SAXException { + int end; + + if ( xml.startsWith( "<?xml ", start ) ) { + end = writeXmlDeclaration( start ); + } + else { + end = writeProcessingInstruction( start ); + } + + return end; + } + + + private int writeProcessingInstruction( int start ) throws IOException, SAXException { + int end = xml.indexOf( "?>", start ); + writeRemaining( start, end ); + + if ( okToContinue ) { + int targetEnd = xml.indexOf( " ", start ); + String target = xml.substring( start + "<?".length(), targetEnd ); + String data = xml.substring( targetEnd + 1, end ); + processingInstruction( target, data ); + end = end + "?>".length(); + } + + return end; + } + + + private int writeXmlDeclaration( int start ) throws IOException { + int end = xml.indexOf( "?>", start ); + writeRemaining( start, end ); + + if ( okToContinue ) { + end = end + "?>".length(); + int length = end - start; + writer.write( xml, start, length ); + } + + return end; + } + + + private int writeComment( int start ) throws IOException, SAXException { + int end = xml.indexOf( "-->", start ); + writeRemaining( start, end ); + + if ( okToContinue ) { + int commentTextStart = start + "<!--".length(); + int commentTextLength = end - commentTextStart; + comment( chars, commentTextStart, commentTextLength ); + end = end + "-->".length(); + } + + return end; + } + + + private void writeTextPrecedingLessThan( int start, int end ) throws IOException, SAXException { + writeRemaining( start, end ); + + if ( okToContinue && end > start ) { + int length = end - start; + characters( chars, start, length ); + } + } + + + private void writeRemaining( int start, int end ) throws IOException { + if ( end == -1 ) { + int length = xml.length() - start; + writer.write( xml, start, length ); + okToContinue = false; + } + } + + +} Copied: plugins/XML/trunk/xml/indent/IndentingTransformerImpl.java (from rev 6464, plugins/XML/trunk/xml/indent/xmlindenter/IndentingTransformerImpl.java) =================================================================== --- plugins/XML/trunk/xml/indent/IndentingTransformerImpl.java (rev 0) +++ plugins/XML/trunk/xml/indent/IndentingTransformerImpl.java 2006-07-30 17:48:32 UTC (rev 6465) @@ -0,0 +1,350 @@ +/* + * IndentingTransformerImpl.java - Indents XML elements, by adding whitespace where appropriate. + * + * Copyright (c) 2002, 2003 Robert McKinnon + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * email: rob...@us... + */ + +package xml.indent; + +import org.xml.sax.Attributes; +import org.xml.sax.Locator; +import org.xml.sax.SAXException; + +import javax.xml.transform.Result; +import javax.xml.transform.Transformer; +import java.util.List; +import java.io.Writer; +import java.io.IOException; + +/** + * Indents elements, by adding whitespace where appropriate. + * Does not remove blank lines between nodes. + * Does not remove new lines within text nodes. + * Puts element tags immediately following mixed content text on the same line as the text. + * + * @author Robert McKinnon - rob...@us... + */ +public class IndentingTransformerImpl extends IndentingTransformer { + + private List preserveWhitespaceList; + + /** indent by this many spaces */ + private int indentAmount = 2; + + /** indent with tabs instead of spaces */ + private char indentChar; + + /** current indentation level */ + private int indentLevel; + +// /** true if the previous tag was an element start tag */ +// private boolean isStartTagPrevious = false; + + /** true if no newlines in element */ + private boolean isSameLine; + + /** true if last item was non-whitespace text */ + private boolean isLastText; + + /** true if there is a non-whitespace text item, followed by an element start */ + private boolean isMixedContent; + + /** true if inside an element configured to have whitespace preserved */ + private boolean preserveWhitespace; + + /** name of element we are inside that is configured to have whitespace preserved */ + private String preserveWhitespaceElement; + + /** buffer to hold character data */ + private StringBuffer buffer = new StringBuffer(); + + + public String indentXml(String xmlString, Writer outputWriter, int indentAmount, boolean indentWithTabs, List preserveWhitespaceList) + throws IOException, SAXException { + this.preserveWhitespaceList = preserveWhitespaceList; + this.indentAmount = indentAmount; + + if(indentWithTabs) { + this.indentChar = '\t'; + } else { + this.indentChar = ' '; + } + + indentLevel = 0; + isSameLine = false; + isLastText = false; + isMixedContent = false; + preserveWhitespace = false; + preserveWhitespaceElement = null; + buffer.setLength(0); + + return super.indentXml(xmlString, outputWriter); + } + + + public Transformer getTransformer() { + return null; + } + + + public void startElement(String uri, String localName, String qualifiedName, Attributes attributes) throws SAXException { + flush(); + + if(preserveWhitespaceList.contains(qualifiedName)) { + preserveWhitespace = true; + preserveWhitespaceElement = qualifiedName; + } + + if(isLastText && !isMixedContent) { + isMixedContent = true; + } + + if(!isMixedContent) { + indent(0); + } + + super.startElement(uri, localName, qualifiedName, attributes); +// isStartTagPrevious = true; + + indentLevel++; + + isSameLine = true; // assume a single line of content + } + + + public void endElement(String uri, String localName, String qualifiedName) throws SAXException { +// boolean tempIsLastText = isLastText; +// if(isStartTagPrevious) { +// isLastText = true; +// } + + flush(); + +// if(isStartTagPrevious) { +// isLastText = tempIsLastText; +// } + + indentLevel--; + + if(!isMixedContent && !isSameLine && !isLastText) { + indent(0); + } + + super.endElement(uri, localName, qualifiedName); +// isStartTagPrevious = false; + isLastText = false; + isSameLine = false; + isMixedContent = false; + + if(qualifiedName.equals(preserveWhitespaceElement)) { + preserveWhitespace = false; + preserveWhitespaceElement = null; + } + } + + + public void processingInstruction(String target, String data) throws SAXException { + flush(); + indent(0); + super.processingInstruction(target, data); + } + + + public void characters(char[] chars, int start, int length) throws SAXException { + for(int i = start; i < start + length; i++) { + if(!Character.isWhitespace(chars[i])) { + isLastText = true; + } + } + + if(preserveWhitespace) { + isLastText = true; + } + + buffer.append(chars, start, length); + } + + + public void comment(char[] chars, int start, int len) throws SAXException { + isLastText = true; + flush(); + super.comment(chars, start, len); + isLastText = false; + } + + + /** + * Output white space to reflect the current indentation level + */ + protected void indent(int levelAdjustment) throws SAXException { + char[] indent = new char[(indentLevel + levelAdjustment) * indentAmount + 1]; + indent[0] = '\n'; + + for(int i = 1; i < indent.length; i++) { + indent[i] = indentChar; + } + + super.characters(indent, 0, indent.length); + } + + + /** + * Flush the buffer containing accumulated character data. + * White space adjacent to markup is trimmed. + */ + public void flush() throws SAXException { + int end = buffer.length(); + int start = 0; + + if(end != 0) { + char[] array = new char[end]; + buffer.getChars(0, end, array, 0); + + if(!isLastText) { + + boolean stripNewLineFromStart = true; + + while(start < end && Character.isWhitespace(array[start])) { + if(Character.isSpaceChar(array[start]) || array[start] == '\t') { + start++; + } else if(stripNewLineFromStart) { + start++; + stripNewLineFromStart = false; + } else { + break; + } + } + + if(start < end && Character.isWhitespace(array[end - 1])) { + + while(start < end && Character.isWhitespace(array[end - 1])) { + if(Character.isSpaceChar(array[end - 1]) || array[start] == '\t') { + end--; + } else { + break; + } + } + } + + for(int i = start; i < end; i++) { + if(array[i] == '\n') { + isSameLine = false; + break; + } + } + } + + super.characters(array, start, end - start); + buffer.setLength(0); + } + + } + + + public void setDocumentLocator(Locator locator) { + } + + + public void startCDATA() throws SAXException { + isLastText = true; + flush(); + } + + + public void notationDecl(String name, String publicId, String systemId) throws SAXException { + } + + + public void setSystemId(String systemID) { + } + + + public void startDocument() throws SAXException { + } + + + public void endCDATA() throws SAXException { + } + + + public void unparsedEntityDecl(String name, String publicId, String systemId, String notationName) throws SAXException { + } + + + public String getSystemId() { + return null; + } + + + public void endDocument() throws SAXException { + } + + + public void startPrefixMapping(String prefix, String uri) throws SAXException { + } + + + public void endPrefixMapping(String prefix) throws SAXException { + } + + + public void skippedEntity(String name) throws SAXException { + } + + + public void setResult(Result result) throws IllegalArgumentException { + } + + + public void ignorableWhitespace(char[] chars, int i, int i1) throws SAXException { + } + + + public void endDTD() throws SAXException { + } + + + public void attributeDecl(String s, String s1, String s2, String s3, String s4) throws SAXException { + } + + + public void endEntity(String s) throws SAXException { + } + + + public void elementDecl(String s, String s1) throws SAXException { + } + + + public void startDTD(String s, String s1, String s2) throws SAXException { + } + + + public void externalEntityDecl(String s, String s1, String s2) throws SAXException { + } + + + public void startEntity(String s) throws SAXException { + } + + + public void internalEntityDecl(String s, String s1) throws SAXException { + } + +} Copied: plugins/XML/trunk/xml/indent/PreserveWhitespaceOptionsPane.java (from rev 6464, plugins/XML/trunk/xml/indent/xmlindenter/PreserveWhitespaceOptionsPane.java) =================================================================== --- plugins/XML/trunk/xml/indent/PreserveWhitespaceOptionsPane.java (rev 0) +++ plugins/XML/trunk/xml/indent/PreserveWhitespaceOptionsPane.java 2006-07-30 17:48:32 UTC (rev 6465) @@ -0,0 +1,119 @@ +/* + * PreserveWhitespaceOptionsPane.java + * + * Copyright (c) 2003 Robert McKinnon + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +package xml.indent; + +import javax.swing.border.EmptyBorder; +import javax.swing.event.*; +import javax.swing.*; +import java.awt.event.*; +import java.awt.*; + +import org.gjt.sp.jedit.gui.*; +import org.gjt.sp.jedit.*; + +public class PreserveWhitespaceOptionsPane extends AbstractOptionPane { + + private JList elementList; + private DefaultListModel elementListModel; + private JButton add; + private JButton remove; + + public PreserveWhitespaceOptionsPane() { + super("xmlindenter"); + } + + protected void _init() { + setLayout(new BorderLayout()); + + JLabel label = new JLabel(jEdit.getProperty("options.xmlindenter.caption")); + label.setBorder(new EmptyBorder(0, 0, 6, 0)); + add(BorderLayout.NORTH, label); + + elementListModel = new DefaultListModel(); + int i = 0; + String element; + while((element = jEdit.getProperty("xmlindenter.preserve-whitespace-element." + i)) != null) { + elementListModel.addElement(element); + i++; + } + + elementList = new JList(elementListModel); + add(BorderLayout.CENTER, new JScrollPane(elementList)); + elementList.addListSelectionListener(new ListHandler()); + + JPanel buttons = new JPanel(); + buttons.setLayout(new BoxLayout(buttons, BoxLayout.X_AXIS)); + buttons.setBorder(new EmptyBorder(6, 0, 0, 0)); + + add = new RolloverButton(GUIUtilities.loadIcon("Plus.png")); + add.setToolTipText(jEdit.getProperty("options.xmlindenter.add")); + add.addActionListener(new ActionHandler()); + buttons.add(add); + remove = new RolloverButton(GUIUtilities.loadIcon("Minus.png")); + remove.setToolTipText(jEdit.getProperty("options.xmlindenter.remove")); + remove.addActionListener(new ActionHandler()); + buttons.add(remove); + buttons.add(Box.createGlue()); + + add(BorderLayout.SOUTH, buttons); + + updateEnabled(); + } + + protected void _save() { + int i; + for (i = 0; i < elementListModel.getSize(); i++) { + String element = (String)elementListModel.getElementAt(i); + jEdit.setProperty("xmlindenter.preserve-whitespace-element." + i, element); + } + + jEdit.unsetProperty("xmlindenter.preserve-whitespace-element." + i); + jEdit.setProperty("xmlindenter.preserve-whitespace-element.modified", "true"); + } + + private void updateEnabled() { + boolean selected = (elementList.getSelectedValue() != null); + remove.setEnabled(selected); + } + + class ActionHandler implements ActionListener { + public void actionPerformed(ActionEvent event) { + if (event.getSource() == add) { + String property = "options.xmlindenter.dialog"; + String name = GUIUtilities.input(PreserveWhitespaceOptionsPane.this, property, ""); + + if(name == null || name.length() == 0) + return; + + elementListModel.addElement(name); + + } else if (event.getSource() == remove) { + elementListModel.removeElementAt(elementList.getSelectedIndex()); + updateEnabled(); + } + } + } + + class ListHandler implements ListSelectionListener { + public void valueChanged(ListSelectionEvent evt) { + updateEnabled(); + } + } +} Copied: plugins/XML/trunk/xml/indent/XmlBeautifier.java (from rev 6464, plugins/XML/trunk/xml/indent/xmlindenter/XmlBeautifier.java) =================================================================== --- plugins/XML/trunk/xml/indent/XmlBeautifier.java (rev 0) +++ plugins/XML/trunk/xml/indent/XmlBeautifier.java 2006-07-30 17:48:32 UTC (rev 6465) @@ -0,0 +1,40 @@ +/* + * XmlIndenterPlugin.java - EditPlugin implementation for the XML Indenter plugin + * + * Copyright (c) 2003 Robert McKinnon + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package xml.indent; + + +import beauty.beautifiers.Beautifier; +import beauty.parsers.ParserException; + +/** + * danson, Added to integrate with Beauty plugin. + */ +public class XmlBeautifier extends Beautifier { + + public String beautify(String text) throws ParserException { + try { + return XmlIndenterPlugin.indent(text, getIndentWidth(), !getUseSoftTabs()); + } + catch(Exception e) { + throw new ParserException(e); + } + } +} Copied: plugins/XML/trunk/xml/indent/XmlIndenterPlugin.java (from rev 6464, plugins/XML/trunk/xml/indent/xmlindenter/XmlIndenterPlugin.java) =================================================================== --- plugins/XML/trunk/xml/indent/XmlIndenterPlugin.java (rev 0) +++ plugins/XML/trunk/xml/indent/XmlIndenterPlugin.java 2006-07-30 17:48:32 UTC (rev 6465) @@ -0,0 +1,161 @@ +/* + * XmlIndenterPlugin.java - EditPlugin implementation for the XML Indenter plugin + * + * Copyright (c) 2003 Robert McKinnon + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +package xml.indent; + +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.Buffer; +import org.gjt.sp.util.Log; + +import javax.swing.JOptionPane; +import java.awt.Component; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.text.MessageFormat; +import java.util.List; +import java.util.ArrayList; + +/** + * EditPlugin implementation for the XML Indenter plugin. + * + * @author Robert McKinnon - rob...@us... + */ +public class XmlIndenterPlugin { + + private static final String XSL_TEXT_ELEMENT = "xsl:text"; + private static final String SVG_TEXT_ELEMENT = "text"; + private static final String SVG_TSPAN_ELEMENT = "tspan"; + + private static final IndentingTransformerImpl TRANSFORMER = new IndentingTransformerImpl(); + + public void start() { + String modified = jEdit.getProperty("xmlindenter.preserve-whitespace-element.modified"); + boolean settingModified = (modified != null); + if(!settingModified) { + jEdit.setProperty("xmlindenter.preserve-whitespace-element.0", XSL_TEXT_ELEMENT); + jEdit.setProperty("xmlindenter.preserve-whitespace-element.1", SVG_TEXT_ELEMENT); + jEdit.setProperty("xmlindenter.preserve-whitespace-element.2", SVG_TSPAN_ELEMENT); + } + } + + /** + * Displays a user-friendly error message to go with the supplied exception. + */ + static void processException(Exception e, String message, Component component) { + StringWriter writer = new StringWriter(); + e.printStackTrace(new PrintWriter(writer)); + Log.log(Log.DEBUG, Thread.currentThread(), writer.toString()); + String msg = MessageFormat.format(jEdit.getProperty("xmlindenter.message.error"), + new Object[]{message, e.getMessage()}); + JOptionPane.showMessageDialog(component, msg.toString()); + } + + + static void showMessageDialog(String property, Component component) { + String message = jEdit.getProperty(property); + JOptionPane.showMessageDialog(component, message); + } + + + /** + * Indents XML in current buffer. + * @param view + */ + public static void indentXml(View view) { + Buffer buffer = view.getBuffer(); + boolean indentWithTabs = getIndentWithTabs(buffer); + int indentAmount = getIndentAmount(indentWithTabs, buffer); + + buffer.writeLock(); + buffer.beginCompoundEdit(); + + try { + String inputString = buffer.getText(0, buffer.getLength()); + String resultString = XmlIndenterPlugin.indent(inputString, indentAmount, indentWithTabs); + + int caretPosition = view.getTextArea().getCaretPosition(); + buffer.remove(0, buffer.getLength()); + buffer.insert(0, resultString); + + if(caretPosition > (buffer.getLength() - 1)) { + view.getTextArea().setCaretPosition(buffer.getLength() - 1); + } else { + char c = resultString.charAt(caretPosition); + + while(caretPosition < buffer.getLength() && !(c == '>' || c == '<')) { + caretPosition++; //hack to prevent XML autocomplete of end element name + c = resultString.charAt(caretPosition); + } + + if(c == '>') { + caretPosition++; + } + view.getTextArea().setCaretPosition(caretPosition); + } + } catch(Exception e) { + Log.log(Log.ERROR, IndentingTransformerImpl.class, e); + String message = jEdit.getProperty("xmlindenter.indent.message.failure"); + XmlIndenterPlugin.processException(e, message, view); + } finally { + if(buffer.insideCompoundEdit()) { + buffer.endCompoundEdit(); + } + buffer.writeUnlock(); + } + } + + + private static boolean getIndentWithTabs(Buffer buffer) { + boolean tabSizeAppropriate = buffer.getTabSize() <= buffer.getIndentSize(); + return !buffer.getBooleanProperty("noTabs") && tabSizeAppropriate; + } + + + private static int getIndentAmount(boolean indentWithTabs, Buffer buffer) { + if(indentWithTabs) { + return buffer.getIndentSize() / buffer.getTabSize(); + } else { + return buffer.getIndentSize(); + } + } + + + protected static String indent(String inputString, int indentAmount, boolean indentWithTabs) throws Exception { + List preserveWhitespaceList = getEnumeratedProperty("xmlindenter.preserve-whitespace-element"); + StringWriter writer = new StringWriter(); + Log.log(Log.ERROR, XmlIndenterPlugin.class, "" + preserveWhitespaceList.size()); + TRANSFORMER.indentXml(inputString, writer, indentAmount, indentWithTabs, preserveWhitespaceList); + String resultString = writer.toString(); +// return removeIn(resultString, '\r'); //remove '\r' to temporarily fix a bug in the display of results in Windows + return resultString; + } + + public static List getEnumeratedProperty(String key) { + List values = new ArrayList(); + int i = 0; + String value; + while((value = jEdit.getProperty(key+"."+i)) != null) { + values.add(value); + i++; + } + return values; + } + +} Deleted: plugins/XML/trunk/xml/indent/xmlindenter/IndentingTransformer.java =================================================================== --- plugins/XML/trunk/xml/indent/xmlindenter/IndentingTransformer.java 2006-07-30 17:24:15 UTC (rev 6464) +++ plugins/XML/trunk/xml/indent/xmlindenter/IndentingTransformer.java 2006-07-30 17:48:32 UTC (rev 6465) @@ -1,539 +0,0 @@ -/* -* AbstractIndentingTransformer.java - Indents XML elements, by adding whitespace where appropriate. -* -* Copyright (c) 2002, 2003 Robert McKinnon -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License -* as published by the Free Software Foundation; either version 2 -* of the License, or any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -* -* email: rob...@us... -*/ - -package xmlindenter; - -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; -import org.xml.sax.ext.DeclHandler; -import org.xml.sax.helpers.AttributesImpl; - -import javax.xml.transform.sax.TransformerHandler; -import java.io.IOException; -import java.io.Writer; -import java.util.regex.*; - - -/** - * Indents elements, by adding whitespace where appropriate. - * Does not remove blank lines between nodes. - * Does not remove new lines within text nodes. - * Puts element tags immediately following mixed content text on the same line as the text. - * - * @author Robert McKinnon - rob...@us... - */ -public abstract class IndentingTransformer implements TransformerHandler, DeclHandler { - - private static final String ON_NEW_LINE = "onNewLine"; - - /** buffer to hold character data */ - private Writer writer; - - private String xml; - private char[] chars; - private boolean okToContinue = true; - private boolean isClosingTag = false; - private boolean isEmptyElement = false; - private boolean isDocType = false; - - public void characters( char ch[], int start, int length ) throws SAXException { - try { - if ( isDocType ) { - isDocType = false; - } - else { - writer.write( ch, start, length ); - } - } - catch ( IOException e ) { - throw new SAXException( e ); - } - } - - - public void comment( char ch[], int start, int length ) throws SAXException { - try { - writer.write( "<!--" ); - writer.write( ch, start, length ); - writer.write( "-->" ); - } - catch ( IOException e ) { - throw new SAXException( e ); - } - } - - - public void processingInstruction( String target, String data ) throws ... [truncated message content] |
From: <ez...@us...> - 2006-07-30 18:01:18
|
Revision: 6468 Author: ezust Date: 2006-07-30 11:01:12 -0700 (Sun, 30 Jul 2006) ViewCVS: http://svn.sourceforge.net/jedit/?rev=6468&view=rev Log Message: ----------- Modified Paths: -------------- plugins/XML/trunk/TODO.txt Removed Paths: ------------- plugins/XML/trunk/Apache.LICENSE.txt Deleted: plugins/XML/trunk/Apache.LICENSE.txt =================================================================== --- plugins/XML/trunk/Apache.LICENSE.txt 2006-07-30 17:52:46 UTC (rev 6467) +++ plugins/XML/trunk/Apache.LICENSE.txt 2006-07-30 18:01:12 UTC (rev 6468) @@ -1,50 +0,0 @@ -/* - - ============================================================================ - The Apache Software License, Version 1.1 - ============================================================================ - - Copyright (C) 2000-2002 The Apache Software Foundation. All rights reserved. - - Redistribution and use in source and binary forms, with or without modifica- - tion, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. The end-user documentation included with the redistribution, if any, must - include the following acknowledgment: "This product includes software - developed by the Apache Software Foundation (http://www.apache.org/)." - Alternately, this acknowledgment may appear in the software itself, if - and wherever such third-party acknowledgments normally appear. - - 4. The names "Jakarta", "Avalon", "Excalibur" and "Apache Software Foundation" - must not be used to endorse or promote products derived from this software - without prior written permission. For written permission, please contact - ap...@ap.... - - 5. Products derived from this software may not be called "Apache", nor may - "Apache" appear in their name, without prior written permission of the - Apache Software Foundation. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- - DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - This software consists of voluntary contributions made by many individuals - on behalf of the Apache Software Foundation and was originally created by - Stefano Mazzocchi <st...@ap...>. For more information on the Apache - Software Foundation, please see <http://www.apache.org/>. - -*/ Modified: plugins/XML/trunk/TODO.txt =================================================================== --- plugins/XML/trunk/TODO.txt 2006-07-30 17:52:46 UTC (rev 6467) +++ plugins/XML/trunk/TODO.txt 2006-07-30 18:01:12 UTC (rev 6468) @@ -1,11 +1,6 @@ -- URL files: error highlight broken - jing -- no completions popup: ! - no completions popup in quoted areas, CDATA - fuckups parsing build.xml and schemas -- html parser: empty tags -- if close complete off, / should not show a popup immediately - - remove this option altogether - .dtd files need to be ignored - record > in macro: becomes >> @@ -30,7 +25,6 @@ Position start; Position end; -- schemas: attribute values - schemas: element values should be choosable - ids in xml.root's other children - CatalogProperties complaints @@ -45,7 +39,6 @@ - instead of built-in completion info for xsd and xsl, pre-parse some schemas to validate these file types. - preparsing and grammar cache needs a rework. -- attribute completion. - clean up entity code - empty data -- see what's up, & clean up - 'advanced' option pane for selecting completion info files, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dal...@us...> - 2006-09-08 15:29:35
|
Revision: 6907 http://svn.sourceforge.net/jedit/?rev=6907&view=rev Author: daleanson Date: 2006-09-08 08:28:55 -0700 (Fri, 08 Sep 2006) Log Message: ----------- Added ecmascript parser. This is a javacc based parser. Parsing appears to be excellent. This is a first cut, there is lots left to do. The sidekick tree shows way more detail than necessary, and at the same time doesn't show enough -- the node names are very generic, like all functions are displayed as "FunctionDeclaration'. The level of detail necessary for javascript code completion is there. Updated services.xml to show an "ecmascript" parser in sidekick. Updated build.xml to run jjtree and javacc for the ecmascript parser. Modified Paths: -------------- plugins/XML/trunk/build.xml plugins/XML/trunk/services.xml Added Paths: ----------- plugins/XML/trunk/sidekick/ecmascript/ plugins/XML/trunk/sidekick/ecmascript/EcmaScriptSideKickParser.java plugins/XML/trunk/sidekick/ecmascript/parser/ plugins/XML/trunk/sidekick/ecmascript/parser/ASTAllocationExpression.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTAndExpressionSequence.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTArrayLiteral.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTAssignmentExpression.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTBinaryExpressionSequence.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTBlock.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTBreakStatement.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTCaseGroup.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTCaseGroups.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTCaseGuard.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTCatchClause.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTCompositeReference.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTConditionalExpression.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTContinueStatement.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTDoStatement.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTEmptyExpression.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTEmptyStatement.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTExpressionList.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTExpressionStatement.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTFinallyClause.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTForInStatement.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTForStatement.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTForVarInStatement.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTForVarStatement.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTFormalParameterList.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTFunctionCallParameters.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTFunctionDeclaration.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTIdentifier.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTIfStatement.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTLiteral.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTLiteralField.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTObjectLiteral.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTOperator.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTOrExpressionSequence.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTParenExpression.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTPostfixExpression.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTProgram.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTPropertyIdentifierReference.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTPropertyValueReference.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTRequireStatement.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTReturnStatement.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTStatementList.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTSwitchStatement.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTThisReference.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTThrowStatement.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTTryStatement.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTUnaryExpression.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTVariableDeclaration.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTVariableDeclarationList.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTVariableStatement.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTWhileStatement.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTWithStatement.java plugins/XML/trunk/sidekick/ecmascript/parser/Comment.java plugins/XML/trunk/sidekick/ecmascript/parser/EcmaScript.java plugins/XML/trunk/sidekick/ecmascript/parser/EcmaScript.jj plugins/XML/trunk/sidekick/ecmascript/parser/EcmaScript.jjt plugins/XML/trunk/sidekick/ecmascript/parser/EcmaScriptConstants.java plugins/XML/trunk/sidekick/ecmascript/parser/EcmaScriptTokenManager.java plugins/XML/trunk/sidekick/ecmascript/parser/EcmaScriptTreeConstants.java plugins/XML/trunk/sidekick/ecmascript/parser/EcmaScriptVisitor.java plugins/XML/trunk/sidekick/ecmascript/parser/EcmaScriptVisitorAdapter.java plugins/XML/trunk/sidekick/ecmascript/parser/EcmaScriptVisitorDelegate.java plugins/XML/trunk/sidekick/ecmascript/parser/GlobalDeclCollector.java plugins/XML/trunk/sidekick/ecmascript/parser/JJTEcmaScriptState.java plugins/XML/trunk/sidekick/ecmascript/parser/JavaCharStream.java plugins/XML/trunk/sidekick/ecmascript/parser/Node.java plugins/XML/trunk/sidekick/ecmascript/parser/ParseException.java plugins/XML/trunk/sidekick/ecmascript/parser/PrettyPrinter.java plugins/XML/trunk/sidekick/ecmascript/parser/Scope.java plugins/XML/trunk/sidekick/ecmascript/parser/SimpleNode.java plugins/XML/trunk/sidekick/ecmascript/parser/Token.java plugins/XML/trunk/sidekick/ecmascript/parser/TokenMgrError.java plugins/XML/trunk/sidekick/ecmascript/parser/Util.java Modified: plugins/XML/trunk/build.xml =================================================================== --- plugins/XML/trunk/build.xml 2006-09-08 09:22:11 UTC (rev 6906) +++ plugins/XML/trunk/build.xml 2006-09-08 15:28:55 UTC (rev 6907) @@ -14,24 +14,24 @@ --> <project name="XML" default="jar" basedir="."> - <property file="../build.properties"/> - - + <property file="../build.properties"/> + + <property name="build.support" value="../../build-support" /> - + <property name="compiler.source" value="1.5" /> <property name="compiler.target" value="1.5" /> <import file="${build.support}/plugin-build.xml" /> <property name="javadoc.packagenames" value="xml.*, sidekick.*" /> - - <property name="build.dir" value="build"/> - <property name="install.dir" value="../"/> - + + <property name="build.dir" value="build"/> + <property name="install.dir" value="../"/> + <selector id="packageFiles"> - - <or> + + <or> <filename name="docs/*.html" /> <filename name="icons/*.gif" /> <filename name="xml/**/*.xml" /> @@ -41,35 +41,35 @@ <filename name="xml/**/*.mod" /> <filename name="xml/**/*.png" /> <filename name="xml/**/*.dtd" /> - </or> + </or> </selector> - - <path id="project.class.path"> + + <path id="project.class.path"> <pathelement location="${install.dir}/xml-apis.jar"/> - <pathelement location="${jedit.install.dir}/jedit.jar"/> - <pathelement location="${install.dir}/ErrorList.jar"/> + <pathelement location="${jedit.install.dir}/jedit.jar"/> + <pathelement location="${install.dir}/ErrorList.jar"/> <pathelement location="${install.dir}/Beauty.jar"/> - <pathelement location="${install.dir}/SideKick.jar"/> - <pathelement location="${install.dir}/xercesImpl.jar"/> - <pathelement location="${install.dir}/resolver.jar"/> - <pathelement location="."/> - </path> + <pathelement location="${install.dir}/SideKick.jar"/> + <pathelement location="${install.dir}/xercesImpl.jar"/> + <pathelement location="${install.dir}/resolver.jar"/> + <pathelement location="."/> + </path> - <!-- Generate ant-complete.xml file with AntComplete task --> - <target name="ant-complete" depends="compile"> - <taskdef name="antcomplete" - classname="xml.completion.AntCompleteTask" - classpath="${build.classes}"/> - <antcomplete output="${src.dir}/xml/completion/ant-complete.xml"/> - </target> + <!-- Generate ant-complete.xml file with AntComplete task --> + <target name="ant-complete" depends="compile"> + <taskdef name="antcomplete" + classname="xml.completion.AntCompleteTask" + classpath="${build.classes}"/> + <antcomplete output="${src.dir}/xml/completion/ant-complete.xml"/> + </target> <target name="jar" depends="ant-complete, build" description="builds jar + ant-completion info" /> - + <target name="dist" depends="docs, jar" description="The whole shebang" /> - + <target name="javacc" description="Runs javacc compiler on *.jj files."> <condition property="javacchome.set"> <isset property="javacchome"/> @@ -77,13 +77,17 @@ <fail unless="javacchome.set" message="Property 'javacchome' needs to be set."/> <javacc javacchome="${javacchome}" target="./sidekick/html/parser/html/HtmlParser.jj"/> <javacc javacchome="${javacchome}" target="./sidekick/css/parser/CSS2Parser.jj"/> + <jjtree javacchome="${javacchome}" + target="./sidekick/ecmascript/parser/EcmaScript.jjt" + outputdirectory="./sidekick/ecmascript/parser"/> + <javacc javacchome="${javacchome}" target="./sidekick/ecmascript/parser/EcmaScript.jj"/> </target> - <!-- Generate tags using 'ctags' program from ctags.sourceforge.net --> - <target name="tags"> - <exec executable="ctags"> - <arg value="-R" /> - <arg path="." /> - </exec> - </target> + <!-- Generate tags using 'ctags' program from ctags.sourceforge.net --> + <target name="tags"> + <exec executable="ctags"> + <arg value="-R" /> + <arg path="." /> + </exec> + </target> </project> Modified: plugins/XML/trunk/services.xml =================================================================== --- plugins/XML/trunk/services.xml 2006-09-08 09:22:11 UTC (rev 6906) +++ plugins/XML/trunk/services.xml 2006-09-08 15:28:55 UTC (rev 6907) @@ -2,26 +2,29 @@ <!DOCTYPE SERVICES SYSTEM "services.dtd"> -<SERVICES> - <SERVICE CLASS="sidekick.SideKickParser" NAME="html"> - new sidekick.html.HtmlParser(); - </SERVICE> +<SERVICES> + <SERVICE CLASS="sidekick.SideKickParser" NAME="html"> + new sidekick.html.HtmlParser(); + </SERVICE> <SERVICE CLASS="sidekick.SideKickParser" NAME="css" > new sidekick.css.CSS2SideKickParser(); </SERVICE> - <SERVICE CLASS="sidekick.SideKickParser" NAME="xml"> - new xml.parser.SAXParserImpl(); - </SERVICE> - <SERVICE CLASS="sidekick.SideKickParser" NAME="javascript"> - new sidekick.javascript.JavaScriptParser(); - </SERVICE> - <SERVICE CLASS="beauty.beautifiers.Beautifier" NAME="xml:XmlIndenter"> - new xml.indent.XmlBeautifier(); - </SERVICE> - + <SERVICE CLASS="sidekick.SideKickParser" NAME="xml"> + new xml.parser.SAXParserImpl(); + </SERVICE> + <SERVICE CLASS="sidekick.SideKickParser" NAME="javascript"> + new sidekick.javascript.JavaScriptParser(); + </SERVICE> + <SERVICE CLASS="sidekick.SideKickParser" NAME="ecmascript"> + new sidekick.ecmascript.EcmaScriptSideKickParser(); + </SERVICE> + <SERVICE CLASS="beauty.beautifiers.Beautifier" NAME="xml:XmlIndenter"> + new xml.indent.XmlBeautifier(); + </SERVICE> + <!-- Newer version not working yet - <SERVICE CLASS="sidekick.SideKickParser" NAME="xml"> - new xml.parser.XercesParserImpl(); - </SERVICE> --> + <SERVICE CLASS="sidekick.SideKickParser" NAME="xml"> + new xml.parser.XercesParserImpl(); + </SERVICE> --> </SERVICES> Added: plugins/XML/trunk/sidekick/ecmascript/EcmaScriptSideKickParser.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/EcmaScriptSideKickParser.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/EcmaScriptSideKickParser.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,201 @@ +/* +Copyright (c) 2006, Dale Anson +All rights reserved. +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: +* Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. +* Neither the name of the <ORGANIZATION> nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package sidekick.ecmascript; + +import java.io.StringReader; +import java.util.*; + +import javax.swing.text.Position; +import javax.swing.tree.DefaultMutableTreeNode; + +import org.gjt.sp.jedit.Buffer; +import org.gjt.sp.jedit.EBComponent; +import org.gjt.sp.jedit.EBMessage; +import org.gjt.sp.jedit.EditBus; +import org.gjt.sp.jedit.EditPane; +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.msg.PropertiesChanged; + +import errorlist.DefaultErrorSource; +import errorlist.ErrorSource; + +import sidekick.*; +import sidekick.enhanced.*; +import sidekick.util.*; + +import sidekick.ecmascript.parser.*; + +/** + * @author Dale Anson + * @version $Revision$ + */ +public class EcmaScriptSideKickParser extends SideKickParser { + + private View currentView = null; + + public static boolean showAll = true; + private int lineOffset = 0; + + public EcmaScriptSideKickParser() { + super("javascript"); + } + + /** + * If called by another parser to parse part of a file (for example, to parse + * a script tag in an html document), this can be set to the offset of the + * script tag so that the node locations can be set correctly. + */ + public void setLineOffset( int offset ) { + if (offset > 0) { + lineOffset = offset; + } + } + + public void parse() { + if (currentView != null) { + parse(currentView.getBuffer(), null); + } + } + + /** + * Parse the contents of the given buffer. This is the standard entry point + * and will cause the entire text of the buffer to be parsed. + * + * @param buffer the buffer to parse + * @param errorSource where to send errors + * @return Description of the Returned Value + */ + public SideKickParsedData parse(Buffer buffer, DefaultErrorSource errorSource) { + setLineOffset(0); + return parse(buffer, buffer.getText(0, buffer.getLength()), errorSource); + } + + /** + * Parse the contents of the given text. This is the entry point to use when + * only a portion of the buffer text is to be parsed. Note that <code>setLineOffset</code> + * should be called prior to calling this method, otherwise, tree node positions + * may be off. + * + * @param buffer the buffer to parse + * @param errorSource where to send errors + * @return Description of the Returned Value + */ + public SideKickParsedData parse(Buffer buffer, String text, DefaultErrorSource errorSource) { + + String filename = buffer.getPath(); + SideKickParsedData parsedData = new SideKickParsedData(buffer.getName()); + DefaultMutableTreeNode root = parsedData.root; + + StringReader reader = new StringReader(text); + try { + // create parser + EcmaScript parser = new EcmaScript(reader); + + // set line offset, the parser uses this to adjust line numbers in the + // case of a partial file, like when they stylesheet is embedded inside an + // html document + parser.setLineOffset(lineOffset); + + // set tab size so that the parser can accurately calculate line and + // column positions + parser.setTabSize(buffer.getTabSize()); + + // parse the text + SimpleNode ss = parser.Program(); + + // make a tree + addTreeNodes(root, ss); + + // need to convert the nodes that are currently the user objects + // in the tree nodes to SideKick Assets + ElementUtil.convert(buffer, root); + + if ( !buffer.isDirty() && errorSource != null ) { + /* only handle errors when buffer is saved. Otherwise, there will be a lot + of spurious errors shown when code completion is on and the user is in the + middle of typing something. */ + List<ParseError> parseErrors = parser.getParseErrors(); + for (ParseError pe : parseErrors) { + String message = pe.message; + Range range = pe.range; + // addError is lame -- what if the error spans more than one line? + // Need to just deal with it... + if (range.endLine != range.startLine) { + range.endColumn = range.startColumn; + } + errorSource.addError( ErrorSource.ERROR, filename, range.startLine, range.startColumn, range.endColumn, message ); + } + } + } + catch (Exception e) { + e.printStackTrace(); + } + finally { + reader.close(); + } + return parsedData; + } + + private void addTreeNodes(DefaultMutableTreeNode root, SimpleNode ss) { + if (ss.hasChildren()) { + for (Iterator it = ss.getChildren().iterator(); it.hasNext(); ) { + SimpleNode cssChild = (SimpleNode)it.next(); + if (cssChild != null) { + DefaultMutableTreeNode dmtNode = new DefaultMutableTreeNode(cssChild); + root.add(dmtNode); + addTreeNodeChildren(dmtNode, cssChild); + } + } + } + } + + private void addTreeNodeChildren(DefaultMutableTreeNode dmtNode, SimpleNode cssNode) { + if (cssNode.hasChildren()) { + for (Iterator it = cssNode.getChildren().iterator(); it.hasNext(); ) { + SimpleNode cssChild = (SimpleNode)it.next(); + if (cssChild != null) { + DefaultMutableTreeNode dmtChild = new DefaultMutableTreeNode(cssChild); + dmtNode.add(dmtChild); + addTreeNodeChildren(dmtChild, cssChild); + } + } + } + } + + public boolean supportsCompletion() { + return false; + } + + public boolean canCompleteAnywhere() { + return false; + } + + public SideKickCompletion complete(EditPane editPane, int caret) { + return null; + } + +} + Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTAllocationExpression.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTAllocationExpression.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTAllocationExpression.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTAllocationExpression.java */ + +package sidekick.ecmascript.parser; + +public class ASTAllocationExpression extends SimpleNode { + public ASTAllocationExpression(int id) { + super(id); + } + + public ASTAllocationExpression(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTAndExpressionSequence.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTAndExpressionSequence.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTAndExpressionSequence.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTAndExpressionSequence.java */ + +package sidekick.ecmascript.parser; + +public class ASTAndExpressionSequence extends SimpleNode { + public ASTAndExpressionSequence(int id) { + super(id); + } + + public ASTAndExpressionSequence(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTArrayLiteral.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTArrayLiteral.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTArrayLiteral.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTArrayLiteral.java */ + +package sidekick.ecmascript.parser; + +public class ASTArrayLiteral extends SimpleNode { + public ASTArrayLiteral(int id) { + super(id); + } + + public ASTArrayLiteral(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTAssignmentExpression.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTAssignmentExpression.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTAssignmentExpression.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTAssignmentExpression.java */ + +package sidekick.ecmascript.parser; + +public class ASTAssignmentExpression extends SimpleNode { + public ASTAssignmentExpression(int id) { + super(id); + } + + public ASTAssignmentExpression(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTBinaryExpressionSequence.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTBinaryExpressionSequence.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTBinaryExpressionSequence.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTBinaryExpressionSequence.java */ + +package sidekick.ecmascript.parser; + +public class ASTBinaryExpressionSequence extends SimpleNode { + public ASTBinaryExpressionSequence(int id) { + super(id); + } + + public ASTBinaryExpressionSequence(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTBlock.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTBlock.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTBlock.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,22 @@ +/* Generated By:JJTree: Do not edit this line. ASTBlock.java */ + +package sidekick.ecmascript.parser; + +import sidekick.ecmascript.parser.EcmaScript; +import sidekick.ecmascript.parser.EcmaScriptVisitor; + +public class ASTBlock extends SimpleNode implements Scope { + public ASTBlock(int id) { + super(id); + } + + public ASTBlock(EcmaScript p, int id) { + super(p, id); + } + + /** Accept the visitor. * */ + @Override + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTBreakStatement.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTBreakStatement.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTBreakStatement.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTBreakStatement.java */ + +package sidekick.ecmascript.parser; + +public class ASTBreakStatement extends SimpleNode { + public ASTBreakStatement(int id) { + super(id); + } + + public ASTBreakStatement(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTCaseGroup.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTCaseGroup.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTCaseGroup.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTCaseGroup.java */ + +package sidekick.ecmascript.parser; + +public class ASTCaseGroup extends SimpleNode { + public ASTCaseGroup(int id) { + super(id); + } + + public ASTCaseGroup(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTCaseGroups.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTCaseGroups.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTCaseGroups.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTCaseGroups.java */ + +package sidekick.ecmascript.parser; + +public class ASTCaseGroups extends SimpleNode { + public ASTCaseGroups(int id) { + super(id); + } + + public ASTCaseGroups(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTCaseGuard.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTCaseGuard.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTCaseGuard.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTCaseGuard.java */ + +package sidekick.ecmascript.parser; + +public class ASTCaseGuard extends SimpleNode { + public ASTCaseGuard(int id) { + super(id); + } + + public ASTCaseGuard(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTCatchClause.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTCatchClause.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTCatchClause.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTCatchClause.java */ + +package sidekick.ecmascript.parser; + +public class ASTCatchClause extends SimpleNode { + public ASTCatchClause(int id) { + super(id); + } + + public ASTCatchClause(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTCompositeReference.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTCompositeReference.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTCompositeReference.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,99 @@ +/* Generated By:JJTree: Do not edit this line. ASTCompositeReference.java */ + +package sidekick.ecmascript.parser; + +import sidekick.ecmascript.parser.ASTPropertyIdentifierReference; +import sidekick.ecmascript.parser.EcmaScript; +import sidekick.ecmascript.parser.EcmaScriptVisitor; + +public class ASTCompositeReference extends SimpleNode { + public ASTCompositeReference(int id) { + super(id); + } + + public ASTCompositeReference(EcmaScript p, int id) { + super(p, id); + } + + /** Accept the visitor. * */ + @Override + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } + + public String getCompositeName() { + int n = jjtGetNumChildren(); + + return this.getCompositeName(n); + } + + public String getPropertyIdentifierCompositeName() { + StringBuffer compositeNameBuffer = new StringBuffer(); + SimpleNode cNode = (SimpleNode) jjtGetChild(0); + + int n = jjtGetNumChildren(); + + if (cNode instanceof ASTIdentifier) { + compositeNameBuffer.append(((ASTIdentifier) cNode).getName()); + } else { + return null; + } + + for (int i = 1; i < n; i++) { + cNode = (SimpleNode) jjtGetChild(i); + + if (cNode instanceof ASTPropertyIdentifierReference) { + ASTIdentifier nameNode = (ASTIdentifier) cNode.jjtGetChild(0); + + compositeNameBuffer.append('.'); + compositeNameBuffer.append(nameNode.getName()); + } else { + break; + } + } + + return compositeNameBuffer.toString(); + } + + public String getCompositeName(int n) { + StringBuffer compositeNameBuffer = new StringBuffer(); + SimpleNode cNode = (SimpleNode) jjtGetChild(0); + + if (cNode instanceof ASTIdentifier) { + compositeNameBuffer.append(((ASTIdentifier) cNode).getName()); + } else { + return null; + } + + for (int i = 1; i < n; i++) { + cNode = (SimpleNode) jjtGetChild(i); + + if (cNode instanceof ASTPropertyIdentifierReference) { + ASTIdentifier nameNode = (ASTIdentifier) cNode.jjtGetChild(0); + + compositeNameBuffer.append('.'); + compositeNameBuffer.append(nameNode.getName()); + } else { + return null; + } + } + + return compositeNameBuffer.toString(); + } + + public String getName(int index) { + SimpleNode cNode = (SimpleNode) jjtGetChild(index); + String result = null; + + if (cNode instanceof ASTPropertyIdentifierReference) { + ASTIdentifier nameNode = (ASTIdentifier) cNode.jjtGetChild(0); + + result = nameNode.getName(); + } else if (cNode instanceof ASTIdentifier) { + result = ((ASTIdentifier) cNode).getName(); + } + + return result; + } + +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTConditionalExpression.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTConditionalExpression.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTConditionalExpression.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTConditionalExpression.java */ + +package sidekick.ecmascript.parser; + +public class ASTConditionalExpression extends SimpleNode { + public ASTConditionalExpression(int id) { + super(id); + } + + public ASTConditionalExpression(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTContinueStatement.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTContinueStatement.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTContinueStatement.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTContinueStatement.java */ + +package sidekick.ecmascript.parser; + +public class ASTContinueStatement extends SimpleNode { + public ASTContinueStatement(int id) { + super(id); + } + + public ASTContinueStatement(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTDoStatement.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTDoStatement.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTDoStatement.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTDoStatement.java */ + +package sidekick.ecmascript.parser; + +public class ASTDoStatement extends SimpleNode { + public ASTDoStatement(int id) { + super(id); + } + + public ASTDoStatement(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTEmptyExpression.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTEmptyExpression.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTEmptyExpression.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTEmptyExpression.java */ + +package sidekick.ecmascript.parser; + +public class ASTEmptyExpression extends SimpleNode { + public ASTEmptyExpression(int id) { + super(id); + } + + public ASTEmptyExpression(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTEmptyStatement.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTEmptyStatement.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTEmptyStatement.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTEmptyStatement.java */ + +package sidekick.ecmascript.parser; + +public class ASTEmptyStatement extends SimpleNode { + public ASTEmptyStatement(int id) { + super(id); + } + + public ASTEmptyStatement(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTExpressionList.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTExpressionList.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTExpressionList.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTExpressionList.java */ + +package sidekick.ecmascript.parser; + +public class ASTExpressionList extends SimpleNode { + public ASTExpressionList(int id) { + super(id); + } + + public ASTExpressionList(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTExpressionStatement.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTExpressionStatement.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTExpressionStatement.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTExpressionStatement.java */ + +package sidekick.ecmascript.parser; + +public class ASTExpressionStatement extends SimpleNode { + public ASTExpressionStatement(int id) { + super(id); + } + + public ASTExpressionStatement(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTFinallyClause.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTFinallyClause.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTFinallyClause.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTFinallyClause.java */ + +package sidekick.ecmascript.parser; + +public class ASTFinallyClause extends SimpleNode { + public ASTFinallyClause(int id) { + super(id); + } + + public ASTFinallyClause(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTForInStatement.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTForInStatement.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTForInStatement.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTForInStatement.java */ + +package sidekick.ecmascript.parser; + +public class ASTForInStatement extends SimpleNode { + public ASTForInStatement(int id) { + super(id); + } + + public ASTForInStatement(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTForStatement.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTForStatement.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTForStatement.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTForStatement.java */ + +package sidekick.ecmascript.parser; + +public class ASTForStatement extends SimpleNode { + public ASTForStatement(int id) { + super(id); + } + + public ASTForStatement(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTForVarInStatement.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTForVarInStatement.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTForVarInStatement.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTForVarInStatement.java */ + +package sidekick.ecmascript.parser; + +public class ASTForVarInStatement extends SimpleNode { + public ASTForVarInStatement(int id) { + super(id); + } + + public ASTForVarInStatement(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTForVarStatement.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTForVarStatement.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTForVarStatement.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTForVarStatement.java */ + +package sidekick.ecmascript.parser; + +public class ASTForVarStatement extends SimpleNode { + public ASTForVarStatement(int id) { + super(id); + } + + public ASTForVarStatement(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTFormalParameterList.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTFormalParameterList.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTFormalParameterList.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTFormalParameterList.java */ + +package sidekick.ecmascript.parser; + +public class ASTFormalParameterList extends SimpleNode { + public ASTFormalParameterList(int id) { + super(id); + } + + public ASTFormalParameterList(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTFunctionCallParameters.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTFunctionCallParameters.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTFunctionCallParameters.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTFunctionCallParameters.java */ + +package sidekick.ecmascript.parser; + +public class ASTFunctionCallParameters extends SimpleNode { + public ASTFunctionCallParameters(int id) { + super(id); + } + + public ASTFunctionCallParameters(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTFunctionDeclaration.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTFunctionDeclaration.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTFunctionDeclaration.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,44 @@ +/* Generated By:JJTree: Do not edit this line. ASTFunctionDeclaration.java */ + +package sidekick.ecmascript.parser; + +import java.util.*; + +import sidekick.ecmascript.parser.EcmaScript; +import sidekick.ecmascript.parser.EcmaScriptVisitor; + +public class ASTFunctionDeclaration extends SimpleNode { + + private Map locals; + + public ASTFunctionDeclaration(int id) { + super(id); + } + + public ASTFunctionDeclaration(EcmaScript p, int id) { + super(p, id); + } + + /** Accept the visitor. * */ + @Override + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } + + public void setLocals(List localsStack) { + locals = new HashMap(); + + Iterator iter = localsStack.iterator(); + + while (iter.hasNext()) { + Map stackItem = (Map) iter.next(); + + locals.putAll(stackItem); + } + } + + public Map getLocals() { + return locals; + } + +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTIdentifier.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTIdentifier.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTIdentifier.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,61 @@ +/* Generated By:JJTree: Do not edit this line. ASTIdentifier.java */ + +package sidekick.ecmascript.parser; + +import sidekick.ecmascript.parser.EcmaScript; +import sidekick.ecmascript.parser.EcmaScriptVisitor; +import sidekick.ecmascript.parser.Token; + +public class ASTIdentifier extends SimpleNode { + + private String identifierName = null; + + private int hash = 0; + + public ASTIdentifier(int id) { + super(id); + } + + public ASTIdentifier(EcmaScript p, int id) { + super(p, id); + } + + /** Accept the visitor. * */ + @Override + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } + + public void setName(String identifierName) { + this.identifierName = identifierName.intern(); // to lower number of + // strings + hash = identifierName.hashCode(); + Token token = getBeginToken(); + token.image = identifierName; + } + + @Override + public int hashCode() { + return hash; + } + + @Override + public boolean equals(Object obj) { + if ((obj != null) && (obj.getClass().equals(this.getClass()))) { + ASTIdentifier other = (ASTIdentifier) obj; + return identifierName.equals(other.identifierName); + } + + return false; + } + + public String getName() { + return identifierName; + } + + @Override + public String toString() { + return "Identifier[" + identifierName + "]"; + } + +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTIfStatement.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTIfStatement.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTIfStatement.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTIfStatement.java */ + +package sidekick.ecmascript.parser; + +public class ASTIfStatement extends SimpleNode { + public ASTIfStatement(int id) { + super(id); + } + + public ASTIfStatement(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTLiteral.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTLiteral.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTLiteral.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,359 @@ +/* Generated By:JJTree: Do not edit this line. ASTLiteral.java */ + +package sidekick.ecmascript.parser; + +import sidekick.ecmascript.parser.EcmaScript; +import sidekick.ecmascript.parser.EcmaScriptVisitor; +import sidekick.ecmascript.parser.ParseException; +import sidekick.ecmascript.parser.Token; + +public class ASTLiteral extends SimpleNode { + + static public final Object NULL = new Object(); + + static public final Object REGEX = new Object(); + + static public final Object HTML = new Object(); + + protected String tokenImage; + + protected Object value; + + public ASTLiteral(int id) { + super(id); + } + + public ASTLiteral(EcmaScript p, int id) { + super(p, id); + } + + /** Accept the visitor. * */ + @Override + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } + + public void setValue(Object value) { + this.value = value; + } + + public Object getValue() { + return value; + } + + public String getTokenImage() { + return tokenImage; + } + + static public String unescapedString(String image) { + image = image.substring(1, image.length() - 1); + + int l = image.length(); + StringBuffer sb = new StringBuffer(l); + + /* + * + * \XXX - The character specified by up to three octal digits XXX + * between 0 and 377 ( example: \251 ) \xXX - The character specified by + * the two hexadecimal digits XX between 00 and FF ( example: \xA9 ) \ + * uXXXX - The Unicode character specified by the four hexadecimal + * digits XXXX ( example: \u00A9 ) + */ + for (int i = 0; i < l; i++) { + char c = image.charAt(i); + if ((c == '\\') && (i + 1 < l)) { + i++; + c = image.charAt(i); + if (c == 'n') { + c = '\n'; + } else if (c == 'b') { + c = '\b'; + } else if (c == 'f') { + c = '\f'; + } else if (c == 'r') { + c = '\r'; + } else if (c == 't') { + c = '\t'; + } else if (c == 'x' && l == 4) { + c = (char) (hexval(image.charAt(i + 1)) << 4 | hexval(image + .charAt(i + 1))); + i += 2; + } else if (c == 'u') { + c = (char) (hexval(image.charAt(i + 1)) << 12 + | hexval(image.charAt(i + 2)) << 8 + | hexval(image.charAt(i + 3)) << 4 | hexval(image + .charAt(i + 4))); + i += 4; + } else if ((c >= '0') && (c <= '7') && l == 4) { + c = (char) (octval(image.charAt(i))); + if ((image.length() > i) && (image.charAt(i + 1) >= '0') + && (image.charAt(i + 1) <= '7')) { + i++; + c = (char) ((c << 4) | octval(image.charAt(i))); + } + } + } + sb.append(c); + } + return sb.toString(); + } + + static public String escapedString(String image, char quoteChar) { + int l = image.length(); + StringBuffer sb = new StringBuffer(l); + + for (int i = 0; i < l; i++) { + char c = image.charAt(i); + + if (c == '\n') { + sb.append("\\n"); + } else if (c == '\r') { + sb.append("\\r"); + } else if (c == '\b') { + sb.append("\\b"); + } else if (c == '\f') { + sb.append("\\f"); + } else if (c == '\t') { + sb.append("\\t"); + } else if (c == quoteChar) { + sb.append("\\"); + sb.append(quoteChar); + } else { + // PENDING(uwe): unicode escapes, hex escapes etc + sb.append(c); + } + } + return sb.toString(); + } + + public void setStringValue(String image) throws ParseException { + tokenImage = image; + + value = ASTLiteral.unescapedString(image); + + /* + * if (!expectActionScript) { if (value.equals("class") || + * value.equals("super")) { throw new ParseException( "reserved + * identifier class or super used"); } } + */ + } + + public void setUnquotedStringValue(String valueStr) { + value = valueStr; + + // PENDING(uwe): clean up and other value types + // PENDING(uwe): serious shit here -> escaping/unescaping, quotes etc + Token token = getBeginToken(); + + char quoteChar = token.image.charAt(0); + if (quoteChar == '"') { + token.image = "\"" + ASTLiteral.escapedString(valueStr, quoteChar) + + "\""; + } else { + token.image = "'" + ASTLiteral.escapedString(valueStr, quoteChar) + + "'"; + } + } + + public void setRegexValue(String image) { + tokenImage = image; + value = ASTLiteral.REGEX; + } + + public void setHtmlValue(String image) { + tokenImage = image; + value = ASTLiteral.HTML; + } + + public void setDecimalValue(String image) { + tokenImage = image; + + try { + value = new Long(image); + } catch (NumberFormatException e) { + // it's a floating point + value = new Double(image); + } + } + + public void setHexValue(String image) { + tokenImage = image; + + value = new Long(Long.parseLong(image.substring(2), 16)); + } + + public void setFloatingPointValue(String image) { + tokenImage = image; + + value = new Double(image); + } + + public void setBooleanValue(String image) { + tokenImage = image; + + value = new Boolean(image); + + } + + public void setNullValue() { + value = ASTLiteral.NULL; + } + + @Override + public String toString() { + return "Literal[" + value.toString() + "]"; + } + + /** + * Overwrites <code>equals</code> from <code>Object</code>. + * + * @param obj + * a object + * @return true if specified object equal to receiver + * @see java.lang.Object#equals(Object) + */ + @Override + public boolean equals(Object obj) { + if ((obj != null) && (obj.getClass().equals(this.getClass()))) { + ASTLiteral other = (ASTLiteral) obj; + boolean result = true; + + if (tokenImage != null) { + result = tokenImage.equals(other.tokenImage); + } else { + result = (other.tokenImage == null); + } + + if (result) { + result = value.equals(other.value); + } + + return result; + } + + return false; + } + + /** + * Overwrites <code>hashCode</code> from <code>Object</code>. + * + * @return hash code of receiver + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + int result = 17; + + if (tokenImage != null) { + result = 37 * result + tokenImage.hashCode(); + } else { + result = 37 * result; + } + + if (value != null) { + result = 37 * result + value.hashCode(); + } else { + result = 37 * result; + } + + return result; + } + + static final int hexval(char c) { + switch (c) { + case '0': + return 0; + case '1': + return 1; + case '2': + return 2; + case '3': + return 3; + case '4': + return 4; + case '5': + return 5; + case '6': + return 6; + case '7': + return 7; + case '8': + return 8; + case '9': + return 9; + + case 'a': + case 'A': + return 10; + case 'b': + case 'B': + return 11; + case 'c': + case 'C': + return 12; + case 'd': + case 'D': + return 13; + case 'e': + case 'E': + return 14; + case 'f': + case 'F': + return 15; + } + + throw new IllegalStateException("Illegal hex or unicode constant"); // Should + // never + // come + // here + } + + static final int octval(char c) { + switch (c) { + case '0': + return 0; + case '1': + return 1; + case '2': + return 2; + case '3': + return 3; + case '4': + return 4; + case '5': + return 5; + case '6': + return 6; + case '7': + return 7; + case '8': + return 8; + case '9': + return 9; + + case 'a': + case 'A': + return 10; + case 'b': + case 'B': + return 11; + case 'c': + case 'C': + return 12; + case 'd': + case 'D': + return 13; + case 'e': + case 'E': + return 14; + case 'f': + case 'F': + return 15; + } + + throw new IllegalStateException("Illegal octal constant"); // Should + // never + // come here + } + +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTLiteralField.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTLiteralField.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTLiteralField.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTLiteralField.java */ + +package sidekick.ecmascript.parser; + +public class ASTLiteralField extends SimpleNode { + public ASTLiteralField(int id) { + super(id); + } + + public ASTLiteralField(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { + return visitor.visit(this, data); + } +} Added: plugins/XML/trunk/sidekick/ecmascript/parser/ASTObjectLiteral.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTObjectLiteral.java (rev 0) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTObjectLiteral.java 2006-09-08 15:28:55 UTC (rev 6907) @@ -0,0 +1,19 @@ +/* Generated By:JJTree: Do not edit this line. ASTObjectLiteral.java */ + +package sidekick.ecmascript.parser; + +public class ASTObjectLiteral extends SimpleNode { + public ASTObjectLiteral(int id) { + super(id); + } + + public ASTObjectLiteral(EcmaScript p, int id) { + super(p, id); + } + + + /** Accept the visitor. **/ + public Object jjtA... [truncated message content] |
From: <ez...@us...> - 2006-11-13 17:10:38
|
Revision: 8011 http://svn.sourceforge.net/jedit/?rev=8011&view=rev Author: ezust Date: 2006-11-10 21:26:36 -0800 (Fri, 10 Nov 2006) Log Message: ----------- Bug # 1579232 and updated docs. Modified Paths: -------------- plugins/XML/trunk/docs/users-guide.xml plugins/XML/trunk/xml/completion/CompletionInfo.java plugins/XML/trunk/xml/dtds/catalog Modified: plugins/XML/trunk/docs/users-guide.xml =================================================================== --- plugins/XML/trunk/docs/users-guide.xml 2006-11-10 22:59:12 UTC (rev 8010) +++ plugins/XML/trunk/docs/users-guide.xml 2006-11-11 05:26:36 UTC (rev 8011) @@ -694,12 +694,17 @@ <appendix id="changes"> <title>Change log</title> <itemizedlist> - <listitem><para><emphasis role="bold">Version 2.0.5</emphasis> Requires jEdit 4.3pre7, Java 1.5, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. + <listitem><para><emphasis role="bold">Version 2.0.5</emphasis> + Requires jEdit 4.3pre7, Java 1.5, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. <itemizedlist> <listitem><para> XML plugin now includes EcmascriptSideKick (initial release) and a new CSS2SideKick, both based on javacc parsers. The HtmlSideKick now uses both the CSS2SideKick and the EcmascriptSideKick to parse in-line <style> and <script> blocks in html code.</para></listitem> + <listitem><para>Bugfix to get highlighting to work with refactored classes in jEdit 4.3pre7. (1594103) </para></listitem> + <listitem><para>Fixes to HTML completion (sf.net bug#1579232) + </para> </listitem> + </itemizedlist> </para> </listitem> Modified: plugins/XML/trunk/xml/completion/CompletionInfo.java =================================================================== --- plugins/XML/trunk/xml/completion/CompletionInfo.java 2006-11-10 22:59:12 UTC (rev 8010) +++ plugins/XML/trunk/xml/completion/CompletionInfo.java 2006-11-11 05:26:36 UTC (rev 8011) @@ -45,12 +45,13 @@ this(new ArrayList(), new HashMap(), new ArrayList(), new HashMap(), new ArrayList()); - + /* This seems to be redundant... addEntity(EntityDecl.INTERNAL,"lt","<"); addEntity(EntityDecl.INTERNAL,"gt",">"); addEntity(EntityDecl.INTERNAL,"amp","&"); addEntity(EntityDecl.INTERNAL,"quot","\""); - addEntity(EntityDecl.INTERNAL,"apos","'"); + addEntity(EntityDecl.INTERNAL,"apos","'"); + */ } //}}} //{{{ CompletionInfo constructor Modified: plugins/XML/trunk/xml/dtds/catalog =================================================================== --- plugins/XML/trunk/xml/dtds/catalog 2006-11-10 22:59:12 UTC (rev 8010) +++ plugins/XML/trunk/xml/dtds/catalog 2006-11-11 05:26:36 UTC (rev 8011) @@ -2,6 +2,11 @@ me a patch. I would like the XML plugin to work out of the box with any XML files other plugins might use. -- + +SYSTEM "xml-completion-info.dtd" "xml-completion-info.dtd" +PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "oasis-catalog.dtd" +SYSTEM "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd" "oasis-catalog.dtd" + SYSTEM "actions.dtd" "jeditresource:/org/gjt/sp/jedit/actions.dtd" SYSTEM "catalog.dtd" "jeditresource:/org/gjt/sp/jedit/catalog.dtd" SYSTEM "dockables.dtd" "jeditresource:/org/gjt/sp/jedit/dockables.dtd" @@ -12,13 +17,9 @@ SYSTEM "services.dtd" "jeditresource:/org/gjt/sp/jedit/services.dtd" SYSTEM "xmode.dtd" "jeditresource:/org/gjt/sp/jedit/syntax/xmode.dtd" -PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "oasis-catalog.dtd" -SYSTEM "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd" "oasis-catalog.dtd" - -- XHTML 1.0 DTDs -- PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "xhtml1-frameset.dtd" - SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd" "xhtml1-frameset.dtd" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "xhtml1-strict.dtd" @@ -48,7 +49,6 @@ SYSTEM "commando.dtd" "jeditresource:/Console.jar!/console/commands/commando.dtd" -SYSTEM "xml-completion-info.dtd" "xml-completion-info.dtd" -- DocBook DTDs -- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2007-01-30 17:37:13
|
Revision: 8804 http://svn.sourceforge.net/jedit/?rev=8804&view=rev Author: ezust Date: 2007-01-30 09:37:04 -0800 (Tue, 30 Jan 2007) Log Message: ----------- [ 1647934 ] XML Plugin - two new actions Jakub Roztocil - oswaldcz Modified Paths: -------------- plugins/XML/trunk/XML.props plugins/XML/trunk/actions.xml plugins/XML/trunk/docs/users-guide.xml plugins/XML/trunk/xml/XmlActions.java Modified: plugins/XML/trunk/XML.props =================================================================== --- plugins/XML/trunk/XML.props 2007-01-30 17:06:55 UTC (rev 8803) +++ plugins/XML/trunk/XML.props 2007-01-30 17:37:04 UTC (rev 8804) @@ -2,7 +2,7 @@ plugin.xml.XmlPlugin.activate=defer plugin.xml.XmlPlugin.name=XML plugin.xml.XmlPlugin.author=Slava Pestov, Dale Anson, Alan Ezust, Rob McKinnon, Martin Raspe, Jakub Roztocil -plugin.xml.XmlPlugin.version=2.0.5 +plugin.xml.XmlPlugin.version=2.0.6 plugin.xml.XmlPlugin.docs=index.html plugin.xml.XmlPlugin.depend.0=jdk 1.5 @@ -17,6 +17,8 @@ plugin.xml.XmlPlugin.menu=sidekick-tree \ xml-match-tag \ + xml-select-element \ + xml-select-between-tags \ - \ xml-insert \ xml-edit-tag \ @@ -48,6 +50,8 @@ xml-entities-to-chars.label=Entities to Characters xml-clear-cache.label=Clear Resource Cache xml-reload-catalogs.label=Reload Catalogs +xml-select-element.label=Select Element or Code Block +xml-select-between-tags.label=Selection Between Tags # Option panes plugin.xml.XmlPlugin.option-group=xml.general xmlindenter sidekick.html sidekick.ecmascript sidekick.css xml.catalogs Modified: plugins/XML/trunk/actions.xml =================================================================== --- plugins/XML/trunk/actions.xml 2007-01-30 17:06:55 UTC (rev 8803) +++ plugins/XML/trunk/actions.xml 2007-01-30 17:37:04 UTC (rev 8804) @@ -74,5 +74,15 @@ xml.CatalogManager.reloadCatalogs(); </CODE> </ACTION> + <ACTION NAME="xml-select-element"> + <CODE> + xml.XmlActions.selectElement(textArea); + </CODE> + </ACTION> + <ACTION NAME="xml-select-between-tags"> + <CODE> + xml.XmlActions.selectBetweenTags(textArea); + </CODE> + </ACTION> </ACTIONS> Modified: plugins/XML/trunk/docs/users-guide.xml =================================================================== --- plugins/XML/trunk/docs/users-guide.xml 2007-01-30 17:06:55 UTC (rev 8803) +++ plugins/XML/trunk/docs/users-guide.xml 2007-01-30 17:37:04 UTC (rev 8804) @@ -582,7 +582,8 @@ <email>jed...@li...</email>. </para> </section> - + </chapter> + <appendix id="xmlindenter-changelog"> <title>XMLIndenter: Change log</title> <para> @@ -655,7 +656,6 @@ </para> </appendix> -</chapter> @@ -695,6 +695,16 @@ <appendix id="changes"> <title>Change log</title> <itemizedlist> + + <listitem><para><emphasis role="bold">Version 2.0.6</emphasis> + Requires jEdit 4.3pre7, Java 1.5, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. </para> + <itemizedlist> + <listitem><para> 2 new actions: select Element or Code Block, and Select Between Tags + (Jakub Roztocil) + </para> </listitem> + </itemizedlist> + </listitem> + <listitem><para><emphasis role="bold">Version 2.0.5</emphasis> Requires jEdit 4.3pre7, Java 1.5, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. <itemizedlist> Modified: plugins/XML/trunk/xml/XmlActions.java =================================================================== --- plugins/XML/trunk/xml/XmlActions.java 2007-01-30 17:06:55 UTC (rev 8803) +++ plugins/XML/trunk/xml/XmlActions.java 2007-01-30 17:37:04 UTC (rev 8804) @@ -481,6 +481,145 @@ } } //}}} + //{{{ selectElement() method + /** + * Selects whole element, can be called repeatedly to select + * parent element of selected element. If no element found, calls + * "Select Code Block" action -- analogy to the + * "Select Matching Tag or Bracket" action + */ + public static void selectElement(JEditTextArea textArea) + { + + final int step = 2; + + String text = textArea.getText(); + boolean isSel = textArea.getSelectionCount() == 1; + int caret, pos; + + if (isSel) + caret = pos = textArea.getSelection(0).getEnd(); + else + caret = pos = textArea.getCaretPosition(); + + while (pos >= 0) + { + TagParser.Tag tag = TagParser.getTagAtOffset(text, pos); + + if (tag != null) + { + TagParser.Tag matchingTag = TagParser.getMatchingTag(text, tag); + if (matchingTag != null + && ((tag.type == TagParser.T_START_TAG && matchingTag.end >= caret) + || (!isSel && tag.type == TagParser.T_END_TAG && tag.end >= caret))) + { + if (tag.start < matchingTag.end) + { + textArea.setSelection( + new Selection.Range(tag.start, matchingTag.end)); + textArea.moveCaretPosition( + matchingTag.end); + } + else + { + textArea.setSelection( + new Selection.Range(matchingTag.start,tag.end)); + textArea.moveCaretPosition( + matchingTag.start); + } + break; + } + else if (!isSel && tag.type == TagParser.T_STANDALONE_TAG) + { + textArea.setSelection( + new Selection.Range(tag.start, tag.end)); + textArea.moveCaretPosition(tag.end); + break; + } + else + { + // No tag found -- skip as much as posible + pos = (matchingTag != null ? matchingTag.start : tag.start) - step; + continue; + } + } + pos -= step; + } + + if (pos <= 0) { + textArea.selectBlock(); + } + + } //}}} + + //{{{ selectBetweenTags() method + /** + * Selects content of an element, can be called repeatedly + */ + public static void selectBetweenTags(JEditTextArea textArea) + { + + final int step = 2; + + String text = textArea.getText(); + boolean isSel = textArea.getSelectionCount() == 1; + int caret, pos; + + if (isSel) + caret = pos = textArea.getSelection(0).getEnd(); + else + caret = pos = textArea.getCaretPosition(); + + while (pos >= 0) + { + TagParser.Tag tag = TagParser.getTagAtOffset(text, pos); + if (tag != null) + { + TagParser.Tag matchingTag = TagParser.getMatchingTag(text, tag); + if (tag.type == TagParser.T_START_TAG) + { + if (matchingTag != null + && (matchingTag.start > caret + || (!isSel && matchingTag.start == caret))) + { + if (tag.start < matchingTag.end) + { + textArea.setSelection( + new Selection.Range(tag.end, matchingTag.start)); + textArea.moveCaretPosition( + matchingTag.start); + } + else + { + textArea.setSelection( + new Selection.Range(matchingTag.end,tag.start)); + textArea.moveCaretPosition( + matchingTag.end); + } + break; + } + else + { + pos = tag.start - step; + continue; + } + } + else + { + // No tag found -- skip as much as posible + pos = (matchingTag != null ? matchingTag.start : tag.start) - step; + continue; + } + } + pos -= step; + } + + if (pos <= 0) { + textArea.getToolkit().beep(); + } + } + + //{{{ insertClosingTagKeyTyped() method public static void insertClosingTagKeyTyped(View view) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2007-05-06 18:58:35
|
Revision: 9501 http://svn.sourceforge.net/jedit/?rev=9501&view=rev Author: ezust Date: 2007-05-06 11:58:33 -0700 (Sun, 06 May 2007) Log Message: ----------- Previous fix for [ 1579232 ] HTML completion - typo broke charsToEntities and vice-versa. Un-broke that and removed other redundant addition of entities to hashmap. Also added some java5 generics to some XML classes. Modified Paths: -------------- plugins/XML/trunk/XML.props plugins/XML/trunk/docs/users-guide.xml plugins/XML/trunk/xml/XmlActions.java plugins/XML/trunk/xml/XmlParsedData.java plugins/XML/trunk/xml/completion/CompletionInfo.java plugins/XML/trunk/xml/completion/CompletionInfoHandler.java plugins/XML/trunk/xml/completion/ElementDecl.java plugins/XML/trunk/xml/parser/SAXParserImpl.java plugins/XML/trunk/xml/parser/XercesParserImpl.java Modified: plugins/XML/trunk/XML.props =================================================================== --- plugins/XML/trunk/XML.props 2007-05-06 17:35:00 UTC (rev 9500) +++ plugins/XML/trunk/XML.props 2007-05-06 18:58:33 UTC (rev 9501) @@ -195,8 +195,8 @@ xml-insert.not-parsed=Not parsed # Edit tag dialog box -xml-no-data.title=Not an XML file -xml-no-data.message=This command can only be used in XML files. +xml-no-data.title=No SideKick parsed data +xml-no-data.message=This command can only be used on XML/HTML files after a SideKick parse. xml-edit-tag.undefined-element.title=Element Not Defined xml-edit-tag.undefined-element.message=The element "<{0}>" is not defined. Modified: plugins/XML/trunk/docs/users-guide.xml =================================================================== --- plugins/XML/trunk/docs/users-guide.xml 2007-05-06 17:35:00 UTC (rev 9500) +++ plugins/XML/trunk/docs/users-guide.xml 2007-05-06 18:58:33 UTC (rev 9501) @@ -703,6 +703,7 @@ <listitem><para> 2 new actions: select Element or Code Block, and Select Between Tags (Jakub Roztocil) </para> </listitem> + <listitem><para> Un-broke characters to entities (1579232 ) </para></listitem> </itemizedlist> </listitem> Modified: plugins/XML/trunk/xml/XmlActions.java =================================================================== --- plugins/XML/trunk/xml/XmlActions.java 2007-05-06 17:35:00 UTC (rev 9500) +++ plugins/XML/trunk/xml/XmlActions.java 2007-05-06 18:58:33 UTC (rev 9501) @@ -7,6 +7,7 @@ * 1998, 2000 Ollie Rutherfurd * 2000, 2001 Andre Kaplan * 1999 Romain Guy + * 2007 Alan Ezust * * The XML plugin is licensed under the GNU General Public License, with * the following exception: @@ -44,10 +45,19 @@ import xml.parser.TagParser; //}}} +// {{{ class XMLActions public class XmlActions { - //{{{ showEditTagDialog() method + //{{{ Static variables + private static Segment seg = new Segment(); + private static boolean closeCompletion; + private static boolean closeCompletionOpen; + private static boolean standaloneExtraSpace; + static final String brackets = "[](){}"; + static final String xmlchars = "<>"; + //}}} + //{{{ showEditTagDialog() methods public static void showEditTagDialog(View view) { @@ -161,7 +171,7 @@ } catch(IOException io) { - // won't happen + Log.log(Log.ERROR, XmlActions.class, "this shouldn't happen:", io); } //}}} ElementDecl elementDecl = data.getElementDecl(tag.tag); @@ -193,14 +203,12 @@ buffer.endCompoundEdit(); } } - } //}}} + } public static void showEditTagDialog(View view, ElementDecl elementDecl) { showEditTagDialog(view, elementDecl, null); } - - //{{{ showEditTagDialog() method - + public static void showEditTagDialog(View view, ElementDecl elementDecl, Selection insideTag) { Buffer buffer = view.getBuffer(); @@ -431,10 +439,8 @@ Log.log(Log.DEBUG, XmlActions.class, "removeTags time: " + (endTime - startTime) + " ms"); } //}}} - static final String brackets = "[](){}"; - static final String xmlchars = "<>"; - - // {{{ matchTag() method + + //{{{ matchTag() method public static void matchTag(JEditTextArea textArea) { int caretPos = textArea.getCaretPosition(); for (int i=caretPos-1; i<caretPos+3; ++i) try @@ -450,6 +456,7 @@ xmlMatchTag(textArea); } // }}} + //{{{ xmlMatchTag() method public static void xmlMatchTag(JEditTextArea textArea) { @@ -481,7 +488,6 @@ } } //}}} - //{{{ selectElement() method /** * Selects whole element, can be called repeatedly to select @@ -631,7 +637,6 @@ } // }}} - //{{{ insertClosingTagKeyTyped() method public static void insertClosingTagKeyTyped(View view) { @@ -741,19 +746,15 @@ } } //}}} - //{{{ charactersToEntities() method + //{{{ charactersToEntities() methods public static String charactersToEntities(String s, Map hash) { + final String specialChars = "<>&\"\\"; StringBuffer buf = new StringBuffer(); for(int i = 0; i < s.length(); i++) { char ch = s.charAt(i); - if(ch >= 0x7f - || ch == '<' - || ch == '>' - || ch == '&' - || ch == '"' - || ch == '\'') + if(ch >= 0x7f || specialChars.indexOf(ch) > -1) { Character c = new Character(ch); String entity = (String)hash.get(c); @@ -771,38 +772,8 @@ } return buf.toString(); - } //}}} + } - //{{{ entitiesToCharacters() method - public static String entitiesToCharacters(String s, Map hash) - { - StringBuffer buf = new StringBuffer(); - for(int i = 0; i < s.length(); i++) - { - char ch = s.charAt(i); - if(ch == '&') - { - int index = s.indexOf(';',i); - if(index != -1) - { - String entityName = s.substring(i + 1,index); - Character c = (Character)hash.get(entityName); - if(c != null) - { - buf.append(c.charValue()); - i = index; - continue; - } - } - } - - buf.append(ch); - } - - return buf.toString(); - } //}}} - - //{{{ charactersToEntities() method public static void charactersToEntities(View view) { Buffer buffer = view.getBuffer(); @@ -829,13 +800,40 @@ Selection[] selection = textArea.getSelection(); for(int i = 0; i < selection.length; i++) { - textArea.setSelectedText(selection[i], - charactersToEntities(textArea.getSelectedText( - selection[i]),entityHash)); + String old = textArea.getSelectedText(selection[i]); + textArea.setSelectedText(selection[i], charactersToEntities(old, entityHash)); } } //}}} - //{{{ entitiesToCharacters() method + //{{{ entitiesToCharacters() methods + public static String entitiesToCharacters(String s, Map hash) + { + StringBuffer buf = new StringBuffer(); + for(int i = 0; i < s.length(); i++) + { + char ch = s.charAt(i); + if(ch == '&') + { + int index = s.indexOf(';',i); + if(index != -1) + { + String entityName = s.substring(i + 1,index); + Character c = (Character)hash.get(entityName); + if(c != null) + { + buf.append(c.charValue()); + i = index; + continue; + } + } + } + + buf.append(ch); + } + + return buf.toString(); + } + public static void entitiesToCharacters(View view) { Buffer buffer = view.getBuffer(); @@ -874,6 +872,8 @@ return (standaloneExtraSpace ? " />" : "/>"); } //}}} + // {{{ non-public methods + //{{{ propertiesChanged() method static void propertiesChanged() { @@ -885,15 +885,6 @@ "xml.standalone-extra-space"); } //}}} - //{{{ Private members - - //{{{ Static variables - private static Segment seg = new Segment(); - private static boolean closeCompletion; - private static boolean closeCompletionOpen; - private static boolean standaloneExtraSpace; - //}}} - //{{{ getPrevNonWhitespaceChar() method /** * Find the offset of the previous non whitespace character. @@ -961,4 +952,4 @@ //}}} //}}} -} +} // }}} Modified: plugins/XML/trunk/xml/XmlParsedData.java =================================================================== --- plugins/XML/trunk/xml/XmlParsedData.java 2007-05-06 17:35:00 UTC (rev 9500) +++ plugins/XML/trunk/xml/XmlParsedData.java 2007-05-06 18:58:33 UTC (rev 9501) @@ -25,11 +25,13 @@ import java.util.Map; import org.gjt.sp.jedit.Buffer; +import org.gjt.sp.util.StringList; import sidekick.SideKickParsedData; import xml.completion.CompletionInfo; import xml.completion.ElementDecl; import xml.completion.EntityDecl; +import xml.completion.IDDecl; import xml.parser.TagParser; //}}} @@ -45,12 +47,12 @@ * A mapping of namespace to CompletionInfo objects. * namespace of "" is the default namespace. */ - private Map mappings; + private Map<String, CompletionInfo> mappings; /** * A list of all identifiers encountered during the parse? */ - public List ids; + public List<IDDecl> ids; public void setCompletionInfo(String namespace, CompletionInfo info) { mappings.put(namespace, info); @@ -61,14 +63,14 @@ { super(fileName); this.html = html; - mappings = new HashMap(); - ids = new ArrayList(); + mappings = new HashMap<String, CompletionInfo>(); + ids = new ArrayList<IDDecl>(); } //}}} //{{{ getNoNamespaceCompletionInfo() method public CompletionInfo getNoNamespaceCompletionInfo() { - CompletionInfo info = (CompletionInfo)mappings.get(""); + CompletionInfo info = mappings.get(""); if(info == null) { info = new CompletionInfo(); @@ -85,7 +87,7 @@ name = name.toLowerCase(); String prefix = getElementNamePrefix(name); - CompletionInfo info = (CompletionInfo)mappings.get(prefix); + CompletionInfo info = mappings.get(prefix); if(info == null) return null; @@ -98,7 +100,7 @@ else lName = name.substring(prefixLen + 1); - ElementDecl decl = (ElementDecl)info.elementHash.get(lName); + ElementDecl decl = info.elementHash.get(lName); if(decl == null) return null; else @@ -108,9 +110,10 @@ //{{{ getAllowedElements() method - public List getAllowedElements(Buffer buffer, int pos) + /** @returns a list containing Elements or Attributes */ + public List<ElementDecl> getAllowedElements(Buffer buffer, int pos) { - List returnValue = new LinkedList(); + List<ElementDecl> returnValue = new LinkedList<ElementDecl>(); TagParser.Tag parentTag = null; try { @@ -128,7 +131,7 @@ String prefix = (String)iter.next(); CompletionInfo info = (CompletionInfo) mappings.get(prefix); - info.getAllElements(prefix,returnValue); + info.getAllElements(prefix, returnValue); } } else @@ -151,7 +154,7 @@ } } } - Collections.sort(returnValue,new ElementDecl.Compare()); + Collections.sort(returnValue, new ElementDecl.Compare()); return returnValue; } //}}} Modified: plugins/XML/trunk/xml/completion/CompletionInfo.java =================================================================== --- plugins/XML/trunk/xml/completion/CompletionInfo.java 2007-05-06 17:35:00 UTC (rev 9500) +++ plugins/XML/trunk/xml/completion/CompletionInfo.java 2007-05-06 18:58:33 UTC (rev 9501) @@ -27,36 +27,39 @@ import org.gjt.sp.jedit.MiscUtilities; import org.gjt.sp.jedit.jEdit; import org.gjt.sp.util.Log; +import org.gjt.sp.util.StandardUtilities; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; //}}} public class CompletionInfo { - public ArrayList elements; - public HashMap elementHash; - public ArrayList entities; + public ArrayList<ElementDecl> elements; + public HashMap<String, ElementDecl> elementHash; + public ArrayList<EntityDecl> entities; + /** Appears to implement a bidirectional relationship? */ public HashMap entityHash; + public ArrayList elementsAllowedAnywhere; //{{{ CompletionInfo constructor public CompletionInfo() { - this(new ArrayList(), new HashMap(), - new ArrayList(), new HashMap(), + this(new ArrayList<ElementDecl>(), new HashMap<String, ElementDecl>(), + new ArrayList<EntityDecl>(), new HashMap(), new ArrayList()); - /* This seems to be redundant... + addEntity(EntityDecl.INTERNAL,"lt","<"); addEntity(EntityDecl.INTERNAL,"gt",">"); addEntity(EntityDecl.INTERNAL,"amp","&"); addEntity(EntityDecl.INTERNAL,"quot","\""); - addEntity(EntityDecl.INTERNAL,"apos","'"); - */ + addEntity(EntityDecl.INTERNAL,"apos","'"); } //}}} //{{{ CompletionInfo constructor - public CompletionInfo(ArrayList elements, HashMap elementHash, - ArrayList entities, HashMap entityHash, + public CompletionInfo(ArrayList<ElementDecl> elements, + HashMap<String, ElementDecl> elementHash, + ArrayList<EntityDecl> entities, HashMap entityHash, ArrayList elementsAllowedAnywhere) { this.elements = elements; @@ -86,8 +89,8 @@ && entity.value.length() == 1) { Character ch = new Character(entity.value.charAt(0)); - entityHash.put(entity.name,ch); - entityHash.put(ch,entity.name); + entityHash.put(entity.name, ch); + entityHash.put(ch, entity.name); } } //}}} @@ -99,14 +102,14 @@ } //}}} //{{{ getAllElements() method - public void getAllElements(String prefix, List out) + public void getAllElements(String prefix, List<ElementDecl> out) { for(int i = 0; i < elements.size(); i++) { - ElementDecl decl = (ElementDecl)elements.get(i); + ElementDecl decl = elements.get(i); if (decl.isAbstract()) { - List repls = decl.findReplacements(prefix); + List<ElementDecl> repls = decl.findReplacements(prefix); out.addAll(repls); @@ -177,7 +180,7 @@ if(obj instanceof String) { CompletionInfo info = getCompletionInfoFromResource((String)obj); - completionInfoNamespaces.put(namespace,info); + completionInfoNamespaces.put(namespace, info); return info; } else @@ -220,7 +223,7 @@ } info = handler.getCompletionInfo(); - completionInfoResources.put(resource,info); + completionInfoResources.put (resource, info); return info; } @@ -239,16 +242,16 @@ } //}}} //{{{ Private members - private static HashMap globs; - private static HashMap completionInfoResources; - private static HashMap completionInfoNamespaces; + private static HashMap<Pattern, String> globs; + private static HashMap<String, CompletionInfo> completionInfoResources; + private static HashMap<String, Object> completionInfoNamespaces; private static Object lock; //{{{ Class initializer static { - completionInfoResources = new HashMap(); - globs = new HashMap(); + completionInfoResources = new HashMap<String, CompletionInfo>(); + globs = new HashMap<Pattern, String>(); int i = 0; String glob; while((glob = jEdit.getProperty("xml.completion.glob." + i + ".key")) != null) @@ -256,8 +259,8 @@ String info = jEdit.getProperty("xml.completion.glob." + i + ".value"); try { - globs.put(Pattern.compile(MiscUtilities.globToRE(glob), - Pattern.CASE_INSENSITIVE),info); + globs.put(Pattern.compile(StandardUtilities.globToRE(glob), + Pattern.CASE_INSENSITIVE), info); } catch(PatternSyntaxException pse) { @@ -267,13 +270,13 @@ i++; } - completionInfoNamespaces = new HashMap(); + completionInfoNamespaces = new HashMap<String, Object>(); i = 0; String namespace; while((namespace = jEdit.getProperty("xml.completion.namespace." + i + ".key")) != null) { String info = jEdit.getProperty("xml.completion.namespace." + i + ".value"); - completionInfoNamespaces.put(namespace,info); + completionInfoNamespaces.put(namespace, info); i++; } Modified: plugins/XML/trunk/xml/completion/CompletionInfoHandler.java =================================================================== --- plugins/XML/trunk/xml/completion/CompletionInfoHandler.java 2007-05-06 17:35:00 UTC (rev 9500) +++ plugins/XML/trunk/xml/completion/CompletionInfoHandler.java 2007-05-06 18:58:33 UTC (rev 9501) @@ -29,12 +29,12 @@ public CompletionInfoHandler() { completionInfo = new CompletionInfo(); - +/* This is redundant - already done in completionInfo ctor addEntity(new EntityDecl(EntityDecl.INTERNAL,"lt","<")); addEntity(new EntityDecl(EntityDecl.INTERNAL,"gt",">")); addEntity(new EntityDecl(EntityDecl.INTERNAL,"amp","&")); addEntity(new EntityDecl(EntityDecl.INTERNAL,"quot","\"")); - addEntity(new EntityDecl(EntityDecl.INTERNAL,"apos","'")); + addEntity(new EntityDecl(EntityDecl.INTERNAL,"apos","'")); */ } //}}} //{{{ getCompletionInfo() method Modified: plugins/XML/trunk/xml/completion/ElementDecl.java =================================================================== --- plugins/XML/trunk/xml/completion/ElementDecl.java 2007-05-06 17:35:00 UTC (rev 9500) +++ plugins/XML/trunk/xml/completion/ElementDecl.java 2007-05-06 18:58:33 UTC (rev 9501) @@ -24,7 +24,7 @@ import java.util.Set; import java.util.StringTokenizer; -import org.gjt.sp.jedit.MiscUtilities; +import org.gjt.sp.util.StandardUtilities; public class ElementDecl { @@ -35,9 +35,9 @@ public boolean empty; public boolean any; - public List attributes; - public Map attributeHash; - public Set content; + public List<AttributeDecl> attributes; + public Map<String, AttributeDecl> attributeHash; + public Set<String> content; //{{{ ElementDecl constructor public ElementDecl(CompletionInfo completionInfo, String name, String content) @@ -49,14 +49,14 @@ if(content != null) setContent(content); - attributes = new ArrayList(); - attributeHash = new HashMap(); + attributes = new ArrayList<AttributeDecl>(); + attributeHash = new HashMap<String, AttributeDecl>(); } //}}} //{{{ ElementDecl constructor public ElementDecl(CompletionInfo completionInfo, String name, - boolean empty, boolean any, List attributes, Map attributeHash, - Set content) + boolean empty, boolean any, List<AttributeDecl> attributes, Map<String, AttributeDecl> attributeHash, + Set<String> content) { this.completionInfo = completionInfo; this.name = name; @@ -83,7 +83,7 @@ any = true; else { - this.content = new HashSet(); + this.content = new HashSet<String>(); StringTokenizer st = new StringTokenizer(content, "(?*+|,) \t\n"); @@ -112,30 +112,28 @@ return this; else { - return new ElementDecl(completionInfo,prefix + ':' + name, - empty,any,attributes,attributeHash,content); + return new ElementDecl(completionInfo, prefix + ':' + name, + empty, any, attributes, attributeHash, content); } } //}}} //{{{ getChildElements() method - public List getChildElements(String prefix) + public List<ElementDecl> getChildElements(String prefix) { - ArrayList children = new ArrayList(100); + ArrayList<ElementDecl>children = new ArrayList<ElementDecl>(100); if(any) { for(int i = 0; i < completionInfo.elements.size(); i++) { - children.add(((ElementDecl)completionInfo.elements.get(i)) - .withPrefix(prefix)); + children.add(((ElementDecl)completionInfo.elements.get(i)).withPrefix(prefix)); } } else { for(int i = 0; i < completionInfo.elementsAllowedAnywhere.size(); i++) { - children.add(((ElementDecl)completionInfo - .elementsAllowedAnywhere.get(i)) + children.add(((ElementDecl)completionInfo.elementsAllowedAnywhere.get(i)) .withPrefix(prefix)); } @@ -166,28 +164,28 @@ * none. * */ - public List findReplacements(String prefix) { + public List<ElementDecl> findReplacements(String prefix) { return null; } //{{{ getAttribute() method - public AttributeDecl getAttribute(String name) + public AttributeDecl getAttribute(String attrname) { - return (AttributeDecl)attributeHash.get(name); + return attributeHash.get(attrname); } //}}} //{{{ addAttribute() method public void addAttribute(AttributeDecl attribute) { - attributeHash.put(attribute.name,attribute); + attributeHash.put(attribute.name, attribute); for(int i = 0; i < attributes.size(); i++) { AttributeDecl attr = (AttributeDecl)attributes.get(i); if(attr.name.compareTo(attribute.name) > 0) { - attributes.add(i,attribute); + attributes.add(i, attribute); return; } } @@ -308,13 +306,11 @@ } //}}} //{{{ Compare class - public static class Compare implements MiscUtilities.Compare + public static class Compare implements java.util.Comparator<ElementDecl> { - public int compare(Object obj1, Object obj2) + public int compare(ElementDecl obj1, ElementDecl obj2) { - return MiscUtilities.compareStrings( - ((ElementDecl)obj1).name, - ((ElementDecl)obj2).name,true); + return StandardUtilities.compareStrings(obj1.name, obj2.name, true); } } //}}} } Modified: plugins/XML/trunk/xml/parser/SAXParserImpl.java =================================================================== --- plugins/XML/trunk/xml/parser/SAXParserImpl.java 2007-05-06 17:35:00 UTC (rev 9500) +++ plugins/XML/trunk/xml/parser/SAXParserImpl.java 2007-05-06 18:58:33 UTC (rev 9501) @@ -114,7 +114,7 @@ SymbolTable symbolTable = new SymbolTable(); XMLGrammarPoolImpl grammarPool = new XMLGrammarPoolImpl(); - Handler handler = new Handler(buffer,text,errorSource,data,grammarPool); + Handler handler = new Handler(buffer, text, errorSource, data, grammarPool); XMLReader reader = new org.apache.xerces.parsers.SAXParser(symbolTable,grammarPool); try @@ -195,7 +195,7 @@ Log.log(Log.ERROR,this,e); } - Collections.sort(data.ids,new IDDecl.Compare()); + Collections.sort(data.ids, new IDDecl.Compare()); return data; } //}}} Modified: plugins/XML/trunk/xml/parser/XercesParserImpl.java =================================================================== --- plugins/XML/trunk/xml/parser/XercesParserImpl.java 2007-05-06 17:35:00 UTC (rev 9500) +++ plugins/XML/trunk/xml/parser/XercesParserImpl.java 2007-05-06 18:58:33 UTC (rev 9501) @@ -68,7 +68,7 @@ * The design goal is to use more recent APIs in Xerces, and to avoid * using internal or native interface classes, including the Grammar * class. - * It is not working yet. + * It is not fully working yet. * * * @@ -151,8 +151,7 @@ Log.log(Log.NOTICE,this,"rootDocument specified; " + "parsing " + rootDocument); rootDocument = MiscUtilities.constructPath( - MiscUtilities.getParentOfPath( - buffer.getPath()),rootDocument); + MiscUtilities.getParentOfPath(buffer.getPath()), rootDocument); source.setSystemId(rootDocument); } else @@ -172,7 +171,7 @@ { Log.log(Log.ERROR,this,ioe); ioe.printStackTrace(); - errorSource.addError(ErrorSource.ERROR,buffer.getPath(),0,0,0, + errorSource.addError(ErrorSource.ERROR, buffer.getPath(), 0, 0, 0, ioe.toString()); } catch(SAXParseException spe) @@ -181,7 +180,7 @@ } catch(SAXException se) { - Log.log(Log.ERROR,this,se.getException()); + Log.log(Log.ERROR, this, se.getException()); if(se.getMessage() != null) { se.printStackTrace(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dal...@us...> - 2007-06-26 02:21:12
|
Revision: 9846 http://svn.sourceforge.net/jedit/?rev=9846&view=rev Author: daleanson Date: 2007-06-25 19:20:49 -0700 (Mon, 25 Jun 2007) Log Message: ----------- Added action to split/unsplit attributes via XmlIndenter. Modified Paths: -------------- plugins/XML/trunk/XML.props plugins/XML/trunk/actions.xml plugins/XML/trunk/xml/indent/IndentingTransformer.java plugins/XML/trunk/xml/indent/XmlIndenterPlugin.java Modified: plugins/XML/trunk/XML.props =================================================================== --- plugins/XML/trunk/XML.props 2007-06-25 20:49:00 UTC (rev 9845) +++ plugins/XML/trunk/XML.props 2007-06-26 02:20:49 UTC (rev 9846) @@ -17,8 +17,8 @@ plugin.xml.XmlPlugin.menu=sidekick-tree \ xml-match-tag \ - xml-select-element \ - xml-select-between-tags \ + xml-select-element \ + xml-select-between-tags \ - \ xml-insert \ xml-edit-tag \ @@ -29,6 +29,7 @@ xml-chars-to-entities \ xml-entities-to-chars \ xmlindenter.indent \ + xmlindenter.toggleSplitAttributes \ - \ csssidekick-insert-relative-path \ - \ @@ -39,6 +40,7 @@ # Indent action xmlindenter.indent.message.failure=Indenting failed to complete. xmlindenter.indent.label=Indent XML +xmlindenter.toggleSplitAttributes.label=Split/Unsplit Attributes xml-match-tag.label=Go to Matching Tag or Bracket xml-insert.label=XML Insert @@ -260,6 +262,8 @@ options.csssidekick.space-after-colon.title=Insert space after colon when property is completed options.csssidekick.space-after-colon=true +options.csssidekick.showProprietaryAsError.title=List proprietary CSS tags in Error List as error +options.csssidekick.showProprietaryAsError=true # }}} # {{{ HTMLSideKick props Modified: plugins/XML/trunk/actions.xml =================================================================== --- plugins/XML/trunk/actions.xml 2007-06-25 20:49:00 UTC (rev 9845) +++ plugins/XML/trunk/actions.xml 2007-06-26 02:20:49 UTC (rev 9846) @@ -2,87 +2,90 @@ <!DOCTYPE ACTIONS SYSTEM "actions.dtd"> <ACTIONS> <ACTION NAME="xmlindenter.indent"> - <CODE>xml.indent.XmlIndenterPlugin.indentXml(view);</CODE> - </ACTION> - <ACTION NAME="csssidekick-reload-completion-config"> - <CODE> - sidekick.css.CssSideKickCompletion.initialize(); - </CODE> - </ACTION> - <ACTION NAME="csssidekick-insert-relative-path"> - <CODE> - sidekick.css.Utils.insertRelativePathToBuffer(); - </CODE> - </ACTION> - <ACTION NAME="htmlsidekick-showall" NO_REPEAT="TRUE"> - <CODE> - sidekick.html.HtmlSideKickPlugin.toggleShowAll(view); - </CODE> - </ACTION> + <CODE>xml.indent.XmlIndenterPlugin.indentXml(view);</CODE> + </ACTION> + <ACTION NAME="xmlindenter.toggleSplitAttributes"> + <CODE>xml.indent.XmlIndenterPlugin.toggleSplitAttributes(view);</CODE> + </ACTION> + <ACTION NAME="csssidekick-reload-completion-config"> + <CODE> + sidekick.css.CssSideKickCompletion.initialize(); + </CODE> + </ACTION> + <ACTION NAME="csssidekick-insert-relative-path"> + <CODE> + sidekick.css.Utils.insertRelativePathToBuffer(); + </CODE> + </ACTION> + <ACTION NAME="htmlsidekick-showall" NO_REPEAT="TRUE"> + <CODE> + sidekick.html.HtmlSideKickPlugin.toggleShowAll(view); + </CODE> + </ACTION> - <!-- commands invoked by user input --> - <ACTION NAME="xml-insert-closing-tag"> - <CODE> - xml.XmlActions.insertClosingTagKeyTyped(view); - </CODE> - </ACTION> + <!-- commands invoked by user input --> + <ACTION NAME="xml-insert-closing-tag"> + <CODE> + xml.XmlActions.insertClosingTagKeyTyped(view); + </CODE> + </ACTION> - <!-- normal actions --> - <ACTION NAME="xml-chars-to-entities"> - <CODE> - xml.XmlActions.charactersToEntities(view); - </CODE> - </ACTION> - <ACTION NAME="xml-entities-to-chars"> - <CODE> - xml.XmlActions.entitiesToCharacters(view); - </CODE> - </ACTION> - <ACTION NAME="xml-edit-tag"> - <CODE> - xml.XmlActions.showEditTagDialog(view); - </CODE> - </ACTION> - <ACTION NAME="xml-close-tag"> - <CODE> - xml.XmlActions.insertClosingTag(view); - </CODE> - </ACTION> - <ACTION NAME="xml-split-tag"> - <CODE> - xml.XmlActions.split(view); - </CODE> - </ACTION> - <ACTION NAME="xml-match-tag"> - <CODE> - xml.XmlActions.matchTag(textArea); - </CODE> - </ACTION> - <ACTION NAME="xml-remove-tags"> - <CODE> - xml.XmlActions.removeTags(buffer); - </CODE> - </ACTION> - <ACTION NAME="xml-clear-cache"> - <CODE> - xml.CatalogManager.clearCache(); - </CODE> - </ACTION> - <ACTION NAME="xml-reload-catalogs"> - <CODE> - xml.Resolver.instance().reloadCatalogs(); - xml.CatalogManager.reloadCatalogs(); - </CODE> - </ACTION> - <ACTION NAME="xml-select-element"> - <CODE> - xml.XmlActions.selectElement(textArea); - </CODE> - </ACTION> - <ACTION NAME="xml-select-between-tags"> - <CODE> - xml.XmlActions.selectBetweenTags(textArea); - </CODE> - </ACTION> + <!-- normal actions --> + <ACTION NAME="xml-chars-to-entities"> + <CODE> + xml.XmlActions.charactersToEntities(view); + </CODE> + </ACTION> + <ACTION NAME="xml-entities-to-chars"> + <CODE> + xml.XmlActions.entitiesToCharacters(view); + </CODE> + </ACTION> + <ACTION NAME="xml-edit-tag"> + <CODE> + xml.XmlActions.showEditTagDialog(view); + </CODE> + </ACTION> + <ACTION NAME="xml-close-tag"> + <CODE> + xml.XmlActions.insertClosingTag(view); + </CODE> + </ACTION> + <ACTION NAME="xml-split-tag"> + <CODE> + xml.XmlActions.split(view); + </CODE> + </ACTION> + <ACTION NAME="xml-match-tag"> + <CODE> + xml.XmlActions.matchTag(textArea); + </CODE> + </ACTION> + <ACTION NAME="xml-remove-tags"> + <CODE> + xml.XmlActions.removeTags(buffer); + </CODE> + </ACTION> + <ACTION NAME="xml-clear-cache"> + <CODE> + xml.CatalogManager.clearCache(); + </CODE> + </ACTION> + <ACTION NAME="xml-reload-catalogs"> + <CODE> + xml.Resolver.instance().reloadCatalogs(); + xml.CatalogManager.reloadCatalogs(); + </CODE> + </ACTION> + <ACTION NAME="xml-select-element"> + <CODE> + xml.XmlActions.selectElement(textArea); + </CODE> + </ACTION> + <ACTION NAME="xml-select-between-tags"> + <CODE> + xml.XmlActions.selectBetweenTags(textArea); + </CODE> + </ACTION> </ACTIONS> Modified: plugins/XML/trunk/xml/indent/IndentingTransformer.java =================================================================== --- plugins/XML/trunk/xml/indent/IndentingTransformer.java 2007-06-25 20:49:00 UTC (rev 9845) +++ plugins/XML/trunk/xml/indent/IndentingTransformer.java 2007-06-26 02:20:49 UTC (rev 9846) @@ -32,7 +32,9 @@ import java.io.Writer; import java.util.regex.*; +import org.gjt.sp.jedit.jEdit; + /** * Indents elements, by adding whitespace where appropriate. * Does not remove blank lines between nodes. @@ -125,11 +127,7 @@ writer.write( qName ); } - boolean onNewLine = false; - String split_attributes = System.getProperty("xmlindenter.splitAttributes"); - if (split_attributes != null && atts.getLength() > 1) { - onNewLine = split_attributes.equals("true"); - } + boolean onNewLine = jEdit.getBooleanProperty("xmlindenter.splitAttributes", false); for ( int i = 0; i < atts.getLength(); i++ ) { String attributeQName = atts.getQName( i ); String attributeValue = atts.getValue( i ); Modified: plugins/XML/trunk/xml/indent/XmlIndenterPlugin.java =================================================================== --- plugins/XML/trunk/xml/indent/XmlIndenterPlugin.java 2007-06-25 20:49:00 UTC (rev 9845) +++ plugins/XML/trunk/xml/indent/XmlIndenterPlugin.java 2007-06-26 02:20:49 UTC (rev 9846) @@ -1,22 +1,22 @@ /* - * XmlIndenterPlugin.java - EditPlugin implementation for the XML Indenter plugin - * - * Copyright (c) 2003 Robert McKinnon - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ +* XmlIndenterPlugin.java - EditPlugin implementation for the XML Indenter plugin +* +* Copyright (c) 2003 Robert McKinnon +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ package xml.indent; import org.gjt.sp.jedit.jEdit; @@ -37,125 +37,135 @@ * * @author Robert McKinnon - rob...@us... */ -public class XmlIndenterPlugin { +public class XmlIndenterPlugin { - private static final String XSL_TEXT_ELEMENT = "xsl:text"; - private static final String SVG_TEXT_ELEMENT = "text"; - private static final String SVG_TSPAN_ELEMENT = "tspan"; + private static final String XSL_TEXT_ELEMENT = "xsl:text"; + private static final String SVG_TEXT_ELEMENT = "text"; + private static final String SVG_TSPAN_ELEMENT = "tspan"; - private static final IndentingTransformerImpl TRANSFORMER = new IndentingTransformerImpl(); + private static final IndentingTransformerImpl TRANSFORMER = new IndentingTransformerImpl(); - public void start() { - String modified = jEdit.getProperty("xmlindenter.preserve-whitespace-element.modified"); - boolean settingModified = (modified != null); - if(!settingModified) { - jEdit.setProperty("xmlindenter.preserve-whitespace-element.0", XSL_TEXT_ELEMENT); - jEdit.setProperty("xmlindenter.preserve-whitespace-element.1", SVG_TEXT_ELEMENT); - jEdit.setProperty("xmlindenter.preserve-whitespace-element.2", SVG_TSPAN_ELEMENT); + public void start() { + String modified = jEdit.getProperty( "xmlindenter.preserve-whitespace-element.modified" ); + boolean settingModified = ( modified != null ); + if ( !settingModified ) { + jEdit.setProperty( "xmlindenter.preserve-whitespace-element.0", XSL_TEXT_ELEMENT ); + jEdit.setProperty( "xmlindenter.preserve-whitespace-element.1", SVG_TEXT_ELEMENT ); + jEdit.setProperty( "xmlindenter.preserve-whitespace-element.2", SVG_TSPAN_ELEMENT ); + } } - } - /** - * Displays a user-friendly error message to go with the supplied exception. - */ - static void processException(Exception e, String message, Component component) { - StringWriter writer = new StringWriter(); - e.printStackTrace(new PrintWriter(writer)); - Log.log(Log.DEBUG, Thread.currentThread(), writer.toString()); - String msg = MessageFormat.format(jEdit.getProperty("xmlindenter.message.error"), - new Object[]{message, e.getMessage()}); - JOptionPane.showMessageDialog(component, msg.toString()); - } + /** + * Displays a user-friendly error message to go with the supplied exception. + */ + static void processException( Exception e, String message, Component component ) { + StringWriter writer = new StringWriter(); + e.printStackTrace( new PrintWriter( writer ) ); + Log.log( Log.DEBUG, Thread.currentThread(), writer.toString() ); + String msg = MessageFormat.format( jEdit.getProperty( "xmlindenter.message.error" ), + new Object[] {message, e.getMessage() } ); + JOptionPane.showMessageDialog( component, msg.toString() ); + } - static void showMessageDialog(String property, Component component) { - String message = jEdit.getProperty(property); - JOptionPane.showMessageDialog(component, message); - } + static void showMessageDialog( String property, Component component ) { + String message = jEdit.getProperty( property ); + JOptionPane.showMessageDialog( component, message ); + } + public static void toggleSplitAttributes( View view ) { + boolean split = jEdit.getBooleanProperty( "xmlindenter.splitAttributes", false ); + jEdit.setBooleanProperty("xmlindenter.splitAttributes", !split); + indentXml(view); + } - /** - * Indents XML in current buffer. - * @param view - */ - public static void indentXml(View view) { - Buffer buffer = view.getBuffer(); - boolean indentWithTabs = getIndentWithTabs(buffer); - int indentAmount = getIndentAmount(indentWithTabs, buffer); - buffer.writeLock(); - buffer.beginCompoundEdit(); + /** + * Indents XML in current buffer. + * @param view + */ + public static void indentXml( View view ) { + Buffer buffer = view.getBuffer(); + boolean indentWithTabs = getIndentWithTabs( buffer ); + int indentAmount = getIndentAmount( indentWithTabs, buffer ); - try { - String inputString = buffer.getText(0, buffer.getLength()); - String resultString = XmlIndenterPlugin.indent(inputString, indentAmount, indentWithTabs); + buffer.writeLock(); + buffer.beginCompoundEdit(); - int caretPosition = view.getTextArea().getCaretPosition(); - buffer.remove(0, buffer.getLength()); - buffer.insert(0, resultString); + try { + String inputString = buffer.getText( 0, buffer.getLength() ); + String resultString = XmlIndenterPlugin.indent( inputString, indentAmount, indentWithTabs ); - if(caretPosition > (buffer.getLength() - 1)) { - view.getTextArea().setCaretPosition(buffer.getLength() - 1); - } else { - char c = resultString.charAt(caretPosition); + int caretPosition = view.getTextArea().getCaretPosition(); + buffer.remove( 0, buffer.getLength() ); + buffer.insert( 0, resultString ); - while(caretPosition < buffer.getLength() && !(c == '>' || c == '<')) { - caretPosition++; //hack to prevent XML autocomplete of end element name - c = resultString.charAt(caretPosition); - } + if ( caretPosition > ( buffer.getLength() - 1 ) ) { + view.getTextArea().setCaretPosition( buffer.getLength() - 1 ); + } + else { + char c = resultString.charAt( caretPosition ); - if(c == '>') { - caretPosition++; + while ( caretPosition < buffer.getLength() && !( c == '>' || c == '<' ) ) { + caretPosition++; //hack to prevent XML autocomplete of end element name + c = resultString.charAt( caretPosition ); + } + + if ( c == '>' ) { + caretPosition++; + } + view.getTextArea().setCaretPosition( caretPosition ); + } } - view.getTextArea().setCaretPosition(caretPosition); - } - } catch(Exception e) { - Log.log(Log.ERROR, IndentingTransformerImpl.class, e); - String message = jEdit.getProperty("xmlindenter.indent.message.failure"); - XmlIndenterPlugin.processException(e, message, view); - } finally { - if(buffer.insideCompoundEdit()) { - buffer.endCompoundEdit(); - } - buffer.writeUnlock(); + catch ( Exception e ) { + Log.log( Log.ERROR, IndentingTransformerImpl.class, e ); + String message = jEdit.getProperty( "xmlindenter.indent.message.failure" ); + XmlIndenterPlugin.processException( e, message, view ); + } + finally { + if ( buffer.insideCompoundEdit() ) { + buffer.endCompoundEdit(); + } + buffer.writeUnlock(); + } } - } - private static boolean getIndentWithTabs(Buffer buffer) { - boolean tabSizeAppropriate = buffer.getTabSize() <= buffer.getIndentSize(); - return !buffer.getBooleanProperty("noTabs") && tabSizeAppropriate; - } + private static boolean getIndentWithTabs( Buffer buffer ) { + boolean tabSizeAppropriate = buffer.getTabSize() <= buffer.getIndentSize(); + return !buffer.getBooleanProperty( "noTabs" ) && tabSizeAppropriate; + } - private static int getIndentAmount(boolean indentWithTabs, Buffer buffer) { - if(indentWithTabs) { - return buffer.getIndentSize() / buffer.getTabSize(); - } else { - return buffer.getIndentSize(); + private static int getIndentAmount( boolean indentWithTabs, Buffer buffer ) { + if ( indentWithTabs ) { + return buffer.getIndentSize() / buffer.getTabSize(); + } + else { + return buffer.getIndentSize(); + } } - } - protected static String indent(String inputString, int indentAmount, boolean indentWithTabs) throws Exception { - List preserveWhitespaceList = getEnumeratedProperty("xmlindenter.preserve-whitespace-element"); - StringWriter writer = new StringWriter(); - Log.log(Log.ERROR, XmlIndenterPlugin.class, "" + preserveWhitespaceList.size()); - TRANSFORMER.indentXml(inputString, writer, indentAmount, indentWithTabs, preserveWhitespaceList); - String resultString = writer.toString(); -// return removeIn(resultString, '\r'); //remove '\r' to temporarily fix a bug in the display of results in Windows - return resultString; - } + protected static String indent( String inputString, int indentAmount, boolean indentWithTabs ) throws Exception { + List preserveWhitespaceList = getEnumeratedProperty( "xmlindenter.preserve-whitespace-element" ); + StringWriter writer = new StringWriter(); + Log.log( Log.ERROR, XmlIndenterPlugin.class, "" + preserveWhitespaceList.size() ); + TRANSFORMER.indentXml( inputString, writer, indentAmount, indentWithTabs, preserveWhitespaceList ); + String resultString = writer.toString(); + // return removeIn(resultString, '\r'); //remove '\r' to temporarily fix a bug in the display of results in Windows + return resultString; + } - public static List getEnumeratedProperty(String key) { - List values = new ArrayList(); - int i = 0; - String value; - while((value = jEdit.getProperty(key+"."+i)) != null) { - values.add(value); - i++; + public static List getEnumeratedProperty( String key ) { + List values = new ArrayList(); + int i = 0; + String value; + while ( ( value = jEdit.getProperty( key + "." + i ) ) != null ) { + values.add( value ); + i++; + } + return values; } - return values; - } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2007-07-08 04:24:44
|
Revision: 9957 http://svn.sourceforge.net/jedit/?rev=9957&view=rev Author: ezust Date: 2007-07-07 21:24:42 -0700 (Sat, 07 Jul 2007) Log Message: ----------- Added a join tag action. Modified Paths: -------------- plugins/XML/trunk/XML.props plugins/XML/trunk/actions.xml plugins/XML/trunk/build.xml plugins/XML/trunk/xml/TagHighlight.java plugins/XML/trunk/xml/XmlActions.java plugins/XML/trunk/xml/parser/TagParser.java Added Paths: ----------- plugins/XML/trunk/build.properties.sample Modified: plugins/XML/trunk/XML.props =================================================================== --- plugins/XML/trunk/XML.props 2007-07-08 04:21:25 UTC (rev 9956) +++ plugins/XML/trunk/XML.props 2007-07-08 04:24:42 UTC (rev 9957) @@ -11,8 +11,11 @@ plugin.xml.XmlPlugin.depend.3=plugin errorlist.ErrorListPlugin 1.4.2 plugin.xml.XmlPlugin.depend.4=plugin sidekick.SideKickPlugin 0.6.7 plugin.xml.XmlPlugin.depend.5=plugin beauty.BeautyPlugin 0.2.1 -plugin.xml.XmlPlugin.description=The XML plugin provides features for editing XML, HTML, JavaScript and CSS files. For XML files, it does validation against a DTD or XSD. For all languages, it displays element trees in the sidekick dockable. For XML, HTML and CSS, you get completion popups for elements, attribute, and entities. +plugin.xml.XmlPlugin.description=The XML plugin provides features for editing XML, HTML, JavaScript and CSS files. For XML files, it does validation against a DTD or XSD. For all languages, it displays element trees in the SideKick dockable. For XML, HTML and CSS, you get completion popups for elements, attribute, and entities. +# In addition to the above dependencies, this plugin only builds properly with +# XML 1.6.5 - the AntCompleteTask is incompatible with Ant 1.7.0. + # Menu bar stuff plugin.xml.XmlPlugin.menu=sidekick-tree \ @@ -25,6 +28,7 @@ xml-close-tag \ xml-remove-tags \ xml-split-tag \ + xml-join-tag \ - \ xml-chars-to-entities \ xml-entities-to-chars \ @@ -48,6 +52,7 @@ xml-close-tag.label=Close Last Open Tag xml-remove-tags.label=Remove All Tags xml-split-tag.label=Split Tag +xml-join-tag.label=Join Tag xml-chars-to-entities.label=Characters to Entities xml-entities-to-chars.label=Entities to Characters xml-clear-cache.label=Clear Resource Cache Modified: plugins/XML/trunk/actions.xml =================================================================== --- plugins/XML/trunk/actions.xml 2007-07-08 04:21:25 UTC (rev 9956) +++ plugins/XML/trunk/actions.xml 2007-07-08 04:24:42 UTC (rev 9957) @@ -56,6 +56,11 @@ xml.XmlActions.split(view); </CODE> </ACTION> + <ACTION NAME="xml-join-tag"> + <CODE> + xml.XmlActions.join(view); + </CODE> + </ACTION> <ACTION NAME="xml-match-tag"> <CODE> xml.XmlActions.matchTag(textArea); Added: plugins/XML/trunk/build.properties.sample =================================================================== --- plugins/XML/trunk/build.properties.sample (rev 0) +++ plugins/XML/trunk/build.properties.sample 2007-07-08 04:24:42 UTC (rev 9957) @@ -0,0 +1,53 @@ +### +### Alan's Build property file for jedit plugins +### + +# You need to change these +jedit.install.dir=/home/ezust/workspace/jedit/trunk/build +build.support=/home/ezust/workspace/jedit/trunk/build-support + +# For regular work: +install.dir=/home/ezust/.jedit/jars + +# debian users probably don't need to change anything else after this + +#Location of the build files +build.directory=${basedir}/build +build.dir=${basedir}/build +build.docs=${basedir}/build/docs + +# We look for jars in the same place as we install this one. +install.dir=${jedit.install.dir}/jars + +jedit.home=${jedit.install.dir} +jedit.plugins.dir=${install.dir} +jedit.jars.dir=${install.dir} + +# debian default +docbook.catalog=/usr/share/xml/docbook/schema/dtd/4.2/catalog + +### If you want to build the user's guide and FAQ, set this property to +### the path of the DocBook-XSL stylesheets +docbook-xsl.dir=/usr/share/xml/docbook/stylesheet/nwalsh + +# used by some older build.xml files +docbook.xsl=${docbook-xsl.dir} + +### If you want to build the PDF user's guide, set this to your FOP install dir +fop.bin=/home/ezust/public_html/local/bin/fop + +### If you want to create the javadocs, set this to your JDK's tools.jar path. +tools.jar=/usr/lib/jvm/java-1.5.0-sun/lib + +# For building documentation, this can be "xsltproc" or "xalan" +docs-proc.target=xsltproc + +# Required by some plugins that use xerces - assume they were installed with xerces plugin +xml-apis.jar=${install.dir}/xml-apis.jar +xerces.jar=${install.dir}/xercesImpl.jar + +# Generate debug code +compiler.debug=yes + +# Some sidekick parsers generate code via javacc as part of the build. +javacc=/home/ezust/workspace/javacc-4.0/bin/javacc Modified: plugins/XML/trunk/build.xml =================================================================== --- plugins/XML/trunk/build.xml 2007-07-08 04:21:25 UTC (rev 9956) +++ plugins/XML/trunk/build.xml 2007-07-08 04:24:42 UTC (rev 9957) @@ -59,9 +59,7 @@ <!-- Generate ant-complete.xml file with AntComplete task --> <target name="ant-complete" depends="compile"> - <taskdef name="antcomplete" - classname="xml.completion.AntCompleteTask" - classpath="${build.classes}"/> + <taskdef name="antcomplete" classname="xml.completion.AntCompleteTask" classpath="${build.classes}"/> <antcomplete output="${src.dir}/xml/completion/ant-complete.xml"/> </target> Modified: plugins/XML/trunk/xml/TagHighlight.java =================================================================== --- plugins/XML/trunk/xml/TagHighlight.java 2007-07-08 04:21:25 UTC (rev 9956) +++ plugins/XML/trunk/xml/TagHighlight.java 2007-07-08 04:24:42 UTC (rev 9957) @@ -40,14 +40,11 @@ } else { - TagParser.Tag tag = TagParser - .getMatchingTag(text,current); + TagParser.Tag tag = TagParser.getMatchingTag(text,current); if(tag != null) { - tag.startLine = textArea.getLineOfOffset( - tag.start); - tag.endLine = textArea.getLineOfOffset( - tag.end); + tag.startLine = textArea.getLineOfOffset(tag.start); + tag.endLine = textArea.getLineOfOffset(tag.end); tag.matcher = this; } return tag; Modified: plugins/XML/trunk/xml/XmlActions.java =================================================================== --- plugins/XML/trunk/xml/XmlActions.java 2007-07-08 04:21:25 UTC (rev 9956) +++ plugins/XML/trunk/xml/XmlActions.java 2007-07-08 04:24:42 UTC (rev 9957) @@ -39,6 +39,7 @@ import org.gjt.sp.jedit.Buffer; import org.gjt.sp.jedit.GUIUtilities; import org.gjt.sp.jedit.Macros; +import org.gjt.sp.jedit.MiscUtilities; import org.gjt.sp.jedit.View; import org.gjt.sp.jedit.jEdit; import org.gjt.sp.jedit.buffer.JEditBuffer; @@ -334,7 +335,10 @@ } } //}}} - // {{{ splitTagAtCaret() method + // {{{ splitTag() method + /** + * Splits tag at caret, so that attributes are on separate lines. + */ public static void splitTag(Tag tag, JEditTextArea textArea) { View view = textArea.getView(); textArea.setSelection(new Selection.Range(tag.start, tag.end)); @@ -347,6 +351,7 @@ Selection[] s = textArea.getSelection(); if (s.length != 1) return; Selection sel = s[0]; + if (sel.getEnd() - sel.getStart() < 2) return; int line = textArea.getLineOfOffset(tag.start); int lineStartOffset = textArea.getLineStartOffset(line); int indentChars = 2 + sel.getStart() - lineStartOffset; @@ -401,9 +406,88 @@ result.append(htmlTag.tagEnd); } } + else { + return; + } textArea.replaceSelection(result.toString()); }// }}} + // {{{ join() method + /** + * If inside a HTML or XML, join attributes and tagname all on one line. + * Otherwise do nothing. + */ + static public void join (View view) { + JEditTextArea textArea = view.getTextArea(); + Buffer buffer = view.getBuffer(); + int pos = textArea.getCaretPosition(); + String text = buffer.getText(0,buffer.getLength()); + Tag tag = TagParser.getTagAtOffset(text, pos); + if (tag == null) return; // we're not in a tag; + + // select it + textArea.setSelection(new Selection.Range(tag.start, tag.end)); + SideKickParsedData _data = SideKickParsedData.getParsedData(view); + if(!(_data instanceof XmlParsedData)) + { + GUIUtilities.error(view, "xml-no-data", null); + return; + } + Selection[] s = textArea.getSelection(); + if (s.length != 1) return; + Selection sel = s[0]; + if (sel.getEnd() - sel.getStart() < 2) return; + int line = textArea.getLineOfOffset(tag.start); +// int lineStartOffset = textArea.getLineStartOffset(line); + XmlParsedData data = (XmlParsedData)_data; + TreePath path = data.getTreePathForPosition(textArea.getCaretPosition()); + int count = path.getPathCount(); + DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getPathComponent(count-1); + StringBuffer result = new StringBuffer(); + Object user_object = node.getUserObject(); + if (user_object instanceof XmlTag) { + XmlTag xmltag = (XmlTag) node.getUserObject(); + result.append("<"); + result.append(xmltag.getName()); + Attributes attrs = xmltag.attributes; + count = attrs.getLength(); + for (int i=0; i<count; ++i) { + String formatstr = String.format(" %s = \"%s\"", + new Object[] {attrs.getQName(i), attrs.getValue(i) }); + result.append(formatstr); + } + // TODO: WE NEED TO CHECK IF THIS IS A SELF_TERMINATING TAG, ending with /> + result.append(">"); + } + else if (user_object instanceof SideKickAsset) { + SideKickElement element = ((SideKickAsset)user_object).getElement(); + if (element instanceof HtmlDocument.Tag) { + HtmlDocument.Tag htmlTag = (HtmlDocument.Tag)element; + result.append(htmlTag.tagStart); + result.append(htmlTag.tagName).append(" "); + List attrs = ((HtmlDocument.Tag)element).attributeList.attributes; + for (Iterator it = attrs.iterator(); it.hasNext(); ) { + HtmlDocument.Attribute attr = (HtmlDocument.Attribute)it.next(); + result.append(attr.name); + if (attr.hasValue) { + String value = attr.value; + if (!value.startsWith("\"")) { + value = "\"" + value; + } + if (!value.endsWith("\"")) { + value += "\""; + } + result.append(" = ").append(value); + } + } + result.append(htmlTag.tagEnd.replaceAll("\\s", "")); + } + } + else { + return; + } + textArea.replaceSelection(result.toString()); + }// }}} //{{{ split() method /** Modified: plugins/XML/trunk/xml/parser/TagParser.java =================================================================== --- plugins/XML/trunk/xml/parser/TagParser.java 2007-07-08 04:21:25 UTC (rev 9956) +++ plugins/XML/trunk/xml/parser/TagParser.java 2007-07-08 04:24:42 UTC (rev 9957) @@ -366,9 +366,15 @@ //{{{ Tag class public static class Tag extends StructureMatcher.Match { + /** Element name */ public String tag = null; public int type = -1; + /** + * + * @param start offset from start of buffer + * @param end offset from start of buffer + */ Tag(int start, int end) { this.start = start; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2006-07-15 04:45:21
|
Revision: 336 Author: ezust Date: 2006-07-14 21:45:15 -0700 (Fri, 14 Jul 2006) ViewCVS: http://svn.sourceforge.net/jedit/?rev=336&view=rev Log Message: ----------- And now menus work too... Modified Paths: -------------- plugins/XML/trunk/XML.props plugins/XML/trunk/actions.xml Modified: plugins/XML/trunk/XML.props =================================================================== --- plugins/XML/trunk/XML.props 2006-07-15 04:17:33 UTC (rev 335) +++ plugins/XML/trunk/XML.props 2006-07-15 04:45:15 UTC (rev 336) @@ -24,7 +24,7 @@ xml-entities-to-chars \ - \ xml-clear-cache \ - xml-reload-catalogs + xml-reload-catalogs \ - \ csssidekick-reload-completion-config \ csssidekick-insert-relative-path @@ -44,7 +44,7 @@ plugin.xml.XmlPlugin.option-group=xml.general sidekick.html sidekick.css xml.catalogs # {{ HTML option pane -options.sidekick.html.label=Html +options.sidekick.html.label=HTML options.sidekick.html.code=new sidekick.html.HtmlOptionPane() # }}} @@ -56,7 +56,7 @@ options.xml.catalogs.add=Add options.xml.catalogs.remove=Remove -options.xml.general.label=General +options.xml.general.label=XML options.xml.general.code=new xml.options.GeneralOptionPane(); options.xml.general.tageditor.popupOnCompletion=Pop up tag editor after completion options.xml.general.validate=Validate if DTD or schema available @@ -196,12 +196,12 @@ # }}} # {{{ CSS Options -options.sidekick.css.label=CSS SideKick +options.sidekick.css.label=CSS options.sidekick.css.code=new sidekick.css.CssSideKickOptionPane(); # actions labels -csssidekick-reload-completion-config.label=Reload completion config -csssidekick-insert-relative-path.label=Insert relative path +csssidekick-reload-completion-config.label=Reload css completion config +csssidekick-insert-relative-path.label=Insert relative css path # sidekick sidekick.parser.CssSidekick.label=CssSideKick Modified: plugins/XML/trunk/actions.xml =================================================================== --- plugins/XML/trunk/actions.xml 2006-07-15 04:17:33 UTC (rev 335) +++ plugins/XML/trunk/actions.xml 2006-07-15 04:45:15 UTC (rev 336) @@ -3,12 +3,12 @@ <ACTIONS> <ACTION NAME="csssidekick-reload-completion-config"> <CODE> - csssidekick.CssSideKickCompletion.initialize(); + sidekick.css.CssSideKickCompletion.initialize(); </CODE> </ACTION> <ACTION NAME="csssidekick-insert-relative-path"> <CODE> - csssidekick.Utils.insertRelativePathToBuffer(); + sidekick.css.Utils.insertRelativePathToBuffer(); </CODE> </ACTION> <ACTION NAME="htmlsidekick-showall" NO_REPEAT="TRUE"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2006-07-15 14:46:38
|
Revision: 337 Author: ezust Date: 2006-07-15 07:46:30 -0700 (Sat, 15 Jul 2006) ViewCVS: http://svn.sourceforge.net/jedit/?rev=337&view=rev Log Message: ----------- Completion file is now properly located by the css plugin. Modified Paths: -------------- plugins/XML/trunk/XML.props plugins/XML/trunk/build.xml plugins/XML/trunk/docs/users-guide.xml plugins/XML/trunk/sidekick/css/CssSideKickCompletion.java plugins/XML/trunk/xml/CatalogManager.java plugins/XML/trunk/xml/Resolver.java Modified: plugins/XML/trunk/XML.props =================================================================== --- plugins/XML/trunk/XML.props 2006-07-15 04:45:15 UTC (rev 336) +++ plugins/XML/trunk/XML.props 2006-07-15 14:46:30 UTC (rev 337) @@ -9,7 +9,7 @@ plugin.xml.XmlPlugin.depend.1=plugin xerces.XercesPlugin 2.8.0 plugin.xml.XmlPlugin.depend.2=plugin errorlist.ErrorListPlugin 1.4 plugin.xml.XmlPlugin.depend.3=plugin sidekick.SideKickPlugin 0.6.4 - +plugin.xml.XmlPlugin.depend.5=jdk 1.5 # Menu bar stuff plugin.xml.XmlPlugin.menu=sidekick-tree \ xml-match-tag \ @@ -23,13 +23,13 @@ xml-chars-to-entities \ xml-entities-to-chars \ - \ + csssidekick-insert-relative-path \ + - \ xml-clear-cache \ - xml-reload-catalogs \ - - \ csssidekick-reload-completion-config \ - csssidekick-insert-relative-path + xml-reload-catalogs -xml-match-tag.label=Go to Matching Tag +xml-match-tag.label=Go to Matching Tag or Bracket xml-insert.label=XML Insert xml-edit-tag.label=Edit Tag at Caret... xml-close-tag.label=Close Last Open Tag Modified: plugins/XML/trunk/build.xml =================================================================== --- plugins/XML/trunk/build.xml 2006-07-15 04:45:15 UTC (rev 336) +++ plugins/XML/trunk/build.xml 2006-07-15 14:46:30 UTC (rev 337) @@ -28,7 +28,7 @@ <property name="build.dir" value="build"/> <property name="install.dir" value="../"/> - + <selector id="packageFiles"> <or> Modified: plugins/XML/trunk/docs/users-guide.xml =================================================================== --- plugins/XML/trunk/docs/users-guide.xml 2006-07-15 04:45:15 UTC (rev 336) +++ plugins/XML/trunk/docs/users-guide.xml 2006-07-15 14:46:30 UTC (rev 337) @@ -51,7 +51,9 @@ <listitem><para>Display of the element tree in a dockable window</para></listitem> <listitem><para>Matching tag highlighting</para></listitem> <listitem><para>One click insertion of tags and entities</para></listitem> - <listitem><para>Graphical editing of tags and attributes</para></listitem> + <listitem><para>XML insert dockable shows what elements/entities are insertable </para></listitem> + <listitem><para>Graphical form to edit tags and attributes</para></listitem> + <listitem><para>Jump to matching tag or bracket </para></listitem> <listitem><para>A number of miscellaneous commands</para></listitem> </itemizedlist> @@ -547,25 +549,26 @@ <appendix id="changes"> <title>Change log</title> <itemizedlist> - <listitem><para><emphasis role="bold">Version 1.1</emphasis> Requires jEdit 4.3pre5, Java 1.4, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. + <listitem><para><emphasis role="bold">Version 1.1</emphasis> Requires jEdit 4.3pre5, Java 1.5, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. <itemizedlist> - <listitem><para> Html and XML are together again, and this time, CssSideKick makes three! </para></listitem> + <listitem><para> XML plugin now includes HtmlSideKick and CssSideKick. </para></listitem> </itemizedlist> </para> </listitem> <listitem><para><emphasis role="bold">Version 1.0</emphasis> Requires jEdit 4.3pre5, Java 1.4, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. <itemizedlist> - <listitem><para> Match tag also matches brackets. </para></listitem> - <listitem><para> Added separate caching option for CatalogManager, clarified some of the options. (ezust)</para> </listitem> + <listitem><para> Match tag also matches brackets. (ezust) </para></listitem> + <listitem><para> Added separate caching option for CatalogManager, clarified some of the options. (ezust) </para> </listitem> <listitem><para> Error messages from files in the catalog manager are now being reported from the correct local pathname. (ezust) </para></listitem> - <listitem><para> Added option to popup (or not) edit tag dialog after completion. </para></listitem> - <listitem> <para> Bug # 1511997 - Abstract elements defined in xsd (e.g. list.class, para.class from docbook xsd) are now handled properly in completions and element lists. (Alan Ezust) </para></listitem> + <listitem><para> Added option to popup (or not) edit tag dialog after completion. (ezust) </para></listitem> + <listitem> <para> Bug # 1511997 - Abstract elements defined in xsd (e.g. list.class, para.class from docbook xsd) are now handled properly in completions and element lists. (ezust) </para></listitem> <listitem> <para> Patch # 1511588 - Fixed xml insert (will69/ezust). </para> </listitem> <listitem> <para> XSD completion info fixes #1511612 (will69) </para> </listitem> <listitem> <para> Removed registration of SAXParserFactory. This should help avoid clashing with other plugins that use SAXParserFactory. </para></listitem> - <listitem> <para> Removed use of gnu.regexp in favor of java.util.regex. </para></listitem> + + <listitem> <para> Removed use of gnu.regexp in favor of java.util.regex. (ezust) </para></listitem> </itemizedlist> </para></listitem> Modified: plugins/XML/trunk/sidekick/css/CssSideKickCompletion.java =================================================================== --- plugins/XML/trunk/sidekick/css/CssSideKickCompletion.java 2006-07-15 04:45:15 UTC (rev 336) +++ plugins/XML/trunk/sidekick/css/CssSideKickCompletion.java 2006-07-15 14:46:30 UTC (rev 337) @@ -34,6 +34,7 @@ import org.xml.sax.InputSource; import org.xml.sax.SAXException; import sidekick.SideKickCompletion; +import xml.Resolver; //}}} @@ -146,9 +147,10 @@ private static HashMap cssProperties; private static boolean initialized; - private static String COMPLETION_CONFIG_FILE = jEdit.getSettingsDirectory() + /* private static String COMPLETION_CONFIG_FILE = jEdit.getSettingsDirectory() + File.separator - + jEdit.getProperty(CssSideKickPlugin.OPTION_PREFIX + "completion-config"); + + jEdit.getProperty(CssSideKickPlugin.OPTION_PREFIX + "completion-config"); */ + private static final String COMPLETION_CONFIG_FILE = "jeditresource:/XML.jar!/xml/completion/css-complete.xml"; private static Pattern HAS_PROP_COLON = Pattern.compile("^[^;}]*:"); private static boolean inited; @@ -163,7 +165,8 @@ try { Log.log(Log.DEBUG, CssSideKickCompletion.class, "Parsing configuration file: " + COMPLETION_CONFIG_FILE); DOMParser parser = new DOMParser(); - InputSource source = new InputSource(new FileInputStream(COMPLETION_CONFIG_FILE)); + parser.setEntityResolver(Resolver.instance()); + InputSource source = Resolver.instance().resolveEntity(null, COMPLETION_CONFIG_FILE ); parser.parse(source); Document doc = parser.getDocument(); initCssUnits(doc); Modified: plugins/XML/trunk/xml/CatalogManager.java =================================================================== --- plugins/XML/trunk/xml/CatalogManager.java 2006-07-15 04:45:15 UTC (rev 336) +++ plugins/XML/trunk/xml/CatalogManager.java 2006-07-15 14:46:30 UTC (rev 337) @@ -39,11 +39,18 @@ //}}} /** - * @deprecated - use Resolver instead + * */ public class CatalogManager { //{{{ resolve() method + + /** + * @param current + * @param publicId + * @param systemId + */ + public static InputSource resolve(String current, String publicId, String systemId) throws Exception Modified: plugins/XML/trunk/xml/Resolver.java =================================================================== --- plugins/XML/trunk/xml/Resolver.java 2006-07-15 04:45:15 UTC (rev 336) +++ plugins/XML/trunk/xml/Resolver.java 2006-07-15 14:46:30 UTC (rev 337) @@ -43,8 +43,11 @@ /** * Resolver grabs and caches DTDs and xml schemas. * It also serves as a resource resolver for jeditresource: links - * It is meant to replace CatalogManager + * It is meant to replace CatalogManager. * + * It is still under development and is not used yet. + * It requires JDK 1.5. + * * @author ezust * */ @@ -200,7 +203,13 @@ } //}}} - + // {{{ resolveEntity + /** + * @param name + * @param publicId + * @param current + * @param systemId + */ public InputSource resolveEntity(String name, String publicId, String current, String systemId) throws SAXException, java.io.IOException { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2006-07-16 02:33:39
|
Revision: 945 Author: ezust Date: 2006-07-15 19:33:30 -0700 (Sat, 15 Jul 2006) ViewCVS: http://svn.sourceforge.net/jedit/?rev=945&view=rev Log Message: ----------- Added the JavaScriptSideKick to the XML Plugin Modified Paths: -------------- plugins/XML/trunk/XML.props plugins/XML/trunk/build.xml plugins/XML/trunk/docs/users-guide.xml plugins/XML/trunk/services.xml Added Paths: ----------- plugins/XML/trunk/docs/javascript.html plugins/XML/trunk/icons/ plugins/XML/trunk/icons/comment.gif plugins/XML/trunk/icons/package.gif plugins/XML/trunk/icons/package_invalid.gif plugins/XML/trunk/icons/sub.gif plugins/XML/trunk/icons/sub_invalid.gif plugins/XML/trunk/icons/use.gif plugins/XML/trunk/icons/use_invalid.gif plugins/XML/trunk/sidekick/javascript/ plugins/XML/trunk/sidekick/javascript/JavaScriptParser.java plugins/XML/trunk/sidekick/javascript/JavaScriptSideKickPlugin.java Modified: plugins/XML/trunk/XML.props =================================================================== --- plugins/XML/trunk/XML.props 2006-07-11 15:36:00 UTC (rev 944) +++ plugins/XML/trunk/XML.props 2006-07-16 02:33:30 UTC (rev 945) @@ -1,8 +1,8 @@ # Plugin properties plugin.xml.XmlPlugin.activate=defer plugin.xml.XmlPlugin.name=XML -plugin.xml.XmlPlugin.author=Slava Pestov, Alan Ezust, Dale Anson, Jakub Roztocil -plugin.xml.XmlPlugin.version=2.0 +plugin.xml.XmlPlugin.author=Slava Pestov, Alan Ezust, Dale Anson, Jakub Roztocil, Martin Raspe +plugin.xml.XmlPlugin.version=1.1 plugin.xml.XmlPlugin.docs=index.html plugin.xml.XmlPlugin.depend.0=jedit 04.03.05.00 @@ -262,3 +262,20 @@ # }}} +# {{{ JavaScript Properties + +sidekick.parser.javascript.label=javascript +mode.javascript.sidekick.parser=javascript + + +#{{{ icons +sidekick.parser.javascript.package-icon=package.gif +sidekick.parser.javascript.use-icon=use.gif +sidekick.parser.javascript.sub-icon=sub.gif +sidekick.parser.javascript.package_invalid-icon=package_invalid.gif +sidekick.parser.javascript.use-invalid-icon=use_invalid.gif +sidekick.parser.javascript.sub-invalid-icon=sub_invalid.gif +sidekick.parser.javascript.comment-icon=comment.gif +# }}} + +# }}} Modified: plugins/XML/trunk/build.xml =================================================================== --- plugins/XML/trunk/build.xml 2006-07-11 15:36:00 UTC (rev 944) +++ plugins/XML/trunk/build.xml 2006-07-16 02:33:30 UTC (rev 945) @@ -29,10 +29,22 @@ <property name="build.dir" value="build"/> <property name="install.dir" value="../"/> + <target name="javacc" description="Run javacc on grammar for HTMLSideKick"> + <available file="${javacc}" property="javacc.present"/> + <fail unless="javacc.present" message="Javacc not found."/> + + <exec dir="${parser.src.dir}" executable="${javacc}"> + <arg value="${parser.src.dir}/HtmlParser.jj"/> + </exec> + </target> + + + <selector id="packageFiles"> <or> <filename name="docs/*.html" /> + <filename name="icons/*.gif" /> <filename name="xml/**/*.xml" /> <filename name="xml/**/catalog" /> <filename name="xml/**/*.xsd" /> Copied: plugins/XML/trunk/docs/javascript.html (from rev 944, plugins/JavaScriptSideKick/trunk/docs/index.html) =================================================================== --- plugins/XML/trunk/docs/javascript.html (rev 0) +++ plugins/XML/trunk/docs/javascript.html 2006-07-16 02:33:30 UTC (rev 945) @@ -0,0 +1,41 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/transitional.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> +<title>JavaScriptSideKick Plugin</title> + +<meta name="author" content="Martin Raspe"></meta> +<meta name="date" content="8.3.2006, 20:00 h"></meta> +<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"></meta> + +</head> + +<body> + +<div class="main"> +<h2>JavaScriptSideKick plugin</h2> +<p> +(c) 2005 by Martin Raspe +</p> + +<p>Provides a SideKick structure tree for JavaScript source. It is based and depends on the SideKick plugin. +</p> + +<p> +The plugin parses JavaScript source code linewise, using regular expressions. Because of the difficulties in JavaScript parsing, only a very rudimentary representation of the file is shown, providing basic source navigation. The plugin tries to catch idioms containing the "function" keyword. To be caught, the idiom must appear first on the line (leading whitespace is ignored). The plugin scans the code for the following cases: +</p> +<ul> +<li>a simple function declaration: <i>function</i> <b>foobar</b>() ...</li> +<li>a function assigned to a variable: <b>foo</b> = <i>function</i>() ...</li> +<li>a function assigned to a "var": var <b>foo</b> = <i>function</i>() ...</li> +<li>a function assigned to a method name: <b>foo.bar</b> = <i>function</i>() ...</li> +<li>a function denoting a Class (name beginning with an uppercase character): <b>Foo</b> = <i>function</i>() ...</li> +<li>a method assigned to the prototype of a Class: <b>Foo.prototype.bar</b> = <i>function</i>() ...</li> +</ul> + +</div> + +</body> +</html> + Modified: plugins/XML/trunk/docs/users-guide.xml =================================================================== --- plugins/XML/trunk/docs/users-guide.xml 2006-07-11 15:36:00 UTC (rev 944) +++ plugins/XML/trunk/docs/users-guide.xml 2006-07-16 02:33:30 UTC (rev 945) @@ -13,8 +13,8 @@ <author><firstname>Slava</firstname><surname>Pestov</surname></author> <author><firstname>Dale</firstname><surname>Anson</surname></author> <author><firstname>Alan</firstname><surname>Ezust</surname></author> + <author><firstname>Martin</firstname><surname>Raspe</surname></author> <author><firstname>Jakub</firstname><surname>Roztocil</surname></author> - </authorgroup> <legalnotice><title>Legal Notice</title> @@ -34,7 +34,7 @@ </para> <para> - This version of the XML plugin for jEdit combines the <ulink url="docs/htmlsidekick.html">HtmlSideKick</ulink> plugin by Dale Anson, and the CssSideKick plugin by Jakub Roztocil, providing three distinct Sidekick parsers and completion services. + This version of the XML plugin for jEdit combines the <ulink url="docs/htmlsidekick.html">HtmlSideKick</ulink> plugin by Dale Anson, the <ulink url="docs/javascript.html">JavaScriptSideKick</ulink> by Martin Raspe, and the CssSideKick by Jakub Roztocil, providing four distinct Sidekick parsers and three different kinds of completion services. </para> </legalnotice> @@ -46,19 +46,19 @@ This documentation assumes at least basic knowlege of HTML and XML. </para> - <para> The XML plugin makes jEdit one of the most advanced free XML editing tools available. - The combined features make it a complete editing solution for XML, HTML, JSP, and CSS files. Here are its features: </para> + <para> The XML plugin makes jEdit one of the most advanced free Website editing tools available. + It combines parsers for XML, HTML, JSP, Sidekick, and CSS files. Here are its features: </para> <itemizedlist> <listitem><para>On-the-fly validation of XML files</para></listitem> - <listitem><para>Tag and entity completion popups</para></listitem> - <listitem><para>Display of the element tree in a dockable window</para></listitem> + <listitem><para>Tag, attribute, and entity completion popups for XML, HTML and CSS</para></listitem> + <listitem><para>Display of the element tree in a dockable window, for XML, HTML, JavaScript, JSP, and CSS</para></listitem> <listitem><para>Matching tag highlighting</para></listitem> <listitem><para>One click insertion of tags and entities</para></listitem> - <listitem><para>XML insert dockable shows what elements/entities are insertable </para></listitem> <listitem><para>Graphical form to edit tags and attributes</para></listitem> - <listitem><para>Jump to matching tag or bracket </para></listitem> - <listitem><para>A number of miscellaneous commands</para></listitem> + <listitem><para>With a keystroke, jump to matching tag or bracket</para></listitem> + <listitem><para>And more. </para></listitem> + </itemizedlist> <para> @@ -555,7 +555,7 @@ <listitem><para><emphasis role="bold">Version 1.1</emphasis> Requires jEdit 4.3pre5, Java 1.5, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. <itemizedlist> - <listitem><para> XML plugin now includes HtmlSideKick and CssSideKick. </para></listitem> + <listitem><para> XML plugin now includes HtmlSideKick 0.5, JavaScriptSideKick 0.4, and CssSideKick (initial release). </para></listitem> </itemizedlist> </para> </listitem> Added: plugins/XML/trunk/icons/comment.gif =================================================================== (Binary files differ) Property changes on: plugins/XML/trunk/icons/comment.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: plugins/XML/trunk/icons/package.gif =================================================================== (Binary files differ) Property changes on: plugins/XML/trunk/icons/package.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: plugins/XML/trunk/icons/package_invalid.gif =================================================================== (Binary files differ) Property changes on: plugins/XML/trunk/icons/package_invalid.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: plugins/XML/trunk/icons/sub.gif =================================================================== (Binary files differ) Property changes on: plugins/XML/trunk/icons/sub.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: plugins/XML/trunk/icons/sub_invalid.gif =================================================================== (Binary files differ) Property changes on: plugins/XML/trunk/icons/sub_invalid.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: plugins/XML/trunk/icons/use.gif =================================================================== (Binary files differ) Property changes on: plugins/XML/trunk/icons/use.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: plugins/XML/trunk/icons/use_invalid.gif =================================================================== (Binary files differ) Property changes on: plugins/XML/trunk/icons/use_invalid.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: plugins/XML/trunk/services.xml =================================================================== --- plugins/XML/trunk/services.xml 2006-07-11 15:36:00 UTC (rev 944) +++ plugins/XML/trunk/services.xml 2006-07-16 02:33:30 UTC (rev 945) @@ -13,7 +13,9 @@ <SERVICE CLASS="sidekick.SideKickParser" NAME="xml"> new xml.parser.SAXParserImpl(); </SERVICE> - + <SERVICE CLASS="sidekick.SideKickParser" NAME="javascript"> + new sidekick.javascript.JavaScriptParser(); + </SERVICE> <!-- Newer version not working yet <SERVICE CLASS="sidekick.SideKickParser" NAME="xml"> new xml.parser.XercesParserImpl(); Copied: plugins/XML/trunk/sidekick/javascript/JavaScriptParser.java (from rev 944, plugins/JavaScriptSideKick/trunk/sidekick/javascript/JavaScriptParser.java) =================================================================== --- plugins/XML/trunk/sidekick/javascript/JavaScriptParser.java (rev 0) +++ plugins/XML/trunk/sidekick/javascript/JavaScriptParser.java 2006-07-16 02:33:30 UTC (rev 945) @@ -0,0 +1,186 @@ +/* + * JavaScriptParser.java + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 2005 by Martin Raspe + * (her...@bi...) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +package sidekick.javascript; + +import org.gjt.sp.jedit.*; + +import sidekick.enhanced.SourceParser; + + +import java.util.Stack; +import java.util.regex.Pattern; + +import errorlist.*; + +/** + * JavaScriptParser: parses perl source and builds a sidekick structure tree + * Parser is based on regular expressions and will therefore + * not able to correctly parse very irregular perl scripts + * + * @author Martin Raspe + * @created March 3, 2005 + * @modified $Date$ by $Author$ + * @version $Revision$ + */ +public class JavaScriptParser extends SourceParser { + +/* + Changes suggested by David Padgett to make the parser + more compatible with namespace/package emulation in JavaScript + + my.test.namespace.MyClass = function ... + my.test.namespace.MyClass.prototype.foobar = function ... + my.test.namespace.MyClass.myStaticMethod = function ... +*/ + Pattern pClassFunction = Pattern.compile("^((\\w+\\.)*[A-Z][\\w]*)\\s*=\\s*function"); + Pattern pMethodFunction = Pattern.compile("^([\\w+\\.]+\\w+)\\.([\\w]+)\\s*=\\s*function"); + Pattern pPrototypeFunction = Pattern.compile("^([\\w+\\.]+\\w+)\\.prototype\\.([\\w]+)\\s*=\\s*function"); + +// Pattern pClassFunction = Pattern.compile("^([A-Z][\\w]+)\\s*=\\s*function"); +// Pattern pMethodFunction = Pattern.compile("^([\\w]+)\\.([\\w]+)\\s*=\\s*function"); +// Pattern pPrototypeFunction = Pattern.compile("^([\\w]+)\\.prototype\\.([\\w]+)\\s*=\\s*function"); + + Pattern pAssignedFunction = Pattern.compile("^(\\w+)\\s*=\\s*function"); + Pattern pVarFunction = Pattern.compile("^var\\s+(\\w+)\\s*=\\s*function"); + Pattern pSimpleFunction = Pattern.compile("^function\\s+(\\w+)"); + +/** * Constructs a new Parser object + * + * @param name See sidekick.SidekickParser, sidekick.SourceParser + */ + public JavaScriptParser() { + super("javascript"); + LINE_COMMENT = "//"; + COMMENT = "Comments"; + MAIN = "(self)"; + USE = "import"; + } + +/** * Parses the given text and returns a tree model. + * + * @param buffer The buffer to parse. + * @param errorSource An error source to add errors to. + */ + + protected void parseBuffer(Buffer buffer, DefaultErrorSource errorSource) { + String line; + String name; + String[] names; + Stack funcstack = new Stack(); + Stack pkgstack = new Stack(); + pkgstack.push(MAIN); + boolean in_comment = false; + int buflen = buffer.getLength(); + int _tmp; + for (int lineNo = 0; lineNo < buffer.getLineCount(); lineNo++) { + _start = buffer.createPosition(buffer.getLineStartOffset(lineNo)); + _tmp = buffer.getLineEndOffset(lineNo); + if (_tmp > buflen) _tmp = buflen; + _end = buffer.createPosition(_tmp); + line = buffer.getLineText(lineNo).trim(); + // line comment or empty line + if (line.indexOf(LINE_COMMENT) == 0 || line.length() == 0) continue; + // block comment: end + if (in_comment && line.indexOf("*/") != -1 ) { + in_comment = false; + completeAsset(_end); + } + if (in_comment) continue; + // Class = function() + name = find(line, pClassFunction, 1); + if (name != null) { + if (! pkgstack.empty()) pkgstack.pop(); + pkgstack.push(name); + addAsset(SUB_KEY, name, "(constructor)", lineNo, _start); + continue; + } + // instance.prototype.method = function() + names = find2(line, pPrototypeFunction); + if (names != null) { + if (! pkgstack.empty()) pkgstack.pop(); + if (! funcstack.empty()) { + funcstack.pop(); + completeAsset(_start); + } + pkgstack.push(names[0]); + funcstack.push(names[1]); + addAsset(SUB_KEY, names[0], names[1], lineNo, _start); + continue; + } + // instance.method = function() + names = find2(line, pMethodFunction); + if (names != null) { + if (! pkgstack.empty()) pkgstack.pop(); + if (! funcstack.empty()) { + funcstack.pop(); + completeAsset(_start); + } + pkgstack.push(names[0]); + funcstack.push(names[1]); + addAsset(SUB_KEY, names[0], names[1], lineNo, _start); + continue; + } + // vname = function() + name = find(line, pAssignedFunction, 1); + if (name != null) { + if (! funcstack.empty()) { + funcstack.pop(); + completeAsset(_start); + } + funcstack.push(name); + addLineAsset(SUB_KEY, (String) pkgstack.peek(), name, lineNo, _start, _end); + continue; + } + // var vname = function() + name = find(line, pVarFunction, 1); + if (name != null) { + if (! funcstack.empty()) { + funcstack.pop(); + completeAsset(_start); + } + funcstack.push(name); + addLineAsset(SUB_KEY, (String) pkgstack.peek(), name, lineNo, _start, _end); + continue; + } + // function fname() + name = find(line, pSimpleFunction, 1); + if (name != null) { + if (! funcstack.empty()) { + funcstack.pop(); + completeAsset(_start); + } + funcstack.push(name); + addLineAsset(SUB_KEY, (String) pkgstack.peek(), name, lineNo, _start, _end); + continue; + } + // block comment: start + if (! in_comment && line.indexOf("/*") != -1 ) { + completeAsset(_end); + if (! funcstack.empty()) name = (String) funcstack.peek(); + if (name == null) name = (String) pkgstack.peek(); + if (name == null) name = "(comment)"; + in_comment = true; + addCommentAsset(name, lineNo, _start); + } + } + } +} Copied: plugins/XML/trunk/sidekick/javascript/JavaScriptSideKickPlugin.java (from rev 944, plugins/JavaScriptSideKick/trunk/sidekick/javascript/JavaScriptSideKickPlugin.java) =================================================================== --- plugins/XML/trunk/sidekick/javascript/JavaScriptSideKickPlugin.java (rev 0) +++ plugins/XML/trunk/sidekick/javascript/JavaScriptSideKickPlugin.java 2006-07-16 02:33:30 UTC (rev 945) @@ -0,0 +1,38 @@ +/* + * PerlSideKickPlugin.java + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 2005 by Martin Raspe + * (her...@bi...) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ +package sidekick.javascript; + +import org.gjt.sp.jedit.*; + +/** + * Description of the Class + * + * @author Martin Raspe + * @created Nov 20, 2004 + * @modified $Date$ by $Author$ + * @version $Revision$ + */ + public class JavaScriptSideKickPlugin { + public final static String NAME = "sidekick.javascript"; + public final static String OPTION_PREFIX = "options.sidekick.javascript."; + public final static String PROPERTY_PREFIX = "plugin.sidekick.javascript."; +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dal...@us...> - 2006-07-16 15:56:05
|
Revision: 947 Author: daleanson Date: 2006-07-16 08:55:42 -0700 (Sun, 16 Jul 2006) ViewCVS: http://svn.sourceforge.net/jedit/?rev=947&view=rev Log Message: ----------- updated build file to use javacc task rather than calling executable. Property 'javacchome' must be set in build.properties. Bumped version number to 2.0.1 -- for some reason, it had changed to 1.1. Modified Paths: -------------- plugins/XML/trunk/XML.props plugins/XML/trunk/build.xml Modified: plugins/XML/trunk/XML.props =================================================================== --- plugins/XML/trunk/XML.props 2006-07-16 02:37:20 UTC (rev 946) +++ plugins/XML/trunk/XML.props 2006-07-16 15:55:42 UTC (rev 947) @@ -2,7 +2,7 @@ plugin.xml.XmlPlugin.activate=defer plugin.xml.XmlPlugin.name=XML plugin.xml.XmlPlugin.author=Slava Pestov, Alan Ezust, Dale Anson, Jakub Roztocil, Martin Raspe -plugin.xml.XmlPlugin.version=1.1 +plugin.xml.XmlPlugin.version=2.0.1 plugin.xml.XmlPlugin.docs=index.html plugin.xml.XmlPlugin.depend.0=jedit 04.03.05.00 Modified: plugins/XML/trunk/build.xml =================================================================== --- plugins/XML/trunk/build.xml 2006-07-16 02:37:20 UTC (rev 946) +++ plugins/XML/trunk/build.xml 2006-07-16 15:55:42 UTC (rev 947) @@ -29,17 +29,6 @@ <property name="build.dir" value="build"/> <property name="install.dir" value="../"/> - <target name="javacc" description="Run javacc on grammar for HTMLSideKick"> - <available file="${javacc}" property="javacc.present"/> - <fail unless="javacc.present" message="Javacc not found."/> - - <exec dir="${parser.src.dir}" executable="${javacc}"> - <arg value="${parser.src.dir}/HtmlParser.jj"/> - </exec> - </target> - - - <selector id="packageFiles"> <or> @@ -77,9 +66,16 @@ <target name="jar" depends="ant-complete, build" description="builds jar + ant-completion info" /> - <target name="dist" depends="docs, jar" + <target name="dist" depends="docs, jar" description="The whole shebang" /> + <target name="javacc" description="Runs javacc compiler on HtmlParser.jj."> + <condition property="javacchome.set"> + <isset property="javacchome"/> + </condition> + <fail unless="javacchome.set" message="Property 'javacchome' needs to be set."/> + <javacc javacchome="${javacchome}" target="./sidekick/html/parser/html/HtmlParser.jj"/> + </target> <!-- Generate tags using 'ctags' program from ctags.sourceforge.net --> <target name="tags"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2006-07-17 04:16:45
|
Revision: 950 Author: ezust Date: 2006-07-16 21:16:42 -0700 (Sun, 16 Jul 2006) ViewCVS: http://svn.sourceforge.net/jedit/?rev=950&view=rev Log Message: ----------- cleaned up props and docs... css is now the default parser for css edit mode. Modified Paths: -------------- plugins/XML/trunk/XML.props plugins/XML/trunk/docs/users-guide.xml Modified: plugins/XML/trunk/XML.props =================================================================== --- plugins/XML/trunk/XML.props 2006-07-16 18:50:55 UTC (rev 949) +++ plugins/XML/trunk/XML.props 2006-07-17 04:16:42 UTC (rev 950) @@ -2,7 +2,7 @@ plugin.xml.XmlPlugin.activate=defer plugin.xml.XmlPlugin.name=XML plugin.xml.XmlPlugin.author=Slava Pestov, Alan Ezust, Dale Anson, Jakub Roztocil, Martin Raspe -plugin.xml.XmlPlugin.version=2.0.1 +plugin.xml.XmlPlugin.version=2.0.2 plugin.xml.XmlPlugin.docs=index.html plugin.xml.XmlPlugin.depend.0=jedit 04.03.05.00 @@ -204,10 +204,8 @@ csssidekick-insert-relative-path.label=Insert relative css path # sidekick -sidekick.parser.CssSidekick.label=CssSideKick -mode.css.sidekick.parser=CssSidekick +sidekick.parser.CssSidekick.label=css - # errors csssidekick.config-io-error.title=CssSideKick: completion config IO error csssidekick.config-io-error.message={0} Modified: plugins/XML/trunk/docs/users-guide.xml =================================================================== --- plugins/XML/trunk/docs/users-guide.xml 2006-07-16 18:50:55 UTC (rev 949) +++ plugins/XML/trunk/docs/users-guide.xml 2006-07-17 04:16:42 UTC (rev 950) @@ -91,7 +91,7 @@ <sect1 id="customizing-validation"><title>Customizing validation</title> <para> - Validation can be disabled on a global basis in the <guibutton>XML</guibutton>><guibutton>General</guibutton> pane of the <guimenu>Plugins</guimenu>><guimenuitem>Plugin Options</guimenuitem> dialog box. It can also be disabled on a per-buffer basis by inserting the following in the first of last 10 lines of the buffer: + Validation can be disabled on a global basis in the <guibutton>XML</guibutton>><guibutton>XML</guibutton> pane of the <guimenu>Plugins</guimenu>><guimenuitem>Plugin Options</guimenuitem> dialog box. It can also be disabled on a per-buffer basis by inserting the following in the first of last 10 lines of the buffer: </para> <programlisting>:xml.validate=false:</programlisting> </sect1> @@ -166,9 +166,7 @@ public ID in the plugin's built-in catalog, along with any catalog files specified in the <guibutton>XML</guibutton>><guibutton>Catalogs</guibutton> pane - of the <guimenu>Utilities</guimenu>><guimenuitem>Global Options</guimenuitem> - dialog box. - </para> + of the <guimenu>Plugins</guimenu>><guimenuitem>Plugin Options</guimenuitem> dialog box. </para> <para> Catalog files must either be in OASIS OPEN or XML catalog format. These two formats are documented below. @@ -256,13 +254,12 @@ </chapter> -<chapter id="insert"><title>The XML insert window</title> +<chapter id="insert"> +<title>The XML insert window</title> <para> <guimenu>Plugins</guimenu>><guisubmenu>XML</guisubmenu>><guimenuitem>XML - Insert</guimenuitem> displays the XML insert window. This window is floating by - default, but it can be docked - into the view in the <guibutton>Docking</guibutton> pane of the + Insert</guimenuitem> displays the XML insert window. This window is floating by default, but it can be docked into the view from the dock menu (a little arrow in the upper right corner), or from the <guibutton>Docking</guibutton> pane of the <guimenuitem>Global Options</guimenuitem> dialog box. </para> @@ -301,7 +298,8 @@ </chapter> -<chapter id="completion"><title>Tag and entity completion</title> +<chapter id="completion"> +<title>Tag and entity completion</title> <para> If the less-than symbol (<quote><</quote>) is typed and no other key @@ -342,8 +340,7 @@ <para> These features can be enabled, disabled and configured in the <guibutton>SideKick</guibutton> and - <guibutton>XML</guibutton>><guibutton>General</guibutton> panes - of the <guimenu>Utilities</guimenu>><guimenuitem>Global Options</guimenuitem> + <guibutton>XML</guibutton>><guibutton>XML</guibutton> pane of the <guimenu>Plugins</guimenu>><guimenuitem>Plugin Options</guimenuitem> dialog box. </para> @@ -362,7 +359,7 @@ </para></listitem> <listitem><para>Double-clicking a tag in the text area while holding down <keycap>Control</keycap>.</para></listitem> - <listitem><para> Hitting return in the completion dialog, if the option is set from the XML General Options. </para></listitem> + <listitem><para> Hitting return in the completion dialog, if the option is set from the XML Options. </para></listitem> <listitem><para> Clicking on an element from the XML Insert dockable. </para></listitem> </itemizedlist> @@ -409,8 +406,7 @@ If the caret is positioned on a tag, the corresponding opening or closing tag will be highlighted in the text area. You can disable this feature, or change the tag highlight color in the - <guibutton>XML</guibutton>><guibutton>General</guibutton> pane - of the <guimenu>Utilities</guimenu>><guimenuitem>Global Options</guimenuitem> + <guibutton>XML</guibutton>><guibutton>Xml</guibutton> pane of the <guimenu>Plugins</guimenu>><guimenuitem>Plugin Options</guimenuitem> dialog box. </para> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2006-07-21 03:34:46
|
Revision: 1024 Author: ezust Date: 2006-07-20 20:34:25 -0700 (Thu, 20 Jul 2006) ViewCVS: http://svn.sourceforge.net/jedit/?rev=1024&view=rev Log Message: ----------- Sf.net bug# 1525479 fixed. Modified Paths: -------------- plugins/XML/trunk/XML.props plugins/XML/trunk/docs/users-guide.xml plugins/XML/trunk/xml/CatalogManager.java plugins/XML/trunk/xml/XmlPlugin.java plugins/XML/trunk/xml/parser/SAXParserImpl.java Modified: plugins/XML/trunk/XML.props =================================================================== --- plugins/XML/trunk/XML.props 2006-07-20 08:26:50 UTC (rev 1023) +++ plugins/XML/trunk/XML.props 2006-07-21 03:34:25 UTC (rev 1024) @@ -2,7 +2,7 @@ plugin.xml.XmlPlugin.activate=defer plugin.xml.XmlPlugin.name=XML plugin.xml.XmlPlugin.author=Slava Pestov, Alan Ezust, Dale Anson, Jakub Roztocil, Martin Raspe -plugin.xml.XmlPlugin.version=2.0.2 +plugin.xml.XmlPlugin.version=2.0.3 plugin.xml.XmlPlugin.docs=index.html plugin.xml.XmlPlugin.depend.0=jedit 04.03.05.00 Modified: plugins/XML/trunk/docs/users-guide.xml =================================================================== --- plugins/XML/trunk/docs/users-guide.xml 2006-07-20 08:26:50 UTC (rev 1023) +++ plugins/XML/trunk/docs/users-guide.xml 2006-07-21 03:34:25 UTC (rev 1024) @@ -1,8 +1,4 @@ -<!-- jEdit buffer-local properties: --> -<!-- :indentSize=1:noTabs=true:folding=sidekick: --> -<!-- (C) 2001, 2003 Slava Pestov --> -<!-- (C) 2005, 2006 Alan Ezust --> -<!-- Look ma, no DTD! --> +<?xml version="1.0"?> <book xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation='http://www.docbook.org/xsd/4.4/docbook.xsd' > <title>XML plugin user's guide</title> @@ -548,6 +544,13 @@ </appendix> <appendix id="changes"> <title>Change log</title> <itemizedlist> + <listitem><para> + <emphasis role="bold">Version 2.0.3</emphasis> + Requires jEdit 4.3pre5, Java 1.5, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. + <itemizedlist> + <listitem><para> Fixed bug with error messages from files in samba shares. </para></listitem> + </itemizedlist> + </para></listitem> <listitem><para><emphasis role="bold">Version 2.0</emphasis> Requires jEdit 4.3pre5, Java 1.5, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. <itemizedlist> @@ -736,3 +739,4 @@ </appendix> </book> + Modified: plugins/XML/trunk/xml/CatalogManager.java =================================================================== --- plugins/XML/trunk/xml/CatalogManager.java 2006-07-20 08:26:50 UTC (rev 1023) +++ plugins/XML/trunk/xml/CatalogManager.java 2006-07-21 03:34:25 UTC (rev 1024) @@ -451,7 +451,7 @@ } //}}} //{{{ resolveSystem() method - static String resolveSystem(String id) throws Exception + public static String resolveSystem(String id) throws Exception { Entry e = new Entry(Entry.SYSTEM,id,null); String uri = (String)resourceCache.get(e); Modified: plugins/XML/trunk/xml/XmlPlugin.java =================================================================== --- plugins/XML/trunk/xml/XmlPlugin.java 2006-07-20 08:26:50 UTC (rev 1023) +++ plugins/XML/trunk/xml/XmlPlugin.java 2006-07-21 03:34:25 UTC (rev 1024) @@ -136,6 +136,12 @@ } //}}} //{{{ uriToFile() method + /** + * This method is hacky and should be rewritten to use + * java.net.URI. In particular, it does not work if + * the file:// URI points to a samba share. + * + */ public static String uriToFile(String uri) { if (uri.startsWith("http:/")) try { @@ -145,6 +151,8 @@ catch (Exception e) { Log.log(Log.ERROR, XmlPlugin.class, e.getMessage()); } + + if(uri.startsWith("file:/")) { int start; @@ -171,7 +179,7 @@ buf.append(ch); } uri = buf.toString(); - } + } return uri; } //}}} Modified: plugins/XML/trunk/xml/parser/SAXParserImpl.java =================================================================== --- plugins/XML/trunk/xml/parser/SAXParserImpl.java 2006-07-20 08:26:50 UTC (rev 1023) +++ plugins/XML/trunk/xml/parser/SAXParserImpl.java 2006-07-21 03:34:25 UTC (rev 1024) @@ -66,6 +66,7 @@ import sidekick.SideKickParsedData; import xml.CatalogManager; +import xml.Resolver; import xml.XmlParsedData; import xml.XmlPlugin; import xml.completion.CompletionInfo; @@ -75,7 +76,8 @@ import xml.completion.XsdElementDecl; //}}} /** - * @deprecated - use XercesParserImpl instead + * Eventually this will be replaced by XercesParserImpl. + * */ public class SAXParserImpl extends XmlParser { @@ -307,8 +309,11 @@ //{{{ addError() method private void addError(int type, String uri, int line, String message) { - errorSource.addError(type,XmlPlugin.uriToFile(uri),line, - 0,0,message); + try { + uri = CatalogManager.resolveSystem(uri); + } + catch (Exception e) {} + errorSource.addError(type, uri, line, 0, 0, message); } //}}} //{{{ getGrammarForNamespace() method This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dal...@us...> - 2006-08-07 19:23:50
|
Revision: 6674 Author: daleanson Date: 2006-08-07 12:23:25 -0700 (Mon, 07 Aug 2006) ViewCVS: http://svn.sourceforge.net/jedit/?rev=6674&view=rev Log Message: ----------- Updated CSS sidekick to use a javacc generated parser. Mostly I wanted to be able to parse in-line style tags from the html sidekick. This check-in requires revision 6673 of SideKick. ViewCVS Links: ------------- http://svn.sourceforge.net/jedit/?rev=6673&view=rev Modified Paths: -------------- plugins/XML/trunk/build.xml plugins/XML/trunk/services.xml plugins/XML/trunk/sidekick/css/CssSideKickParser.java plugins/XML/trunk/sidekick/html/HtmlActions.java plugins/XML/trunk/sidekick/html/HtmlParser.java plugins/XML/trunk/sidekick/html/parser/html/HtmlDocument.java plugins/XML/trunk/sidekick/html/parser/html/HtmlParser.java plugins/XML/trunk/sidekick/html/parser/html/HtmlParser.jj plugins/XML/trunk/sidekick/html/parser/html/HtmlParserConstants.java plugins/XML/trunk/sidekick/html/parser/html/HtmlParserTokenManager.java plugins/XML/trunk/sidekick/html/parser/html/HtmlTreeBuilder.java Added Paths: ----------- plugins/XML/trunk/sidekick/css/CSS2SideKickParser.java plugins/XML/trunk/sidekick/css/parser/ plugins/XML/trunk/sidekick/css/parser/CSS2Parser.java plugins/XML/trunk/sidekick/css/parser/CSS2Parser.jj plugins/XML/trunk/sidekick/css/parser/CSS2ParserConstants.java plugins/XML/trunk/sidekick/css/parser/CSS2ParserTokenManager.java plugins/XML/trunk/sidekick/css/parser/CSSNode.java plugins/XML/trunk/sidekick/css/parser/CharStream.java plugins/XML/trunk/sidekick/css/parser/ParseException.java plugins/XML/trunk/sidekick/css/parser/SimpleCharStream.java plugins/XML/trunk/sidekick/css/parser/Token.java plugins/XML/trunk/sidekick/css/parser/TokenMgrError.java plugins/XML/trunk/sidekick/css/test.css plugins/XML/trunk/sidekick/css/test.html Removed Paths: ------------- plugins/XML/trunk/sidekick/html/HtmlAsset.java plugins/XML/trunk/sidekick/html/parser/html/Location.java Modified: plugins/XML/trunk/build.xml =================================================================== --- plugins/XML/trunk/build.xml 2006-08-07 18:47:37 UTC (rev 6673) +++ plugins/XML/trunk/build.xml 2006-08-07 19:23:25 UTC (rev 6674) @@ -70,12 +70,13 @@ <target name="dist" depends="docs, jar" description="The whole shebang" /> - <target name="javacc" description="Runs javacc compiler on HtmlParser.jj."> + <target name="javacc" description="Runs javacc compiler on *.jj files."> <condition property="javacchome.set"> <isset property="javacchome"/> </condition> <fail unless="javacchome.set" message="Property 'javacchome' needs to be set."/> <javacc javacchome="${javacchome}" target="./sidekick/html/parser/html/HtmlParser.jj"/> + <javacc javacchome="${javacchome}" target="./sidekick/css/parser/CSS2Parser.jj"/> </target> <!-- Generate tags using 'ctags' program from ctags.sourceforge.net --> Modified: plugins/XML/trunk/services.xml =================================================================== --- plugins/XML/trunk/services.xml 2006-08-07 18:47:37 UTC (rev 6673) +++ plugins/XML/trunk/services.xml 2006-08-07 19:23:25 UTC (rev 6674) @@ -8,7 +8,7 @@ </SERVICE> <SERVICE CLASS="sidekick.SideKickParser" NAME="css" > - new sidekick.css.CssSideKickParser(); + new sidekick.css.CSS2SideKickParser(); </SERVICE> <SERVICE CLASS="sidekick.SideKickParser" NAME="xml"> new xml.parser.SAXParserImpl(); Added: plugins/XML/trunk/sidekick/css/CSS2SideKickParser.java =================================================================== --- plugins/XML/trunk/sidekick/css/CSS2SideKickParser.java (rev 0) +++ plugins/XML/trunk/sidekick/css/CSS2SideKickParser.java 2006-08-07 19:23:25 UTC (rev 6674) @@ -0,0 +1,191 @@ +/* +Copyright (c) 2006, Dale Anson +All rights reserved. +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: +* Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. +* Neither the name of the <ORGANIZATION> nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package sidekick.css; + +import java.io.StringReader; +import java.util.*; + +import javax.swing.text.Position; +import javax.swing.tree.DefaultMutableTreeNode; +import errorlist.DefaultErrorSource; + +import org.gjt.sp.jedit.Buffer; +import org.gjt.sp.jedit.EBComponent; +import org.gjt.sp.jedit.EBMessage; +import org.gjt.sp.jedit.EditBus; +import org.gjt.sp.jedit.EditPane; +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.msg.PropertiesChanged; + +import sidekick.*; +import sidekick.enhanced.*; +import sidekick.util.*; + +import sidekick.css.parser.CSSNode; +import sidekick.css.parser.CSS2Parser; + +/** + * @author Dale Anson + * @version $Revision$ + */ +public class CSS2SideKickParser extends SideKickParser { + + private View currentView = null; + + public static boolean showAll = true; + private int lineOffset = 0; + + public CSS2SideKickParser() { + super("css"); + } + + /** + * If called by another parser to parse part of a file (for example, to parse + * a style tag in an html document), this can be set to the offset of the + * style tag so that the node locations can be set correctly. + */ + public void setLineOffset( int offset ) { + if (offset > 0) { + lineOffset = offset; + } + } + + public void parse() { + if (currentView != null) { + parse(currentView.getBuffer(), null); + } + } + + /** + * Parse the contents of the given buffer. + * + * @param buffer the buffer to parse + * @param errorSource + * @return Description of the Returned Value + */ + public SideKickParsedData parse(Buffer buffer, DefaultErrorSource errorSource) { + return parse(buffer, buffer.getText(0, buffer.getLength()), errorSource); + } + + public SideKickParsedData parse(Buffer buffer, String text, DefaultErrorSource errorSource) { + + String filename = buffer.getPath(); + SideKickParsedData parsedData = new SideKickParsedData(buffer.getName()); + DefaultMutableTreeNode root = parsedData.root; + + StringReader reader = new StringReader(text); + try { + // parse + CSS2Parser parser = new CSS2Parser(reader); + parser.setLineOffset(lineOffset); + CSSNode ss = parser.styleSheet(); + + // make a tree + addTreeNodes(root, ss); + + /* + * need to convert the CSSNodes that + * are currently the user objects in the tree nodes to + * SideKick Assets + */ + convert(buffer, root); + + } + catch (Exception e) { + e.printStackTrace(); + } + finally { + reader.close(); + } + return parsedData; + } + + private void addTreeNodes(DefaultMutableTreeNode root, CSSNode ss) { + if (ss.hasChildren()) { + for (Iterator it = ss.getChildren().iterator(); it.hasNext(); ) { + CSSNode cssChild = (CSSNode)it.next(); + if (cssChild != null) { + DefaultMutableTreeNode dmtNode = new DefaultMutableTreeNode(cssChild); + root.add(dmtNode); + addTreeNodeChildren(dmtNode, cssChild); + } + } + } + } + + private void addTreeNodeChildren(DefaultMutableTreeNode dmtNode, CSSNode cssNode) { + if (cssNode.hasChildren()) { + for (Iterator it = cssNode.getChildren().iterator(); it.hasNext(); ) { + CSSNode cssChild = (CSSNode)it.next(); + if (cssChild != null) { + DefaultMutableTreeNode dmtChild = new DefaultMutableTreeNode(cssChild); + dmtNode.add(dmtChild); + addTreeNodeChildren(dmtChild, cssChild); + } + } + } + } + + /** + * Description of the Method + * + * @param buffer + * @param node + */ + private void convert(Buffer buffer, DefaultMutableTreeNode node) { + // convert the children of the node + Enumeration children = node.children(); + while (children.hasMoreElements()) { + convert(buffer, (DefaultMutableTreeNode) children.nextElement()); + } + + // convert the node itself + if (!(node.getUserObject() instanceof IAsset)) { + SideKickElement userObject = (SideKickElement)node.getUserObject(); + Position start_position = ElementUtil.createStartPosition(buffer, userObject); + Position end_position = ElementUtil.createEndPosition(buffer, userObject); + SideKickAsset asset = new SideKickAsset(userObject); + asset.setStart(start_position); + asset.setEnd(end_position); + node.setUserObject(asset); + } + } + + public boolean supportsCompletion() { + return true; + } + + public boolean canCompleteAnywhere() { + return true; + } + + public SideKickCompletion complete(EditPane editPane, int caret) { + CompletionRequest cr = new CompletionRequest(editPane, caret); + return cr.getSideKickCompletion(); + } + +} + Modified: plugins/XML/trunk/sidekick/css/CssSideKickParser.java =================================================================== --- plugins/XML/trunk/sidekick/css/CssSideKickParser.java 2006-08-07 18:47:37 UTC (rev 6673) +++ plugins/XML/trunk/sidekick/css/CssSideKickParser.java 2006-08-07 19:23:25 UTC (rev 6674) @@ -34,7 +34,9 @@ import sidekick.enhanced.*; //}}} - +/** + * @deprecated use CSS2SideKickParser instead. + */ public class CssSideKickParser extends SideKickParser { Pattern selRe = Pattern.compile("((^|[}{])\\s*)+(.+?)(\\s*\\{)", Pattern.DOTALL); Added: plugins/XML/trunk/sidekick/css/parser/CSS2Parser.java =================================================================== --- plugins/XML/trunk/sidekick/css/parser/CSS2Parser.java (rev 0) +++ plugins/XML/trunk/sidekick/css/parser/CSS2Parser.java 2006-08-07 19:23:25 UTC (rev 6674) @@ -0,0 +1,2851 @@ +/* Generated By:JavaCC: Do not edit this line. CSS2Parser.java */ +package sidekick.css.parser; + +import java.io.*; +import java.net.*; +import java.text.MessageFormat; +import java.util.*; +import sidekick.util.*; + +public class CSS2Parser implements CSS2ParserConstants { + + private boolean _quiet = true; + private int lineOffset = 0; + + /* + public CSS2Parser() { + this((CharStream) null); + } + */ + + public Location getStartLocation(Token t) { + if (t == null) + return new Location(0 + lineOffset, 0); + return new Location(t.beginLine + lineOffset, t.beginColumn); + } + + public Location getEndLocation(Token t) { + if (t == null) + return new Location(0 + lineOffset, 0); + return new Location(t.endLine + lineOffset, t.endColumn); + } + + public CSSNode createNode(Token t) { + if (t == null) { + return new CSSNode(); + } + CSSNode node = new CSSNode(t.image); + node.setStartLocation(getStartLocation(t)); + node.setEndLocation(getEndLocation(t)); + return node; + } + + public void setLineOffset(int offset) { + if (offset > 0) { + lineOffset = offset; + } + } + +// main entry point +// +// stylesheet +// : [ CHARSET_SYM S* STRING S* ';' ]? +// [S|CDO|CDC]* [ import [S|CDO|CDC]* ]* +// [ [ ruleset | media | page | font_face ] [S|CDO|CDC]* ]* +// ; +// + final public CSSNode styleSheet() throws ParseException { + CSSNode node = new CSSNode("style"); + List<CSSNode> list = null; + list = styleSheetRuleList(); + jj_consume_token(0); + if (list != null) + node.addChildren(list); + {if (true) return node;} + throw new Error("Missing return statement in function"); + } + + final public List<CSSNode> styleSheetRuleList() throws ParseException { + List<CSSNode> list = new ArrayList<CSSNode>(); + CSSNode n = null; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case CHARSET_SYM: + n = charsetRule(); + if (n != null) list.add(n); + break; + default: + jj_la1[0] = jj_gen; + ; + } + label_1: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + case CDO: + case CDC: + ; + break; + default: + jj_la1[1] = jj_gen; + break label_1; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + jj_consume_token(S); + break; + case CDO: + jj_consume_token(CDO); + break; + case CDC: + jj_consume_token(CDC); + break; + default: + jj_la1[2] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + label_2: + while (true) { + if (jj_2_1(2)) { + ; + } else { + break label_2; + } + n = importRule(); + if (n != null) list.add(n); + label_3: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + case CDO: + case CDC: + ; + break; + default: + jj_la1[3] = jj_gen; + break label_3; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + jj_consume_token(S); + break; + case CDO: + jj_consume_token(CDO); + break; + case CDC: + jj_consume_token(CDC); + break; + default: + jj_la1[4] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + } + label_4: + while (true) { + if (jj_2_2(2)) { + ; + } else { + break label_4; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DOT: + case COLON: + case ASTERISK: + case LSQUARE: + case HASH: + case IDENT: + n = styleRule(); + break; + case MEDIA_SYM: + n = mediaRule(); + break; + case PAGE_SYM: + n = pageRule(); + break; + case FONT_FACE_SYM: + n = fontFaceRule(); + break; + case ATKEYWORD: + n = unknownRule(); + break; + default: + jj_la1[5] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + if (n != null) list.add(n); + label_5: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + case CDO: + case CDC: + ; + break; + default: + jj_la1[6] = jj_gen; + break label_5; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + jj_consume_token(S); + break; + case CDO: + jj_consume_token(CDO); + break; + case CDC: + jj_consume_token(CDC); + break; + default: + jj_la1[7] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + } + label_6: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DOT: + case COLON: + case ASTERISK: + case LSQUARE: + case HASH: + case IMPORT_SYM: + case PAGE_SYM: + case MEDIA_SYM: + case FONT_FACE_SYM: + case ATKEYWORD: + case IDENT: + ; + break; + default: + jj_la1[8] = jj_gen; + break label_6; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DOT: + case COLON: + case ASTERISK: + case LSQUARE: + case HASH: + case IDENT: + n = styleRule(); + break; + case MEDIA_SYM: + n = mediaRule(); + break; + case PAGE_SYM: + n = pageRule(); + break; + case FONT_FACE_SYM: + n = fontFaceRule(); + break; + case IMPORT_SYM: + n = importRuleIgnored(); + break; + case ATKEYWORD: + n = unknownRule(); + break; + default: + jj_la1[9] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + if (n != null) list.add(n); + label_7: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + case CDO: + case CDC: + ; + break; + default: + jj_la1[10] = jj_gen; + break label_7; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + jj_consume_token(S); + break; + case CDO: + jj_consume_token(CDO); + break; + case CDC: + jj_consume_token(CDC); + break; + default: + jj_la1[11] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + } + {if (true) return list;} + throw new Error("Missing return statement in function"); + } + +// +// This is used by ASTStyleSheet.insertRule to parse a single rule +// + final public CSSNode styleSheetRuleSingle() throws ParseException { + CSSNode n = null; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case CHARSET_SYM: + n = charsetRule(); + break; + case IMPORT_SYM: + n = importRule(); + break; + case DOT: + case COLON: + case ASTERISK: + case LSQUARE: + case HASH: + case IDENT: + n = styleRule(); + break; + case MEDIA_SYM: + n = mediaRule(); + break; + case PAGE_SYM: + n = pageRule(); + break; + case FONT_FACE_SYM: + n = fontFaceRule(); + break; + case ATKEYWORD: + n = unknownRule(); + break; + default: + jj_la1[12] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + {if (true) return n;} + throw new Error("Missing return statement in function"); + } + + final public CSSNode charsetRule() throws ParseException { + Token start = null; + Token middle = null; + Token end = null; + start = jj_consume_token(CHARSET_SYM); + label_8: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[13] = jj_gen; + break label_8; + } + jj_consume_token(S); + } + middle = jj_consume_token(STRING); + label_9: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[14] = jj_gen; + break label_9; + } + jj_consume_token(S); + } + end = jj_consume_token(SEMICOLON); + String name = start.image + " " + middle.image; + CSSNode node = new CSSNode(name); + node.setStartLocation(getStartLocation(start)); + node.setEndLocation(getEndLocation(end)); + {if (true) return node;} + throw new Error("Missing return statement in function"); + } + + final public CSSNode unknownRule() throws ParseException { + Token t = null; + t = jj_consume_token(ATKEYWORD); + CSSNode node = new CSSNode(t.image); + node.setStartLocation(getStartLocation(t)); + node.setEndLocation(getEndLocation(t)); + {if (true) return node;} + throw new Error("Missing return statement in function"); + } + +// +// import +// : IMPORT_SYM S* +// [STRING|URI] S* [ medium [ ',' S* medium]* ]? ';' S* +// ; +// + final public CSSNode importRule() throws ParseException { + Token start = null; + CSSNode middle = null; + Token uri = null; + Token end = null; + start = jj_consume_token(IMPORT_SYM); + label_10: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[15] = jj_gen; + break label_10; + } + jj_consume_token(S); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case STRING: + uri = jj_consume_token(STRING); + break; + case URI: + uri = jj_consume_token(URI); + break; + default: + jj_la1[16] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + label_11: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[17] = jj_gen; + break label_11; + } + jj_consume_token(S); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case IDENT: + middle = mediaList(); + break; + default: + jj_la1[18] = jj_gen; + ; + } + end = jj_consume_token(SEMICOLON); + String name = start.image + (uri != null ? " " + uri.image : "") + (middle != null ? " " + middle.getName() : ""); + CSSNode node = new CSSNode(name); + node.setStartLocation(getStartLocation(start)); + node.setEndLocation(getEndLocation(end)); + {if (true) return node;} + throw new Error("Missing return statement in function"); + } + + final public CSSNode importRuleIgnored() throws ParseException { + Token start = null; + CSSNode middle = null; + Token uri = null; + Token end = null; + start = jj_consume_token(IMPORT_SYM); + label_12: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[19] = jj_gen; + break label_12; + } + jj_consume_token(S); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case STRING: + uri = jj_consume_token(STRING); + break; + case URI: + uri = jj_consume_token(URI); + break; + default: + jj_la1[20] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + label_13: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[21] = jj_gen; + break label_13; + } + jj_consume_token(S); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case IDENT: + middle = mediaList(); + break; + default: + jj_la1[22] = jj_gen; + ; + } + end = jj_consume_token(SEMICOLON); + String name = start.image + (uri != null ? " " + uri.image : "") + (middle != null ? " " + middle.getName() : ""); + CSSNode node = new CSSNode(name); + node.setStartLocation(getStartLocation(start)); + node.setEndLocation(getEndLocation(end)); + {if (true) return node;} + throw new Error("Missing return statement in function"); + } + +// +// media +// : MEDIA_SYM S* medium [ ',' S* medium ]* '{' S* ruleset* '}' S* +// ; +// + final public CSSNode mediaRule() throws ParseException { + Token start = null; + CSSNode ml = null; + List<CSSNode> mrl = null; + Token end = null; + start = jj_consume_token(MEDIA_SYM); + label_14: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[23] = jj_gen; + break label_14; + } + jj_consume_token(S); + } + ml = mediaList(); + jj_consume_token(LBRACE); + label_15: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[24] = jj_gen; + break label_15; + } + jj_consume_token(S); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DOT: + case COLON: + case ASTERISK: + case LSQUARE: + case HASH: + case PAGE_SYM: + case ATKEYWORD: + case IDENT: + mrl = mediaRuleList(); + break; + default: + jj_la1[25] = jj_gen; + ; + } + end = jj_consume_token(RBRACE); + String name = start.image + (ml != null ? " " + ml.getName() : ""); + CSSNode node = new CSSNode(name); + if (mrl != null) { + node.addChildren(mrl); + } + node.setStartLocation(getStartLocation(start)); + node.setEndLocation(getEndLocation(end)); + {if (true) return node;} + throw new Error("Missing return statement in function"); + } + +// tv, projector, screen, etc + final public CSSNode mediaList() throws ParseException { + StringBuffer sb = new StringBuffer(); + CSSNode a = null; + CSSNode b = null; + a = medium(); + sb.append(a.getName()); + label_16: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case COMMA: + ; + break; + default: + jj_la1[26] = jj_gen; + break label_16; + } + jj_consume_token(COMMA); + sb.append(","); + label_17: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[27] = jj_gen; + break label_17; + } + jj_consume_token(S); + } + b = medium(); + sb.append(b.getName()); + } + CSSNode node = new CSSNode(sb.toString()); + node.setStartLocation(a.getStartLocation()); + node.setEndLocation(b == null ? a.getEndLocation() : b.getEndLocation()); + {if (true) return node;} + throw new Error("Missing return statement in function"); + } + + final public List<CSSNode> mediaRuleList() throws ParseException { + List<CSSNode> list = new ArrayList<CSSNode>(); + CSSNode n = null; + label_18: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DOT: + case COLON: + case ASTERISK: + case LSQUARE: + case HASH: + case IDENT: + n = styleRule(); + break; + case PAGE_SYM: + n = pageRule(); + break; + case ATKEYWORD: + n = unknownRule(); + break; + default: + jj_la1[28] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + if (n != null) list.add(n); + label_19: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[29] = jj_gen; + break label_19; + } + jj_consume_token(S); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DOT: + case COLON: + case ASTERISK: + case LSQUARE: + case HASH: + case PAGE_SYM: + case ATKEYWORD: + case IDENT: + ; + break; + default: + jj_la1[30] = jj_gen; + break label_18; + } + } + {if (true) return list;} + throw new Error("Missing return statement in function"); + } + + final public CSSNode mediaRuleSingle() throws ParseException { + CSSNode n = null; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DOT: + case COLON: + case ASTERISK: + case LSQUARE: + case HASH: + case IDENT: + n = styleRule(); + break; + case PAGE_SYM: + n = pageRule(); + break; + case ATKEYWORD: + n = unknownRule(); + break; + default: + jj_la1[31] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + {if (true) return n;} + throw new Error("Missing return statement in function"); + } + +// +// medium +// : IDENT S* +// ; +// + final public CSSNode medium() throws ParseException { + Token t = null; + t = jj_consume_token(IDENT); + label_20: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[32] = jj_gen; + break label_20; + } + jj_consume_token(S); + } + CSSNode node = new CSSNode(t.image); + node.setStartLocation(getStartLocation(t)); + node.setEndLocation(getEndLocation(t)); + {if (true) return node;} + throw new Error("Missing return statement in function"); + } + +// +// page +// : PAGE_SYM S* IDENT? pseudo_page? S* +// '{' S* declaration [ ';' S* declaration ]* '}' S* +// ; +// + final public CSSNode pageRule() throws ParseException { + Token start = null; + Token ident = null; + CSSNode pp = null; + CSSNode decl = null; + List<CSSNode> list = new ArrayList<CSSNode>(); + Token end = null; + start = jj_consume_token(PAGE_SYM); + label_21: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[33] = jj_gen; + break label_21; + } + jj_consume_token(S); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case COLON: + case IDENT: + if (jj_2_3(2)) { + ident = jj_consume_token(IDENT); + pp = pseudoPage(); + label_22: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[34] = jj_gen; + break label_22; + } + jj_consume_token(S); + } + } else { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case IDENT: + jj_consume_token(IDENT); + label_23: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[35] = jj_gen; + break label_23; + } + jj_consume_token(S); + } + break; + case COLON: + pp = pseudoPage(); + label_24: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[36] = jj_gen; + break label_24; + } + jj_consume_token(S); + } + break; + default: + jj_la1[37] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + break; + default: + jj_la1[38] = jj_gen; + ; + } + jj_consume_token(LBRACE); + label_25: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[39] = jj_gen; + break label_25; + } + jj_consume_token(S); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case IDENT: + decl = declaration(); + if (decl != null) list.add(decl); + break; + default: + jj_la1[40] = jj_gen; + ; + } + label_26: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case SEMICOLON: + ; + break; + default: + jj_la1[41] = jj_gen; + break label_26; + } + jj_consume_token(SEMICOLON); + label_27: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[42] = jj_gen; + break label_27; + } + jj_consume_token(S); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case IDENT: + decl = declaration(); + if (decl != null) list.add(decl); + break; + default: + jj_la1[43] = jj_gen; + ; + } + } + end = jj_consume_token(RBRACE); + StringBuffer name = new StringBuffer(); + name.append(start.image); + if (ident != null) + name.append(" ").append(ident.image); + if (pp != null) + name.append(" ").append(pp.getName()); + CSSNode node = new CSSNode(name.toString()); + node.setStartLocation(getStartLocation(start)); + node.setEndLocation(getEndLocation(end)); + node.addChildren(list); + {if (true) return node;} + throw new Error("Missing return statement in function"); + } + +// +// pseudoPage +// : ':' IDENT +// ; +// + final public CSSNode pseudoPage() throws ParseException { + Token t = null; + jj_consume_token(COLON); + t = jj_consume_token(IDENT); + CSSNode node = createNode(t); + node.setName(":" + node.getName()); + {if (true) return node;} + throw new Error("Missing return statement in function"); + } + +// +// font_face +// : FONT_FACE_SYM S* +// '{' S* declaration [ ';' S* declaration ]* '}' S* +// ; +// + final public CSSNode fontFaceRule() throws ParseException { + Token start = null; + CSSNode decl = null; + List<CSSNode> list = new ArrayList<CSSNode>(); + Token end = null; + start = jj_consume_token(FONT_FACE_SYM); + label_28: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[44] = jj_gen; + break label_28; + } + jj_consume_token(S); + } + jj_consume_token(LBRACE); + label_29: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[45] = jj_gen; + break label_29; + } + jj_consume_token(S); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case IDENT: + decl = declaration(); + if (decl != null) list.add(decl); + break; + default: + jj_la1[46] = jj_gen; + ; + } + label_30: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case SEMICOLON: + ; + break; + default: + jj_la1[47] = jj_gen; + break label_30; + } + jj_consume_token(SEMICOLON); + label_31: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[48] = jj_gen; + break label_31; + } + jj_consume_token(S); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case IDENT: + decl = declaration(); + if (decl != null) list.add(decl); + break; + default: + jj_la1[49] = jj_gen; + ; + } + } + end = jj_consume_token(RBRACE); + CSSNode node = new CSSNode(start.image); + node.setStartLocation(getStartLocation(start)); + node.setEndLocation(getEndLocation(end)); + node.addChildren(list); + {if (true) return node;} + throw new Error("Missing return statement in function"); + } + +// +// operator +// : '/' S* | ',' S* | +// ; +// + final public CSSNode operator() throws ParseException { + Token t = null; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case SLASH: + t = jj_consume_token(SLASH); + label_32: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[50] = jj_gen; + break label_32; + } + jj_consume_token(S); + } + break; + case COMMA: + t = jj_consume_token(COMMA); + label_33: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[51] = jj_gen; + break label_33; + } + jj_consume_token(S); + } + break; + default: + jj_la1[52] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + {if (true) return createNode(t);} + throw new Error("Missing return statement in function"); + } + +// +// combinator +// : '+' S* | '>' S* | +// ; +// + final public CSSNode combinator() throws ParseException { + Token t = null; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case PLUS: + t = jj_consume_token(PLUS); + label_34: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[53] = jj_gen; + break label_34; + } + jj_consume_token(S); + } + break; + case GT: + t = jj_consume_token(GT); + label_35: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[54] = jj_gen; + break label_35; + } + jj_consume_token(S); + } + break; + case S: + jj_consume_token(S); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case PLUS: + case GT: + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case PLUS: + t = jj_consume_token(PLUS); + break; + case GT: + t = jj_consume_token(GT); + break; + default: + jj_la1[55] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + label_36: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[56] = jj_gen; + break label_36; + } + jj_consume_token(S); + } + break; + default: + jj_la1[57] = jj_gen; + ; + } + break; + default: + jj_la1[58] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + {if (true) return createNode(t);} + throw new Error("Missing return statement in function"); + } + +// +// unary_operator +// : '-' | '+' +// ; +// + final public CSSNode unaryOperator() throws ParseException { + Token t = null; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case MINUS: + t = jj_consume_token(MINUS); + break; + case PLUS: + t = jj_consume_token(PLUS); + break; + default: + jj_la1[59] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + {if (true) return createNode(t);} + throw new Error("Missing return statement in function"); + } + +// +// property +// : IDENT S* +// ; +// + final public CSSNode property() throws ParseException { + Token t = null; + t = jj_consume_token(IDENT); + label_37: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[60] = jj_gen; + break label_37; + } + jj_consume_token(S); + } + {if (true) return createNode(t);} + throw new Error("Missing return statement in function"); + } + +// +// ruleset +// : selector [ ',' S* selector ]* +// '{' S* declaration [ ';' S* declaration ]* '}' S* +// ; +// + final public CSSNode styleRule() throws ParseException { + CSSNode n = null; + List<CSSNode> list = null; + n = selectorList(); + jj_consume_token(LBRACE); + label_38: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[61] = jj_gen; + break label_38; + } + jj_consume_token(S); + } + list = styleDeclaration(); + jj_consume_token(RBRACE); + if (n == null) + {if (true) return null;} + + if (list != null) { + n.addChildren(list); + } + {if (true) return n;} + throw new Error("Missing return statement in function"); + } + + final public CSSNode selectorList() throws ParseException { + List<CSSNode> list = new ArrayList<CSSNode>(); + CSSNode n = null; + n = selector(); + if (n != null) list.add(n); + label_39: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case COMMA: + ; + break; + default: + jj_la1[62] = jj_gen; + break label_39; + } + jj_consume_token(COMMA); + label_40: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[63] = jj_gen; + break label_40; + } + jj_consume_token(S); + } + n = selector(); + if (n != null) list.add(n); + } + if (list.isEmpty()) + {if (true) return null;} + CSSNode start = list.get(0); + CSSNode end = list.get(list.size() - 1); + StringBuffer sb = new StringBuffer(); + for (Iterator it = list.iterator(); it.hasNext(); ) { + CSSNode node = (CSSNode)it.next(); + sb.append(node.getName().trim()); + if (it.hasNext()) { + sb.append(","); + } + } + CSSNode node = new CSSNode(sb.toString()); + node.setStartLocation(start.getStartLocation()); + node.setEndLocation(end.getEndLocation()); + {if (true) return node;} + throw new Error("Missing return statement in function"); + } + +// +// selector +// : simple_selector [ combinator simple_selector ]* +// ; +// + final public CSSNode selector() throws ParseException { + List<CSSNode> list = new ArrayList<CSSNode>(); + CSSNode n = null; + n = simpleSelector(); + list.add(n); + label_41: + while (true) { + if (jj_2_4(2)) { + ; + } else { + break label_41; + } + n = combinator(); + list.add(n); + n = simpleSelector(); + list.add(n); + } + label_42: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[64] = jj_gen; + break label_42; + } + jj_consume_token(S); + } + if (list.isEmpty()) + {if (true) return null;} + CSSNode start = list.get(0); + CSSNode end = list.get(list.size() - 1); + StringBuffer sb = new StringBuffer(); + for (CSSNode node : list) { + sb.append(node.getName()).append(" "); + } + CSSNode node = new CSSNode(sb.toString()); + node.setStartLocation(start.getStartLocation()); + node.setEndLocation(end.getEndLocation()); + {if (true) return node;} + throw new Error("Missing return statement in function"); + } + +// +// simple_selector +// : element_name? [ HASH | class | attrib | pseudo ]* S* +// ; +// + final public CSSNode simpleSelector() throws ParseException { + List<CSSNode> list = new ArrayList<CSSNode>(); + CSSNode n = null; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case ASTERISK: + case IDENT: + n = elementName(); + list.add(n); + label_43: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DOT: + case COLON: + case LSQUARE: + case HASH: + ; + break; + default: + jj_la1[65] = jj_gen; + break label_43; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case HASH: + n = hash(); + list.add(n); + break; + case DOT: + n = _class(); + list.add(n); + break; + case LSQUARE: + n = attrib(); + list.add(n); + break; + case COLON: + n = pseudo(); + list.add(n); + break; + default: + jj_la1[66] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + break; + case DOT: + case COLON: + case LSQUARE: + case HASH: + label_44: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case HASH: + n = hash(); + list.add(n); + break; + case DOT: + n = _class(); + list.add(n); + break; + case LSQUARE: + n = attrib(); + list.add(n); + break; + case COLON: + n = pseudo(); + list.add(n); + break; + default: + jj_la1[67] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DOT: + case COLON: + case LSQUARE: + case HASH: + ; + break; + default: + jj_la1[68] = jj_gen; + break label_44; + } + } + break; + default: + jj_la1[69] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + if (list.isEmpty()) + {if (true) return null;} + CSSNode start = list.get(0); + CSSNode end = list.get(list.size() - 1); + StringBuffer sb = new StringBuffer(); + for (CSSNode node : list) { + sb.append(node.getName()).append(" "); + } + CSSNode node = new CSSNode(sb.toString()); + node.setStartLocation(start.getStartLocation()); + node.setEndLocation(end.getEndLocation()); + {if (true) return node;} + throw new Error("Missing return statement in function"); + } + +// +// class +// : '.' IDENT +// ; +// + final public CSSNode _class() throws ParseException { + Token t = null; + jj_consume_token(DOT); + t = jj_consume_token(IDENT); + CSSNode node = createNode(t); + node.setName("." + node.getName()); + {if (true) return node;} + throw new Error("Missing return statement in function"); + } + +// +// element_name +// : IDENT | '*' +// ; +// + final public CSSNode elementName() throws ParseException { + Token t = null; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case IDENT: + t = jj_consume_token(IDENT); + break; + case ASTERISK: + t = jj_consume_token(ASTERISK); + break; + default: + jj_la1[70] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + {if (true) return createNode(t);} + throw new Error("Missing return statement in function"); + } + +// +// attrib +// : '[' S* IDENT S* [ [ '=' | INCLUDES | DASHMATCH ] S* +// [ IDENT | STRING ] S* ]? ']' +// ; +// + final public CSSNode attrib() throws ParseException { + Token start = null; + Token a = null; + Token b = null; + Token c = null; + Token end = null; + start = jj_consume_token(LSQUARE); + label_45: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[71] = jj_gen; + break label_45; + } + jj_consume_token(S); + } + a = jj_consume_token(IDENT); + label_46: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[72] = jj_gen; + break label_46; + } + jj_consume_token(S); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case EQUALS: + case INCLUDES: + case DASHMATCH: + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case EQUALS: + b = jj_consume_token(EQUALS); + break; + case INCLUDES: + b = jj_consume_token(INCLUDES); + break; + case DASHMATCH: + b = jj_consume_token(DASHMATCH); + break; + default: + jj_la1[73] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + label_47: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[74] = jj_gen; + break label_47; + } + jj_consume_token(S); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case IDENT: + c = jj_consume_token(IDENT); + break; + case STRING: + c = jj_consume_token(STRING); + break; + default: + jj_la1[75] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + label_48: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[76] = jj_gen; + break label_48; + } + jj_consume_token(S); + } + break; + default: + jj_la1[77] = jj_gen; + ; + } + end = jj_consume_token(RSQUARE); + if (a != null) { + StringBuffer name = new StringBuffer(); + name.append(a.image); + if (b != null) + name.append(" ").append(b.image); + if (c != null) + name.append(" ").append(c.image); + CSSNode node = new CSSNode(name.toString()); + node.setStartLocation(getStartLocation(start)); + node.setEndLocation(getEndLocation(end)); + {if (true) return node;} + } + {if (true) return null;} + throw new Error("Missing return statement in function"); + } + +// +// pseudo +// : ':' [ IDENT | FUNCTION S* IDENT S* ')' ] +// ; +// + final public CSSNode pseudo() throws ParseException { + Token start = null; + Token ident = null; + Token func = null; + Token end = null; + start = jj_consume_token(COLON); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case IDENT: + ident = jj_consume_token(IDENT); + break; + case FUNCTION: + func = jj_consume_token(FUNCTION); + label_49: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[78] = jj_gen; + break label_49; + } + jj_consume_token(S); + } + ident = jj_consume_token(IDENT); + label_50: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[79] = jj_gen; + break label_50; + } + jj_consume_token(S); + } + end = jj_consume_token(RROUND); + break; + default: + jj_la1[80] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + String name = ":" + (func != null ? func.image : "") + ident.image; + CSSNode node = new CSSNode(name); + node.setStartLocation(getStartLocation(start)); + node.setEndLocation(end != null ? getEndLocation(end) : getEndLocation(ident)); + {if (true) return node;} + throw new Error("Missing return statement in function"); + } + + final public CSSNode hash() throws ParseException { + Token t = null; + t = jj_consume_token(HASH); + {if (true) return createNode(t);} + throw new Error("Missing return statement in function"); + } + + final public List<CSSNode> styleDeclaration() throws ParseException { + List<CSSNode> list = new ArrayList<CSSNode>(); + CSSNode n = null; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case IDENT: + n = declaration(); + list.add(n); + break; + default: + jj_la1[81] = jj_gen; + ; + } + label_51: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case SEMICOLON: + ; + break; + default: + jj_la1[82] = jj_gen; + break label_51; + } + jj_consume_token(SEMICOLON); + label_52: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[83] = jj_gen; + break label_52; + } + jj_consume_token(S); + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case IDENT: + n = declaration(); + list.add(n); + break; + default: + jj_la1[84] = jj_gen; + ; + } + } + {if (true) return list;} + throw new Error("Missing return statement in function"); + } + +// +// declaration +// : property ':' S* expr prio? +// | +// ; +// + final public CSSNode declaration() throws ParseException { + CSSNode prop = null; + CSSNode expr = null; + CSSNode prio = null; + prop = property(); + jj_consume_token(COLON); + label_53: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[85] = jj_gen; + break label_53; + } + jj_consume_token(S); + } + expr = expr(); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case IMPORTANT_SYM: + prio = prio(); + break; + default: + jj_la1[86] = jj_gen; + ; + } + String name = prop.getName() + ": " + (expr != null ? expr.getName() : "") + (prio != null ? prio.getName() : ""); + CSSNode node = new CSSNode(name); + node.setStartLocation(prop.getStartLocation()); + node.setEndLocation(prio != null ? prio.getEndLocation() : expr != null ? expr.getEndLocation() : prop.getEndLocation()); + {if (true) return node;} + throw new Error("Missing return statement in function"); + } + +// +// prio +// : IMPORTANT_SYM S* +// ; +// + final public CSSNode prio() throws ParseException { + Token t = null; + t = jj_consume_token(IMPORTANT_SYM); + label_54: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[87] = jj_gen; + break label_54; + } + jj_consume_token(S); + } + {if (true) return createNode(t);} + throw new Error("Missing return statement in function"); + } + +// +// expr +// : term [ operator term ]* +// ; +// +// TODO: Deal with the operator +// + final public CSSNode expr() throws ParseException { + CSSNode na = null; + CSSNode no = null; + CSSNode nb = null; + StringBuffer sb = new StringBuffer(); + na = term(); + sb.append(na.getName()); + label_55: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case COMMA: + case SLASH: + case PLUS: + case MINUS: + case HASH: + case STRING: + case URI: + case INHERIT: + case EMS: + case EXS: + case LENGTH_PX: + case LENGTH_CM: + case LENGTH_MM: + case LENGTH_IN: + case LENGTH_PT: + case LENGTH_PC: + case ANGLE_DEG: + case ANGLE_RAD: + case ANGLE_GRAD: + case TIME_MS: + case TIME_S: + case FREQ_HZ: + case FREQ_KHZ: + case DIMEN: + case PERCENTAGE: + case NUMBER: + case RGB: + case FUNCTION: + case IDENT: + case UNICODERANGE: + ; + break; + default: + jj_la1[88] = jj_gen; + break label_55; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case COMMA: + case SLASH: + no = operator(); + sb.append(no.getName()); + break; + default: + jj_la1[89] = jj_gen; + ; + } + nb = term(); + sb.append(nb.getName()); + } + CSSNode node = new CSSNode(sb.toString()); + node.setStartLocation(na.getStartLocation()); + node.setEndLocation(nb != null ? nb.getEndLocation() : na.getEndLocation()); + {if (true) return node;} + throw new Error("Missing return statement in function"); + } + +// +// term +// : unary_operator? +// [ NUMBER S* | PERCENTAGE S* | LENGTH S* | EMS S* | EXS S* | ANGLE S* | +// TIME S* | FREQ S* | function ] +// | STRING S* | IDENT S* | URI S* | RGB S* | UNICODERANGE S* | hexcolor +// ; +// + final public CSSNode term() throws ParseException { + CSSNode uo = null; + Token a = null; + Token b = null; + CSSNode na = null; + CSSNode nb = null; + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case PLUS: + case MINUS: + uo = unaryOperator(); + break; + default: + jj_la1[90] = jj_gen; + ; + } + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case EMS: + case EXS: + case LENGTH_PX: + case LENGTH_CM: + case LENGTH_MM: + case LENGTH_IN: + case LENGTH_PT: + case LENGTH_PC: + case ANGLE_DEG: + case ANGLE_RAD: + case ANGLE_GRAD: + case TIME_MS: + case TIME_S: + case FREQ_HZ: + case FREQ_KHZ: + case PERCENTAGE: + case NUMBER: + case FUNCTION: + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case NUMBER: + a = jj_consume_token(NUMBER); + break; + case PERCENTAGE: + a = jj_consume_token(PERCENTAGE); + break; + case LENGTH_PX: + a = jj_consume_token(LENGTH_PX); + break; + case LENGTH_CM: + a = jj_consume_token(LENGTH_CM); + break; + case LENGTH_MM: + a = jj_consume_token(LENGTH_MM); + break; + case LENGTH_IN: + a = jj_consume_token(LENGTH_IN); + break; + case LENGTH_PT: + a = jj_consume_token(LENGTH_PT); + break; + case LENGTH_PC: + a = jj_consume_token(LENGTH_PC); + break; + case EMS: + a = jj_consume_token(EMS); + break; + case EXS: + a = jj_consume_token(EXS); + break; + case ANGLE_DEG: + a = jj_consume_token(ANGLE_DEG); + break; + case ANGLE_RAD: + a = jj_consume_token(ANGLE_RAD); + break; + case ANGLE_GRAD: + a = jj_consume_token(ANGLE_GRAD); + break; + case TIME_MS: + a = jj_consume_token(TIME_MS); + break; + case TIME_S: + a = jj_consume_token(TIME_S); + break; + case FREQ_HZ: + a = jj_consume_token(FREQ_HZ); + break; + case FREQ_KHZ: + a = jj_consume_token(FREQ_KHZ); + break; + case FUNCTION: + na = function(); + break; + default: + jj_la1[91] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + break; + case STRING: + b = jj_consume_token(STRING); + break; + case IDENT: + b = jj_consume_token(IDENT); + break; + case URI: + b = jj_consume_token(URI); + break; + case UNICODERANGE: + b = jj_consume_token(UNICODERANGE); + break; + case RGB: + nb = rgb(); + break; + case HASH: + nb = hexcolor(); + break; + case DIMEN: + b = jj_consume_token(DIMEN); + break; + case INHERIT: + b = jj_consume_token(INHERIT); + break; + default: + jj_la1[92] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + label_56: + while (true) { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case S: + ; + break; + default: + jj_la1[93] = jj_gen; + break label... [truncated message content] |
From: <ez...@us...> - 2006-09-20 14:38:02
|
Revision: 7087 http://svn.sourceforge.net/jedit/?rev=7087&view=rev Author: ezust Date: 2006-09-20 07:37:56 -0700 (Wed, 20 Sep 2006) Log Message: ----------- Gave Ecmascript parser the proper label... Modified Paths: -------------- plugins/XML/trunk/XML.props plugins/XML/trunk/actions.xml plugins/XML/trunk/docs/users-guide.xml plugins/XML/trunk/sidekick/ecmascript/EcmaScriptSideKickParser.java plugins/XML/trunk/xml/indent/IndentingTransformer.java plugins/XML/trunk/xml/parser/SAXParserImpl.java Modified: plugins/XML/trunk/XML.props =================================================================== --- plugins/XML/trunk/XML.props 2006-09-20 04:20:41 UTC (rev 7086) +++ plugins/XML/trunk/XML.props 2006-09-20 14:37:56 UTC (rev 7087) @@ -271,7 +271,8 @@ # {{{ JavaScript Properties sidekick.parser.javascript.label=javascript -mode.javascript.sidekick.parser=javascript +mode.javascript.sidekick.parser=ecmascript +sidekick.parser.ecmascript.label=ecmascript #{{{ icons @@ -297,3 +298,4 @@ # register modes for Beauty mode.xml.beauty.beautifier=XmlIndenter + Modified: plugins/XML/trunk/actions.xml =================================================================== --- plugins/XML/trunk/actions.xml 2006-09-20 04:20:41 UTC (rev 7086) +++ plugins/XML/trunk/actions.xml 2006-09-20 14:37:56 UTC (rev 7087) @@ -75,3 +75,4 @@ </CODE> </ACTION> </ACTIONS> + Modified: plugins/XML/trunk/docs/users-guide.xml =================================================================== --- plugins/XML/trunk/docs/users-guide.xml 2006-09-20 04:20:41 UTC (rev 7086) +++ plugins/XML/trunk/docs/users-guide.xml 2006-09-20 14:37:56 UTC (rev 7087) @@ -2,9 +2,9 @@ <book xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation='http://www.docbook.org/xsd/4.4/docbook.xsd' > <title>XML plugin user's guide</title> - + <bookinfo> - + <authorgroup> <author><firstname>Slava</firstname><surname>Pestov</surname></author> <author><firstname>Dale</firstname><surname>Anson</surname></author> @@ -13,7 +13,7 @@ <author><firstname>Martin</firstname><surname>Raspe</surname></author> <author><firstname>Jakub</firstname><surname>Roztocil</surname></author> </authorgroup> - + <legalnotice><title>Legal Notice</title> <para> Permission is granted to copy, distribute and/or modify this document @@ -24,16 +24,16 @@ the license can be found in the file <filename>COPYING.DOC.txt</filename> included with jEdit. </para> - + <para> The XML plugin itself is released under the GNU General Public License. A copy of the GPL can be found in the jEdit online help. </para> - + <para> - This version of the XML plugin for jEdit combines the <ulink url="docs/htmlsidekick.html">HtmlSideKick</ulink> plugin by Dale Anson, the <ulink url="docs/javascript.html">JavaScriptSideKick</ulink> by Martin Raspe, and the CssSideKick by Jakub Roztocil, and the XmlIndenter plugin by Robert McKinnon, providing four distinct Sidekick parsers and three different completion services, as well as an indenting service for the Beauty plugin. + This version of the XML plugin for jEdit combines the <ulink url="docs/htmlsidekick.html">HtmlSideKick</ulink> plugin by Dale Anson, the <ulink url="docs/javascript.html">JavaScriptSideKick</ulink> by Martin Raspe, and the CssSideKick by Jakub Roztocil, and the XmlIndenter plugin by Robert McKinnon, providing four distinct Sidekick parsers and three different completion services, as well as an indenting service for the Beauty plugin. </para> - + </legalnotice> </bookinfo> @@ -42,8 +42,8 @@ <para> This documentation assumes at least basic knowlege of HTML and XML. </para> - - <para> The XML plugin makes jEdit one of the most advanced free Website editing tools available. + + <para> The XML plugin makes jEdit one of the most advanced free Website editing tools available. It combines parsers for XML, HTML, JSP, Sidekick, and CSS files. Here are its features: </para> <itemizedlist> @@ -55,7 +55,7 @@ <listitem><para>Graphical form to edit tags and attributes</para></listitem> <listitem><para>With a keystroke, jump to matching tag or bracket</para></listitem> <listitem><para>And more. </para></listitem> - + </itemizedlist> <para> @@ -67,7 +67,7 @@ <chapter id="validation"><title>Validation</title> <para> - XML files are validated against their DTD or XSD schema. If no schema can be loaded, only minimal error checking will be performed. No validation of any kind is performed for HTML files, but XHTML files can be validated using their regular schema. + XML files are validated against their DTD or XSD schema. If no schema can be loaded, only minimal error checking will be performed. No validation of any kind is performed for HTML files, but XHTML files can be validated using their regular schema. </para> <para> @@ -81,12 +81,12 @@ <para> DTDs (document type definitions) and XSDs (w3c XML Schemas) are two different standards - for defining XML Schemas, to describe which elements and entities are allowed within a specific context. + for defining XML Schemas, to describe which elements and entities are allowed within a specific context. In order to implement completion or validation, the XML plugin needs to be able to load a schema. A few file types for which no schema is available are supported using built-in completion information included with the plugin. </para> <sect1 id="customizing-validation"><title>Customizing validation</title> - + <para> Validation can be disabled on a global basis in the <guibutton>XML</guibutton>><guibutton>XML</guibutton> pane of the <guimenu>Plugins</guimenu>><guimenuitem>Plugin Options</guimenuitem> dialog box. It can also be disabled on a per-buffer basis by inserting the following in the first of last 10 lines of the buffer: </para> @@ -111,9 +111,9 @@ </para> <itemizedlist> - + <listitem><para>HTML files </para></listitem> - + <listitem><para>XSL stylesheets (xsl) </para></listitem> <listitem><para>XSD XML schema definitions </para></listitem> <listitem><para><filename>build.xml</filename> - Ant build files </para></listitem> @@ -137,7 +137,7 @@ <programlisting><![CDATA[<?xml version="1.0"?> <!DOCTYPE SYSTEM "]]><replaceable>system ID</replaceable>" </programlisting> - + <para> XML schemas perform a similar function to DTDs, however they are a newer standard and support some features that DTDs do not, like namespaces. @@ -168,7 +168,7 @@ Catalog files must either be in OASIS OPEN or XML catalog format. These two formats are documented below. </para> - + <para> If the DTD or XSD cannot be located in the catalogs, the plugin will ask if it should be downloaded and cached for future use in the <filename>dtds</filename> subdirectory of the jEdit settings directory. @@ -180,9 +180,9 @@ </para> </sect1> <sect1 id="built-in-dtds"><title>Built-in DTDs</title> - + <para> - The XML plugin catalogs the following DTDs which are included with jEdit itself, or the XML plugin. + The XML plugin catalogs the following DTDs which are included with jEdit itself, or the XML plugin. </para> <itemizedlist> @@ -218,7 +218,7 @@ <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "docbookx.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "xhtml11-flat.dtd"> </programlisting> - + </sect1> <sect1 id="oasis-catalog-format"><title>OASIS OPEN catalog format</title> @@ -358,7 +358,7 @@ <keycap>Control</keycap>.</para></listitem> <listitem><para> Hitting return in the completion dialog, if the option is set from the XML Options. </para></listitem> <listitem><para> Clicking on an element from the XML Insert dockable. </para></listitem> - </itemizedlist> + </itemizedlist> <para> The dialog box lists all declared attributes for the current tag in a @@ -427,7 +427,7 @@ <para> <guimenu>Plugins</guimenu>><guisubmenu>XML</guisubmenu>><guimenuitem>Split Tag</guimenuitem> splits the current tag at the cursor, and creates a new tag at the same - level. This is useful when editing HTML, DocBook or similar documents, for inserting + level. This is useful when editing HTML, DocBook or similar documents, for inserting many <literal><p></literal> or <literal><para></literal> tags. This command tries to match the current indenting style. @@ -507,7 +507,6 @@ <paramdef>String <parameter>systemId</parameter></paramdef> </funcprototype> </funcsynopsis> - </chapter> <chapter id="xmlindenter"> @@ -585,7 +584,7 @@ </section> <appendix id="xmlindenter-changelog"> - <title>Change log</title> + <title>XMLIndenter: Change log</title> <para> <emphasis role="bold">From 0.3 to 0.3.2</emphasis> <itemizedlist> @@ -674,12 +673,12 @@ <para> It's easy to figure out because the filenames changed. </para> - + <formalpara><title>Jars for Xerces 2.6-7</title> <para> <literal>resolver, xml-apis, xercesImpl</literal>. </para> </formalpara> - + <formalpara><title> Jars for Xerces 2.3-5</title> <para> (unsupported) <literal>xml-commons-resolver, xmlParserApis, xercesImpl</literal>. @@ -688,7 +687,7 @@ </note> <note> <title> Can't load SideKickParser </title> <para> - If you ever encounter the error when loading the + If you ever encounter the error when loading the <literal>SideKickParser</literal>, be sure that the java property <literal>jedit.home</literal> is set. The <literal>ServiceManager</literal> uses this property to find other jar files. You can pass a <literal>-Djedit.home=/path/to/jedit</literal> as a parameter to the <literal>java</literal> command in the <literal>jedit</literal> startup script. </para> </note> @@ -703,8 +702,8 @@ <listitem><para> Merged XmlIndenter plugin with XML plugin. </para></listitem> </itemizedlist> </para></listitem> - - <listitem><para><emphasis role="bold">Version 2.0</emphasis> Requires jEdit 4.3pre5, Java 1.5, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. + + <listitem><para><emphasis role="bold">Version 2.0</emphasis> Requires jEdit 4.3pre5, Java 1.5, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. <itemizedlist> <listitem><para> XML plugin now includes HtmlSideKick 0.5, JavaScriptSideKick 0.4, and CssSideKick (initial release). </para></listitem> </itemizedlist> @@ -722,42 +721,42 @@ <listitem> <para> XSD completion info fixes #1511612 (will69) </para> </listitem> <listitem> <para> Removed registration of SAXParserFactory. This should help avoid clashing with other plugins that use SAXParserFactory. </para></listitem> - + <listitem> <para> Removed use of gnu.regexp in favor of java.util.regex. (ezust) </para></listitem> </itemizedlist> </para></listitem> - + <listitem><para><emphasis role="bold">Version 0.18</emphasis> Requires jedit 4.3pre3, Java 1.4, ErrorList 1.3.1, SideKick 0.3 and XercesPlugin 2.8.0. <itemizedlist> <listitem> <para> Debugged goto matching tag action. Deselects current selection before doing its thing. (Alan Ezust) </para> </listitem> - <listitem> <para> Some refactoring to help HtmlSideKick with + <listitem> <para> Some refactoring to help HtmlSideKick with completion. (Alan Ezust) </para></listitem> </itemizedlist> - + </para> </listitem> - - - + + + <listitem><para><emphasis role="bold">Version 0.17</emphasis> Requires jedit 4.3pre3, Java 1.4, ErrorList 1.3.1, SideKick 0.3 and XercesPlugin 2.8.0. <itemizedlist> <listitem> <para> Attribute completion works now. (Alan Ezust) </para> </listitem> </itemizedlist> - + </para></listitem> - + <listitem><para><emphasis role="bold">Version 0.16</emphasis> Requires jedit 4.3pre3, Java 1.4, ErrorList 1.3.1, SideKick 0.3 and XercesPlugin 2.8.0. <itemizedlist> <listitem> <para> Generates ant completion xml as part of build process </para> </listitem> - <listitem> <para> Removed Xerces from this plugin and added a dependency on XercesPlugin 2.8.0. </para></listitem> + <listitem> <para> Removed Xerces from this plugin and added a dependency on XercesPlugin 2.8.0. </para></listitem> <listitem> <para> Removed htmlparser from this plugin, since the HtmlSideKick does a better job of parsing HTML.</para> </listitem> </itemizedlist> - </para></listitem> - - <listitem><para><emphasis role="bold">Version 0.15</emphasis> Patched for jEdit43pre2, still requires ErrorList plugin 1.3.1, SideKick 0.3 and Xerces 2.6 or later. </para> + </para></listitem> + + <listitem><para><emphasis role="bold">Version 0.15</emphasis> Patched for jEdit43pre2, still requires ErrorList plugin 1.3.1, SideKick 0.3 and Xerces 2.6 or later. </para> <para><emphasis role="bold"> Tested with Xerces 2.7.1 </emphasis> </para> </listitem> Modified: plugins/XML/trunk/sidekick/ecmascript/EcmaScriptSideKickParser.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/EcmaScriptSideKickParser.java 2006-09-20 04:20:41 UTC (rev 7086) +++ plugins/XML/trunk/sidekick/ecmascript/EcmaScriptSideKickParser.java 2006-09-20 14:37:56 UTC (rev 7087) @@ -60,7 +60,7 @@ private int lineOffset = 0; public EcmaScriptSideKickParser() { - super( "javascript" ); + super( "ecmascript" ); } /** Modified: plugins/XML/trunk/xml/indent/IndentingTransformer.java =================================================================== --- plugins/XML/trunk/xml/indent/IndentingTransformer.java 2006-09-20 04:20:41 UTC (rev 7086) +++ plugins/XML/trunk/xml/indent/IndentingTransformer.java 2006-09-20 14:37:56 UTC (rev 7087) @@ -321,11 +321,11 @@ } else { nameEnd = xml.indexOf( ' ', start ); - + if ( nameEnd == -1 || nameEnd > end ) { nameEnd = xml.indexOf( '\n', start ); } - + if ( nameEnd == -1 || nameEnd > end ) { nameEnd = xml.indexOf( '\r', start ); } Modified: plugins/XML/trunk/xml/parser/SAXParserImpl.java =================================================================== --- plugins/XML/trunk/xml/parser/SAXParserImpl.java 2006-09-20 04:20:41 UTC (rev 7086) +++ plugins/XML/trunk/xml/parser/SAXParserImpl.java 2006-09-20 14:37:56 UTC (rev 7087) @@ -77,7 +77,7 @@ //}}} /** * Eventually this will be replaced by XercesParserImpl. - * + * */ public class SAXParserImpl extends XmlParser { @@ -214,7 +214,7 @@ if(info.elementHash.get(name) != null) return; - + ElementDecl elementDecl = new XsdElementDecl(element, info, name, null); info.addElement(elementDecl); XSTypeDefinition typedef = element.getTypeDefinition(); @@ -232,7 +232,7 @@ else xsTermToElementDecl(info,particleTerm,elementDecl); } - + XSObjectList attributes = complex.getAttributeUses(); for(int i = 0; i < attributes.getLength(); i++) { @@ -549,7 +549,7 @@ buffer.getLineStartOffset(line) + column); - tag.setEnd(buffer.createPosition(offset)); + tag.setEnd(buffer.createPosition(offset-1)); tag.empty = empty; currentNodeStack.pop(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2006-10-17 02:23:31
|
Revision: 7512 http://svn.sourceforge.net/jedit/?rev=7512&view=rev Author: ezust Date: 2006-10-16 19:23:22 -0700 (Mon, 16 Oct 2006) Log Message: ----------- Upped the version... Modified Paths: -------------- plugins/XML/trunk/XML.props Added Paths: ----------- plugins/XML/trunk/description.html Modified: plugins/XML/trunk/XML.props =================================================================== --- plugins/XML/trunk/XML.props 2006-10-16 01:28:30 UTC (rev 7511) +++ plugins/XML/trunk/XML.props 2006-10-17 02:23:22 UTC (rev 7512) @@ -2,15 +2,16 @@ plugin.xml.XmlPlugin.activate=defer plugin.xml.XmlPlugin.name=XML plugin.xml.XmlPlugin.author=Slava Pestov, Dale Anson, Alan Ezust, Rob McKinnon, Martin Raspe, Jakub Roztocil -plugin.xml.XmlPlugin.version=2.0.4 +plugin.xml.XmlPlugin.version=2.0.5 plugin.xml.XmlPlugin.docs=index.html plugin.xml.XmlPlugin.depend.0=jdk 1.5 -plugin.xml.XmlPlugin.depend.1=jedit 04.03.05.00 +plugin.xml.XmlPlugin.depend.1=jedit 04.03.07.00 plugin.xml.XmlPlugin.depend.2=plugin xerces.XercesPlugin 2.8.0 plugin.xml.XmlPlugin.depend.3=plugin errorlist.ErrorListPlugin 1.4 plugin.xml.XmlPlugin.depend.4=plugin sidekick.SideKickPlugin 0.6.4 plugin.xml.XmlPlugin.depend.5=plugin beauty.BeautyPlugin 0.1 +plugin.xml.XmlPlugin.description=The XML plugin provides features for editing XML, HTML, JavaScript and CSS files. For XML files, it does validation against a DTD or XSD. For all languages, it displays element trees in the sidekick dockable. For XML, HTML and CSS, you get completion popups for elements, attribute, and entities. # Menu bar stuff Added: plugins/XML/trunk/description.html =================================================================== --- plugins/XML/trunk/description.html (rev 0) +++ plugins/XML/trunk/description.html 2006-10-17 02:23:22 UTC (rev 7512) @@ -0,0 +1,8 @@ +<html> +<p>The XML plugin provides a tree structure browser for editing XML, HTML, CSS and JavaScript files, and completion for XML, HTML and CSS. </p> + +<p>Matching tag actions, pretty-printing, graphical editing of tag attributes and conversion of special characters to entities and vice versa is supported for both XML and HTML files.</p> + +<p>XML files are validated against their DTD or XSD, and the element tree is shown in a dockable window. Validation errors are shown in the Error List.</p> +</html> + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dal...@us...> - 2006-10-18 19:45:50
|
Revision: 7618 http://svn.sourceforge.net/jedit/?rev=7618&view=rev Author: daleanson Date: 2006-10-18 12:45:28 -0700 (Wed, 18 Oct 2006) Log Message: ----------- code cleanup Modified Paths: -------------- plugins/XML/trunk/XML.props plugins/XML/trunk/docs/users-guide.xml plugins/XML/trunk/sidekick/css/parser/CSS2Parser.java plugins/XML/trunk/sidekick/ecmascript/EcmaScriptSideKickParser.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTExpressionStatement.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTFunctionDeclaration.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTLiteral.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTLiteralField.java plugins/XML/trunk/sidekick/ecmascript/parser/ASTVariableStatement.java plugins/XML/trunk/sidekick/ecmascript/parser/EcmaScript.java plugins/XML/trunk/sidekick/ecmascript/parser/EcmaScript.jj plugins/XML/trunk/sidekick/ecmascript/parser/EcmaScript.jjt plugins/XML/trunk/sidekick/ecmascript/parser/EcmaScriptConstants.java plugins/XML/trunk/sidekick/ecmascript/parser/EcmaScriptTokenManager.java plugins/XML/trunk/sidekick/ecmascript/parser/EcmaScriptTreeConstants.java plugins/XML/trunk/sidekick/ecmascript/parser/EcmaScriptVisitor.java plugins/XML/trunk/sidekick/ecmascript/parser/SimpleNode.java plugins/XML/trunk/xml/TagHighlight.java Modified: plugins/XML/trunk/XML.props =================================================================== --- plugins/XML/trunk/XML.props 2006-10-18 13:47:24 UTC (rev 7617) +++ plugins/XML/trunk/XML.props 2006-10-18 19:45:28 UTC (rev 7618) @@ -50,13 +50,19 @@ xml-reload-catalogs.label=Reload Catalogs # Option panes -plugin.xml.XmlPlugin.option-group=xml.general xmlindenter sidekick.html sidekick.css xml.catalogs +plugin.xml.XmlPlugin.option-group=xml.general xmlindenter sidekick.html sidekick.ecmascript sidekick.css xml.catalogs # {{ HTML option pane options.sidekick.html.label=HTML options.sidekick.html.code=new sidekick.html.HtmlOptionPane() # }}} +# {{{ ecmascript option pane +options.sidekick.ecmascript.label=Ecmascript +options.sidekick.ecmascript.general.allNodes.label=Show all nodes +options.sidekick.ecmascript.code=new sidekick.ecmascript.options.GeneralOptionPane(); +# }}} + # {{{ XML options options.xml.catalogs.label=Catalogs Modified: plugins/XML/trunk/docs/users-guide.xml =================================================================== --- plugins/XML/trunk/docs/users-guide.xml 2006-10-18 13:47:24 UTC (rev 7617) +++ plugins/XML/trunk/docs/users-guide.xml 2006-10-18 19:45:28 UTC (rev 7618) @@ -694,6 +694,16 @@ </appendix> <appendix id="changes"> <title>Change log</title> <itemizedlist> + <listitem><para><emphasis role="bold">Version 2.0.4</emphasis> Requires jEdit 4.3pre5, Java 1.5, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. + <itemizedlist> + <listitem><para> XML plugin now includes EcmascriptSideKick (initial release) + and a new CSS2SideKick, both based on javacc parsers. The HtmlSideKick now uses + both the CSS2SideKick and the EcmascriptSideKick to parse in-line <style> + and <script> blocks in html code.</para></listitem> + </itemizedlist> + </para> + </listitem> + <listitem><para> <emphasis role="bold">Version 2.0.3</emphasis> Requires jEdit 4.3pre5, Java 1.5, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. Modified: plugins/XML/trunk/sidekick/css/parser/CSS2Parser.java =================================================================== --- plugins/XML/trunk/sidekick/css/parser/CSS2Parser.java 2006-10-18 13:47:24 UTC (rev 7617) +++ plugins/XML/trunk/sidekick/css/parser/CSS2Parser.java 2006-10-18 19:45:28 UTC (rev 7618) @@ -83,7 +83,8 @@ Token t = pe.currentToken; // handle a 1-off error when this parser is called to parse embedded css if ( t != null ) { - return new Range( new Location( t.next.beginLine + lineOffset, t.next.beginColumn ), new Location( t.next.endLine + lineOffset, t.next.endColumn ) ); + return new Range( new Location( t.next.beginLine + lineOffset, t.next.beginColumn ), + new Location( t.next.endLine + lineOffset, t.next.endColumn ) ); } // ParseException message look like: "Parse error at line 116, column 5. Encountered: }" @@ -99,7 +100,8 @@ line_number = Integer.parseInt( ln ); if ( cn != null ) column_number = Integer.parseInt( cn ); - return line_number > -1 ? new Range( new Location( line_number + lineOffset, column_number - 1 ), new Location( line_number + lineOffset, column_number ) ) : null; + return line_number > -1 ? new Range( new Location( line_number + lineOffset, column_number - 1 ), + new Location( line_number + lineOffset, column_number ) ) : null; } return new Range(); } @@ -2446,30 +2448,6 @@ finally { jj_save(3, xla); } } - final private boolean jj_3R_69() { - if (jj_3R_79()) return true; - if (jj_scan_token(LBRACE)) return true; - return false; - } - - final private boolean jj_3R_80() { - if (jj_3R_87()) return true; - return false; - } - - final private boolean jj_3R_71() { - if (jj_scan_token(PAGE_SYM)) return true; - Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_scan_token(1)) { jj_scanpos = xsp; break; } - } - xsp = jj_scanpos; - if (jj_3R_81()) jj_scanpos = xsp; - if (jj_scan_token(LBRACE)) return true; - return false; - } - final private boolean jj_3R_65() { Token xsp; xsp = jj_scanpos; @@ -2853,6 +2831,30 @@ return false; } + final private boolean jj_3R_69() { + if (jj_3R_79()) return true; + if (jj_scan_token(LBRACE)) return true; + return false; + } + + final private boolean jj_3R_80() { + if (jj_3R_87()) return true; + return false; + } + + final private boolean jj_3R_71() { + if (jj_scan_token(PAGE_SYM)) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { jj_scanpos = xsp; break; } + } + xsp = jj_scanpos; + if (jj_3R_81()) jj_scanpos = xsp; + if (jj_scan_token(LBRACE)) return true; + return false; + } + public CSS2ParserTokenManager token_source; SimpleCharStream jj_input_stream; public Token token, jj_nt; Modified: plugins/XML/trunk/sidekick/ecmascript/EcmaScriptSideKickParser.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/EcmaScriptSideKickParser.java 2006-10-18 13:47:24 UTC (rev 7617) +++ plugins/XML/trunk/sidekick/ecmascript/EcmaScriptSideKickParser.java 2006-10-18 19:45:28 UTC (rev 7618) @@ -186,6 +186,7 @@ } } + /* public boolean supportsCompletion() { return false; } @@ -197,6 +198,7 @@ public SideKickCompletion complete( EditPane editPane, int caret ) { return null; } + */ Comparator nodeSorter = new Comparator(){ public int compare(Object a, Object b) { Modified: plugins/XML/trunk/sidekick/ecmascript/parser/ASTExpressionStatement.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTExpressionStatement.java 2006-10-18 13:47:24 UTC (rev 7617) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTExpressionStatement.java 2006-10-18 19:45:28 UTC (rev 7618) @@ -1,19 +1,53 @@ -/* Generated By:JJTree: Do not edit this line. ASTExpressionStatement.java */ - -package sidekick.ecmascript.parser; - -public class ASTExpressionStatement extends SimpleNode { - public ASTExpressionStatement(int id) { - super(id); - } - - public ASTExpressionStatement(EcmaScript p, int id) { - super(p, id); - } - - - /** Accept the visitor. **/ - public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { - return visitor.visit(this, data); - } -} +/* Generated By:JJTree: Do not edit this line. ASTExpressionStatement.java */ + + + +package sidekick.ecmascript.parser; + +import java.util.*; + + +public class ASTExpressionStatement extends SimpleNode { + + public ASTExpressionStatement( int id ) { + super( id ); + } + + public ASTExpressionStatement( EcmaScript p, int id ) { + super( p, id ); + } + + /** Accept the visitor. **/ + public Object jjtAccept( EcmaScriptVisitor visitor, Object data ) { + return visitor.visit( this, data ); + } + + public List getChildren() { + if ( children != null ) { + List kids = Arrays.asList(children); + return kids.subList(0, kids.size()); + } + else { + return null; + } + } + + public String toString() { + boolean b = System.getProperty( "sidekick.ecmascript.general.allNodes", "false" ).startsWith("t"); + if (b) { + return super.toString(); + } + + try { + if ( jjtGetChild( 0 ).jjtGetChild( 0 ) instanceof ASTCompositeReference ) { + String name = ( ( ASTCompositeReference ) jjtGetChild( 0 ).jjtGetChild( 0 ) ).getCompositeName(); + return name == null ? super.toString() : name; + } + return super.toString(); + } + catch ( Exception e ) { + return ""; + } + } + +} Modified: plugins/XML/trunk/sidekick/ecmascript/parser/ASTFunctionDeclaration.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTFunctionDeclaration.java 2006-10-18 13:47:24 UTC (rev 7617) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTFunctionDeclaration.java 2006-10-18 19:45:28 UTC (rev 7618) @@ -46,6 +46,11 @@ } public String toString() { + boolean b = System.getProperty( "sidekick.ecmascript.general.allNodes", "false" ).startsWith("t"); + if (b) { + return super.toString(); + } + StringBuffer sb = new StringBuffer(); sb.append( jjtGetChild( 0 ).toString() ); sb.append( "(" ); Modified: plugins/XML/trunk/sidekick/ecmascript/parser/ASTLiteral.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTLiteral.java 2006-10-18 13:47:24 UTC (rev 7617) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTLiteral.java 2006-10-18 19:45:28 UTC (rev 7618) @@ -201,7 +201,12 @@ @Override public String toString() { - return "Literal[" + value.toString() + "]"; + boolean b = System.getProperty( "sidekick.ecmascript.general.allNodes", "false" ).startsWith("t"); + if (b) { + return super.toString(); + } + + return "Literal[" + (value == null ? "" : value.toString()) + "]"; } /** Modified: plugins/XML/trunk/sidekick/ecmascript/parser/ASTLiteralField.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTLiteralField.java 2006-10-18 13:47:24 UTC (rev 7617) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTLiteralField.java 2006-10-18 19:45:28 UTC (rev 7618) @@ -1,19 +1,75 @@ /* Generated By:JJTree: Do not edit this line. ASTLiteralField.java */ + + package sidekick.ecmascript.parser; + + public class ASTLiteralField extends SimpleNode { - public ASTLiteralField(int id) { - super(id); - } - public ASTLiteralField(EcmaScript p, int id) { - super(p, id); - } + public ASTLiteralField( int id ) { + super( id ); - /** Accept the visitor. **/ - public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { - return visitor.visit(this, data); - } + } + + + + public ASTLiteralField( EcmaScript p, int id ) { + + super( p, id ); + + } + + + + public boolean isVisible() { + + return true; + + } + + + + + + /** Accept the visitor. **/ + + public Object jjtAccept( EcmaScriptVisitor visitor, Object data ) { + + return visitor.visit( this, data ); + + } + + + + public String toString() { + + boolean b = System.getProperty( "sidekick.ecmascript.general.allNodes", "false" ).startsWith("t"); + + if ( b ) { + + return super.toString(); + + } + + + + try { + + return jjtGetChild( 0 ).toString(); + + } + + catch ( NullPointerException npe ) { + + return super.toString(); + + } + + } + + + } Modified: plugins/XML/trunk/sidekick/ecmascript/parser/ASTVariableStatement.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/ASTVariableStatement.java 2006-10-18 13:47:24 UTC (rev 7617) +++ plugins/XML/trunk/sidekick/ecmascript/parser/ASTVariableStatement.java 2006-10-18 19:45:28 UTC (rev 7618) @@ -1,28 +1,74 @@ /* Generated By:JJTree: Do not edit this line. ASTVariableStatement.java */ + + package sidekick.ecmascript.parser; + + public class ASTVariableStatement extends SimpleNode { - public ASTVariableStatement(int id) { - super(id); - } - public ASTVariableStatement(EcmaScript p, int id) { - super(p, id); - } + public ASTVariableStatement( int id ) { + super( id ); - /** Accept the visitor. **/ - public Object jjtAccept(EcmaScriptVisitor visitor, Object data) { - return visitor.visit(this, data); - } + } - public String toString() { - return jjtGetChild(0).jjtGetChild(0).toString(); - } - public boolean isVisible() { - return true; - } + public ASTVariableStatement( EcmaScript p, int id ) { + + super( p, id ); + + } + + + + + + /** Accept the visitor. **/ + + public Object jjtAccept( EcmaScriptVisitor visitor, Object data ) { + + return visitor.visit( this, data ); + + } + + + + public String toString() { + + boolean b = System.getProperty( "sidekick.ecmascript.general.allNodes", "false" ).startsWith("t"); + + if ( b ) { + + return super.toString(); + + } + + + try { + + return jjtGetChild( 0 ).jjtGetChild( 0 ).toString(); + + } + + catch ( NullPointerException npe ) { + + return super.toString(); + + } + + } + + + + public boolean isVisible() { + + return true; + + } + + + } Modified: plugins/XML/trunk/sidekick/ecmascript/parser/EcmaScript.java =================================================================== --- plugins/XML/trunk/sidekick/ecmascript/parser/EcmaScript.java 2006-10-18 13:47:24 UTC (rev 7617) +++ plugins/XML/trunk/sidekick/ecmascript/parser/EcmaScript.java 2006-10-18 19:45:28 UTC (rev 7618) @@ -81,6 +81,16 @@ } private void addException(ParseException pe) { + // check for a jsp tag, these can appear in several places and will cause + // a parse error, but they can be ignored. It's easier to catch them and + // ignore them than rewrite the grammar to allow them in all the appropriate + // places. + Token t = pe.currentToken; + if (t != null) { + if (t.next != null && t.next.image.startsWith("<%")) { + return; + } + } Range range = getExceptionLocation( pe ); parseErrors.add(new ParseError(pe.getMessage(), range)); } @@ -769,29 +779,62 @@ try { PropertyName(); jj_consume_token(COLON); - AssignmentExpression(); + if (jj_2_11(2147483647)) { + FunctionExpression(); + } else { + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case DELETE: + case FUNCTION: + case NEW: + case THIS: + case TYPEOF: + case VOID: + case LBRACE: + case LPAREN: + case LBRACKET: + case PLUS: + case MINUS: + case INCR: + case DECR: + case BANG: + case TILDE: + case DECIMAL_LITERAL: + case HEX_INTEGER_LITERAL: + case NULL_LITERAL: + case BOOLEAN_LITERAL: + case STRING_LITERAL: + case IDENTIFIER_NAME: + case REGULAR_EXPRESSION_LITERAL: + AssignmentExpression(); + break; + default: + jj_la1[9] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } } catch (ParseException pe) { addException(pe); } } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} + if (jjtc000) { + jjtree.clearNodeScope(jjtn000); + jjtc000 = false; + } else { + jjtree.popNode(); + } + if (jjte000 instanceof RuntimeException) { + {if (true) throw (RuntimeException)jjte000;} + } + if (jjte000 instanceof ParseException) { + {if (true) throw (ParseException)jjte000;} + } + {if (true) throw (Error)jjte000;} } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - jjtreeCloseNodeScope(jjtn000); - } + if (jjtc000) { + jjtree.closeNodeScope(jjtn000, true); + jjtreeCloseNodeScope(jjtn000); + } } } @@ -830,7 +873,7 @@ } break; default: - jj_la1[9] = jj_gen; + jj_la1[10] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -860,7 +903,7 @@ jjtree.openNodeScope(jjtn001); jjtreeOpenNodeScope(jjtn001); try { - if (jj_2_11(2147483647)) { + if (jj_2_12(2147483647)) { FunctionExpression(); } else { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { @@ -878,14 +921,14 @@ PrimaryExpression(); break; default: - jj_la1[10] = jj_gen; + jj_la1[11] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } label_4: while (true) { - if (jj_2_12(2)) { + if (jj_2_13(2)) { ; } else { break label_4; @@ -917,7 +960,7 @@ AllocationExpression(); break; default: - jj_la1[11] = jj_gen; + jj_la1[12] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -933,7 +976,7 @@ jjtree.openNodeScope(jjtn001); jjtreeOpenNodeScope(jjtn001); try { - if (jj_2_13(2147483647)) { + if (jj_2_14(2147483647)) { FunctionExpression(); } else { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { @@ -951,14 +994,14 @@ PrimaryExpression(); break; default: - jj_la1[12] = jj_gen; + jj_la1[13] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } label_5: while (true) { - if (jj_2_14(2)) { + if (jj_2_15(2)) { ; } else { break label_5; @@ -1007,7 +1050,7 @@ MemberExpression(); label_6: while (true) { - if (jj_2_15(2147483647)) { + if (jj_2_16(2147483647)) { ; } else { break label_6; @@ -1015,7 +1058,7 @@ Arguments(); label_7: while (true) { - if (jj_2_16(2)) { + if (jj_2_17(2)) { ; } else { break label_7; @@ -1131,7 +1174,7 @@ } break; default: - jj_la1[13] = jj_gen; + jj_la1[14] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1152,7 +1195,7 @@ Arguments(); label_8: while (true) { - if (jj_2_17(2)) { + if (jj_2_18(2)) { ; } else { break label_8; @@ -1196,7 +1239,7 @@ Arguments(); label_9: while (true) { - if (jj_2_18(2)) { + if (jj_2_19(2)) { ; } else { break label_9; @@ -1294,7 +1337,7 @@ } break; default: - jj_la1[14] = jj_gen; + jj_la1[15] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1338,7 +1381,7 @@ ArgumentList(); break; default: - jj_la1[15] = jj_gen; + jj_la1[16] = jj_gen; ; } jj_consume_token(RPAREN); @@ -1377,7 +1420,7 @@ ; break; default: - jj_la1[16] = jj_gen; + jj_la1[17] = jj_gen; break label_10; } jj_consume_token(COMMA); @@ -1390,7 +1433,7 @@ final public void LeftHandSideExpression() throws ParseException { try { - if (jj_2_19(2147483647)) { + if (jj_2_20(2147483647)) { CallExpression(); } else { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { @@ -1410,7 +1453,7 @@ MemberExpression(); break; default: - jj_la1[17] = jj_gen; + jj_la1[18] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1422,7 +1465,7 @@ final public void LeftHandSideExpressionForIn() throws ParseException { try { - if (jj_2_20(2147483647)) { + if (jj_2_21(2147483647)) { CallExpressionForIn(); } else { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { @@ -1441,7 +1484,7 @@ MemberExpressionForIn(); break; default: - jj_la1[18] = jj_gen; + jj_la1[19] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1467,7 +1510,7 @@ PostfixOperator(); break; default: - jj_la1[19] = jj_gen; + jj_la1[20] = jj_gen; ; } } catch (ParseException pe) { @@ -1511,7 +1554,7 @@ jj_consume_token(DECR); break; default: - jj_la1[20] = jj_gen; + jj_la1[21] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1577,13 +1620,13 @@ ; break; default: - jj_la1[21] = jj_gen; + jj_la1[22] = jj_gen; break label_11; } } break; default: - jj_la1[22] = jj_gen; + jj_la1[23] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1649,7 +1692,7 @@ jj_consume_token(BANG); break; default: - jj_la1[23] = jj_gen; + jj_la1[24] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1683,7 +1726,7 @@ ; break; default: - jj_la1[24] = jj_gen; + jj_la1[25] = jj_gen; break label_12; } MultiplicativeOperator(); @@ -1733,7 +1776,7 @@ jj_consume_token(REM); break; default: - jj_la1[25] = jj_gen; + jj_la1[26] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1766,7 +1809,7 @@ ; break; default: - jj_la1[26] = jj_gen; + jj_la1[27] = jj_gen; break label_13; } AdditiveOperator(); @@ -1813,7 +1856,7 @@ jj_consume_token(MINUS); break; default: - jj_la1[27] = jj_gen; + jj_la1[28] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1847,7 +1890,7 @@ ; break; default: - jj_la1[28] = jj_gen; + jj_la1[29] = jj_gen; break label_14; } ShiftOperator(); @@ -1897,7 +1940,7 @@ jj_consume_token(RUNSHIFT); break; default: - jj_la1[29] = jj_gen; + jj_la1[30] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1934,7 +1977,7 @@ ; break; default: - jj_la1[30] = jj_gen; + jj_la1[31] = jj_gen; break label_15; } RelationalOperator(); @@ -1993,7 +2036,7 @@ jj_consume_token(IN); break; default: - jj_la1[31] = jj_gen; + jj_la1[32] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2028,7 +2071,7 @@ ; break; default: - jj_la1[32] = jj_gen; + jj_la1[33] = jj_gen; break label_16; } RelationalNoInOperator(); @@ -2084,7 +2127,7 @@ jj_consume_token(INTANCE_OF); break; default: - jj_la1[33] = jj_gen; + jj_la1[34] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2119,7 +2162,7 @@ ; break; default: - jj_la1[34] = jj_gen; + jj_la1[35] = jj_gen; break label_17; } EqualityOperator(); @@ -2169,7 +2212,7 @@ ; break; default: - jj_la1[35] = jj_gen; + jj_la1[36] = jj_gen; break label_18; } EqualityOperator(); @@ -2222,7 +2265,7 @@ jj_consume_token(SNEQ); break; default: - jj_la1[36] = jj_gen; + jj_la1[37] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2254,7 +2297,7 @@ ; break; default: - jj_la1[37] = jj_gen; + jj_la1[38] = jj_gen; break label_19; } BitwiseANDOperator(); @@ -2301,7 +2344,7 @@ ; break; default: - jj_la1[38] = jj_gen; + jj_la1[39] = jj_gen; break label_20; } BitwiseANDOperator(); @@ -2368,7 +2411,7 @@ ; break; default: - jj_la1[39] = jj_gen; + jj_la1[40] = jj_gen; break label_21; } BitwiseXOROperator(); @@ -2415,7 +2458,7 @@ ; break; default: - jj_la1[40] = jj_gen; + jj_la1[41] = jj_gen; break label_22; } BitwiseXOROperator(); @@ -2482,7 +2525,7 @@ ; break; default: - jj_la1[41] = jj_gen; + jj_la1[42] = jj_gen; break label_23; } BitwiseOROperator(); @@ -2529,7 +2572,7 @@ ; break; default: - jj_la1[42] = jj_gen; + jj_la1[43] = jj_gen; break label_24; } BitwiseOROperator(); @@ -2597,7 +2640,7 @@ ; break; default: - jj_la1[43] = jj_gen; + jj_la1[44] = jj_gen; break label_25; } LogicalANDOperator(); @@ -2644,7 +2687,7 @@ ; break; default: - jj_la1[44] = jj_gen; + jj_la1[45] = jj_gen; break label_26; } LogicalANDOperator(); @@ -2711,7 +2754,7 @@ ; break; default: - jj_la1[45] = jj_gen; + jj_la1[46] = jj_gen; break label_27; } LogicalOROperator(); @@ -2758,7 +2801,7 @@ ; break; default: - jj_la1[46] = jj_gen; + jj_la1[47] = jj_gen; break label_28; } LogicalOROperator(); @@ -2827,7 +2870,7 @@ AssignmentExpression(); break; default: - jj_la1[47] = jj_gen; + jj_la1[48] = jj_gen; ; } } catch (ParseException pe) { @@ -2872,7 +2915,7 @@ AssignmentExpressionNoIn(); break; default: - jj_la1[48] = jj_gen; + jj_la1[49] = jj_gen; ; } } catch (ParseException pe) { @@ -2909,7 +2952,7 @@ jjtreeOpenNodeScope(jjtn000); try { try { - if (jj_2_21(2147483647)) { + if (jj_2_22(2147483647)) { LeftHandSideExpression(); AssignmentOperator(); AssignmentExpression(); @@ -2940,7 +2983,7 @@ ConditionalExpression(); break; default: - jj_la1[49] = jj_gen; + jj_la1[50] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2978,7 +3021,7 @@ jjtreeOpenNodeScope(jjtn000); try { try { - if (jj_2_22(2147483647)) { + if (jj_2_23(2147483647)) { LeftHandSideExpression(); AssignmentOperator(); AssignmentExpressionNoIn(); @@ -3009,7 +3052,7 @@ ConditionalExpressionNoIn(); break; default: - jj_la1[50] = jj_gen; + jj_la1[51] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -3085,7 +3128,7 @@ jj_consume_token(ORASSIGN); break; default: - jj_la1[51] = jj_gen; + jj_la1[52] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -3117,7 +3160,7 @@ ; break; default: - jj_la1[52] = jj_gen; + jj_la1[53] = jj_gen; break label_29; } jj_consume_token(COMMA); @@ -3158,7 +3201,7 @@ ; break; default: - jj_la1[53] = jj_gen; + jj_la1[54] = jj_gen; break label_30; } jj_consume_token(COMMA); @@ -3172,11 +3215,11 @@ /* Section 12: STATEMENTS */ final public void Statement() throws ParseException { try { - if (jj_2_23(2147483647)) { + if (jj_2_24(2147483647)) { Block(); - } else if (jj_2_24(2147483647)) { + } else if (jj_2_25(2147483647)) { JScriptVarStatement(); - } else if (jj_2_25(2147483647)) { + } else if (jj_2_26(2147483647)) { VariableStatement(); } else { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { @@ -3184,12 +3227,12 @@ EmptyStatement(); break; default: - jj_la1[54] = jj_gen; - if (jj_2_26(2147483647)) { + jj_la1[55] = jj_gen; + if (jj_2_27(2147483647)) { LabelledStatement(); - } else if (jj_2_27(2147483647)) { + } else if (jj_2_28(2147483647)) { ExpressionStatement(); - } else if (jj_2_28(2147483647)) { + } else if (jj_2_29(2147483647)) { IfStatement(); } else { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { @@ -3199,12 +3242,12 @@ IterationStatement(); break; default: - jj_la1[55] = jj_gen; - if (jj_2_29(2147483647)) { + jj_la1[56] = jj_gen; + if (jj_2_30(2147483647)) { ContinueStatement(); - } else if (jj_2_30(2147483647)) { + } else if (jj_2_31(2147483647)) { BreakStatement(); - } else if (jj_2_31(2147483647)) { + } else if (jj_2_32(2147483647)) { ImportStatement(); } else { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { @@ -3224,7 +3267,7 @@ TryStatement(); break; default: - jj_la1[56] = jj_gen; + jj_la1[57] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -3288,7 +3331,7 @@ StatementList(); break; default: - jj_la1[57] = jj_gen; + jj_la1[58] = jj_gen; ; } jj_consume_token(RBRACE); @@ -3368,7 +3411,7 @@ ; break; default: - jj_la1[58] = jj_gen; + jj_la1[59] = jj_gen; break label_31; } } @@ -3408,7 +3451,7 @@ try { jj_consume_token(VAR); VariableDeclarationList(); - if (jj_2_32(2)) { + if (jj_2_33(2)) { jj_consume_token(SEMICOLON); } else { ; @@ -3454,7 +3497,7 @@ ; break; default: - jj_la1[59] = jj_gen; + jj_la1[60] = jj_gen; break label_32; } jj_consume_token(COMMA); @@ -3501,7 +3544,7 @@ ; break; default: - jj_la1[60] = jj_gen; + jj_la1[61] = jj_gen; break label_33; } jj_consume_token(COMMA); @@ -3546,7 +3589,7 @@ Initialiser(); break; default: - jj_la1[61] = jj_gen; + jj_la1[62] = jj_gen; ; } } catch (ParseException pe) { @@ -3587,7 +3630,7 @@ InitialiserNoIn(); break; default: - jj_la1[62] = jj_gen; + jj_la1[63] = jj_gen; ; } } catch (Throwable jjte001) { @@ -3664,7 +3707,7 @@ try { try { Expression(); - if (jj_2_33(2)) { + if (jj_2_34(2)) { jj_consume_token(SEMICOLON); } else { ; @@ -3714,7 +3757,7 @@ Statement(); break; default: - jj_la1[63] = jj_gen; + jj_la1[64] = jj_gen; ; } } catch (ParseException pe) { @@ -3758,7 +3801,7 @@ jj_consume_token(LPAREN); Expression(); jj_consume_token(RPAREN); - if (jj_2_34(2)) { + if (jj_2_35(2)) { jj_consume_token(SEMICOLON); } else { ; @@ -3817,8 +3860,8 @@ } break; default: - jj_la1[69] = jj_gen; - if (jj_2_35(2147483647)) { + jj_la1[70] = jj_gen; + if (jj_2_36(2147483647)) { ASTForStatement jjtn006 = new ASTForStatement(JJTFORSTATEMENT); boolean jjtc006 = true; jjtree.openNodeScope(jjtn006); @@ -3857,7 +3900,7 @@ ExpressionNoIn(); break; default: - jj_la1[64] = jj_gen; + jj_la1[65] = jj_gen; ; } } catch (Throwable jjte003) { @@ -3912,7 +3955,7 @@ Expression(); break; default: - jj_la1[65] = jj_gen; + jj_la1[66] = jj_gen; ; } } catch (Throwable jjte004) { @@ -3967,7 +4010,7 @@ Expression(); break; default: - jj_la1[66] = jj_gen; + jj_la1[67] = jj_gen; ; } } catch (Throwable jjte005) { @@ -4012,7 +4055,7 @@ jjtreeCloseNodeScope(jjtn006); } } - } else if (jj_2_36(2147483647)) { + } else if (jj_2_37(2147483647)) { ASTForVarStatement jjtn009 = new ASTForVarStatement(JJTFORVARSTATEMENT); boolean jjtc009 = true; jjtree.openNodeScope(jjtn009); @@ -4054,7 +4097,7 @@ Expression(); break; default: - jj_la1[67] = jj_gen; + jj_la1[68] = jj_gen; ; } } catch (Throwable jjte007) { @@ -4109,7 +4152,7 @@ Expression(); break; default: - jj_la1[68] = jj_gen; + jj_la1[69] = jj_gen; ; } } catch (Throwable jjte008) { @@ -4154,7 +4197,7 @@ jjtreeCloseNodeScope(jjtn009); } } - } else if (jj_2_37(2147483647)) { + } else if (jj_2_38(2147483647)) { ASTForVarInStatement jjtn010 = new ASTForVarInStatement(JJTFORVARINSTATEMENT); boolean jjtc010 = true; jjtree.openNodeScope(jjtn010); @@ -4225,7 +4268,7 @@ } break; default: - jj_la1[70] = jj_gen; + jj_la1[71] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -4246,12 +4289,12 @@ try { try { jj_consume_token(CONTINUE); - if (jj_2_38(2147483647)) { + if (jj_2_39(2147483647)) { Identifier(); } else { ; } - if (jj_2_39(2147483647)) { + if (jj_2_40(2147483647)) { jj_consume_token(SEMICOLON); } else { ; @@ -4291,12 +4334,12 @@ try { try { jj_consume_token(BREAK); - if (jj_2_40(2147483647)) { + if (jj_2_41(2147483647)) { Identifier(); } else { ; } - if (jj_2_41(2147483647)) { + if (jj_2_42(2147483647)) { jj_consume_token(SEMICOLON); } else { ; @@ -4341,7 +4384,7 @@ jjtree.openNodeScope(jjtn001); jjtreeOpenNodeScope(jjtn001); try { - if (jj_2_42(2147483647)) { + if (jj_2_43(2147483647)) { Expression(); } else { ; @@ -4366,7 +4409,7 @@ jjtreeCloseNodeScope(jjtn001); } } - if (jj_2_43(2147483647)) { + if (jj_2_44(2147483647)) { jj_consume_token(SEMICOLON); } else { ; @@ -4488,7 +4531,7 @@ CaseClauses(); break; default: - jj_la1[71] = jj_gen; + jj_la1[72] = jj_gen; ; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { @@ -4502,13 +4545,13 @@ CaseClauses(); break; default: - jj_la1[72] = jj_gen; + jj_la1[73] = jj_gen; ; } jj_consume_token(RBRACE); break; default: - jj_la1[73] = jj_gen; + jj_la1[74] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -4547,7 +4590,7 @@ ; break; default: - jj_la1[74] = jj_gen; + jj_la1[75] = jj_gen; break label_34; } } @@ -4632,7 +4675,7 @@ StatementList(); break; default: - jj_la1[75] = jj_gen; + jj_la1[76] = jj_gen; ; } } catch (ParseException pe) { @@ -4721,7 +4764,7 @@ StatementList(); break; default: - jj_la1[76] = jj_gen; + jj_la1[77] = jj_gen; ; } } catch (ParseException pe) { @@ -4770,7 +4813,7 @@ try { jj_consume_token(THROW); Expression(); - if (jj_2_44(2147483647)) { + if (jj_2_45(2147483647)) { jj_consume_token(SEMICOLON); } else { ; @@ -4821,12 +4864,12 @@ Finally(); break; default: - jj_la1[77] = jj_gen; + jj_la1[78] = jj_gen; ; } break; default: - jj_la1[78] = jj_gen; + jj_la1[79] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -4950,7 +4993,7 @@ FormalParameterList(); break; default: - jj_la1[79] = jj_gen; + jj_la1[80] = jj_gen; ; } jj_consume_token(RPAREN); @@ -5001,8 +5044,8 @@ } final public void FunctionExpression() throws ParseException { - /*@bgen(jjtree) FunctionDeclaration */ - ASTFunctionDeclaration jjtn000 = new ASTFunctionDeclaration(JJTFUNCTIONDECLARATION); + /*@bgen(jjtree) FunctionExpression */ + ASTFunctionExpression jjtn000 = new ASTFunctionExpression(JJTFUNCTIONEXPRESSION); boolean jjtc000 = true; jjtree.openNodeScope(jjtn000); jjtreeOpenNodeScope(jjtn000); @@ -5014,7 +5057,7 @@ Identifier(); break; default: - jj_la1[80] = jj_gen; + jj_la1[81] = jj_gen; ; } ASTFormalParameterList jjtn001 = new ASTFormalParameterList(JJTFORMALPARAMETERLIST); @@ -5028,7 +5071,7 @@ FormalParameterList(); break; default: - jj_la1[81] = jj_gen; + jj_la1[82] = jj_gen; ; } jj_consume_token(RPAREN); @@ -5057,24 +5100,24 @@ addException(pe); } } catch (Throwable jjte000) { - if (jjtc000) { - jjtree.clearNodeScope(jjtn000); - jjtc000 = false; - } else { - jjtree.popNode(); - } - if (jjte000 instanceof RuntimeException) { - {if (true) throw (RuntimeException)jjte000;} - } - if (jjte000 instanceof ParseException) { - {if (true) throw (ParseException)jjte000;} - } - {if (true) throw (Error)jjte000;} + if (jjtc000) { + jjtree.clearNodeScope(jjtn000); + jjtc000 = false; + } else { + jjtree.popNode(); + } + if (jjte000 instanceof RuntimeException) { + {if (true) throw (RuntimeException)jjte000;} + } + if (jjte000 instanceof ParseException) { + {if (true) throw (ParseException)jjte000;} + } + {if (true) throw (Error)jjte000;} } finally { - if (jjtc000) { - jjtree.closeNodeScope(jjtn000, true); - jjtreeCloseNodeScope(jjtn000); - } + if (jjtc000) { + jjtree.closeNodeScope(jjtn000, true); + jjtreeCloseNodeScope(jjtn000); + } } } @@ -5088,7 +5131,7 @@ ; break; default: - jj_la1[82] = jj_gen; + jj_la1[83] = jj_gen; break label_35; } jj_consume_token(COMMA); @@ -5148,7 +5191,7 @@ SourceElements(); break; default: - jj_la1[83] = jj_gen; + jj_la1[84] = jj_gen; ; } jj_consume_token(RBRACE); @@ -5226,7 +5269,7 @@ SourceElements(); break; default: - jj_la1[84] = jj_gen; + jj_la1[85] = jj_gen; ; } jj_consume_token(0); @@ -5306,7 +5349,7 @@ ; break; default: - jj_la1[85] = jj_gen; + jj_la1[86] = jj_gen; break label_36; } } @@ -5317,7 +5360,7 @@ final public void SourceElement() throws ParseException { try { - if (jj_2_45(2147483647)) { + if (jj_2_46(2147483647)) { FunctionDeclaration(); } else { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { @@ -5360,7 +5403,7 @@ Statement(); break; default: - jj_la1[86] = jj_gen; + jj_la1[87] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -5384,7 +5427,7 @@ jj_consume_token(STAR); break; default: - jj_la1[87] = jj_gen; + jj_la1[88] = jj_gen; ; } jj_consume_token(SEMICOLON); @@ -5398,7 +5441,7 @@ jj_consume_token(IDENTIFIER_NAME); label_37: while (true) { - if (jj_2_46(2)) { + if (jj_2_47(2)) { ; } else { break label_37; @@ -5421,7 +5464,7 @@ try { jj_consume_token(VAR); JScriptVarDeclarationList(); - if (jj_2_47(2)) { + if (jj_2_48(2)) { jj_consume_token(SEMICOLON); } else { ; @@ -5467,7 +5510,7 @@ ; break; default: - jj_la1[88] = jj_gen; + jj_la1[89] = jj_gen; break label_38; } jj_consume_token(COMMA); @@ -5520,7 +5563,7 @@ Initialiser(); break; default: - jj_la1[89] = jj_gen; + jj_la1[90] = jj_gen; ; } } catch (ParseException pe) { @@ -5903,99 +5946,23 @@ finally { jj_save(46, xla); } } - final private boolean jj_3R_52() { - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(85)) { - jj_scanpos = xsp; - if (jj_scan_token(88)) { - jj_scanpos = xsp; - if (jj_scan_token(129)) { - jj_scanpos = xsp; - if (jj_scan_token(89)) { - jj_scanpos = xsp; - if (jj_scan_token(86)) { - jj_scanpos = xsp; - if (jj_scan_token(87)) { - jj_scanpos = xsp; - if (jj_scan_token(90)) { - jj_scanpos = xsp; - if (jj_scan_token(91)) { - jj_scanpos = xsp; - if (jj_scan_token(92)) { - jj_scanpos = xsp; - if (jj_scan_token(93)) { - jj_scanpos = xsp; - if (jj_scan_token(95)) { - jj_scanpos = xsp; - if (jj_scan_token(94)) return true; - } - } - } - } - } - } - } - } - } - } - } - return false; + final private boolean jj_2_48(int xla) { + jj_la = xla; jj_lastpos = jj_scanpos = token; + try { return !jj_3_48(); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(47, xla); } } - final private boolean jj_3R_150() { + final private boolean jj_3R_108() { if (jj_scan_token(HOOK)) return true; if (jj_3R_44()) return true; if (jj_scan_token(COLON)) return true; - if (jj_3R_98()) return true; - return false; - } - - final private boolean jj_3R_111() { - if (jj_3R_51()) return true; - if (jj_3R_52()) return true; - if (jj_3R_98()) return true; - return false; - } - - final private boolean jj_3R_112() { - if (jj_3R_126()) return true; - return false; - } - - final private boolean jj_3_21() { - if (jj_3R_51()) return true; - if (jj_3R_52()) return true; - return false; - } - - final private boolean jj_3R_98() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_111()) { - jj_scanpos = xsp; - if (jj_3R_112()) return true; - } - return false; - } - - final private boolean jj_3R_68() { - if (jj_3R_51()) return true; - if (jj_3R_52()) return true; if (jj_3R_44()) return true; return false; } - final private boolean jj_3R_105() { - if (jj_scan_token(HOOK)) return true; - if (jj_3R_44()) return true; - if (jj_scan_token(COLON)) return true; - if (jj_3R_44()) return true; - return false; - } - final private boolean jj_3R_69() { - if (jj_3R_89()) return true; + if (jj_3R_91()) return true; return false; } @@ -6009,350 +5976,350 @@ return false; } - final private boolean jj_3R_173() { - if (jj_3R_130()) return true; - if (jj_3R_172()) return true; + final private boolean jj_3R_175() { + if (jj_3R_132()) return true; + if (jj_3R_174()) return true; return false; } - final private boolean jj_3R_126() { - if (jj_3R_149()) return true; + final private boolean jj_3R_128() { + if (jj_3R_151()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_150()) jj_scanpos = xsp; + if (jj_3R_152()) jj_scanpos = xsp; return false; } - final private boolean jj_3R_89() { - if (jj_3R_104()) return true; + final private boolean jj_3R_91() { + if (jj_3R_107()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_105()) jj_scanpos = xsp; + if (jj_3R_108()) jj_scanpos = xsp; return false; } - final private boolean jj_3R_117() { - if (jj_3R_130()) return true; - if (jj_3R_116()) return true; + final private boolean jj_3R_121() { + if (jj_3R_132()) return true; + if (jj_3R_120()) return true; return false; } - final private boolean jj_3R_130() { + final private boolean jj_3R_132() { if (jj_scan_token(SC_OR)) return true; return false; } - final private boolean jj_3R_198() { - if (jj_3R_154()) return true; - if (jj_3R_197()) return true; + final private boolean jj_3R_200() { + if (jj_3R_156()) return true; + if (jj_3R_199()) return true; return false; } - final private boolean jj_3R_149() { - if (jj_3R_172()) return true; + final private boolean jj_3R_151() { + if (jj_3R_174()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_173()) { jj_scanpos = xsp; break; } + if (jj_3R_175()) { jj_scanpos = xsp; break; } } return false; } - final private boolean jj_3R_104() { - if (jj_3R_116()) return true; + final private boolean jj_3R_107() { + if (jj_3R_120()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_117()) { jj_scanpos = xsp; break; } + if (jj_3R_121()) { jj_scanpos = xsp; break; } } return false; } - final private boolean jj_3R_129() { - if (jj_3R_154()) return true; - if (jj_3R_128()) return true; + final private boolean jj_3R_131() { + if (jj_3R_156()) return true; + if (jj_3R_130()) return true; return false; } - final private boolean jj_3R_154() { + final private boolean jj_3R_156() { if (jj_scan_token(SC_AND)) return true; return false; } - final private boolean jj_3R_217() { - if (jj_3R_178()) return true; - if (jj_3R_216()) return true; + final private boolean jj_3R_219() { + if (jj_3R_180()) return true; + if (jj_3R_218()) return true; return false; } - final private boolean jj_3R_172() { - if (jj_3R_197()) return true; + final private boolean jj_3R_174() { + if (jj_3R_199()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_198()) { jj_scanpos = xsp; break; } + if (jj_3R_200()) { jj_scanpos = xsp; break; } } return false; } - final private boolean jj_3R_116() { - if (jj_3R_128()) return true; + final private boolean jj_3R_120() { + if (jj_3R_130()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_129()) { jj_scanpos = xsp; break; } + if (jj_3R_131()) { jj_scanpos = xsp; break; } } return false; } - final private boolean jj_3R_153() { - if (jj_3R_178()) return true; - if (jj_3R_152()) return true; + final private boolean jj_3R_155() { + if (jj_3R_180()) return true; + if (jj_3R_154()) return true; return false; } - final private boolean jj_3R_178() { + final private boolean jj_3R_180() { if (jj_scan_token(BIT_OR)) return true; return false; } - final private boolean jj_3R_229() { - if (jj_3R_201()) return true; - if (jj_3R_228()) return true; + final private boolean jj_3R_231() { + if (jj_3R_203()) return true; + if (jj_3R_230()) return true; return false; } - final private boolean jj_3R_197() { - if (jj_3R_216()) return true; + final private boolean jj_3R_199() { + if (jj_3R_218()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_217()) { jj_scanpos = xsp; break; } + if (jj_3R_219()) { jj_scanpos = xsp; break; } } return false; } - final private boolean jj_3R_128() { - if (jj_3R_152()) return true; + final private boolean jj_3R_130() { + if (jj_3R_154()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_153()) { jj_scanpos = xsp; break; } + if (jj_3R_155()) { jj_scanpos = xsp; break; } } return false; } - final private boolean jj_3R_177() { - if (jj_3R_201()) return true; - if (jj_3R_176()) return true; + final private boolean jj_3R_179() { + if (jj_3R_203()) return true; + if (jj_3R_178()) return true; return false; } - final private boolean jj_3R_201() { + final private boolean jj_3R_203() { if (jj_scan_token(XOR)) return true; return false; } - final private boolean jj_3R_222() { - if (jj_3R_113()) return true; + final private boolean jj_3R_224() { + if (jj_3R_117()) return true; return false; } - final private boolean jj_3R_238() { - if (jj_3R_220()) return true; - if (jj_3R_237()) return true; + final private boolean jj_3R_240() { + if (jj_3R_222()) return true; + if (jj_3R_239()) return true; return false; } - final private boolean jj_3R_216() { - if (jj_3R_228()) return true; + final private boolean jj_3R_218() { + if (jj_3R_230()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_229()) { jj_scanpos = xsp; break; } + if (jj_3R_231()) { jj_scanpos = xsp; break; } } return false; } - final private boolean jj_3R_152() { - if (jj_3R_176()) return true; + final private boolean jj_3R_154() { + if (jj_3R_178()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_177()) { jj_scanpos = xsp; break; } + if (jj_3R_179()) { jj_scanpos = xsp; break; } } return false; } - final private boolean jj_3R_200() { - if (jj_3R_220()) return true; - if (jj_3R_199()) return true; + final private boolean jj_3R_202() { + if (jj_3R_222()) return true; + if (jj_3R_201()) return true; return false; } - final private boolean jj_3R_220() { + final private boolean jj_3R_222() { if (jj_scan_token(BIT_AND)) return true; return false; } - final private boolean jj_3R_204() { + final private boolean jj_3R_206() { if (jj_scan_token(COMMA)) return true; - if (jj_3R_203()) return true; + if (jj_3R_205()) return true; return false; } - final private boolean jj_3_47() { + final private boolean jj_3_48() { if (jj_scan_token(SEMICOLON)) return true; return false; } - final private boolean jj_3R_246() { - if (jj_3R_232()) return true; - if (jj_3R_245()) return true; + final private boolean jj_3R_248() { + if (jj_3R_234()) return true; + if (jj_3R_247()) return true; return false; } - final private boolean jj_3R_228() { - if (jj_3R_237()) return true; + final private boolean jj_3R_230() { + if (jj_3R_239()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_238()) { jj_scanpos = xsp; break; } + if (jj_3R_240()) { jj_scanpos = xsp; break; } } return false; } - final private boolean jj_3R_203() { + final private boolean jj_3R_205() { if (jj_3R_39()) return true; if (jj_scan_token(COLON)) return true; if (jj_scan_token(IDENTIFIER_NAME)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_222()) jj_scanpos = xsp; + if (jj_3R_224()) jj_scanpos = xsp; return false; } - final private boolean jj_3R_176() { - if (jj_3R_199()) return true; + final private boolean jj_3R_178() { + if (jj_3R_201()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_200()) { jj_scanpos = xsp; break; } + if (jj_3R_202()) { jj_scanpos = xsp; break; } } return false; } - final private boolean jj_3R_175() { - if (jj_3R_125()) return true; + final private boolean jj_3R_177() { + if (jj_3R_127()) return true; return false; } - final private boolean jj_3R_219() { - if (jj_3R_232()) return true; - if (jj_3R_218()) return true; + final private boolean jj_3R_221() { + if (jj_3R_234()) return true; + if (jj_3R_220()) return true; return false; } - final private boolean jj_3_46() { + final private boolean jj_3_47() { if (jj_scan_token(DOT)) return true; if (jj_scan_token(IDENTIFIER_NAME)) return true; return false; } - final private boolean jj_3R_232() { + final private boolean jj_3R_234() { Token xsp; xsp = jj_scanpos; - if (jj_scan_token(63)) { + if (jj_scan_token(65)) { jj_scanpos = xsp; - if (jj_scan_token(64)) { + if (jj_scan_token(66)) { jj_scanpos = xsp; - if (jj_scan_token(65)) { + if (jj_scan_token(67)) { jj_scanpos = xsp; - if (jj_scan_token(66)) return true; + if (jj_scan_token(68)) return true; } } } return false; } - final private boolean jj_3R_181() { - if (jj_3R_203()) return true; + final private boolean jj_3R_183() { + if (jj_3R_205()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_204()) { jj_scanpos = xsp; break; } + if (jj_3R_206()) { jj_scanpos = xsp; break; } } return false; } - final private boolean jj_3R_192() { + final private boolean jj_3R_194() { if (jj_scan_token(DOT)) return true; if (jj_scan_token(STAR)) return true; return false; } - final private boolean jj_3R_237() { - if (jj_3R_245()) return true; + final private boolean jj_3R_239() { + if (jj_3R_247()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_246()) { jj_scanpos = xsp; break; } + if (jj_3R_248()) { jj_scanpos = xsp; break; } } return false; } - final private boolean jj_3R_158() { + final private boolean jj_3R_160() { if (jj_scan_token(VAR)) return true; - if (jj_3R_181()) return true; + if (jj_3R_183()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3_47()) jj_scanpos = xsp; + if (jj_3_48()) jj_scanpos = xsp; return false; } - final private boolean jj_3R_251() { - if (jj_3R_255()) return true; - if (jj_3R_230()) return true; + final private boolean jj_3R_253() { + if (jj_3R_257()) return true; + if (jj_3R_232()) return true; return false; } - final private boolean jj_3R_199() { - if (jj_3R_218()) return true; + final private boolean jj_3R_201() { + if (jj_3R_220()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_219()) { jj_scanpos = xsp; break; } + if (jj_3R_221()) { jj_scanpos = xsp; break; } } return false; } - final private boolean jj_3R_191() { + final private boolean jj_3R_193() { if (jj_scan_token(IDENTIFIER_NAME)) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3_46()) { jj_scanpos = xsp; break; } + if (jj_3_47()) { jj_scanpos = xsp; break; } } return false; } - final private boolean jj_3_45() { + final private boolean jj_3_46() { if (jj_3R_59()) return true; return false; } - final private boolean jj_3R_255() { + final private boolean jj_3R_257() { Token xsp; xsp = jj_scanpos; - if (jj_scan_token(59)) { - jj_scanpos = xsp; - if (j... [truncated message content] |
From: <ez...@us...> - 2007-01-18 05:33:30
|
Revision: 8663 http://svn.sourceforge.net/jedit/?rev=8663&view=rev Author: ezust Date: 2007-01-17 21:33:28 -0800 (Wed, 17 Jan 2007) Log Message: ----------- Cosmetic changes, and added a tooltip for auto-close after </ that indicates a sidekick option (complete immediately when possible) will be enabled automagically. Modified Paths: -------------- plugins/XML/trunk/XML.props plugins/XML/trunk/sidekick/css/CSS2SideKickParser.java plugins/XML/trunk/sidekick/javascript/JavaScriptSideKickPlugin.java plugins/XML/trunk/xml/Resolver.java plugins/XML/trunk/xml/XmlListCellRenderer.java plugins/XML/trunk/xml/XmlParsedData.java plugins/XML/trunk/xml/completion/CompletionInfoHandler.java plugins/XML/trunk/xml/completion/ElementDecl.java plugins/XML/trunk/xml/completion/IDDecl.java plugins/XML/trunk/xml/options/GeneralOptionPane.java Modified: plugins/XML/trunk/XML.props =================================================================== --- plugins/XML/trunk/XML.props 2007-01-17 22:42:20 UTC (rev 8662) +++ plugins/XML/trunk/XML.props 2007-01-18 05:33:28 UTC (rev 8663) @@ -87,6 +87,7 @@ options.xml.general.show-attributes.id-only=ID only options.xml.general.show-attributes.all=All options.xml.general.close-complete=Insert closing tag when "</" is typed +options.xml.general.close-complete.tooltip=Also enables SideKick "complete immediately when possible" option options.xml.general.close-complete-open=Insert closing tag when opening tag is typed options.xml.general.standalone-extra-space=Space before "/>" in stand-alone tags Modified: plugins/XML/trunk/sidekick/css/CSS2SideKickParser.java =================================================================== --- plugins/XML/trunk/sidekick/css/CSS2SideKickParser.java 2007-01-17 22:42:20 UTC (rev 8662) +++ plugins/XML/trunk/sidekick/css/CSS2SideKickParser.java 2007-01-18 05:33:28 UTC (rev 8663) @@ -43,7 +43,6 @@ import errorlist.ErrorSource; import sidekick.*; -import sidekick.enhanced.*; import sidekick.util.*; import sidekick.css.parser.CSSNode; Modified: plugins/XML/trunk/sidekick/javascript/JavaScriptSideKickPlugin.java =================================================================== --- plugins/XML/trunk/sidekick/javascript/JavaScriptSideKickPlugin.java 2007-01-17 22:42:20 UTC (rev 8662) +++ plugins/XML/trunk/sidekick/javascript/JavaScriptSideKickPlugin.java 2007-01-18 05:33:28 UTC (rev 8663) @@ -21,7 +21,6 @@ */ package sidekick.javascript; -import org.gjt.sp.jedit.*; /** * Description of the Class Modified: plugins/XML/trunk/xml/Resolver.java =================================================================== --- plugins/XML/trunk/xml/Resolver.java 2007-01-17 22:42:20 UTC (rev 8662) +++ plugins/XML/trunk/xml/Resolver.java 2007-01-18 05:33:28 UTC (rev 8663) @@ -9,7 +9,6 @@ import java.io.IOException; import java.io.StringReader; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -18,11 +17,6 @@ import javax.swing.SwingUtilities; import org.apache.xerces.util.XMLCatalogResolver; -import org.apache.xerces.xni.XMLResourceIdentifier; -import org.apache.xerces.xni.XNIException; -import org.apache.xerces.xni.parser.XMLEntityResolver; -import org.apache.xerces.xni.parser.XMLInputSource; -import org.apache.xml.resolver.Catalog; import org.gjt.sp.jedit.Buffer; import org.gjt.sp.jedit.GUIUtilities; import org.gjt.sp.jedit.MiscUtilities; @@ -34,12 +28,7 @@ import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.ext.DefaultHandler2; -import org.xml.sax.ext.EntityResolver2; -import xml.CatalogManager.Entry; - - - /** * Resolver grabs and caches DTDs and xml schemas. * It also serves as a resource resolver for jeditresource: links Modified: plugins/XML/trunk/xml/XmlListCellRenderer.java =================================================================== --- plugins/XML/trunk/xml/XmlListCellRenderer.java 2007-01-17 22:42:20 UTC (rev 8662) +++ plugins/XML/trunk/xml/XmlListCellRenderer.java 2007-01-18 05:33:28 UTC (rev 8663) @@ -18,7 +18,6 @@ //{{{ Imports import javax.swing.*; import java.awt.Component; -import org.gjt.sp.jedit.jEdit; import xml.completion.*; import xml.completion.ElementDecl.AttributeDecl; //}}} Modified: plugins/XML/trunk/xml/XmlParsedData.java =================================================================== --- plugins/XML/trunk/xml/XmlParsedData.java 2007-01-17 22:42:20 UTC (rev 8662) +++ plugins/XML/trunk/xml/XmlParsedData.java 2007-01-18 05:33:28 UTC (rev 8663) @@ -17,7 +17,6 @@ //{{{ Imports import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; Modified: plugins/XML/trunk/xml/completion/CompletionInfoHandler.java =================================================================== --- plugins/XML/trunk/xml/completion/CompletionInfoHandler.java 2007-01-17 22:42:20 UTC (rev 8662) +++ plugins/XML/trunk/xml/completion/CompletionInfoHandler.java 2007-01-18 05:33:28 UTC (rev 8663) @@ -20,7 +20,6 @@ import org.gjt.sp.jedit.jEdit; import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.*; -import xml.parser.*; import xml.*; //}}} Modified: plugins/XML/trunk/xml/completion/ElementDecl.java =================================================================== --- plugins/XML/trunk/xml/completion/ElementDecl.java 2007-01-17 22:42:20 UTC (rev 8662) +++ plugins/XML/trunk/xml/completion/ElementDecl.java 2007-01-18 05:33:28 UTC (rev 8663) @@ -19,7 +19,6 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; Modified: plugins/XML/trunk/xml/completion/IDDecl.java =================================================================== --- plugins/XML/trunk/xml/completion/IDDecl.java 2007-01-17 22:42:20 UTC (rev 8662) +++ plugins/XML/trunk/xml/completion/IDDecl.java 2007-01-18 05:33:28 UTC (rev 8663) @@ -16,7 +16,6 @@ package xml.completion; //{{{ Imports -import javax.swing.text.Position; import org.gjt.sp.jedit.MiscUtilities; //}}} Modified: plugins/XML/trunk/xml/options/GeneralOptionPane.java =================================================================== --- plugins/XML/trunk/xml/options/GeneralOptionPane.java 2007-01-17 22:42:20 UTC (rev 8662) +++ plugins/XML/trunk/xml/options/GeneralOptionPane.java 2007-01-18 05:33:28 UTC (rev 8663) @@ -16,11 +16,13 @@ package xml.options; //{{{ Imports -import javax.swing.*; -import org.gjt.sp.jedit.*; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import org.gjt.sp.jedit.AbstractOptionPane; +import org.gjt.sp.jedit.jEdit; + import xml.Resolver; -//}}} public class GeneralOptionPane extends AbstractOptionPane { @@ -86,16 +88,20 @@ showAttributes.setSelectedIndex(jEdit.getIntegerProperty( "xml.show-attributes",0)); - addComponent(closeComplete = new JCheckBox(jEdit.getProperty( - "options.xml.general.close-complete"))); + closeComplete = new JCheckBox(jEdit.getProperty( + "options.xml.general.close-complete")); closeComplete.setSelected(jEdit.getBooleanProperty( "xml.close-complete")); + closeComplete.setToolTipText(jEdit.getProperty( + "options.xml.general.close-complete.tooltip" )); + addComponent(closeComplete); - addComponent(closeCompleteOpen = new JCheckBox(jEdit.getProperty( - "options.xml.general.close-complete-open"))); + closeCompleteOpen = new JCheckBox(jEdit.getProperty( + "options.xml.general.close-complete-open")); closeCompleteOpen.setSelected(jEdit.getBooleanProperty( "xml.close-complete-open")); - + addComponent(closeCompleteOpen); + addComponent(standaloneExtraSpace = new JCheckBox(jEdit.getProperty( "options.xml.general.standalone-extra-space"))); standaloneExtraSpace.setSelected(jEdit.getBooleanProperty( @@ -117,6 +123,11 @@ closeComplete.isSelected()); jEdit.setBooleanProperty("xml.close-complete-open", closeCompleteOpen.isSelected()); + /* If we want XML close completion, we need to also enable the + SideKick option to close immediately when possible. */ + if (closeComplete.isSelected()) { + jEdit.setBooleanProperty("sidekick.complete-instant.toggle", true); + } jEdit.setBooleanProperty("xml.standalone-extra-space", standaloneExtraSpace.isSelected()); } //}}} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2007-03-27 22:46:54
|
Revision: 9229 http://svn.sourceforge.net/jedit/?rev=9229&view=rev Author: ezust Date: 2007-03-27 15:46:37 -0700 (Tue, 27 Mar 2007) Log Message: ----------- [ 1677595 ] XML plugin - EXSLT completion Modified Paths: -------------- plugins/XML/trunk/XML.props plugins/XML/trunk/docs/users-guide.xml Added Paths: ----------- plugins/XML/trunk/xml/completion/exslt-common-complete.xml plugins/XML/trunk/xml/completion/exslt-dates-and-times-complete.xml plugins/XML/trunk/xml/completion/exslt-functions-complete.xml Modified: plugins/XML/trunk/XML.props =================================================================== --- plugins/XML/trunk/XML.props 2007-03-27 22:01:25 UTC (rev 9228) +++ plugins/XML/trunk/XML.props 2007-03-27 22:46:37 UTC (rev 9229) @@ -161,7 +161,20 @@ xml.completion.namespace.5.value=jeditresource:/XML.jar!/xml/completion/fo-complete.xml +xml.completion.namespace.6.key=http://exslt.org/common +xml.completion.namespace.6.value=jeditresource:/XML.jar!/xml/completion/exslt-common-complete.xml + +xml.completion.namespace.7.key=http://exslt.org/functions +xml.completion.namespace.7.value=jeditresource:/XML.jar!/xml/completion/exslt-functions-complete.xml + +xml.completion.namespace.8.key=http://exslt.org/dates-and-times +xml.completion.namespace.8.value=jeditresource:/XML.jar!/xml/completion/exslt-dates-and-times-complete.xml + + + + + mode.asp.xml.completion-info=jeditresource:/XML.jar!/xml/completion/html-complete.xml mode.coldfusion.xml.completion-info=jeditresource:/XML.jar!/xml/completion/html-complete.xml mode.html.xml.completion-info=jeditresource:/XML.jar!/xml/completion/html-complete.xml Modified: plugins/XML/trunk/docs/users-guide.xml =================================================================== --- plugins/XML/trunk/docs/users-guide.xml 2007-03-27 22:01:25 UTC (rev 9228) +++ plugins/XML/trunk/docs/users-guide.xml 2007-03-27 22:46:37 UTC (rev 9229) @@ -699,6 +699,7 @@ <listitem><para><emphasis role="bold">Version 2.0.6</emphasis> Requires jEdit 4.3pre7, Java 1.5, ErrorList 1.4, SideKick 0.6.3 and XercesPlugin 2.8.0. </para> <itemizedlist> + <listitem><para> Added completion info for exslt files (Jakub Roztocil) </para></listitem> <listitem><para> 2 new actions: select Element or Code Block, and Select Between Tags (Jakub Roztocil) </para> </listitem> Added: plugins/XML/trunk/xml/completion/exslt-common-complete.xml =================================================================== --- plugins/XML/trunk/xml/completion/exslt-common-complete.xml (rev 0) +++ plugins/XML/trunk/xml/completion/exslt-common-complete.xml 2007-03-27 22:46:37 UTC (rev 9229) @@ -0,0 +1,19 @@ +<?xml version="1.0"?> +<!DOCTYPE dtd SYSTEM "xml-completion-info.dtd"> +<dtd> + <element-list> + <element name="document" content=""> + <attribute name="href" type="CDATA" required="true" /> + <attribute name="method" type="(xml|html|text)" /> + <attribute name="version" type="NMTOKEN" /> + <attribute name="encoding" type="CDATA" /> + <attribute name="omit-xml-declaration" type="(yes|no)" /> + <attribute name="standalone" type="(yes|no)" /> + <attribute name="doctype-public" type="CDATA" /> + <attribute name="doctype-system" type="CDATA" /> + <attribute name="cdata-section-elements" type="CDATA" /> + <attribute name="indent" type="(yes|no)" /> + <attribute name="media-type" type="CDATA" /> + </element> + </element-list> +</dtd> Property changes on: plugins/XML/trunk/xml/completion/exslt-common-complete.xml ___________________________________________________________________ Name: svn:eol-style + native Added: plugins/XML/trunk/xml/completion/exslt-dates-and-times-complete.xml =================================================================== --- plugins/XML/trunk/xml/completion/exslt-dates-and-times-complete.xml (rev 0) +++ plugins/XML/trunk/xml/completion/exslt-dates-and-times-complete.xml 2007-03-27 22:46:37 UTC (rev 9229) @@ -0,0 +1,13 @@ +<?xml version="1.0"?> +<!DOCTYPE dtd SYSTEM "xml-completion-info.dtd"> +<dtd> + <element-list> + <element name="date-format" content=""> + <attribute name="href" type="CDATA" required="true" /> + <attribute name="name" type="NMTOKEN" /> + <attribute name="calendar" type="NMTOKEN" /> + <attribute name="lang" type="NMTOKEN" /> + <attribute name="first-day-of-week" type="(sunday|monday|tuesday|wednesday|thursday|friday|saturday)" /> + </element> + </element-list> +</dtd> Property changes on: plugins/XML/trunk/xml/completion/exslt-dates-and-times-complete.xml ___________________________________________________________________ Name: svn:eol-style + native Added: plugins/XML/trunk/xml/completion/exslt-functions-complete.xml =================================================================== --- plugins/XML/trunk/xml/completion/exslt-functions-complete.xml (rev 0) +++ plugins/XML/trunk/xml/completion/exslt-functions-complete.xml 2007-03-27 22:46:37 UTC (rev 9229) @@ -0,0 +1,18 @@ +<?xml version="1.0"?> +<!DOCTYPE dtd SYSTEM "xml-completion-info.dtd"> +<dtd> + <element-list> + <element name="function" content="(result)"> + <attribute name="name" type="QName" required="true"/> + </element> + <element name="result" content=""> + <attribute name="select" type="CDATA"/> + </element> + <element name="script" content="EMPTY"> + <attribute name="implements-prefix" type="QName" required="true"/> + <attribute name="language" type="NMTOKEN" required="true"/> + <attribute name="src" type="CDATA" required="true"/> + <attribute name="archive" type="CDATA" /> + </element> + </element-list> +</dtd> Property changes on: plugins/XML/trunk/xml/completion/exslt-functions-complete.xml ___________________________________________________________________ Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2007-05-07 05:39:25
|
Revision: 9508 http://svn.sourceforge.net/jedit/?rev=9508&view=rev Author: ezust Date: 2007-05-06 22:39:20 -0700 (Sun, 06 May 2007) Log Message: ----------- Fixed error highlighting (bug# 1597017). Modified Paths: -------------- plugins/XML/trunk/build.xml plugins/XML/trunk/xml/parser/SAXParserImpl.java plugins/XML/trunk/xml/parser/XercesParserImpl.java Modified: plugins/XML/trunk/build.xml =================================================================== --- plugins/XML/trunk/build.xml 2007-05-07 01:37:56 UTC (rev 9507) +++ plugins/XML/trunk/build.xml 2007-05-07 05:39:20 UTC (rev 9508) @@ -14,6 +14,7 @@ --> <project name="XML" default="jar" basedir="."> + <property file="build.properties"/> <property file="../build.properties"/> Modified: plugins/XML/trunk/xml/parser/SAXParserImpl.java =================================================================== --- plugins/XML/trunk/xml/parser/SAXParserImpl.java 2007-05-07 01:37:56 UTC (rev 9507) +++ plugins/XML/trunk/xml/parser/SAXParserImpl.java 2007-05-07 05:39:20 UTC (rev 9508) @@ -66,7 +66,6 @@ import sidekick.SideKickParsedData; import xml.CatalogManager; -import xml.Resolver; import xml.XmlParsedData; import xml.XmlPlugin; import xml.completion.CompletionInfo; @@ -99,7 +98,7 @@ try { buffer.readLock(); - text = buffer.getText(0,buffer.getLength()); + text = buffer.getText(0, buffer.getLength()); } finally { @@ -107,9 +106,9 @@ } if(text.length() == 0) - return new XmlParsedData(buffer.getName(),false); + return new XmlParsedData(buffer.getName(), false); - XmlParsedData data = new XmlParsedData(buffer.getName(),false); + XmlParsedData data = new XmlParsedData(buffer.getName(), false); SymbolTable symbolTable = new SymbolTable(); XMLGrammarPoolImpl grammarPool = new XMLGrammarPoolImpl(); @@ -119,17 +118,17 @@ XMLReader reader = new org.apache.xerces.parsers.SAXParser(symbolTable,grammarPool); try { - reader.setFeature("http://xml.org/sax/features/validation", + reader.setFeature("http://xml.org/sax/features/validation", buffer.getBooleanProperty("xml.validate")); - reader.setFeature("http://apache.org/xml/features/validation/dynamic",true); + reader.setFeature("http://apache.org/xml/features/validation/dynamic", true); reader.setFeature("http://apache.org/xml/features/validation/schema", buffer.getBooleanProperty("xml.validate")); - reader.setFeature("http://xml.org/sax/features/namespaces",true); + reader.setFeature("http://xml.org/sax/features/namespaces", true); //reader.setFeature("http://apache.org/xml/features/continue-after-fatal-error",true); reader.setErrorHandler(handler); reader.setEntityResolver(handler); reader.setContentHandler(handler); - reader.setProperty("http://xml.org/sax/properties/declaration-handler",handler); + reader.setProperty("http://xml.org/sax/properties/declaration-handler", handler); } catch(SAXException se) { @@ -174,21 +173,21 @@ catch(IOException ioe) { Log.log(Log.ERROR,this,ioe); - errorSource.addError(ErrorSource.ERROR,buffer.getPath(),0,0,0, - ioe.toString()); + errorSource.addError( + ErrorSource.ERROR, buffer.getPath(), 0, 0, 0, ioe.toString()); } - catch(SAXParseException spe) + catch(SAXParseException se) { - // already handled - } - catch(SAXException se) - { + /* Handled by Handler already, we can ignore it */ + /* Log.log(Log.ERROR,this,se.getException()); + if(se.getMessage() != null) { - errorSource.addError(ErrorSource.ERROR,buffer.getPath(), - 0,0,0,se.getMessage()); + errorSource.addError( + ErrorSource.ERROR,buffer.getPath(), se.getLineNumber()-1, se.getColumnNumber(), 0, se.getMessage()); } + */ } catch(Exception e) { @@ -290,7 +289,7 @@ XmlParsedData data; XMLGrammarPoolImpl grammarPool; - HashMap activePrefixes; + HashMap<String, String> activePrefixes; Stack currentNodeStack; Locator loc; boolean empty; @@ -304,7 +303,7 @@ this.errorSource = errorSource; this.data = data; this.grammarPool = grammarPool; - this.activePrefixes = new HashMap(); + this.activePrefixes = new HashMap<String, String>(); this.currentNodeStack = new Stack(); this.empty = true; @@ -314,8 +313,8 @@ private void addError(int type, String uri, int line, String message) { try { - String resolved = CatalogManager.resolveSystem(uri); - if (resolved != null) resolved = uri; + String resolved = XmlPlugin.uriToFile(uri); + if (resolved != null) uri = resolved; } catch (Exception e) {} errorSource.addError(type, uri, line, 0, 0, message); @@ -423,7 +422,7 @@ //{{{ startPrefixMapping() method public void startPrefixMapping(String prefix, String uri) { - activePrefixes.put(prefix,uri); + activePrefixes.put(prefix, uri); } //}}} //{{{ endPrefixMapping() method @@ -582,9 +581,8 @@ String systemId = spe.getSystemId(); if(systemId == null) systemId = buffer.getPath(); - addError(ErrorSource.ERROR,spe.getSystemId(), - Math.max(0,spe.getLineNumber()-1), - spe.getMessage()); + addError(ErrorSource.ERROR, spe.getSystemId(), + Math.max(0, spe.getLineNumber()-1), spe.getMessage()); } //}}} //{{{ warning() method @@ -605,9 +603,8 @@ String systemId = spe.getSystemId(); if(systemId == null) systemId = buffer.getPath(); - addError(ErrorSource.ERROR,systemId, - Math.max(0,spe.getLineNumber()-1), - spe.getMessage()); + addError(ErrorSource.ERROR, systemId, + Math.max(0, spe.getLineNumber()-1), spe.getMessage()); } //}}} //{{{ elementDecl() method Modified: plugins/XML/trunk/xml/parser/XercesParserImpl.java =================================================================== --- plugins/XML/trunk/xml/parser/XercesParserImpl.java 2007-05-07 01:37:56 UTC (rev 9507) +++ plugins/XML/trunk/xml/parser/XercesParserImpl.java 2007-05-07 05:39:20 UTC (rev 9508) @@ -81,7 +81,7 @@ //{{{ SAXParserImpl constructor public XercesParserImpl() { - super("xml"); + super("newxml"); } //}}} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |