]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.1539: typst filetype is not recognized v9.0.1539
authorGaetan Lepage <gaetan@glepage.com>
Wed, 10 May 2023 21:01:55 +0000 (22:01 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 10 May 2023 21:01:55 +0000 (22:01 +0100)
Problem:    Typst filetype is not recognized.
Solution:   Distinguish between sql and typst. (Gaetan Lepage, closes #12363)

runtime/autoload/dist/ft.vim
runtime/doc/filetype.txt
runtime/filetype.vim
src/testdir/test_filetype.vim
src/version.c

index 3d9d60a75b73ed1a0e3f77534d78a51ab2fb09a1..7ac053eb2ffaa70d3e4eb10283a6c79d4453a784 100644 (file)
@@ -470,7 +470,7 @@ enddef
 
 # Returns true if file content looks like LambdaProlog module
 def IsLProlog(): bool
-  # skip apparent comments and blank lines, what looks like 
+  # skip apparent comments and blank lines, what looks like
   # LambdaProlog comment may be RAPID header
   var l: number = nextnonblank(1)
   while l > 0 && l < line('$') && getline(l) =~ '^\s*%' # LambdaProlog comment
@@ -1106,6 +1106,31 @@ export def FTlsl()
   endif
 enddef
 
+export def FTtyp()
+  if exists("g:filetype_typ")
+    exe "setf " .. g:filetype_typ
+    return
+  endif
+
+  # Look for SQL type definition syntax
+  for line in getline(1, 200)
+    # SQL type files may define the casing
+    if line =~ '^CASE\s\==\s\=\(SAME\|LOWER\|UPPER\|OPPOSITE\)$'
+      setf sql
+      return
+    endif
+
+    # SQL type files may define some types as follows
+    if line =~ '^TYPE\s.*$'
+      setf sql
+      return
+    endif
+  endfor
+
+  # Otherwise, affect the typst filetype
+  setf typst
+enddef
+
 # Set the filetype of a *.v file to Verilog, V or Cog based on the first 200
 # lines.
 export def FTv()
index b8686a18930c7faecef8b8fb2256943fb5c04d26..477ea7b25764ab37336c2a6fe4b1f25c49a8e7e9 100644 (file)
@@ -164,6 +164,7 @@ variables can be used to overrule the filetype used for certain extensions:
        *.sys           g:filetype_sys
        *.sh            g:bash_is_sh    |ft-sh-syntax|
        *.tex           g:tex_flavor    |ft-tex-plugin|
+       *.typ           g:filetype_typ
        *.w             g:filetype_w    |ft-cweb-syntax|
 
 For a few filetypes the global variable is used only when the filetype could
index 38db8a23b4abfda84d00328e7a727ead98020b9b..7618902fd59b59a5a97c17282f9a661fc3dd342b 100644 (file)
@@ -2058,7 +2058,10 @@ au BufNewFile,BufRead *.spy,*.spi                setf spyce
 au BufNewFile,BufRead squid.conf               setf squid
 
 " SQL for Oracle Designer
-au BufNewFile,BufRead *.tyb,*.typ,*.tyc,*.pkb,*.pks    setf sql
+au BufNewFile,BufRead *.tyb,*.tyc,*.pkb,*.pks  setf sql
+
+" *.typ can be either SQL or Typst files
+au BufNewFile,BufRead *.typ                    call dist#ft#FTtyp()
 
 " SQL
 au BufNewFile,BufRead *.sql                    call dist#ft#SQL()
index a68d7499a3253d38f8db7cac160cba4162009b8d..3e90381b3799fd331d6ace6cd2616e53eb28d898 100644 (file)
@@ -564,7 +564,7 @@ let s:filename_checks = {
     \ 'spice': ['file.sp', 'file.spice'],
     \ 'spup': ['file.speedup', 'file.spdata', 'file.spd'],
     \ 'spyce': ['file.spy', 'file.spi'],
-    \ 'sql': ['file.tyb', 'file.typ', 'file.tyc', 'file.pkb', 'file.pks'],
+    \ 'sql': ['file.tyb', 'file.tyc', 'file.pkb', 'file.pks'],
     \ 'sqlj': ['file.sqlj'],
     \ 'prql': ['file.prql'],
     \ 'sqr': ['file.sqr', 'file.sqi'],
@@ -2047,4 +2047,35 @@ func Test_lsl_file()
   filetype off
 endfunc
 
+func Test_typ_file()
+  filetype on
+
+  " SQL type file
+
+  call writefile(['CASE = LOWER'], 'Xfile.typ', 'D')
+  split Xfile.typ
+  call assert_equal('sql', &filetype)
+  bwipe!
+
+  call writefile(['TYPE foo'], 'Xfile.typ')
+  split Xfile.typ
+  call assert_equal('sql', &filetype)
+  bwipe!
+
+  " typst document
+
+  call writefile(['this is a fallback'], 'Xfile.typ')
+  split Xfile.typ
+  call assert_equal('typst', &filetype)
+  bwipe!
+
+  let g:filetype_typ = 'typst'
+  split test.typ
+  call assert_equal('typst', &filetype)
+  bwipe!
+  unlet g:filetype_typ
+
+  filetype off
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index 35a9708dcf53b60823cf49758233d2dde5b54fae..5d55e4c5ff921434f3b95b5e1c7f5e5dfee9eb19 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1539,
 /**/
     1538,
 /**/