Changeset 4732


Ignore:
Timestamp:
Oct 4, 2021, 1:37:56 PM (3 years ago)
Author:
Andreas Schnellbacher
Message:
  • Added Shebangs and Signatures keys for mode determination.
Location:
trunk/src/netlabs
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/src/netlabs/bin/defaults.cfg

    r4715 r4732  
    716716\NEPMD\User\Mode\BIN\CaseSensitive                 = 1
    717717\NEPMD\User\Mode\BIN\Extensions                    = BIN EXE DLL LIB RES
     718\NEPMD\User\Mode\BIN:*.INI\Signatures              = \xFF\xFF\xFF\xFF\x14\x00
    718719\NEPMD\User\Mode\BIN\Tabs                          = 1
    719720\NEPMD\User\Mode\BIN\MatchTab                      = 0
     
    909910\NEPMD\User\Mode\PERL\CaseSensitive                = 0
    910911\NEPMD\User\Mode\PERL\Extensions                   = PL PRL PERL PM
     912\NEPMD\User\Mode\PERL:*.CMD\Shebangs               = *PERL*
     913\NEPMD\User\Mode\PERL:*.\Shebangs                  = *PERL*
    911914\NEPMD\User\Mode\PERL\LineComment                  = #
    912915\NEPMD\User\Mode\PERL\LineCommentPos               = 0
     
    917920\NEPMD\User\Mode\PHP\CaseSensitive                 = 0
    918921\NEPMD\User\Mode\PHP\Extensions                    = PHP PHP3 PHP4
     922\NEPMD\User\Mode\PHP:*.CMD\Shebangs                = *PHP*
     923\NEPMD\User\Mode\PHP:*.\Shebangs                   = *PHP*
    919924\NEPMD\User\Mode\PHP\LineComment                   = # //
    920925\NEPMD\User\Mode\PHP\LineCommentPos                = 0 0
     
    929934\NEPMD\User\Mode\PYTHON\CaseSensitive              = 1
    930935\NEPMD\User\Mode\PYTHON\Extensions                 = PY
     936\NEPMD\User\Mode\PYTHON:*.CMD\Shebangs             = *PYTHON*
     937\NEPMD\User\Mode\PYTHON:*.\Shebangs                = *PYTHON*
    931938\NEPMD\User\Mode\PYTHON\LineComment                = #
    932939\NEPMD\User\Mode\PYTHON\LineCommentPos             = 0
     
    955962\NEPMD\User\Mode\REXX\CaseSensitive                = 0
    956963\NEPMD\User\Mode\REXX\Extensions                   = CWX ERX EXC EXEC KEX LX LXL R REX REXX RX RXX THE VRM VRS VRX X XEDIT ZRX
     964\NEPMD\User\Mode\REXX:*.CMD\Signatures             = /*
    957965\NEPMD\User\Mode\REXX\MultiLineCommentStart        = /*
    958966\NEPMD\User\Mode\REXX\MultiLineCommentEnd          = */
  • TabularUnified trunk/src/netlabs/macros/mode.e

    r4731 r4732  
    7373      ModeList = NepmdQueryModeList()
    7474
    75       -- Handle temp. epmkwds files
     75      -- Handle temp. epmkwds files. The mode is the name.
    7676      if upcase( GetFileSpec( 'DP', Filename)) = upcase( GetTmpPath()'nepmd\hilite\') then
    7777         Next = upcase( Name)
     
    8282      endif
    8383
    84       -- Handle .hil files
     84      -- Handle .hil files. The mode is the subdir name.
    8585      if Ext = 'HIL' then
    8686         HilFilePath      = upcase( GetFileSpec( 'DP', Filename))
     
    9999            leave
    100100         endif
    101       endif
    102 
    103 -- TODO:
    104 -- Remove this when Extproc, Shebang, Signature keys are implemented
    105       -- Handle REXX and INI
     101         NepmdDevDir = Get_Env( 'NEPMD_DEVDIR')
     102         if NepmdDevDir then
     103            DevHiliteDir = upcase( NepmdDevDir'\src\netlabs\hilite')
     104            if pos( DevHiliteDir, HilFilePath) = 1 then
     105               Next = substr( HilFilePath, length( DevHiliteDir) + 2,
     106                  length( HilFilePath) - length( DevHiliteDir) - 2)
     107               FoundMode = Next
     108               leave
     109            endif
     110         endif
     111      endif
     112
    106113      SigStr = ''
    107114
     115      -- Handle EXTPROC in .cmd files. This doesn't need a setting, because
     116      -- EXTPROC exists only for CMD files. Only modes of ModeList are found.
    108117      if Ext = 'CMD' then
    109118         if SigStr = '' then
    110119            SigStr = NepmdReadFilePart( Filename)
    111120         endif
    112          -- REXX
    113          if leftstr( SigStr, 2) = '/' || '*' then
    114             FoundMode = 'REXX'
    115             leave
    116          endif
    117121         -- Extproc
    118122         -- Replace tab, LF and CR with spaces
    119          Next = translate( SigStr, \32\32\32, \9\10\13)
     123         Next = upcase( translate( SigStr, \32\32\32, \9\10\13))
    120124         -- First word must be 'EXTPROC'
    121          if upcase( strip( word( Next, 1))) = 'EXTPROC' then
     125         if strip( word( Next, 1)) = 'EXTPROC' then
    122126            -- Get basename of second word
    123127            Proc = strip( word( Next, 2))
    124128            if Proc <> '' then
    125129               ProcBase = GetFileSpec( 'B', Proc)
    126                FoundMode = upcase( ProcBase)
    127                leave
     130               -- Mode must exist
     131               if wordpos( ProcBase, ModeList) then
     132                  FoundMode = upcase( ProcBase)
     133                  leave
     134               endif
    128135            endif
    129136         endif
    130          -- OS/2 CMD
    131          FoundMode = 'CMD'
    132          leave
    133       endif
    134 
    135       if Ext = 'INI' then
    136          if SigStr = '' then
    137             SigStr = NepmdReadFilePart( Filename)
    138          endif
    139          -- OS/2 INI
    140          if leftstr( SigStr, 6) = \xFF\xFF\xFF\xFF\x14\x00 then
    141             FoundMode = 'BIN'
    142             leave
    143          endif
    144          -- Text INI
    145          FoundMode = 'INI'
    146          leave
    147       endif
    148 
    149       -- Query extended mode list
     137      endif
     138
     139      -- GetMatchModeFileMaskList matches a filemask against Filename.
     140      -- After that, the begin of a file has to be read to check if it
     141      -- matches the specified values for Shebangs or Signatures.
     142      FoundModeFileMaskList = GetMatchModeFileMaskList( Filename)
     143
     144      -- Query extended mode list to get mode and type
    150145      ExModeList = NepmdQueryModeList( 1)
    151146      Rest = ExModeList
     
    154149         ThisMode = strip( ThisMode)
    155150
    156 -- TODO: Add Extproc, Shebang, Signature
     151         -- Shebangs, Signatures
     152         Sep = \0
     153         RestModeFileMask = FoundModeFileMaskList
     154         do while RestModeFileMask <> ''
     155            parse value RestModeFileMask with ThisMode':'ThisFileMask (Sep) RestModeFileMask
     156            -- Ignore * and *.* as ThisFileMask to avoid reading all files
     157            if wordpos( ThisFileMask, '* *.*') then
     158               iterate
     159            endif
     160            -- Filemasks of FoundModeFileMaskList already match filename.
     161            -- Now check the file begin for a matching Shebang or signature.
     162            SettingNames = 'Shebangs Signatures'
     163            do s = 1 to words( SettingNames)
     164               ThisSettingName = word( SettingNames, s)
     165               FilterList = upcase( QueryModeKey( ThisMode':'ThisFileMask, ThisSettingName))
     166               do w = 1 to words( FilterList)
     167                  ThisFilter = word( FilterList, w)
     168                  if SigStr = '' then
     169                     SigStr = NepmdReadFilePart( Filename)
     170                  endif
     171                  CheckStr = upcase( strip( translate( SigStr, ' ', \9)))
     172                  if ThisSettingName = 'Shebangs' then
     173                     if leftstr( CheckStr, 2) = '!#' then
     174                        CheckStr = strip( substr( CheckStr, 3))
     175                     endif
     176                  endif
     177                  if StrMatch( ' 'CheckStr' ', ' 'ThisFilter' ') then
     178                     FoundMode = ThisMode
     179                     leave
     180                  endif
     181               enddo  -- w
     182               if FoundMode <> '' then
     183                  leave
     184               endif
     185            enddo  -- s
     186            if FoundMode <> '' then
     187               leave
     188            endif
     189         enddo  -- while RestModeFileMask
     190         if FoundMode <> '' then
     191            leave
     192         endif
    157193
    158194         -- Extensions
     
    190226         endif
    191227
    192       enddo
    193    enddo
     228      enddo  -- while Rest
     229   enddo  -- once
    194230
    195231   -- General default mode
Note: See TracChangeset for help on using the changeset viewer.