From: <ez...@us...> - 2016-07-11 01:49:40
|
Revision: 24450 http://sourceforge.net/p/jedit/svn/24450 Author: ezust Date: 2016-07-11 01:49:37 +0000 (Mon, 11 Jul 2016) Log Message: ----------- New mode for Mavscript 2.0 (Patch #574 - A. Vontobel) Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/modes/mavscript.xml Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2016-07-10 20:42:17 UTC (rev 24449) +++ jEdit/trunk/doc/CHANGES.txt 2016-07-11 01:49:37 UTC (rev 24450) @@ -89,7 +89,7 @@ - Rust edit mode raw string fix (Patch #575 - Jordan Miner) -- New mode for Mavscript (Patch #574 - A. Vontobel) +- New mode for Mavscript 2.0 (Patch #574 - A. Vontobel) - New mode for swift (Patches #587 - Wayne Zhang) Modified: jEdit/trunk/modes/mavscript.xml =================================================================== --- jEdit/trunk/modes/mavscript.xml 2016-07-10 20:42:17 UTC (rev 24449) +++ jEdit/trunk/modes/mavscript.xml 2016-07-11 01:49:37 UTC (rev 24450) @@ -3,7 +3,7 @@ <!DOCTYPE MODE SYSTEM "xmode.dtd"> <!-- Mavscript mode, by A. Vontobel qwe...@us..., Licence GPL --> -<!-- Based on Mavscript 0.1 --> +<!-- Based on Mavscript 2.0 --> <MODE> <PROPS> @@ -13,7 +13,7 @@ <RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="FALSE"> - <EOL_SPAN TYPE="COMMENT4" DELEGATE="MAVSCRIPTCOMMAND">$m</EOL_SPAN> + <EOL_SPAN TYPE="COMMENT4" DELEGATE="MAVSCRIPTCOMMAND">§m</EOL_SPAN> <EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN> @@ -21,21 +21,21 @@ <!-- Keywords found anywhere in the text. Not necessary. --> <KEYWORDS> <!-- Reserved words --> - <KEYWORD4>$m</KEYWORD4> - <KEYWORD4>$io</KEYWORD4> - <KEYWORD4>$i</KEYWORD4> - <KEYWORD4>$o</KEYWORD4> - <KEYWORD4>$n</KEYWORD4> + <KEYWORD4>§m</KEYWORD4> + <KEYWORD4>§io</KEYWORD4> + <KEYWORD4>§i</KEYWORD4> + <KEYWORD4>§o</KEYWORD4> + <KEYWORD4>§n</KEYWORD4> </KEYWORDS> </RULES> <RULES SET="MAVSCRIPTCOMMAND" ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE" DEFAULT="MARKUP"> <!-- Standard literals --> - <SEQ TYPE="COMMENT4" DELEGATE="MAIN">$io</SEQ> - <SEQ TYPE="COMMENT4" DELEGATE="MAIN">$i</SEQ> - <SEQ TYPE="COMMENT4" DELEGATE="MAIN">$o</SEQ> - <SEQ TYPE="COMMENT4" DELEGATE="MAIN">$n</SEQ> + <SEQ TYPE="COMMENT4" DELEGATE="MAIN">§io</SEQ> + <SEQ TYPE="COMMENT4" DELEGATE="MAIN">§i</SEQ> + <SEQ TYPE="COMMENT4" DELEGATE="MAIN">§o</SEQ> + <SEQ TYPE="COMMENT4" DELEGATE="MAIN">§n</SEQ> <SPAN TYPE="LITERAL2" NO_LINE_BREAK="TRUE"> <BEGIN>"</BEGIN> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2016-07-11 01:53:17
|
Revision: 24451 http://sourceforge.net/p/jedit/svn/24451 Author: ezust Date: 2016-07-11 01:53:15 +0000 (Mon, 11 Jul 2016) Log Message: ----------- Drawj2d edit mode (Patch #573 - A. Vontobel) Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/modes/catalog Added Paths: ----------- jEdit/trunk/modes/drawj2d.xml Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2016-07-11 01:49:37 UTC (rev 24450) +++ jEdit/trunk/doc/CHANGES.txt 2016-07-11 01:53:15 UTC (rev 24451) @@ -87,6 +87,8 @@ }}} {{{ Editing +- Drawj2d edit mode (Patch #573 - A. Vontobel) + - Rust edit mode raw string fix (Patch #575 - Jordan Miner) - New mode for Mavscript 2.0 (Patch #574 - A. Vontobel) Modified: jEdit/trunk/modes/catalog =================================================================== --- jEdit/trunk/modes/catalog 2016-07-11 01:49:37 UTC (rev 24450) +++ jEdit/trunk/modes/catalog 2016-07-11 01:53:15 UTC (rev 24451) @@ -158,6 +158,9 @@ <MODE NAME="doxygen" FILE="doxygen.xml" FILE_NAME_GLOB="doxyfile*" /> +<MODE NAME="drawj2d" FILE="drawj2d.xml" + FILE_NAME_GLOB="*.hcl" /> + <MODE NAME="dsssl" FILE="dsssl.xml" FILE_NAME_GLOB="*.dsl" /> Added: jEdit/trunk/modes/drawj2d.xml =================================================================== --- jEdit/trunk/modes/drawj2d.xml (rev 0) +++ jEdit/trunk/modes/drawj2d.xml 2016-07-11 01:53:15 UTC (rev 24451) @@ -0,0 +1,421 @@ +<?xml version="1.0"?> + +<!DOCTYPE MODE SYSTEM "xmode.dtd"> + +<!-- Drawj2d/Hcl mode, by A. Vontobel qwe...@us... + Built upon Tcl mode by Michael Jacobson. --> + +<MODE> + <PROPS> + <PROPERTY NAME="indentOpenBrackets" VALUE="{" /> + <PROPERTY NAME="indentCloseBrackets" VALUE="}" /> + <PROPERTY NAME="lineUpClosingBracket" VALUE="true" /> + <PROPERTY NAME="lineComment" VALUE="#" /> + </PROPS> + + <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="FALSE" + DIGIT_RE="0x\p{XDigit}+|\d+"> + + <!-- Continuation line. Processed before anything else by Tcl. (Does not work)--> + <EOL_SPAN_REGEXP TYPE="OPERATOR" HASH_CHAR="\">\\$</EOL_SPAN_REGEXP> + + <!-- Comments after a ; command separator --> + <!-- Note: The ; isn't bolded as other operators. Why?--> + <EOL_SPAN_REGEXP TYPE="OPERATOR" HASH_CHAR=";" DELEGATE="TCL_COMMENT">;\s*(?=#)</EOL_SPAN_REGEXP> + <!-- Comments at the { opening of a block --> + <SPAN_REGEXP TYPE="OPERATOR" HASH_CHAR="{" DELEGATE="TCL_COMMENT"> + <BEGIN>\{\s*(?=#)</BEGIN> + <END>}</END> + </SPAN_REGEXP> + <!-- Comments on a line of their own. --> + <EOL_SPAN TYPE="COMMENT1" AT_WHITESPACE_END="TRUE">#</EOL_SPAN> + + <!-- Quoted strings --> + <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE" AT_WORD_START="TRUE" DELEGATE="TCL_STRING"> + <BEGIN>"</BEGIN> + <END>"</END> + </SPAN> + + <!-- Avoid colouring substituted variables that are homonyms of a keyword --> + <!-- Indexed array variable. Delegate to MAIN, as the index string is evaluated by Tcl.--> + <SPAN_REGEXP TYPE="NULL" HASH_CHAR="$" DELEGATE="MAIN"> + <BEGIN>\$(\w|::)+\(</BEGIN> + <END>)</END> + </SPAN_REGEXP> + <!-- General scalar variable. Do not delegate, as the ${} block content is not evalutated by Tcl. --> + <SPAN TYPE="NULL"> + <BEGIN>${</BEGIN> + <END>}</END> + </SPAN> + <!-- Plain scalar variable. --> + <SEQ_REGEXP TYPE="NULL" HASH_CHAR="$">\$(\w|::)+</SEQ_REGEXP> + + <!-- Sub-block --> + <SPAN TYPE="OPERATOR" NO_LINE_BREAK="FALSE" AT_WORD_START="TRUE" DELEGATE="MAIN"> + <BEGIN>{</BEGIN> + <END>}</END> + </SPAN> + + <!-- Sub-commands to be substituted --> + <SPAN TYPE="OPERATOR" NO_LINE_BREAK="FALSE" DELEGATE="MAIN"> + <BEGIN>[</BEGIN> + <END>]</END> + </SPAN> + + <!-- Escaped characters --> + <SEQ TYPE="KEYWORD3">\a</SEQ> + <SEQ TYPE="KEYWORD3">\b</SEQ> + <SEQ TYPE="KEYWORD3">\f</SEQ> + <SEQ TYPE="KEYWORD3">\n</SEQ> + <SEQ TYPE="KEYWORD3">\r</SEQ> + <SEQ TYPE="KEYWORD3">\t</SEQ> + <SEQ TYPE="KEYWORD3">\v</SEQ> + + <!-- Tcl syntax operators. --> + <!-- Note that "{}[]" are already caught above.--> + <!-- Delegate to main, as a new command begins after the ; --> + <SEQ TYPE="OPERATOR" DELEGATE="MAIN">;</SEQ> + <SEQ TYPE="NULL">::</SEQ> + + <!-- Math expression operators --> + <SEQ TYPE="OPERATOR">=</SEQ> + <SEQ TYPE="OPERATOR">!</SEQ> + <SEQ TYPE="OPERATOR">>=</SEQ> + <SEQ TYPE="OPERATOR"><=</SEQ> + <SEQ TYPE="OPERATOR">+</SEQ> + <SEQ TYPE="OPERATOR">-</SEQ> + <SEQ TYPE="OPERATOR">/</SEQ> + <SEQ TYPE="OPERATOR">*</SEQ> + <SEQ TYPE="OPERATOR">></SEQ> + <SEQ TYPE="OPERATOR"><</SEQ> + <SEQ TYPE="OPERATOR">%</SEQ> + <SEQ TYPE="OPERATOR">&</SEQ> + <SEQ TYPE="OPERATOR">|</SEQ> + <SEQ TYPE="OPERATOR">^</SEQ> + <SEQ TYPE="OPERATOR">~</SEQ> + + <KEYWORDS> + <!-- Tcl keywords--> + <KEYWORD1>append</KEYWORD1> + <KEYWORD1>array</KEYWORD1> + <KEYWORD1>concat</KEYWORD1> + <KEYWORD1>console</KEYWORD1> + <KEYWORD1>eval</KEYWORD1> + <KEYWORD1>expr</KEYWORD1> + <KEYWORD1>format</KEYWORD1> + <KEYWORD1>global</KEYWORD1> + <KEYWORD1>set</KEYWORD1> + <KEYWORD1>trace</KEYWORD1> + <KEYWORD1>unset</KEYWORD1> + <KEYWORD1>upvar</KEYWORD1> + <KEYWORD1>join</KEYWORD1> + <KEYWORD1>lappend</KEYWORD1> + <KEYWORD1>lindex</KEYWORD1> + <KEYWORD1>linsert</KEYWORD1> + <KEYWORD1>list</KEYWORD1> + <KEYWORD1>llength</KEYWORD1> + <KEYWORD1>lrange</KEYWORD1> + <KEYWORD1>lreplace</KEYWORD1> + <KEYWORD1>lsearch</KEYWORD1> + <KEYWORD1>lsort</KEYWORD1> + <KEYWORD1>split</KEYWORD1> + <KEYWORD1>scan</KEYWORD1> + <KEYWORD1>string</KEYWORD1> + <KEYWORD1>regexp</KEYWORD1> + <KEYWORD1>regsub</KEYWORD1> + <KEYWORD1>if</KEYWORD1> + <KEYWORD1>else</KEYWORD1> + <KEYWORD1>elseif</KEYWORD1> + <KEYWORD1>switch</KEYWORD1> + <KEYWORD1>for</KEYWORD1> + <KEYWORD1>foreach</KEYWORD1> + <KEYWORD1>while</KEYWORD1> + <KEYWORD1>break</KEYWORD1> + <KEYWORD1>continue</KEYWORD1> + <KEYWORD1>proc</KEYWORD1> + <KEYWORD1>return</KEYWORD1> + <KEYWORD1>source</KEYWORD1> + <KEYWORD1>unknown</KEYWORD1> + <KEYWORD1>uplevel</KEYWORD1> + <KEYWORD1>cd</KEYWORD1> + <KEYWORD1>close</KEYWORD1> + <KEYWORD1>eof</KEYWORD1> + <KEYWORD1>file</KEYWORD1> + <KEYWORD1>flush</KEYWORD1> + <KEYWORD1>gets</KEYWORD1> + <KEYWORD1>glob</KEYWORD1> + <KEYWORD1>open</KEYWORD1> + <KEYWORD1>read</KEYWORD1> + <KEYWORD1>puts</KEYWORD1> + <KEYWORD1>pwd</KEYWORD1> + <KEYWORD1>seek</KEYWORD1> + <KEYWORD1>tell</KEYWORD1> + <KEYWORD1>catch</KEYWORD1> + <KEYWORD1>error</KEYWORD1> + <KEYWORD1>exec</KEYWORD1> + <KEYWORD1>pid</KEYWORD1> + <KEYWORD1>after</KEYWORD1> + <KEYWORD1>time</KEYWORD1> + <KEYWORD1>exit</KEYWORD1> + <KEYWORD1>history</KEYWORD1> + <KEYWORD1>rename</KEYWORD1> + <KEYWORD1>info</KEYWORD1> + <!-- expr keywords--> + <KEYWORD1>ceil</KEYWORD1> + <KEYWORD1>floor</KEYWORD1> + <KEYWORD1>round</KEYWORD1> + <KEYWORD1>incr</KEYWORD1> + <KEYWORD1>abs</KEYWORD1> + <KEYWORD1>acos</KEYWORD1> + <KEYWORD1>cos</KEYWORD1> + <KEYWORD1>cosh</KEYWORD1> + <KEYWORD1>asin</KEYWORD1> + <KEYWORD1>sin</KEYWORD1> + <KEYWORD1>sinh</KEYWORD1> + <KEYWORD1>atan</KEYWORD1> + <KEYWORD1>atan2</KEYWORD1> + <KEYWORD1>tan</KEYWORD1> + <KEYWORD1>tanh</KEYWORD1> + <KEYWORD1>log</KEYWORD1> + <KEYWORD1>log10</KEYWORD1> + <KEYWORD1>fmod</KEYWORD1> + <KEYWORD1>pow</KEYWORD1> + <KEYWORD1>hypot</KEYWORD1> + <KEYWORD1>sqrt</KEYWORD1> + <KEYWORD1>double</KEYWORD1> + <KEYWORD1>int</KEYWORD1> + <!-- New Tcl keywords up to tcl 8.4.14 --> + <KEYWORD1>load</KEYWORD1> + <KEYWORD1>lset</KEYWORD1> + <KEYWORD1>subst</KEYWORD1> + <KEYWORD1>update</KEYWORD1> + + <!-- Drawj2d keywords --> + <KEYWORD2>unitlength</KEYWORD2> + <KEYWORD2>forceunitlength</KEYWORD2> + <KEYWORD2>offset</KEYWORD2> + <KEYWORD2>here</KEYWORD2> + <KEYWORD2>r</KEYWORD2> + <KEYWORD2>mm</KEYWORD2> + <KEYWORD2>fu</KEYWORD2> + <KEYWORD2>kN</KEYWORD2> + <KEYWORD2>X</KEYWORD2> + <KEYWORD2>Y</KEYWORD2> + <KEYWORD2>FX</KEYWORD2> + <KEYWORD2>FY</KEYWORD2> + <KEYWORD2>XY</KEYWORD2> + <KEYWORD2>FXY</KEYWORD2> + + <KEYWORD2>pen</KEYWORD2> + <KEYWORD2>font</KEYWORD2> + <KEYWORD2>nf</KEYWORD2> + <KEYWORD2>expr</KEYWORD2> + <KEYWORD2>exprinput</KEYWORD2> + <KEYWORD2>assert</KEYWORD2> + + <KEYWORD2>moveto</KEYWORD2> + <KEYWORD2>m</KEYWORD2> + <KEYWORD2>movetox</KEYWORD2> + <KEYWORD2>mx</KEYWORD2> + <KEYWORD2>movetoy</KEYWORD2> + <KEYWORD2>my</KEYWORD2> + <KEYWORD2>moverel</KEYWORD2> + <KEYWORD2>mr</KEYWORD2> + <KEYWORD2>movepolar</KEYWORD2> + <KEYWORD2>mp</KEYWORD2> + <KEYWORD2>point</KEYWORD2> + <KEYWORD2>pt</KEYWORD2> + <KEYWORD2>dot</KEYWORD2> + <KEYWORD2>line</KEYWORD2> + <KEYWORD2>lineto</KEYWORD2> + <KEYWORD2>l</KEYWORD2> + <KEYWORD2>linetox</KEYWORD2> + <KEYWORD2>lx</KEYWORD2> + <KEYWORD2>linetoy</KEYWORD2> + <KEYWORD2>ly</KEYWORD2> + <KEYWORD2>linerel</KEYWORD2> + <KEYWORD2>lr</KEYWORD2> + <KEYWORD2>linepolar</KEYWORD2> + <KEYWORD2>lp</KEYWORD2> + <KEYWORD2>linemid</KEYWORD2> + <KEYWORD2>lm</KEYWORD2> + <KEYWORD2>arc</KEYWORD2> + <KEYWORD2>quadcurve</KEYWORD2> + <KEYWORD2>parabola</KEYWORD2> + <KEYWORD2>cubiccurve</KEYWORD2> + + <KEYWORD2>circle</KEYWORD2> + <KEYWORD2>fillcircle</KEYWORD2> + <KEYWORD2>ellipse</KEYWORD2> + <KEYWORD2>fillellipse</KEYWORD2> + <KEYWORD2>rectangle</KEYWORD2> + <KEYWORD2>rect</KEYWORD2> + <KEYWORD2>fillrectangle</KEYWORD2> + <KEYWORD2>fillrect</KEYWORD2> + <KEYWORD2>box</KEYWORD2> + <KEYWORD2>fillbox</KEYWORD2> + <KEYWORD2>rod</KEYWORD2> + <KEYWORD2>fillrod</KEYWORD2> + <KEYWORD2>polygon</KEYWORD2> + <KEYWORD2>fillpolygon</KEYWORD2> + <KEYWORD2>segment</KEYWORD2> + <KEYWORD2>fillsegment</KEYWORD2> + <KEYWORD2>sector</KEYWORD2> + <KEYWORD2>fillsector</KEYWORD2> + + <KEYWORD2>label</KEYWORD2> + <KEYWORD2>lb</KEYWORD2> + <KEYWORD2>texlabel</KEYWORD2> + <KEYWORD2>tlb</KEYWORD2> + <KEYWORD2>text</KEYWORD2> + <KEYWORD2>arrow</KEYWORD2> + <KEYWORD2>arrowto</KEYWORD2> + <KEYWORD2>arrows</KEYWORD2> + <KEYWORD2>arrowsto</KEYWORD2> + <KEYWORD2>arrowrel</KEYWORD2> + <KEYWORD2>arrowsrel</KEYWORD2> + <KEYWORD2>force</KEYWORD2> + <KEYWORD2>texforce</KEYWORD2> + <KEYWORD2>force2</KEYWORD2> + <KEYWORD2>texforce2</KEYWORD2> + <KEYWORD2>dimline</KEYWORD2> + <KEYWORD2>dimlineto</KEYWORD2> + <KEYWORD2>texdimline</KEYWORD2> + <KEYWORD2>texdimlineto</KEYWORD2> + <KEYWORD2>dimlinerel</KEYWORD2> + <KEYWORD2>texdimlinerel</KEYWORD2> + <KEYWORD2>dimangle</KEYWORD2> + <KEYWORD2>texdimangle</KEYWORD2> + + <KEYWORD2>geom.vector</KEYWORD2> + <KEYWORD2>geom.v</KEYWORD2> + <KEYWORD2>geom.add</KEYWORD2> + <KEYWORD2>geom.subtract</KEYWORD2> + <KEYWORD2>geom.multiply</KEYWORD2> + <KEYWORD2>geom.divide</KEYWORD2> + <KEYWORD2>geom.tox</KEYWORD2> + <KEYWORD2>tx</KEYWORD2> + <KEYWORD2>geom.toy</KEYWORD2> + <KEYWORD2>ty</KEYWORD2> + <KEYWORD2>geom.intersect</KEYWORD2> + <KEYWORD2>geom.area</KEYWORD2> + <KEYWORD2>geom.centroid</KEYWORD2> + <KEYWORD2>geom.intersectlinepath</KEYWORD2> + <KEYWORD2>geom.online</KEYWORD2> + <KEYWORD2>geom.angle</KEYWORD2> + <KEYWORD2>geom.anglerad</KEYWORD2> + <KEYWORD2>geom.crossproduct</KEYWORD2> + <KEYWORD2>geom.dotproduct</KEYWORD2> + <KEYWORD2>geom.rotate</KEYWORD2> + <KEYWORD2>geom.polar</KEYWORD2> + <KEYWORD2>geom.length</KEYWORD2> + <KEYWORD2>geom.hypot</KEYWORD2> + <KEYWORD2>geom.abs</KEYWORD2> + <KEYWORD2>geom.norm</KEYWORD2> + <KEYWORD2>geom.parallel</KEYWORD2> + <KEYWORD2>geom.extend</KEYWORD2> + <KEYWORD2>geom.distance</KEYWORD2> + <KEYWORD2>geom.dist</KEYWORD2> + + <KEYWORD2>stat.add</KEYWORD2> + <KEYWORD2>stat.subtract</KEYWORD2> + <KEYWORD2>stat.multiply</KEYWORD2> + <KEYWORD2>stat.move</KEYWORD2> + <KEYWORD2>stat.move2</KEYWORD2> + <KEYWORD2>stat.actionline</KEYWORD2> + <KEYWORD2>stat.tip</KEYWORD2> + <KEYWORD2>stat.abs</KEYWORD2> + <KEYWORD2>stat.distance</KEYWORD2> + <KEYWORD2>stat.dist</KEYWORD2> + <KEYWORD2>stat.moment</KEYWORD2> + <KEYWORD2>stat.mequi</KEYWORD2> + <KEYWORD2>stat.equi</KEYWORD2> + <KEYWORD2>stat.fequi</KEYWORD2> + + <!-- Global variables--> + + <!-- Common arguments to Drawj2d --> + <KEYWORD3>black</KEYWORD3> + <KEYWORD3>blue</KEYWORD3> + <KEYWORD3>brown</KEYWORD3> + <KEYWORD3>cyan</KEYWORD3> + <KEYWORD3>darkgray</KEYWORD3> + <KEYWORD3>darkorange</KEYWORD3> + <KEYWORD3>gray</KEYWORD3> + <KEYWORD3>green</KEYWORD3> + <KEYWORD3>lightgray</KEYWORD3> + <KEYWORD3>magenta</KEYWORD3> + <KEYWORD3>orange</KEYWORD3> + <KEYWORD3>pink</KEYWORD3> + <KEYWORD3>red</KEYWORD3> + <KEYWORD3>white</KEYWORD3> + <KEYWORD3>yellow</KEYWORD3> + <KEYWORD3>dashed</KEYWORD3> + <KEYWORD3>dotted</KEYWORD3> + <KEYWORD3>dashdotted</KEYWORD3> + <KEYWORD3>solid</KEYWORD3> + <KEYWORD3>Serif</KEYWORD3> + <KEYWORD3>SansSerif</KEYWORD3> + <KEYWORD3>Monospaced</KEYWORD3> + <KEYWORD3>Tex</KEYWORD3> + <KEYWORD3>plain</KEYWORD3> + <KEYWORD3>bold</KEYWORD3> + <KEYWORD3>italic</KEYWORD3> + <KEYWORD3>left</KEYWORD3> + <KEYWORD3>justify</KEYWORD3> + <KEYWORD3>block</KEYWORD3> + <KEYWORD3>NE</KEYWORD3> + <KEYWORD3>E</KEYWORD3> + <KEYWORD3>SE</KEYWORD3> + <KEYWORD3>S</KEYWORD3> + <KEYWORD3>SW</KEYWORD3> + <KEYWORD3>W</KEYWORD3> + <KEYWORD3>NW</KEYWORD3> + <KEYWORD3>N</KEYWORD3> + <KEYWORD3>C</KEYWORD3> + <KEYWORD3>BL</KEYWORD3> + </KEYWORDS> + </RULES> + + <RULES SET="TCL_COMMENT" DEFAULT="OPERATOR"> + <!-- Allows catching blocks starting with a comment. + or comments following a ; --> + <SEQ_REGEXP TYPE="COMMENT1" HASH_CHAR="#" DELEGATE="MAIN">#.*</SEQ_REGEXP> + </RULES> + + <RULES SET="TCL_STRING" DEFAULT="LITERAL1" ESCAPE="\"> + <PROPS> + <PROPERTY NAME="indentOpenBrackets" VALUE="" /> + <PROPERTY NAME="indentCloseBrackets" VALUE="" /> + </PROPS> + + <!-- Continuation line. Processed before anything else by Tcl.--> + <EOL_SPAN_REGEXP TYPE="OPERATOR" HASH_CHAR="\">\\$</EOL_SPAN_REGEXP> + + <!-- Avoid colouring variables substituted inside strings --> + <SPAN_REGEXP TYPE="NULL" HASH_CHAR="$" DELEGATE="MAIN"> + <BEGIN>\$(\w|::)+\(</BEGIN> + <END>)</END> + </SPAN_REGEXP> + <SPAN_REGEXP TYPE="NULL" HASH_CHAR="$" DELEGATE="MAIN"> + <BEGIN>\$\{</BEGIN> + <END>}</END> + </SPAN_REGEXP> + <SEQ_REGEXP TYPE="NULL" HASH_CHAR="$">\$(\w|::)+</SEQ_REGEXP> + + <!-- Sub-commands to be substituted --> + <SPAN TYPE="OPERATOR" NO_LINE_BREAK="FALSE" DELEGATE="MAIN"> + <BEGIN>[</BEGIN> + <END>]</END> + </SPAN> + + <!-- Escaped characters --> + <SEQ TYPE="KEYWORD3">\a</SEQ> + <SEQ TYPE="KEYWORD3">\b</SEQ> + <SEQ TYPE="KEYWORD3">\f</SEQ> + <SEQ TYPE="KEYWORD3">\n</SEQ> + <SEQ TYPE="KEYWORD3">\r</SEQ> + <SEQ TYPE="KEYWORD3">\t</SEQ> + <SEQ TYPE="KEYWORD3">\v</SEQ> + </RULES> +</MODE> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2016-07-11 02:40:07
|
Revision: 24452 http://sourceforge.net/p/jedit/svn/24452 Author: ezust Date: 2016-07-11 02:40:04 +0000 (Mon, 11 Jul 2016) Log Message: ----------- Mode for m4 macro processor language (Patch #586 - Jack J. Woehr) Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/modes/catalog Added Paths: ----------- jEdit/trunk/modes/m4.xml Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2016-07-11 01:53:15 UTC (rev 24451) +++ jEdit/trunk/doc/CHANGES.txt 2016-07-11 02:40:04 UTC (rev 24452) @@ -5,8 +5,8 @@ {{{ Version 5.3.1 Thanks to Björn "Vampire" Kautler, Eric Le Lay, Jesse Pavel, Wayne Zhang, -Makarius, A Vontobel, Marc Häfner, Jordan Miner, Alan Ezust, and Dale Anson for - contributing to this release. +Makarius, A Vontobel, Marc Häfner, Jordan Miner, Jack J. Woehr, Alan Ezust, +and Dale Anson for contributing to this release. {{{ Bug Fixes @@ -87,6 +87,8 @@ }}} {{{ Editing +- Mode for m4 macro processor language (Patch #586 - Jack J. Woehr) + - Drawj2d edit mode (Patch #573 - A. Vontobel) - Rust edit mode raw string fix (Patch #575 - Jordan Miner) Modified: jEdit/trunk/modes/catalog =================================================================== --- jEdit/trunk/modes/catalog 2016-07-11 01:53:15 UTC (rev 24451) +++ jEdit/trunk/modes/catalog 2016-07-11 02:40:04 UTC (rev 24452) @@ -340,6 +340,8 @@ <MODE NAME="macroscheduler" FILE="macroscheduler.xml" FILE_NAME_GLOB="*.scp" /> + +<MODE NAME="m4" FILE="m4.xml" FILE_NAME_GLOB="*.m4" /> <MODE NAME="mail" FILE="mail.xml" /> Added: jEdit/trunk/modes/m4.xml =================================================================== --- jEdit/trunk/modes/m4.xml (rev 0) +++ jEdit/trunk/modes/m4.xml 2016-07-11 02:40:04 UTC (rev 24452) @@ -0,0 +1,64 @@ +<?xml version="1.0"?> +<!DOCTYPE MODE SYSTEM "xmode.dtd"> +<!-- Edit mode for JEdit for m4 macro language --> +<!-- Add to ~/.jedit/modes/catalog as follows: --> +<!-- <MODE NAME="m4" FILE="m4.xml" FILE_NAME_GLOB="*.m4" /> --> +<!-- Jack J. Woehr jw...@so... updated 20151116 --> +<MODE> +<PROPS> + <PROPERTY NAME="lineComment" VALUE="#" /> + <PROPERTY NAME="wrap" VALUE="none" /> + <PROPERTY NAME="noTabs" VALUE="true" /> +</PROPS> +<RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE"> + <EOL_SPAN_REGEXP AT_WHITESPACE_END="FALSE" HASH_CHAR="d" TYPE="COMMENT1">dnl(?=(\s)|($))</EOL_SPAN_REGEXP> + <MARK_FOLLOWING TYPE="KEYWORD2">$</MARK_FOLLOWING> + <SEQ TYPE="KEYWORD1">`</SEQ> + <SEQ TYPE="KEYWORD1">'</SEQ> + <SEQ TYPE="OPERATOR">(</SEQ> + <SEQ TYPE="OPERATOR">)</SEQ> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="b" AT_WORD_START="TRUE">builtin(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="c" AT_WORD_START="TRUE">changecom(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="c" AT_WORD_START="TRUE">changequote(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="c" AT_WORD_START="TRUE">changeword(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="d" AT_WORD_START="TRUE">debugfile(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="d" AT_WORD_START="TRUE">debugmode(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="d" AT_WORD_START="TRUE">decr(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="d" AT_WORD_START="TRUE">define(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="d" AT_WORD_START="TRUE">defn(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="d" AT_WORD_START="TRUE">divert(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="d" AT_WORD_START="TRUE">divnum(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <!-- SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="d" AT_WORD_START="TRUE">dnl(?=(($)|((\()|(\s))))</SEQ_REGEXP> --> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="d" AT_WORD_START="TRUE">dumpdef(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="e" AT_WORD_START="TRUE">errprint(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="e" AT_WORD_START="TRUE">esyscmd(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="e" AT_WORD_START="TRUE">eval(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="f" AT_WORD_START="TRUE">file(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="f" AT_WORD_START="TRUE">format(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="i" AT_WORD_START="TRUE">ifdef(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="i" AT_WORD_START="TRUE">ifelse(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="i" AT_WORD_START="TRUE">include(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="i" AT_WORD_START="TRUE">incr(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="i" AT_WORD_START="TRUE">index(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="i" AT_WORD_START="TRUE">indir(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="l" AT_WORD_START="TRUE">len(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="l" AT_WORD_START="TRUE">line(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="m" AT_WORD_START="TRUE">m4exit(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="m" AT_WORD_START="TRUE">m4wrap(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="m" AT_WORD_START="TRUE">maketemp(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="p" AT_WORD_START="TRUE">patsubst(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="p" AT_WORD_START="TRUE">popdef(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="p" AT_WORD_START="TRUE">pushdef(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="r" AT_WORD_START="TRUE">regexp(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="s" AT_WORD_START="TRUE">shift(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="s" AT_WORD_START="TRUE">sinclude(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="s" AT_WORD_START="TRUE">substr(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="s" AT_WORD_START="TRUE">syscmd(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="s" AT_WORD_START="TRUE">sysval(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="t" AT_WORD_START="TRUE">traceoff(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="t" AT_WORD_START="TRUE">traceon(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="t" AT_WORD_START="TRUE">translit(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="u" AT_WORD_START="TRUE">undefine(?=(($)|((\()|(\s))))</SEQ_REGEXP> + <SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="u" AT_WORD_START="TRUE">undivert(?=(($)|((\()|(\s))))</SEQ_REGEXP> +</RULES> +</MODE> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2016-07-11 02:43:43
|
Revision: 24453 http://sourceforge.net/p/jedit/svn/24453 Author: ezust Date: 2016-07-11 02:43:40 +0000 (Mon, 11 Jul 2016) Log Message: ----------- Updates for objectrexx mode (Patch #585 - Jack J. Woehr) Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/modes/objectrexx.xml Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2016-07-11 02:40:04 UTC (rev 24452) +++ jEdit/trunk/doc/CHANGES.txt 2016-07-11 02:43:40 UTC (rev 24453) @@ -87,6 +87,8 @@ }}} {{{ Editing +- Updates for objectrexx mode (Patch #585 - Jack J. Woehr) + - Mode for m4 macro processor language (Patch #586 - Jack J. Woehr) - Drawj2d edit mode (Patch #573 - A. Vontobel) Modified: jEdit/trunk/modes/objectrexx.xml =================================================================== --- jEdit/trunk/modes/objectrexx.xml 2016-07-11 02:40:04 UTC (rev 24452) +++ jEdit/trunk/modes/objectrexx.xml 2016-07-11 02:43:40 UTC (rev 24453) @@ -22,11 +22,11 @@ <END>*/</END> </SPAN> - <SPAN TYPE="LITERAL1" ESCAPE="\" NO_LINE_BREAK="TRUE"> + <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE"> <BEGIN>"</BEGIN> <END>"</END> </SPAN> - <SPAN TYPE="LITERAL1" ESCAPE="\" NO_LINE_BREAK="TRUE"> + <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE"> <BEGIN>'</BEGIN> <END>'</END> </SPAN> @@ -70,8 +70,10 @@ <KEYWORD1>Call</KEYWORD1> <KEYWORD1>Do</KEYWORD1> <KEYWORD1>Drop</KEYWORD1> + <KEYWORD1>End</KEYWORD1> <KEYWORD1>Exit</KEYWORD1> <KEYWORD1>Expose</KEYWORD1> + <KEYWORD1>Forever</KEYWORD1> <KEYWORD1>Forward</KEYWORD1> <KEYWORD1>Guard</KEYWORD1> <KEYWORD1>If</KEYWORD1> @@ -80,6 +82,7 @@ <KEYWORD1>Leave</KEYWORD1> <KEYWORD1>Nop</KEYWORD1> <KEYWORD1>Numeric</KEYWORD1> + <KEYWORD1>Otherwise</KEYWORD1> <KEYWORD1>Parse</KEYWORD1> <KEYWORD1>Procedure</KEYWORD1> <KEYWORD1>pull</KEYWORD1> @@ -89,8 +92,9 @@ <KEYWORD1>reply</KEYWORD1> <KEYWORD1>Return</KEYWORD1> <KEYWORD1>Say</KEYWORD1> - <KEYWORD1>Seleect</KEYWORD1> + <KEYWORD1>Select</KEYWORD1> <KEYWORD1>Signal</KEYWORD1> + <KEYWORD1>Then</KEYWORD1> <KEYWORD1>Trace</KEYWORD1> <KEYWORD1>use</KEYWORD1> <KEYWORD1>Class</KEYWORD1> @@ -102,7 +106,10 @@ <KEYWORD1>Self</KEYWORD1> <KEYWORD1>Sigl</KEYWORD1> <KEYWORD1>Super</KEYWORD1> - <KEYWORD2>Abbrev</KEYWORD2> + <KEYWORD1>Super</KEYWORD1> + <KEYWORD1>When</KEYWORD1> + <KEYWORD1>While</KEYWORD1> + <KEYWORD2>Abbrev</KEYWORD2> <KEYWORD2>Abs</KEYWORD2> <KEYWORD2>Address</KEYWORD2> <KEYWORD2>Arg</KEYWORD2> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dal...@us...> - 2016-07-15 13:30:05
|
Revision: 24458 http://sourceforge.net/p/jedit/svn/24458 Author: daleanson Date: 2016-07-15 13:30:02 +0000 (Fri, 15 Jul 2016) Log Message: ----------- Updated CSS mode from Adam S, ticket #4003. Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/modes/css.xml Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2016-07-15 13:16:13 UTC (rev 24457) +++ jEdit/trunk/doc/CHANGES.txt 2016-07-15 13:30:02 UTC (rev 24458) @@ -6,7 +6,7 @@ Thanks to Björn "Vampire" Kautler, Eric Le Lay, Jesse Pavel, Wayne Zhang, Makarius, A Vontobel, Marc Häfner, Jordan Miner, Jack J. Woehr, Alan Ezust, -and Dale Anson for contributing to this release. +Adam S, and Dale Anson for contributing to this release. {{{ Bug Fixes @@ -101,6 +101,8 @@ - New mode for Java 9 module-info.java files (Dale Anson) +- Updated CSS mode provided by AdamS (Ticket #4003 - Dale Anson) + }}} }}} Modified: jEdit/trunk/modes/css.xml =================================================================== --- jEdit/trunk/modes/css.xml 2016-07-15 13:16:13 UTC (rev 24457) +++ jEdit/trunk/modes/css.xml 2016-07-15 13:30:02 UTC (rev 24458) @@ -29,6 +29,12 @@ <SEQ TYPE="OPERATOR" DELEGATE="PSEUDO">:</SEQ> <SEQ TYPE="OPERATOR">,</SEQ> + <!-- @media statements (doesn't count as a property block): --> + <SPAN_REGEXP HASH_CHAR="@" TYPE="LITERAL2" DELEGATE="MAIN"> + <BEGIN>^@(media|supports).*\{</BEGIN> + <END>}</END> + </SPAN_REGEXP> + <!-- property blocks: --> <SPAN TYPE="OPERATOR" DELEGATE="PROPERTIES"> <BEGIN>{</BEGIN> @@ -62,15 +68,42 @@ <IMPORT DELEGATE="GLOBAL" /> <KEYWORDS> + <KEYWORD4>active</KEYWORD4> <KEYWORD4>after</KEYWORD4> <KEYWORD4>before</KEYWORD4> + <KEYWORD4>checked</KEYWORD4> + <KEYWORD4>disabled</KEYWORD4> + <KEYWORD4>empty</KEYWORD4> + <KEYWORD4>enabled</KEYWORD4> <KEYWORD4>first-child</KEYWORD4> + <KEYWORD4>first-letter</KEYWORD4> + <KEYWORD4>first-line</KEYWORD4> + <KEYWORD4>first-of-type</KEYWORD4> + <KEYWORD4>focus</KEYWORD4> + <KEYWORD4>hover</KEYWORD4> + <KEYWORD4>in-range</KEYWORD4> + <KEYWORD4>invalid</KEYWORD4> + <KEYWORD4>lang</KEYWORD4> <KEYWORD4>last-child</KEYWORD4> + <KEYWORD4>last-of-type</KEYWORD4> <KEYWORD4>link</KEYWORD4> + <KEYWORD4>not</KEYWORD4> + <KEYWORD4>nth-child</KEYWORD4> + <KEYWORD4>nth-last-child</KEYWORD4> + <KEYWORD4>nth-last-of-type</KEYWORD4> + <KEYWORD4>nth-of-type</KEYWORD4> + <KEYWORD4>only-of-type</KEYWORD4> + <KEYWORD4>only-child</KEYWORD4> + <KEYWORD4>optional</KEYWORD4> + <KEYWORD4>out-of-range</KEYWORD4> + <KEYWORD4>read-only</KEYWORD4> + <KEYWORD4>read-write</KEYWORD4> + <KEYWORD4>required</KEYWORD4> + <KEYWORD4>root</KEYWORD4> + <KEYWORD4>selection</KEYWORD4> + <KEYWORD4>target</KEYWORD4> + <KEYWORD4>valid</KEYWORD4> <KEYWORD4>visited</KEYWORD4> - <KEYWORD4>active</KEYWORD4> - <KEYWORD4>hover</KEYWORD4> - <KEYWORD4>focus</KEYWORD4> </KEYWORDS> </RULES> @@ -84,76 +117,50 @@ <IMPORT DELEGATE="GLOBAL" /> <KEYWORDS> - <!-- CSS2 & 3 properties --> + <!-- CSS 1-3 properties filtered by major browser support 2016 --> - <!-- Color and background properties --> + <KEYWORD2>background-clip</KEYWORD2> + <KEYWORD2>align-content</KEYWORD2> + <KEYWORD2>align-items</KEYWORD2> + <KEYWORD2>align-self</KEYWORD2> + <KEYWORD2>animation</KEYWORD2> + <KEYWORD2>animation-delay</KEYWORD2> + <KEYWORD2>animation-direction</KEYWORD2> + <KEYWORD2>animation-duration</KEYWORD2> + <KEYWORD2>animation-iteration-count</KEYWORD2> + <KEYWORD2>animation-name</KEYWORD2> + <KEYWORD2>animation-play-state</KEYWORD2> + <KEYWORD2>animation-timing-function</KEYWORD2> + <KEYWORD2>backface-visibility</KEYWORD2> <KEYWORD2>background</KEYWORD2> <KEYWORD2>background-attachment</KEYWORD2> + <KEYWORD2>background-clip</KEYWORD2> <KEYWORD2>background-color</KEYWORD2> <KEYWORD2>background-image</KEYWORD2> + <KEYWORD2>background-origin</KEYWORD2> <KEYWORD2>background-position</KEYWORD2> <KEYWORD2>background-repeat</KEYWORD2> - <KEYWORD2>background-origin</KEYWORD2> - <KEYWORD2>background-clip</KEYWORD2> <KEYWORD2>background-size</KEYWORD2> - <KEYWORD2>color</KEYWORD2> - <KEYWORD2>opacity</KEYWORD2> - <KEYWORD2>rendering-intent</KEYWORD2> - - <!-- Font properties --> - <KEYWORD2>font</KEYWORD2> - <KEYWORD2>font-family</KEYWORD2> - <KEYWORD2>font-size</KEYWORD2> - <KEYWORD2>font-style</KEYWORD2> - <KEYWORD2>font-variant</KEYWORD2> - <KEYWORD2>font-weight</KEYWORD2> - <KEYWORD2>font-stretch</KEYWORD2> - <KEYWORD2>src</KEYWORD2> - <KEYWORD2>definition-src</KEYWORD2> - <KEYWORD2>unicode-range</KEYWORD2> - <KEYWORD2>panose-1</KEYWORD2> - <KEYWORD2>stemv</KEYWORD2> - <KEYWORD2>stemh</KEYWORD2> - <KEYWORD2>units-per-em</KEYWORD2> - <KEYWORD2>slope</KEYWORD2> - <KEYWORD2>cap-height</KEYWORD2> - <KEYWORD2>x-height</KEYWORD2> - <KEYWORD2>ascent</KEYWORD2> - <KEYWORD2>descent</KEYWORD2> - <KEYWORD2>baseline</KEYWORD2> - <KEYWORD2>centerline</KEYWORD2> - <KEYWORD2>mathline</KEYWORD2> - <KEYWORD2>topline</KEYWORD2> - - <!-- Text properties --> - <KEYWORD2>letter-spacing</KEYWORD2> - <KEYWORD2>text-align</KEYWORD2> - <KEYWORD2>text-shadow</KEYWORD2> - <KEYWORD2>text-decoration</KEYWORD2> - <KEYWORD2>text-indent</KEYWORD2> - <KEYWORD2>text-justify</KEYWORD2> - <KEYWORD2>text-overflow</KEYWORD2> - <KEYWORD2>text-transform</KEYWORD2> - <KEYWORD2>word-break</KEYWORD2> - <KEYWORD2>word-spacing</KEYWORD2> - <KEYWORD2>word-wrap</KEYWORD2> - <KEYWORD2>letter-spacing</KEYWORD2> - <KEYWORD2>white-space</KEYWORD2> - - <!-- Box properties --> <KEYWORD2>border</KEYWORD2> - <KEYWORD2>bottom</KEYWORD2> - <KEYWORD2>border</KEYWORD2> <KEYWORD2>border-bottom</KEYWORD2> <KEYWORD2>border-bottom-color</KEYWORD2> + <KEYWORD2>border-bottom-left-radius</KEYWORD2> + <KEYWORD2>border-bottom-right-radius</KEYWORD2> <KEYWORD2>border-bottom-style</KEYWORD2> <KEYWORD2>border-bottom-width</KEYWORD2> <KEYWORD2>border-collapse</KEYWORD2> <KEYWORD2>border-color</KEYWORD2> + <KEYWORD2>border-image</KEYWORD2> + <KEYWORD2>border-image-outset</KEYWORD2> + <KEYWORD2>border-image-repeat</KEYWORD2> + <KEYWORD2>border-image-slice</KEYWORD2> + <KEYWORD2>border-image-source</KEYWORD2> + <KEYWORD2>border-image-width</KEYWORD2> <KEYWORD2>border-left</KEYWORD2> <KEYWORD2>border-left-color</KEYWORD2> <KEYWORD2>border-left-style</KEYWORD2> <KEYWORD2>border-left-width</KEYWORD2> + <KEYWORD2>border-radius</KEYWORD2> <KEYWORD2>border-right</KEYWORD2> <KEYWORD2>border-right-color</KEYWORD2> <KEYWORD2>border-right-style</KEYWORD2> @@ -162,38 +169,19 @@ <KEYWORD2>border-style</KEYWORD2> <KEYWORD2>border-top</KEYWORD2> <KEYWORD2>border-top-color</KEYWORD2> + <KEYWORD2>border-top-left-radius</KEYWORD2> + <KEYWORD2>border-top-right-radius</KEYWORD2> <KEYWORD2>border-top-style</KEYWORD2> <KEYWORD2>border-top-width</KEYWORD2> <KEYWORD2>border-width</KEYWORD2> - <KEYWORD2>border-bottom-left-radius</KEYWORD2> - <KEYWORD2>border-bottom-right-radius</KEYWORD2> - <KEYWORD2>border-radius</KEYWORD2> - <KEYWORD2>border-top-left-radius</KEYWORD2> - <KEYWORD2>border-top-right-radius</KEYWORD2> - <KEYWORD2>box-align</KEYWORD2> - <KEYWORD2>box-direction</KEYWORD2> - <KEYWORD2>box-flex</KEYWORD2> - <KEYWORD2>box-ordinal-group</KEYWORD2> - <KEYWORD2>box-orient</KEYWORD2> - <KEYWORD2>box-pack</KEYWORD2> + <KEYWORD2>bottom</KEYWORD2> + <KEYWORD2>box-shadow</KEYWORD2> <KEYWORD2>box-sizing</KEYWORD2> - <KEYWORD2>box-shadow</KEYWORD2> + <KEYWORD2>caption-side</KEYWORD2> <KEYWORD2>clear</KEYWORD2> - <KEYWORD2>float</KEYWORD2> - <KEYWORD2>height</KEYWORD2> - <KEYWORD2>margin</KEYWORD2> - <KEYWORD2>margin-bottom</KEYWORD2> - <KEYWORD2>margin-left</KEYWORD2> - <KEYWORD2>margin-right</KEYWORD2> - <KEYWORD2>margin-top</KEYWORD2> - <KEYWORD2>padding</KEYWORD2> - <KEYWORD2>padding-bottom</KEYWORD2> - <KEYWORD2>padding-left</KEYWORD2> - <KEYWORD2>padding-right</KEYWORD2> - <KEYWORD2>padding-top</KEYWORD2> - + <KEYWORD2>clip</KEYWORD2> + <KEYWORD2>color</KEYWORD2> <KEYWORD2>column-count</KEYWORD2> - <KEYWORD2>column-fill</KEYWORD2> <KEYWORD2>column-gap</KEYWORD2> <KEYWORD2>column-rule</KEYWORD2> <KEYWORD2>column-rule-color</KEYWORD2> @@ -202,201 +190,100 @@ <KEYWORD2>column-span</KEYWORD2> <KEYWORD2>column-width</KEYWORD2> <KEYWORD2>columns</KEYWORD2> - - <KEYWORD2>handing-punctuation</KEYWORD2> - - - - <!-- Visual formatting properties --> + <KEYWORD2>content</KEYWORD2> + <KEYWORD2>counter-increment</KEYWORD2> + <KEYWORD2>counter-reset</KEYWORD2> + <KEYWORD2>cursor</KEYWORD2> + <KEYWORD2>direction</KEYWORD2> <KEYWORD2>display</KEYWORD2> - <KEYWORD2>position</KEYWORD2> - <KEYWORD2>top</KEYWORD2> - <KEYWORD2>right</KEYWORD2> - <KEYWORD2>bottom</KEYWORD2> + <KEYWORD2>empty-cells</KEYWORD2> + <KEYWORD2>flex</KEYWORD2> + <KEYWORD2>flex-basis</KEYWORD2> + <KEYWORD2>flex-direction</KEYWORD2> + <KEYWORD2>flex-flow</KEYWORD2> + <KEYWORD2>flex-grow</KEYWORD2> + <KEYWORD2>flex-shrink</KEYWORD2> + <KEYWORD2>flex-wrap</KEYWORD2> + <KEYWORD2>float</KEYWORD2> + <KEYWORD2>font</KEYWORD2> + <KEYWORD2>font-family</KEYWORD2> + <KEYWORD2>font-size</KEYWORD2> + <KEYWORD2>font-style</KEYWORD2> + <KEYWORD2>font-variant</KEYWORD2> + <KEYWORD2>font-weight</KEYWORD2> + <KEYWORD2>height</KEYWORD2> + <KEYWORD2>justify-content</KEYWORD2> <KEYWORD2>left</KEYWORD2> - <KEYWORD2>float</KEYWORD2> - <KEYWORD2>z-index</KEYWORD2> - <KEYWORD2>direction</KEYWORD2> - <KEYWORD2>unicode-bidi</KEYWORD2> - <KEYWORD2>width</KEYWORD2> - <KEYWORD2>min-width</KEYWORD2> + <KEYWORD2>letter-spacing</KEYWORD2> + <KEYWORD2>line-break</KEYWORD2> + <KEYWORD2>line-height</KEYWORD2> + <KEYWORD2>list-style</KEYWORD2> + <KEYWORD2>list-style-image</KEYWORD2> + <KEYWORD2>list-style-position</KEYWORD2> + <KEYWORD2>list-style-type</KEYWORD2> + <KEYWORD2>margin</KEYWORD2> + <KEYWORD2>margin-bottom</KEYWORD2> + <KEYWORD2>margin-left</KEYWORD2> + <KEYWORD2>margin-right</KEYWORD2> + <KEYWORD2>margin-top</KEYWORD2> + <KEYWORD2>max-height</KEYWORD2> <KEYWORD2>max-width</KEYWORD2> - <KEYWORD2>height</KEYWORD2> <KEYWORD2>min-height</KEYWORD2> - <KEYWORD2>max-height</KEYWORD2> - <KEYWORD2>line-height</KEYWORD2> - <KEYWORD2>vertical-align</KEYWORD2> - - <!-- Visual effects --> + <KEYWORD2>min-width</KEYWORD2> + <KEYWORD2>object-fit</KEYWORD2> + <KEYWORD2>opacity</KEYWORD2> + <KEYWORD2>order</KEYWORD2> + <KEYWORD2>orphans</KEYWORD2> + <KEYWORD2>outline</KEYWORD2> + <KEYWORD2>outline-color</KEYWORD2> + <KEYWORD2>outline-offset</KEYWORD2> + <KEYWORD2>outline-style</KEYWORD2> + <KEYWORD2>outline-width</KEYWORD2> <KEYWORD2>overflow</KEYWORD2> + <KEYWORD2>overflow-wrap</KEYWORD2> <KEYWORD2>overflow-x</KEYWORD2> <KEYWORD2>overflow-y</KEYWORD2> - <KEYWORD2>clip</KEYWORD2> - <KEYWORD2>visibility</KEYWORD2> + <KEYWORD2>padding</KEYWORD2> + <KEYWORD2>padding-bottom</KEYWORD2> + <KEYWORD2>padding-left</KEYWORD2> + <KEYWORD2>padding-right</KEYWORD2> + <KEYWORD2>padding-top</KEYWORD2> + <KEYWORD2>page-break-after</KEYWORD2> + <KEYWORD2>page-break-before</KEYWORD2> + <KEYWORD2>page-break-inside</KEYWORD2> <KEYWORD2>perspective</KEYWORD2> <KEYWORD2>perspective-origin</KEYWORD2> + <KEYWORD2>position</KEYWORD2> + <KEYWORD2>quotes</KEYWORD2> + <KEYWORD2>resize</KEYWORD2> + <KEYWORD2>right</KEYWORD2> + <KEYWORD2>table-layout</KEYWORD2> + <KEYWORD2>text-align</KEYWORD2> + <KEYWORD2>text-decoration</KEYWORD2> + <KEYWORD2>text-indent</KEYWORD2> + <KEYWORD2>text-overflow</KEYWORD2> + <KEYWORD2>text-shadow</KEYWORD2> + <KEYWORD2>text-transform</KEYWORD2> + <KEYWORD2>top</KEYWORD2> <KEYWORD2>transform</KEYWORD2> <KEYWORD2>transform-origin</KEYWORD2> <KEYWORD2>transform-style</KEYWORD2> <KEYWORD2>transition</KEYWORD2> + <KEYWORD2>transition-delay</KEYWORD2> + <KEYWORD2>transition-duration</KEYWORD2> <KEYWORD2>transition-property</KEYWORD2> - <KEYWORD2>transition-duration</KEYWORD2> <KEYWORD2>transition-timing-function</KEYWORD2> - <KEYWORD2>transition-delay</KEYWORD2> - - <!-- Page properties --> - <KEYWORD2>page-break-before</KEYWORD2> - <KEYWORD2>page-break-after</KEYWORD2> - <KEYWORD2>page-break-inside</KEYWORD2> - <KEYWORD2>orphans</KEYWORD2> + <KEYWORD2>unicode-bidi</KEYWORD2> + <KEYWORD2>vertical-align</KEYWORD2> + <KEYWORD2>visibility</KEYWORD2> + <KEYWORD2>white-space</KEYWORD2> <KEYWORD2>widows</KEYWORD2> + <KEYWORD2>width</KEYWORD2> + <KEYWORD2>word-break</KEYWORD2> + <KEYWORD2>word-spacing</KEYWORD2> + <KEYWORD2>word-wrap</KEYWORD2> + <KEYWORD2>z-index</KEYWORD2> - <!-- Table properties --> - <KEYWORD2>caption-side</KEYWORD2> - <KEYWORD2>table-layout</KEYWORD2> - <KEYWORD2>border-collapse</KEYWORD2> - <KEYWORD2>border-spacing</KEYWORD2> - <KEYWORD2>empty-cells</KEYWORD2> - <KEYWORD2>speak-headers</KEYWORD2> - - <!-- User interface --> - <KEYWORD2>cursor</KEYWORD2> - <KEYWORD2>outline</KEYWORD2> - <KEYWORD2>outline-width</KEYWORD2> - <KEYWORD2>outline-style</KEYWORD2> - <KEYWORD2>outline-color</KEYWORD2> - <KEYWORD2>outline-offset</KEYWORD2> - - <!-- Aural properties --> - <KEYWORD2>azimuth</KEYWORD2> - <KEYWORD2>volume</KEYWORD2> - <KEYWORD2>speak</KEYWORD2> - <KEYWORD2>pause</KEYWORD2> - <KEYWORD2>pause-before</KEYWORD2> - <KEYWORD2>pause-after</KEYWORD2> - <KEYWORD2>cue</KEYWORD2> - <KEYWORD2>cue-before</KEYWORD2> - <KEYWORD2>cue-after</KEYWORD2> - <KEYWORD2>play-during</KEYWORD2> - <KEYWORD2>elevation</KEYWORD2> - <KEYWORD2>speech-rate</KEYWORD2> - <KEYWORD2>voice-family</KEYWORD2> - <KEYWORD2>pitch</KEYWORD2> - <KEYWORD2>pitch-range</KEYWORD2> - <KEYWORD2>stress</KEYWORD2> - <KEYWORD2>richness</KEYWORD2> - <KEYWORD2>speak-punctuation</KEYWORD2> - <KEYWORD2>speak-numeral</KEYWORD2> - <KEYWORD2>speak-header-cell</KEYWORD2> - - <KEYWORD2>animation</KEYWORD2> - <KEYWORD2>animation-name</KEYWORD2> - <KEYWORD2>animation-duration</KEYWORD2> - <KEYWORD2>animation-timing-function</KEYWORD2> - <KEYWORD2>animation-delay</KEYWORD2> - <KEYWORD2>animation-iteration-count</KEYWORD2> - <KEYWORD2>animation-direction</KEYWORD2> - <KEYWORD2>animation-play-state</KEYWORD2> - - <KEYWORD2>appearance</KEYWORD2> - - <!-- these properties are proposed for css3, but are either not - supported by any browser or are specific to a single browser. --> - <INVALID>alignment-adjust</INVALID> - <INVALID>alignment-baseline</INVALID> - <INVALID>backface-visibility</INVALID> - <INVALID>baseline-shift</INVALID> - <INVALID>bookmark-label</INVALID> - <INVALID>bookmark-level</INVALID> - <INVALID>bookmark-target</INVALID> - <INVALID>border-image</INVALID> - <INVALID>border-image-outset</INVALID> - <INVALID>border-image-repeat</INVALID> - <INVALID>border-image-slice</INVALID> - <INVALID>border-image-source</INVALID> - <INVALID>border-image-width</INVALID> - <INVALID>box-decoration-break</INVALID> - <INVALID>box-flex-group</INVALID> - <INVALID>box-lines</INVALID> - <INVALID>color-profile</INVALID> - <INVALID>column-fill</INVALID> - <INVALID>crop</INVALID> - <INVALID>dominant-baseline</INVALID> - <INVALID>drop-initial-after-adjust</INVALID> - <INVALID>drop-initial-after-align</INVALID> - <INVALID>drop-initial-before-adjust</INVALID> - <INVALID>drop-initial-before-align</INVALID> - <INVALID>drop-initial-size</INVALID> - <INVALID>drop-initial-value</INVALID> - <INVALID>fit</INVALID> - <INVALID>fit-position</INVALID> - <INVALID>float-offset</INVALID> - <INVALID>font-stretch</INVALID> - <INVALID>font-size-adjust</INVALID> - <INVALID>grid-columns</INVALID> - <INVALID>grid-rows</INVALID> - <INVALID>hanging-punctuation</INVALID> - <INVALID>hyphenate-after</INVALID> - <INVALID>hyphenate-before</INVALID> - <INVALID>hyphenate-characters</INVALID> - <INVALID>hyphenate-lines</INVALID> - <INVALID>hyphenate-resource</INVALID> - <INVALID>hyphens</INVALID> - <INVALID>icon</INVALID> - <INVALID>image-orientation</INVALID> - <INVALID>image-resolution</INVALID> - <INVALID>inline-box-align</INVALID> - <INVALID>line-stacking</INVALID> - <INVALID>line-stacking-ruby</INVALID> - <INVALID>line-stacking-shift</INVALID> - <INVALID>line-stacking-strategy</INVALID> - <INVALID>mark</INVALID> - <INVALID>mark-after</INVALID> - <INVALID>mark-before</INVALID> - <INVALID>marks</INVALID> - <INVALID>marquee-direction</INVALID> - <INVALID>marquee-play-count</INVALID> - <INVALID>marquee-speed</INVALID> - <INVALID>marquee-style</INVALID> - <INVALID>move-to</INVALID> - <INVALID>nav-down</INVALID> - <INVALID>nav-index</INVALID> - <INVALID>nav-left</INVALID> - <INVALID>nav-right</INVALID> - <INVALID>nav-up</INVALID> - <INVALID>overflow-style</INVALID> - <INVALID>page</INVALID> - <INVALID>page-policy</INVALID> - <INVALID>phonemes</INVALID> - <INVALID>punctuation-trim</INVALID> - <INVALID>rest</INVALID> - <INVALID>rest-after</INVALID> - <INVALID>rest-before</INVALID> - <INVALID>rotation</INVALID> - <INVALID>rotation-point</INVALID> - <INVALID>ruby-align</INVALID> - <INVALID>ruby-overhang</INVALID> - <INVALID>ruby-position</INVALID> - <INVALID>ruby-span</INVALID> - <INVALID>size</INVALID> - <INVALID>string-set</INVALID> - <INVALID>target</INVALID> - <INVALID>target-name</INVALID> - <INVALID>target-new</INVALID> - <INVALID>target-position</INVALID> - <INVALID>text-align-last</INVALID> - <INVALID>text-emphasis</INVALID> - <INVALID>text-height</INVALID> - <INVALID>text-outline</INVALID> - <INVALID>text-wrap</INVALID> - <INVALID>voice-balance</INVALID> - <INVALID>voice-duration</INVALID> - <INVALID>voice-pitch</INVALID> - <INVALID>voice-pitch-range</INVALID> - <INVALID>voice-rate</INVALID> - <INVALID>voice-stress</INVALID> - <INVALID>voice-volume</INVALID> - </KEYWORDS> </RULES> @@ -716,6 +603,7 @@ <KEYWORD3>text-top</KEYWORD3> <KEYWORD3>thick</KEYWORD3> <KEYWORD3>thin</KEYWORD3> + <KEYWORD3>to</KEYWORD3> <KEYWORD3>top</KEYWORD3> <KEYWORD3>transparent</KEYWORD3> <KEYWORD3>ultra-condensed</KEYWORD3> @@ -748,7 +636,7 @@ <KEYWORD3>x-weak</KEYWORD3> <KEYWORD3>xx-large</KEYWORD3> <KEYWORD3>xx-small</KEYWORD3> - + <!-- Colors --> <KEYWORD4>aliceblue</KEYWORD4> <KEYWORD4>antiquewhite</KEYWORD4> @@ -942,6 +830,8 @@ <KEYWORD2>@media</KEYWORD2> <KEYWORD2>@page</KEYWORD2> <KEYWORD2>@font-face</KEYWORD2> + <KEYWORD2>@namespace</KEYWORD2> + <KEYWORD2>@comment</KEYWORD2> </KEYWORDS> </RULES> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2016-07-16 02:42:54
|
Revision: 24459 http://sourceforge.net/p/jedit/svn/24459 Author: ezust Date: 2016-07-16 02:42:50 +0000 (Sat, 16 Jul 2016) Log Message: ----------- Fix bug #2732 - syntax highlighting broken if non-visible lines change (Patch #580 - Marc H?\195?\164fner) Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/keymaps/Alan_keys.props jEdit/trunk/org/gjt/sp/jedit/buffer/LineManager.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2016-07-15 13:30:02 UTC (rev 24458) +++ jEdit/trunk/doc/CHANGES.txt 2016-07-16 02:42:50 UTC (rev 24459) @@ -10,6 +10,9 @@ {{{ Bug Fixes +- Fix bug #2732 - syntax highlighting broken if non-visible lines change + (Patch #580 - Marc Häfner) + - Fix bug #3659 - Macro Keywords_to_Upper_Case fails to find class (Patch #582 - Marc Häfner) Modified: jEdit/trunk/keymaps/Alan_keys.props =================================================================== --- jEdit/trunk/keymaps/Alan_keys.props 2016-07-15 13:30:02 UTC (rev 24458) +++ jEdit/trunk/keymaps/Alan_keys.props 2016-07-16 02:42:50 UTC (rev 24459) @@ -14,16 +14,13 @@ Emacs/Emacs_Kill_Line.shortcut=C+k Emacs/Emacs_Upcase_Word.shortcut=A+u Files/Browse_Buffer_Directory.shortcut=CA+b -Files/Next_Dirty_Buffer.shortcut=C+x C+d Files/Send_Buffer_To_Next_Split.shortcut=C+w C+b Interface/Decrease_Font_Size.shortcut=C+SUBTRACT Interface/Increase_Font_Size.shortcut=C+ADD Interface/Reset_TextArea.shortcut=C+x C+r Interface/Splitpane_Grow.shortcut=C+x C+6 -Next_Char2.shortcut=C+x C+q Paste_Plugins_List.shortcut=C+x C+i Properties/Create_Plugin_Announcement.shortcut2=C+q c -Redo.shortcut=C+F4 Reset_TextArea_dev.shortcut=C+x C+r RunPython.shortcut=C+9 Splitpane_Grow.shortcut=C+x C+6 Modified: jEdit/trunk/org/gjt/sp/jedit/buffer/LineManager.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/buffer/LineManager.java 2016-07-15 13:30:02 UTC (rev 24458) +++ jEdit/trunk/org/gjt/sp/jedit/buffer/LineManager.java 2016-07-16 02:42:50 UTC (rev 24459) @@ -243,9 +243,6 @@ else if(gapLine != -1) offset -= gapWidth; - if(startLine < firstInvalidLineContext) - firstInvalidLineContext += numLines; - for(int i = 0; i < numLines; i++) { this.endOffsets[startLine + i] = (offset + endOffsets.get(i)); @@ -253,6 +250,9 @@ } } //}}} + if(firstInvalidLineContext == -1 || firstInvalidLineContext > startLine) + firstInvalidLineContext = startLine; + if(firstInvalidFoldLevel == -1 || firstInvalidFoldLevel > startLine) firstInvalidFoldLevel = startLine; moveGap(endLine,length,"contentInserted"); @@ -274,11 +274,6 @@ else if(startLine < gapLine) gapLine = startLine; - if(startLine + numLines < firstInvalidLineContext) - firstInvalidLineContext -= numLines; - else if(startLine < firstInvalidLineContext) - firstInvalidLineContext = startLine - 1; - lineCount -= numLines; System.arraycopy(endOffsets,endLine,endOffsets, @@ -289,6 +284,9 @@ startLine,lineCount - startLine); } //}}} + if(firstInvalidLineContext == -1 || firstInvalidLineContext > startLine) + firstInvalidLineContext = startLine; + if(firstInvalidFoldLevel == -1 || firstInvalidFoldLevel > startLine) firstInvalidFoldLevel = startLine; moveGap(startLine,-length,"contentRemoved"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2016-07-17 21:15:09
|
Revision: 24462 http://sourceforge.net/p/jedit/svn/24462 Author: ezust Date: 2016-07-17 21:15:06 +0000 (Sun, 17 Jul 2016) Log Message: ----------- FR #520 Environment variables in Find dialog Directory Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/search/SearchDialog.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2016-07-17 18:57:20 UTC (rev 24461) +++ jEdit/trunk/doc/CHANGES.txt 2016-07-17 21:15:06 UTC (rev 24462) @@ -66,6 +66,9 @@ }}} {{{ UI Improvements +- Feature Request #520 Environment variables in Find dialog Directory + (Alan Ezust) + - UI clean up, button spacing, borders, etc. (Dale Anson) - Implemented feature request #493, ask for confirmation before closing all Modified: jEdit/trunk/org/gjt/sp/jedit/search/SearchDialog.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/search/SearchDialog.java 2016-07-17 18:57:20 UTC (rev 24461) +++ jEdit/trunk/org/gjt/sp/jedit/search/SearchDialog.java 2016-07-17 21:15:06 UTC (rev 24462) @@ -190,7 +190,7 @@ { filter.setText(((DirectoryListSet)fileset) .getFileFilter()); - directory.setText(((DirectoryListSet)fileset) + directoryField.setText(((DirectoryListSet)fileset) .getDirectory()); searchSubDirectories.setSelected(((DirectoryListSet)fileset) .isRecursive()); @@ -310,7 +310,7 @@ // directory controls focusOrder.add(filter); focusOrder.add(synchronize); - focusOrder.add(directory); + focusOrder.add(directoryField); focusOrder.add(choose); focusOrder.add(searchSubDirectories); focusOrder.add(skipHidden); @@ -346,7 +346,7 @@ searchAllBuffers, searchDirectory; // multifile settings - private HistoryTextField filter, directory; + private HistoryTextField filter, directoryField; private JCheckBox searchSubDirectories; private JCheckBox skipBinaryFiles; private JCheckBox skipHidden; @@ -652,9 +652,9 @@ cons.gridy++; - directory = new HistoryTextField("search.directory"); - directory.setColumns(25); - directory.addActionListener(actionListener); + directoryField = new HistoryTextField("search.directory"); + directoryField.setColumns(25); + directoryField.addActionListener(actionListener); label = new JLabel(jEdit.getProperty("search.directoryField"), SwingConstants.RIGHT); @@ -662,7 +662,7 @@ label.setDisplayedMnemonic(jEdit.getProperty("search.directoryField.mnemonic") .charAt(0)); - label.setLabelFor(directory); + label.setLabelFor(directoryField); cons.insets = new Insets(0,0,3,0); cons.weightx = 0.0; layout.setConstraints(label,cons); @@ -671,8 +671,8 @@ cons.insets = new Insets(0,0,3,6); cons.weightx = 1.0; cons.gridwidth = 2; - layout.setConstraints(directory,cons); - multifile.add(directory); + layout.setConstraints(directoryField,cons); + multifile.add(directoryField); choose = new JButton(jEdit.getProperty("search.choose")); choose.setMnemonic(jEdit.getProperty("search.choose.mnemonic") @@ -777,7 +777,7 @@ || searchDirectory.isSelected()); boolean searchDirs = searchDirectory.isSelected(); - directory.setEnabled(searchDirs); + directoryField.setEnabled(searchDirs); choose.setEnabled(searchDirs); searchSubDirectories.setEnabled(searchDirs); skipHidden.setEnabled(searchDirs); @@ -836,10 +836,11 @@ fileset = new AllBufferSet(filter, view); else if(searchDirectory.isSelected()) { - String directory = this.directory.getText(); - this.directory.addCurrentToHistory(); + String directory = this.directoryField.getText(); + directory = MiscUtilities.expandVariables(directory); + this.directoryField.addCurrentToHistory(); directory = MiscUtilities.constructPath( - view.getBuffer().getDirectory(),directory); + view.getBuffer().getDirectory(), directory); if((VFSManager.getVFSForPath(directory).getCapabilities() & VFS.LOW_LATENCY_CAP) == 0) @@ -964,11 +965,11 @@ .getFileExtension(view.getBuffer() .getName())); } - model = directory.getModel(); + model = directoryField.getModel(); if(model.getSize() != 0) - directory.setText(model.getItem(0)); + directoryField.setText(model.getItem(0)); else - directory.setText(view.getBuffer().getDirectory()); + directoryField.setText(view.getBuffer().getDirectory()); searchSubDirectories.setSelected(jEdit.getBooleanProperty( "search.subdirs.toggle")); @@ -977,7 +978,7 @@ { filter.setText(((DirectoryListSet)fileset) .getFileFilter()); - directory.setText(((DirectoryListSet)fileset) + directoryField.setText(((DirectoryListSet)fileset) .getDirectory()); searchSubDirectories.setSelected(((DirectoryListSet)fileset) .isRecursive()); @@ -988,7 +989,7 @@ .getFileFilter()); } - directory.addCurrentToHistory(); + directoryField.addCurrentToHistory(); keepDialog.setSelected(jEdit.getBooleanProperty( "search.keepDialog.toggle")); @@ -1039,11 +1040,11 @@ { String[] dirs = GUIUtilities.showVFSFileDialog( SearchDialog.this, - view,directory.getText(), + view,directoryField.getText(), VFSBrowser.CHOOSE_DIRECTORY_DIALOG, false); if(dirs != null) - directory.setText(dirs[0]); + directoryField.setText(dirs[0]); } else if(evt.getSource() == synchronize) { @@ -1064,7 +1065,7 @@ // don't sync search directory when "search all buffers" is active if(searchDirectory.isSelected()) { - directory.setText(view.getBuffer().getDirectory()); + directoryField.setText(view.getBuffer().getDirectory()); } if (!jEdit.getBooleanProperty("search.dontSyncFilter", false)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2016-07-26 01:00:20
|
Revision: 24466 http://sourceforge.net/p/jedit/svn/24466 Author: ezust Date: 2016-07-26 01:00:17 +0000 (Tue, 26 Jul 2016) Log Message: ----------- EnhancedDialog NPE fix for when there is no close shortcut assigned (Patch # 588 - Scott McPeak) Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/gui/EnhancedDialog.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2016-07-22 12:22:51 UTC (rev 24465) +++ jEdit/trunk/doc/CHANGES.txt 2016-07-26 01:00:17 UTC (rev 24466) @@ -118,11 +118,14 @@ Thanks to Björn "Vampire" Kautler, Alan Ezust, Makarius, Jakub Holý, Mark Corbin, Matt Galligan, Kevin Hunter Kesling, Darien Brown, Matthieu Casanova, Sergey Mashkov, Dale Anson, Kevin Leblanc, -Marcelo Vanzin, Jordan Miner, yaraba, Marc M. Adkins, and Eric Le Lay for -contributing to this release. +Marcelo Vanzin, Jordan Miner, yaraba, Marc M. Adkins, Scott McPeak, and +Eric Le Lay for contributing to this release. {{{ Bug Fixes +- EnhancedDialog NPE fix for when there is no close shortcut assigned + (Patch # 588 - Scott McPeak) + - JEditBuffer.isFoldEnd() was unable to detect the fold end when it was the last line (#3917 - Matthieu Casanova) Modified: jEdit/trunk/org/gjt/sp/jedit/gui/EnhancedDialog.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/gui/EnhancedDialog.java 2016-07-22 12:22:51 UTC (rev 24465) +++ jEdit/trunk/org/gjt/sp/jedit/gui/EnhancedDialog.java 2016-07-26 01:00:17 UTC (rev 24466) @@ -177,8 +177,9 @@ private boolean isCloseBufferShortcut(KeyEvent evt) { - String[] s = GUIUtilities.getShortcutLabel("close-buffer", false).split(" or "); - + String shortcut = GUIUtilities.getShortcutLabel("close-buffer", false); + if (shortcut == null) return false; + String[] s = shortcut.split(" or "); if(s.length == 1) { // w/o alternative shortcut if(s[0].contains(" ")) //primary shortcut is a multiple-key shortcut This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2016-07-31 01:55:20
|
Revision: 24469 http://sourceforge.net/p/jedit/svn/24469 Author: ezust Date: 2016-07-31 01:55:18 +0000 (Sun, 31 Jul 2016) Log Message: ----------- Bug 3857 fixed, related to resolving symlinks of buffers and checking for updated buffers (Patch # 589 - Wim West) Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/View.java jEdit/trunk/org/gjt/sp/jedit/jEdit.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2016-07-30 13:19:55 UTC (rev 24468) +++ jEdit/trunk/doc/CHANGES.txt 2016-07-31 01:55:18 UTC (rev 24469) @@ -123,6 +123,9 @@ {{{ Bug Fixes +- Bug 3857 fixed, related to resolving symlinks of buffers and checking for + updated buffers (Patch # 589 - Wim West) + - EnhancedDialog NPE fix for when there is no close shortcut assigned (Patch # 588 - Scott McPeak) Modified: jEdit/trunk/org/gjt/sp/jedit/View.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/View.java 2016-07-30 13:19:55 UTC (rev 24468) +++ jEdit/trunk/org/gjt/sp/jedit/View.java 2016-07-31 01:55:18 UTC (rev 24469) @@ -2077,7 +2077,9 @@ final int check = jEdit.getIntegerProperty("checkFileStatus"); if ((check == 0) || !jEdit.isStartupDone()) return; // "buffer visit" also includes checking the buffer when you change editpanes. - if ((msg.getWhat() == ViewUpdate.EDIT_PANE_CHANGED) && + // "buffer visit" also includes checking the buffer when you activate view, coming from + // another program, which could have alterered file on disk. + if ((msg.getWhat() == ViewUpdate.EDIT_PANE_CHANGED || msg.getWhat() == ViewUpdate.ACTIVATED) && ((check & GeneralOptionPane.checkFileStatus_focusBuffer) > 0)) jEdit.checkBufferStatus(View.this, true); else if ((msg.getWhat() == ViewUpdate.ACTIVATED) && Modified: jEdit/trunk/org/gjt/sp/jedit/jEdit.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jEdit.java 2016-07-30 13:19:55 UTC (rev 24468) +++ jEdit/trunk/org/gjt/sp/jedit/jEdit.java 2016-07-31 01:55:18 UTC (rev 24469) @@ -2482,7 +2482,20 @@ if(buffer.isDirty()) notifyFileChanged = true; else + { buffer.load(view,true); + // File can be changed into link on disk or vice versa, so update + // file-path,buffer key value pair in bufferHash + final Buffer b = buffer; + Runnable runnable = new Runnable() + { + public void run() + { + updateBufferHash(b); + } + }; + AwtRunnableQueue.INSTANCE.runAfterIoTasks(runnable); + } } else // no automatic reload even if general setting is true autoReload = false; @@ -3247,6 +3260,35 @@ return activeView; } //}}} + //{{{ updateBufferHash() method + /** + * @since jEdit 5.3pre1 + */ + static void updateBufferHash(Buffer buffer) + { + // Remove path,buffer key,value pair from bufferHash. We use iterator over values + // to find our buffer i.s.o. removing it with bufferHash.remove(oldPath), because + // path can be changed (e.g. file changed on disk into link. + for (Iterator<Buffer> iterator = bufferHash.values().iterator(); iterator.hasNext();) + { + Buffer b = (Buffer) iterator.next(); + // Since values() is a Collection connected to bufferHash, removing buffer from the + // values() collection also removes it from bufferHash + if(buffer == b) + iterator.remove(); + } + + String path = buffer.getSymlinkPath(); + if((VFSManager.getVFSForPath(path).getCapabilities() + & VFS.CASE_INSENSITIVE_CAP) != 0) + { + path = path.toLowerCase(); + } + + bufferHash.put(path,buffer); + + } //}}} + //}}} //{{{ Private members This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dal...@us...> - 2016-08-03 17:35:23
|
Revision: 24483 http://sourceforge.net/p/jedit/svn/24483 Author: daleanson Date: 2016-08-03 17:35:20 +0000 (Wed, 03 Aug 2016) Log Message: ----------- Fix for bug #4002, horizontal scroll bar too short on view resize. Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/textarea/TextArea.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2016-08-03 01:32:07 UTC (rev 24482) +++ jEdit/trunk/doc/CHANGES.txt 2016-08-03 17:35:20 UTC (rev 24483) @@ -66,6 +66,8 @@ - Fix bug #3994, ConcurrentModificationException in ProperyManager. (Dale Anson) +- Fix bug #4002, too short horizontal scrollbar after view resize. (Dale Anson) + }}} {{{ UI Improvements Modified: jEdit/trunk/org/gjt/sp/jedit/textarea/TextArea.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/textarea/TextArea.java 2016-08-03 01:32:07 UTC (rev 24482) +++ jEdit/trunk/org/gjt/sp/jedit/textarea/TextArea.java 2016-08-03 17:35:20 UTC (rev 24483) @@ -5013,27 +5013,15 @@ //{{{ updateMaxHorizontalScrollWidth() method void updateMaxHorizontalScrollWidth() { - int max = chunkCache.getMaxHorizontalScrollWidth(); - - if(max != maxHorizontalScrollWidth) - { - maxHorizontalScrollWidth = max; - horizontal.setValues( - Math.max(0, - Math.min( - maxHorizontalScrollWidth + charWidth - painter.getWidth(), - -horizontalOffset) - ), - painter.getWidth(), - 0, - maxHorizontalScrollWidth + charWidth); - horizontal.setUnitIncrement(10); - horizontal.setBlockIncrement(painter.getWidth()); - } - else if (horizontal.getValue() != -horizontalOffset) - { - horizontal.setValue(-horizontalOffset); - } + maxHorizontalScrollWidth = chunkCache.getMaxHorizontalScrollWidth(); + horizontal.setValues( + Math.max(0, Math.min(maxHorizontalScrollWidth + charWidth - painter.getWidth(), -horizontalOffset)), + painter.getWidth(), + 0, + maxHorizontalScrollWidth + charWidth + ); + horizontal.setUnitIncrement(10); + horizontal.setBlockIncrement(painter.getWidth()); } //}}} //{{{ recalculateVisibleLines() method This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dal...@us...> - 2016-08-09 06:16:43
|
Revision: 24485 http://sourceforge.net/p/jedit/svn/24485 Author: daleanson Date: 2016-08-09 06:16:40 +0000 (Tue, 09 Aug 2016) Log Message: ----------- Updates to the printing system. Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/actions.xml jEdit/trunk/org/gjt/sp/jedit/gui/NumericTextField.java jEdit/trunk/org/gjt/sp/jedit/options/PrintOptionPane.java jEdit/trunk/org/gjt/sp/jedit/print/BufferPrintable.java jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_4.java jEdit/trunk/org/gjt/sp/jedit/print/PrinterDialog.java jEdit/trunk/org/jedit/localization/jedit_en.props Added Paths: ----------- jEdit/trunk/org/gjt/sp/jedit/print/BufferPrintable1_7.java jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_7.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2016-08-05 12:44:51 UTC (rev 24484) +++ jEdit/trunk/doc/CHANGES.txt 2016-08-09 06:16:40 UTC (rev 24485) @@ -82,6 +82,9 @@ - Refactor editing option pane into several tabs, allow user editing of modes lists, similar to editing the encoding options lists. This also fixes feature request #515. (Dale Anson) + +- Updated NumericTextField to allow decimal numbers and only allow negative sign + at the start of a number. (Dale Anson) }}} {{{ Miscellaneous Modified: jEdit/trunk/org/gjt/sp/jedit/actions.xml =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/actions.xml 2016-08-05 12:44:51 UTC (rev 24484) +++ jEdit/trunk/org/gjt/sp/jedit/actions.xml 2016-08-09 06:16:40 UTC (rev 24485) @@ -813,7 +813,7 @@ <ACTION NAME="page-setup"> <CODE> - BufferPrinter1_4.pageSetup(view); + BufferPrinter1_7.pageSetup(view); </CODE> </ACTION> @@ -968,10 +968,10 @@ <ACTION NAME="print"> <CODE> - if(jEdit.getBooleanProperty("print.force13")) - BufferPrinter1_3.print(view,buffer,false); + if(jEdit.getBooleanProperty("print.useSystemDialog", true)) + BufferPrinter1_4.print(view, buffer, false); else - BufferPrinter1_4.print(view,buffer,false); + BufferPrinter1_7.print(view, buffer, false); </CODE> </ACTION> @@ -979,7 +979,7 @@ <!-- <ACTION NAME="print-selection"> <CODE> - BufferPrinter.print(view,buffer,true); + BufferPrinter.print(view, buffer, true); </CODE> </ACTION> --> Modified: jEdit/trunk/org/gjt/sp/jedit/gui/NumericTextField.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/gui/NumericTextField.java 2016-08-05 12:44:51 UTC (rev 24484) +++ jEdit/trunk/org/gjt/sp/jedit/gui/NumericTextField.java 2016-08-09 06:16:40 UTC (rev 24485) @@ -24,7 +24,7 @@ import javax.swing.*; import java.awt.event.KeyEvent; -/** A TextField that accepts only numeric values +/** A TextField that accepts only numeric values. * @author Matthieu Casanova * @version $Id: KeyEventWorkaround.java 12889 2008-06-23 20:14:00Z kpouer $ * @since jEdit 4.3pre15 @@ -32,6 +32,7 @@ public class NumericTextField extends JTextField { private final boolean positiveOnly; + private final boolean integerOnly; public NumericTextField(String text) { @@ -42,23 +43,66 @@ { super(text); this.positiveOnly = positiveOnly; + integerOnly = true; } - public NumericTextField(String text, int columns, boolean positiveOnly) { + public NumericTextField(String text, boolean positiveOnly, boolean integerOnly) + { + super(text); + this.positiveOnly = positiveOnly; + this.integerOnly = integerOnly; + } + + public NumericTextField(String text, int columns, boolean positiveOnly) + { super(text, columns); this.positiveOnly = positiveOnly; + integerOnly = true; } + + public NumericTextField(String text, int columns, boolean positiveOnly, boolean integerOnly) + { + super(text, columns); + this.positiveOnly = positiveOnly; + this.integerOnly = integerOnly; + } @Override protected void processKeyEvent(KeyEvent e) { if (e.getID() == KeyEvent.KEY_TYPED) { - if (!Character.isDigit(e.getKeyChar()) && !(!positiveOnly && e.getKeyChar() == '-')) + char c = e.getKeyChar(); + if (Character.isDigit(c)) { + super.processKeyEvent(e); + } + else if (positiveOnly && c == '-') + { e.consume(); } + else if (c == '-' && getCaretPosition() == 0) + { + super.processKeyEvent(e); + } + else if (integerOnly && c == '.') + { + e.consume(); + } + else if (c == '.' && getText().indexOf('.') == -1) + { + super.processKeyEvent(e); + } + return; } super.processKeyEvent(e); } + + public Number getValue() + { + if (integerOnly) + return Integer.valueOf(getText()); + else + return Float.valueOf(getText()); + } } Modified: jEdit/trunk/org/gjt/sp/jedit/options/PrintOptionPane.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/options/PrintOptionPane.java 2016-08-05 12:44:51 UTC (rev 24484) +++ jEdit/trunk/org/gjt/sp/jedit/options/PrintOptionPane.java 2016-08-09 06:16:40 UTC (rev 24485) @@ -95,20 +95,25 @@ "options.print.force13")); force13.setSelected(jEdit.getBooleanProperty("print.force13")); addComponent(force13); + + useSystemDialog = new JCheckBox(jEdit.getProperty("options.print.useSystemDialog")); + useSystemDialog.setSelected(jEdit.getBooleanProperty("print.useSystemDialog", true)); + addComponent(useSystemDialog); } //}}} //{{{ _save() method protected void _save() { - jEdit.setFontProperty("print.font",font.getFont()); - jEdit.setBooleanProperty("print.header",printHeader.isSelected()); - jEdit.setBooleanProperty("print.footer",printFooter.isSelected()); - jEdit.setBooleanProperty("print.lineNumbers",printLineNumbers.isSelected()); - jEdit.setBooleanProperty("print.color",color.isSelected()); - jEdit.setProperty("print.tabSize",(String)tabSize.getSelectedItem()); - jEdit.setBooleanProperty("print.glyphVector",glyphVector.isSelected()); - jEdit.setBooleanProperty("print.force13",force13.isSelected()); - jEdit.setBooleanProperty("print.folds",printFolds.isSelected()); + jEdit.setFontProperty("print.font", font.getFont()); + jEdit.setBooleanProperty("print.header", printHeader.isSelected()); + jEdit.setBooleanProperty("print.footer", printFooter.isSelected()); + jEdit.setBooleanProperty("print.lineNumbers", printLineNumbers.isSelected()); + jEdit.setBooleanProperty("print.color", color.isSelected()); + jEdit.setProperty("print.tabSize", (String)tabSize.getSelectedItem()); + jEdit.setBooleanProperty("print.glyphVector", glyphVector.isSelected()); + jEdit.setBooleanProperty("print.force13", force13.isSelected()); + jEdit.setBooleanProperty("print.folds", printFolds.isSelected()); + jEdit.setBooleanProperty("print.useSystemDialog", useSystemDialog.isSelected()); } //}}} //{{{ Private members @@ -121,5 +126,6 @@ private JComboBox<String> tabSize; private JCheckBox glyphVector; private JCheckBox force13; + private JCheckBox useSystemDialog; //}}} } Modified: jEdit/trunk/org/gjt/sp/jedit/print/BufferPrintable.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/print/BufferPrintable.java 2016-08-05 12:44:51 UTC (rev 24484) +++ jEdit/trunk/org/gjt/sp/jedit/print/BufferPrintable.java 2016-08-09 06:16:40 UTC (rev 24485) @@ -30,9 +30,9 @@ import java.awt.geom.*; import java.awt.print.*; import java.awt.*; +import java.lang.reflect.Method; import java.util.*; import java.util.List; -import javax.print.attribute.PrintRequestAttributeSet; import org.gjt.sp.jedit.syntax.*; import org.gjt.sp.jedit.*; @@ -45,7 +45,7 @@ class BufferPrintable implements Printable { //{{{ BufferPrintable constructor - BufferPrintable(PrinterJob job, PrintRequestAttributeSet format, + BufferPrintable(PrinterJob job, Object format, View view, Buffer buffer, Font font, boolean header, boolean footer, boolean lineNumbers, boolean color) { @@ -92,7 +92,10 @@ job.print(); else { - job.print(format); + Method method = PrinterJob.class.getMethod( + "print",new Class[] { Class.forName( + "javax.print.attribute.PrintRequestAttributeSet") }); + method.invoke(job,new Object[] { format }); } } catch(PrinterAbortException ae) @@ -178,7 +181,7 @@ //{{{ Instance variables private PrinterJob job; - private PrintRequestAttributeSet format; + private Object format; private View view; private Buffer buffer; Added: jEdit/trunk/org/gjt/sp/jedit/print/BufferPrintable1_7.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/print/BufferPrintable1_7.java (rev 0) +++ jEdit/trunk/org/gjt/sp/jedit/print/BufferPrintable1_7.java 2016-08-09 06:16:40 UTC (rev 24485) @@ -0,0 +1,475 @@ +/* + * BufferPrintable.java - Printable implementation + * :tabSize=4:indentSize=4:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 2001, 2003 Slava Pestov + * Portions copyright (C) 2002 Thomas Dilts + * + * 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 org.gjt.sp.jedit.print; + +//{{{ Imports +import javax.swing.text.TabExpander; +import java.awt.font.*; +import java.awt.geom.*; +import java.awt.print.*; +import java.awt.*; +import java.util.*; +import java.util.List; +import javax.print.attribute.PrintRequestAttributeSet; +import javax.print.attribute.standard.PageRanges; + +import org.gjt.sp.jedit.syntax.*; +import org.gjt.sp.jedit.*; +import org.gjt.sp.util.*; +//}}} + +/** + * @version $Id: BufferPrintable.java 24442 2016-06-29 23:29:25Z daleanson $ + */ +class BufferPrintable1_7 implements Printable +{ + //{{{ BufferPrintable1_7 constructor + BufferPrintable1_7(PrintRequestAttributeSet format, View view, Buffer buffer, boolean selection) + { + this.format = format; + this.view = view; + this.buffer = buffer; + this.selection = selection; + firstCall = true; + + + header = jEdit.getBooleanProperty("print.header"); + footer = jEdit.getBooleanProperty("print.footer"); + lineNumbers = jEdit.getBooleanProperty("print.lineNumbers"); + font = jEdit.getFontProperty("print.font"); + boolean color = jEdit.getBooleanProperty("print.color"); + + styles = org.gjt.sp.util.SyntaxUtilities.loadStyles(jEdit.getProperty("print.font"), jEdit.getIntegerProperty("print.fontsize", 10), color); + styles[Token.NULL] = new SyntaxStyle(textColor, null, font); + + // assume the paper is white, so change any white text to black + for(int i = 0; i < styles.length; i++) + { + SyntaxStyle s = styles[i]; + if(s.getForegroundColor().equals(Color.WHITE) && s.getBackgroundColor() == null) + { + styles[i] = new SyntaxStyle(Color.BLACK, styles[i].getBackgroundColor(), styles[i].getFont()); + } + } + + lineList = new ArrayList<Chunk>(); + + tokenHandler = new DisplayTokenHandler(); + } //}}} + + //{{{ print() method + // this can be called multiple times by the print system for the same page + public int print(Graphics _gfx, PageFormat pageFormat, int pageIndex) throws PrinterException + { + if (firstCall) + { + // we keep the first non-null frc we get, since sometimes + // we get invalid ones on subsequent pages on Windows + if(frc == null) + { + frc = ((Graphics2D)_gfx).getFontRenderContext(); + Log.log(Log.DEBUG, this, "Font render context is " + frc); + } + + calculatePages(_gfx, pageFormat); + firstCall = false; + } + + Log.log(Log.DEBUG,this,"Asked to print page " + pageIndex); + + Range range = pages.get(pageIndex); + if (range == null || !inRange(pageIndex)) + { + System.out.println("+++++ returning no such page for " + pageIndex); + return NO_SUCH_PAGE; + } + else { + System.out.println("+++++ printing page " + pageIndex); + printPage(_gfx, pageFormat, pageIndex, true); + } + + return PAGE_EXISTS; + } //}}} + + //{{{ Private members + + //{{{ Static variables + private static Color headerColor = Color.lightGray; + private static Color headerTextColor = Color.black; + private static Color footerColor = Color.lightGray; + private static Color footerTextColor = Color.black; + private static Color lineNumberColor = Color.gray; + private static Color textColor = Color.black; + //}}} + + //{{{ Instance variables + private PrintRequestAttributeSet format; + private boolean firstCall; + + private View view; + private Buffer buffer; + private boolean selection; + private Font font; + private SyntaxStyle[] styles; + private boolean header; + private boolean footer; + private boolean lineNumbers; + + private HashMap<Integer, Range> pages; + private int currentPhysicalLine; + + private LineMetrics lm; + private final List<Chunk> lineList; + + private FontRenderContext frc; + + private DisplayTokenHandler tokenHandler; + //}}} + + // parses the file to determine what lines go on what page + private void calculatePages(Graphics _gfx, PageFormat pageFormat) + { + pages = new HashMap<Integer, Range>(); + Graphics2D gfx = (Graphics2D)_gfx; + gfx.setFont(font); + + double pageX = pageFormat.getImageableX(); + double pageY = pageFormat.getImageableY(); + double pageWidth = pageFormat.getImageableWidth(); + double pageHeight = pageFormat.getImageableHeight(); + + if(header) + { + double headerHeight = paintHeader(gfx, pageX, pageY, pageWidth, false); + pageY += headerHeight; + pageHeight -= headerHeight; + } + + if(footer) + { + double footerHeight = paintFooter(gfx, pageX, pageY, pageWidth, pageHeight, 0, false); + pageHeight -= footerHeight; + } + + double lineNumberWidth = 0.0; + + // determine line number width + if(lineNumbers) + { + // the +1's ensure that 99 gets 3 digits, 103 gets 4 digits, and so on. + int lineNumberDigits = (int)Math.ceil(Math.log(buffer.getLineCount() + 1) / Math.log(10)) + 1; + + // now that we know how many chars there are, get the width. + char[] chars = new char[lineNumberDigits]; + for(int i = 0; i < chars.length; i++) + { + chars[i] = ' '; + } + lineNumberWidth = font.getStringBounds(chars, 0, lineNumberDigits, frc).getWidth(); + } + PrintTabExpander tabExpander = new PrintTabExpander(4); + try { + // calculate tab size + int tabSize = jEdit.getIntegerProperty("print.tabSize", 4); + char[] chars = new char[tabSize]; + for(int i = 0; i < chars.length; i++) + { + chars[i] = ' '; + } + double tabWidth = font.getStringBounds(chars, 0, tabSize, frc).getWidth(); + tabExpander = new PrintTabExpander(tabWidth); + } + catch(Exception e) { + e.printStackTrace(); + } + + lm = font.getLineMetrics("gGyYX", frc); + boolean printFolds = jEdit.getBooleanProperty("print.folds", true); + + currentPhysicalLine = 0; + int pageCount = 0; + int startLine = 0; + double y = 0.0; + while (currentPhysicalLine <= buffer.getLineCount()) + { + if (currentPhysicalLine == buffer.getLineCount()) + { + // last page + Range range = new Range(startLine, currentPhysicalLine); + pages.put(new Integer(pageCount), range); + System.out.println("+++++ calculatePages, page " + pageCount + " has range: " + range); + break; + } + if (!printFolds && !view.getTextArea().getDisplayManager().isLineVisible(currentPhysicalLine)) + { + currentPhysicalLine++; + continue; + } + + lineList.clear(); + + tokenHandler.init(styles, frc, tabExpander, lineList, (float)(pageWidth - lineNumberWidth), -1); + buffer.markTokens(currentPhysicalLine, tokenHandler); + + if(y + (lm.getHeight() * (lineList.isEmpty() ? 1 : lineList.size())) >= pageHeight) + { + Range range = new Range(startLine, currentPhysicalLine); + pages.put(new Integer(pageCount), range); + System.out.println("+++++ calculatePages, page " + pageCount + " has range: " + range); + ++ pageCount; + ++ currentPhysicalLine; + startLine = currentPhysicalLine; + y = 0.0; + continue; + } + + for (int i = 0; i < lineList.size(); i++) + { + y += lm.getHeight(); + } + currentPhysicalLine++; + } + } + + //{{{ inRange() method + private boolean inRange(int pageNumber) + { + PageRanges ranges = (PageRanges)format.get(PageRanges.class); + boolean answer = false; + if (ranges == null) + { + answer = true; + } + else + { + answer = ranges.contains(pageNumber + 1); + } + System.out.println("+++++ will print? " + answer + ", pageNumber + 1 = " + (pageNumber + 1) + ", ranges = " + ranges); + return answer; + } //}}} + + + //{{{ printPage() method + private void printPage(Graphics _gfx, PageFormat pageFormat, int pageIndex, boolean actuallyPaint) + { + Log.log(Log.DEBUG, this, "printPage(" + pageIndex + ", " + actuallyPaint + ')'); + Graphics2D gfx = (Graphics2D)_gfx; + gfx.setFont(font); + + double pageX = pageFormat.getImageableX(); + double pageY = pageFormat.getImageableY(); + double pageWidth = pageFormat.getImageableWidth(); + double pageHeight = pageFormat.getImageableHeight(); + + Log.log(Log.DEBUG,this,"#1 - Page dimensions: " + pageWidth + 'x' + pageHeight); + + if(header) + { + double headerHeight = paintHeader(gfx, pageX, pageY, pageWidth, actuallyPaint); + pageY += headerHeight; + pageHeight -= headerHeight; + } + + if(footer) + { + double footerHeight = paintFooter(gfx, pageX, pageY, pageWidth, pageHeight, pageIndex, actuallyPaint); + pageHeight -= footerHeight; + } + + boolean glyphVector = jEdit.getBooleanProperty("print.glyphVector"); + double lineNumberWidth = 0.0; + + // determine line number width + if(lineNumbers) + { + // the +1's ensure that 99 gets 3 digits, 103 gets 4 digits, + // and so on. + int lineNumberDigits = (int)Math.ceil(Math.log(buffer.getLineCount() + 1) / Math.log(10)) + 1; + + // now that we know how many chars there are, get the width. + char[] chars = new char[lineNumberDigits]; + for(int i = 0; i < chars.length; i++) + { + chars[i] = ' '; + } + lineNumberWidth = font.getStringBounds(chars, 0, lineNumberDigits, frc).getWidth(); + } + + Log.log(Log.DEBUG,this,"#2 - Page dimensions: " + (pageWidth - lineNumberWidth) + 'x' + pageHeight); + + // calculate tab size + int tabSize = jEdit.getIntegerProperty("print.tabSize", 4); + char[] chars = new char[tabSize]; + for(int i = 0; i < chars.length; i++) + { + chars[i] = ' '; + } + double tabWidth = font.getStringBounds(chars, 0, tabSize, frc).getWidth(); + PrintTabExpander tabExpander = new PrintTabExpander(tabWidth); + + lm = font.getLineMetrics("gGyYX", frc); + Log.log(Log.DEBUG,this,"Line height is " + lm.getHeight()); + + double y = 0.0; + Range range = pages.get(pageIndex); + System.out.println("+++++ range for page index " + pageIndex + " = " + range); + for (currentPhysicalLine = range.getStart(); currentPhysicalLine <= range.getEnd(); currentPhysicalLine++) + { + if(currentPhysicalLine == buffer.getLineCount()) + { + Log.log(Log.DEBUG, this, "Finished buffer"); + Log.log(Log.DEBUG, this, "The end"); + break; + } + if (!jEdit.getBooleanProperty("print.folds",true) && !view.getTextArea().getDisplayManager().isLineVisible(currentPhysicalLine)) + { + Log.log(Log.DEBUG,this,"Skipping invisible line"); + continue; + } + + lineList.clear(); + + tokenHandler.init(styles, frc, tabExpander, lineList, (float)(pageWidth - lineNumberWidth), -1); + buffer.markTokens(currentPhysicalLine, tokenHandler); + + if(lineNumbers && actuallyPaint) + { + gfx.setFont(font); + gfx.setColor(lineNumberColor); + gfx.drawString(String.valueOf(currentPhysicalLine + 1), (float)pageX, (float)(pageY + y + lm.getHeight())); + } + + for (Chunk chunk : lineList) + { + y += lm.getHeight(); + Chunk chunks = chunk; + if (chunks != null && actuallyPaint) + { + // TODO: use lm.getHeight() instead of metrics.getHeight()? + FontMetrics metrics = gfx.getFontMetrics(); + Chunk.paintChunkBackgrounds(chunks, gfx, (float) (pageX + lineNumberWidth), (float) (pageY + y), metrics.getHeight()); + Chunk.paintChunkList(chunks, gfx, (float) (pageX + lineNumberWidth), (float) (pageY + y), glyphVector); + } + } + if (currentPhysicalLine == range.getEnd()) + { + Log.log(Log.DEBUG,this,"Finished page"); + break; + } + } + } //}}} + + //{{{ paintHeader() method + private double paintHeader(Graphics2D gfx, double pageX, double pageY, double pageWidth, boolean actuallyPaint) + { + String headerText = jEdit.getProperty("print.headerText", new String[] { buffer.getName() }); + FontRenderContext frc = gfx.getFontRenderContext(); + lm = font.getLineMetrics(headerText,frc); + + Rectangle2D bounds = font.getStringBounds(headerText,frc); + Rectangle2D headerBounds = new Rectangle2D.Double(pageX,pageY,pageWidth,bounds.getHeight()); + + if(actuallyPaint) + { + gfx.setColor(headerColor); + gfx.fill(headerBounds); + gfx.setColor(headerTextColor); + gfx.drawString(headerText, (float)(pageX + (pageWidth - bounds.getWidth()) / 2), (float)(pageY + lm.getAscent())); + } + + return headerBounds.getHeight(); + } + //}}} + + //{{{ paintFooter() method + private double paintFooter(Graphics2D gfx, double pageX, double pageY, double pageWidth, double pageHeight, int pageIndex, boolean actuallyPaint) + { + String footerText = jEdit.getProperty("print.footerText", new Object[] { new Date(), Integer.valueOf(pageIndex + 1)}); + FontRenderContext frc = gfx.getFontRenderContext(); + lm = font.getLineMetrics(footerText, frc); + + Rectangle2D bounds = font.getStringBounds(footerText,frc); + Rectangle2D footerBounds = new Rectangle2D.Double(pageX,pageY + pageHeight - bounds.getHeight(), pageWidth,bounds.getHeight()); + + if(actuallyPaint) + { + gfx.setColor(footerColor); + gfx.fill(footerBounds); + gfx.setColor(footerTextColor); + gfx.drawString(footerText, (float)(pageX + (pageWidth - bounds.getWidth()) / 2), (float)(pageY + pageHeight - bounds.getHeight() + lm.getAscent())); + } + + return footerBounds.getHeight(); + } //}}} + + //}}} + + class Range + { + int start = 0; + int end = 0; + + public Range(int start, int end) + { + this.start = start; + this.end = end; + } + + public int getStart() + { + return start; + } + + public int getEnd() + { + return end; + } + + public String toString() + { + StringBuilder sb = new StringBuilder(); + sb.append("Range[").append(start).append(", ").append(end).append(']'); + return sb.toString(); + } + } + + //{{{ PrintTabExpander class + static class PrintTabExpander implements TabExpander + { + private double tabWidth; + + //{{{ PrintTabExpander constructor + PrintTabExpander(double tabWidth) + { + this.tabWidth = tabWidth; + } //}}} + + //{{{ nextTabStop() method + public float nextTabStop(float x, int tabOffset) + { + int ntabs = (int)((x + 1) / tabWidth); + return (float)((ntabs + 1) * tabWidth); + } //}}} + } //}}} +} Modified: jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_4.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_4.java 2016-08-05 12:44:51 UTC (rev 24484) +++ jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_4.java 2016-08-09 06:16:40 UTC (rev 24485) @@ -29,7 +29,6 @@ import java.awt.print.*; import java.awt.*; import java.io.*; -import javax.print.PrintService; import org.gjt.sp.jedit.*; import org.gjt.sp.util.Log; @@ -108,27 +107,7 @@ BufferPrintable printable = new BufferPrintable(job,format,view, buffer,font,header,footer,lineNumbers,color); job.setPrintable(printable); - - // TODO: finish this - // this is in progress, it works, but isn't quite complete - /* - PrinterDialog printerDialog = new PrinterDialog(view, format); - if (printerDialog.isCanceled()) - return; - PrintService printService = printerDialog.getPrintService(); - if (printService != null) - { - try - { - job.setPrintService(printerDialog.getPrintService()); - } - catch(Exception e) { - // TODO: show the user a message - return; - } - } - */ - + if(!job.printDialog(format)) return; Added: jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_7.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_7.java (rev 0) +++ jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_7.java 2016-08-09 06:16:40 UTC (rev 24485) @@ -0,0 +1,226 @@ +/* + * BufferPrinter1_4.java - Main class that controls printing + * :tabSize=4:indentSize=4:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 2001 Slava Pestov + * Portions copyright (C) 2002 Thomas Dilts + * + * 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 org.gjt.sp.jedit.print; + +//{{{ Imports +import java.awt.print.*; +import java.awt.*; +import java.io.*; +import javax.print.*; + +import javax.print.attribute.*; +import javax.print.attribute.standard.*; +import javax.print.event.*; + +import javax.swing.JOptionPane; + +import org.gjt.sp.jedit.*; +import org.gjt.sp.util.Log; +//}}} + +public class BufferPrinter1_7 +{ + //{{{ pageSetup() method + /** + * Shows the printer dialog with the page setup tab active, other tabs inactive. + * @param view The parent view for the dialog. + */ + public static void pageSetup(View view) + { + loadPrintSpec(); + PrinterDialog printerDialog = new PrinterDialog(view, format, true); + if (!printerDialog.isCanceled()) + { + format = printerDialog.getAttributes(); + savePrintSpec(); + } + } //}}} + + //{{{ print() method + public static void print(final View view, final Buffer buffer, boolean selection) + { + loadPrintSpec(); + String jobName = MiscUtilities.abbreviateView(buffer.getPath()); + format.add(new JobName(jobName, null)); + + PrinterDialog printerDialog = new PrinterDialog(view, format, false); + if (printerDialog.isCanceled()) + { + return; + } + + PrintService printService = printerDialog.getPrintService(); + OutputStream outputStream = null; + if (printService != null) + { + try + { + job = printService.createPrintJob(); + job.addPrintJobListener(new BufferPrinter1_7.JobListener(view)); + format = printerDialog.getAttributes(); + savePrintSpec(); + } + catch(Exception e) { + JOptionPane.showMessageDialog(view, jEdit.getProperty("print-error.message", new String[]{e.getMessage()}), jEdit.getProperty("print-error.title"), JOptionPane.ERROR_MESSAGE); + return; + } + } + else + { + JOptionPane.showMessageDialog(view, jEdit.getProperty("print-error.message", new String[]{"Invalid print service."}), jEdit.getProperty("print-error.title"), JOptionPane.ERROR_MESSAGE); + return; + } + + BufferPrintable1_7 printable = new BufferPrintable1_7(format, view, buffer, selection); + Doc doc = new SimpleDoc(printable, DocFlavor.SERVICE_FORMATTED.PRINTABLE, null); + try { + job.print(doc, format); + } + catch(PrintException e) { + JOptionPane.showMessageDialog(view, jEdit.getProperty("print-error.message", new String[]{e.getMessage()}), jEdit.getProperty("print-error.title"), JOptionPane.ERROR_MESSAGE); + } + + } //}}} + + //{{{ savePrintSpec() method + private static void loadPrintSpec() + { + format = new HashPrintRequestAttributeSet(); + + String settings = jEdit.getSettingsDirectory(); + if(settings != null) + { + String printSpecPath = MiscUtilities.constructPath( + settings, "printspec"); + File filePrintSpec = new File(printSpecPath); + + if (filePrintSpec.exists()) + { + FileInputStream fileIn; + ObjectInputStream obIn = null; + try + { + fileIn = new FileInputStream(filePrintSpec); + obIn = new ObjectInputStream(fileIn); + format = (HashPrintRequestAttributeSet)obIn.readObject(); + } + catch(Exception e) + { + Log.log(Log.ERROR,BufferPrinter1_4.class,e); + } finally + { + try + { + if (obIn != null) + obIn.close(); + } catch (IOException e) {} + } + } + } + } //}}} + + //{{{ savePrintSpec() method + private static void savePrintSpec() + { + String settings = jEdit.getSettingsDirectory(); + if(settings == null) + return; + + String printSpecPath = MiscUtilities.constructPath(settings, "printspec"); + File filePrintSpec = new File(printSpecPath); + + FileOutputStream fileOut; + ObjectOutputStream obOut = null; + try + { + fileOut = new FileOutputStream(filePrintSpec); + obOut = new ObjectOutputStream(fileOut); + obOut.writeObject(format); + } + catch(Exception e) + { + e.printStackTrace(); + } finally { + if(obOut != null) + try + { + obOut.close(); + } catch (IOException e) {} + } + } + //}}} + + static class JobListener extends PrintJobAdapter + { + + private View view; + + public JobListener(View view) + { + this.view = view; + } + + @Override + public void printJobCompleted(PrintJobEvent pje) + { + // if the print service is a "print to file" service, then need to + // flush and close the output stream. + PrintService printService = pje.getPrintJob().getPrintService(); + if (printService instanceof StreamPrintService) + { + StreamPrintService streamService = (StreamPrintService)printService; + OutputStream outputStream = streamService.getOutputStream(); + try { + outputStream.flush(); + } + catch(Exception e) { + } + try { + outputStream.close(); + } + catch(Exception e) { + } + } + view.getStatus().setMessageAndClear("Printing complete."); + } + + @Override + public void printJobFailed(PrintJobEvent pje) + { + JOptionPane.showMessageDialog(view, jEdit.getProperty("print-error.message", new String[]{"Print job failed."}), jEdit.getProperty("print-error.title"), JOptionPane.ERROR_MESSAGE); + } + + @Override + public void printJobRequiresAttention(PrintJobEvent pje) + { + JOptionPane.showMessageDialog(view, jEdit.getProperty("print-error.message", new String[]{"Check the printer."}), jEdit.getProperty("print-error.title"), JOptionPane.ERROR_MESSAGE); + } + } + + //{{{ Private members + private static PrintRequestAttributeSet format; + private static DocPrintJob job; + //}}} +} + Modified: jEdit/trunk/org/gjt/sp/jedit/print/PrinterDialog.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/print/PrinterDialog.java 2016-08-05 12:44:51 UTC (rev 24484) +++ jEdit/trunk/org/gjt/sp/jedit/print/PrinterDialog.java 2016-08-09 06:16:40 UTC (rev 24485) @@ -6,11 +6,11 @@ import java.awt.Color; import java.awt.Component; import java.awt.Dialog; +import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridLayout; -import java.awt.Window; import java.awt.event.*; -import java.awt.print.PrinterJob; +import java.io.*; import java.util.*; import javax.print.*; @@ -19,15 +19,23 @@ import javax.swing.*; import javax.swing.event.*; +import org.gjt.sp.jedit.GUIUtilities; +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.browser.VFSBrowser; +import org.gjt.sp.jedit.gui.NumericTextField; +import org.gjt.sp.jedit.gui.VariableGridLayout; import org.gjt.sp.jedit.jEdit; import org.gjt.sp.util.GenericGUIUtilities; +// https://docs.oracle.com/javase/7/docs/technotes/guides/jps/spec/JPSTOC.fm.html public class PrinterDialog extends JDialog implements ListSelectionListener { + private View view; + private String jobName = null; private PrintService selectedPrintService = null; - private AttributeSet attributes; + private PrintRequestAttributeSet attributes; private JTabbedPane tabs; private JList<PrintService> printers; private JSpinner copies = null; @@ -42,87 +50,184 @@ private JComboBox<OrientationRequested> orientation; private boolean canceled = false; private Map<String, String> messageMap; + private PageSetupPanel pageSetupPanel; + private int ALL = 0; + private int ODD = 1; + private int EVEN = 2; + private int onlyPrintPages = ALL; + private DocFlavor DOC_FLAVOR = DocFlavor.SERVICE_FORMATTED.PRINTABLE; - public PrinterDialog( Window owner, AttributeSet attributes ) + + public PrinterDialog( View owner, PrintRequestAttributeSet attributes, boolean pageSetupOnly ) { super( owner, Dialog.ModalityType.APPLICATION_MODAL ); - if ( attributes != null ) + try { - this.attributes = new HashAttributeSet( attributes ); - } - else - { - this.attributes = new HashAttributeSet(); - } + view = owner; + setTitle( pageSetupOnly ? jEdit.getProperty( "print.dialog.pageSetupTitle" ) : jEdit.getProperty( "print.dialog.title" ) ); + if ( attributes != null ) + { + this.attributes = new HashPrintRequestAttributeSet( attributes ); + } + else + { + this.attributes = new HashPrintRequestAttributeSet(); + } - initMessages(); - JPanel contents = new JPanel( new BorderLayout() ); - contents.setBorder( BorderFactory.createEmptyBorder( 11, 11, 12, 12 ) ); + Attribute jobNameAttr = this.attributes.get( JobName.class ); + if ( jobNameAttr != null ) + { + jobName = jobNameAttr.toString(); + } - tabs = new JTabbedPane(); - tabs.setBorder( BorderFactory.createEmptyBorder( 0, 0, 11, 0 ) ); - tabs.add( "General", new GeneralPanel() ); - tabs.add( "Page Setup", new PageSetupPanel() ); - tabs.add( "Job", new JobPanel() ); - tabs.add( "Advanced", new AdvancedPanel() ); - contents.add( tabs, BorderLayout.CENTER ); - JButton okButton = new JButton( jEdit.getProperty( "common.ok" ) ); - okButton.addActionListener( new ActionListener() - { + this.attributes.remove( Destination.class ); + Attribute[] attrs = attributes.toArray(); + + // for debugging + /* + for ( Attribute a : attrs ) + { + System.out.println( "+++++ before: " + a.getName() + " = " + a ); + } + */ + + initMessages(); - public void actionPerformed( ActionEvent ae ) - { - for ( int i = 0; i < tabs.getTabCount(); i++ ) + JPanel contents = new JPanel( new BorderLayout() ); + contents.setBorder( BorderFactory.createEmptyBorder( 11, 11, 12, 12 ) ); + + tabs = new JTabbedPane(); + tabs.setBorder( BorderFactory.createEmptyBorder( 0, 0, 11, 0 ) ); + tabs.add( jEdit.getProperty( "print.dialog.General", "General" ), new GeneralPanel() ); + tabs.add( jEdit.getProperty( "print.dialog.Page_Setup", "Page Setup" ), pageSetupPanel = new PageSetupPanel() ); + tabs.add( jEdit.getProperty( "print.dialog.Job", "Job" ), new JobPanel() ); + tabs.add( jEdit.getProperty( "print.dialog.Advanced", "Advanced" ), new AdvancedPanel() ); + if ( pageSetupOnly ) + { + tabs.setSelectedIndex( 1 ); + tabs.setEnabledAt( 0, false ); + tabs.setEnabledAt( 1, true ); + tabs.setEnabledAt( 2, false ); + tabs.setEnabledAt( 3, false ); + } + + + contents.add( tabs, BorderLayout.CENTER ); + + JButton okButton = new JButton( jEdit.getProperty( "common.ok" ) ); + okButton.addActionListener( new ActionListener() + { + + public void actionPerformed( ActionEvent ae ) { - PrinterPanel panel = ( PrinterPanel )tabs.getComponentAt( i ); - PrinterDialog.this.attributes.addAll( panel.getAttributes() ); + // gather all the attributes from the tabs + for ( int i = 0; i < tabs.getTabCount(); i++ ) + { + PrinterPanel panel = ( PrinterPanel )tabs.getComponentAt( i ); + PrinterDialog.this.attributes.addAll( panel.getAttributes() ); + } + + // adjust the print range to filter based on odd/even pages + PageRanges pr = (PageRanges)PrinterDialog.this.attributes.get(PageRanges.class); + try { + pr = mergeRanges(pr); + PrinterDialog.this.attributes.add(pr); + } + catch(PrintException e) { + e.printStackTrace(); + JOptionPane.showMessageDialog(view, jEdit.getProperty("print-error.message", new String[]{e.getMessage()}), jEdit.getProperty("print-error.title"), JOptionPane.ERROR_MESSAGE); + return; + } + + // if printing to a file, get the filename to use + if ( getPrintService() instanceof StreamPrintService ) + { + // create default filename + String filename = "out"; + if ( jobName != null ) + { + File f = new File( jobName ); + filename = f.getName(); + } + + + filename += ".ps"; + + File initialFile = new File( System.getProperty( "user.home" ), filename ); + + // show file chooser + String[] files = GUIUtilities.showVFSFileDialog( PrinterDialog.this, view, initialFile.getAbsolutePath(), VFSBrowser.SAVE_DIALOG, false ); + if ( files != null && files.length > 0 ) + { + File file = new File( files[0] ); + selectedPrintService = getPostscriptPrintService(file); + } + else + { + return; + } + } + + // for debugging + /* + Attribute[] attrs = PrinterDialog.this.attributes.toArray(); + for ( Attribute a : attrs ) + { + System.out.println( "+++++ after: " + a.getName() + " = " + a ); + } + */ + PrinterDialog.this.setVisible( false ); PrinterDialog.this.dispose(); } - canceled = false; } - } - ); - JButton cancelButton = new JButton( jEdit.getProperty( "common.cancel" ) ); - cancelButton.addActionListener( new ActionListener() - { + ); + JButton cancelButton = new JButton( jEdit.getProperty( "common.cancel" ) ); + cancelButton.addActionListener( new ActionListener() + { - public void actionPerformed( ActionEvent ae ) - { - PrinterDialog.this.setVisible( false ); - PrinterDialog.this.dispose(); - canceled = true; + public void actionPerformed( ActionEvent ae ) + { + PrinterDialog.this.setVisible( false ); + PrinterDialog.this.dispose(); + canceled = true; + } } + ); + + JPanel buttonPanel = new JPanel( new FlowLayout( FlowLayout.RIGHT, 6, 6 ) ); + GenericGUIUtilities.makeSameSize( okButton, cancelButton ); + buttonPanel.add( okButton ); + buttonPanel.add( cancelButton ); + contents.add( buttonPanel, BorderLayout.SOUTH ); + + setContentPane( contents ); + + // auto-select the default printer + PrintService defaultPrintService = PrintServiceLookup.lookupDefaultPrintService(); + if ( defaultPrintService != null ) + { + printers.setSelectedValue( defaultPrintService, true ); } - ); + else + { + printers.setSelectedIndex( 0 ); + } - JPanel buttonPanel = new JPanel( new FlowLayout( FlowLayout.RIGHT, 6, 6 ) ); - GenericGUIUtilities.makeSameSize( okButton, cancelButton ); - buttonPanel.add( okButton ); - buttonPanel.add( cancelButton ); - contents.add( buttonPanel, BorderLayout.SOUTH ); - setContentPane( contents ); + pack(); - // auto-select the default printer - PrintService defaultPrintService = PrintServiceLookup.lookupDefaultPrintService(); - if ( defaultPrintService != null ) - { - printers.setSelectedValue( defaultPrintService, true ); + setLocationRelativeTo( jEdit.getActiveView().getTextArea() ); + setVisible( true ); } - else + catch ( Exception e ) { - printers.setSelectedIndex( 0 ); + e.printStackTrace(); } - - - pack(); - setLocationRelativeTo( jEdit.getActiveView().getTextArea() ); - setVisible( true ); } @@ -132,7 +237,7 @@ } - public AttributeSet getAttributes() + public PrintRequestAttributeSet getAttributes() { return attributes; } @@ -146,10 +251,92 @@ private PrintService[] getPrintServices() { - return PrinterJob.lookupPrintServices(); + PrintService[] printServices = PrintServiceLookup.lookupPrintServices(DOC_FLAVOR, null); + List<PrintService> services = new ArrayList<PrintService>( Arrays.asList( printServices ) ); + PrintService service = getPostscriptPrintService( null ); + if ( service != null ) + { + services.add( service ); + } + + printServices = services.toArray( new PrintService [0] ); + return printServices; } + private StreamPrintService getPostscriptPrintService( File outfile ) + { + if (outfile == null) + { + outfile = new File(System.getProperty("user.home"), "out.ps"); + } + + String mimetype = "application/postscript"; + StreamPrintServiceFactory[] factories = StreamPrintServiceFactory.lookupStreamPrintServiceFactories(DOC_FLAVOR, mimetype); + + FileOutputStream fos; + StreamPrintService printService = null; + if ( factories.length > 0 ) + { + try + { + fos = new FileOutputStream( outfile ); + printService = factories[0].getPrintService( fos ); + } + catch ( Exception e ) + { + return null; + } + } + + return printService; + } + + // finds the intersection of the pages selected in the General tab (All pages + // or a page range) with the all, odd, or even setting for the 'only print' + // setting in the Page Setup tab. + private PageRanges mergeRanges(PageRanges pr) throws PrintException + { + if (onlyPrintPages == ALL) + return pr; + List<Integer> pages = new ArrayList<Integer>(); + int[][] ranges = pr.getMembers(); + for (int i = 0; i < ranges.length; i++) + { + int[] range = ranges[i]; + int start = range[0]; + // this limits printing to the first 250 pages. If the user selects 'All pages' + // from the General tab, then the range is 1 to Integer.MAX_VALUE, so to print just + // the even or odd numbered pages would need an array of 1073741823 values, which + // is unreasonable. + int end = range.length == 1 ? range[0] : Math.min(range[0] + 500, range[1]); + for (int pageIndex = start; pageIndex <= end; pageIndex++) + { + if (pageIndex % 2 == 0 && onlyPrintPages == EVEN) + { + pages.add(pageIndex); + } + else if (pageIndex % 2 == 1 && onlyPrintPages == ODD) + { + pages.add(pageIndex); + } + } + } + if (pages.isEmpty()) + { + throw new PrintException("No pages are selected to print.\nPlease check the 'Range' setting on the General tab and\nthe 'Only print' setting on the Page Setup tab."); + } + StringBuilder sb = new StringBuilder(); + for (Integer page : pages) + { + sb.append(page).append(','); + } + sb.deleteCharAt(sb.length() - 1); + return new PageRanges(sb.toString()); + + } + + @SuppressWarnings( {"unchecked"} ) public void valueChanged( ListSelectionEvent e ) { @@ -214,7 +401,7 @@ paperSizes.add( m ); - paperNames[i] = getMediaName( m.toString() ); + paperNames[i] = getMessage( m.toString() ); } paperSize.setModel( new DefaultComboBoxModel<String>( paperNames ) ); paperSize.setEnabled( true ); @@ -229,15 +416,15 @@ } else { - Finishings[] f = ( Finishings[] )value; - if ( f.length == 0 || ( f.length == 1 && Finishings.NONE.equals( f[0] ) ) ) + Finishings[] finishings = ( Finishings[] )value; + if ( finishings.length == 0 || ( finishings.length == 1 && Finishings.NONE.equals( finishings[0] ) ) ) { finishing.setModel( new DefaultComboBoxModel<Finishings>() ); finishing.setEnabled( false ); } else { - finishing.setModel( new DefaultComboBoxModel<Finishings>( f ) ); + finishing.setModel( new DefaultComboBoxModel<Finishings>( finishings ) ); finishing.setEnabled( true ); } } @@ -349,6 +536,9 @@ orientation.setEnabled( true ); orientation.setSelectedItem( OrientationRequested.PORTRAIT ); } + + + pageSetupPanel.recalculate(); } @@ -358,7 +548,8 @@ public PrinterPanel() { - super( new FlowLayout( FlowLayout.LEFT, 11, 11 ) ); + super( new BorderLayout() ); + setBorder( BorderFactory.createEmptyBorder( 11, 11, 11, 11 ) ); } @@ -374,34 +565,37 @@ JRadioButton allPages; JRadioButton pages; JCheckBox collate; - JCheckBox reverse; JTextField pagesField; + // TODO: current page and selection are not implemented yet. Note there + // are no standard printer attributes to specify either of these. public GeneralPanel() { super(); - JPanel content = new JPanel( new GridLayout( 2, 1 ) ); - printers = new JList<PrintService>( getPrintServices() ); - printers.setCellRenderer( new PSCellRenderer() ); + printers.setCellRenderer( new PrintServiceCellRenderer() ); printers.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); printers.addListSelectionListener( PrinterDialog.this ); - content.add( new JScrollPane( printers ) ); + selectedPrintService = printers.getModel().getElementAt( 0 ); - JPanel bottom = new JPanel( new GridLayout( 1, 2 ) ); - - JPanel rangePanel = new JPanel( new GridLayout( 4, 2, 6, 6 ) ); + JPanel rangePanel = new JPanel( new GridLayout( 2, 2, 6, 6 ) ); rangePanel.setBorder( BorderFactory.createCompoundBorder( - BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(), "Range" ), + BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(), jEdit.getProperty( "print.dialog.Range", "Range" ) ), BorderFactory.createEmptyBorder( 11, 11, 11, 11 ) ) ); - allPages = new JRadioButton( "All pages" ); + allPages = new JRadioButton( jEdit.getProperty( "print.dialog.All_pages", "All pages" ) ); allPages.setSelected( true ); - JRadioButton currentPage = new JRadioButton( "Current page" ); - currentPage.setEnabled( false ); // TODO: implement this - JRadioButton selection = new JRadioButton( "Selection" ); - selection.setEnabled( false ); // TODO: implement this - pages = new JRadioButton( "Pages:" ); + allPages.addActionListener( new ActionListener() + { + + public void actionPerformed( ActionEvent ae ) + { + pagesField.setEnabled( pages.isSelected() ); + } + } + ); + + pages = new JRadioButton( jEdit.getProperty( "print.dialog.Pages", "Pages" ) + ':' ); pagesField = new JTextField(); pagesField.setEnabled( false ); pages.addActionListener( new ActionListener() @@ -409,30 +603,25 @@ public void actionPerformed( ActionEvent ae ) { - JRadioButton source = ( JRadioButton )ae.getSource(); - pagesField.setEnabled( source.isSelected() ); + pagesField.setEnabled( pages.isSelected() ); } } ); - new MyButtonGroup( allPages, currentPage, selection, pages ); + + new MyButtonGroup( allPages, pages ); Box pagesBox = Box.createHorizontalBox(); pagesBox.add( pages ); + pagesBox.add( Box.createHorizontalStrut( 6 ) ); pagesBox.add( pagesField ); rangePanel.add( allPages ); rangePanel.add( Box.createGlue() ); - rangePanel.add( currentPage ); - rangePanel.add( Box.createGlue() ); - rangePanel.add( selection ); - rangePanel.add( Box.createGlue() ); rangePanel.add( pagesBox ); - bottom.add( rangePanel ); - JPanel copiesPanel = new JPanel( new GridLayout( 3, 2, 6, 6 ) ); copiesPanel.setBorder( BorderFactory.createCompoundBorder( - BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(), "Copies" ), + BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(), jEdit.getProperty( "print.dialog.Copies", "Copies" ) ), BorderFactory.createEmptyBorder( 11, 11, 11, 11 ) ) ); - JLabel copiesLabel = new JLabel( "Copies:" ); + JLabel copiesLabel = new JLabel( jEdit.getProperty( "print.dialog.Copies", "Copies" + ':' ) ); copies = new JSpinner( new SpinnerNumberModel( 1, 1, 999, 1 ) ); copies.addChangeListener( new ChangeListener() { @@ -445,19 +634,26 @@ collate.setSelected( value > 1 ); } } ); - collate = new JCheckBox( "Collate" ); + collate = new JCheckBox( jEdit.getProperty( "print.dialog.Collate", "Collate" ) ); collate.setSelected( false ); collate.setEnabled( false ); - reverse = new JCheckBox( "Reverse" ); - reverse.setEnabled( false ); // TODO: need to pass this to BufferPrintable + + // TODO: reverse page printing is not yet implemented. This requires + // a significant modification to BufferPrintable. Thee is no standard + // printer attribute to specify this. copiesPanel.add( copiesLabel ); copiesPanel.add( copies ); copiesPanel.add( collate ); - copiesPanel.add( Box.createGlue() ); - copiesPanel.add( reverse ); + JPanel content = new JPanel( new BorderLayout() ); + JPanel top = new JPanel( new BorderLayout() ); + JPanel bottom = new JPanel( new GridLayout( 1, 2, 6, 6 ) ); + + top.add( new JScrollPane( printers ), BorderLayout.CENTER ); + bottom.add( rangePanel ); bottom.add( copiesPanel ); - content.add( bottom ); + content.add( top, BorderLayout.CENTER ); + content.add( bottom, BorderLayout.SOUTH ); add( content ); } @@ -466,14 +662,16 @@ { AttributeSet as = new HashAttributeSet(); - if ( pages.isSelected() ) + if (allPages.isSelected()) { + as.add(new PageRanges( 1, Integer.MAX_VALUE)); + } + else if ( pages.isSelected() ) + { String pageRange = pagesField.getText(); if ( pageRange != null ) { try - - { as.add( new PageRanges( pageRange ) ); } @@ -491,6 +689,8 @@ } + as.add( new Copies( ( Integer )copies.getValue() ) ); + return as; } @@ -499,10 +699,10 @@ // print service cell renderer - class PSCellRenderer extends JLabel implements ListCellRenderer <PrintService> + class PrintServiceCellRenderer extends JLabel implements ListCellRenderer <PrintService> { - public PSCellRenderer() + public PrintServiceCellRenderer() { setOpaque( true ); } @@ -515,7 +715,7 @@ boolean cellHasFocus ) { - setText( value.getName() ); + setText( value == null ? "" : value.getName() ); Color background; Color foreground; @@ -535,6 +735,9 @@ setBackground( background ); setForeground( foreground ); + Dimension d = new Dimension( ( int )getSize().getWidth(), ( int )getSize().getHeight() + 5 ); + setSize( d ); + return this; } } @@ -542,24 +745,31 @@ - private class PageSetupPanel extends PrinterPanel + private class PageSetupPanel extends PrinterPanel implements ActionListener, FocusListener { private JComboBox<String> onlyPrint; private JComboBox<String> outputTray; + private NumericTextField topMarginField; + private NumericTextField leftMarginField; + private NumericTextField rightMarginField; + private NumericTextField bottomMarginField; + private float topMargin = 0.75f; + private float leftMargin = 1.0f; + private float rightMargin = 1.0f; + private float bottomMargin = 0.75f; + private AttributeSet marginAttributes = new HashAttributeSet(); public PageSetupPanel() { super(); - JPanel content = new JPanel( new BorderLayout() ); - - JPanel layoutPanel = new JPanel( new GridLayout( 5, 2, 6, 6 ) ); + JPanel layoutPanel = new JPanel( new VariableGridLayout( VariableGridLayout.FIXED_NUM_COLUMNS, 2, 6, 6 ) ); layoutPanel.setBorder( BorderFactory.createCompoundBorder( - BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(), "Layout" ), - BorderFactory.createEmptyBorder( 11, 11, 11, 11 ) ) ); + BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(), jEdit.getProperty( "print.dialog.Layout", "Layout" ) ), BorderFactory.createEmptyBorder( 11, 11, 11, 11 ) ) ); sides = new JComboBox<Sides>(); sides.setEnabled( false ); + sides.setRenderer( new SidesCellRenderer() ); pagesPerSide = new JComboBox<NumberUp>(); pagesPerSide.setEnabled( false ); @@ -581,32 +791,26 @@ pageOrdering = new JComboBox<PresentationDirection>(); pageOrdering.setEnabled( false ); - // TODO: implement this onlyPrint = new JComboBox<String>(); - onlyPrint.addItem( "All sheets" ); - onlyPrint.addItem( "Even sheets" ); - onlyPrint.addItem( "Odd sheets" ); + onlyPrint.addItem( jEdit.getProperty( "print.dialog.All_sheets", "All sheets" ) ); // ALL + onlyPrint.addItem( jEdit.getProperty( "print.dialog.Odd_sheets", "Odd sheets" ) ); // ODD + onlyPrint.addItem( jEdit.getProperty( "print.dialog.Even_sheets", "Even sheets" ) ); // EVEN onlyPrint.setSelectedIndex( 0 ); - onlyPrint.setEnabled( false ); + onlyPrint.setEnabled( true ); // TODO: scale? - layoutPanel.add( new JLabel( "Two-sided:" ) ); + layoutPanel.add( new JLabel( jEdit.getProperty( "print.dialog.Two-sided", "Two-sided" ) + ':' ) ); layoutPanel.add( sides ); - layoutPanel.add( new JLabel( "Pages per side:" ) ); + layoutPanel.add( new JLabel( jEdit.getProperty( "print.dialog.Pages_per_side", "Pages per side" ) + ':' ) ); layoutPanel.add( pagesPerSide ); - layoutPanel.add( new JLabel( "Page ordering:" ) ); + layoutPanel.add( new JLabel( jEdit.getProperty( "print.dialog.Page_ordering", "Page ordering" ) + ':' ) ); layoutPanel.add( pageOrdering ); - layoutPanel.add( new JLabel( "Only print:" ) ); + layoutPanel.add( new JLabel( jEdit.getProperty( "print.dialog.Only_print", "Only print" ) + ':' ) ); layoutPanel.add( onlyPrint ); - content.add( layoutPanel, BorderLayout.NORTH ); - content.add( Box.createHorizontalStrut( 11 ) ); + JPanel paperPanel = new JPanel( new VariableGridLayout( VariableGridLayout.FIXED_NUM_COLUMNS, 2, 6, 6 ) ); + paperPanel.setBorder( BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(), jEdit.getProperty( "print.dialog.Paper", "Paper" ) ), BorderFactory.createEmptyBorder( 11, 11, 11, 11 ) ) ); - JPanel paperPanel = new JPanel( new GridLayout( 5, 2, 6, 6 ) ); - paperPanel.setBorder( BorderFactory.createCompoundBorder( - BorderFactory.createTitledBorder( BorderFactory.createEtchedBorder(), "Paper" ), - BorderFactory.createEmptyBorder( 11, 11, 11, 11 ) ) ); - paperSource = new JComboBox<MediaTray>(); paperSource.setEnabled( false ); @@ -615,24 +819,199 @@ paperSize = new JComboBox<String>(); paperSize.setEnabled( false ); + paperSize.addActionListener( new ActionListener() + { + public void actionPerformed( ActionEvent ae ) + {... [truncated message content] |
From: <dal...@us...> - 2016-08-10 21:34:53
|
Revision: 24492 http://sourceforge.net/p/jedit/svn/24492 Author: daleanson Date: 2016-08-10 21:34:50 +0000 (Wed, 10 Aug 2016) Log Message: ----------- More printing stuff, updated docs about printing, added option to text area to show page breaks. Modified Paths: -------------- jEdit/trunk/doc/users-guide/files.xml jEdit/trunk/org/gjt/sp/jedit/actions.xml jEdit/trunk/org/gjt/sp/jedit/jedit.props jEdit/trunk/org/gjt/sp/jedit/options/TextAreaOptionPane.java jEdit/trunk/org/gjt/sp/jedit/print/BufferPrintable1_7.java jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_7.java jEdit/trunk/org/gjt/sp/jedit/print/PrinterDialog.java jEdit/trunk/org/gjt/sp/jedit/textarea/JEditTextArea.java jEdit/trunk/org/jedit/localization/jedit_en.props Added Paths: ----------- jEdit/trunk/org/gjt/sp/jedit/print/PageBreakExtension.java Modified: jEdit/trunk/doc/users-guide/files.xml =================================================================== --- jEdit/trunk/doc/users-guide/files.xml 2016-08-09 22:16:29 UTC (rev 24491) +++ jEdit/trunk/doc/users-guide/files.xml 2016-08-10 21:34:50 UTC (rev 24492) @@ -637,7 +637,26 @@ <section id="printing"> <title>Printing</title> + + <para>jEdit has gone through several iterations in printing. All 3 versions are still available so you can choose which one fits best for your system and printer: + <itemizedlist> + <listitem> + <para>Printing using the Java 1.3 printing API. This is really clunky but generally works. There are limited options as far as page setup and printer settings.</para> + <para>To use this option, go to Utilities - Global Options - Printing and check "Use old printing API" and uncheck "Use system print dialog".</para> + </listitem> + <listitem> + <para>Printing using a combination of the Java 1.3 and Java 1.4 printing API. There are a number of bugs in this one.</para> + <para>To use this option, go to Utilities - Global Options - Printing and uncheck "Use old printing API" and check "Use system print dialog".</para> + </listitem> + + <listitem> + <para>Printing using the latest (Java 1.8 at this writing) printing API and provides jEdit it's own printing dialog. This version is preferred and has the most page setup and printer options. It fixes all of the bugs in the previous iteration and provides additional options.</para> + <para>To use this option, go to Utilities - Global Options - Printing and uncheck both "Use old printing API" and "Use system print dialog". This will allow you to use jEdit's full featured print dialog to set printing options. + </listitem> + </itemizedlist> + </para> + <para><guimenu>File</guimenu>><guimenuitem>Print</guimenuitem> (shortcut: <keycap>C+p</keycap>) prints the current buffer.</para> @@ -671,7 +690,7 @@ </listitem> <listitem> - <para>If the output should be color or black and white.</para> + <para>If the output should be color or black and white. This option is used only if one of the older printing systems. If you're using the latest jEdit printing system, the color printing choice is on the 'Advanced' tab in the printing dialog. </para> </listitem> <listitem> @@ -683,7 +702,15 @@ <listitem> <para>If folded regions should be printed.</para> </listitem> + + <listitem> + <para>There are also 3 check boxes for workarounds for older Java bugs. Since the current jEdit versions require at least Java 1.7, all 3 of these boxes should be unchecked.</para> + </listitem> </itemizedlist> + + <para> + In the Utilities - Global Options - Text Area settings, there is an option to show page breaks. If selected, horizontal lines will be displayed in the text area to indicate page breaks. This is only an approximation of the breaks on the actual printed pages. They will be close, but jEdit is not a word processor, so there is no way to set margins or insert page breaks. + </para> </section> <section id="closing-exiting"> Modified: jEdit/trunk/org/gjt/sp/jedit/actions.xml =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/actions.xml 2016-08-09 22:16:29 UTC (rev 24491) +++ jEdit/trunk/org/gjt/sp/jedit/actions.xml 2016-08-10 21:34:50 UTC (rev 24492) @@ -813,6 +813,11 @@ <ACTION NAME="page-setup"> <CODE> + if(jEdit.getBooleanProperty("print.force13", false)) + BufferPrinter1_3.pageSetup(view); + else if(jEdit.getBooleanProperty("print.useSystemDialog", false)) + BufferPrinter1_4.pageSetup(view); + else BufferPrinter1_7.pageSetup(view); </CODE> </ACTION> @@ -968,21 +973,15 @@ <ACTION NAME="print"> <CODE> - if(jEdit.getBooleanProperty("print.useSystemDialog", true)) + if(jEdit.getBooleanProperty("print.force13", false)) + BufferPrinter1_3.print(view, buffer, false); + else if(jEdit.getBooleanProperty("print.useSystemDialog", false)) BufferPrinter1_4.print(view, buffer, false); else - BufferPrinter1_7.print(view, buffer, false); + BufferPrinter1_7.print(view, buffer); </CODE> </ACTION> -<!-- not yet implemented --> - -<!-- <ACTION NAME="print-selection"> - <CODE> - BufferPrinter.print(view, buffer, true); - </CODE> -</ACTION> --> - <ACTION NAME="quick-search" NO_RECORD="TRUE"> <CODE> view.quickIncrementalSearch(false); Modified: jEdit/trunk/org/gjt/sp/jedit/jedit.props =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jedit.props 2016-08-09 22:16:29 UTC (rev 24491) +++ jEdit/trunk/org/gjt/sp/jedit/jedit.props 2016-08-10 21:34:50 UTC (rev 24492) @@ -259,6 +259,10 @@ view.wrapGuide=true view.wrapGuideColor=#8080ff +# Wrap guide +view.pageBreaks=true +view.pageBreaksColor=#8080ff + # Caret color view.caretColor=#ff0000 Modified: jEdit/trunk/org/gjt/sp/jedit/options/TextAreaOptionPane.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/options/TextAreaOptionPane.java 2016-08-09 22:16:29 UTC (rev 24491) +++ jEdit/trunk/org/gjt/sp/jedit/options/TextAreaOptionPane.java 2016-08-10 21:34:50 UTC (rev 24492) @@ -191,16 +191,14 @@ GridBagConstraints.VERTICAL); /* Line highlight */ - lineHighlight = new JCheckBox(jEdit.getProperty("options.textarea" - + ".lineHighlight")); + lineHighlight = new JCheckBox(jEdit.getProperty("options.textarea.lineHighlight")); lineHighlight.setSelected(jEdit.getBooleanProperty("view.lineHighlight")); addComponent(lineHighlight,lineHighlightColor = new ColorWellButton( jEdit.getColorProperty("view.lineHighlightColor")), GridBagConstraints.VERTICAL); /* Structure highlight */ - structureHighlight = new JCheckBox(jEdit.getProperty("options.textarea" - + ".structureHighlight")); + structureHighlight = new JCheckBox(jEdit.getProperty("options.textarea.structureHighlight")); structureHighlight.setSelected(jEdit.getBooleanProperty( "view.structureHighlight")); addComponent(structureHighlight,structureHighlightColor = new ColorWellButton( @@ -208,26 +206,30 @@ GridBagConstraints.VERTICAL); /* EOL markers */ - eolMarkers = new JCheckBox(jEdit.getProperty("options.textarea" - + ".eolMarkers")); + eolMarkers = new JCheckBox(jEdit.getProperty("options.textarea.eolMarkers")); eolMarkers.setSelected(jEdit.getBooleanProperty("view.eolMarkers")); addComponent(eolMarkers,eolMarkerColor =new ColorWellButton( jEdit.getColorProperty("view.eolMarkerColor")), GridBagConstraints.VERTICAL); /* Wrap guide */ - wrapGuide = new JCheckBox(jEdit.getProperty("options.textarea" - + ".wrapGuide")); + wrapGuide = new JCheckBox(jEdit.getProperty("options.textarea.wrapGuide")); wrapGuide.setSelected(jEdit.getBooleanProperty("view.wrapGuide")); addComponent(wrapGuide,wrapGuideColor = new ColorWellButton( jEdit.getColorProperty("view.wrapGuideColor")), GridBagConstraints.VERTICAL); + /* page breaks */ + pageBreaks = new JCheckBox(jEdit.getProperty("options.textarea.pageBreaks")); + pageBreaks.setSelected(jEdit.getBooleanProperty("view.pageBreaks", false)); + addComponent(pageBreaks, pageBreakColor = new ColorWellButton( + jEdit.getColorProperty("view.pageBreakColor")), + GridBagConstraints.VERTICAL); + addSeparator(); /* Electric borders */ - electricBorders = new JCheckBox(jEdit.getProperty("options.textarea" - + ".electricBorders")); + electricBorders = new JCheckBox(jEdit.getProperty("options.textarea.electricBorders")); electricBorders.setSelected(!"0".equals(jEdit.getProperty( "view.electricBorders"))); addComponent(electricBorders); @@ -290,6 +292,9 @@ .isSelected()); jEdit.setColorProperty("view.wrapGuideColor", wrapGuideColor.getSelectedColor()); + jEdit.setBooleanProperty("view.pageBreaks", pageBreaks.isSelected()); + jEdit.setColorProperty("view.pageBreakColor", pageBreakColor.getSelectedColor()); + jEdit.setIntegerProperty("view.electricBorders",electricBorders .isSelected() ? 3 : 0); AntiAlias nv = new AntiAlias(jEdit.getProperty("view.antiAlias")); @@ -326,6 +331,8 @@ private ColorWellButton eolMarkerColor; private JCheckBox wrapGuide; private ColorWellButton wrapGuideColor; + private JCheckBox pageBreaks; + private ColorWellButton pageBreakColor; private JCheckBox electricBorders; private JComboBox<String> antiAlias; private JCheckBox fracFontMetrics; Modified: jEdit/trunk/org/gjt/sp/jedit/print/BufferPrintable1_7.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/print/BufferPrintable1_7.java 2016-08-09 22:16:29 UTC (rev 24491) +++ jEdit/trunk/org/gjt/sp/jedit/print/BufferPrintable1_7.java 2016-08-10 21:34:50 UTC (rev 24492) @@ -37,8 +37,8 @@ import org.gjt.sp.jedit.syntax.*; import org.gjt.sp.jedit.*; import org.gjt.sp.util.*; -//}}} + /** * A new buffer printable that does a lot more than the old one, like properly * printing ranges of pages, reverse page printing, printing just a selection, @@ -47,6 +47,38 @@ */ class BufferPrintable1_7 implements Printable { + private static Color headerColor = Color.lightGray; + private static Color headerTextColor = Color.black; + private static Color footerColor = Color.lightGray; + private static Color footerTextColor = Color.black; + private static Color lineNumberColor = Color.gray; + private static Color textColor = Color.black; + + private PrintRequestAttributeSet format; + private boolean firstCall; + + private View view; + private Buffer buffer; + private boolean selection; + private int[] selectedLines; + private boolean reverse; + private int printRangeType = PrinterDialog.ALL; + private Font font; + private SyntaxStyle[] styles; + private boolean header; + private boolean footer; + private boolean lineNumbers; + + private HashMap<Integer, Range> pages; + private int currentPhysicalLine; + + private LineMetrics lm; + private final List<Chunk> lineList; + + private FontRenderContext frc; + + private DisplayTokenHandler tokenHandler; + BufferPrintable1_7(PrintRequestAttributeSet format, View view, Buffer buffer) { this.format = format; @@ -76,8 +108,16 @@ lineList = new ArrayList<Chunk>(); tokenHandler = new DisplayTokenHandler(); - } + } + public void setFont(Font font) + { + if (font != null) + { + this.font = font; + } + } + /** * Set the line numbers that are selected in the text area. * @param lines An array of lines that are selected in the text area. @@ -108,20 +148,12 @@ selection = PrinterDialog.SELECTION == printRangeType; } - //{{{ print() method - // this can be called multiple times by the print system for the same page! + // this can be called multiple times by the print system for the same page, and + // all calls must be handled for the page to print properly. public int print(Graphics _gfx, PageFormat pageFormat, int pageIndex) throws PrinterException { if (firstCall) { - // we keep the first non-null frc we get, since sometimes - // we get invalid ones on subsequent pages on Windows - if(frc == null) - { - frc = ((Graphics2D)_gfx).getFontRenderContext(); - Log.log(Log.DEBUG, this, "Font render context is " + frc); - } - calculatePages(_gfx, pageFormat); firstCall = false; } @@ -165,45 +197,8 @@ Log.log(Log.DEBUG, this, "Returning PAGE_EXISTS for page " + pageIndex); return PAGE_EXISTS; - } //}}} + } - //{{{ Private members - - //{{{ Static variables - private static Color headerColor = Color.lightGray; - private static Color headerTextColor = Color.black; - private static Color footerColor = Color.lightGray; - private static Color footerTextColor = Color.black; - private static Color lineNumberColor = Color.gray; - private static Color textColor = Color.black; - //}}} - - //{{{ Instance variables - private PrintRequestAttributeSet format; - private boolean firstCall; - - private View view; - private Buffer buffer; - private boolean selection; - private int[] selectedLines; - private boolean reverse; - private int printRangeType = PrinterDialog.ALL; - private Font font; - private SyntaxStyle[] styles; - private boolean header; - private boolean footer; - private boolean lineNumbers; - - private HashMap<Integer, Range> pages; - private int currentPhysicalLine; - - private LineMetrics lm; - private final List<Chunk> lineList; - - private FontRenderContext frc; - - private DisplayTokenHandler tokenHandler; - //}}} // parses the file to determine what lines belong to which page protected HashMap<Integer, Range> calculatePages(Graphics _gfx, PageFormat pageFormat) @@ -316,7 +311,6 @@ return pages; } - //{{{ inRange() method // returns true if the given page number is one of the pages requested to // be printed private boolean inRange(int pageNumber) @@ -332,10 +326,9 @@ answer = ranges.contains(pageNumber + 1); } return answer; - } //}}} + } - //{{{ printPage() method // actually print the page to the graphics context private void printPage(Graphics _gfx, PageFormat pageFormat, int pageIndex, boolean actuallyPaint) { @@ -451,9 +444,8 @@ break; } } - } //}}} + } - //{{{ paintHeader() method private double paintHeader(Graphics2D gfx, double pageX, double pageY, double pageWidth, boolean actuallyPaint) { String headerText = jEdit.getProperty("print.headerText", new String[] { buffer.getName() }); @@ -473,9 +465,8 @@ return headerBounds.getHeight(); } - //}}} + - //{{{ paintFooter() method private double paintFooter(Graphics2D gfx, double pageX, double pageY, double pageWidth, double pageHeight, int pageIndex, boolean actuallyPaint) { String footerText = jEdit.getProperty("print.footerText", new Object[] { new Date(), Integer.valueOf(pageIndex + 1)}); @@ -494,26 +485,23 @@ } return footerBounds.getHeight(); - } //}}} + } - //}}} - //{{{ PrintTabExpander class + static class PrintTabExpander implements TabExpander { private double tabWidth; - //{{{ PrintTabExpander constructor PrintTabExpander(double tabWidth) { this.tabWidth = tabWidth; - } //}}} + } - //{{{ nextTabStop() method public float nextTabStop(float x, int tabOffset) { int ntabs = (int)((x + 1) / tabWidth); return (float)((ntabs + 1) * tabWidth); - } //}}} - } //}}} + } + } } Modified: jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_7.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_7.java 2016-08-09 22:16:29 UTC (rev 24491) +++ jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_7.java 2016-08-10 21:34:50 UTC (rev 24492) @@ -59,7 +59,7 @@ } //}}} //{{{ print() method - public static void print(final View view, final Buffer buffer, boolean selection) + public static void print(final View view, final Buffer buffer) { // load any saved printing attributes, these are put into 'format' loadPrintSpec(); @@ -152,6 +152,7 @@ // ready to print Doc doc = new SimpleDoc(printable, DocFlavor.SERVICE_FORMATTED.PRINTABLE, null); try { + // TODO: put this in a swing worker, it can take some time for a large buffer job.print(doc, format); } catch(PrintException e) { @@ -159,7 +160,19 @@ } } //}}} - + + /** + * This is intended for use by classes that need to know the page ranges + * of the buffer. + */ + public static HashMap<Integer, Range> getPageRanges(View view, Buffer buffer) + { + loadPrintSpec(); + BufferPrintable1_7 printable = new BufferPrintable1_7(format, view, buffer); + return BufferPrinter1_7.getPageRanges(view, printable, format); + } + + // have the printable calculate the pages and ranges, the map has the page // number as the key, a range containing the start and end line numbers of // that page Added: jEdit/trunk/org/gjt/sp/jedit/print/PageBreakExtension.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/print/PageBreakExtension.java (rev 0) +++ jEdit/trunk/org/gjt/sp/jedit/print/PageBreakExtension.java 2016-08-10 21:34:50 UTC (rev 24492) @@ -0,0 +1,149 @@ + +/* + * PageBreakExtension.java + * + * Copyright (C) 2016 Dale Anson + * Portions Copyright 2000-2007 Sun Microsystems, Inc. + * + * 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 org.gjt.sp.jedit.print; + + +import java.awt.Color; +import java.awt.Graphics2D; +import java.util.HashMap; + +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.View; +import org.gjt.sp.jedit.buffer.BufferAdapter; +import org.gjt.sp.jedit.buffer.JEditBuffer; +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.msg.BufferUpdate; +import org.gjt.sp.jedit.msg.EditPaneUpdate; +import org.gjt.sp.jedit.msg.PropertiesChanged; +import org.gjt.sp.jedit.textarea.JEditTextArea; +import org.gjt.sp.jedit.textarea.TextAreaExtension; +import org.gjt.sp.jedit.textarea.TextAreaPainter; + + +/** + * Draws a line across the text area indicating where a printing page break + * would be. + */ +public class PageBreakExtension extends TextAreaExtension implements EBComponent +{ + + private JEditTextArea textArea; + private boolean showPageBreak; + private Color pageBreakColor; + private HashMap<Integer, Range> pages = null; + + + public PageBreakExtension( JEditTextArea textArea ) + { + this.textArea = textArea; + textArea.getPainter().addExtension( TextAreaPainter.WRAP_GUIDE_LAYER, this ); + showPageBreak = jEdit.getBooleanProperty( "view.pageBreaks" ); + pageBreakColor = jEdit.getColorProperty( "view.pageBreaks.color" ); + EditBus.addToBus( this ); + } + + + private HashMap<Integer, Range> getPageRanges() + { + View view = textArea.getView(); + Buffer buffer = ( Buffer )textArea.getBuffer(); + return BufferPrinter1_7.getPageRanges( view, buffer ); + } + + + public void handleMessage( EBMessage msg ) + { + if ( msg instanceof PropertiesChanged ) + { + showPageBreak = jEdit.getBooleanProperty( "view.pageBreaks" ); + pageBreakColor = jEdit.getColorProperty( "view.pageBreaks.color" ); + } + else + if ( msg instanceof EditPaneUpdate ) + { + EditPaneUpdate epu = ( EditPaneUpdate )msg; + if ( EditPaneUpdate.BUFFER_CHANGED.equals( epu.getWhat() ) ) + { + pages = getPageRanges(); + } + } + else + if ( msg instanceof BufferUpdate ) + { + BufferUpdate bu = ( BufferUpdate )msg; + if (BufferUpdate.SAVED.equals(bu.getWhat()) || BufferUpdate.LOADED.equals(bu.getWhat())) + { + pages = getPageRanges(); + } + } + } + + + public Color getPageBreakColor() + { + return pageBreakColor; + } + + + public void setPageBreakColor( Color pageBreakColor ) + { + this.pageBreakColor = pageBreakColor; + } + + + public boolean isPageBreakEnabled() + { + return showPageBreak; + } + + + public void setPageBreakEnabled( boolean pageBreak ) + { + showPageBreak = pageBreak; + } + + + @Override + public void paintValidLine( Graphics2D gfx, int screenLine, int physicalLine, int start, int end, int y ) + { + if ( isPageBreakEnabled() ) + { + if ( pages == null ) + { + pages = getPageRanges(); + } + + + for ( Integer page : pages.keySet() ) + { + Range range = pages.get( page ); + if ( range.getEnd() == physicalLine + 1 ) + { + gfx.drawLine( 0, y, textArea.getPainter().getWidth(), y ); + } + } + } + } +} Modified: jEdit/trunk/org/gjt/sp/jedit/print/PrinterDialog.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/print/PrinterDialog.java 2016-08-09 22:16:29 UTC (rev 24491) +++ jEdit/trunk/org/gjt/sp/jedit/print/PrinterDialog.java 2016-08-10 21:34:50 UTC (rev 24492) @@ -1,7 +1,5 @@ /* * PrinterDialog.java - * :tabSize=4:indentSize=4:noTabs=false: - * :folding=explicit:collapseFolds=1: * * Copyright (C) 2016 Dale Anson * Portions Copyright 2000-2007 Sun Microsystems, Inc. Modified: jEdit/trunk/org/gjt/sp/jedit/textarea/JEditTextArea.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/textarea/JEditTextArea.java 2016-08-09 22:16:29 UTC (rev 24491) +++ jEdit/trunk/org/gjt/sp/jedit/textarea/JEditTextArea.java 2016-08-10 21:34:50 UTC (rev 24492) @@ -44,6 +44,7 @@ import org.gjt.sp.jedit.msg.PositionChanging; import org.gjt.sp.jedit.msg.PropertiesChanged; import org.gjt.sp.jedit.options.GlobalOptions; +import org.gjt.sp.jedit.print.PageBreakExtension; //}}} /** @@ -72,6 +73,7 @@ this.view = view; setRightClickPopupEnabled(true); painter.setLineExtraSpacing(jEdit.getIntegerProperty("options.textarea.lineSpacing", 0)); + new PageBreakExtension(this); EditBus.addToBus(this); } //}}} Modified: jEdit/trunk/org/jedit/localization/jedit_en.props =================================================================== --- jEdit/trunk/org/jedit/localization/jedit_en.props 2016-08-09 22:16:29 UTC (rev 24491) +++ jEdit/trunk/org/jedit/localization/jedit_en.props 2016-08-10 21:34:50 UTC (rev 24492) @@ -1795,6 +1795,7 @@ options.textarea.structureHighlight=Highlight matching elements: options.textarea.eolMarkers=End of line markers: options.textarea.wrapGuide=Wrap guide: +options.textarea.pageBreaks=Page breaks: options.textarea.electricBorders=Electric (auto scroll) borders options.textarea.stdNextPrevWord=Go to next/previous word commands eat whitespace options.textarea.antiAlias=Anti Aliased smooth text This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ker...@us...> - 2016-08-11 21:01:00
|
Revision: 24495 http://sourceforge.net/p/jedit/svn/24495 Author: kerik-sf Date: 2016-08-11 21:00:58 +0000 (Thu, 11 Aug 2016) Log Message: ----------- refactor TOC loading code out to public class to make it available to plugins. Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/help/HelpTOCPanel.java Added Paths: ----------- jEdit/trunk/org/gjt/sp/jedit/help/HelpTOCLoader.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2016-08-10 22:54:55 UTC (rev 24494) +++ jEdit/trunk/doc/CHANGES.txt 2016-08-11 21:00:58 UTC (rev 24495) @@ -96,6 +96,10 @@ org.gjt.sp.jedit.GUIUtilities suitable for the standalone TextArea package; all methods kept but deprecated and proxies (Eric Le Lay). +- refactor Help table of contents loading code to a separate class + (HelpTOCLoader). Make relevant members public, so the help TOC + is accessible to other code, e.g. the HelpServer plugin (Eric Le Lay). + }}} {{{ Editing Added: jEdit/trunk/org/gjt/sp/jedit/help/HelpTOCLoader.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/help/HelpTOCLoader.java (rev 0) +++ jEdit/trunk/org/gjt/sp/jedit/help/HelpTOCLoader.java 2016-08-11 21:00:58 UTC (rev 24495) @@ -0,0 +1,279 @@ +/* + * HelpTOCLoader.java - Help table of contents loader + * :tabSize=4:indentSize=4:noTabs=false: + * :folding=explicit:collapseFolds=1: + * + * Copyright (C) 1999, 2004 Slava Pestov + * Copyright (C) 2016 Eric Le Lay + * + * 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 org.gjt.sp.jedit.help; + +//{{{ Imports +import java.io.FileNotFoundException; +import java.io.IOException; +import java.net.URL; +import java.util.Arrays; +import java.util.Comparator; +import java.util.Map; +import java.util.Stack; + +import javax.swing.tree.DefaultMutableTreeNode; + +import org.gjt.sp.jedit.EditPlugin; +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.gjt.sp.util.XMLUtilities; +import org.xml.sax.Attributes; +import org.xml.sax.helpers.DefaultHandler; +//}}} + +/** + * Help table-of-contents loader. + * + * <p>Code for loading and constructing the table of contents (TOC). + * Doesn't refresh when plugins are (un)loaded: you'll have to call + * {@link #createTOC()} again yourself.</p> + * + * <p>Don't keep {@link HelpTOCLoader} instances between loads: + * use it and forget it.</p> + **/ +public class HelpTOCLoader { + + //{{{ HelpTOCLoader constructor + public HelpTOCLoader(Map<String, DefaultMutableTreeNode> nodes, String baseURL) { + this.nodes = nodes; + this.baseURL = baseURL; + } //}}} + + //{{{ HelpNode class + /** + * a TOC item: href and title. + */ + public static class HelpNode + { + public final String href, title; + + //{{{ HelpNode constructor + HelpNode(String href, String title) + { + this.href = href; + this.title = title; + } //}}} + + //{{{ toString() method + public String toString() + { + return title; + } //}}} + } //}}} + + //{{{ createTOC() method + /** + * Load the table of contents. + * Performs synchronous IO, so you don't want to call it from the GUI thread. + * @return the TOC tree model as a {@link DefaultMutableTreeNode}. + * User objects are {@link HelpNode} instances. + */ + public DefaultMutableTreeNode createTOC() + { + EditPlugin[] plugins = jEdit.getPlugins(); + Arrays.sort(plugins,new PluginCompare()); + DefaultMutableTreeNode tocRoot = new DefaultMutableTreeNode(); + + tocRoot.add(createNode("welcome.html", + jEdit.getProperty("helpviewer.toc.welcome"))); + + tocRoot.add(createNode("README.txt", + jEdit.getProperty("helpviewer.toc.readme"))); + tocRoot.add(createNode("CHANGES.txt", + jEdit.getProperty("helpviewer.toc.changes"))); + tocRoot.add(createNode("TODO.txt", + jEdit.getProperty("helpviewer.toc.todo"))); + tocRoot.add(createNode("COPYING.txt", + jEdit.getProperty("helpviewer.toc.copying"))); + tocRoot.add(createNode("COPYING.DOC.txt", + jEdit.getProperty("helpviewer.toc.copying-doc"))); + tocRoot.add(createNode("Apache.LICENSE.txt", + jEdit.getProperty("helpviewer.toc.copying-apache"))); + tocRoot.add(createNode("COPYING.PLUGINS.txt", + jEdit.getProperty("helpviewer.toc.copying-plugins"))); + + loadTOC(tocRoot,"whatsnew/toc.xml"); + loadTOC(tocRoot,"users-guide/toc.xml"); + loadTOC(tocRoot,"FAQ/toc.xml"); + + + DefaultMutableTreeNode pluginTree = new DefaultMutableTreeNode( + jEdit.getProperty("helpviewer.toc.plugins"),true); + + for (EditPlugin plugin : plugins) + { + String name = plugin.getClassName(); + + String docs = jEdit.getProperty("plugin." + name + ".docs"); + String label = jEdit.getProperty("plugin." + name + ".name"); + if (label != null && docs != null) + { + String path = plugin.getPluginJAR().getClassLoader().getResourceAsPath(docs); + pluginTree.add(createNode(path, label)); + } + } + + if(pluginTree.getChildCount() != 0) + { + tocRoot.add(pluginTree); + } + + loadTOC(tocRoot,"api/toc.xml"); + return tocRoot; + } //}}} + + //{{{ createNode() method + private DefaultMutableTreeNode createNode(String href, String title) + { + DefaultMutableTreeNode node = new DefaultMutableTreeNode( + new HelpTOCLoader.HelpNode(href,title),true); + if(nodes!=null) + { + nodes.put(href,node); + } + return node; + } //}}} + + //{{{ loadTOC() method + private void loadTOC(DefaultMutableTreeNode root, String path) + { + TOCHandler h = new TOCHandler(root,MiscUtilities.getParentOfPath(path)); + try + { + XMLUtilities.parseXML( + new URL(baseURL + '/' + path).openStream(), h); + } + catch(FileNotFoundException e) + { + /* it is acceptable only for the API TOC : + the user can choose not to install them + */ + if("api/toc.xml".equals(path)) + { + Log.log(Log.NOTICE,this, + "The API docs for jEdit will not be available (reinstall jEdit if you want them)"); + root.add( + createNode("http://www.jedit.org/api/overview-summary.html", + jEdit.getProperty("helpviewer.toc.online-apidocs"))); + } + else + { + Log.log(Log.ERROR,this,e); + } + } + catch(IOException e) + { + Log.log(Log.ERROR,this,e); + } + } //}}} + + //{{{ Private members + private Map<String, DefaultMutableTreeNode> nodes; + private String baseURL; + //}}} + + //{{{ TOCHandler class + class TOCHandler extends DefaultHandler + { + String dir; + + //{{{ TOCHandler constructor + TOCHandler(DefaultMutableTreeNode root, String dir) + { + nodes = new Stack<DefaultMutableTreeNode>(); + node = root; + this.dir = dir; + } //}}} + + //{{{ characters() method + public void characters(char[] c, int off, int len) + { + if(tag.equals("TITLE")) + { + boolean firstNonWhitespace = false; + for(int i = 0; i < len; i++) + { + char ch = c[off + i]; + if (!firstNonWhitespace && Character.isWhitespace(ch)) continue; + firstNonWhitespace = true; + title.append(ch); + } + } + + + } //}}} + + //{{{ startElement() method + public void startElement(String uri, String localName, + String name, Attributes attrs) + { + tag = name; + if (name.equals("ENTRY")) + href = attrs.getValue("HREF"); + } //}}} + + //{{{ endElement() method + public void endElement(String uri, String localName, String name) + { + if(name == null) + return; + + if(name.equals("TITLE")) + { + DefaultMutableTreeNode newNode = createNode( + dir + href,title.toString()); + node.add(newNode); + nodes.push(node); + node = newNode; + title.setLength(0); + } + else if(name.equals("ENTRY")) + { + node = nodes.pop(); + href = null; + } + } //}}} + + //{{{ Private members + private String tag; + private StringBuilder title = new StringBuilder(); + private String href; + private DefaultMutableTreeNode node; + private Stack<DefaultMutableTreeNode> nodes; + //}}} + } //}}} + + //{{{ PluginCompare class + static class PluginCompare implements Comparator<EditPlugin> + { + public int compare(EditPlugin p1, EditPlugin p2) + { + return StandardUtilities.compareStrings( + jEdit.getProperty("plugin." + p1.getClassName() + ".name"), + jEdit.getProperty("plugin." + p2.getClassName() + ".name"), + true); + } + } //}}} +} Property changes on: jEdit/trunk/org/gjt/sp/jedit/help/HelpTOCLoader.java ___________________________________________________________________ Added: svn:keywords ## -0,0 +1 ## +Id Author Revision Date \ No newline at end of property Modified: jEdit/trunk/org/gjt/sp/jedit/help/HelpTOCPanel.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/help/HelpTOCPanel.java 2016-08-10 22:54:55 UTC (rev 24494) +++ jEdit/trunk/org/gjt/sp/jedit/help/HelpTOCPanel.java 2016-08-11 21:00:58 UTC (rev 24495) @@ -28,20 +28,13 @@ import javax.swing.tree.*; import java.awt.*; import java.awt.event.*; -import java.io.*; -import java.net.*; import java.util.*; import org.gjt.sp.util.ThreadUtilities; -import org.xml.sax.Attributes; -import org.xml.sax.helpers.DefaultHandler; import org.gjt.sp.jedit.browser.FileCellRenderer; // for icons import org.gjt.sp.jedit.*; import org.gjt.sp.util.EnhancedTreeCellRenderer; -import org.gjt.sp.util.Log; -import org.gjt.sp.util.StandardUtilities; -import org.gjt.sp.util.XMLUtilities; import static javax.swing.tree.TreeSelectionModel.SINGLE_TREE_SELECTION; //}}} @@ -109,8 +102,8 @@ { public void run() { - createTOC(); - tocModel.reload(tocRoot); + DefaultMutableTreeNode tocRoot = new HelpTOCLoader(nodes, helpViewer.getBaseURL()).createTOC(); + tocModel = new DefaultTreeModel(tocRoot); toc.setModel(tocModel); toc.setRootVisible(false); for(int i = 0; i <tocRoot.getChildCount(); i++) @@ -130,202 +123,10 @@ //{{{ Private members private HelpViewerInterface helpViewer; private DefaultTreeModel tocModel; - private DefaultMutableTreeNode tocRoot; private JTree toc; private Map<String, DefaultMutableTreeNode> nodes; - - //{{{ createNode() method - private DefaultMutableTreeNode createNode(String href, String title) - { - DefaultMutableTreeNode node = new DefaultMutableTreeNode( - new HelpNode(href,title),true); - nodes.put(href,node); - return node; - } //}}} - - //{{{ createTOC() method - private void createTOC() - { - EditPlugin[] plugins = jEdit.getPlugins(); - Arrays.sort(plugins,new PluginCompare()); - tocRoot = new DefaultMutableTreeNode(); - - tocRoot.add(createNode("welcome.html", - jEdit.getProperty("helpviewer.toc.welcome"))); - - tocRoot.add(createNode("README.txt", - jEdit.getProperty("helpviewer.toc.readme"))); - tocRoot.add(createNode("CHANGES.txt", - jEdit.getProperty("helpviewer.toc.changes"))); - tocRoot.add(createNode("TODO.txt", - jEdit.getProperty("helpviewer.toc.todo"))); - tocRoot.add(createNode("COPYING.txt", - jEdit.getProperty("helpviewer.toc.copying"))); - tocRoot.add(createNode("COPYING.DOC.txt", - jEdit.getProperty("helpviewer.toc.copying-doc"))); - tocRoot.add(createNode("Apache.LICENSE.txt", - jEdit.getProperty("helpviewer.toc.copying-apache"))); - tocRoot.add(createNode("COPYING.PLUGINS.txt", - jEdit.getProperty("helpviewer.toc.copying-plugins"))); - - loadTOC(tocRoot,"whatsnew/toc.xml"); - loadTOC(tocRoot,"users-guide/toc.xml"); - loadTOC(tocRoot,"FAQ/toc.xml"); - - - DefaultMutableTreeNode pluginTree = new DefaultMutableTreeNode( - jEdit.getProperty("helpviewer.toc.plugins"),true); - - for (EditPlugin plugin : plugins) - { - String name = plugin.getClassName(); - - String docs = jEdit.getProperty("plugin." + name + ".docs"); - String label = jEdit.getProperty("plugin." + name + ".name"); - if (label != null && docs != null) - { - String path = plugin.getPluginJAR().getClassLoader().getResourceAsPath(docs); - pluginTree.add(createNode(path, label)); - } - } - - if(pluginTree.getChildCount() != 0) - tocRoot.add(pluginTree); - else - { - // so that HelpViewer constructor doesn't try to expand - pluginTree = null; - } - loadTOC(tocRoot,"api/toc.xml"); - tocModel = new DefaultTreeModel(tocRoot); - } //}}} - - //{{{ loadTOC() method - private void loadTOC(DefaultMutableTreeNode root, String path) - { - TOCHandler h = new TOCHandler(root,MiscUtilities.getParentOfPath(path)); - try - { - XMLUtilities.parseXML( - new URL(helpViewer.getBaseURL() - + '/' + path).openStream(), h); - } - catch(FileNotFoundException e) - { - /* it is acceptable only for the API TOC : - the user can choose not to install them - */ - if("api/toc.xml".equals(path)) - { - Log.log(Log.NOTICE,this, - "The API docs for jEdit will not be available (reinstall jEdit if you want them)"); - root.add( - createNode("http://www.jedit.org/api/overview-summary.html", - jEdit.getProperty("helpviewer.toc.online-apidocs"))); - } - else - { - Log.log(Log.ERROR,this,e); - } - } - catch(IOException e) - { - Log.log(Log.ERROR,this,e); - } - } //}}} - //}}} - //{{{ HelpNode class - static class HelpNode - { - String href, title; - - //{{{ HelpNode constructor - HelpNode(String href, String title) - { - this.href = href; - this.title = title; - } //}}} - - //{{{ toString() method - public String toString() - { - return title; - } //}}} - } //}}} - - //{{{ TOCHandler class - class TOCHandler extends DefaultHandler - { - String dir; - - //{{{ TOCHandler constructor - TOCHandler(DefaultMutableTreeNode root, String dir) - { - nodes = new Stack<DefaultMutableTreeNode>(); - node = root; - this.dir = dir; - } //}}} - - //{{{ characters() method - public void characters(char[] c, int off, int len) - { - if(tag.equals("TITLE")) - { - boolean firstNonWhitespace = false; - for(int i = 0; i < len; i++) - { - char ch = c[off + i]; - if (!firstNonWhitespace && Character.isWhitespace(ch)) continue; - firstNonWhitespace = true; - title.append(ch); - } - } - - - } //}}} - - //{{{ startElement() method - public void startElement(String uri, String localName, - String name, Attributes attrs) - { - tag = name; - if (name.equals("ENTRY")) - href = attrs.getValue("HREF"); - } //}}} - - //{{{ endElement() method - public void endElement(String uri, String localName, String name) - { - if(name == null) - return; - - if(name.equals("TITLE")) - { - DefaultMutableTreeNode newNode = createNode( - dir + href,title.toString()); - node.add(newNode); - nodes.push(node); - node = newNode; - title.setLength(0); - } - else if(name.equals("ENTRY")) - { - node = nodes.pop(); - href = null; - } - } //}}} - - //{{{ Private members - private String tag; - private StringBuilder title = new StringBuilder(); - private String href; - private DefaultMutableTreeNode node; - private Stack<DefaultMutableTreeNode> nodes; - //}}} - } //}}} - //{{{ TOCTree class class TOCTree extends JTree { @@ -432,9 +233,9 @@ Object obj = ((DefaultMutableTreeNode) path.getLastPathComponent()).getUserObject(); - if(obj instanceof HelpNode) + if(obj instanceof HelpTOCLoader.HelpNode) { - HelpNode node = (HelpNode)obj; + HelpTOCLoader.HelpNode node = (HelpTOCLoader.HelpNode)obj; helpViewer.gotoURL(node.href,true,0); } else @@ -470,15 +271,4 @@ EmptyBorder border = new EmptyBorder(1,0,1,1); } //}}} - //{{{ PluginCompare class - static class PluginCompare implements Comparator<EditPlugin> - { - public int compare(EditPlugin p1, EditPlugin p2) - { - return StandardUtilities.compareStrings( - jEdit.getProperty("plugin." + p1.getClassName() + ".name"), - jEdit.getProperty("plugin." + p2.getClassName() + ".name"), - true); - } - } //}}} } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dal...@us...> - 2016-08-14 22:52:15
|
Revision: 24498 http://sourceforge.net/p/jedit/svn/24498 Author: daleanson Date: 2016-08-14 22:52:13 +0000 (Sun, 14 Aug 2016) Log Message: ----------- Updated docs about printing. Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/doc/users-guide/files.xml jEdit/trunk/org/jedit/localization/jedit_en.props Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2016-08-14 22:41:43 UTC (rev 24497) +++ jEdit/trunk/doc/CHANGES.txt 2016-08-14 22:52:13 UTC (rev 24498) @@ -68,6 +68,11 @@ - Fix bug #4002, too short horizontal scrollbar after view resize. (Dale Anson) +- Fix bug #3773, InvocationTargetException with negative printing tab width. + (Dale Anson) + +- Fix bug # 2844, printing range bug. (Dale Anson) + }}} {{{ UI Improvements @@ -84,10 +89,13 @@ feature request #515. (Dale Anson) - Updated NumericTextField to allow decimal numbers and only allow negative sign - at the start of a number. (Dale Anson) + at the start of a number. (Dale Anson) }}} {{{ Miscellaneous +- Updated printing system with jEdit specific printer dialog, accurate page + range printing, current page printing, printing of selected text only, ability + to show page breaks in the text area. (Dale Anson) }}} {{{ API Changes Modified: jEdit/trunk/doc/users-guide/files.xml =================================================================== --- jEdit/trunk/doc/users-guide/files.xml 2016-08-14 22:41:43 UTC (rev 24497) +++ jEdit/trunk/doc/users-guide/files.xml 2016-08-14 22:52:13 UTC (rev 24498) @@ -709,7 +709,7 @@ </itemizedlist> <para> - In the Utilities - Global Options - Text Area settings, there is an option to show page breaks. If selected, horizontal lines will be displayed in the text area to indicate page breaks. This is only an approximation of the breaks on the actual printed pages. They will be close, but jEdit is not a word processor, so there is no way to set margins or insert page breaks. + In the Utilities - Global Options - Text Area settings, there is an option to show page breaks. If selected, horizontal lines will be displayed in the text area to indicate page breaks. There is also an action available in Utilities - Global Options - Shortcuts to toggle the the page break markers on and off. </para> </section> Modified: jEdit/trunk/org/jedit/localization/jedit_en.props =================================================================== --- jEdit/trunk/org/jedit/localization/jedit_en.props 2016-08-14 22:41:43 UTC (rev 24497) +++ jEdit/trunk/org/jedit/localization/jedit_en.props 2016-08-14 22:52:13 UTC (rev 24498) @@ -739,7 +739,7 @@ print.dialog.two-sided-long-edge=Two Sided, Long Edge print.dialog.two-sided-short-edge=Two Sided, Short Edge -print.toggle-show-page-breaks.label=Toggle page break visibility +print.toggle-show-page-breaks.label=Toggle Page Break Marker #}}} #{{{ Various dialog boxes This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ker...@us...> - 2016-08-17 10:58:20
|
Revision: 24504 http://sourceforge.net/p/jedit/svn/24504 Author: kerik-sf Date: 2016-08-17 10:58:17 +0000 (Wed, 17 Aug 2016) Log Message: ----------- delete a user mode from the catalog even if the file is missing The user can then correct a runaway user mode from the GUI. Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/syntax/ModeProvider.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2016-08-17 02:16:07 UTC (rev 24503) +++ jEdit/trunk/doc/CHANGES.txt 2016-08-17 10:58:17 UTC (rev 24504) @@ -73,6 +73,8 @@ - Fix bug # 2844, printing range bug. (Dale Anson) +- Delete a user mode from the catalog even if the mode file is missing + (Eric Le Lay) }}} {{{ UI Improvements Modified: jEdit/trunk/org/gjt/sp/jedit/syntax/ModeProvider.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/syntax/ModeProvider.java 2016-08-17 02:16:07 UTC (rev 24503) +++ jEdit/trunk/org/gjt/sp/jedit/syntax/ModeProvider.java 2016-08-17 10:58:17 UTC (rev 24504) @@ -64,9 +64,9 @@ //{{{ removeMode() method /** - * Will only remove user modes. - * @return true if the mode was removed, false otherwise. - */ + * Will only remove user modes. + * @return true if the mode was removed, false otherwise. + */ public boolean removeMode(String name) throws IOException { Mode mode = modes.get(name); @@ -76,68 +76,69 @@ Mode oldMode = modes.remove(name); if (oldMode == null) return false; - + // delete mode file from disk and remove the entry from the catalog file. // Actually, just rename the mode file by adding "_unused" to the end of the file name // and comment out the line in the catalog file. This way it is possible to undo // these changes manually without too much work. String modeFilename = (String)mode.getProperty("file"); File modeFile = new File(modeFilename); - if (modeFile.exists()) + if (modeFile.exists()) { Path path = FileSystems.getDefault().getPath(modeFilename); Files.move(path, path.resolveSibling(modeFilename + "_unused"), StandardCopyOption.REPLACE_EXISTING); + } - // delete entry from mode catalog, catalog is in the same directory as the mode file - File catalogFile = new File(modeFile.getParent(),"catalog"); - if (catalogFile.exists()) + // The mode file may not be present and still referenced in the catalog, so carry on. + // delete entry from mode catalog, catalog is in the same directory as the mode file + File catalogFile = new File(modeFile.getParent(),"catalog"); + if (catalogFile.exists()) + { + StringBuilder contents = new StringBuilder(); + try { - StringBuilder contents = new StringBuilder(); - try + // read in the catalog file + BufferedReader br = new BufferedReader(new FileReader(catalogFile)); + String line = null; + while((line = br.readLine()) != null) { - // read in the catalog file - BufferedReader br = new BufferedReader(new FileReader(catalogFile)); - String line = null; - while((line = br.readLine()) != null) - { - contents.append(line).append('\n'); - } - br.close(); + contents.append(line).append('\n'); } - catch(IOException ioe) - { - // unable to read the catalog file - modes.put(oldMode.getName(), oldMode); - throw ioe; - } - - if (contents.length() == 0) - { - // empty catalog file, how did that happen? - modes.put(oldMode.getName(), oldMode); - return false; - } - - // remove the catalog entry for this mode - Pattern p = Pattern.compile("(?m)(^\\s*[<]MODE.*?NAME=\"" + name + "\".*?[>])"); - Matcher m = p.matcher(contents); - String newContents = m.replaceFirst("<!--$1-->"); - - try - { - // rewrite the catalog file - BufferedWriter bw = new BufferedWriter(new FileWriter(catalogFile)); - bw.write(newContents, 0, newContents.length()); - bw.flush(); - bw.close(); - } - catch(IOException ioe) - { - // unable to write the catalog file - modes.put(oldMode.getName(), oldMode); - throw ioe; - } + br.close(); } + catch(IOException ioe) + { + // unable to read the catalog file + modes.put(oldMode.getName(), oldMode); + throw ioe; + } + + if (contents.length() == 0) + { + // empty catalog file, how did that happen? + modes.put(oldMode.getName(), oldMode); + return false; + } + + // remove the catalog entry for this mode + Pattern p = Pattern.compile("(?m)(^\\s*[<]MODE.*?NAME=\"" + name + "\".*?[>])"); + Matcher m = p.matcher(contents); + String newContents = m.replaceFirst("<!--$1-->"); + + try + { + // rewrite the catalog file + BufferedWriter bw = new BufferedWriter(new FileWriter(catalogFile)); + bw.write(newContents, 0, newContents.length()); + bw.flush(); + bw.close(); + } + catch(IOException ioe) + { + // unable to write the catalog file + modes.put(oldMode.getName(), oldMode); + throw ioe; + } } } return true; @@ -227,25 +228,25 @@ List<Mode> filepathMatch = new ArrayList<Mode>(); for (Mode mode : acceptable) { - if (mode.acceptFile(filepath, filename)) + if (mode.acceptFile(filepath, filename)) { filepathMatch.add(mode); } } - if (filepathMatch.size() == 1) + if (filepathMatch.size() == 1) { - return filepathMatch.get(0); + return filepathMatch.get(0); } else if (filepathMatch.size() > 1) { // return the one with the longest glob pattern since that one // is most likely to be more specific and hence the best choice Mode longest = filepathMatch.get(0); - for (Mode mode : filepathMatch) + for (Mode mode : filepathMatch) { if (((String)mode.getProperty("filenameGlob")).length() > ((String)longest.getProperty("filenameGlob")).length()) { - longest = mode; + longest = mode; } } return longest; @@ -302,7 +303,7 @@ String modeFile = (String)mode.getProperty("file"); String filenameGlob = (String)mode.getProperty("filenameGlob"); String firstLineGlob = (String)mode.getProperty("firstlineGlob"); - + // copy mode file to user mode directory Path source = FileSystems.getDefault().getPath(modeFile); Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING); @@ -311,7 +312,7 @@ File catalogFile = new File(target.toFile().getParent(),"catalog"); if (catalogFile.exists()) { - try + try { // read in the catalog file BufferedReader br = new BufferedReader(new FileReader(catalogFile)); @@ -322,12 +323,12 @@ contents.append(line).append('\n'); } br.close(); - + // remove any existing catalog entry for this mode Pattern p = Pattern.compile("(?m)(^\\s*[<]MODE.*?NAME=\"" + name + "\".*?[>])"); Matcher m = p.matcher(contents); String newContents = m.replaceFirst("<!--$1-->"); - + // insert the catalog entry for this mode p = Pattern.compile("(?m)(</MODES>)"); m = p.matcher(contents); @@ -337,20 +338,20 @@ modeLine.append(firstLineGlob == null || firstLineGlob.isEmpty() ? "" : " FIRST_LINE_GLOB=\"" + firstLineGlob + "\""); modeLine.append("/>"); newContents = m.replaceFirst(modeLine + "\n$1" ); - + // rewrite the catalog file BufferedWriter bw = new BufferedWriter(new FileWriter(catalogFile)); bw.write(newContents, 0, newContents.length()); bw.flush(); bw.close(); } - catch(Exception e) + catch(Exception e) { - // ignored + // ignored } } - - + + addMode(mode); loadMode(mode); } //}}} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mak...@us...> - 2016-09-01 18:01:34
|
Revision: 24516 http://sourceforge.net/p/jedit/svn/24516 Author: makarius Date: 2016-09-01 18:01:32 +0000 (Thu, 01 Sep 2016) Log Message: ----------- Suppress "options.shortcuts.", which are not shortcuts but options for shortcuts. Modified Paths: -------------- jEdit/trunk/keymaps/Alan_keys.props jEdit/trunk/org/jedit/migration/KeymapMigration.java Modified: jEdit/trunk/keymaps/Alan_keys.props =================================================================== --- jEdit/trunk/keymaps/Alan_keys.props 2016-08-31 17:48:25 UTC (rev 24515) +++ jEdit/trunk/keymaps/Alan_keys.props 2016-09-01 18:01:32 UTC (rev 24516) @@ -185,7 +185,6 @@ next-word-std.shortcut=C+RIGHT open-file.shortcut=C+o open-moin-page.shortcut=C+x C+w -options.shortcuts.shortcut2=Alternative shortcut overwrite.shortcut=INSERT paste-string-register.shortcut=C+r C+v paste.shortcut2=C+v Modified: jEdit/trunk/org/jedit/migration/KeymapMigration.java =================================================================== --- jEdit/trunk/org/jedit/migration/KeymapMigration.java 2016-08-31 17:48:25 UTC (rev 24515) +++ jEdit/trunk/org/jedit/migration/KeymapMigration.java 2016-09-01 18:01:32 UTC (rev 24516) @@ -54,7 +54,8 @@ for (Map.Entry<Object, Object> entry:entries) { String key = entry.getKey().toString(); - if (key.endsWith(".shortcut") || key.endsWith(".shortcut2")) + if ((key.endsWith(".shortcut") || key.endsWith(".shortcut2")) && + !key.startsWith("options.shortcuts.")) { imported.setShortcut(key, entry.getValue().toString()); jEdit.resetProperty(key); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ker...@us...> - 2016-09-09 07:09:22
|
Revision: 24526 http://sourceforge.net/p/jedit/svn/24526 Author: kerik-sf Date: 2016-09-09 07:09:20 +0000 (Fri, 09 Sep 2016) Log Message: ----------- Plugin Manager install panel: fix plugin info box layout Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/pluginmgr/InstallPanel.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2016-09-07 23:01:52 UTC (rev 24525) +++ jEdit/trunk/doc/CHANGES.txt 2016-09-09 07:09:20 UTC (rev 24526) @@ -75,6 +75,10 @@ - Delete a user mode from the catalog even if the mode file is missing (Eric Le Lay) + +- Plugin Manager: fix missing newline between released and description for + plugins without dependencies. Add extra newline for clarity. (Eric Le Lay) + }}} {{{ UI Improvements Modified: jEdit/trunk/org/gjt/sp/jedit/pluginmgr/InstallPanel.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/pluginmgr/InstallPanel.java 2016-09-07 23:01:52 UTC (rev 24525) +++ jEdit/trunk/org/gjt/sp/jedit/pluginmgr/InstallPanel.java 2016-09-09 07:09:20 UTC (rev 24526) @@ -974,23 +974,19 @@ { Entry entry = (Entry) pluginModel.filteredEntries .get(table.getSelectedRow()); - String pattern = "<b>{0}</b>: {1}<br><b>{2}</b>: {3}<br>{4}<br><br><b>{5}</b>:<br>{6}"; + String pattern = "<b>{0}</b>: {1}<br><b>{2}</b>: {3}<br><br>{4}"; List<String> params = new ArrayList<String>(); params.add(jEdit.getProperty("install-plugins.info.author", "Author")); params.add(entry.author); params.add(jEdit.getProperty("install-plugins.info.released", "Released")); params.add(entry.date); params.add(entry.description); - if (entry.dependencies == null || entry.dependencies.isEmpty()) + if (entry.dependencies != null && !entry.dependencies.isEmpty()) { - pattern = "<b>{0}</b>: {1}<br><b>{2}</b>: {3} {4}"; - } - else - { + pattern += "<br><br><b>{5}</b>:<br>{6}"; params.add(jEdit.getProperty("install-plugins.info.depends", "Depends on")); StringList sl = StringList.split(entry.dependencies, "\n"); params.add(sl.join(", ")); - // params.add(entry.dependencies.replaceAll("\n", ", ")); } text = MessageFormat.format(pattern, params.toArray()); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dal...@us...> - 2016-09-17 16:17:24
|
Revision: 24542 http://sourceforge.net/p/jedit/svn/24542 Author: daleanson Date: 2016-09-17 16:17:22 +0000 (Sat, 17 Sep 2016) Log Message: ----------- Print system updates. Modified Paths: -------------- jEdit/trunk/doc/users-guide/files.xml jEdit/trunk/org/gjt/sp/jedit/actions.xml jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props jEdit/trunk/org/gjt/sp/jedit/print/BufferPrintable1_7.java jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_7.java jEdit/trunk/org/gjt/sp/jedit/print/PageBreakExtension.java jEdit/trunk/org/gjt/sp/jedit/print/PrintPreview.java jEdit/trunk/org/gjt/sp/jedit/print/PrintPreviewModel.java Modified: jEdit/trunk/doc/users-guide/files.xml =================================================================== --- jEdit/trunk/doc/users-guide/files.xml 2016-09-14 09:58:29 UTC (rev 24541) +++ jEdit/trunk/doc/users-guide/files.xml 2016-09-17 16:17:22 UTC (rev 24542) @@ -638,32 +638,12 @@ <section id="printing"> <title>Printing</title> - <para>jEdit has gone through several iterations in printing. All 3 versions are still available so you can choose which one fits best for your system and printer: - <itemizedlist> - <listitem> - <para>Printing using the Java 1.3 printing API. This is really clunky but generally works. There are limited options as far as page setup and printer settings.</para> - <para>To use this option, go to Utilities - Global Options - Printing and check "Use old printing API" and uncheck "Use system print dialog".</para> - </listitem> - - <listitem> - <para>Printing using a combination of the Java 1.3 and Java 1.4 printing API. There are a number of bugs in this one.</para> - <para>To use this option, go to Utilities - Global Options - Printing and uncheck "Use old printing API" and check "Use system print dialog".</para> - </listitem> - - <listitem> - <para>Printing using the latest (Java 1.8 at this writing) printing API and provides jEdit it's own printing dialog. This version is preferred and has the most page setup and printer options. It fixes all of the bugs in the previous iteration and provides additional options.</para> - <para>To use this option, go to Utilities - Global Options - Printing and uncheck both "Use old printing API" and "Use system print dialog". This will allow you to use jEdit's full featured print dialog to set printing options.</para> - </listitem> - </itemizedlist> + <para>jEdit printing is much like you'd expect from any text editor application, you can select the printer, specify specific pages to print, the number of copies, and a number of printer and page options that are supported by the printer such as color printing, duplex printing, and so on. The specific options available are determined by the chosen printer. Print preview is also available. </para> - <para><guimenu>File</guimenu>><guimenuitem>Print</guimenuitem> - (shortcut: <keycap>C+p</keycap>) prints the current buffer.</para> + <para>The printer dialog is accessed by <guimenu>File</guimenu>><guimenuitem>Print</guimenuitem> + (shortcut: <keycap>C+p</keycap>) which prints the current buffer. At this time, there is no option to print multiple buffers at once.</para> - <para><guimenu>File</guimenu>><guimenuitem>Page Setup</guimenuitem> - displays a dialog box for changing your operating system's print - settings, such as margins, page size, print quality, and so on.</para> - <para>The print output can be customized in the <guibutton>Printing</guibutton> pane of the <guimenu>Utilities</guimenu>><guimenuitem>Options</guimenuitem> @@ -690,10 +670,6 @@ </listitem> <listitem> - <para>If the output should be color or black and white. This option is used only if one of the older printing systems. If you're using the latest jEdit printing system, the color printing choice is on the 'Advanced' tab in the printing dialog. </para> - </listitem> - - <listitem> <para>The tab size to use when printing - this will usually be less than the text area tab size, to conserve space in the printed output.</para> @@ -703,13 +679,13 @@ <para>If folded regions should be printed.</para> </listitem> - <listitem> - <para>There are also 3 check boxes for workarounds for older Java bugs. Since the current jEdit versions require at least Java 1.7, all 3 of these boxes should be unchecked.</para> - </listitem> </itemizedlist> <para> - In the Utilities - Global Options - Text Area settings, there is an option to show page breaks. If selected, horizontal lines will be displayed in the text area to indicate page breaks. There is also an action available in Utilities - Global Options - Shortcuts to toggle the the page break markers on and off. + In the Utilities - Global Options - Text Area settings, there is an option to show page breaks. If selected, horizontal lines will be displayed in the text area to indicate page breaks.</para> + + <para> + There is also an action available in Utilities - Global Options - Shortcuts to toggle the the page break markers on and off. Page break markers are just what they sound like, they show where page breaks would be for printing. Note that jEdit is not a word processor, so the page breaks are calculated based on printer settings and font size. It is not possible to set a page break at a specific point in a file. </para> </section> Modified: jEdit/trunk/org/gjt/sp/jedit/actions.xml =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/actions.xml 2016-09-14 09:58:29 UTC (rev 24541) +++ jEdit/trunk/org/gjt/sp/jedit/actions.xml 2016-09-17 16:17:22 UTC (rev 24542) @@ -811,17 +811,6 @@ </IS_SELECTED> </ACTION> -<ACTION NAME="page-setup"> - <CODE> - if(jEdit.getBooleanProperty("print.force13", false)) - BufferPrinter1_3.pageSetup(view); - else if(jEdit.getBooleanProperty("print.useSystemDialog", false)) - BufferPrinter1_4.pageSetup(view); - else - BufferPrinter1_7.pageSetup(view); - </CODE> -</ACTION> - <ACTION NAME="parent-fold"> <CODE> textArea.goToParentFold(); @@ -973,11 +962,6 @@ <ACTION NAME="print"> <CODE> - if(jEdit.getBooleanProperty("print.force13", false)) - BufferPrinter1_3.print(view, buffer, false); - else if(jEdit.getBooleanProperty("print.useSystemDialog", false)) - BufferPrinter1_4.print(view, buffer, false); - else BufferPrinter1_7.print(view, buffer); </CODE> </ACTION> Modified: jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props 2016-09-14 09:58:29 UTC (rev 24541) +++ jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props 2016-09-17 16:17:22 UTC (rev 24542) @@ -161,7 +161,6 @@ save-all \ - \ print \ - page-setup \ - \ exit new-file.icon.small=16x16/actions/document-new.png Modified: jEdit/trunk/org/gjt/sp/jedit/print/BufferPrintable1_7.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/print/BufferPrintable1_7.java 2016-09-14 09:58:29 UTC (rev 24541) +++ jEdit/trunk/org/gjt/sp/jedit/print/BufferPrintable1_7.java 2016-09-17 16:17:22 UTC (rev 24542) @@ -55,7 +55,7 @@ private static Color lineNumberColor = Color.gray; private static Color textColor = Color.black; - private PrintRequestAttributeSet format; + private PrintRequestAttributeSet attributes; private boolean firstCall; private View view; @@ -80,9 +80,9 @@ private DisplayTokenHandler tokenHandler; - BufferPrintable1_7(PrintRequestAttributeSet format, View view, Buffer buffer) + BufferPrintable1_7(PrintRequestAttributeSet attributes, View view, Buffer buffer) { - this.format = format; + this.attributes = attributes; this.view = view; this.buffer = buffer; firstCall = true; // pages and page ranges are calculated only once @@ -91,7 +91,7 @@ footer = jEdit.getBooleanProperty("print.footer"); lineNumbers = jEdit.getBooleanProperty("print.lineNumbers"); font = jEdit.getFontProperty("print.font"); - boolean color = Chromaticity.COLOR.equals(format.get(Chromaticity.class)); + boolean color = Chromaticity.COLOR.equals(attributes.get(Chromaticity.class)); styles = org.gjt.sp.util.SyntaxUtilities.loadStyles(jEdit.getProperty("print.font"), jEdit.getIntegerProperty("print.fontsize", 10), color); styles[Token.NULL] = new SyntaxStyle(textColor, null, font); @@ -157,10 +157,10 @@ // this can be called multiple times by the print system for the same page, and // all calls must be handled for the page to print properly. - // pageIndex is zero-based. + // pageIndex is 1-based. public int print(Graphics _gfx, PageFormat pageFormat, int pageIndex) throws PrinterException { - //Log.log(Log.DEBUG, this, "Asked to print page " + pageIndex); + Log.log(Log.DEBUG, this, "Asked to print page " + pageIndex); if (firstCall && pages == null) { pages = calculatePages(_gfx, pageFormat); @@ -193,21 +193,21 @@ if (reverse && printRangeType != PrinterDialog.CURRENT_PAGE) { pageIndex = pages.size() - 1 - pageIndex; - //Log.log(Log.DEBUG, this, "Reverse is on, changing page index to " + pageIndex); + Log.log(Log.DEBUG, this, "Reverse is on, changing page index to " + pageIndex); } // go ahead and print the page Range range = pages.get(pageIndex); if ( (range == null || !inRange(pageIndex)) && printRangeType != PrinterDialog.CURRENT_PAGE ) { - //Log.log(Log.DEBUG, this, "Returning NO_SUCH_PAGE for page " + pageIndex); + Log.log(Log.DEBUG, this, "Returning NO_SUCH_PAGE for page " + pageIndex); return NO_SUCH_PAGE; } else { printPage(_gfx, pageFormat, pageIndex, true); } - //Log.log(Log.DEBUG, this, "Returning PAGE_EXISTS for page " + pageIndex); + Log.log(Log.DEBUG, this, "Returning PAGE_EXISTS for page " + pageIndex); return PAGE_EXISTS; } @@ -229,8 +229,8 @@ */ protected HashMap<Integer, Range> calculatePages(Graphics _gfx, PageFormat pageFormat) throws PrinterException { - //Log.log(Log.DEBUG, this, "calculatePages for " + buffer.getName()); - //Log.log(Log.DEBUG, this, "graphics.getClip = " + _gfx.getClip()); + Log.log(Log.DEBUG, this, "calculatePages for " + buffer.getName()); + Log.log(Log.DEBUG, this, "graphics.getClip = " + _gfx.getClip()); pages = new HashMap<Integer, Range>(); @@ -267,14 +267,14 @@ gfx.setFont(font); gfx.setTransform(new AffineTransform(1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f)); frc = gfx.getFontRenderContext(); - //Log.log(Log.DEBUG, this, "Font render context is " + frc); + Log.log(Log.DEBUG, this, "Font render context is " + frc); // maximum printable area double pageX = pageFormat.getImageableX(); double pageY = pageFormat.getImageableY(); double pageWidth = pageFormat.getImageableWidth(); double pageHeight = pageFormat.getImageableHeight(); - //Log.log(Log.DEBUG, this, "calculatePages, total imageable: x=" + pageX + ", y=" + pageY + ", w=" + pageWidth + ", h=" + pageHeight); + Log.log(Log.DEBUG, this, "calculatePages, total imageable: x=" + pageX + ", y=" + pageY + ", w=" + pageWidth + ", h=" + pageHeight); // calculate header height if(header) @@ -282,7 +282,7 @@ double headerHeight = paintHeader(gfx, pageX, pageY, pageWidth, false); pageY += headerHeight; pageHeight -= headerHeight; - //Log.log(Log.DEBUG, this, "calculatePages, w/header imageable: x=" + pageX + ", y=" + pageY + ", w=" + pageWidth + ", h=" + pageHeight); + Log.log(Log.DEBUG, this, "calculatePages, w/header imageable: x=" + pageX + ", y=" + pageY + ", w=" + pageWidth + ", h=" + pageHeight); } // calculate footer height @@ -290,7 +290,7 @@ { double footerHeight = paintFooter(gfx, pageX, pageY, pageWidth, pageHeight, 0, false); pageHeight -= footerHeight; - //Log.log(Log.DEBUG, this, "calculatePages, w/footer imageable: x=" + pageX + ", y=" + pageY + ", w=" + pageWidth + ", h=" + pageHeight); + Log.log(Log.DEBUG, this, "calculatePages, w/footer imageable: x=" + pageX + ", y=" + pageY + ", w=" + pageWidth + ", h=" + pageHeight); } double lineNumberWidth = 0.0; @@ -323,7 +323,7 @@ float lineHeight = lm.getHeight(); boolean printFolds = jEdit.getBooleanProperty("print.folds", true); currentPhysicalLine = 0; - int pageCount = 0; + int pageCount = 1; int startLine = 0; double y = 0.0; @@ -345,7 +345,7 @@ // last page Range range = new Range(startLine, currentPhysicalLine); pages.put(new Integer(pageCount), range); - //Log.log(Log.DEBUG, this, "calculatePages, page " + pageCount + " has " + range); + Log.log(Log.DEBUG, this, "calculatePages, page " + pageCount + " has " + range); break; } @@ -366,7 +366,7 @@ { Range range = new Range(startLine, Math.max(0, currentPhysicalLine - 1)); pages.put(new Integer(pageCount), range); - //Log.log(Log.DEBUG, this, "calculatePages, page " + pageCount + " has " + range); + Log.log(Log.DEBUG, this, "calculatePages, page " + pageCount + " has " + range); ++ pageCount; startLine = currentPhysicalLine; y = 0.0; @@ -386,7 +386,7 @@ // be printed private boolean inRange(int pageNumber) { - PageRanges ranges = (PageRanges)format.get(PageRanges.class); + PageRanges ranges = (PageRanges)attributes.get(PageRanges.class); boolean answer = false; if (ranges == null) { @@ -394,16 +394,16 @@ } else { - answer = ranges.contains(pageNumber + 1); + answer = ranges.contains(pageNumber); } return answer; } // actually print the page to the graphics context - // pageIndex is 0-based + // pageIndex is 1-based private void printPage(Graphics _gfx, PageFormat pageFormat, int pageIndex, boolean actuallyPaint) { - //Log.log(Log.DEBUG, this, "printPage(" + pageIndex + ", " + actuallyPaint + ')'); + Log.log(Log.DEBUG, this, "printPage(" + pageIndex + ", " + actuallyPaint + ')'); Graphics2D gfx = (Graphics2D)_gfx; float zoomLevel = 1.0f; if (pageFormat instanceof PrintPreviewModel) @@ -428,7 +428,7 @@ double pageY = pageFormat.getImageableY(); double pageWidth = pageFormat.getImageableWidth(); double pageHeight = pageFormat.getImageableHeight(); - //Log.log(Log.DEBUG, this, "#1 - Page dimensions: (" + pageX + ", " + pageY + ") " + pageWidth + 'x' + pageHeight); + Log.log(Log.DEBUG, this, "#1 - Page dimensions: (" + pageX + ", " + pageY + ") " + pageWidth + 'x' + pageHeight); // print header if(header) @@ -445,11 +445,9 @@ pageHeight -= footerHeight; } - // spacing workaround - boolean glyphVector = jEdit.getBooleanProperty("print.glyphVector"); - double lineNumberWidth = 0.0; // determine line number width + double lineNumberWidth = 0.0; if(lineNumbers) { String lineNumberDigits = String.valueOf(buffer.getLineCount()); @@ -461,7 +459,7 @@ lineNumberWidth = font.getStringBounds(digits.toString(), frc).getWidth(); } - //Log.log(Log.DEBUG,this,"#2 - Page dimensions: " + (pageWidth - lineNumberWidth) + 'x' + pageHeight); + Log.log(Log.DEBUG,this,"#2 - Page dimensions: " + (pageWidth - lineNumberWidth) + 'x' + pageHeight); // calculate tab size int tabSize = jEdit.getIntegerProperty("print.tabSize", 4); @@ -476,30 +474,30 @@ // prep for printing lines lm = font.getLineMetrics("gGyYX", frc); float lineHeight = lm.getHeight(); - //Log.log(Log.DEBUG, this, "Line height is " + lineHeight); + Log.log(Log.DEBUG, this, "Line height is " + lineHeight); double y = 0.0; Range range = pages.get(pageIndex); - //Log.log(Log.DEBUG, this, "printing range for page " + pageIndex + ": " + range); + Log.log(Log.DEBUG, this, "printing range for page " + pageIndex + ": " + range); // print each line for (currentPhysicalLine = range.getStart(); currentPhysicalLine <= range.getEnd(); currentPhysicalLine++) { if(currentPhysicalLine == buffer.getLineCount()) { - //Log.log(Log.DEBUG, this, "Finished buffer"); - //Log.log(Log.DEBUG, this, "The end"); + Log.log(Log.DEBUG, this, "Finished buffer"); + Log.log(Log.DEBUG, this, "The end"); break; } if (!jEdit.getBooleanProperty("print.folds",true) && !view.getTextArea().getDisplayManager().isLineVisible(currentPhysicalLine)) { - //Log.log(Log.DEBUG, this, "Skipping invisible line"); + Log.log(Log.DEBUG, this, "Skipping invisible line"); continue; } // print only selected lines if printing selection if (selection && Arrays.binarySearch(selectedLines, currentPhysicalLine) < 0) { - //Log.log(Log.DEBUG, this, "Skipping non-selected line: " + currentPhysicalLine); + Log.log(Log.DEBUG, this, "Skipping non-selected line: " + currentPhysicalLine); continue; } @@ -530,14 +528,14 @@ if (chunks != null && actuallyPaint) { Chunk.paintChunkBackgrounds(chunks, gfx, (float) (pageX + lineNumberWidth), (float) (pageY + y), lineHeight); - Chunk.paintChunkList(chunks, gfx, (float) (pageX + lineNumberWidth), (float) (pageY + y), glyphVector); + Chunk.paintChunkList(chunks, gfx, (float) (pageX + lineNumberWidth), (float) (pageY + y), true); } } } if (currentPhysicalLine == range.getEnd()) { - //Log.log(Log.DEBUG,this,"Finished page"); + Log.log(Log.DEBUG,this,"Finished page"); break; } } Modified: jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_7.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_7.java 2016-09-14 09:58:29 UTC (rev 24541) +++ jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_7.java 2016-09-17 16:17:22 UTC (rev 24542) @@ -28,7 +28,6 @@ import java.awt.image.BufferedImage; import java.awt.print.*; import java.io.*; -import java.util.ArrayList; import java.util.HashMap; import javax.print.*; @@ -150,7 +149,7 @@ { if ( range.contains( line ) ) { - pageRange.append( i + 1 ).append( ',' ); + pageRange.append( i ).append( ',' ); break; } } @@ -192,7 +191,7 @@ protected static void printPage( PrintPreviewModel model ) { String jobName = MiscUtilities.abbreviateView( model.getBuffer().getPath() ); - format.add( new JobName( jobName, null ) ); + model.getAttributes().add( new JobName( jobName, null ) ); // set up the print job PrintService printService = model.getPrintService(); @@ -265,7 +264,17 @@ graphics.setClip(clipRegion); try { - return printable.calculatePages( graphics, pageFormat ); + HashMap<Integer, Range> pageLineRanges = printable.calculatePages( graphics, pageFormat ); + PageRanges pr = (PageRanges)attributes.get(PageRanges.class); + HashMap<Integer, Range> newLineRanges = new HashMap<Integer, Range>(); + for (Integer i : pageLineRanges.keySet()) + { + if (pr.contains(i)) + { + newLineRanges.put(i, pageLineRanges.get(i)); + } + } + return newLineRanges; } catch(Exception e) { Modified: jEdit/trunk/org/gjt/sp/jedit/print/PageBreakExtension.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/print/PageBreakExtension.java 2016-09-14 09:58:29 UTC (rev 24541) +++ jEdit/trunk/org/gjt/sp/jedit/print/PageBreakExtension.java 2016-09-17 16:17:22 UTC (rev 24542) @@ -148,7 +148,7 @@ } // - 1 so last page break isn't drawn - for (int page = 0; page < pages.size() - 1; page++) + for (int page = 1; page < pages.size() - 1; page++) { Range range = pages.get( page ); // 2nd part of 'if' handles soft wrap so if the last line of the page Modified: jEdit/trunk/org/gjt/sp/jedit/print/PrintPreview.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/print/PrintPreview.java 2016-09-14 09:58:29 UTC (rev 24541) +++ jEdit/trunk/org/gjt/sp/jedit/print/PrintPreview.java 2016-09-17 16:17:22 UTC (rev 24542) @@ -58,6 +58,7 @@ private HashMap<Integer, Range> pageRanges; private PrintRequestAttributeSet attributes; private PrintService printService; + private PrintPreviewModel model; private float zoomLevel = 1.0f; @@ -170,13 +171,11 @@ public void actionPerformed( ActionEvent ae ) { - int selectedIndex = pages.getSelectedIndex(); - HashMap<Integer, Range> currentPage = new HashMap<Integer, Range>(); - currentPage.put( selectedIndex, pageRanges.get( selectedIndex ) ); - PrintPreviewModel model = new PrintPreviewModel( view, buffer, printService, attributes, currentPage ); - model.setPageNumber( selectedIndex ); + int selectedPage = (Integer)pages.getSelectedItem(); + model.setPageNumber( selectedPage ); + model.setPageRanges(pageRanges); model.setZoomLevel(zoomLevel); - attributes.add( new PageRanges( (Integer)pages.getSelectedItem() ) ); + attributes.add( new PageRanges( selectedPage ) ); printPreviewPane.setModel( model ); } } @@ -189,7 +188,7 @@ int selectedIndex = pages.getSelectedIndex(); if (selectedIndex <= 0) { - selectedIndex = pageRanges.size() - 1; + selectedIndex = pages.getItemCount() - 1; } else { @@ -205,7 +204,7 @@ public void actionPerformed( ActionEvent ae ) { int selectedIndex = pages.getSelectedIndex(); - if (selectedIndex + 1 == pageRanges.size()) + if (selectedIndex + 1 == pages.getItemCount()) { selectedIndex = 0; } @@ -223,14 +222,12 @@ public void actionPerformed( ActionEvent ae ) { zoomLevel += 0.1f; - int selectedIndex = pages.getSelectedIndex(); - HashMap<Integer, Range> currentPage = new HashMap<Integer, Range>(); - currentPage.put( selectedIndex, pageRanges.get( selectedIndex ) ); - PrintPreviewModel model = new PrintPreviewModel( view, buffer, printService, attributes, currentPage ); + int selectedPage = (Integer)pages.getSelectedItem(); model.setZoomLevel(zoomLevel); - model.setPageNumber( selectedIndex ); - attributes.add( new PageRanges( (Integer)pages.getSelectedItem() ) ); + model.setPageNumber( selectedPage ); + model.setPageRanges(pageRanges); model.setZoom(PrintPreviewModel.Zoom.IN); + attributes.add( new PageRanges( selectedPage ) ); printPreviewPane.setModel( model ); } } @@ -243,14 +240,12 @@ zoomLevel -= 0.1f; if (zoomLevel <= 0.0f) zoomLevel = 0.1f; - int selectedIndex = pages.getSelectedIndex(); - HashMap<Integer, Range> currentPage = new HashMap<Integer, Range>(); - currentPage.put( selectedIndex, pageRanges.get( selectedIndex ) ); - PrintPreviewModel model = new PrintPreviewModel( view, buffer, printService, attributes, currentPage ); + int selectedPage = (Integer)pages.getSelectedItem(); model.setZoomLevel(zoomLevel); - model.setPageNumber( selectedIndex ); - attributes.add( new PageRanges( (Integer)pages.getSelectedItem() ) ); + model.setPageNumber( selectedPage ); + model.setPageRanges(pageRanges); model.setZoom(PrintPreviewModel.Zoom.OUT); + attributes.add( new PageRanges( selectedPage ) ); printPreviewPane.setModel( model ); } } @@ -260,13 +255,11 @@ public void actionPerformed( ActionEvent ae ) { - int selectedIndex = pages.getSelectedIndex(); - HashMap<Integer, Range> currentPage = new HashMap<Integer, Range>(); - currentPage.put( selectedIndex, pageRanges.get( selectedIndex ) ); - PrintPreviewModel model = new PrintPreviewModel( view, buffer, printService, attributes, currentPage ); - model.setPageNumber( selectedIndex ); - attributes.add( new PageRanges( (Integer)pages.getSelectedItem() ) ); + int selectedPage = (Integer)pages.getSelectedItem(); + model.setPageNumber( selectedPage ); + model.setPageRanges(pageRanges); model.setZoom(PrintPreviewModel.Zoom.WIDTH); + attributes.add( new PageRanges( selectedPage ) ); printPreviewPane.setModel( model ); } } @@ -276,13 +269,11 @@ public void actionPerformed( ActionEvent ae ) { - int selectedIndex = pages.getSelectedIndex(); - HashMap<Integer, Range> currentPage = new HashMap<Integer, Range>(); - currentPage.put( selectedIndex, pageRanges.get( selectedIndex ) ); - PrintPreviewModel model = new PrintPreviewModel( view, buffer, printService, attributes, currentPage ); - model.setPageNumber( selectedIndex ); - attributes.add( new PageRanges( (Integer)pages.getSelectedItem() ) ); + int selectedPage = (Integer)pages.getSelectedItem(); + model.setPageNumber( selectedPage ); + model.setPageRanges(pageRanges); model.setZoom(PrintPreviewModel.Zoom.PAGE); + attributes.add( new PageRanges( selectedPage ) ); printPreviewPane.setModel( model ); } } @@ -296,13 +287,15 @@ DefaultComboBoxModel<Integer> pagesModel = new DefaultComboBoxModel<Integer>(); for ( Integer i : pageRanges.keySet() ) { - pagesModel.addElement( i + 1 ); + pagesModel.addElement( i ); + System.out.println("+++++ init, i = " + i + ", range = " + pageRanges.get(i)); } pages.setModel( pagesModel ); + + nextPage.setEnabled(pagesModel.getSize() > 1); + prevPage.setEnabled(pagesModel.getSize() > 1); - HashMap<Integer, Range> currentPage = new HashMap<Integer, Range>(); - currentPage.put( 1, pageRanges.get( 0 ) ); - PrintPreviewModel model = new PrintPreviewModel( view, buffer, printService, attributes, currentPage ); + model = new PrintPreviewModel( view, buffer, printService, attributes, pageRanges ); printPreviewPane.setModel( model ); } Modified: jEdit/trunk/org/gjt/sp/jedit/print/PrintPreviewModel.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/print/PrintPreviewModel.java 2016-09-14 09:58:29 UTC (rev 24541) +++ jEdit/trunk/org/gjt/sp/jedit/print/PrintPreviewModel.java 2016-09-17 16:17:22 UTC (rev 24542) @@ -47,6 +47,7 @@ private PrintRequestAttributeSet attributes; private HashMap<Integer, Range> pageRanges; private int pageNumber = 1; + private int printRangeType = PrinterDialog.ALL; private Graphics gfx; public static enum Zoom { NONE, IN, OUT, WIDTH, PAGE }; private Zoom zoom = Zoom.NONE; @@ -108,6 +109,16 @@ { this.pageRanges = pageRanges; } + + public void setPrintRangeType(int type) + { + printRangeType = type; + } + + public int getPrintRangeType() + { + return printRangeType; + } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dal...@us...> - 2016-09-20 20:24:36
|
Revision: 24553 http://sourceforge.net/p/jedit/svn/24553 Author: daleanson Date: 2016-09-20 20:24:34 +0000 (Tue, 20 Sep 2016) Log Message: ----------- Fix bug # 3998, Next Char macro doesn't work. Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/macros/Text/Next_Char.bsh Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2016-09-20 19:03:27 UTC (rev 24552) +++ jEdit/trunk/doc/CHANGES.txt 2016-09-20 20:24:34 UTC (rev 24553) @@ -78,6 +78,8 @@ - Plugin Manager: fix missing newline between released and description for plugins without dependencies. Add extra newline for clarity. (Eric Le Lay) + +- Fix bug # 3998, Next Char macro doesn't work. (Dale Anson) }}} {{{ UI Improvements Modified: jEdit/trunk/macros/Text/Next_Char.bsh =================================================================== --- jEdit/trunk/macros/Text/Next_Char.bsh 2016-09-20 19:03:27 UTC (rev 24552) +++ jEdit/trunk/macros/Text/Next_Char.bsh 2016-09-20 20:24:34 UTC (rev 24553) @@ -40,7 +40,7 @@ script.append( "match = text.indexOf(__char__, 1);" ); script.append( "if(match != -1) {" ); script.append( "if(__char__ != '\\n') ++match;" ); - script.append( "textArea.select(start, start + match - 1);}" ); + script.append( "textArea.setCaretPosition(start + match - 1);}" ); view.getInputHandler().readNextChar(EnterCharacterLabel,script.toString()); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ez...@us...> - 2016-11-30 19:02:22
|
Revision: 24579 http://sourceforge.net/p/jedit/svn/24579 Author: ezust Date: 2016-11-30 19:02:20 +0000 (Wed, 30 Nov 2016) Log Message: ----------- Made toggle page breaks toggleable action and put into view menu. Modified Paths: -------------- jEdit/trunk/doc/users-guide/files.xml jEdit/trunk/org/gjt/sp/jedit/actions.xml jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props Modified: jEdit/trunk/doc/users-guide/files.xml =================================================================== --- jEdit/trunk/doc/users-guide/files.xml 2016-11-29 02:51:00 UTC (rev 24578) +++ jEdit/trunk/doc/users-guide/files.xml 2016-11-30 19:02:20 UTC (rev 24579) @@ -679,10 +679,10 @@ </itemizedlist> <para> - In the Utilities - Global Options - Text Area settings, there is an option to show page break markers. If selected, horizontal lines will be displayed in the text area to indicate where page breaks will be when printing.</para> - + In the Utilities - Global Options - Text Area settings, there is an option to show page break markers. If selected, horizontal lines will be displayed in the text area to indicate where page breaks will be when printing.</para> + <para> - There is also an action available in Utilities - Global Options - Shortcuts to toggle the the page break markers on and off. Page break markers are just what they sound like, they show where page breaks would be for printing. Note that jEdit is not a word processor, so the page breaks are calculated based on printer settings and print font size. It is not possible to set a page break at a specific point in a file. + There is also an action available in the View menu, to toggle the the page break markers on and off. Page break markers are just what they sound like, they show where page breaks would be for printing. Note that jEdit is not a word processor, so the page breaks are calculated based on printer settings and print font size. It is not possible to set a page break at a specific point in a file. </para> </section> Modified: jEdit/trunk/org/gjt/sp/jedit/actions.xml =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/actions.xml 2016-11-29 02:51:00 UTC (rev 24578) +++ jEdit/trunk/org/gjt/sp/jedit/actions.xml 2016-11-30 19:02:20 UTC (rev 24579) @@ -451,7 +451,7 @@ </CODE> <IS_SELECTED> return (jEdit.getBufferSetManager().getScope().equals(BufferSet.Scope.view)); - </IS_SELECTED> + </IS_SELECTED> </ACTION> <ACTION NAME="bufferset-toggle-exclusive"> @@ -471,8 +471,8 @@ </CODE> <IS_SELECTED> return (jEdit.getBufferSetManager().getScope().equals(BufferSet.Scope.editpane)); - </IS_SELECTED> - + </IS_SELECTED> + </ACTION> <ACTION NAME="goto-line"> @@ -718,7 +718,7 @@ <ACTION NAME="new-view"> <CODE> - bsm = jEdit.getBufferSetManager(); + bsm = jEdit.getBufferSetManager(); if (bsm.getScope() == BufferSet.Scope.global) { jEdit.newView(view); } @@ -971,6 +971,9 @@ jEdit.setBooleanProperty("view.pageBreaks", !jEdit.getBooleanProperty("view.pageBreaks")); EditBus.send(new PropertiesChanged(null)); </CODE> + <IS_SELECTED> + return jEdit.getBooleanProperty("view.pageBreaks"); + </IS_SELECTED> </ACTION> <ACTION NAME="quick-search" NO_RECORD="TRUE"> Modified: jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props 2016-11-29 02:51:00 UTC (rev 24578) +++ jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props 2016-11-30 19:02:20 UTC (rev 24579) @@ -376,6 +376,7 @@ focus-buffer-switcher \ - \ toggle-line-numbers \ + print.toggle-show-page-breaks \ toggle-statusbar \ toggle-gutter \ toggle-buffer-switcher \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vam...@us...> - 2017-01-20 02:34:47
|
Revision: 24592 http://sourceforge.net/p/jedit/svn/24592 Author: vampire0 Date: 2017-01-20 02:34:44 +0000 (Fri, 20 Jan 2017) Log Message: ----------- hopefully finish switch from Java 1.7 to Java 1.8 Modified Paths: -------------- jEdit/trunk/README.SRC.txt jEdit/trunk/doc/FAQ/faq-general.xml jEdit/trunk/doc/FAQ/faq-install.xml jEdit/trunk/doc/FAQ/faq-problems.xml jEdit/trunk/doc/README.txt jEdit/trunk/doc/releasing-jedit.txt jEdit/trunk/installer/Install.java jEdit/trunk/org/gjt/sp/jedit/OperatingSystem.java jEdit/trunk/org/gjt/sp/jedit/jEdit.java jEdit/trunk/org/gjt/sp/jedit/print/BufferPrintable.java jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_3.java jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_4.java jEdit/trunk/package-files/linux/deb/Packages jEdit/trunk/package-files/linux/jedit.1 Modified: jEdit/trunk/README.SRC.txt =================================================================== --- jEdit/trunk/README.SRC.txt 2017-01-15 18:53:27 UTC (rev 24591) +++ jEdit/trunk/README.SRC.txt 2017-01-20 02:34:44 UTC (rev 24592) @@ -19,15 +19,15 @@ For building jEdit, the API documentation or any of the distribution files except of the source package: - - A Java compiler of at least version 1.7, such as Oracle's javac + - A Java compiler of at least version 1.8, such as Oracle's javac which is included in the JDK. Get it from <http://www.java.com/download> or - from your package manager - e. g. openjdk-7-jdk. + from your package manager - e. g. openjdk-8-jdk. For building the API documentation: - Sun's javadoc tool, which is included in the JDK. Get it from <http://www.java.com/download> or from your package - manager - e. g. sun-java7-jdk. + manager - e. g. openjdk-8-jdk. For building the windows installer (for the final step): @@ -173,26 +173,26 @@ * Tips for Eclipse/NetBeans/IDE users: -A file "jsr305.jar" contains definitions of the annotations -used in jEdit source code. It is downloaded automatically by ivy +A file "jsr305.jar" contains definitions of the annotations +used in jEdit source code. It is downloaded automatically by ivy as part of the ant build process, to your lib/compile subfolder. If you add that jar to the project properties - java build path - libraries, that will get rid of the compiler errors on the annotations. -A file "tools.jar" from the JDK is also needed in your -java build path. +A file "tools.jar" from the JDK is also needed in your +java build path. The ant build process creates a subfolder called "build" for its work. -Eclipse does the same and may pick the same folder. +Eclipse does the same and may pick the same folder. It is recommended you check/ensure that a different build -directory ("Default Ouptut Folder") for Eclipse is used. +directory ("Default Ouptut Folder") for Eclipse is used. Some of the source directories are only needed for building packages on certain platforms. If you add jEdit source to an IDE like Eclipse that tries to compile every .java file, you'll get some errors from these directories unless you have the right libraries, which are automatically downloaded by ivy. -However, if you tell Eclipse to exclude these directories, +However, if you tell Eclipse to exclude these directories, you can still build and run/debug jEdit from source. Follow these steps: - Project properties - Java build path Modified: jEdit/trunk/doc/FAQ/faq-general.xml =================================================================== --- jEdit/trunk/doc/FAQ/faq-general.xml 2017-01-15 18:53:27 UTC (rev 24591) +++ jEdit/trunk/doc/FAQ/faq-general.xml 2017-01-20 02:34:44 UTC (rev 24592) @@ -364,7 +364,7 @@ a full Java Development Kit (JDK) package. We recommend obtaining a JDK package.</para> <para>The current version of jEdit requires a - Java runtime environment having a release version of 1.7 or greater. The <ulink + Java runtime environment having a release version of 1.8 or greater. The <ulink url="http://www.jedit.org/index.php?page=compatibility">jEdit web site</ulink> contains a detailed discussion on the compatibility of various publicly available JDK's for the Modified: jEdit/trunk/doc/FAQ/faq-install.xml =================================================================== --- jEdit/trunk/doc/FAQ/faq-install.xml 2017-01-15 18:53:27 UTC (rev 24591) +++ jEdit/trunk/doc/FAQ/faq-install.xml 2017-01-20 02:34:44 UTC (rev 24592) @@ -21,8 +21,8 @@ <answer> <para>First, make sure you have a working installation of - the Java platform. To run jEdit, you will a platform package - having a version number of at least 1.7. If you do not + the Java platform. To run jEdit, you will need a platform + package having a version number of at least 1.8. If you do not have the Java platform, we recommend downloading the larger <quote>Software Development Kit</quote> (SDK), instead of the smaller <quote>Java Runtime Environment</quote> (JRE), @@ -253,7 +253,7 @@ <answer> <para>The latest version of jEdit requires at - least version 1.7 of the Java platform, and therefore may + least version 1.8 of the Java platform, and therefore may not be compatible with 3rd party virtual machines.</para> </answer> </qandaentry> Modified: jEdit/trunk/doc/FAQ/faq-problems.xml =================================================================== --- jEdit/trunk/doc/FAQ/faq-problems.xml 2017-01-15 18:53:27 UTC (rev 24591) +++ jEdit/trunk/doc/FAQ/faq-problems.xml 2017-01-20 02:34:44 UTC (rev 24592) @@ -74,7 +74,7 @@ <literal>~/Library/jEdit</literal> on MacOS). You may want to try renaming the offending directory to something else, and restarting jEdit with fresh settings. - You can later copy things from your old settings back + You can later copy things from your old settings back if you find you are missing things. </para> <para>If at this point you're still stuck, ask for help on the jedit-users mailing list, the jEdit Community @@ -132,17 +132,17 @@ or <filename>javaw.exe</filename>). In place of the <userinput>640</userinput> in the option, use a number of megabytes you think is appropriate for the maximum heap - size. If you already are using the option, try doubling it. + size. If you already are using the option, try doubling it. </para> - + <para> For more information about JVM options, see the <ulink url="../users-guide/jvm-options.html">page on JVM options</ulink> in the users guide. </para> - + <para> On Windows, if you are using the <literal>jedit.exe</literal> launcher, you can add or change the JVM arguments by editing a file called <literal>jEdit.l4j.ini</literal> in the same directory - as the <literal>jedit.exe</literal>. Place one + as the <literal>jedit.exe</literal>. Place one JVM argument (e.g. <literal>-mx640m</literal>) on each - line by itself. </para> - + line by itself. </para> + <para>If out of memory errors occur while running a build or compilation operation from within jEdit, you can also have the operation run in an external process rather than inside @@ -161,7 +161,7 @@ </question> <answer> <para>Before jEdit 5.0, it happened to me quite a bit too. - I use this macro to help avoid the need to restart jEdit. + I use this macro to help avoid the need to restart jEdit. <programlisting> /** Reset_TextArea.bsh */ view.splitVertically(); @@ -169,7 +169,7 @@ </programlisting> Run this, and jEdit creates a new TextArea for you, one that is in a valid state. </para> - + <para>If you can reproduce the steps you took to cause this, please submit a bug report that details what plugins/versions you were using, and how to reproduce it. It @@ -247,14 +247,14 @@ </para> </answer> </qandaentry> - + <qandaentry> <question id="locks-up-or-hangs"> <para>jEdit locks up or hangs while I'm doing lots of things! </para> </question> <answer> <para> Sometimes, it can be due to a deadlock, or an - infinite loop, or something else. You need to obtain a + infinite loop, or something else. You need to obtain a <emphasis role="bold">thread dump</emphasis> from the time of hang, and attach that as a textfile to your bug report, explaining what you were doing at the time. @@ -263,18 +263,18 @@ <para> One way to obtain a thread dump, is to run jEdit with <literal>java -jar jedit.jar</literal> from a command line shell <emphasis role="bold">in the foreground</emphasis>, - wait for the hang or lockup, and type Ctrl+\ - (or Ctrl+Break on Windows) into the shell window. + wait for the hang or lockup, and type Ctrl+\ + (or Ctrl+Break on Windows) into the shell window. You should see a thread dump printed immediately that will - help diagnose the problem. + help diagnose the problem. </para> <para> Another way to get a thread dump is to run jEdit as you - normally would, then run + normally would, then run <ulink url="http://visualvm.java.net/">visualvm</ulink>. You can right click on the jEdit process from within - visualvm and choose "thread dump". + visualvm and choose "thread dump". </para> </answer> @@ -354,9 +354,9 @@ </programlisting> </question> <answer> - <para> Make sure the version of Java you are running is Sun Java 1.7 or higher. + <para> Make sure the version of Java you are running is Oracle Java 1.8 or higher. In debian/ubuntu, - <literal> apt-get install openjdk-7-jdk </literal> + <literal> apt-get install openjdk-8-jdk </literal> </para> </answer> </qandaentry> Modified: jEdit/trunk/doc/README.txt =================================================================== --- jEdit/trunk/doc/README.txt 2017-01-15 18:53:27 UTC (rev 24591) +++ jEdit/trunk/doc/README.txt 2017-01-20 02:34:44 UTC (rev 24592) @@ -3,7 +3,7 @@ * About jEdit jEdit is a cross platform programmer's text editor written in Java. -jEdit requires Java 7 Runtime or later. +jEdit requires Java 8 Runtime or later. It will not run with earlier versions of Java. jEdit comes with full online help; to read it, select 'jEdit Help' from Modified: jEdit/trunk/doc/releasing-jedit.txt =================================================================== --- jEdit/trunk/doc/releasing-jedit.txt 2017-01-15 18:53:27 UTC (rev 24591) +++ jEdit/trunk/doc/releasing-jedit.txt 2017-01-20 02:34:44 UTC (rev 24592) @@ -115,7 +115,7 @@ if a plugin was released that depends on it. - Switch "Head of Branch" to "[ifdevel]devel[/ifdevel][iffinal]main[/iffinal]" - Check the "Remove" checkbox for the jEdit dependency - - Switch the "Low Version" of the JDK dependency to "1.7 [jdk-1.7]" + - Switch the "Low Version" of the JDK dependency to "1.8 [jdk-1.8]" - Click "Update Dependencies" - Click "Create Release" Modified: jEdit/trunk/installer/Install.java =================================================================== --- jEdit/trunk/installer/Install.java 2017-01-15 18:53:27 UTC (rev 24591) +++ jEdit/trunk/installer/Install.java 2017-01-20 02:34:44 UTC (rev 24592) @@ -36,9 +36,9 @@ URL mySource = source.getLocation(); // In fact the check is more restrictive than required : // a problem occurs only when the ! is at the end of directory - return mySource.toString().contains("!"); + return mySource.toString().contains("!"); } - + private static void errorAndExit(boolean isGUI, String message) { if(isGUI) @@ -46,7 +46,7 @@ JTextArea messageCnt = new JTextArea(message); JOptionPane.showMessageDialog(null, messageCnt, - "jEdit installer error...", JOptionPane.ERROR_MESSAGE); + "jEdit installer error...", JOptionPane.ERROR_MESSAGE); } else { @@ -54,18 +54,18 @@ } System.exit(1); } - + public static void main(String[] args) { boolean isGUI = args.length == 0; - + String javaVersion = System.getProperty("java.version"); - if(javaVersion.compareTo("1.7") < 0) + if(javaVersion.compareTo("1.8") < 0) { errorAndExit(isGUI, "You are running Java version " + javaVersion + " from "+System.getProperty("java.vendor")+".\n" - +"This installer requires Java 1.7 or later."); + +"This installer requires Java 1.8 or later."); } if(isRunningFromExclam()) Modified: jEdit/trunk/org/gjt/sp/jedit/OperatingSystem.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/OperatingSystem.java 2017-01-15 18:53:27 UTC (rev 24591) +++ jEdit/trunk/org/gjt/sp/jedit/OperatingSystem.java 2017-01-20 02:34:44 UTC (rev 24592) @@ -51,7 +51,7 @@ int screenX = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(); int screenY = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight(); int x, y, w, h; - + if (isMacOS()) { x = 0; @@ -73,7 +73,7 @@ w = screenX; h = screenY; } - + return new Rectangle(x,y,w,h); } //}}} @@ -100,7 +100,7 @@ intersects.add(gc); } } - + GraphicsConfiguration choice = null; if (!intersects.isEmpty()) { @@ -122,14 +122,14 @@ } else choice = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration(); - + // Make adjustments for some OS's int screenX = choice.getBounds().x; int screenY = choice.getBounds().y; int screenW = choice.getBounds().width; int screenH = choice.getBounds().height; int x, y, w, h; - + if (isMacOS()) { x = screenX; @@ -144,7 +144,7 @@ w = screenW; h = screenH; } - + // Yay, we're finally there return new Rectangle(x,y,w,h); } //}}} @@ -266,7 +266,7 @@ //{{{ hasJava17() method /** * @deprecated - there is no point in checking for this - * since we require Java 1.7. + * since we require Java 1.8. * Returns if Java 2 version 1.7 is in use. * @since jEdit 5.0pre1 */ @@ -276,7 +276,7 @@ return true; } //}}} - + //{{{ isCaseInsensitiveFS() method /** * @since jEdit 4.3pre2 @@ -285,7 +285,7 @@ { return isWindows() || isMacOS(); } //}}} - + //{{{ Private members private static final int UNIX = 0x31337; private static final int WINDOWS_9x = 0x640; Modified: jEdit/trunk/org/gjt/sp/jedit/jEdit.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jEdit.java 2017-01-15 18:53:27 UTC (rev 24591) +++ jEdit/trunk/org/gjt/sp/jedit/jEdit.java 2017-01-20 02:34:44 UTC (rev 24592) @@ -118,13 +118,13 @@ public static void main(String[] args) { StringList slargs = new StringList(args); - //{{{ Check for Java 1.7 or later + //{{{ Check for Java 1.8 or later String javaVersion = System.getProperty("java.version"); - if(javaVersion.compareTo("1.7") < 0) + if(javaVersion.compareTo("1.8") < 0) { System.err.println("You are running Java version " + javaVersion + '.'); - System.err.println("jEdit requires Java 1.7 or later."); + System.err.println("jEdit requires Java 1.8 or later."); System.exit(1); } //}}} @@ -1135,9 +1135,9 @@ { if (name == null) { - return null; + return null; } - + EditPlugin[] plugins = getPlugins(); EditPlugin plugin = null; for (EditPlugin ep : plugins) @@ -1148,9 +1148,9 @@ break; } } - if (!loadIfNecessary) + if (!loadIfNecessary) { - return plugin; + return plugin; } if (plugin instanceof EditPlugin.Deferred) { @@ -1507,7 +1507,7 @@ //{{{ getAllModes() method /** - * Returns an array of all installed edit modes. The modes in this array + * Returns an array of all installed edit modes. The modes in this array * will be sorted by mode name. */ public static Mode[] getAllModes() @@ -3276,8 +3276,8 @@ // values() collection also removes it from bufferHash if(buffer == b) iterator.remove(); - } - + } + String path = buffer.getSymlinkPath(); if((VFSManager.getVFSForPath(path).getCapabilities() & VFS.CASE_INSENSITIVE_CAP) != 0) @@ -3918,30 +3918,30 @@ // been loaded yet. if (EventQueue.isDispatchThread()) { - try + try { UIManager.setLookAndFeel(sLf); } - catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) + catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { // ignored, there really isn't anything to do and this may be // bogus, the lnf may be from the Look And Feel plugin } } - else + else { try { EventQueue.invokeAndWait( new Runnable() { - public void run() + public void run() { try { UIManager.setLookAndFeel(sLf); } - catch (ClassNotFoundException | IllegalAccessException | InstantiationException | UnsupportedLookAndFeelException e) + catch (ClassNotFoundException | IllegalAccessException | InstantiationException | UnsupportedLookAndFeelException e) { // same as above, there really isn't anything to do and this may be // bogus, the lnf may be from the Look And Feel plugin @@ -3950,9 +3950,9 @@ } ); } - catch (InterruptedException | InvocationTargetException e) + catch (InterruptedException | InvocationTargetException e) { - // don't worry about this one either + // don't worry about this one either } } @@ -4013,7 +4013,7 @@ defaults.remove("SplitPane.border"); defaults.remove("SplitPaneDivider.border"); - + defaults.put("Tree.rowHeight", 0); JFrame.setDefaultLookAndFeelDecorated( Modified: jEdit/trunk/org/gjt/sp/jedit/print/BufferPrintable.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/print/BufferPrintable.java 2017-01-15 18:53:27 UTC (rev 24591) +++ jEdit/trunk/org/gjt/sp/jedit/print/BufferPrintable.java 2017-01-20 02:34:44 UTC (rev 24592) @@ -44,7 +44,7 @@ * @version $Id$ * @deprecated * Replaced by BufferPrinter1_7. All the workarounds for java 1.3 and 1.4 don't - * matter any more since jEdit requires java 1.7 at minimum. + * matter any more since jEdit requires java 1.8 at minimum. * Leaving this in place rather than removing it since it might be needed by the * stand-alone text area. */ @@ -291,12 +291,12 @@ if (!jEdit.getBooleanProperty("print.folds",true) && !view.getTextArea().getDisplayManager().isLineVisible(currentPhysicalLine)) { - + Log.log(Log.DEBUG,this,"Skipping invisible line"); currentPhysicalLine++; continue; } - + lineList.clear(); tokenHandler.init(styles,frc,e,lineList, Modified: jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_3.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_3.java 2017-01-15 18:53:27 UTC (rev 24591) +++ jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_3.java 2017-01-20 02:34:44 UTC (rev 24592) @@ -33,7 +33,7 @@ /** * @deprecated * Replaced by BufferPrinter1_7. All the workarounds for java 1.3 and 1.4 don't - * matter any more since jEdit requires java 1.7 at minimum. + * matter any more since jEdit requires java 1.8 at minimum. */ public class BufferPrinter1_3 { Modified: jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_4.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_4.java 2017-01-15 18:53:27 UTC (rev 24591) +++ jEdit/trunk/org/gjt/sp/jedit/print/BufferPrinter1_4.java 2017-01-20 02:34:44 UTC (rev 24592) @@ -38,7 +38,7 @@ /** * @deprecated * Replaced by BufferPrinter1_7. All the workarounds for java 1.3 and 1.4 don't - * matter any more since jEdit requires java 1.7 at minimum. + * matter any more since jEdit requires java 1.8 at minimum. */ public class BufferPrinter1_4 { Modified: jEdit/trunk/package-files/linux/deb/Packages =================================================================== --- jEdit/trunk/package-files/linux/deb/Packages 2017-01-15 18:53:27 UTC (rev 24591) +++ jEdit/trunk/package-files/linux/deb/Packages 2017-01-20 02:34:44 UTC (rev 24592) @@ -3,8 +3,8 @@ Architecture: all Maintainer: Contributors <jed...@li...> Installed-Size: @deb.installed.size@ -Recommends: default-jre | openjdk-6-jre -Suggests: default-jdk | openjdk-6-jdk, exuberant-ctags, cscope, global, ant +Recommends: default-jre | openjdk-8-jre +Suggests: default-jdk | openjdk-8-jdk, exuberant-ctags, cscope, global, ant Conflicts: jedit-cvs Replaces: jedit-cvs Filename: @deb.repository.file@ @@ -22,9 +22,9 @@ (such as vertical paste) of Ultraedit, to bring you an open-source plugin-based programmer's editor of professional quality. . - It is possible to define complex macros in BeanShell, JavaScript, - Jython, or other languages that fit into the BSF. jEdit offers a powerful - and user-friendly keyboard mapping system (including 2-keystroke shortcuts), + It is possible to define complex macros in BeanShell, JavaScript, + Jython, or other languages that fit into the BSF. jEdit offers a powerful + and user-friendly keyboard mapping system (including 2-keystroke shortcuts), making it possible to give jEdit a very Emacs-like feel, if you so desire. . Its functionality is easily extended by the use of 'plugins' which can be Modified: jEdit/trunk/package-files/linux/jedit.1 =================================================================== --- jEdit/trunk/package-files/linux/jedit.1 2017-01-15 18:53:27 UTC (rev 24591) +++ jEdit/trunk/package-files/linux/jedit.1 2017-01-20 02:34:44 UTC (rev 24592) @@ -26,7 +26,7 @@ in Java. With plugins, you can create a very powerful development environment for HTML, XML, C/C++, Python, Perl, Ruby, Lisp, Scheme, and many others. -\fBjEdit\fP Requires A Java Runtime Environment Version 1.7 or later. +\fBjEdit\fP Requires A Java Runtime Environment Version 1.8 or later. \fBjEdit\fP is released under the GNU General Public License, which can be found in the online help. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vam...@us...> - 2017-01-20 09:57:16
|
Revision: 24593 http://sourceforge.net/p/jedit/svn/24593 Author: vampire0 Date: 2017-01-20 09:57:13 +0000 (Fri, 20 Jan 2017) Log Message: ----------- increase version to 5.4.0 Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/doc/FAQ/faq.xml jEdit/trunk/doc/users-guide/users-guide.xml jEdit/trunk/doc/welcome.html jEdit/trunk/doc/whatsnew/news.xml jEdit/trunk/org/gjt/sp/jedit/jEdit.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2017-01-20 02:34:44 UTC (rev 24592) +++ jEdit/trunk/doc/CHANGES.txt 2017-01-20 09:57:13 UTC (rev 24593) @@ -1,12 +1,12 @@ -jEdit 5.3 version history - (changes since jEdit 5.2.0) +jEdit 5.4 version history + (changes since jEdit 5.3.0) :encoding=UTF-8: -{{{ Version 5.3.1 +{{{ Version 5.4.0 Thanks to Björn "Vampire" Kautler, Eric Le Lay, Jesse Pavel, Wayne Zhang, Makarius, A Vontobel, Marc Häfner, Jordan Miner, Jack J. Woehr, Alan Ezust, -Adam S, Wim West, and Dale Anson for contributing to this release. +Adam S, Wim West and Dale Anson for contributing to this release. {{{ Bug Fixes @@ -17,7 +17,7 @@ (Patch #580 - Marc Häfner) - Fix bug #3659 - Macro Keywords_to_Upper_Case fails to find class - (Patch #582 - Marc Häfner) + (Patch #582 - Marc Häfner) - Fix bug #3949 - Macro Display_Shortcuts show no/wrong results (Patch #581 - Marc Häfner) @@ -70,17 +70,17 @@ - Fix bug #3773, InvocationTargetException with negative printing tab width. (Dale Anson) - -- Fix bug # 2844, printing range bug. (Dale Anson) +- Fix bug # 2844, printing range bug. (Dale Anson) + - Delete a user mode from the catalog even if the mode file is missing (Eric Le Lay) - Plugin Manager: fix missing newline between released and description for plugins without dependencies. Add extra newline for clarity. (Eric Le Lay) - -- Fix bug # 3998, Next Char macro doesn't work. (Dale Anson) +- Fix bug # 3998, Next Char macro doesn't work. (Dale Anson) + }}} {{{ UI Improvements @@ -95,16 +95,17 @@ - Refactor editing option pane into several tabs, allow user editing of modes lists, similar to editing the encoding options lists. This also fixes feature request #515. (Dale Anson) - + - Updated NumericTextField to allow decimal numbers and only allow negative sign - at the start of a number. (Dale Anson) + at the start of a number. (Dale Anson) }}} {{{ Miscellaneous -- Updated printing system with jEdit specific printer dialog, accurate page - range printing, current page printing, printing of selected text only, ability - to show page breaks in the text area. (Dale Anson) +- Updated printing system with jEdit specific printer dialog, accurate page + range printing, current page printing, printing of selected text only, ability + to show page breaks in the text area. (Dale Anson) + }}} {{{ API Changes @@ -127,11 +128,11 @@ - Drawj2d edit mode (Patch #573 - A. Vontobel) -- Rust edit mode raw string fix (Patch #575 - Jordan Miner) +- Rust edit mode raw string fix (Patch #575 - Jordan Miner) - Mode for Mavscript 2.0 (Patch #574 - A. Vontobel) -- New mode for swift (Patch #587 - Wayne Zhang) +- New mode for swift (Patch #587 - Wayne Zhang) - New mode for Java 9 module-info.java files (Dale Anson) @@ -141,166 +142,6 @@ }}} -{{{ Version 5.3.0 - -Thanks to Björn "Vampire" Kautler, Alan Ezust, Makarius, Jakub Holý, -Mark Corbin, Matt Galligan, Kevin Hunter Kesling, Darien Brown, -Matthieu Casanova, Sergey Mashkov, Dale Anson, Kevin Leblanc, -Marcelo Vanzin, Jordan Miner, yaraba, Marc M. Adkins, Scott McPeak, -and Eric Le Lay for contributing to this release. - -{{{ Bug Fixes - -- EnhancedDialog NPE fix for when there is no close shortcut assigned - (Patch # 588 - Scott McPeak) - -- JEditBuffer.isFoldEnd() was unable to detect the fold end when it was the - last line (#3917 - Matthieu Casanova) - -- More accurate wrap margin calculation (Patch#555 - Makarius) - -- Fix AWT thread-safety issue in VFSManager.error(). (Marcelo Vanzin) - -- Order of unsorted buffers now preserved in View.getBuffers() - (Patch # 548 - Kevin Leblanc) - -- Support for negative line spacing (Patch #535 - Makarius) - -- Fix bug #3671: autodetect text file encoding in HelpViewer - (patch #540 - Eric Le Lay) - -- Fix bug #3881, non-capturing lookahead in regex search didn't work. - (Dale Anson) - -- Fix bug #3184: File browser completion dives into wrong directory - (Eric Le Lay) - -- Fix bug #2833 Plugin jars dependencies not removed (Eric Le Lay) - -- Fix bug #3911, text area was scrolling to the left when saving. (Dale Anson) - -- Fix bug #3599 Key typing in Install panel. Search Field gets focus on show - and when one types '/' or a letter in the list. (Eric Le Lay) - -- Fix bug #2877 "Hide installed" checkbox in Install panel. Don't re-install - unloaded plugins (Eric Le Lay) - -}}} -{{{ UI Improvements - -- Handling of NUMPAD keys cleanup (Patch #567 - Makarius) - -- Scalable GUI for tip-of-the-day (Makarius) - -- Scalable ColorWell icon according to UI font (Makarius) - -- Proper L&F font for syntax style table (Patch #558 - Makarius) - -- Proper row height default for JTable, JTree with 4K displays - (Patches #557, #559, #562, #563 - Makarius) - -- More font size choices for 4K and higher-res displays (Patch# 549 - Makarius) - -- EOL marker character is a localizable property (view.eolMarkerChar), - and an arrow (↩) instead of period (.) (#3902 - Alan Ezust) - -- Proper button margins for Nimbus L&F (Patch #538 - Makarius) - -- CompletionPopup should accept TAB for completion selection - (Patch # 525 - Jakub Holý) - -- Separated sorting of Buffer Sets and Buffer Switcher (Dale Anson) - -- Font properties were not applied after change in Appearances settings - (Bug #3919 - Dale Anson) - -- Allow columns to be rearranged in FSB (Feature request 489, 40, and old - tracker 1442812 - Dale Anson) - -- Align gutter numbers with lines when using additional vertical line spacing. - (Bug #3717 - Dale Anson) - -- Added option to hide open files from recent file list (FR #481 - Dale Anson) - -- UI adjustment to allow adding new mode files by point and click. - (FR # 471 - Dale Anson) - -- No error message when PluginManager doesn't find a file to be removed and - show files to be removed in alphabetical order (end of Bug #3530 - Eric - Le Lay) - -- Plugin Manager Manage Panel sortable on all columns and all directions - (Eric Le Lay) - -- Replaced all Toolkit.beep() calls with - javax.swing.UIManager.getLookAndFeel().provideErrorFeedback(null);, which - allows look and feels to provide their own implementation of error signals. - (Dale Anson) - -}}} -{{{ Miscellaneous - -- New Korean translation file (Patch #551 - yaraba) - -- Resize performance improvement (Patch #547 - Sergey Mashkov) - -- Properties are sorted when saved (Feature Request #342, Patch #536 - Makarius) - -- Configure the JUnit task to fork off the Ant process, with manually adding the - needed Ant libraries. This ensures that there are no unwanted classpath - entries during test execution (Plugin Bug #1732 - Björn "Vampire" Kautler) - -}}} -{{{ API Changes - -- View now sends ViewUpdate message on EditBus when full screen mode is toggled. - This is useful to plugins that may need to adjust their appearance when the - screen mode is toggled. (Dale Anson) - -- close-all sends BufferClosing events on EditBus for each buffer closed. - This is useful to plugins that record closed files. (patch #550, Eric Le Lay) - -- org.gjt.sp.util.StandardUtilities#compareStrings accepts null Strings - (Eric Le Lay) - -}}} -{{{ Editing - -- Updates to Clojure mode (Marc M. Adkins, patch #565) - -- More conventional color scheme for diffs and changesets - (Patch #560 - Makarius) - -- Updates to Scala Mode (Patch #554 - Makarius) - -- New mode for rust (Patches #553, #556 - Jordan Miner) - -- New mode for Kotlin syntax (Patch #552 - Sergey Mashkov) - -- Updates to cfscript mode (Patch #531 - Darien Brown) - -- New mode for ANS Forth 1994 (Patch #530 - Mark Corbin) - -- New mode for mustache templates (Patch #532 - Kevin Hunter Kesling) - -- New mode for Antlr 4 (Dale Anson) - -- Updates to properties mode (Bug #2640 - Dale Anson) - -- Updated Go mode (Feature request 496, ahlearn). This also fixes bug #3921. - -- Allow editing, but not saving, of read only files. - (Feature request #422 - Dale Anson) - -- Added Markdown mode from Peter Lynch (FR 495 - Dale Anson) - -- Better mode selection for files that match multiple modes, also fixes/applies - patch #571. (Dale Anson) - -}}} - -}}} - jEdit buffer local properties: :maxLineLen=80:wrap=hard:autoIndent=simple:noTabs=true:indentSize=2:tabSize=2: :folding=explicit:collapseFolds=2: Modified: jEdit/trunk/doc/FAQ/faq.xml =================================================================== --- jEdit/trunk/doc/FAQ/faq.xml 2017-01-20 02:34:44 UTC (rev 24592) +++ jEdit/trunk/doc/FAQ/faq.xml 2017-01-20 09:57:13 UTC (rev 24593) @@ -86,9 +86,9 @@ <revision> <revnumber>1.4</revnumber> - <date>2006,2015</date> + <date>2006,2017</date> <author> <firstname>Alan </firstname> <surname>Ezust </surname></author> - <revremark>Updates for jEdit 4.3-5.3 releases</revremark> + <revremark>Updates for jEdit 4.3-5.4 releases</revremark> </revision> </revhistory> Modified: jEdit/trunk/doc/users-guide/users-guide.xml =================================================================== --- jEdit/trunk/doc/users-guide/users-guide.xml 2017-01-20 02:34:44 UTC (rev 24592) +++ jEdit/trunk/doc/users-guide/users-guide.xml 2017-01-20 09:57:13 UTC (rev 24593) @@ -5,7 +5,7 @@ <book id="users-guide" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xi="http://www.w3.org/2001/XInclude" xsi:noNamespaceSchemaLocation='http://www.docbook.org/xsd/4.4/docbook.xsd'> <bookinfo> - <title>jEdit 5.3 User's Guide</title> + <title>jEdit 5.4 User's Guide</title> <legalnotice> <title>Legal Notice</title> @@ -39,8 +39,8 @@ </revision> <revision> - <revnumber>4.3 - 5.3</revnumber> - <date>2005-2015</date> + <revnumber>4.3 - 5.4</revnumber> + <date>2005-2017</date> <author><firstname>Alan</firstname><surname>Ezust</surname></author> <revremark> Maintainer. </revremark> </revision> Modified: jEdit/trunk/doc/welcome.html =================================================================== --- jEdit/trunk/doc/welcome.html 2017-01-20 02:34:44 UTC (rev 24592) +++ jEdit/trunk/doc/welcome.html 2017-01-20 09:57:13 UTC (rev 24593) @@ -4,7 +4,7 @@ <center> <img src="jedit.png" width="128" height="128"> -<h2>Welcome to jEdit 5.3</h2> +<h2>Welcome to jEdit 5.4</h2> </center> <p> Useful menu commands: </p> <ul> Modified: jEdit/trunk/doc/whatsnew/news.xml =================================================================== --- jEdit/trunk/doc/whatsnew/news.xml 2017-01-20 02:34:44 UTC (rev 24592) +++ jEdit/trunk/doc/whatsnew/news.xml 2017-01-20 09:57:13 UTC (rev 24593) @@ -1,24 +1,23 @@ <?xml version="1.0" encoding="UTF-8"?> <article id="whatsnewarticle" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns:xi="http://www.w3.org/2001/XInclude" xsi:noNamespaceSchemaLocation='http://www.docbook.org/xsd/4.4/docbook.xsd'> - <title> What's new in jEdit 5.3 </title> + <title> What's new in jEdit 5.4 </title> <articleinfo> - <date> 2015 </date> + <date> 2017 </date> </articleinfo> <para> This is a time-based release, scheduled to come out about 1 year after - jEdit 5.2, and is a collection of enhancements, bug fixes and patches + jEdit 5.3, and is a collection of enhancements, bug fixes and patches submitted by the community. Detailed changes can be found in the <ulink url="../CHANGES.txt">Detailed Change Log</ulink>. </para> <para> With continued support from the community, we will keep releasing a newer version each year that can accurately bring together the fruits of everyone's labor. - Thank you to each and every one of the contributors who helped make 5.3 the best + Thank you to each and every one of the contributors who helped make 5.4 the best version of jEdit ever. </para> Modified: jEdit/trunk/org/gjt/sp/jedit/jEdit.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jEdit.java 2017-01-20 02:34:44 UTC (rev 24592) +++ jEdit/trunk/org/gjt/sp/jedit/jEdit.java 2017-01-20 09:57:13 UTC (rev 24593) @@ -106,7 +106,7 @@ public static String getBuild() { // (major).(minor).(<99 = preX, 99 = "final").(bug fix) - return "05.03.99.01"; + return "05.04.99.00"; } //}}} //{{{ main() method This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vam...@us...> - 2017-01-20 14:40:01
|
Revision: 24594 http://sourceforge.net/p/jedit/svn/24594 Author: vampire0 Date: 2017-01-20 14:39:59 +0000 (Fri, 20 Jan 2017) Log Message: ----------- The plugin manager now uses a different URL scheme where the mirror is a URL parameter and not part of the hostname anymore and follows URL redirection properly. This way a file can always be downloaded as we get redirected to a mirror that has the requested file available. Now dead mirrors do not cause the download to fail anymore due to unknown hostname and files that are only available on few mirrors (seldom downloaded files are only available on one mirror sometimes) also work properly. The selected mirror is just the preferred one that is used if the file is available there, just as the label always suggested anyway. Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/pluginmgr/PluginList.java jEdit/trunk/org/gjt/sp/jedit/pluginmgr/PluginManagerProgress.java jEdit/trunk/org/gjt/sp/jedit/pluginmgr/Roster.java jEdit/trunk/org/gjt/sp/util/IOUtilities.java jEdit/trunk/org/jedit/localization/jedit_de.props Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2017-01-20 09:57:13 UTC (rev 24593) +++ jEdit/trunk/doc/CHANGES.txt 2017-01-20 14:39:59 UTC (rev 24594) @@ -106,6 +106,16 @@ range printing, current page printing, printing of selected text only, ability to show page breaks in the text area. (Dale Anson) +- The plugin manager now uses a different URL scheme where the mirror is a URL + parameter and not part of the hostname anymore and follows URL redirection + properly. This way a file can always be downloaded as we get redirected to a + mirror that has the requested file available. Now dead mirrors do not cause + the download to fail anymore due to unknown hostname and files that are only + available on few mirrors (seldom downloaded files are only available on one + mirror sometimes) also work properly. The selected mirror is just the + preferred one that is used if the file is available there, just as the label + always suggested anyway. (Björn "Vampire" Kautler) + }}} {{{ API Changes Modified: jEdit/trunk/org/gjt/sp/jedit/pluginmgr/PluginList.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/pluginmgr/PluginList.java 2017-01-20 09:57:13 UTC (rev 24593) +++ jEdit/trunk/org/gjt/sp/jedit/pluginmgr/PluginList.java 2017-01-20 14:39:59 UTC (rev 24594) @@ -78,6 +78,7 @@ return; gzipURL = jEdit.getProperty("plugin-manager.export-url"); gzipURL += "?mirror=" + mirror; + gzipURL += "&new_url_scheme"; String path = null; if (jEdit.getSettingsDirectory() == null) { @@ -343,7 +344,7 @@ String versionKey = "plugin." + cacheEntry.pluginClass + ".version"; installedVersion = cacheEntry.cachedProperties.getProperty(versionKey); Log.log(Log.DEBUG, PluginList.class, "found installed but not loaded "+ jar + " version=" + installedVersion); - installedPath = path; + installedPath = path; return installedVersion; } } @@ -470,13 +471,13 @@ for (Dependency dep : deps) dep.satisfy(roster, installDirectory, downloadSource); } - - public String depsToString() + + public String depsToString() { StringBuilder sb = new StringBuilder(); - for (Dependency dep : deps) + for (Dependency dep : deps) { - if ("plugin".equals(dep.what) && dep.pluginName != null) + if ("plugin".equals(dep.what) && dep.pluginName != null) { sb.append(dep.pluginName).append('\n'); } Modified: jEdit/trunk/org/gjt/sp/jedit/pluginmgr/PluginManagerProgress.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/pluginmgr/PluginManagerProgress.java 2017-01-20 09:57:13 UTC (rev 24593) +++ jEdit/trunk/org/gjt/sp/jedit/pluginmgr/PluginManagerProgress.java 2017-01-20 14:39:59 UTC (rev 24594) @@ -46,7 +46,6 @@ progress = new JProgressBar(); progress.setStringPainted(true); - progress.setString(jEdit.getProperty("plugin-manager.progress")); count = roster.getOperationCount(); int maximum = 0; @@ -97,7 +96,7 @@ * @param value the new max value (it will be ignored) * @since jEdit 4.3pre3 */ - public void setMaximum(long value) + public void setMaximum(long value) { } //}}} @@ -110,7 +109,7 @@ */ public void setStatus(String status) { - progress.setString(status); + SwingUtilities.invokeLater(() -> progress.setString(status)); } //}}} //{{{ done() method Modified: jEdit/trunk/org/gjt/sp/jedit/pluginmgr/Roster.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/pluginmgr/Roster.java 2017-01-20 09:57:13 UTC (rev 24593) +++ jEdit/trunk/org/gjt/sp/jedit/pluginmgr/Roster.java 2017-01-20 14:39:59 UTC (rev 24594) @@ -27,6 +27,8 @@ import java.awt.Component; import java.io.*; import java.net.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.zip.*; import java.util.*; import org.gjt.sp.jedit.*; @@ -42,6 +44,8 @@ */ class Roster { + private static final Pattern HOST_REGEX = Pattern.compile("(?<=/)\\w++(?=\\.dl\\.sourceforge\\.net)"); + //{{{ Roster constructor Roster() { @@ -295,9 +299,7 @@ //{{{ runInWorkThread() method public void runInWorkThread(PluginManagerProgress progress) { - String fileName = MiscUtilities.getFileName(url); - - path = download(progress,fileName,url); + path = download(progress,url); } //}}} //{{{ runInAWTThread() method @@ -430,8 +432,7 @@ private String path; //{{{ download() method - private String download(PluginManagerProgress progress, - String fileName, String url) + private String download(PluginManagerProgress progress, String url) { try { @@ -439,23 +440,37 @@ if (host == null || host.equals(MirrorList.Mirror.NONE)) host = "default"; + // follow HTTP redirects + boolean finalUrlFound = false; + String finalUrl = url; + URLConnection conn = null; + while (!finalUrlFound) + { + conn = new URL(finalUrl).openConnection(); + HttpURLConnection httpConn = (HttpURLConnection) conn; + httpConn.setInstanceFollowRedirects(false); + httpConn.connect(); + int responseCode = httpConn.getResponseCode(); + String locationHeader = httpConn.getHeaderField("Location"); + if ((responseCode >= 300) && (responseCode < 400) && (locationHeader != null)) + finalUrl = locationHeader; + else + finalUrlFound = true; + } + + String fileName = MiscUtilities.getFileName(finalUrl); String path = MiscUtilities.constructPath(getDownloadDir(),fileName); - URLConnection conn = new URL(url).openConnection(); - progress.setStatus(jEdit.getProperty("plugin-manager.progress",new String[] {fileName, host})); - InputStream in = null; - FileOutputStream out = null; - try + Matcher hostMatcher = HOST_REGEX.matcher(finalUrl); + if (hostMatcher.find()) + host = hostMatcher.group(); + String progressMessage = jEdit.getProperty("plugin-manager.progress", new String[]{fileName, host}); + progress.setStatus(progressMessage); + try (InputStream in = conn.getInputStream(); + FileOutputStream out = new FileOutputStream(path)) { - in = conn.getInputStream(); - out = new FileOutputStream(path); - if(!IOUtilities.copyStream(progress,in,out,true)) + if(!IOUtilities.copyStream(progress,progressMessage,in,out,true)) return null; } - finally - { - IOUtilities.closeQuietly((Closeable)in); - IOUtilities.closeQuietly((Closeable)out); - } return path; } Modified: jEdit/trunk/org/gjt/sp/util/IOUtilities.java =================================================================== --- jEdit/trunk/org/gjt/sp/util/IOUtilities.java 2017-01-20 09:57:13 UTC (rev 24593) +++ jEdit/trunk/org/gjt/sp/util/IOUtilities.java 2017-01-20 14:39:59 UTC (rev 24594) @@ -87,6 +87,7 @@ * * @param bufferSize the size of the buffer * @param progress the progress observer it could be null + * @param progressPrefix the progress prefix, it could be null * @param in the input stream * @param out the output stream * @param canStop if true, the copy can be stopped by interrupting the thread @@ -94,7 +95,8 @@ * @throws IOException IOException If an I/O error occurs */ public static boolean copyStream(int bufferSize, @Nullable ProgressObserver progress, - InputStream in, OutputStream out, boolean canStop) + String progressPrefix, InputStream in, OutputStream out, + boolean canStop) throws IOException { byte[] buffer = new byte[bufferSize]; @@ -106,7 +108,12 @@ copied += n; if(progress != null) { - progress.setStatus(StandardUtilities.formatFileSize(copied)); + String progressMessage = StandardUtilities.formatFileSize(copied); + if (progressPrefix != null) + { + progressMessage = String.format("%s (%s)", progressPrefix, progressMessage); + } + progress.setStatus(progressMessage); progress.setValue(copied); } if(canStop && Thread.interrupted()) @@ -116,6 +123,24 @@ } /** + * Copy an input stream to an output stream. + * + * @param bufferSize the size of the buffer + * @param progress the progress observer it could be null + * @param in the input stream + * @param out the output stream + * @param canStop if true, the copy can be stopped by interrupting the thread + * @return <code>true</code> if the copy was done, <code>false</code> if it was interrupted + * @throws IOException IOException If an I/O error occurs + */ + public static boolean copyStream(int bufferSize, @Nullable ProgressObserver progress, + InputStream in, OutputStream out, boolean canStop) + throws IOException + { + return copyStream(bufferSize, progress, null, in, out, canStop); + } + + /** * Copy an input stream to an output stream with a buffer of 4096 bytes. * * @param progress the progress observer it could be null @@ -129,7 +154,25 @@ InputStream in, OutputStream out, boolean canStop) throws IOException { - return copyStream(4096,progress, in, out, canStop); + return copyStream(4096, progress, null, in, out, canStop); + } + + /** + * Copy an input stream to an output stream with a buffer of 4096 bytes. + * + * @param progress the progress observer it could be null + * @param progressPrefix the progress prefix, it could be null + * @param in the input stream + * @param out the output stream + * @param canStop if true, the copy can be stopped by interrupting the thread + * @return <code>true</code> if the copy was done, <code>false</code> if it was interrupted + * @throws IOException IOException If an I/O error occurs + */ + public static boolean copyStream(@Nullable ProgressObserver progress, String progressPrefix, + InputStream in, OutputStream out, boolean canStop) + throws IOException + { + return copyStream(4096, progress, progressPrefix, in, out, canStop); } //}}} //{{{ fileLength() method Modified: jEdit/trunk/org/jedit/localization/jedit_de.props =================================================================== --- jEdit/trunk/org/jedit/localization/jedit_de.props 2017-01-20 09:57:13 UTC (rev 24593) +++ jEdit/trunk/org/jedit/localization/jedit_de.props 2017-01-20 14:39:59 UTC (rev 24594) @@ -877,7 +877,7 @@ search.keep=Dialog nicht schließen search.keep.mnemonic=b search.word=Ganzes Wort -search.word.bar=Ganzes Wort +search.word.bar=Ganzes Wort search.word.mnemonic=t search.case=Groß-/Klein ignorieren search.case.mnemonic=i @@ -1672,7 +1672,7 @@ options.textarea.stripTrailingEOL=Letztes Zeilenende verstecken (falls vorhanden) options.textarea.completeFromAllBuffers=Wort-Vervollständigung von allen offenen Dateien (Standard ist \ die Suche auf alle gerade sichtbaren Dateien zu begrenzen) -options.textarea.insertCompletionWithDigit=Wort vervollständigen durch Tippen der korrespondierenden Ziffer (ansonsten wird die Ziffer als Teil des Wortes angesehen). +options.textarea.insertCompletionWithDigit=Wort vervollständigen durch Tippen der korrespondierenden Ziffer (ansonsten wird die Ziffer als Teil des Wortes angesehen). options.textarea.lineSpacing.label=Zusätzlicher vertikaler Zeilenabstand (in Pixel): #}}} @@ -2024,7 +2024,7 @@ plugin-manager.status.error=Fehler plugin-manager.list-download-connect=Verbinde mit plugins.jedit.org -plugin-manager.list-download=Plugin-Liste wird heruntergeladen von Plugins.jedit.org +plugin-manager.list-download=Plugin-Liste wird heruntergeladen von plugins.jedit.org plugin-manager.list-download.mirror-autoselect-error.title=Fehler bei Auswahl des Update-Servers plugin-manager.list-download.mirror-autoselect-error.message=Fehler bei automatischer Auswahl des Update-Servers:\n\ {0}\n\ @@ -2076,7 +2076,7 @@ update-plugins.title=Aktualisieren -plugin-manager.progress=Gewählte Plugins werden heruntergeladen von Plugins.jedit.org... +plugin-manager.progress=Lade {0} von Mirror {1} herunter plugin-manager.progress.title=Plugins werden installiert plugin-manager.progress.stop=Stop #}}} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vam...@us...> - 2017-02-06 20:02:15
|
Revision: 24604 http://sourceforge.net/p/jedit/svn/24604 Author: vampire0 Date: 2017-02-06 20:02:13 +0000 (Mon, 06 Feb 2017) Log Message: ----------- Make the default-plugins download via Ivy work again Modified Paths: -------------- jEdit/trunk/build.xml jEdit/trunk/ivysettings.xml Modified: jEdit/trunk/build.xml =================================================================== --- jEdit/trunk/build.xml 2017-02-06 19:07:41 UTC (rev 24603) +++ jEdit/trunk/build.xml 2017-02-06 20:02:13 UTC (rev 24604) @@ -108,13 +108,40 @@ <target name="init-ivy" depends="init,download-ivy" unless="ivy.done"> + <script language="javascript"> + <![CDATA[ + var dbf = javax.xml.parsers.DocumentBuilderFactory.newInstance() + dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false) + var document = dbf.newDocumentBuilder().parse('http://plugins.jedit.org/export/mirror_list.php') + var xpath = javax.xml.xpath.XPathFactory.newInstance().newXPath() + var mirrors = xpath.evaluate('/MIRRORS/MIRROR/@ID', document, javax.xml.xpath.XPathConstants.NODESET) + var artifactPatterns = '' + for (i = 0; i < mirrors.getLength(); i++) { + artifactPatterns += '<artifact pattern="jar:http://' + + mirrors.item(i).getTextContent() + + '.dl.sourceforge.net/project/jedit-plugins/[artifact]/[revision]/[artifact]-[revision]-bin.zip!/[artifact].jar" />\n' + } + project.setUserProperty('jedit.plugins.artifact.patterns', artifactPatterns) + ]]> + </script> + + <copy todir="${build.dir}" + encoding="UTF-8" + overwrite="true"> + <fileset file="ivysettings.xml"/> + <filterset> + <filter token="jedit.plugins.artifact.patterns" + value="${jedit.plugins.artifact.patterns}"/> + </filterset> + </copy> + <property name="ivy.retrieve.pattern" value="${lib.dir}/[conf]/[artifact](-[classifier]).[ext]"/> <taskdef resource="org/apache/ivy/ant/antlib.xml" classpath="${ivy.jar.file}" loaderref="ivy.loader" uri="antlib:org.apache.ivy.ant"/> - <ivy:settings file="ivysettings.xml"/> + <ivy:settings file="${build.dir}/ivysettings.xml"/> </target> <target name="retrieve" Modified: jEdit/trunk/ivysettings.xml =================================================================== --- jEdit/trunk/ivysettings.xml 2017-02-06 19:07:41 UTC (rev 24603) +++ jEdit/trunk/ivysettings.xml 2017-02-06 20:02:13 UTC (rev 24604) @@ -30,7 +30,7 @@ <resolvers> <url name="jedit-plugins"> - <artifact pattern="jar:http://downloads.sourceforge.net/project/jedit-plugins/[artifact]/[revision]/[artifact]-[revision]-bin.zip!/[artifact].jar" /> + @jedit.plugins.artifact.patterns@ </url> </resolvers> <modules> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vam...@us...> - 2017-03-06 20:03:03
|
Revision: 24627 http://sourceforge.net/p/jedit/svn/24627 Author: vampire0 Date: 2017-03-06 20:03:01 +0000 (Mon, 06 Mar 2017) Log Message: ----------- Add NSSupportsAutomaticGraphicsSwitching to JarBundler so that jEdit does not drain the battery unnecessarily on OS X (feature request #529) Modified Paths: -------------- jEdit/trunk/com/ultramixer/jarbundler/AppBundleProperties.java jEdit/trunk/com/ultramixer/jarbundler/JarBundler.java jEdit/trunk/com/ultramixer/jarbundler/PropertyListWriter.java jEdit/trunk/doc/CHANGES.txt Modified: jEdit/trunk/com/ultramixer/jarbundler/AppBundleProperties.java =================================================================== --- jEdit/trunk/com/ultramixer/jarbundler/AppBundleProperties.java 2017-03-06 20:01:57 UTC (rev 24626) +++ jEdit/trunk/com/ultramixer/jarbundler/AppBundleProperties.java 2017-03-06 20:03:01 UTC (rev 24627) @@ -128,7 +128,9 @@ // HiRes capability, optional private boolean mNSHighResolutionCapable; + private boolean mNSSupportsAutomaticGraphicsSwitching = true; + //New since 08/05/2015 Tobias Bley / UltraMixer /** * LSEnvironment (Dictionary - OS X) defines environment variables to be set before launching this app. The names of the environment variables are the keys of the dictionary, with the values being the corresponding environment variable value. Both keys and values must be strings. @@ -324,6 +326,14 @@ return mNSHighResolutionCapable; } + public void setNSSupportsAutomaticGraphicsSwitching(boolean b) { + mNSSupportsAutomaticGraphicsSwitching = b; + } + + public boolean getNSSupportsAutomaticGraphicsSwitching() { + return mNSSupportsAutomaticGraphicsSwitching; + } + public void setNSPreferencesContentSize(String s) { mNSPreferencesContentSize = s; } Modified: jEdit/trunk/com/ultramixer/jarbundler/JarBundler.java =================================================================== --- jEdit/trunk/com/ultramixer/jarbundler/JarBundler.java 2017-03-06 20:01:57 UTC (rev 24626) +++ jEdit/trunk/com/ultramixer/jarbundler/JarBundler.java 2017-03-06 20:03:01 UTC (rev 24627) @@ -443,6 +443,13 @@ bundleProperties.setNSHighResolutionCapable(b); } + /** + * Setter for the "NSSupportsAutomaticGraphicsSwitching" attribute (optional) Default "true". + */ + public void setSupportsAutomaticGraphicsSwitching(boolean b) { + bundleProperties.setNSSupportsAutomaticGraphicsSwitching(b); + } + /** Adrien Quillet, v2.5.0 * Setter for the "NSPreferencesContentSize" attribute (optional). */ Modified: jEdit/trunk/com/ultramixer/jarbundler/PropertyListWriter.java =================================================================== --- jEdit/trunk/com/ultramixer/jarbundler/PropertyListWriter.java 2017-03-06 20:01:57 UTC (rev 24626) +++ jEdit/trunk/com/ultramixer/jarbundler/PropertyListWriter.java 2017-03-06 20:03:01 UTC (rev 24627) @@ -233,6 +233,10 @@ if ( bundleProperties.getNSHighResolutionCapable() != false ) writeKeyBooleanPair( "NSHighResolutionCapable", bundleProperties.getNSHighResolutionCapable(), dict ); + // automatic graphics switching capability, optional + if (bundleProperties.getNSSupportsAutomaticGraphicsSwitching()) + writeKeyBooleanPair( "NSSupportsAutomaticGraphicsSwitching", bundleProperties.getNSSupportsAutomaticGraphicsSwitching(), dict ); + // Content size, optional if ( bundleProperties.getNSPreferencesContentSize() != null ) writeKeyStringPair( "NSPreferencesContentSize", "{" + bundleProperties.getNSPreferencesContentSize() + "}", dict ); Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2017-03-06 20:01:57 UTC (rev 24626) +++ jEdit/trunk/doc/CHANGES.txt 2017-03-06 20:03:01 UTC (rev 24627) @@ -10,6 +10,10 @@ {{{ Bug Fixes +- Add NSSupportsAutomaticGraphicsSwitching to JarBundler so that jEdit does not + drain the battery unnecessarily on OS X. + (feature request #529 - Björn "Vampire" Kautler) + - Bug 3857 fixed, related to resolving symlinks of buffers and checking for updated buffers (Patch # 589 - Wim West) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |