15dfecf96Smrg;; 25dfecf96Smrg;; Copyright (c) 2003 by The XFree86 Project, Inc. 35dfecf96Smrg;; 45dfecf96Smrg;; Permission is hereby granted, free of charge, to any person obtaining a 55dfecf96Smrg;; copy of this software and associated documentation files (the "Software"), 65dfecf96Smrg;; to deal in the Software without restriction, including without limitation 75dfecf96Smrg;; the rights to use, copy, modify, merge, publish, distribute, sublicense, 85dfecf96Smrg;; and/or sell copies of the Software, and to permit persons to whom the 95dfecf96Smrg;; Software is furnished to do so, subject to the following conditions: 105dfecf96Smrg;; 115dfecf96Smrg;; The above copyright notice and this permission notice shall be included in 125dfecf96Smrg;; all copies or substantial portions of the Software. 135dfecf96Smrg;; 145dfecf96Smrg;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 155dfecf96Smrg;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 165dfecf96Smrg;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 175dfecf96Smrg;; THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 185dfecf96Smrg;; WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 195dfecf96Smrg;; OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 205dfecf96Smrg;; SOFTWARE. 215dfecf96Smrg;; 225dfecf96Smrg;; Except as contained in this notice, the name of the XFree86 Project shall 235dfecf96Smrg;; not be used in advertising or otherwise to promote the sale, use or other 245dfecf96Smrg;; dealings in this Software without prior written authorization from the 255dfecf96Smrg;; XFree86 Project. 265dfecf96Smrg;; 275dfecf96Smrg;; Author: Paulo César Pereira de Andrade 285dfecf96Smrg;; 295dfecf96Smrg;; 305dfecf96Smrg;; $XFree86: xc/programs/xedit/lisp/modules/progmodes/rpm.lsp,v 1.1 2003/01/16 03:50:46 paulo Exp $ 315dfecf96Smrg;; 325dfecf96Smrg 335dfecf96Smrg(require "syntax") 345dfecf96Smrg(in-package "XEDIT") 355dfecf96Smrg 365dfecf96Smrg;; Only for testing, unifinished, good for viewing but too slow for real use... 375dfecf96Smrg#| 385dfecf96Smrg(defsynprop *prop-rpm-special* 395dfecf96Smrg "rpm-special" 405dfecf96Smrg :font "*courier-bold-r*-12-*" 415dfecf96Smrg :foreground "NavyBlue" 425dfecf96Smrg) 435dfecf96Smrg 445dfecf96Smrg(defsynprop *prop-rpm-escape* 455dfecf96Smrg "rpm-escape" 465dfecf96Smrg :font "*lucidatypewriter-medium-r*-12-*" 475dfecf96Smrg :foreground "Red3") 485dfecf96Smrg 495dfecf96Smrg;; main package is implicit 505dfecf96Smrg(defsyntax *rpm-mode* :package nil nil nil 515dfecf96Smrg (syntable :sections nil nil 525dfecf96Smrg (syntoken "^%package" 535dfecf96Smrg :icase t 545dfecf96Smrg :switch :package 555dfecf96Smrg ;; XXX :begin :package was added just to test finishing and 565dfecf96Smrg ;; starting a new syntax-table, unfortunately if using it 575dfecf96Smrg ;; this way, frequently the entire file will be reparsed 585dfecf96Smrg ;; at every character typed. 595dfecf96Smrg ;; TODO study these cases and implement code to avoid it, 605dfecf96Smrg ;; the easiest way is limiting the number of backtracked lines, 615dfecf96Smrg ;; the screen contents sometimes could not correctly reflect 625dfecf96Smrg ;; file contents in this case... 635dfecf96Smrg :begin :package 645dfecf96Smrg :property *prop-rpm-special*) 655dfecf96Smrg (syntoken "^%(build|setup|install|pre|preun|post|postun)\\>" 665dfecf96Smrg :icase t 675dfecf96Smrg :property *prop-rpm-special* 685dfecf96Smrg :switch :package 695dfecf96Smrg :begin :shell) 705dfecf96Smrg ;; %changelog, XXX no rules to return to the toplevel 715dfecf96Smrg (syntoken "^%changelog\\>" 725dfecf96Smrg :icase t 735dfecf96Smrg :switch :package 745dfecf96Smrg :begin :changelog 755dfecf96Smrg :property *prop-rpm-special*) 765dfecf96Smrg (syntable :changelog nil nil 775dfecf96Smrg ;; ignore if escaped 785dfecf96Smrg (syntoken "%%") 795dfecf96Smrg ;; "warn" if not escaped 805dfecf96Smrg (syntoken "%" :property *prop-control*) 815dfecf96Smrg ;; emails 825dfecf96Smrg (syntoken "<[a-z0-9_-]+@[a-z0-9_-]+\\.\\w+(\\.\\w+)?>" 835dfecf96Smrg :icase t 845dfecf96Smrg :property *prop-string*) 855dfecf96Smrg ) 865dfecf96Smrg ;; comments 875dfecf96Smrg (syntoken "#" :contained t :nospec t :begin :comment) 885dfecf96Smrg (syntable :comment *prop-comment* nil 895dfecf96Smrg ;; some macros are expanded even when inside comments, and may 905dfecf96Smrg ;; cause surprises, "warn" about it 915dfecf96Smrg (syntoken "%\\{?\\w+\\}?" :property *prop-rpm-special*) 925dfecf96Smrg (syntoken "$" :switch -1) 935dfecf96Smrg ) 945dfecf96Smrg (synaugment :global) 955dfecf96Smrg ) 965dfecf96Smrg 975dfecf96Smrg ;; may appear anywhere 985dfecf96Smrg (syntable :global nil nil 995dfecf96Smrg ;; preprocessor like commands 1005dfecf96Smrg (syntoken "^%(define|if|ifarch|else|endif)\\>" 1015dfecf96Smrg :icase t 1025dfecf96Smrg :property *prop-preprocessor*) 1035dfecf96Smrg ;; variables 1045dfecf96Smrg (syntoken "%\\{.*\\}" :property *prop-constant*) 1055dfecf96Smrg ) 1065dfecf96Smrg 1075dfecf96Smrg ;; example: "Group: ..." or "Group(pt_BR): ..." 1085dfecf96Smrg (syntoken "^\\w+(\\(\\w+\\))?:" :property *prop-keyword*) 1095dfecf96Smrg 1105dfecf96Smrg ;; for sections with shell commands 1115dfecf96Smrg (syntable :shell nil nil 1125dfecf96Smrg (syntoken "\\<(if|then|elif|else|fi|for|do|done|case|esac|while|until)\\>" 1135dfecf96Smrg :property *prop-keyword*) 1145dfecf96Smrg (syntable :strings nil nil 1155dfecf96Smrg (syntoken "\"" :nospec t :begin :string :contained t) 1165dfecf96Smrg (syntable :string *prop-string* nil 1175dfecf96Smrg (syntoken "\\$\\(?\\w+\\)?" :property *prop-constant*) 1185dfecf96Smrg (syntoken "\\\\.") 1195dfecf96Smrg (syntoken "\"" :nospec t :switch -1) 1205dfecf96Smrg ) 1215dfecf96Smrg (syntoken "\'" :nospec t :begin :constant :contained t) 1225dfecf96Smrg (syntable :constant *prop-constant* nil 1235dfecf96Smrg (syntoken "\\\\.") 1245dfecf96Smrg (syntoken "\'" :nospec t :switch -1) 1255dfecf96Smrg ) 1265dfecf96Smrg (syntoken "\`" :nospec t :begin :escape :contained t) 1275dfecf96Smrg (syntable :escape *prop-rpm-escape* nil 1285dfecf96Smrg (syntoken "\\$\\(?\\w+\\)?" :property *prop-constant*) 1295dfecf96Smrg (syntoken "\\\\.") 1305dfecf96Smrg (syntoken "\`" :nospec t :switch -1) 1315dfecf96Smrg ) 1325dfecf96Smrg ) 1335dfecf96Smrg (synaugment :strings :sections) 1345dfecf96Smrg ) 1355dfecf96Smrg (synaugment :sections) 1365dfecf96Smrg) 1375dfecf96Smrg|# 1385dfecf96Smrg 1395dfecf96Smrg 1405dfecf96Smrg(defsyntax *rpm-mode* :package nil nil nil 1415dfecf96Smrg ;; commands, macro definitions, etc 1425dfecf96Smrg (syntoken "^\\s*%\\s*\\w+" :property *prop-keyword*) 1435dfecf96Smrg 1445dfecf96Smrg ;; rpm "variables" 1455dfecf96Smrg (syntoken "%\\{.*\\}" :property *prop-constant*) 1465dfecf96Smrg 1475dfecf96Smrg ;; package info, example: "Group: ...", "Group(pt_BR): ...", etc. 1485dfecf96Smrg (syntoken "^\\w+(\\(\\w+\\))?:" :property *prop-preprocessor*) 1495dfecf96Smrg 1505dfecf96Smrg ;; comments 1515dfecf96Smrg (syntoken "#" :contained t :nospec t :begin :comment) 1525dfecf96Smrg (syntable :comment *prop-comment* nil 1535dfecf96Smrg ;; some macros are expanded even when inside comments, and may 1545dfecf96Smrg ;; cause surprises, "warn" about it 1555dfecf96Smrg (syntoken "%define\\>" :property *prop-control*) 1565dfecf96Smrg (syntoken "%\\{?\\w+\\}?" :property *prop-string*) 1575dfecf96Smrg (syntoken "$" :switch -1) 1585dfecf96Smrg ) 1595dfecf96Smrg 1605dfecf96Smrg ;; emails 1615dfecf96Smrg (syntoken "<?[a-z0-9_-]+@[a-z0-9_-]+\\.\\w+(\\.\\w+)*>?" 1625dfecf96Smrg :icase t 1635dfecf96Smrg :property *prop-string*) 1645dfecf96Smrg ;; links 1655dfecf96Smrg (syntoken "\\<(http|ftp)://\\S+" :property *prop-string*) 1665dfecf96Smrg) 167