mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2025-02-20 04:29:02 +00:00
better line wrapping
This commit is contained in:
parent
486180e423
commit
5a6c3841f9
@ -15,8 +15,11 @@ import com.bytezone.diskbrowser.utilities.Utility;
|
|||||||
public class ApplesoftBasicProgram extends BasicProgram implements ApplesoftConstants
|
public class ApplesoftBasicProgram extends BasicProgram implements ApplesoftConstants
|
||||||
// -----------------------------------------------------------------------------------//
|
// -----------------------------------------------------------------------------------//
|
||||||
{
|
{
|
||||||
static final String underline = "----------------------------------------------------"
|
private static final String underline =
|
||||||
+ "----------------------------------------------";
|
"----------------------------------------------------"
|
||||||
|
+ "----------------------------------------------";
|
||||||
|
private static Pattern dimPattern =
|
||||||
|
Pattern.compile ("[A-Z][A-Z0-9]*[$%]?\\([0-9,]*\\)[,:]?");
|
||||||
|
|
||||||
private final List<SourceLine> sourceLines = new ArrayList<> ();
|
private final List<SourceLine> sourceLines = new ArrayList<> ();
|
||||||
private final int endPtr;
|
private final int endPtr;
|
||||||
@ -40,6 +43,7 @@ public class ApplesoftBasicProgram extends BasicProgram implements ApplesoftCons
|
|||||||
String formatLeft;
|
String formatLeft;
|
||||||
String formatLineNumber;
|
String formatLineNumber;
|
||||||
String formatRight;
|
String formatRight;
|
||||||
|
String formatCall;
|
||||||
int maxDigits;
|
int maxDigits;
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
@ -87,6 +91,7 @@ public class ApplesoftBasicProgram extends BasicProgram implements ApplesoftCons
|
|||||||
formatLeft = longestVarName > 7 ? "%-" + longestVarName + "." + longestVarName + "s "
|
formatLeft = longestVarName > 7 ? "%-" + longestVarName + "." + longestVarName + "s "
|
||||||
: "%-7.7s ";
|
: "%-7.7s ";
|
||||||
formatRight = formatLeft.replace ("-", "");
|
formatRight = formatLeft.replace ("-", "");
|
||||||
|
formatCall = longestVarName > 7 ? "%-" + longestVarName + "s " : "%-7s ";
|
||||||
|
|
||||||
maxDigits = getMaxDigits ();
|
maxDigits = getMaxDigits ();
|
||||||
formatLineNumber = "%" + maxDigits + "d ";
|
formatLineNumber = "%" + maxDigits + "d ";
|
||||||
@ -349,13 +354,6 @@ public class ApplesoftBasicProgram extends BasicProgram implements ApplesoftCons
|
|||||||
fullText.append ("\n");
|
fullText.append ("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (basicPreferences.showAllXref)
|
|
||||||
// addXref (fullText);
|
|
||||||
//
|
|
||||||
// if (fullText.length () > 0)
|
|
||||||
// while (fullText.charAt (fullText.length () - 1) == '\n')
|
|
||||||
// fullText.deleteCharAt (fullText.length () - 1); // remove trailing newlines
|
|
||||||
|
|
||||||
return fullText;
|
return fullText;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -465,7 +463,13 @@ public class ApplesoftBasicProgram extends BasicProgram implements ApplesoftCons
|
|||||||
heading (fullText, formatLeft, heading);
|
heading (fullText, formatLeft, heading);
|
||||||
|
|
||||||
for (String symbol : map.keySet ()) // left-justify strings
|
for (String symbol : map.keySet ()) // left-justify strings
|
||||||
appendLineNumbers (fullText, String.format (formatLeft, symbol), map.get (symbol));
|
{
|
||||||
|
if (symbol.length () <= 7)
|
||||||
|
appendLineNumbers (fullText, String.format (formatLeft, symbol),
|
||||||
|
map.get (symbol));
|
||||||
|
else
|
||||||
|
appendLineNumbers (fullText, symbol + " ", map.get (symbol));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
@ -621,19 +625,29 @@ public class ApplesoftBasicProgram extends BasicProgram implements ApplesoftCons
|
|||||||
int firstSpace = 0;
|
int firstSpace = 0;
|
||||||
while (firstSpace < line.length () && line.charAt (firstSpace) != ' ')
|
while (firstSpace < line.length () && line.charAt (firstSpace) != ' ')
|
||||||
++firstSpace;
|
++firstSpace;
|
||||||
|
String indent = " ".substring (0, firstSpace + 1);
|
||||||
|
|
||||||
List<String> lines = new ArrayList<> ();
|
List<String> lines = new ArrayList<> ();
|
||||||
while (line.length () > wrapLength)
|
while (line.length () > wrapLength)
|
||||||
{
|
{
|
||||||
int max = Math.min (wrapLength, line.length () - 1);
|
int breakAt = wrapLength;
|
||||||
while (max > 0 && line.charAt (max) != breakChar)
|
while (breakAt > firstSpace && line.charAt (breakAt) != breakChar)
|
||||||
--max;
|
--breakAt;
|
||||||
if (max == 0)
|
|
||||||
|
if (breakAt <= firstSpace)
|
||||||
break;
|
break;
|
||||||
lines.add (line.substring (0, max + 1));
|
|
||||||
line = " ".substring (0, firstSpace + 1) + line.substring (max + 1);
|
lines.add (line.substring (0, breakAt + 1)); // keep breakChar at end
|
||||||
|
line = indent + line.substring (breakAt + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (lines.size () == 0) // no breaks
|
||||||
|
while (line.length () > wrapLength)
|
||||||
|
{
|
||||||
|
lines.add (line.substring (0, wrapLength));
|
||||||
|
line = indent + line.substring (wrapLength);
|
||||||
|
}
|
||||||
|
|
||||||
lines.add (line);
|
lines.add (line);
|
||||||
return lines;
|
return lines;
|
||||||
}
|
}
|
||||||
@ -644,8 +658,7 @@ public class ApplesoftBasicProgram extends BasicProgram implements ApplesoftCons
|
|||||||
{
|
{
|
||||||
List<String> lines = new ArrayList<> ();
|
List<String> lines = new ArrayList<> ();
|
||||||
|
|
||||||
Pattern p = Pattern.compile ("[A-Z][A-Z0-9]*[$%]?\\([0-9,]*\\)[,:]?");
|
Matcher m = dimPattern.matcher (line);
|
||||||
Matcher m = p.matcher (line);
|
|
||||||
|
|
||||||
while (m.find ())
|
while (m.find ())
|
||||||
lines.add (" " + m.group ());
|
lines.add (" " + m.group ());
|
||||||
|
@ -98,8 +98,16 @@ public class SubLine implements ApplesoftConstants
|
|||||||
if (inQuote && b != Utility.ASCII_QUOTE) // ignore strings
|
if (inQuote && b != Utility.ASCII_QUOTE) // ignore strings
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (Utility.isPossibleVariable (b)) // A-Z 0-9
|
if (Utility.isPossibleVariable (b)) // A-Z 0-9 $ %
|
||||||
|
{
|
||||||
var += (char) b;
|
var += (char) b;
|
||||||
|
if ((b == Utility.ASCII_DOLLAR || b == Utility.ASCII_PERCENT) // var name end
|
||||||
|
&& buffer[ptr] != Utility.ASCII_LEFT_BRACKET) // not an array
|
||||||
|
{
|
||||||
|
checkVar (var, b);
|
||||||
|
var = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (inFunction)
|
if (inFunction)
|
||||||
@ -285,16 +293,11 @@ public class SubLine implements ApplesoftConstants
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TOKEN_CALL:
|
case TOKEN_CALL:
|
||||||
byte[] lineBuffer = getBuffer ();
|
callTarget = getExpression ();
|
||||||
|
|
||||||
if (lineBuffer[0] == TOKEN_MINUS)
|
|
||||||
callTarget = "-" + new String (lineBuffer, 1, lineBuffer.length - 1);
|
|
||||||
else
|
|
||||||
callTarget = new String (lineBuffer, 0, lineBuffer.length);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TOKEN_DEF:
|
case TOKEN_DEF:
|
||||||
lineBuffer = getBuffer ();
|
byte[] lineBuffer = getBuffer ();
|
||||||
assert lineBuffer[0] == TOKEN_FN;
|
assert lineBuffer[0] == TOKEN_FN;
|
||||||
|
|
||||||
int leftBracket = getPosition (lineBuffer, 1, Utility.ASCII_LEFT_BRACKET);
|
int leftBracket = getPosition (lineBuffer, 1, Utility.ASCII_LEFT_BRACKET);
|
||||||
@ -310,6 +313,26 @@ public class SubLine implements ApplesoftConstants
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------------//
|
||||||
|
private String getExpression ()
|
||||||
|
// ---------------------------------------------------------------------------------//
|
||||||
|
{
|
||||||
|
StringBuilder text = new StringBuilder ();
|
||||||
|
|
||||||
|
int ptr = startPtr + 1;
|
||||||
|
int max = startPtr + length - 1;
|
||||||
|
while (ptr < max)
|
||||||
|
{
|
||||||
|
if (Utility.isHighBitSet (buffer[ptr]))
|
||||||
|
text.append (tokens[buffer[ptr] & 0x7F]);
|
||||||
|
else
|
||||||
|
text.append ((char) buffer[ptr]);
|
||||||
|
++ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return text.toString ();
|
||||||
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
private int getPosition (byte[] buffer, int start, byte value)
|
private int getPosition (byte[] buffer, int start, byte value)
|
||||||
// ---------------------------------------------------------------------------------//
|
// ---------------------------------------------------------------------------------//
|
||||||
|
Loading…
x
Reference in New Issue
Block a user