Skip to content

Commit 7c74ddf

Browse files
authored
Merge branch 'master' into features/graphics_rework
2 parents 1c74aa3 + b886d80 commit 7c74ddf

5 files changed

Lines changed: 69 additions & 15 deletions

File tree

ZXBStudio/BuildSystem/ZXBasicMap.cs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -562,23 +562,27 @@ private static ZXVariableStorage StorageFromString(string? Value, string Variabl
562562

563563
private static int GetDimensionSize(string DimensionString)
564564
{
565-
int size = 0;
566-
567-
if (!int.TryParse(DimensionString, out size))
565+
try
568566
{
569-
if (DimensionString.ToLower().Contains("to"))
567+
int size = 0;
568+
569+
if (!int.TryParse(DimensionString, out size))
570570
{
571-
string[] parts = DimensionString.ToLower().Split("to");
572-
if (parts.Length == 1)
573-
return int.Parse(parts[0]);
571+
if (DimensionString.ToLower().Contains("to"))
572+
{
573+
string[] parts = DimensionString.ToLower().Split("to");
574+
if (parts.Length == 1)
575+
return int.Parse(parts[0]);
576+
else
577+
return int.Parse(parts[1]) - int.Parse(parts[0]) + 1;
578+
}
574579
else
575-
return int.Parse(parts[1]) - int.Parse(parts[0]) + 1;
580+
return 0;
576581
}
577-
else
578-
return 0;
579-
}
580582

581-
return size;
583+
return size;
584+
}
585+
catch { return 0; }
582586
}
583587
}
584588

