From 73a6d158324e19a2ccb22ef60a19b8213f358465 Mon Sep 17 00:00:00 2001
From: Hans Unzner <hansunzner@gmail.com>
Date: Sat, 24 Aug 2024 09:55:02 +0200
Subject: [PATCH] Use now GtkSourceview 4

Removed ngc.lang as it is in the old specification format version 1.0.
Use now gcode.lang - this one is also suitable for gedit like mentioned in ngc.lang.
---
 debian/control.main-pkg.in                    |   2 +-
 debian/linuxcnc.install.in                    |   2 +-
 docs/src/gui/gladevcp.adoc                    |   2 +-
 lib/python/gladevcp/gtksourceview.xml         |   2 +-
 lib/python/gladevcp/hal_sourceview.py         |   8 +-
 .../gtksourceview-2.0/language-specs/ngc.lang | 110 ------------------
 .../language-specs/gcode.lang                 |   0
 src/Makefile                                  |   4 +-
 src/emc/usr_intf/gmoccapy/gmoccapy.py         |   2 +-
 9 files changed, 11 insertions(+), 121 deletions(-)
 delete mode 100644 share/gtksourceview-2.0/language-specs/ngc.lang
 rename share/{gtksourceview-2.0 => gtksourceview-4}/language-specs/gcode.lang (100%)

diff --git a/debian/control.main-pkg.in b/debian/control.main-pkg.in
index 6eecc4db12a..18454accc52 100644
--- a/debian/control.main-pkg.in
+++ b/debian/control.main-pkg.in
@@ -22,7 +22,7 @@ Depends:
     python3-opengl,
     python3-configobj,
     python3-xlib,
-    libgtksourceview-3.0-dev,
+    libgtksourceview-4-dev,
     tcl@TCLTK_VERSION@,
     tk@TCLTK_VERSION@,
     bwidget (>= 1.7),
diff --git a/debian/linuxcnc.install.in b/debian/linuxcnc.install.in
index a6b50d6a1e6..04a3d15228b 100644
--- a/debian/linuxcnc.install.in
+++ b/debian/linuxcnc.install.in
@@ -119,7 +119,7 @@ usr/share/axis
 usr/share/glade
 usr/share/gmoccapy
 usr/share/gscreen
-usr/share/gtksourceview-2.0
+usr/share/gtksourceview-4
 
 usr/share/applications/linuxcnc.desktop
 usr/share/applications/linuxcnc-latency.desktop
diff --git a/docs/src/gui/gladevcp.adoc b/docs/src/gui/gladevcp.adoc
index 9f9c6388b9b..36c927f2d04 100644
--- a/docs/src/gui/gladevcp.adoc
+++ b/docs/src/gui/gladevcp.adoc
@@ -1919,7 +1919,7 @@ image::images/offsetpage.png[align="center"]
 === HAL_sourceview widget
 
 This is for displaying and simple editing of G-code.
-It looks for `.ngc` highlighting specs in `~/share/gtksourceview-2.0/language-specs/`.
+It looks for `.ngc` highlighting specs in `~/share/gtksourceview-4/language-specs/`.
 The current running line will be highlighted.
 
 With external Python glue code it can:
diff --git a/lib/python/gladevcp/gtksourceview.xml b/lib/python/gladevcp/gtksourceview.xml
index 67afa186a4b..e97e798d20f 100644
--- a/lib/python/gladevcp/gtksourceview.xml
+++ b/lib/python/gladevcp/gtksourceview.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<glade-catalog name="gtksourceview" library="gtksourceview-2.0" depends="gtk+">
+<glade-catalog name="gtksourceview" library="gtksourceview-4" depends="gtk+">
   <glade-widget-classes>
     <glade-widget-class name="GtkSourceView" title="GtkSourceView" generic-name="gtksourceview">
       <properties>
diff --git a/lib/python/gladevcp/hal_sourceview.py b/lib/python/gladevcp/hal_sourceview.py
index 7c29f4faa99..b1db41ee1c0 100644
--- a/lib/python/gladevcp/hal_sourceview.py
+++ b/lib/python/gladevcp/hal_sourceview.py
@@ -25,7 +25,7 @@
 import gi
 gi.require_version("Gtk","3.0")
 gi.require_version("Gdk","3.0")
-gi.require_version("GtkSource","3.0")
+gi.require_version("GtkSource","4")
 from gi.repository import Gtk
 from gi.repository import Gdk
 from gi.repository import GObject
@@ -62,10 +62,10 @@ def __init__(self, *a, **kw):
         self.lm = GtkSource.LanguageManager()
         self.sm = GtkSource.StyleSchemeManager()
         if 'EMC2_HOME' in os.environ:
-            path = os.path.join(os.environ['EMC2_HOME'], 'share/gtksourceview-2.0/language-specs/')
+            path = os.path.join(os.environ['EMC2_HOME'], 'share/gtksourceview-4/language-specs/')
             self.lm.set_search_path(self.lm.get_search_path() + [path])
 
