nc_program_manager/Cnc/Fanuc/IsoProgramFormatter.cs
dtrentin a5d73db69a refactor(rename): FanucProgramManager → NcProgramManager
Phase 06 complete:
- Namespace renamed in 62 .cs files (namespace + using directives)
- AssemblyName + RootNamespace updated in csproj files
- FanucProgramManager.csproj → NcProgramManager.csproj
- FanucProgramManager.sln → NcProgramManager.sln
- FanucProgramManager.Tests/ → NcProgramManager.Tests/
- FANUCMachine.cs deleted (dead code, zero references)

Fanuc-prefixed class names kept (FanucMachine, FanucProgram,
IFanucMachine) — manufacturer identifiers, not project names.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 22:31:36 +02:00

95 lines
3 KiB
C#
Executable file

namespace NcProgramManager.Cnc.Fanuc
{
public static class IsoProgramFormatter
{
public static string EnsureTitleBrackets(string program)
{
if (string.IsNullOrEmpty(program)) return program;
string head, body;
if (!SplitFirstNonEmptyLine(program, out head, out body)) return program;
int openAngle = head.IndexOf('<');
if (openAngle >= 0) return program;
int openPar = head.IndexOf('(');
int closePar = head.IndexOf(')');
int titleStart = FindTitleStart(head);
head = head.Insert(titleStart, "<");
if (closePar > 0)
{
openPar = head.IndexOf('(');
head = head.Insert(openPar, ">");
}
else
{
head = head + ">";
}
return head + body;
}
public static string InsertOrReplaceComment(string program, string comment)
{
if (string.IsNullOrEmpty(program)) return program;
program = EnsureTitleBrackets(program);
string head, body;
if (!SplitFirstNonEmptyLine(program, out head, out body)) return program;
int openPar = head.IndexOf('(');
int closePar = head.IndexOf(')');
if (openPar > 0 && closePar > openPar)
{
head = head.Remove(openPar + 1, closePar - openPar - 1);
head = head.Insert(openPar + 1, comment ?? "");
}
else
{
head = head + "(" + (comment ?? "") + ")";
}
return head + body;
}
public static string RenameAndComment(string program, string name, string comment)
{
if (string.IsNullOrEmpty(program)) return program;
string head, body;
if (!SplitFirstNonEmptyLine(program, out head, out body)) return program;
string newHead = "%\n<" + (name ?? "") + ">(" + (comment ?? "") + ")";
return newHead + body;
}
private static bool SplitFirstNonEmptyLine(string program, out string head, out string body)
{
head = program;
body = "";
bool sawFirstLf = false;
int lastLf = -1;
for (int i = 0; i < program.Length; i++)
{
if (program[i] == '\n')
{
if (sawFirstLf)
{
head = program.Substring(0, i);
body = program.Substring(i);
return true;
}
sawFirstLf = true;
lastLf = i;
}
}
return false;
}
private static int FindTitleStart(string head)
{
for (int i = 0; i < head.Length; i++)
{
if (head[i] == '\n') return i + 1;
}
return 0;
}
}
}