ZXBStudio/DocumentEditors/ZXTextEditor/Classes/Folding/ZXBasicFoldingStrategy.cs

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace ZXBasicStudio.DocumentEditors.ZXTextEditor.Classes.Folding
1212
{
1313
public class ZXBasicFoldingStrategy : AbstractFoldingStrategy
1414
{
15-
Regex regStartSubFold = new Regex("(^|:)[^\\S\\r\\n^:]*(fastcall)?[^\\S\\r\\n^:]*?(sub|function)\\s+(fastcall\\s+)?([^\\s\\(]+)\\([^\\n]*?$", RegexOptions.Multiline | RegexOptions.IgnoreCase);
15+
Regex regStartSubFold = new Regex("(^|:)[^\\S\\r\\n^:]*(fastcall)?[^\\S\\r\\n^:]*?(sub|function)\\s+(fastcall\\s+)?([^\\s\\(]+)\\s*?\\([^\\n]*?$", RegexOptions.Multiline | RegexOptions.IgnoreCase);
1616
Regex regEndSubFold = new Regex("(^|[^\\S\\r\\n^:]+|:)[^\\S\\r\\n^:]*?end\\s+(sub|function)", RegexOptions.Multiline | RegexOptions.IgnoreCase);
1717

1818
Regex regStartCommentFold = new Regex("/'", RegexOptions.Multiline | RegexOptions.IgnoreCase);
@@ -27,6 +27,9 @@ public class ZXBasicFoldingStrategy : AbstractFoldingStrategy
2727
Regex regStartMultiDefine = new Regex("^[^\\S$\\n]*?#define\\s+(\\w+(\\([^\\)]*\\)?))[^\\n]*?\\\\[^\\S$\\n]*?$", RegexOptions.Multiline | RegexOptions.IgnoreCase);
2828
Regex regEndMultiDefine = new Regex("^[^\\\\]*?$", RegexOptions.Multiline | RegexOptions.IgnoreCase);
2929

30+
Regex regStartProcedure = new Regex("^\\s*?PROC\\s*?[\\r\\n;]", RegexOptions.Multiline | RegexOptions.IgnoreCase);
31+
Regex regEndProcedure = new Regex("^\\s*?ENDP\\s*?[\\r\\n;]", RegexOptions.Multiline | RegexOptions.IgnoreCase);
32+
3033
public override IEnumerable<NewFolding> CreateNewFoldings(TextDocument document, out int firstErrorOffset)
3134
{
3235
int subError = -1;
@@ -39,15 +42,18 @@ public override IEnumerable<NewFolding> CreateNewFoldings(TextDocument document,
3942
var regionFoldings = CreateRegionFoldings(document, out regionError);
4043
int defineError = -1;
4144
var defineFoldings = CreateMultiDefineFoldings(document, out defineError);
45+
int procedureError = -1;
46+
var procedureFoldings = CreateProcedureFoldings(document, out procedureError);
4247

4348
List<NewFolding> allFoldings = new List<NewFolding>();
4449
allFoldings.AddRange(subFoldings);
4550
allFoldings.AddRange(commentFoldings);
4651
allFoldings.AddRange(dimFoldings);
4752
allFoldings.AddRange(regionFoldings);
4853
allFoldings.AddRange(defineFoldings);
54+
allFoldings.AddRange(procedureFoldings);
4955

50-
int[] errs = new int[] { subError, commentError, dimError, regionError, defineError };
56+
int[] errs = new int[] { subError, commentError, dimError, regionError, defineError, procedureError };
5157

5258
firstErrorOffset = !errs.Any(e => e != -1) ? -1 : errs.Where(e => e != -1).Min();
5359

@@ -201,6 +207,31 @@ private IEnumerable<NewFolding> CreateMultiDefineFoldings(TextDocument document,
201207
foldings.Add(new NewFolding { StartOffset = start.Index, EndOffset = end.Index + end.Length - disp, DefaultClosed = true, IsDefinition = true, Name = name });
202208
}
203209

210+
return foldings;
211+
}
212+
private IEnumerable<NewFolding> CreateProcedureFoldings(TextDocument document, out int firstErrorOffset)
213+
{
214+
firstErrorOffset = -1;
215+
216+
List<NewFolding> foldings = new List<NewFolding>();
217+
var startFoldings = regStartProcedure.Matches(document.Text).ToArray();
218+
219+
for (int buc = 0; buc < startFoldings.Length; buc++)
220+
{
221+
var start = startFoldings[buc];
222+
223+
var end = regEndProcedure.Match(document.Text, start.Index + start.Length);
224+
225+
if (end == null || !end.Success)
226+
continue;
227+
228+
string name = "PROC";
229+
230+
int disp = end.Value.EndsWith('\n') || end.Value.EndsWith('\r') ? 1 : 0;
231+
232+
foldings.Add(new NewFolding { StartOffset = start.Index, EndOffset = end.Index + end.Length - disp, DefaultClosed = false, IsDefinition = false, Name = name });
233+
}
234+
204235
return foldings;
205236
}
206237
}

ZXBStudio/DocumentEditors/ZXTextEditor/Controls/ZXBasicEditor.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,11 @@ public class ZXBasicEditor : ZXTextEditor
394394
new ZXBasicCompletionData(ZXBasicCompletionType.Assembler, "ORG", "Set origin."),
395395
new ZXBasicCompletionData(ZXBasicCompletionType.Assembler, "ASM", "End assembly."),
396396
new ZXBasicCompletionData(ZXBasicCompletionType.Assembler, "ALIGN", "Align section."),
397+
new ZXBasicCompletionData(ZXBasicCompletionType.Assembler, "PROC", "Procedure start."),
398+
new ZXBasicCompletionData(ZXBasicCompletionType.Assembler, "ENDP", "Procedure end."),
399+
new ZXBasicCompletionData(ZXBasicCompletionType.Assembler, "LOCAL", "Procedure local label."),
397400
};
401+
//Also contains flags
398402
static ZXBasicCompletionData[] assemblerRegisters = new ZXBasicCompletionData[]
399403
{
400404
new ZXBasicCompletionData(ZXBasicCompletionType.Assembler, "AF", "Register pair."),
@@ -419,6 +423,14 @@ public class ZXBasicEditor : ZXTextEditor
419423
new ZXBasicCompletionData(ZXBasicCompletionType.Assembler, "IXL", "Register."),
420424
new ZXBasicCompletionData(ZXBasicCompletionType.Assembler, "IYH", "Register."),
421425
new ZXBasicCompletionData(ZXBasicCompletionType.Assembler, "IYL", "Register."),
426+
new ZXBasicCompletionData(ZXBasicCompletionType.Assembler, "Z", "Zero flag set."),
427+
new ZXBasicCompletionData(ZXBasicCompletionType.Assembler, "NZ", "Zero flag not set."),
428+
new ZXBasicCompletionData(ZXBasicCompletionType.Assembler, "C", "Carry flag set."),
429+
new ZXBasicCompletionData(ZXBasicCompletionType.Assembler, "NC", "Carry flag not set."),
430+
new ZXBasicCompletionData(ZXBasicCompletionType.Assembler, "M", "Sign flag set."),
431+
new ZXBasicCompletionData(ZXBasicCompletionType.Assembler, "P", "Sign flag not set."),
432+
new ZXBasicCompletionData(ZXBasicCompletionType.Assembler, "PE", "Parity/overflow flag set."),
433+
new ZXBasicCompletionData(ZXBasicCompletionType.Assembler, "PO", "Parity/overflow flag not set."),
422434
};
423435
static ZXBasicCompletionData[] assembler;
424436

ZXBStudio/DocumentEditors/ZXTextEditor/Controls/ZXTextEditor.axaml.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -778,6 +778,13 @@ private void Document_Changed(object? sender, DocumentChangeEventArgs e)
778778
if (!allowsBreakpoints || e.OffsetChangeMap == null || e.OffsetChangeMap.Count == 0)
779779
return;
780780

781+
782+
if (updateFoldingsTimer != null)
783+
{
784+
updateFoldingsTimer.IsEnabled = false;
785+
updateFoldingsTimer.IsEnabled = true;
786+
}
787+
781788
// TODO: DUEFECTU 2023.05.17 - if e.OffsetChangeMap.Count == 0, e.OffsetChangeMap[0].Offset throws a null reference exception
782789
if (e.OffsetChangeMap.Count == 0)
783790
{

ZXBStudio/ZXBasicStudio.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -522,7 +522,7 @@
522522

523523
<ItemGroup>
524524
<PackageReference Include="Avalonia" Version="11.0.6" />
525-
<PackageReference Include="Avalonia.AvaloniaEdit" Version="11.0.5" />
525+
<PackageReference Include="Avalonia.AvaloniaEdit" Version="11.0.6" />
526526
<PackageReference Include="Avalonia.Desktop" Version="11.0.6" />
527527
<PackageReference Include="Avalonia.Svg.Skia" Version="11.0.0.9" />
528528
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.0.6" />

0 commit comments

Comments
 (0)