-        self.buf.set_language(self.lm.get_language('.ngc'))
+        self.buf.set_language(self.lm.get_language('gcode'))
         self.set_show_line_numbers(True)
         self.set_show_line_marks(True)
         self.set_highlight_current_line(True)
@@ -116,7 +116,7 @@ def set_language(self, lang, path = None):
         # lang = the lang file to set
         if path == None:
             if 'EMC2_HOME' in os.environ:
-                path = os.path.join(os.environ['EMC2_HOME'], 'share/gtksourceview-2.0/language-specs/')
+                path = os.path.join(os.environ['EMC2_HOME'], 'share/gtksourceview-4/language-specs/')
         if path:
             self.lm.set_search_path(path)
         self.buf.set_language(self.lm.get_language(lang))
diff --git a/share/gtksourceview-2.0/language-specs/ngc.lang b/share/gtksourceview-2.0/language-specs/ngc.lang
deleted file mode 100644
index 39943e9c2f6..00000000000
--- a/share/gtksourceview-2.0/language-specs/ngc.lang
+++ /dev/null
@@ -1,110 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE language SYSTEM "language.dtd">
-<!-- 
-	ngc.lang is a Highlight-mode file for gedit,
-	written by Jan Van Gilsen <janvangilsen(at)gmail(dot)com>
-	Installation instructions can be found at:
-	http://wiki.linuxcnc.org/cgi-bin/emcinfo.pl?Highlighting_In_Gedit
-	
-	Version		: 0.3
-	Last Edit	: 10Th Nov 2007, by Jan Van Gilsen
-	Comment 	: added probing and rigid tapping G-codes (new in 2.2)
--->
-<language name=".ngc" version="1.0" _section="Others" mimetypes="text/ngc">
-	<default-regex-options case-sensitive= "false"></default-regex-options>
-	
-	<block-comment _name = "Block Comment" style= "Comment">
-		<start-regex>\(</start-regex>
-		<end-regex>\)</end-regex>
-	</block-comment>
-
-	<pattern-item _name = "Line Comment" style = "Comment">
-		<regex>;.*</regex>
-	</pattern-item>
-
-	<pattern-item _name = "Variable" style = "Variable">
-		<regex>(#[0-9]+)|(#&lt;[a-zA-Z0-9_]+&gt;)</regex>
-	</pattern-item>
-	<keyword-list name = "Math Functions" style = "Function" case-sensitive="FALSE">
-		<keyword>sin</keyword>
-		<keyword>cos</keyword>
-		<keyword>tan</keyword>
-		<keyword>asin</keyword>
-		<keyword>acos</keyword>
-		<keyword>atan</keyword>
-		<keyword>exp</keyword>
-		<keyword>ln</keyword>
-		<keyword>sqrt</keyword>
-		<keyword>fup</keyword>
-		<keyword>fix</keyword>
-		<keyword>abs</keyword>
-		<keyword>or|xor|and</keyword>
-		<keyword>mod</keyword>
-		<keyword>gt|lt|ge|le|eq|ne</keyword>
-	</keyword-list>
-	<pattern-item _name = "Operators" style = "Function">
-		<regex>(([-/|\=\+\*])|(\])|(\[))</regex>
-	</pattern-item>
-	<pattern-item _name = "Line Number" style = "Comment">
-		<regex>^[n|N]([ |\t]*[0-9]){1,5}</regex>
-	</pattern-item>
-	
-	<keyword-list _name = "G-Codes" style = "Keywords" case-sensitive="FALSE"
-		match-empty-string-at-beginning = "FALSE"
-		match-empty-string-at-end = "FALSE"
-		beginning-regex = "[g|G]([ \t]*[0])*[ \t]*">
-		<keyword>[0-5]</keyword>
-		<keyword>1[ \t]*[07-9]</keyword>
-		<keyword>2[ \t]*[018]</keyword>
-		<keyword>3[ \t]*[03]</keyword>
-		<keyword>3[ \t]*3[ \t]*.[ \t]*1</keyword>
-		<keyword>3[ \t]*8[ \t]*.[ \t]*[2-5]</keyword>
-		<keyword>4[ \t]*[1-3][ \t]*.[ \t]*1</keyword>
-		<keyword>4[ \t]*[0-39]</keyword>
-		<keyword>5[ \t]*[3-9]</keyword>
-		<keyword>6[ \t]*[14]</keyword>
-		<keyword>6[ \t]*.[ \t]*1</keyword>
-		<keyword>7[ \t]*6</keyword>
-		<keyword>8[ \t]*[0-9]</keyword>
-		<keyword>9[ \t]*[0-489]</keyword>
-		<keyword>9[ \t]*2[ \t]*.[ \t]*[1-3]</keyword>
-	</keyword-list>
-	<keyword-list _name = "M-Codes" style = "Keywords" case-sensitive="FALSE"
-		match-empty-string-at-beginning = "FALSE"
-		match-empty-string-at-end = "FALSE"
-		beginning-regex = "[m|M]([ \t]*[0])*[ \t]*">
-		<keyword>[0-9]</keyword>
-		<keyword>5[ \t]*[0-3]</keyword>
-		<keyword>3[ \t]*0</keyword>
-		<keyword>6[ \t]*0</keyword>
-		<keyword>1[ \t]*[0-9][ \t]*[1-9]</keyword>
-		<keyword>1[ \t]*[1-9][ \t]*0</keyword>
-	</keyword-list>
-	<pattern-item _name = "F,S-Codes" style = "Keywords">
-		<regex>[f|F|s|S]([ \t]*[0-9])*[ \t]*[.]?([ \t]*[0-9])*</regex>
-	</pattern-item>	
-	<pattern-item _name = "T,H-Codes" style = "Keywords">
-		<regex>[t|T|h|H]([ \t]*[0-9])*</regex>
-	</pattern-item>
-	<pattern-item _name = "Coordinates" style = "Decimal">
-		<regex>[x|X|y|Y|z|Z|a|A|b|B|c|C|u|U|v|V|w|W|i|I|j|J|k|K|p|P|r|R|l|L][ \t]*[+|-]?[ \t]*([ \t]*[0-9]*)*[ \t]*[.]?([ \t]*[0-9]*)*</regex>
-	</pattern-item>
-	
-	<keyword-list _name = "O-Codes" style = "Preprocessor" case-sensitive="FALSE"
-		match-empty-string-at-beginning = "FALSE"
-		match-empty-string-at-end = "FALSE"		
-		beginning-regex = "^[ \t]*[o|O]([ \t]*[0-9]|&lt;[a-zA-Z0-9_]+&gt;)* ">
-		<keyword>sub</keyword>
-		<keyword>endsub</keyword>
-		<keyword>while</keyword>
-		<keyword>endwhile</keyword>
-		<keyword>if</keyword>
-		<keyword>else</keyword>
-		<keyword>endif</keyword>
-		<keyword>do</keyword>
-		<keyword>call</keyword>
-		<keyword>break</keyword>
-		<keyword>continue</keyword>
-		<keyword>return</keyword>
-	</keyword-list>
-</language>
diff --git a/share/gtksourceview-2.0/language-specs/gcode.lang b/share/gtksourceview-4/language-specs/gcode.lang
similarity index 100%
rename from share/gtksourceview-2.0/language-specs/gcode.lang
rename to share/gtksourceview-4/language-specs/gcode.lang
diff --git a/src/Makefile b/src/Makefile
index daeb4aa151e..5c359cb19dc 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -688,7 +688,7 @@ install-dirs:
 		$(DESTDIR)$(datadir)/gmoccapy/icons \
 		$(DESTDIR)$(datadir)/glade/catalogs \
 		$(DESTDIR)$(datadir)/glade/pixmaps/hicolor/22x22/actions \
-		$(DESTDIR)$(datadir)/gtksourceview-2.0/language-specs \
+		$(DESTDIR)$(datadir)/gtksourceview-4/language-specs \
 		$(DESTDIR)$(datadir)/linuxcnc/stepconf \
 		$(DESTDIR)$(datadir)/linuxcnc/pncconf \
 		$(DESTDIR)$(datadir)/linuxcnc/pncconf/pncconf-help \
@@ -764,7 +764,7 @@ install-kernel-indep: install-dirs
 	$(FILE) ../lib/python/gladevcp/hal_python.xml $(DESTDIR)$(datadir)/glade/catalogs/
 	$(FILE) ../share/glade/pixmaps/hicolor/22x22/actions/widget*.png  $(DESTDIR)$(datadir)/glade/pixmaps/hicolor/22x22/actions/
 
-	$(FILE) ../share/gtksourceview-2.0/language-specs/*.lang  $(DESTDIR)$(datadir)/gtksourceview-2.0/language-specs/
+	$(FILE) ../share/gtksourceview-4/language-specs/*.lang  $(DESTDIR)$(datadir)/gtksourceview-4/language-specs/
 
 	$(FILE) ../src/hal/drivers/mesa-hostmot2/modbus/*.tmpl  $(DESTDIR)$(prefix)/share/linuxcnc/
 
diff --git a/src/emc/usr_intf/gmoccapy/gmoccapy.py b/src/emc/usr_intf/gmoccapy/gmoccapy.py
index 7782f54a61b..b3ed91fd6e1 100644
--- a/src/emc/usr_intf/gmoccapy/gmoccapy.py
+++ b/src/emc/usr_intf/gmoccapy/gmoccapy.py
@@ -426,7 +426,7 @@ def __init__(self, argv):
         # check the highlighting type
         # the following would load the python language
         # self.widgets.gcode_view.set_language("python")
-        LANGDIR = os.path.join(BASE, "share", "Gtksourceview-2.0", "language-specs")
+        LANGDIR = os.path.join(BASE, "share", "Gtksourceview-4", "language-specs")
         file_path = os.path.join(LANGDIR, "gcode.lang")
         if os.path.isfile(file_path):
             LOG.info("Gcode.lang found")